[
  {
    "path": ".gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [joemayo]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/general-template.md",
    "content": "---\nname: New Issue\nabout: Create a report to help us improve LINQ To Twitter\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n### Please let us know what you use:\n\n- .NET SDK version:\n- LINQ To Twitter Version:\n- Twitter API version (v1/v2)\n\n### Describe the issue\n<!-- A clear and concise description of what the issue is. -->\n\n\n### Error / Console Output\n\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n#*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush\n.cr/\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n/Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/MvcDemo\n"
  },
  {
    "path": "BuildScripts/LinqToTwitter.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd\">\n  <metadata>\n    <id>linqtotwitter</id>\n    <version>0</version>\n    <title>LINQ to Twitter</title>\n    <authors>Joe Mayo</authors>\n    <owners>Joe Mayo</owners>\n    <requireLicenseAcceptance>true</requireLicenseAcceptance>\n    <license type=\"expression\">Apache-2.0</license>\n    <projectUrl>https://github.com/JoeMayo/LinqToTwitter</projectUrl>\n    <icon>200xColor_2.png</icon>\n    <description>LINQ to Twitter is a 3rd party LINQ Provider that lets you tweet and query with the Twitter API.</description>\n    <releaseNotes>- Fixed List processing for Memberships, Ownerships, and Subscriptions queries\n- Added Full Search query\n- Added Compliance queries and command\n    </releaseNotes>\n    <tags>twitter twitterapi twitterdev tweet linq social linqtotwitter linq2twitter</tags>\n    <dependencies>\n      <group targetFramework=\"net461\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n      </group>\n      <group targetFramework=\"net5.0\">\n        <dependency id=\"System.Text.Json\" version=\"5.0.1\" />\n      </group>\n      <group targetFramework=\"uap10.0\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n      </group>\n      <group targetFramework=\"xamarin.ios\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n      </group>\n      <group targetFramework=\"xamarin.mac\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n      </group>\n      <group targetFramework=\"monoandroid\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n      </group>\n      <group targetFramework=\"netcoreapp3.1\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n     </group>\n      <group targetFramework=\"netstandard2.0\">\n        <dependency id=\"Newtonsoft.Json\" version=\"13.0.1\" />\n        <dependency id=\"System.Reactive.Core\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Interfaces\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.Linq\" version=\"4.4.1\" />\n        <dependency id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" />\n      </group>\n    </dependencies>\n  </metadata>\n</package>\n"
  },
  {
    "path": "BuildScripts/LinqToTwitter.proj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Version>0.0.0.0</Version>\n    <ProjFolder>c:\\Projects\\</ProjFolder>\n    <L2T5SourceFolder>$(ProjFolder)LinqToTwitter\\src\\LinqToTwitter5\\</L2T5SourceFolder>\n    <L2T6SourceFolder>$(ProjFolder)LinqToTwitter\\src\\LinqToTwitter6\\</L2T6SourceFolder>\n    <L2TBuildScriptsFolder>$(ProjFolder)LinqToTwitter\\BuildScripts\\</L2TBuildScriptsFolder>\n    <L2TAspNetFolder>$(L2T5SourceFolder)LinqToTwitter.AspNet\\</L2TAspNetFolder>\n    <L2TAspNetRelease>$(L2TAspNetFolder)bin\\Release\\LinqToTwitter.AspNet.dll</L2TAspNetRelease>\n    <L2TAspNetStdFolder>$(L2T5SourceFolder)LinqToTwitter.AspNetStd\\</L2TAspNetStdFolder>\n    <L2TAspNetStdRelease>$(L2TAspNetStdFolder)bin\\Release\\netstandard2.0\\LinqToTwitter.AspNetStd.dll</L2TAspNetStdRelease>\n    <L2TAspNetCoreFolder>$(L2T5SourceFolder)LinqToTwitter.AspNetCore\\</L2TAspNetCoreFolder>\n    <L2TAspNetCoreRelease>$(L2TAspNetCoreFolder)bin\\Release\\netcoreapp3.1\\LinqToTwitter.AspNetCore.dll</L2TAspNetCoreRelease>\n    <L2TDotNet4Folder>$(L2T5SourceFolder)LinqToTwitter.net\\</L2TDotNet4Folder>\n    <L2TDotNet4Release>$(L2TDotNet4Folder)bin\\Release\\LinqToTwitter.net.dll</L2TDotNet4Release>\n    <L2TDotNet5Folder>$(L2T6SourceFolder)LinqToTwitter\\</L2TDotNet5Folder>\n    <L2TDotNet5Release>$(L2TDotNet5Folder)bin\\Release\\net5.0\\LinqToTwitter.dll</L2TDotNet5Release>\n    <L2TDotCoreFolder>$(L2T5SourceFolder)LinqToTwitter.Core\\</L2TDotCoreFolder>\n    <L2TDotCoreRelease>$(L2TDotCoreFolder)bin\\Release\\netcoreapp3.1\\LinqToTwitter.Core.dll</L2TDotCoreRelease>\n    <L2TNetStdFolder>$(L2T5SourceFolder)LinqToTwitter.netstandard\\</L2TNetStdFolder>\n    <L2TNetStdRelease>$(L2TNetStdFolder)bin\\Release\\netstandard2.0\\LinqToTwitter.netstandard.dll</L2TNetStdRelease>\n    <L2TWin10Folder>$(L2T5SourceFolder)LinqToTwitter.uap10\\</L2TWin10Folder>\n    <L2TWin10Release>$(L2TWin10Folder)bin\\Release\\LinqToTwitter.uap10.dll</L2TWin10Release>\n    <L2TXamarinFolder>$(L2T5SourceFolder)LinqToTwitter.xamarin\\</L2TXamarinFolder>\n    <L2TXamarinRelease>$(L2TXamarinFolder)bin\\Release\\LinqToTwitter.xamarin.dll</L2TXamarinRelease>\n    <NuGetExeFolder>$(ProjFolder)NuGet\\</NuGetExeFolder>\n    <NuGetBaseFolder>$(NuGetExeFolder)LinqToTwitter-v6\\</NuGetBaseFolder>\n    <NuGetVersionFolder>$(NuGetBaseFolder)v$(Version)\\</NuGetVersionFolder>\n    <NuGetLibFolder>$(NuGetVersionFolder)lib\\</NuGetLibFolder>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OutDir>$(NuGetLibFolder)</OutDir>\n    <OutDir>$(NuGetLibFolder)net5.0</OutDir>\n    <OutDir>$(NuGetLibFolder)net461</OutDir>\n    <OutDir>$(NuGetLibFolder)uap10.0</OutDir>\n\t  <OutDir>$(NuGetLibFolder)monoandroid</OutDir>\n\t  <OutDir>$(NuGetLibFolder)xamarin.ios</OutDir>\n\t  <OutDir>$(NuGetLibFolder)xamarin.mac</OutDir>\n\t  <OutDir>$(NuGetLibFolder)netcoreapp3.1</OutDir>\n    <OutDir>$(NuGetLibFolder)netstandard2.0</OutDir>\n  </PropertyGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"$(L2TDotNet5Folder)LinqToTwitter.csproj\" />\n    <ProjectReference Include=\"$(L2TDotNet4Folder)LinqToTwitter.net.csproj\" />\n    <ProjectReference Include=\"$(L2TDotNet4Folder)LinqToTwitter.netstandard.csproj\" />\n    <ProjectReference Include=\"$(L2TWin10Folder)LinqToTwitter.uap10.csproj\" />\n    <ProjectReference Include=\"$(L2XamarinFolder)LinqToTwitter.xamarin.csproj\" />\n </ItemGroup>\n  <Target Name=\"Build\">\n    <MakeDir Directories=\"$(OutDir)\" Condition=\"!Exists('$(OutDir)')\"  />\n\n    <MSBuild Projects=\"$(L2TDotNet5Folder)LinqToTwitter.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TDotNet4Folder)LinqToTwitter.net.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TDotCoreFolder)LinqToTwitter.Core.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TNetStdFolder)LinqToTwitter.netstandard.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TAspNetFolder)LinqToTwitter.AspNet.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TAspNetStdFolder)LinqToTwitter.AspNetStd.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TAspNetCoreFolder)LinqToTwitter.AspNetCore.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TWin10Folder)LinqToTwitter.uap10.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n    <MSBuild Projects=\"$(L2TXamarinFolder)LinqToTwitter.xamarin.csproj\" Properties=\"Configuration=Release\" Targets=\"Rebuild\" />\n\n    <Copy\n      SourceFiles=\"$(L2TDotNet5Release)\"\n      DestinationFiles=\"$(NuGetLibFolder)net5.0\\LinqToTwitter.dll\" />\n\n    <Copy\n      SourceFiles=\"$(L2TNetStdRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)netstandard2.0\\LinqToTwitter.netstandard.dll\" />\n    <Copy\n      SourceFiles=\"$(L2TAspNetStdRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)netstandard2.0\\LinqToTwitter.AspNetStd.dll\" />\n\n    <Copy\n      SourceFiles=\"$(L2TDotCoreRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)netcoreapp3.1\\LinqToTwitter.Core.dll\" />\n    <Copy\n      SourceFiles=\"$(L2TAspNetCoreRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)netcoreapp3.1\\LinqToTwitter.AspNetCore.dll\" />\n\n    <Copy\n      SourceFiles=\"$(L2TDotNet4Release)\"\n      DestinationFiles=\"$(NuGetLibFolder)net461\\LinqToTwitter.net.dll\" />\n    <Copy\n      SourceFiles=\"$(L2TAspNetRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)net461\\LinqToTwitter.AspNet.dll\" />\t\n\n    <Copy\n      SourceFiles=\"$(L2TNetStdRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)uap10.0\\LinqToTwitter.netstandard.dll\" />\n    <Copy\n      SourceFiles=\"$(L2TWin10Release)\"\n      DestinationFiles=\"$(NuGetLibFolder)uap10.0\\LinqToTwitter.uap10.dll\" />\n\n    <Copy\n      SourceFiles=\"$(L2TNetStdRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)xamarin.ios\\LinqToTwitter.netstandard.dll\" />\n    <Copy\n      SourceFiles=\"$(L2TNetStdRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)xamarin.mac\\LinqToTwitter.netstandard.dll\" />\n    <Copy\n      SourceFiles=\"$(L2TNetStdRelease)\"\n      DestinationFiles=\"$(NuGetLibFolder)monoandroid\\LinqToTwitter.netstandard.dll\" />\n\n    <Copy\n      SourceFiles=\"$(L2TBuildScriptsFolder)200xColor_2.png\"\n      DestinationFiles=\"$(NuGetVersionFolder)200xColor_2.png\" />\n    <Copy\n      SourceFiles=\"$(L2TBuildScriptsFolder)ReadMe.txt\"\n      DestinationFiles=\"$(NuGetVersionFolder)ReadMe.txt\" />\n    <Copy\n      SourceFiles=\"$(L2TBuildScriptsFolder)LinqToTwitter.nuspec\"\n      DestinationFiles=\"$(NuGetVersionFolder)LinqToTwitter.nuspec\" />\n    <XmlPoke XmlInputPath=\"$(NuGetVersionFolder)LinqToTwitter.nuspec\" Namespaces=\"&lt;Namespace Prefix='x' Uri='http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd' /&gt;\" Query=\"//x:package/x:metadata/x:version\" Value=\"$(Version)\" />\n    \n\t  <Exec Command=\"$(NuGetExeFolder)NuGet pack $(NuGetVersionFolder)LinqToTwitter.nuspec -OutputDirectory $(NuGetBaseFolder)\" />\n  </Target>\n</Project>"
  },
  {
    "path": "BuildScripts/ReadMe.txt",
    "content": "# Welcome to LINQ to Twitter!\n\n## Release Notes:\n\n* Full documentation:\n    - https://www.linqtotwitter.com/ \n\n* Demos included in downloadable source code in the /Samples folder. \n\t- ConsoleSamples covers all APIs and there are other technology specific demos too.\n\t\n* How to use with Xamarin.Android: \n\t- http://geekswithblogs.net/WinAZ/archive/2013/11/14/linq-to-twitter-runs-xamarin.android.aspx\n\t\n* How to use with Xamarin.iOS: \n    - http://geekswithblogs.net/WinAZ/archive/2013/12/06/linq-to-twitter-runs-on-xamarin.ios.aspx\n\n* You can find help on Stack Overflow:\n\t- https://stackoverflow.com/questions/tagged/linq-to-twitter\n\n* Please visit the GitHub issues page if you've found a bug or would like to contribute:\n    - https://github.com/JoeMayo/LinqToTwitter/issues\n\t\n* Most recent version supports .NET 5 and both Twitter API v1.1 and v2.0\n\n* Please take the survey at https://bit.ly/2Luzbpt to make LINQ to Twitter better.\n\n## Supported Platforms:\n\n\t\"net461\",\n\t\"net5.0\"\n    \"uap10.0\",\n\t\"xamarin.ios\",\n\t\"xamarin.mac\",\n    \"monoandroid\",\n    \"netcoreapp3.1\",\n    \"netstandard2.0\"\n\n### Follow @JoeMayo and @linq2Twitr on Twitter for the latest news.\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@mayosoftware.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 Joe Mayo\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "ReadMe.md",
    "content": "![LINQ to Twitter](https://i.imgur.com/ESNVAR4.png)\n\nLINQ to Twitter is an open source 3rd party LINQ Provider (Twitter Library) for the [Twitter](https://twitter.com/) micro-blogging service.  It uses standard LINQ syntax for queries and includes method calls for changes via the [Twitter API](https://dev.twitter.com/).\n\n## Example\n\nThe following query returns search results where people are tweeting about LINQ providers:\n```C#\nvar twitterCtx = new TwitterContext(...);\n\nTwitterSearch? searchResponse =\n    await\n    (from search in twitterCtx.TwitterSearch\n     where search.Type == SearchType.RecentSearch &&\n           search.Query == \"LINQ to\"\n     select search)\n    .SingleOrDefaultAsync();\n\nif (searchResponse?.Tweets != null)\n    searchResponse.Tweets.ForEach(tweet =>\n        Console.WriteLine(\n            $\"\\nID: {tweet.ID}\" +\n            $\"\\nTweet: {tweet.Text}\"));\n```\nFrom a coding experience perspective, the `TwitterContext` type is analogous to the Entity Framework `DBContext`.  You use the `TwitterContext` instance, `twitterCtx`, to access `IQueryable<T>` tweet categories.  In the example above, the `TwitterSearch` will give you the ability to search Twitter for tweets meeting some criteria.\n\n> *Note:* The ellipses in the TwitterContext parameters indicates that you need to provide an authorizer with credentials, which is required. You can visit [Securing Your Applications](https://github.com/JoeMayo/LinqToTwitter/wiki/Securing-Your-Applications) for documentation on authorizers and visit the Download page for working examples.\n\nEach query category has a `Type` property for the type of tweets you want to get back.  For example, `Tweet` queries can be made for `Mentions`, `ReverseChronological`, or `Tweets` timelines. Each query category also has an `XxxType` enum to help you figure out what is available. The example above uses `SearchType.RecentSearch` to perform searches on matching tweets that happened within the last two weeks or so.  Another example would be `Like` queries which might have `LikeType.Lookup` as its `Type` to get all the users who liked a tweet.  The `Type` idiom is consistent across all query categories.\n\nJust like other LINQ providers, you get an `IQueryable<T>` back from the query.  You can see how to materialize the query by invoking the `SingleOrDefaultAsync` operator.  For `TwitterSearch` results, you receive one `TwitterSearch` entity that contains metadata about the `Search` query and also contains a `Tweets` property that is a collection of `Tweet` entities. Just like other LINQ providers, LINQ to Twitter does deferred execution, so operators such as `ToListAsync` and `SingleOrDefaultAsync` or statements such as `for` and `foreach` loops will cause the query to execute and make the actual call to Twitter.\n\nLINQ to Twitter is asynchronous. You can see this where the code above `await's` the query, using the `SingleOrDefaultAsync` operator. Commands are async also. e.g. `await TweetAsync(\"Hello from LINQ to Twitter\")`.\n\nFor more details on how LINQ to Twitter works, you can visit [LINQ to Twitter v6 APIs](https://www.linqtotwitter.com/LINQ-to-Twitter-v6.html) for API specific examples. The downloadable source code also contains copious examples in the projects. Just look in the _Samples_ folder.\n\n## NuGet\nIn addition to being able to download from this site, you can also automatically install LINQ to Twitter into your projects via [NuGet](https://www.nuget.org/packages/linqtotwitter); \n\n## Available Feature Set\n\nSee [LINQ to Twitter v6 APIs](https://www.linqtotwitter.com/LINQ-to-Twitter-v6.html).\n\n## For more info:\n\n* follow [@JoeMayo](https://twitter.com/JoeMayo) for releases and related blog posts.\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/AccountDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Net;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows account demos\n    /// </summary>\n    public class AccountDemos\n    {\n        /// <summary>\n        /// Run all account related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            VerifyAccountCredentials(twitterCtx);\n            ViewRateLimitResponseHeadersDemo(twitterCtx);\n            ViewAccountSettingsDemo(twitterCtx);\n            //UpdateAccountColors(twitterCtx);\n            UpdateAccountImage(twitterCtx);\n            //UpdateAccountImageCallback(twitterCtx);\n            //UpdateAccountBackgroundImage(twitterCtx);\n            //UpdateAccountBackgroundImageBytes(twitterCtx);\n            //UpdateAccountBackgroundImageAndTileDemo(twitterCtx);\n            //UpdateAccountBackgroundImageAndTileButDontUseDemo(twitterCtx);\n            //UpdateAccountBackgroundImageWithProgressUpdates(twitterCtx);\n            //UpdateAccountInfoDemo(twitterCtx);\n            //UpdateAccountSettingsDemo(twitterCtx);\n            //UpdateProfileBanner(twitterCtx);\n            //RemoveProfileBanner(twitterCtx);\n        }\n\n        /// <summary>\n        /// Shows how to update account profile info\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountInfoDemo(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.UpdateAccountProfile(\"LINQ to Tweeter\",\n                \"http://linqtotwitter.codeplex.com\",\n                \"Denver, CO\",\n                \"Testing the Account Profile Update with LINQ to Twitter.\",\n                true,\n                true);\n\n            Console.WriteLine(\n                \"Name: {0}\\nURL: {1}\\nLocation: {2}\\nDescription: {3}\",\n                user.Name, user.Url, user.Location, user.Description);\n        }\n\n        /// <summary>\n        /// Shows how to update the background image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountBackgroundImage(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.UpdateAccountBackgroundImage(@\"..\\..\\images\\200xColor_2.png\", false, true, true, true);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileBackgroundImageUrl);\n        }\n\n        /// <summary>\n        /// Shows how to update the background image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountBackgroundImageBytes(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = Utilities.GetFileBytes(@\"..\\..\\images\\200xColor_2.png\");\n            var user = twitterCtx.UpdateAccountBackgroundImage(fileBytes, \"200xColor_2.png\", \"png\", false, true, true, true);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileBackgroundImageUrl);\n        }\n\n        /// <summary>\n        /// Shows how to update the background image in an account and tiles the image\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountBackgroundImageAndTileDemo(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = Utilities.GetFileBytes(@\"..\\..\\images\\200xColor_2.png\");\n            var user = twitterCtx.UpdateAccountBackgroundImage(fileBytes, \"200xColor_2.png\", \"png\", true, true, true, true);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileBackgroundImageUrl);\n        }\n\n        /// <summary>\n        /// Shows how to update the background image in an account and tiles the image, but doesn't use the uploaded background\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountBackgroundImageAndTileButDontUseDemo(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = Utilities.GetFileBytes(@\"..\\..\\images\\200xColor_2.png\");\n            var user = twitterCtx.UpdateAccountBackgroundImage(fileBytes, \"200xColor_2.png\", \"png\", true, false, true, true);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileBackgroundImageUrl);\n        }\n\n        /// <summary>\n        /// Shows how to update the profile image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateProfileBanner(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = Utilities.GetFileBytes(@\"..\\..\\images\\WP_000003.jpg\");\n            var user = twitterCtx.UpdateProfileBanner(fileBytes, \"WP_000003.jpg\", \"jpg\", 1252, 626, 0, 0);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileBannerUrl);\n        }\n\n        /// <summary>\n        /// Shows how to remove background image\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void RemoveBackgroundImage(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.RemoveBackgroundImage(true);\n            Console.WriteLine(\"Use background image: \" + user.ProfileUseBackgroundImage);\n        }\n\n        /// <summary>\n        /// Shows how to remove the profile image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void RemoveProfileBanner(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.RemoveProfileBanner();\n            Console.WriteLine(\"Profile Banner: \" + user.ProfileBannerUrl ?? \"None\");\n        }\n\n        /// <summary>\n        /// Shows how to update the background image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountBackgroundImageWithProgressUpdates(TwitterContext twitterCtx)\n        {\n            twitterCtx.UploadProgressChanged +=\n                (sender, e) =>\n                {\n                    Console.WriteLine(\"Progress: {0}%\", e.PercentComplete);\n                };\n            byte[] fileBytes = Utilities.GetFileBytes(@\"..\\..\\images\\200xColor_2.png\");\n            var user = twitterCtx.UpdateAccountBackgroundImage(fileBytes, \"200xColor_2.png\", \"png\", false, true, true, true);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileBackgroundImageUrl);\n        }\n\n        /// <summary>\n        /// Shows how to update the image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountImage(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.UpdateAccountImage(@\"..\\..\\images\\200xColor_2.png\", false);\n\n            Console.WriteLine(\"User Image: \" + user.ProfileImageUrl);\n        }\n\n        /// <summary>\n        /// Shows how to asynchronously update the image in an account\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountImageCallback(TwitterContext twitterCtx)\n        {\n            twitterCtx.UpdateAccountImage(\n                @\"..\\..\\images\\200xColor_2.png\", true,\n                response =>\n                {\n                    Console.WriteLine(\"User Image: \" + response.Status.ToString());\n                });\n        }\n\n        /// <summary>\n        /// Shows how to update Twitter colors\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountColors(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.UpdateAccountColors(null /*\"9ae4e8\"*/, \"#000000\", \"#0000ff\", \"#e0ff92\", \"#87bc44\", true, true);\n\n            Console.WriteLine(\"\\nAccount Colors:\\n\");\n\n            Console.WriteLine(\"Background:     \" + user.ProfileBackgroundColor);\n            Console.WriteLine(\"Text:           \" + user.ProfileTextColor);\n            Console.WriteLine(\"Link:           \" + user.ProfileLinkColor);\n            Console.WriteLine(\"Sidebar Fill:   \" + user.ProfileSidebarFillColor);\n            Console.WriteLine(\"Sidebar Border: \" + user.ProfileSidebarBorderColor);\n        }\n\n        /// <summary>\n        /// Shows how to obtain account settings.\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void ViewAccountSettingsDemo(TwitterContext twitterCtx)\n        {\n            var accountSettings =\n                (from acct in twitterCtx.Account\n                 where acct.Type == AccountType.Settings\n                 select acct.Settings)\n                .SingleOrDefault();\n\n            Console.WriteLine(\n                \"Trend Location: {0}\\nGeo Enabled: {1}\\nSleep Enabled: {2}\",\n                accountSettings.TrendLocation.Name,\n                accountSettings.GeoEnabled,\n                accountSettings.SleepTime.Enabled);\n        }\n\n        /// <summary>\n        /// Shows how to extract rate limit info from response headers\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void ViewRateLimitResponseHeadersDemo(TwitterContext twitterCtx)\n        {\n            var myMentions =\n                from mention in twitterCtx.Status\n                where mention.Type == StatusType.Mentions\n                select mention;\n\n            Console.WriteLine(\"\\nAll rate limit results are either -1 or from the last query because this query hasn't executed yet. Look at results for this query *after* the query: \\n\");\n\n            Console.WriteLine(\"Current Rate Limit: {0}\", twitterCtx.RateLimitCurrent);\n            Console.WriteLine(\"Remaining Rate Limit: {0}\", twitterCtx.RateLimitRemaining);\n            Console.WriteLine(\"Rate Limit Reset: {0}\", twitterCtx.RateLimitReset);\n\n            myMentions.ToList().ForEach(\n                mention => Console.WriteLine(\n                    \"Name: {0}, Tweet: {1}\\n\",\n                    mention.User.Name, mention.Text));\n\n            Console.WriteLine(\"\\nRate Limits from Query Response: \\n\");\n\n            Console.WriteLine(\"Current Rate Limit: {0}\", twitterCtx.RateLimitCurrent);\n            Console.WriteLine(\"Remaining Rate Limit: {0}\", twitterCtx.RateLimitRemaining);\n            Console.WriteLine(\"Rate Limit Reset: {0}\", twitterCtx.RateLimitReset);\n\n            var resetTime =\n                new DateTime(1970, 1, 1)\n                .AddSeconds(twitterCtx.RateLimitReset)\n                .ToLocalTime();\n\n            Console.WriteLine(\"Rate Limit Reset in current time: {0}\", resetTime);\n        }\n\n        /// <summary>\n        /// verifies that account credentials are correct\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void VerifyAccountCredentials(TwitterContext twitterCtx)\n        {\n            //var accounts =\n            //    from acct in twitterCtx.Account\n            //    where acct.Type == AccountType.VerifyCredentials\n            //    select acct;\n\n            try\n            {\n                //Account account = accounts.SingleOrDefault();\n                Account account = twitterCtx.Account.Single(acct => acct.Type == AccountType.VerifyCredentials && acct.SkipStatus == true);\n                //var account = twitterCtx.Account\n                //    .Where(t => t.Type == AccountType.VerifyCredentials)\n                //    .FirstOrDefault(t => t.SkipStatus == true);\n                User user = account.User;\n                Status tweet = user.Status ?? new Status();\n                Console.WriteLine(\"User (#\" + user.Identifier.ID\n                                    + \"): \" + user.Identifier.ScreenName\n                                    + \"\\nTweet: \" + tweet.Text\n                                    + \"\\nTweet ID: \" + tweet.StatusID + \"\\n\");\n\n                Console.WriteLine(\"Account credentials are verified.\");\n            }\n            catch (WebException wex)\n            {\n                Console.WriteLine(\"Twitter did not recognize the credentials. Response from Twitter: \" + wex.Message);\n            }\n        }\n\n        /// <summary>\n        /// Shows how to update account settings.\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void UpdateAccountSettingsDemo(TwitterContext twitterCtx)\n        {\n            Account acct = twitterCtx.UpdateAccountSettings(null, true, 20, 6, null, null);\n\n            SleepTime sleep = acct.Settings.SleepTime;\n            Console.WriteLine(\n                \"Enabled: {0}, Start: {1}, End: {2}\",\n                sleep.Enabled, sleep.StartHour, sleep.EndHour);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/App.config",
    "content": "<?xml version=\"1.0\"?>\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"twitterConsumerKey\" value=\"\"/>\n    <add key=\"twitterConsumerSecret\" value=\"\"/>\n    <add key=\"twitterOAuthToken\" value=\"\"/>\n    <add key=\"twitterAccessToken\" value=\"\"/>\n  </appSettings>\n  <!--\n  \n  Or, for SingleUserAuthorizer\n  \n  <appSettings>\n    --><!-- Fill in your consumer key and secret here to make the OAuth sample work. --><!--\n    --><!-- Twitter sign-up: https://dev.twitter.com/ --><!--\n    <add key=\"twitterConsumerKey\" value=\"\"/>\n    <add key=\"twitterConsumerSecret\" value=\"\"/>\n    <add key=\"twitterAccessToken\" value=\"\"/>\n    <add key=\"twitterAccessTokenSecret\" value=\"\"/>\n  </appSettings>-->\n  \n  <!--\n    The schemeSettings element, below, with the following characters, doesn't work in .NET 4.5:\n    \n      \"*():'[]\"\n      \n    Therefore, if you find that you're receiving 401 Unauthorized when these characters\n    are used, then remove these characters from your queries. \n    \n    This applies to LINQ queries, which are HTTP GET requests. There should be any problem \n    with commands, which are method calls, which execute as HTTP Post requests. -->\n  <!--\n  <uri>\n    <schemeSettings>\n      <add name=\"https\" genericUriParserOptions=\"DontUnescapePathDotsAndSlashes\"/>\n    </schemeSettings>\n  </uri>-->\n  \n  <startup useLegacyV2RuntimeActivationPolicy=\"true\">\n    \n  <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/BlocksDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows blocks demos\n    /// </summary>\n    public class BlocksDemos\n    {\n        /// <summary>\n        /// Run all blocks related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //CreateBlock(twitterCtx);\n            //DestroyBlock(twitterCtx);\n            //BlockListDemo(twitterCtx);\n            BlockIDsDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// shows how to unblock a user\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void DestroyBlock(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Unblock: \");\n            string userName = Console.ReadLine();\n\n            var user = twitterCtx.DestroyBlock(0, userName, true);\n\n            if (user == null) return;\n\n            Console.WriteLine(\"User Name: \" + user.Name);\n        }\n\n        /// <summary>\n        /// Shows how to block a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void CreateBlock(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Block: \");\n            string userName = Console.ReadLine();\n\n            var user = twitterCtx.CreateBlock(0, userName, true);\n\n            if (user == null) return;\n\n            Console.WriteLine(\"User Name: \" + user.Name);\n        }\n\n        /// <summary>\n        /// shows how to get a list of users that are being blocked\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void BlockBlockingDemo(TwitterContext twitterCtx)\n        {\n            var block =\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.List\n                 select blockItem)\n                .FirstOrDefault();\n\n            block.Users.ForEach(\n                user => Console.WriteLine(\"User, {0} is blocked.\", user.Name));\n        }\n\n\n        /// <summary>\n        /// shows how to get a list of users that are being blocked via custom projection\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void BlockBlockingProjectionDemo(TwitterContext twitterCtx)\n        {\n            var blockedUsers =\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.List\n                 select blockItem.Users)\n                .FirstOrDefault();\n\n            blockedUsers.ForEach(\n                user => Console.WriteLine(\"User, {0} is blocked.\", user.Name));\n        }\n\n        /// <summary>\n        /// shows how to get a list of IDs of the users being blocked\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void BlockIDsDemo(TwitterContext twitterCtx)\n        {\n            var result =\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.Ids\n                 select blockItem)\n                .SingleOrDefault();\n\n            result.IDs.ForEach(block => Console.WriteLine(\"ID: {0}\", block));\n        }\n\n        /// <summary>\n        /// shows how to see if a specific user is being blocked\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void BlockListDemo(TwitterContext twitterCtx)\n        {\n            var blocks =\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.List\n                 select blockItem)\n                .FirstOrDefault();\n\n            foreach (var user in blocks.Users)\n            {\n                Console.WriteLine(\"User, {0} is blocked.\", user.Name);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/DirectMessageDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows direct message demos\n    /// </summary>\n    public class DirectMessageDemos\n    {\n        /// <summary>\n        /// Run all direct message related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //DirectMessageSentByQueryDemo(twitterCtx);\n            //DirectMessageSentToQueryDemo(twitterCtx);\n            //DirectMessageShowDemo(twitterCtx);\n            NewDirectMessageDemo(twitterCtx);\n            //DestroyDirectMessageDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// shows how to delete a direct message\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DestroyDirectMessageDemo(TwitterContext twitterCtx)\n        {\n            var message = twitterCtx.DestroyDirectMessage(\"243563161037455360\", true);\n\n            if (message != null)\n            {\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}\",\n                    message.RecipientScreenName,\n                    message.Text);\n            }\n        }\n\n        /// <summary>\n        /// shows how to send a new direct message\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void NewDirectMessageDemo(TwitterContext twitterCtx)\n        {\n            var message = twitterCtx.NewDirectMessage(\"16761255\", \"Direct Message Test - \" + DateTime.Now + \"!'\");\n\n            if (message != null)\n            {\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    message.RecipientScreenName,\n                    message.Text,\n                    message.CreatedAt);\n            }\n        }\n\n        private static void DirectMessageShowDemo(TwitterContext twitterCtx)\n        {\n            var directMsg =\n                (from dm in twitterCtx.DirectMessage\n                 where dm.Type == DirectMessageType.Show &&\n                       dm.ID == 2078013265\n                 select dm)\n                .SingleOrDefault();\n\n            Console.WriteLine(\n                \"From: {0}\\nTo:  {1}\\nMessage: {2}\",\n                directMsg.Sender.Name,\n                directMsg.Recipient.Name,\n                directMsg.Text);\n        }\n\n        /// <summary>\n        /// shows how to query direct messages\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DirectMessageSentToQueryDemo(TwitterContext twitterCtx)\n        {\n            var directMessages =\n                (from tweet in twitterCtx.DirectMessage\n                 where tweet.Type == DirectMessageType.SentTo &&\n                       tweet.Count == 2\n                 select tweet)\n                .ToList();\n\n            directMessages.ForEach(\n                dm => Console.WriteLine(\n                    \"Sender: {0}, Tweet: {1}\",\n                    dm.SenderScreenName,\n                    dm.Text));\n        }\n\n        /// <summary>\n        /// shows how to query direct messages\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DirectMessageSentByQueryDemo(TwitterContext twitterCtx)\n        {\n            var directMessages =\n                (from dm in twitterCtx.DirectMessage\n                 where dm.Type == DirectMessageType.SentBy\n                 select dm)\n                .ToList();\n\n            directMessages.ForEach(\n                dm => Console.WriteLine(\n                    \"Sender: {0}, ID: {1}, Tweet: {2}\",\n                    dm.SenderScreenName,\n                    dm.ID,\n                    dm.Text));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/FavoritesDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows favorites demos\n    /// </summary>\n    public class FavoritesDemos\n    {\n        /// <summary>\n        /// Run all favorites related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            FavoritesQueryDemo(twitterCtx);\n            //CreateFavoriteDemo(twitterCtx);\n            //DestroyFavoriteDemo(twitterCtx);\n        }\n\n        private static void DestroyFavoriteDemo(TwitterContext twitterCtx)\n        {\n            var status = twitterCtx.DestroyFavorite(\"265675496581373952\", true);\n\n            Console.WriteLine(\"User: {0}, Tweet: {1}\", status.User.Name, status.Text);\n        }\n\n        /// <summary>\n        /// Shows how to create a Favorite\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void CreateFavoriteDemo(TwitterContext twitterCtx)\n        {\n            var status = twitterCtx.CreateFavorite(\"265675496581373952\");\n\n            Console.WriteLine(\"User: {0}, Tweet: {1}\", status.User.Name, status.Text);\n        }\n\n        /// <summary>\n        /// shows how to request a favorites list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void FavoritesQueryDemo(TwitterContext twitterCtx)\n        {\n            var favorites =\n                (from fav in twitterCtx.Favorites\n                 where fav.Type == FavoritesType.Favorites\n                 select fav)\n                .ToList();\n\n            foreach (var fav in favorites)\n            {\n                Console.WriteLine(\n                    \"User Name: {0}, Tweet: {1}\",\n                    fav.User.Name, fav.Text);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/FriendshipDemos.cs",
    "content": "﻿using LinqToTwitter;\nusing System;\nusing System.Linq;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows friendship demos\n    /// </summary>\n    public class FriendshipDemos\n    {\n        /// <summary>\n        /// Run all friendship related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            CreateFriendshipFollowDemo(twitterCtx);\n            //DestroyFriendshipDemo(twitterCtx);\n            //CreateFriendshipNoDeviceUpdatesDemo(twitterCtx);\n            //CreateFriendshipAsyncDemo(twitterCtx);\n            //FriendshipShowDemo(twitterCtx);\n            //FriendshipNoRetweetIDsDemo(twitterCtx);\n            //FriendshipIncomingDemo(twitterCtx);\n            //FriendshipOutgoingDemo(twitterCtx);\n            //FriendshipScreenNameLookupDemo(twitterCtx);\n            //FriendshipUserIDLookupDemo(twitterCtx);\n            //UpdateSettingsDemo(twitterCtx);\n            //FriendsListDemo(twitterCtx);\n            //FollowersListDemo(twitterCtx);\n        }\n\n        private static void DestroyFriendshipDemo(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.DestroyFriendship(null, \"Linq2Tweeter\");\n\n            Console.WriteLine(\n                \"User Name: {0}, Status: {1}\",\n                user.Name,\n                user.Status.Text);\n        }\n\n        private static void CreateFriendshipFollowDemo(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.CreateFriendship(null, \"JoeMayo\", true);\n\n            Console.WriteLine(\n                \"User Name: {0}, Status: {1}\",\n                user.Name,\n                user.Status.Text);\n        }\n\n        private static void CreateFriendshipNoDeviceUpdatesDemo(TwitterContext twitterCtx)\n        {\n            var user = twitterCtx.CreateFriendship(null, \"JoeMayo\", false);\n\n            Console.WriteLine(\n                \"User Name: {0}, Status: {1}\",\n                user.Name,\n                user.Status.Text);\n        }\n\n        private static void CreateFriendshipAsyncDemo(TwitterContext twitterCtx)\n        {\n            twitterCtx.CreateFriendship(null, \"JoeMayo\", false,\n                response =>\n                {\n                    User usr = response.State;\n\n                    Console.WriteLine(\n                        \"User Name: {0}, Status: {1}\",\n                        usr.Name,\n                        usr.Status.Text);\n                });\n        }\n\n        /// <summary>\n        /// shows how to show that one user follows another with Friendship Exists\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void FriendshipShowDemo(TwitterContext twitterCtx)\n        {\n            var friendship =\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.Show &&\n                       friend.SourceScreenName == \"Linq2Tweeter\" &&\n                       friend.TargetScreenName == \"JoeMayo\"\n                 select friend)\n                 .First();\n\n            Console.WriteLine(\n                \"\\nJoeMayo follows LinqToTweeter: \" + \n                friendship.SourceRelationship.FollowedBy + \n                \"\\nLinqToTweeter follows JoeMayo: \" +\n                friendship.TargetRelationship.FollowedBy);\n        }\n\n        /// <summary>\n        /// shows how to get ids of user that the logged in user doesn't want retweets for\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void FriendshipNoRetweetIDsDemo(TwitterContext twitterCtx)\n        {\n            var friendship =\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.NoRetweetIDs\n                 select friend)\n                .First();\n\n            var ids =\n                (from id in friendship.IDInfo.IDs\n                 select id.ToString())\n                .ToArray();\n\n            Console.WriteLine(\"\\nIDs: \" + string.Join(\",\", ids));\n        }\n\n        /// <summary>\n        /// Shows how to check who has an incoming request to logged in user's locked account\n        /// </summary>\n        /// <param name=\"twitterCtx\">twitterCtx</param>\n        private static void FriendshipIncomingDemo(TwitterContext twitterCtx)\n        {\n            var request =\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Incoming\n                 select req)\n                 .FirstOrDefault();\n\n            request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n        }\n\n        /// <summary>\n        /// Shows all outgoing requests from the logged in user to locked accounts\n        /// </summary>\n        /// <param name=\"twitterCtx\">twitterCtx</param>\n        private static void FriendshipOutgoingDemo(TwitterContext twitterCtx)\n        {\n            var request =\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Outgoing\n                 select req)\n                 .FirstOrDefault();\n\n            request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n        }\n\n        private static void FriendshipScreenNameLookupDemo(TwitterContext twitterCtx)\n        {\n            var relationships =\n                (from look in twitterCtx.Friendship\n                 where look.Type == FriendshipType.Lookup &&\n                       look.ScreenName == \"joemayo,linq2tweeter\"\n                 select look.Relationships)\n                .SingleOrDefault();\n\n            relationships.ForEach(rel => Console.WriteLine(\n                \"Relationship to \" + rel.ScreenName + \n                \" is Following: \" + rel.Following + \n                \" Followed By: \" + rel.FollowedBy));\n        }\n\n        private static void FriendshipUserIDLookupDemo(TwitterContext twitterCtx)\n        {\n            var relationships =\n                (from look in twitterCtx.Friendship\n                 where look.Type == FriendshipType.Lookup &&\n                       look.UserID == \"15411837,16761255\"\n                 select look.Relationships)\n                .SingleOrDefault();\n\n            relationships.ForEach(rel => Console.WriteLine(\n                \"Relationship to \" + rel.ScreenName + \" is Following: \" + rel.Following + \" Followed By: \" + rel.FollowedBy));\n        }\n\n        private static void UpdateSettingsDemo(TwitterContext twitterCtx)\n        {\n            Friendship friend = twitterCtx.UpdateFriendshipSettings(\"Linq2Tweeter\", true, true);\n\n            Console.WriteLine(\"Settings for {0} are: Can Retweet is {1} and Can Send Device Notifications is {2}\",\n                friend.SourceRelationship.ScreenName, \n                friend.SourceRelationship.RetweetsWanted, \n                friend.SourceRelationship.NotificationsEnabled);\n        }\n\n        private static void FriendsListDemo(TwitterContext twitterCtx)\n        {\n            Friendship friendship;\n            string cursor = \"-1\";\n            do\n            {\n                friendship =\n                    (from friend in twitterCtx.Friendship\n                     where friend.Type == FriendshipType.FriendsList &&\n                           friend.ScreenName == \"JoeMayo\" &&\n                           friend.Cursor == cursor                         \n                     select friend)\n                    .SingleOrDefault();\n\n                cursor = friendship.CursorMovement.Next;       \n\n                friendship.Users.ForEach(friend =>\n                    Console.WriteLine(\n                        \"ID: {0} Name: {1}\",\n                        friend.Identifier.UserID, friend.Identifier.ScreenName)); \n\n            } while (cursor != \"0\");\n        }\n\n        private static void FollowersListDemo(TwitterContext twitterCtx)\n        {\n            var friendship =\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.FollowersList &&\n                       friend.ScreenName == \"JoeMayo\"\n                 select friend)\n                .SingleOrDefault();\n\n            friendship.Users.ForEach(friend =>\n                Console.WriteLine(\n                    \"ID: {0} Name: {1}\",\n                    friend.Identifier.UserID, friend.Identifier.ScreenName));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/GeoDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows geo demos\n    /// </summary>\n    public class GeoDemos\n    {\n        /// <summary>\n        /// Run all geo related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //LookupReverseGeocodeDemo(twitterCtx);\n            //LookupGeoIDDemo(twitterCtx);\n            SearchDemo(twitterCtx);\n            //SimilarPlacesDemo(twitterCtx);\n            //CreatePlaceDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Shows how to perform a search query to \n        /// find a place, based on IP address\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void SearchDemo(TwitterContext twitterCtx)\n        {\n            var geo =\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.Search &&\n                       g.IP == \"168.143.171.180\"\n                 select g)\n                 .FirstOrDefault();\n\n            Place place = geo.Places[0];\n\n            Console.WriteLine(\n                \"Name: {0}, Country: {1}, Type: {2}\",\n                place.Name, place.Country, place.PlaceType);\n        }\n\n        /// <summary>\n        /// Shows how to perform a reverse geocode lookup\n        /// to find a place, based on latitude and longitude\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void LookupGeoIDDemo(TwitterContext twitterCtx)\n        {\n            var geo =\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.ID &&\n                       g.ID == \"5a110d312052166f\"\n                 select g)\n                 .SingleOrDefault();\n\n            Place place = geo.Places[0];\n\n            Console.WriteLine(\n                \"Name: {0}, Country: {1}, Type: {2}\",\n                place.Name, place.Country, place.PlaceType);\n        }\n\n        /// <summary>\n        /// Shows how to perform a reverse geocode lookup\n        /// to find a place, based on latitude and longitude\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void LookupReverseGeocodeDemo(TwitterContext twitterCtx)\n        {\n            var geo =\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.Reverse &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060\n                 select g)\n                 .SingleOrDefault();\n\n            geo.Places.ForEach(\n                place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n\n        private static void SimilarPlacesDemo(TwitterContext twitterCtx)\n        {\n            var geo =\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.SimilarPlaces &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060 &&\n                       g.PlaceName == \"Twitter HQ\"\n                 select g)\n                .SingleOrDefault();\n\n            geo.Places.ForEach(\n                place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/HelpDemos.cs",
    "content": "﻿using System.Diagnostics;\nusing System.Net;\nusing LinqToTwitter;\nusing System;\nusing System.Linq;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows help demos\n    /// </summary>\n    public class HelpDemos\n    {\n        /// <summary>\n        /// Run all help related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            GetHelpConfiguration(twitterCtx);\n            //GetHelpLanguages(twitterCtx);\n            //GetHelpRateLimits(twitterCtx);\n            //ExceedRateLimitDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// shows how to get configuration info\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetHelpConfiguration(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Configuration\n                 select test)\n                .SingleOrDefault();\n\n            Configuration cfg = helpResult.Configuration;\n\n            Console.WriteLine(\"Short URL Length: \" + cfg.ShortUrlLength);\n            Console.WriteLine(\"Short URL HTTPS Length: \" + cfg.ShortUrlLengthHttps);\n            Console.WriteLine(\"Non-UserName Paths: \");\n            foreach (var name in cfg.NonUserNamePaths)\n            {\n                Console.WriteLine(\"\\t\" + name);\n            }\n            Console.WriteLine(\"Photo Size Limit: \" + cfg.PhotoSizeLimit);\n            Console.WriteLine(\"Max Media Per Upload: \" + cfg.MaxMediaPerUpload);\n            Console.WriteLine(\"Characters Reserved Per Media: \" + cfg.CharactersReservedPerMedia);\n            Console.WriteLine(\"Photo Sizes\");\n            foreach (var photo in cfg.PhotoSizes)\n            {\n                Console.WriteLine(\"\\t\" + photo.Type);\n                Console.WriteLine(\"\\t\\t\" + photo.Width);\n                Console.WriteLine(\"\\t\\t\" + photo.Height);\n                Console.WriteLine(\"\\t\\t\" + photo.Resize);\n            }\n        }\n\n        /// <summary>\n        /// shows how to perform a help test\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetHelpLanguages(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Languages\n                 select test)\n                .SingleOrDefault();\n\n            foreach (var lang in helpResult.Languages)\n            {\n                Console.WriteLine(\"{0}({1}): {2}\", lang.Name, lang.Code, lang.Status);\n            }\n        }\n\n        static void GetHelpRateLimits(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                (from help in twitterCtx.Help\n                 where help.Type == HelpType.RateLimits //&&\n                       //help.Resources == \"search,users\"\n                 select help)\n                .SingleOrDefault();\n\n            foreach (var category in helpResult.RateLimits)\n            {\n                Console.WriteLine(\"\\nCategory: {0}\", category.Key);\n\n                foreach (var limit in category.Value)\n                {\n                    Console.WriteLine(\n                        \"\\n  Resource: {0}\\n    Remaining: {1}\\n    Reset: {2}\\n    Limit: {3}\",\n                        limit.Resource, limit.Remaining, limit.Reset, limit.Limit);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Intentionally exceeds rate limits so you can see and know how to handle the Twitter error.\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ExceedRateLimitDemo(TwitterContext twitterCtx)\n        {\n            try\n            {\n                while (true)\n                {\n                    var statusResponse =\n                        (from status in twitterCtx.Status\n                         where status.Type == StatusType.Home\n                         select status)\n                        .ToList();\n                } \n            }\n            catch (TwitterQueryException tqEx)\n            {\n                const int TooManyRequests = 429;\n\n                var webEx = tqEx.InnerException as WebException;\n                if (webEx != null && (int)((HttpWebResponse)webEx.Response).StatusCode == TooManyRequests)\n                    Console.WriteLine(\"Rate Limit Exceeded: \" + tqEx.ToString());\n                else\n                    Console.WriteLine(\"Some other exception occurred: \" + tqEx.ToString());\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/LinqToTwitterDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{CF26D528-E26B-40DB-A821-DEDE868D2638}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitterDemo</RootNamespace>\n    <AssemblyName>LinqToTwitterDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <OldToolsVersion>3.5</OldToolsVersion>\n    <UpgradeBackupLocation />\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>\n    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>\n    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.configuration\" />\n    <Reference Include=\"System.Core\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Data.DataSetExtensions\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AccountDemos.cs\" />\n    <Compile Include=\"BlocksDemos.cs\" />\n    <Compile Include=\"StringExtensions.cs\" />\n    <Compile Include=\"RelatedResultsDemos.cs\" />\n    <Compile Include=\"DirectMessageDemos.cs\" />\n    <Compile Include=\"FavoritesDemos.cs\" />\n    <Compile Include=\"FriendshipDemos.cs\" />\n    <Compile Include=\"GeoDemos.cs\" />\n    <Compile Include=\"HelpDemos.cs\" />\n    <Compile Include=\"ListDemos.cs\" />\n    <Compile Include=\"OAuthDemos.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RawDemos.cs\" />\n    <Compile Include=\"ReportSpamDemos.cs\" />\n    <Compile Include=\"SavedSearchDemos.cs\" />\n    <Compile Include=\"SearchDemos.cs\" />\n    <Compile Include=\"SocialGraphDemos.cs\" />\n    <Compile Include=\"StatusDemos.cs\" />\n    <Compile Include=\"StreamingDemo.cs\" />\n    <Compile Include=\"TrendsDemos.cs\" />\n    <Compile Include=\"TwitterContextDemos.cs\" />\n    <Compile Include=\"UserDemos.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\n      <Visible>False</Visible>\n      <ProductName>Windows Installer 3.1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"images\\200xColor_2.png\" />\n    <Content Include=\"images\\WP_000003.jpg\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitter\\LinqToTwitter.csproj\">\n      <Project>{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}</Project>\n      <Name>LinqToTwitter</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/ListDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing System.Reflection;\nusing System.Net;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows list demos\n    /// </summary>\n    public class ListDemos\n    {\n        /// <summary>\n        /// Run all list related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //ListsDemo(twitterCtx);\n            //GetListSubscribersDemo(twitterCtx);\n            //IsListMemberDemo(twitterCtx);\n            //GetListMembersDemo(twitterCtx);\n            //GetListSubscriptionsDemo(twitterCtx);\n            //GetListMembershipsDemo(twitterCtx);\n            //GetListStatusesDemo(twitterCtx);\n            //ShowListDemo(twitterCtx);\n            //IsListSubscribedDemo(twitterCtx);\n            //CreateListDemo(twitterCtx);\n            //UpdateListDemo(twitterCtx);\n            //DeleteListDemo(twitterCtx);\n            //AddMemberToListDemo(twitterCtx);\n            //AddMemberRangeToListWithScreenNamesDemo(twitterCtx);\n            //AddMemberRangeToListWithUserIDsDemo(twitterCtx);\n            //DeleteMemberFromListDemo(twitterCtx);\n            //SubscribeToListDemo(twitterCtx);\n            //UnsubscribeFromListDemo(twitterCtx);\n            //DestroyAllDemo(twitterCtx);\n            OwnershipsDemo(twitterCtx);\n        }\n\n        private static void AddMemberRangeToListWithScreenNamesDemo(TwitterContext twitterCtx)\n        {\n            var screenNames = new List<string>\n            {\n                \"JoeMayo\",\n                \"Linq2Tweeter\"\n            };\n\n            List list = twitterCtx.AddMemberRangeToList(null, \"linq\", null, \"Linq2Tweeter\", screenNames);\n\n            foreach (var user in list.Users)\n            {\n                Console.WriteLine(user.Name);\n            }\n        }\n\n        private static void AddMemberRangeToListWithUserIDsDemo(TwitterContext twitterCtx)\n        {\n            var userIds = new List<ulong>\n            {\n                15411837,\n                16761255\n            };\n\n            List list = twitterCtx.AddMemberRangeToList(null, \"test\", null, \"Linq2Tweeter\", userIds);\n\n            foreach (var user in list.Users)\n            {\n                Console.WriteLine(user.Name);\n            }\n        }\n\n        /// <summary>\n        /// Shows how to get all lists\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ListsDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                from list in twitterCtx.List\n                where list.Type == ListType.Lists &&\n                      list.ScreenName == \"Linq2Tweeter\"\n                orderby list.Name\n                select list;\n\n            foreach (var list in lists)\n            {\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n            }\n        }\n\n        /// <summary>\n        /// Shows how a user can unsubscribe from a list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UnsubscribeFromListDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.UnsubscribeFromList(null, \"test\", null, \"Linq2Tweeter\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n        /// <summary>\n        /// Shows how a user can subscribe to a list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void SubscribeToListDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.SubscribeToList(null, \"test\", null,  \"Linq2Tweeter\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n        /// <summary>\n        /// Shows how to remove a member from a list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DeleteMemberFromListDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.DeleteMemberFromList(null, \"Linq2Tweeter\", null, \"test\", null, \"Linq2Tweeter\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n        /// <summary>\n        /// Shows how to add a member to a list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void AddMemberToListDemo(TwitterContext twitterCtx)\n        {\n            try\n            {\n                List list = twitterCtx.AddMemberToList(null, \"Linq2Tweeter\", null, \"test\", null, \"Linq2Tweeter\");\n\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n            }\n            catch (TwitterQueryException tqex)\n            {\n                Console.WriteLine(\n                    \"Error querying Twitter - Code: {0}, Message: {1}\", \n                    tqex.ErrorCode, tqex.Message);\n            }\n        }\n\n        /// <summary>\n        /// Shows how to delete a list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DeleteListDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.DeleteList(null, \"test-5\", null, \"Linq2Tweeter\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n        /// <summary>\n        /// Shows how to modify an existing list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateListDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.UpdateList(null, \"test\", null, \"Test List\", \"Linq2Tweeter\", \"public\", \"This is a test2\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n        /// <summary>\n        /// Shows how to create a new list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void CreateListDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.CreateList(\"test\", \"public\", \"This is a test\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n        /// <summary>\n        /// Shows how to get information for a specific list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ShowListDemo(TwitterContext twitterCtx)\n        {\n            var requestedList =\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Show &&\n                       list.OwnerScreenName == \"Linq2Tweeter\" && // user who owns list\n                       list.Slug == \"linq\" // list name\n                 select list)\n                .FirstOrDefault();\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}, # Users: {2}\",\n                requestedList.Name, requestedList.Description, requestedList.Users.Count());\n        }\n\n        /// <summary>\n        /// Gets a list of statuses for specified list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetListStatusesDemo(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Tweeter\";\n            string slug = \"linq\";\n            int maxStatuses = 30;\n            int lastStatusCount = 0;\n            ulong sinceID = 204251866668871681; // last tweet processed on previous query\n            ulong maxID;\n            int count = 10;\n            var statusList = new List<Status>();\n\n            // only count\n            var listResponse =\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Statuses &&\n                       list.OwnerScreenName == ownerScreenName &&\n                       list.Slug == slug &&\n                       list.Count == count\n                 select list)\n                .First();\n\n            List<Status> newStatuses = listResponse.Statuses;\n            maxID = newStatuses.Min(status => ulong.Parse(status.StatusID)) - 1; // first tweet processed on current query\n            statusList.AddRange(newStatuses);\n\n            do\n            {\n                // now add sinceID and maxID\n                listResponse =\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.Statuses &&\n                           list.OwnerScreenName == ownerScreenName &&\n                           list.Slug == slug &&\n                           list.Count == count &&\n                           list.SinceID == sinceID &&\n                           list.MaxID == maxID\n                     select list)\n                    .First();\n\n                newStatuses = listResponse.Statuses;\n                maxID = newStatuses.Min(status => ulong.Parse(status.StatusID)) - 1; // first tweet processed on current query\n                statusList.AddRange(newStatuses);\n\n                lastStatusCount = newStatuses.Count;\n            }\n            while (lastStatusCount != 0 && statusList.Count < maxStatuses);\n\n            for (int i = 0; i < statusList.Count; i++)\n            {\n                Status status = statusList[i];\n\n                Console.WriteLine(\"{0, 4}. [{1}] User: {2}\\nStatus: {3}\",\n                    i + 1, status.StatusID, status.User.Name, status.Text);\n            }\n        }\n\n        /// <summary>\n        /// Gets a list of memberships for a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetListMembershipsDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                from list in twitterCtx.List\n                where list.Type == ListType.Memberships &&\n                      list.ScreenName == \"JoeMayo\" // user to get memberships for\n                select list;\n\n            foreach (var list in lists)\n            {\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n            }\n        }\n\n        /// <summary>\n        /// Gets a list of subscriptions for a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetListSubscriptionsDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                from list in twitterCtx.List\n                where list.Type == ListType.Subscriptions &&\n                      list.ScreenName == \"Linq2Tweeter\" // user to get subscriptions for\n                select list;\n\n            foreach (var list in lists)\n            {\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n            }\n        }\n\n        /// <summary>\n        /// Gets a list of members of a list\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        private static void GetListMembersDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Members &&\n                       list.OwnerScreenName == \"Linq2Tweeter\" &&\n                       list.Slug == \"linq\" &&\n                       list.SkipStatus == true\n                 select list)\n                .First();\n\n            foreach (var user in lists.Users)\n            {\n                Console.WriteLine(\"Member: \" + user.Name);\n            }\n        }\n\n        /// <summary>\n        /// Sees if user is a member of specified list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void IsListMemberDemo(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var subscribedList =\n                   (from list in twitterCtx.List\n                    where list.Type == ListType.IsMember &&\n                         list.ScreenName == \"JoeMayo\" &&\n                         list.OwnerScreenName == \"Linq2Tweeter\" &&\n                         list.Slug == \"linq\"\n                    select list)\n                   .FirstOrDefault();\n\n                // list will have only one user matching ID in query\n                var user = subscribedList.Users.First();\n\n                Console.WriteLine(\"User: {0} is a member of List: {1}\",\n                    user.Name, subscribedList.ListID);\n            }\n            // whenever user is not a member of the specified list, Twitter\n            // returns an HTTP 404 Not Found, response, which results in a\n            // .NET exception.  LINQ to Twitter intercepts the HTTP exception\n            // and wraps it in a TwitterQueryResponse where you can read the\n            // error message from Twitter via the Response property, shown below.\n            catch (TwitterQueryException ex)\n            {\n                // TwitterQueryException will always reference the original WebException, \n                // so the check is redundant but doesn't hurt\n                var webEx = ex.InnerException as WebException;\n                if (webEx == null) throw ex;\n\n                // The response holds data from Twitter\n                var webResponse = webEx.Response as HttpWebResponse;\n                if (webResponse == null) throw ex;\n\n                if (webResponse.StatusCode == HttpStatusCode.NotFound)\n                {\n                    Console.WriteLine(\n                        \"HTTP Status Code: {0}. Response from Twitter: {1}\",\n                        webEx.Response.Headers[\"Status\"],\n                        ex.Message);\n                }\n                else\n                {\n                    throw ex;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets a list of subscribers for specified list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetListSubscribersDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Subscribers &&\n                       list.Slug == \"linq\" &&\n                       list.OwnerScreenName == \"Linq2Tweeter\"\n                 select list)\n                 .First();\n\n            foreach (var user in lists.Users)\n            {\n                Console.WriteLine(\"Subscriber: \" + user.Name);\n            }\n        }\n\n        /// <summary>\n        /// Gets lists that user created\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void GetListsDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Lists &&\n                       list.ScreenName == \"Linq2Tweeter\"\n                 select list)\n                .ToList();\n\n            foreach (var list in lists)\n            {\n                Console.WriteLine(\"ID: {0}  Slug: {1} Description: {2}\",\n                    list.ListIDResult, list.SlugResult, list.Description);\n            }\n        }\n\n        /// <summary>\n        /// Sees if user is subscribed to specified list\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void IsListSubscribedDemo(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var subscribedList =\n                   (from list in twitterCtx.List\n                    where list.Type == ListType.IsSubscribed &&\n                          list.ScreenName == \"JoeMayo\" &&\n                          list.Slug == \"linq\" &&\n                          list.OwnerScreenName == \"Linq2Tweeter\"\n                    select list)\n                   .FirstOrDefault();\n\n                // list will have only one user matching ID in query\n                var user = subscribedList.Users.First();\n\n                Console.WriteLine(\"User: {0} is subscribed to List: {1}\",\n                    user.Name, subscribedList.ListID);\n            }\n            // whenever user is not subscribed to the specified list, Twitter\n            // returns an HTTP 404, Not Found, response, which results in a\n            // .NET exception.  LINQ to Twitter intercepts the HTTP exception\n            // and wraps it in a TwitterQueryResponse where you can read the\n            // error message from Twitter via the Response property, shown below.\n            catch (TwitterQueryException ex)\n            {\n                // TwitterQueryException will always reference the original WebException, so the check is redundant but doesn't hurt\n                var webEx = ex.InnerException as WebException;\n                if (webEx == null) throw ex;\n\n                // The response holds data from Twitter\n                var webResponse = webEx.Response as HttpWebResponse;\n                if (webResponse == null) throw ex;\n\n                if (webResponse.StatusCode == HttpStatusCode.NotFound)\n                {\n                    Console.WriteLine(\n                        \"HTTP Status Code: {0}. Response from Twitter: {1}\",\n                        webEx.Response.Headers[\"Status\"],\n                        ex.Message);\n                }\n                else\n                {\n                    throw ex;\n                }\n            }\n        }\n\n        private static void DestroyAllDemo(TwitterContext twitterCtx)\n        {\n            List list = twitterCtx.DestroyAllFromList(null, \"test\", null, \"JoeMayo,mp2kmag\", null, \"Linq2Tweeter\");\n\n            Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                list.Name, list.Description);\n        }\n\n\n        /// <summary>\n        /// Gets lists that user created\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void OwnershipsDemo(TwitterContext twitterCtx)\n        {\n            var lists =\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Ownerships &&\n                       list.ScreenName == \"Linq2Tweeter\"\n                 select list)\n                .ToList();\n\n            foreach (var list in lists)\n            {\n                Console.WriteLine(\"ID: {0}  Slug: {1} Description: {2}\",\n                    list.ListIDResult, list.SlugResult, list.Description);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/OAuthDemos.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows How to Handle OAuth with LINQ to Twitter\n    /// </summary>\n    public class OAuthDemos\n    {\n        /// <summary>\n        /// Run all OAuth related demos\n        /// </summary>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //HandleOAuthQueryDemo(twitterCtx);\n            //HandleOAuthSideEffectDemo(twitterCtx);\n            //HandleOAuthFilePostDemo(twitterCtx);\n            //HandleOAuthReadOnlyQueryDemo(twitterCtx);\n            //HandleOAuthSideEffectReadOnlyDemo(twitterCtx);\n            //HandleOAuthUpdateAccountBackgroundImageWithProgressUpdatesDemo(twitterCtx);\n            //HandleOAuthRequestResponseDetailsDemo(twitterCtx);\n            //OAuthForceLoginDemo(twitterCtx);\n            HandleApplicationOnlyAuthentication();\n        }\n\n        /// <summary>\n        /// Shows how to force user to log in\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void OAuthForceLoginDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                var tweets =\n                    from tweet in twitterCtx.Status\n                    where tweet.Type == StatusType.Home\n                    select tweet;\n\n                tweets.ToList().ForEach(\n                    tweet => Console.WriteLine(\n                        \"Friend: {0}\\nTweet: {1}\\n\",\n                        tweet.User.Name,\n                        tweet.Text));\n            }\n        }\n\n        /// <summary>\n        /// shows how to retrieve the screen name and user ID from an OAuth request\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthRequestResponseDetailsDemo(TwitterContext twitterCtx)\n        {\n            Console.WriteLine();\n            Console.WriteLine(\n                \"Screen Name: {0}, User ID: {1}\",\n                twitterCtx.AuthorizedClient.ScreenName,\n                twitterCtx.AuthorizedClient.UserId);\n        }\n\n        /// <summary>\n        /// shows what happens when performing a side-effect when ReadOnly is turned on\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthSideEffectReadOnlyDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                var status = twitterCtx.UpdateStatus(\"I used LINQ to Twitter with OAuth: \" + DateTime.Now.ToString());\n\n                Console.WriteLine(\n                    \"Friend: {0}\\nTweet: {1}\\n\",\n                    status.User.Name,\n                    status.Text);\n            }\n        }\n\n        /// <summary>\n        /// shows how to restrict access to read-only while performing a query\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthReadOnlyQueryDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                var accounts =\n                    from acct in twitterCtx.Account\n                    where acct.Type == AccountType.VerifyCredentials\n                    select acct;\n\n                foreach (var account in accounts)\n                {\n                    Console.WriteLine(\"Credentials for account, {0}, are okay.\", account.User.Name);\n                }\n            }\n        }\n\n        /// <summary>\n        /// hows how to use OAuth to post a file to Twitter\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthFilePostDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                var user = twitterCtx.UpdateAccountBackgroundImage(@\"C:\\Users\\jmayo\\Documents\\linq2twitter\\linq2twitter\\200xColor_2.png\",\n                    false,\n                    true,\n                    true,\n                    true);\n\n                Console.WriteLine(\n                    \"Name: {0}\\nImage: {1}\\n\",\n                    user.Name,\n                    user.ProfileBackgroundImageUrl);\n            }\n        }\n\n        /// <summary>\n        /// Perform an update using OAuth\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthSideEffectDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                var status = twitterCtx.UpdateStatus(\"I used LINQ to Twitter with OAuth: \" + DateTime.Now.ToString());\n\n                Console.WriteLine(\n                    \"Friend: {0}\\nTweet: {1}\\n\",\n                    status.User.Name,\n                    status.Text);\n            }\n        }\n\n        /// <summary>\n        /// Shows how to update the background image with OAuth\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthUpdateAccountBackgroundImageWithProgressUpdatesDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                twitterCtx.UploadProgressChanged +=\n                        (sender, e) =>\n                        {\n                            Console.WriteLine(\"Progress: {0}%\", e.PercentComplete);\n                        };\n                byte[] fileBytes = Utilities.GetFileBytes(@\"C:\\Users\\jmayo\\Documents\\linq2twitter\\linq2twitter\\200xColor_2.png\");\n                var user = twitterCtx.UpdateAccountBackgroundImage(fileBytes, \"200xColor_2.png\", \"png\", true, true, true, true);\n\n                Console.WriteLine(\"User Image: \" + user.ProfileBackgroundImageUrl);\n            }\n        }\n\n        /// <summary>\n        /// perform a query using OAuth\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HandleOAuthQueryDemo(TwitterContext twitterCtx)\n        {\n            if (twitterCtx.AuthorizedClient.IsAuthorized)\n            {\n                var tweets =\n                        from tweet in twitterCtx.Status\n                        where tweet.Type == StatusType.Show\n                        select tweet;\n\n                tweets.ToList().ForEach(\n                    tweet => Console.WriteLine(\n                        \"Friend: {0}, Created: {1}\\nTweet: {2}\\n\",\n                        tweet.User.Name,\n                        tweet.CreatedAt,\n                        tweet.Text)); \n            }\n        }\n\n        /// <summary>\n        /// Demonstrates how to use ApplicationOnlyAuthorizer\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void HandleApplicationOnlyAuthentication()\n        {\n            var auth = new ApplicationOnlyAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"]\n                }\n            };\n\n            auth.Authorize();\n            //auth.Invalidate();\n\n            var twitterCtx = new TwitterContext(auth);\n\n            var srch =\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == \"LINQ to Twitter\"\n                 select search)\n                .SingleOrDefault();\n\n            Console.WriteLine(\"\\nQuery: {0}\\n\", srch.SearchMetaData.Query);\n            srch.Statuses.ForEach(entry =>\n                Console.WriteLine(\n                    \"ID: {0, -15}, Source: {1}\\nContent: {2}\\n\",\n                    entry.StatusID, entry.Source, entry.Text));\n        }\n\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/Program.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Diagnostics;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    class Program\n    {\n        static void Main()\n        {\n            ITwitterAuthorizer auth = ChooseAuthenticationStrategy();\n\n            if (auth == null) return;\n\n            try\n            {\n                using (var twitterCtx = new TwitterContext(auth))\n                {\n                    //Log\n                    twitterCtx.Log = Console.Out;\n\n                    //\n                    // Each Run section below will execute at least one demo\n                    // from the specified area of the Twitter API.\n                    // Uncomment and navigate to code to see the example.\n                    //\n                    // LINQ to Twitter documentation \"Making API Calls\" is here:\n                    //  http://linqtotwitter.codeplex.com/wikipage?title=Making%20API%20Calls&referringTitle=Documentation\n                    //\n                    // Each section supports the Twitter API, as documented here:\n                    //  http://dev.twitter.com/doc\n                    //\n\n                    if (DoThis(\"demo account\"))\n                        AccountDemos.Run(twitterCtx);\n\n                    //BlocksDemos.Run(twitterCtx);\n                    //DirectMessageDemos.Run(twitterCtx);\n                    //FavoritesDemos.Run(twitterCtx);\n                    //FriendshipDemos.Run(twitterCtx);\n                    //GeoDemos.Run(twitterCtx);\n                    //HelpDemos.Run(twitterCtx);\n                    //ListDemos.Run(twitterCtx);\n                    //RawDemos.Run(twitterCtx);\n                    //ReportSpamDemos.Run(twitterCtx);\n                    //RelatedResultsDemos.Run(twitterCtx);\n                    //SavedSearchDemos.Run(twitterCtx);\n                    //SearchDemos.Run(twitterCtx);\n                    //SocialGraphDemos.Run(twitterCtx);\n                    //StatusDemos.Run(twitterCtx);\n                    //StreamingDemo.Run(twitterCtx);\n\n                    if (DoThis(\"demo trend\"))\n                        TrendsDemos.Run(twitterCtx);\n\n                    UserDemos.Run(twitterCtx);\n                    //OAuthDemos.Run(twitterCtx);\n                    //TwitterContextDemos.Run(twitterCtx);\n                }\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(ex.ToString());\n            }\n\n            Console.WriteLine(\"Press any key to end this demo.\");\n            Console.ReadKey();\n        }\n  \n        static ITwitterAuthorizer ChooseAuthenticationStrategy()\n        {\n            Console.WriteLine(\"Authentication Strategy:\\n\\n\");\n\n            Console.WriteLine(\"  1 - Pin (default)\");\n            Console.WriteLine(\"  2 - Single User\");\n            Console.WriteLine(\"  3 - XAuth\");\n            Console.WriteLine(\"  4 - Application-Only\");\n\n            Console.Write(\"\\nPlease choose (1, 2, 3, or 4): \");\n            ConsoleKeyInfo input = Console.ReadKey();\n            Console.WriteLine(\"\");\n\n            ITwitterAuthorizer auth = null;\n\n            switch (input.Key)\n            {\n\n                case ConsoleKey.D1:\n                    auth = DoPinOAuth();\n                    break;\n                case ConsoleKey.D2:\n                    auth = DoSingleUserAuth();\n                    break;\n                case ConsoleKey.D3:\n                    auth = DoXAuth();\n                    break;\n                case ConsoleKey.D4:\n                    auth = DoApplicationOnly();\n                    break;\n                default:\n                    auth = DoPinOAuth();\n                    break;\n            }\n\n            return auth;\n        }\n\n        static ITwitterAuthorizer DoSingleUserAuth()\n        {\n            // validate that credentials are present\n            if (ConfigurationManager.AppSettings[\"twitterConsumerKey\"].IsNullOrWhiteSpace() ||\n                ConfigurationManager.AppSettings[\"twitterConsumerSecret\"].IsNullOrWhiteSpace() ||\n                ConfigurationManager.AppSettings[\"twitterAccessToken\"].IsNullOrWhiteSpace() ||\n                ConfigurationManager.AppSettings[\"twitterAccessTokenSecret\"].IsNullOrWhiteSpace())\n            {\n                Console.WriteLine(\"You need to set credentials in App.config/appSettings. Visit http://dev.twitter.com/apps for more info.\\n\");\n                Console.Write(\"Press any key to exit...\");\n                Console.ReadKey();\n                return null;\n            }\n\n            // configure the OAuth object\n            var auth = new SingleUserAuthorizer\n            {\n                Credentials = new SingleUserInMemoryCredentials\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"],\n                    TwitterAccessToken = ConfigurationManager.AppSettings[\"twitterAccessToken\"],\n                    TwitterAccessTokenSecret = ConfigurationManager.AppSettings[\"twitterAccessTokenSecret\"]\n                }\n            };\n\n            // Remember, do not call authorize - you don't need it.\n            // auth.Authorize();\n            return auth;\n        }\n\n        static ITwitterAuthorizer DoXAuth()\n        {\n            // validate that credentials are present\n            if (ConfigurationManager.AppSettings[\"twitterConsumerKey\"].IsNullOrWhiteSpace() ||\n                ConfigurationManager.AppSettings[\"twitterConsumerSecret\"].IsNullOrWhiteSpace())\n            {\n                Console.WriteLine(\"You need to set twitterConsumerKey and twitterConsumerSecret in App.config/appSettings. Visit http://dev.twitter.com/apps for more info.\\n\");\n                Console.Write(\"Press any key to exit...\");\n                Console.ReadKey();\n                return null;\n            }\n\n            // configure the OAuth object\n            var auth = new XAuthAuthorizer\n            {\n                Credentials = new XAuthCredentials\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"],\n                    UserName = \"YourUserName\",\n                    Password = \"YourPassword\"\n                }\n            };\n\n            // authorize with Twitter\n            auth.Authorize();\n\n            return auth;\n        }\n\n        static ITwitterAuthorizer DoPinOAuth()\n        {\n            // validate that credentials are present\n            if (ConfigurationManager.AppSettings[\"twitterConsumerKey\"].IsNullOrWhiteSpace() ||\n                ConfigurationManager.AppSettings[\"twitterConsumerSecret\"].IsNullOrWhiteSpace())\n            {\n                Console.WriteLine(\"You need to set twitterConsumerKey and twitterConsumerSecret in App.config/appSettings. Visit http://dev.twitter.com/apps for more info.\\n\");\n                Console.Write(\"Press any key to exit...\");\n                Console.ReadKey();\n                return null;\n            }\n\n            // configure the OAuth object\n            var auth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"]\n                },\n                AuthAccessType = AuthAccessType.NoChange,\n                //UseCompression = true,\n                GoToTwitterAuthorization = pageLink => Process.Start(pageLink),\n                GetPin = () =>\n                {\n                    // this executes after user authorizes, which begins with the call to auth.Authorize() below.\n                    Console.WriteLine(\"\\nAfter authorizing this application, Twitter will give you a 7-digit PIN Number.\\n\");\n                    Console.Write(\"Enter the PIN number here: \");\n                    return Console.ReadLine();\n                }\n            };\n\n            // start the authorization process (launches Twitter authorization page).\n            auth.Authorize(true);\n            return auth;\n        }\n\n        static ITwitterAuthorizer DoApplicationOnly()\n        {\n            var auth = new ApplicationOnlyAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"]\n                }\n            };\n\n            auth.Authorize();\n\n            return auth;\n        }\n\n        static bool DoThis(string what)\n        {\n            Console.Write(\"Would you like to \" + what + \" (y or n): \");\n\n            var choice = Console.ReadKey();\n            var doIt = choice.KeyChar != 'n' && choice.KeyChar != 'N';\n\n            Console.WriteLine(doIt ? \"es\" : \"o\");\n\n            return doIt;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterTest\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterTest\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2008\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"11c84e4b-261d-48fc-8c98-d3f6ff70c467\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/RawDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    public class RawDemos\n    {\n        /// <summary>\n        /// Run all raw query demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //AccountTotalsDemo(twitterCtx);\n            //AccountSettingsDemo(twitterCtx);\n            //CategoryStatusDemo(twitterCtx);\n            //RetweetedToUserDemo(twitterCtx);\n            SearchDemo(twitterCtx);\n            //UpdateStatusDemo(twitterCtx);\n            //CreateFavoriteDemo(twitterCtx);\n            //RelatedResultsDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Gets account totals\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void AccountTotalsDemo(TwitterContext twitterCtx)\n        {\n            var rawResult =\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == \"account/totals.json\"\n                 select raw)\n                .FirstOrDefault();\n\n            Console.WriteLine(\"Response from Twitter: \\n\\n\" + rawResult.Result);\n        }\n\n        /// <summary>\n        /// Gets account settings\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void AccountSettingsDemo(TwitterContext twitterCtx)\n        {\n            var rawResult =\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == \"account/settings.json\"\n                 select raw.Result)\n                .FirstOrDefault();\n\n            Console.WriteLine(\"Response from Twitter: \\n\\n\" + rawResult);\n        }\n\n        /// <summary>\n        /// Gets tweets of users in a suggested category\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void CategoryStatusDemo(TwitterContext twitterCtx)\n        {\n            var rawResult =\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == \"users/suggestions/technology/members.json\"\n                 select raw.Result)\n                .FirstOrDefault();\n\n            Console.WriteLine(\"Response from Twitter: \\n\\n\" + rawResult);\n        }\n\n        /// <summary>\n        /// Gets tweets retweeted by a user\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void RetweetedToUserDemo(TwitterContext twitterCtx)\n        {\n            var rawResult =\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == \"statuses/retweeted_to_user.json?screen_name=twitterapi\"\n                 select raw)\n                .FirstOrDefault();\n\n            Console.WriteLine(\"Response from Twitter: \\n\\n\" + rawResult.Result);\n        }\n\n        /// <summary>\n        /// Shows how to encode a parameter\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void SearchDemo(TwitterContext twitterCtx)\n        {\n            string unencodedStatus = \"LINQ to Twitter\";\n            string encodedStatus = Uri.EscapeDataString(unencodedStatus);\n            string queryString = \"search/tweets.json?q=\" + encodedStatus;\n\n            var rawResult =\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == queryString\n                 select raw)\n                .FirstOrDefault();\n\n            Console.WriteLine(\"Response from Twitter: \\n\\n\" + rawResult.Result);\n        }\n\n        /// <summary>\n        /// Perform update status side-effect with raw data\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateStatusDemo(TwitterContext twitterCtx)\n        {\n            string status = \"Testing LINQ to Twitter Raw Interface: \" + DateTime.Now.ToString();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", status }\n            };\n\n            string queryString = \"/statuses/update.json\";\n\n            string result = twitterCtx.ExecuteRaw(queryString, parameters);\n\n            Console.WriteLine(\"Result from update status: \\n\\n\" + result);\n        }\n\n        /// <summary>\n        /// Perform create favorite side-effect with raw data\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void CreateFavoriteDemo(TwitterContext twitterCtx)\n        {\n            string status = \"Testing LINQ to Twitter Raw Interface: \" + DateTime.Now.ToString();\n            var parameters = new Dictionary<string, string>();\n\n            string queryString = \"/favorites/create/25786742388.json\";\n\n            string result = twitterCtx.ExecuteRaw(queryString, parameters);\n\n            Console.WriteLine(\"Result from create favorite: \\n\\n\" + result);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/RelatedResultsDemos.cs",
    "content": "﻿using LinqToTwitter;\nusing System;\nusing System.Linq;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows related results demos\n    /// </summary>\n    public class RelatedResultsDemos\n    {\n        /// <summary>\n        /// Run all related results demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            ShowRelatedResultsDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// shows how to get related results of a tweet\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ShowRelatedResultsDemo(TwitterContext twitterCtx)\n        {\n            var results =\n                (from result in twitterCtx.RelatedResults\n                 where result.Type == RelatedResultsType.Show &&\n                       result.StatusID == 195992821411495936ul\n                 select result)\n                .ToList();\n\n            results.ForEach(result => \n                Console.WriteLine(\"Name: {0}\\nTweet: {1}\\n\", result.User.Identifier.ScreenName, result.Text));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/ReportSpamDemos.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows report spam demos\n    /// </summary>\n    public class ReportSpamDemos\n    {\n        /// <summary>\n        /// Run all report spam related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            ReportSpamDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Shows multiple ways to report spammers\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ReportSpamDemo(TwitterContext twitterCtx)\n        {\n            var spammer = twitterCtx.ReportSpam(null, \"Greer_105\");\n            Console.WriteLine(\"Spammer \\\"{0}\\\" Zapped! He he :)\", spammer.Name);\n\n            // after the first one, subsequent calls won't report spam to Twitter\n            // but hopefully you can see my enthusiasm for this API;\n            // besides, a couple extra examples might be helpful - Joe\n\n            spammer = twitterCtx.ReportSpam(\"84705854\", null, null);\n            Console.WriteLine(\"Spammer \\\"{0}\\\" Zapped again! Ha Ha :)\", spammer.Name);\n\n            spammer = twitterCtx.ReportSpam(null, \"84705854\", null);\n            Console.WriteLine(\"Spammer \\\"{0}\\\" is so gone! ... and don't come back! :)\", spammer.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/SavedSearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows saved search demos\n    /// </summary>\n    public class SavedSearchDemos\n    {\n        /// <summary>\n        /// Run all saved search related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            QuerySavedSearchesDemo(twitterCtx);\n            //QuerySavedSearchesShowDemo(twitterCtx);\n            //CreateSavedSearchDemo(twitterCtx);\n            //DestroySavedSearchDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Shows how to delete a saved search\n        /// </summary>\n        /// <remarks>\n        /// Trying to delete a saved search that doesn't exist results\n        /// in a TwitterQueryException with HTTP Status 404 (Not Found)\n        /// </remarks>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DestroySavedSearchDemo(TwitterContext twitterCtx)\n        {\n            var savedSearch = twitterCtx.DestroySavedSearch(167246334);\n\n            Console.WriteLine(\"ID: {0}, Search: {1}\", savedSearch.ID, savedSearch.Name);\n        }\n\n        /// <summary>\n        /// shows how to create a Saved Search\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void CreateSavedSearchDemo(TwitterContext twitterCtx)\n        {\n            var savedSearch = twitterCtx.CreateSavedSearch(\"#csharp\");\n\n            Console.WriteLine(\"ID: {0}, Search: {1}\", savedSearch.IDString, savedSearch.Query);\n        }\n\n        /// <summary>\n        /// shows how to retrieve a single search\n        /// </summary>\n        /// <remarks>\n        /// Trying to delete a saved search that doesn't exist results\n        /// in a TwitterQueryException with HTTP Status 404 (Not Found)\n        /// </remarks>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void QuerySavedSearchesShowDemo(TwitterContext twitterCtx)\n        {\n            var savedSearches =\n                from search in twitterCtx.SavedSearch\n                where search.Type == SavedSearchType.Show &&\n                      search.ID == \"3275867\"\n                select search;\n\n            var savedSearch = savedSearches.FirstOrDefault();\n\n            Console.WriteLine(\"ID: {0}, Search: {1}\", savedSearch.ID, savedSearch.Name);\n        }\n\n        /// <summary>\n        /// shows how to retrieve all searches\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void QuerySavedSearchesDemo(TwitterContext twitterCtx)\n        {\n            var savedSearches =\n                from search in twitterCtx.SavedSearch\n                where search.Type == SavedSearchType.Searches\n                select search;\n\n            foreach (var search in savedSearches)\n            {\n                Console.WriteLine(\"ID: {0}, Search: {1}\", search.IDString, search.Name);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/SearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitterDemo\n{\n    public class SearchDemos\n    {\n        public static void Run(TwitterContext twitterCtx)\n        {\n            BasicSearchSample(twitterCtx);\n            //AsyncSearchSample(twitterCtx);\n            //GeocodeSample(twitterCtx);\n            //ConditionalSearchDemo(twitterCtx);\n            //DynamicSearchDemo(twitterCtx);\n        }\n\n        static void BasicSearchSample(TwitterContext twitterCtx)\n        {\n            var srch =\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == \"#DTWIFI\" &&\n                     //search.Query == @\"`!@#$%^&*()_-+=.~,:;'?/|\\[] éü\\u00C7\" &&\n                       search.Count == 25\n                 select search)\n                .SingleOrDefault();\n\n            Console.WriteLine(\"\\nQuery: {0}\\n\", srch.SearchMetaData.Query);\n            srch.Statuses.ForEach(entry =>\n                Console.WriteLine(\n                    \"ID: {0, -15}, Source: {1}\\nContent: {2}\\n\",\n                    entry.StatusID, entry.Source, entry.Text));\n\n            Console.WriteLine(\"\\n More Search demos can be downloaded from LINQ to Twitter's on-line samples at http://linqtotwitter.codeplex.com/wikipage?title=LINQ%20to%20Twitter%20Samples&referringTitle=Home\");\n        }\n\n        static void AsyncSearchSample(TwitterContext twitterCtx)\n        {\n            (from search in twitterCtx.Search\n             where search.Type == SearchType.Search &&\n                   search.Query == \"LINQ To Twitter\"\n             select search)\n            .MaterializedAsyncCallback(resp =>\n            {\n                if (resp.Status != TwitterErrorStatus.Success)\n                {\n                    Exception ex = resp.Exception;\n                    // handle error\n                    throw ex;\n                }\n\n                Search srch = resp.State.First();\n                Console.WriteLine(\"\\nQuery: {0}\\n\", srch.SearchMetaData.Query);\n\n                srch.Statuses.ForEach(entry =>\n                    Console.WriteLine(\n                        \"ID: {0, -15}, Source: {1}\\nContent: {2}\\n\",\n                        entry.StatusID, entry.Source, entry.Text));\n\n                Console.WriteLine(\"\\n More Search demos can be downloaded from LINQ to Twitter's on-line samples at http://linqtotwitter.codeplex.com/wikipage?title=LINQ%20to%20Twitter%20Samples&referringTitle=Home\");\n            });\n        }\n\n        static void GeocodeSample(TwitterContext twitterCtx)\n        {\n            var srch =\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == \"Twitter\" &&\n                       search.GeoCode == \"37.781157,-122.398720,1mi\"\n                 select search)\n                .SingleOrDefault();\n\n            Console.WriteLine(\"\\nQuery: {0}\\n\", srch.SearchMetaData.Query);\n            srch.Statuses.ForEach(entry =>\n                Console.WriteLine(\n                    \"ID: {0, -15}, Source: {1}\\nContent: {2}\\n\",\n                    entry.StatusID, entry.Source, entry.Text));\n\n            Console.WriteLine(\"\\n More Search demos can be downloaded from LINQ to Twitter's on-line samples at http://linqtotwitter.codeplex.com/wikipage?title=LINQ%20to%20Twitter%20Samples&referringTitle=Home\");\n        }\n\n        static void DynamicSearchDemo(TwitterContext twitterCtx)\n        {\n            const string TwitterSearchGeocodeFormat = \"{0},{1},{2}\";\n            string query = \"Twitter\";\n            string language = null;\n            string locale = null;\n            string latitude = \"37.781157\";\n            string longitude = \"-122.398720\";\n            uint radius = 1;\n            string radiusUnitType = \"mi\";\n\n            var srchQuery =\n                from srch in twitterCtx.Search\n                where srch.Type == SearchType.Search\n                select srch;\n\n            if (!string.IsNullOrWhiteSpace(query))\n            {\n                srchQuery = srchQuery.Where(srch => srch.Query == query);\n            }\n\n            if (!string.IsNullOrWhiteSpace(language))\n            {\n                srchQuery = srchQuery.Where(srch => srch.SearchLanguage == language);\n            }\n\n            if (!string.IsNullOrWhiteSpace(locale))\n            {\n                srchQuery = srchQuery.Where(srch => srch.Locale == locale);\n            }\n\n            if (!string.IsNullOrWhiteSpace(longitude) && !string.IsNullOrWhiteSpace(latitude) && radius > 0)\n            {\n                var radiusString = string.Format(\"{0}{1}\", radius, radiusUnitType.ToString().ToLower());\n                var geoCodeParameter = String.Format(TwitterSearchGeocodeFormat, latitude, longitude, radiusString);\n\n                srchQuery = srchQuery.Where(srch => srch.GeoCode == geoCodeParameter);\n            }\n\n            var srchResult = srchQuery.SingleOrDefault();\n\n            Console.WriteLine(\"\\nQuery: {0}\\n\", srchResult.SearchMetaData.Query);\n            srchResult.Statuses.ForEach(entry =>\n                Console.WriteLine(\n                    \"ID: {0, -15}, Source: {1}\\nContent: {2}\\n\",\n                    entry.StatusID, entry.Source, entry.Text));\n        }\n\n        static void ConditionalSearchDemo(TwitterContext twitterCtx)\n        {\n            const string TwitterSearchGeocodeFormat = \"{0},{1},{2}\";\n            string query = \"Twitter\";\n            string language = null;\n            string locale = null;\n            string latitude = \"37.781157\";\n            string longitude = \"-122.398720\";\n            uint radius = 1;\n            string radiusUnitType = \"mi\";\n\n            Type searchType = typeof(Search);\n            ParameterExpression srch = Expression.Parameter(searchType, \"srch\");\n\n            var predicates = new List<Expression>();\n\n            if (!string.IsNullOrWhiteSpace(query))\n            {\n                predicates.Add(\n                    Expression.Equal(\n                        Expression.Property(srch, \"Query\"),\n                        Expression.Constant(query)));\n            }\n\n            if (!string.IsNullOrWhiteSpace(language))\n            {\n                predicates.Add(\n                    Expression.Equal(\n                        Expression.Property(srch, \"SearchLanguage\"),\n                        Expression.Constant(language)));\n            }\n\n            if (!string.IsNullOrWhiteSpace(locale))\n            {\n                predicates.Add(\n                    Expression.Equal(\n                        Expression.Property(srch, \"Locale\"),\n                        Expression.Constant(locale)));\n            }\n\n            if (!string.IsNullOrWhiteSpace(longitude) && !string.IsNullOrWhiteSpace(latitude) && radius > 0)\n            {\n                var radiusString = string.Format(\"{0}{1}\", radius, radiusUnitType.ToString().ToLower());\n                var geoCodeParameter = String.Format(TwitterSearchGeocodeFormat, latitude, longitude, radiusString);\n                predicates.Add(\n                    Expression.Equal(\n                        Expression.Property(srch, \"GeoCode\"),\n                        Expression.Constant(geoCodeParameter)));\n            }\n\n            BinaryExpression expr = Expression.Equal(\n                Expression.Property(srch, \"Type\"),\n                Expression.Constant(SearchType.Search));\n\n            predicates.ForEach(pred => expr = Expression.AndAlso(expr, pred));\n\n            var searchLambda =\n                Expression.Lambda(expr, srch) as Expression<Func<Search, bool>>;\n\n            var response = \n                twitterCtx.Search\n                    .Where(searchLambda)\n                    .SingleOrDefault();\n\n            Console.WriteLine(\"\\nQuery: {0}\\n\", response.SearchMetaData.Query);\n            response.Statuses.ForEach(entry =>\n                Console.WriteLine(\n                    \"ID: {0, -15}, Source: {1}\\nContent: {2}\\n\",\n                    entry.StatusID, entry.Source, entry.Text));\n        }\n\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/SocialGraphDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows social graph demos\n    /// </summary>\n    public class SocialGraphDemos\n    {\n        /// <summary>\n        /// Run all social graph related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //ShowFriendsDemo(twitterCtx);\n            //ShowFriendsWithCursorDemo(twitterCtx);\n            ShowFollowersDemo(twitterCtx);\n            //ShowFollowersWithCursorDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Shows how to list followers\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ShowFollowersDemo(TwitterContext twitterCtx)\n        {\n            var followers =\n                (from follower in twitterCtx.SocialGraph\n                 where follower.Type == SocialGraphType.Followers &&\n                       follower.UserID == 15411837ul\n                 select follower)\n                 .SingleOrDefault();\n\n            followers.IDs.ForEach(id => Console.WriteLine(\"Follower ID: \" + id));\n        }\n\n        /// <summary>\n        /// Pages through a list of followers using cursors\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ShowFollowersWithCursorDemo(TwitterContext twitterCtx)\n        {\n            int pageNumber = 1;\n\n            // \"-1\" means to begin on the first page\n            string nextCursor = \"-1\";\n\n            // cursor will be \"0\" when no more pages\n            // notice that I'm checking for null/empty - don't trust data\n            while (!string.IsNullOrEmpty(nextCursor) && nextCursor != \"0\")\n            {\n                var followers =\n                    (from follower in twitterCtx.SocialGraph\n                     where follower.Type == SocialGraphType.Followers &&\n                           follower.UserID == 15411837ul &&\n                           follower.Cursor == nextCursor // <-- set this to use cursors\n                     select follower)\n                     .FirstOrDefault();\n\n                Console.WriteLine(\n                    \"Page #\" + pageNumber + \" has \" + followers.IDs.Count + \" IDs.\");\n\n                // use the cursor for the next page\n                // this is not a page number, but a marker (cursor)\n                // to tell Twitter which page to return\n                nextCursor = followers.CursorMovement.Next;\n                pageNumber++;\n            }\n        }\n\n        /// <summary>\n        /// Shows how to list Friends\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ShowFriendsDemo(TwitterContext twitterCtx)\n        {\n            var friendList =\n                (from friend in twitterCtx.SocialGraph\n                 where friend.Type == SocialGraphType.Friends &&\n                       friend.ScreenName == \"JoeMayo\"\n                 select friend)\n                 .SingleOrDefault();\n\n            foreach (var id in friendList.IDs)\n            {\n                Console.WriteLine(\"Friend ID: \" + id);\n            }\n        }\n\n        /// <summary>\n        /// Pages through a list of followers using cursors\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ShowFriendsWithCursorDemo(TwitterContext twitterCtx)\n        {\n            int pageNumber = 1;\n            string nextCursor = \"-1\";\n            while (!string.IsNullOrEmpty(nextCursor) && nextCursor != \"0\")\n            {\n                var friends =\n                    (from friend in twitterCtx.SocialGraph\n                     where friend.Type == SocialGraphType.Friends &&\n                           friend.ScreenName == \"JoeMayo\" &&\n                           friend.Cursor == nextCursor\n                     select friend)\n                     .SingleOrDefault();\n\n                Console.WriteLine(\n                    \"Page #\" + pageNumber + \" has \" + friends.IDs.Count + \" IDs.\");\n\n                nextCursor = friends.CursorMovement.Next;\n                pageNumber++;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/StatusDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows status demos\n    /// </summary>\n    public class StatusDemos\n    {\n        /// <summary>\n        /// Run all status related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //HomeStatusQueryDemo(twitterCtx);\n            //HomeSinceStatusQueryDemo(twitterCtx);\n            //HomeStatusQueryWithAsyncCallbackDemo(twitterCtx);\n            //UserStatusQueryDemo(twitterCtx);\n            //UserStatusByNameQueryDemo(twitterCtx);\n            //MentionsStatusQueryDemo(twitterCtx);\n            //MentionsWithSinceIDStatusQueryDemo(twitterCtx);\n            //SingleStatusQueryDemo(twitterCtx);\n            //UpdateStatusDemo(twitterCtx);\n            //UpdateStatusWithCallbackDemo(twitterCtx);\n            //UpdateStatusWithReplyDemo(twitterCtx);\n            UpdateStatusWithLocationDemo(twitterCtx);\n            //UpdateStatusWithPlaceDemo(twitterCtx);\n            //DestroyStatusDemo(twitterCtx);\n            //RetweetsOfMeStatusQueryDemo(twitterCtx);\n            //RetweetedByUserStatusQueryDemo(twitterCtx);\n            //RetweetsQueryDemo(twitterCtx);\n            //FirstStatusQueryDemo(twitterCtx);\n            //ContributorIDsDemo(twitterCtx);\n            //ContributorDetailsDemo(twitterCtx);\n            //StatusCountDemo(twitterCtx);\n            //TrimUserDemo(twitterCtx);\n            //TweetWithMediaDemo(twitterCtx);\n            //TweetEntityDemo(twitterCtx);\n            //RetweetersDemo(twitterCtx);\n            //OEmbedStatusDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Shows how to get statuses for logged-in user's friends - just like main Twitter page\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void SingleStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            string statusID = \"263843354817732608\";\n\n            var friendTweets =\n                from tweet in twitterCtx.Status\n                where tweet.Type == StatusType.Show &&\n                      tweet.ID == statusID\n                select tweet;\n\n            Console.WriteLine(\"\\nRequested Tweet: \\n\");\n            foreach (var tweet in friendTweets)\n            {\n                Console.WriteLine(\n                    \"User: \" + tweet.User.Name +\n                    \"\\nTweet: \" + tweet.Text +\n                    \"\\nTweet ID: \" + tweet.ID + \"\\n\");\n            }\n        }\n\n        /// <summary>\n        /// Shows how to get statuses for logged-in user's friends, including retweets\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HomeStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            var tweets =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home// &&\n                       //tweet.Count == 100\n                 select tweet)\n                .ToList();\n\n            Console.WriteLine(\"\\nTweets for \" + twitterCtx.UserName + \"\\n\");\n            foreach (var tweet in tweets)\n            {\n                Console.WriteLine(\n                    \"Friend: \" + tweet.User.Identifier.ScreenName +\n                    \"\\nRetweeted by: \" +\n                        (tweet.Retweeted ?\n                           tweet.RetweetedStatus.User.Name :\n                           \"Original Tweet\") +\n                    \"\\nTweet: \" + tweet.Text + \"\\n\");\n            }\n        }\n\n        /// <summary>\n        /// Shows how to get statuses for logged-in user's friends, including retweets\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HomeStatusQueryWithAsyncCallbackDemo(TwitterContext twitterCtx)\n        {\n            (from tweet in twitterCtx.Status\n             where tweet.Type == StatusType.Home\n             select tweet)\n            .MaterializedAsyncCallback(resp =>\n             {\n                 if (resp.Status != TwitterErrorStatus.Success)\n                     throw resp.Exception;\n\n                 Console.WriteLine(\"\\nTweets for \" + twitterCtx.UserName + \"\\n\");\n                 foreach (var tweet in resp.State)\n                 {\n                     Console.WriteLine(\n                         \"Friend: \" + tweet.User.Identifier.ScreenName +\n                         \"\\nRetweeted by: \" +\n                             (tweet.Retweeted ?\n                                tweet.RetweetedStatus.User.Name :\n                                \"Original Tweet\") +\n                         \"\\nTweet: \" + tweet.Text + \"\\n\");\n                 }\n             });\n        }\n\n        /// <summary>\n        /// Shows how to get statuses for logged-in user's friends, including retweets\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void HomeSinceStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            var friendTweets =\n                from tweet in twitterCtx.Status\n                where tweet.Type == StatusType.User &&\n                      tweet.ScreenName == \"JoeMayo\" &&\n                      tweet.CreatedAt < DateTime.Now.AddDays(-10).Date\n                select new\n                {\n                    tweet.User.Name,\n                    tweet.RetweetedStatus,\n                    tweet.Text\n                };\n\n            Console.WriteLine(\"\\nTweets for \" + twitterCtx.UserName + \"\\n\");\n            foreach (var tweet in friendTweets)\n            {\n                Console.WriteLine(\n                    \"Friend: \" + tweet.Name +\n                    \"\\nRetweeted by: \" +\n                        (tweet.RetweetedStatus == null ?\n                            \"Original Tweet\" :\n                            tweet.RetweetedStatus.User.Name) +\n                    \"\\nTweet: \" + tweet.Text + \"\\n\");\n            }\n        }\n\n        /// <summary>\n        /// Shows how to query tweets menioning logged-in user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void MentionsStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            var myMentions =\n                from mention in twitterCtx.Status\n                where mention.Type == StatusType.Mentions\n                select mention;\n\n            myMentions.ToList().ForEach(\n                mention => Console.WriteLine(\n                    \"Name: {0}, Tweet[{1}]: {2}\\n\",\n                    mention.User.Name, mention.StatusID, mention.Text));\n        }\n\n        /// <summary>\n        /// Shows how to query tweets menioning logged-in user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void MentionsWithSinceIDStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            var myMentions =\n                from mention in twitterCtx.Status\n                where mention.Type == StatusType.Mentions\n                    && mention.SinceID == 7841796067\n                select mention;\n\n            myMentions.ToList().ForEach(\n                mention => Console.WriteLine(\n                    \"Name: {0}, Tweet[{1}]: {2}\\n\",\n                    mention.User.Name, mention.StatusID, mention.Text));\n        }\n\n        private static void RetweetDemo(TwitterContext twitterCtx)\n        {\n            var retweet = twitterCtx.Retweet(\"401033367283453953\");\n\n            Console.WriteLine(\"Retweeted Tweet: \");\n            Console.WriteLine(\n                \"\\nUser: \" + retweet.RetweetedStatus.User.Name +\n                \"\\nTweet: \" + retweet.RetweetedStatus.Text +\n                \"\\nTweet ID: \" + retweet.RetweetedStatus.ID + \"\\n\");\n        }\n\n        /// <summary>\n        /// Shows how to get retweets of a specified tweet\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void RetweetsQueryDemo(TwitterContext twitterCtx)\n        {\n            var publicTweets =\n                from tweet in twitterCtx.Status\n                where tweet.Type == StatusType.Retweets &&\n                      tweet.ID == \"196991337554378752\"\n                select tweet;\n\n            publicTweets.ToList().ForEach(\n                tweet =>\n                {\n                    Console.WriteLine(\n                        \"@{0} {1} ({2})\",\n                        tweet.User.Identifier.ScreenName,\n                        tweet.Text,\n                        tweet.RetweetCount);\n\n                    var friendTweets =\n                        (from retweet in twitterCtx.Status\n                         where retweet.Type == StatusType.Retweets && \n                               retweet.ID == tweet.StatusID\n                         select retweet)\n                        .ToList();\n\n                    friendTweets.ForEach(\n                        friendTweet => Console.WriteLine(\".@{0}\", friendTweet.User.Identifier.ScreenName));\n                });\n        }\n\n        /// <summary>\n        /// Shows how to query retweets about the logged-in user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void RetweetsOfMeStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            var myRetweets =\n                from retweet in twitterCtx.Status\n                where retweet.Type == StatusType.RetweetsOfMe &&\n                      retweet.Count == 100\n                select retweet;\n\n            myRetweets.ToList().ForEach(\n                retweet => Console.WriteLine(\n                    \"Name: {0}, Tweet: {1}\\n\",\n                    retweet.User.Name, retweet.Text));\n        }\n\n        /// <summary>\n        /// Shows how to query retweets by the specified user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void RetweetedByUserStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            var myRetweets =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.RetweetedByUser &&\n                       tweet.ScreenName == \"JoeMayo\"\n                 select tweet.RetweetedStatus)\n                .ToList();\n\n            myRetweets.ForEach(\n                retweet =>\n                {\n                    if (retweet != null)\n                    {\n                        Console.WriteLine(\n                            \"Name: {0}, Tweet: {1}\\n\",\n                            retweet.User.Name, retweet.Text); \n                    }\n                });\n        }\n\n        private static void RetweetersDemo(TwitterContext twitterCtx)\n        {\n            var status =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweeters &&\n                       tweet.ID == \"210591841312190464\"\n                 select tweet)\n                .SingleOrDefault();\n\n            status.Users.ForEach(\n                userID => Console.WriteLine(\"User ID: \" + userID));\n        }\n\n        /// <summary>\n        /// shows how to query status with a screen name for specified number of tweets\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserStatusByNameQueryDemo(TwitterContext twitterCtx)\n        {\n            Console.WriteLine();\n\n            var lastN = 11;\n            var screenName = \"JoeMayo\";\n\n            var statusTweets =\n                from tweet in twitterCtx.Status\n                where tweet.Type == StatusType.User\n                      && tweet.ScreenName == screenName\n                      && tweet.Count == lastN\n                select tweet;\n\n            foreach (var tweet in statusTweets)\n            {\n                Console.WriteLine(\n                    \"(\" + tweet.StatusID + \")\" +\n                    \"[\" + tweet.User.ID + \"]\" +\n                    tweet.User.Name + \", \" +\n                    tweet.Text + \", \" +\n                    tweet.CreatedAt);\n            }\n        }\n\n        /// <summary>\n        /// shows how to query user status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            // last tweet processed on previous query set\n            //ulong sinceID = 210024053698867204;\n            ulong sinceID = 1;\n\n            ulong maxID;\n            const int Count = 10;\n            var statusList = new List<Status>();\n\n            var userStatusResponse =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.User &&\n                       tweet.ScreenName == \"JoeMayo\" &&\n                       tweet.SinceID == sinceID &&\n                       tweet.Count == Count\n                 select tweet)\n                .ToList();\n\n            statusList.AddRange(userStatusResponse);\n\n            // first tweet processed on current query\n            maxID = userStatusResponse.Min(\n                status => ulong.Parse(status.StatusID)) - 1;\n\n            do\n            {\n                // now add sinceID and maxID\n                userStatusResponse =\n                    (from tweet in twitterCtx.Status\n                     where tweet.Type == StatusType.User &&\n                           tweet.ScreenName == \"JoeMayo\" &&\n                           tweet.Count == Count &&\n                           tweet.SinceID == sinceID &&\n                           tweet.MaxID == maxID\n                     select tweet)\n                    .ToList();\n\n                if (userStatusResponse.Count > 0)\n                {\n                    // first tweet processed on current query\n                    maxID = userStatusResponse.Min(\n                        status => ulong.Parse(status.StatusID)) - 1;\n\n                    statusList.AddRange(userStatusResponse); \n                }\n            }\n            while (userStatusResponse.Count != 0 && statusList.Count < 30);\n\n            for (int i = 0; i < statusList.Count; i++)\n            {\n                Status status = statusList[i];\n\n                Console.WriteLine(\"{0, 4}. [{1}] User: {2}\\nStatus: {3}\",\n                    i + 1, status.StatusID, status.User.Name, status.Text);\n            }\n        }\n\n        /// <summary>\n        /// shows how to query status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void FirstStatusQueryDemo(TwitterContext twitterCtx)\n        {\n            Console.WriteLine();\n\n            var statusTweets =\n                from tweet in twitterCtx.Status\n                where tweet.Type == StatusType.User\n                      && tweet.ID == \"15411837\"  // ID for User\n                      && tweet.Count == 20\n                      && tweet.SinceID == 931894254\n                select tweet;\n\n            var status = statusTweets.FirstOrDefault();\n\n            Console.WriteLine(\n                \"(\" + status.StatusID + \")\" +\n                \"[\" + status.User.ID + \"]\" +\n                status.User.Name + \", \" +\n                status.Text + \", \" +\n                status.CreatedAt);\n        }\n\n        /// <summary>\n        /// shows how to delete a status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void DestroyStatusDemo(TwitterContext twitterCtx)\n        {\n            var status = twitterCtx.DestroyStatus(\"280433519057068033\");\n\n            Console.WriteLine(\n                \"(\" + status.StatusID + \")\" +\n                \"[\" + status.User.ID + \"]\" +\n                status.User.Name + \", \" +\n                status.Text + \", \" +\n                status.CreatedAt);\n        }\n\n        /// <summary>\n        /// shows how to update a status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateStatusWithReplyDemo(TwitterContext twitterCtx)\n        {\n            var tweet = twitterCtx.UpdateStatus(\n                \"@JoeMayo Testing LINQ to Twitter with reply on \" + DateTime.Now.ToString() + \" #linqtotwitter\",\n                \"249241028782088193\");\n\n            Console.WriteLine(\n                \"(\" + tweet.StatusID + \")\" +\n                \"[\" + tweet.User.ID + \"]\" +\n                tweet.User.Name + \", \" +\n                tweet.Text + \", \" +\n                tweet.CreatedAt);\n        }\n\n        /// <summary>\n        /// shows how to update a status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateStatusDemo(TwitterContext twitterCtx)\n        {\n            var status =\n                \" Testing LINQ to Twitter update status on \\n \" +\n                DateTime.Now.ToString() + \" #linqtotwitter \"\n                //+\n                //@\"`!@#$%^&*()_-+=.~,:;'?/|\\[] éü\\u00C7\"\n                ;\n\n            Console.WriteLine(\"\\nStatus being sent: \\n\\n\\\"{0}\\\"\", status);\n            Console.WriteLine(\"\\nPress any key to post tweet...\\n\");\n            Console.ReadKey();\n\n            var tweet = twitterCtx.UpdateStatus(status);\n\n            Console.WriteLine(\n                \"Status returned: \" +\n                \"(\" + tweet.StatusID + \")\" +\n                \"[\" + tweet.User.ID + \"]\" +\n                tweet.User.Name + \", \" +\n                tweet.Text + \", \" +\n                tweet.CreatedAt + \"\\n\");\n        }\n\n        /// <summary>\n        /// shows how to asynchronously update a status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateStatusWithCallbackDemo(TwitterContext twitterCtx)\n        {\n            //Thread.CurrentThread.CurrentCulture = new CultureInfo(\"nn-NO\");\n            //Thread.CurrentThread.CurrentUICulture = new CultureInfo(\"nn-NO\");\n            var status =\n                \" Testing LINQ to Twitter update status on \" +\n                DateTime.Now.ToString() + \" #linqtotwitter \"\n                //+ @\"`!@#$%^&*()_-+=.~,:;'?/|\\[] éü\\u00C7\"\n                ;\n\n            Console.WriteLine(\"\\nStatus being sent: \\n\\n\\\"{0}\\\"\", status);\n            Console.WriteLine(\"\\nPress any key to post tweet...\\n\");\n            Console.ReadKey();\n\n            twitterCtx.UpdateStatus(status,\n                response =>\n                {\n                    if (response.Status == TwitterErrorStatus.Success)\n                    {\n                        Status tweet = response.State;\n\n                        Console.WriteLine(\n                            \"Status returned: \" +\n                            \"(\" + tweet.StatusID + \")\" +\n                            \"[\" + tweet.User.ID + \"]\" +\n                            tweet.User.Name + \", \" +\n                            tweet.Text + \", \" +\n                            tweet.CreatedAt + \"\\n\");\n                    }\n                    else\n                    {\n                        Console.WriteLine(response.Exception.ToString());\n                    }\n                });\n        }\n        /// <summary>\n        /// shows how to update a status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateStatusWithPlaceDemo(TwitterContext twitterCtx)\n        {\n            // the \\u00C7 is C Cedilla, which I've included to ensure that non-ascii characters appear properly\n            var status = \"\\u00C7 Testing LINQ to Twitter update status on \" + DateTime.Now.ToString() + \" #linqtotwitter\";\n\n            Console.WriteLine(\"Status being sent: \" + status);\n\n            var tweet = twitterCtx.UpdateStatus(status, 37.78215m, -122.40060m, \"fbd6d2f5a4e4a15e\", trimUser: false);\n\n            Console.WriteLine(\n                \"User: {0}, Tweet: {1}\\nLatitude: {2}, Longitude: {3}, Place: {4}\",\n                tweet.User.Identifier.ScreenName,\n                tweet.Text,\n                tweet.Coordinates.Latitude,\n                tweet.Coordinates.Longitude,\n                tweet.Place.Name);\n        }\n\n        /// <summary>\n        /// shows how to update a status\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UpdateStatusWithLocationDemo(TwitterContext twitterCtx)\n        {\n            // the \\u00C7 is C Cedilla, which I've included to ensure that non-ascii characters appear properly\n            var status = \"\\u00C7 Testing LINQ to Twitter update status on \" + DateTime.Now.ToString() + \" £ #linqtotwitter\";\n            //var status = \"あいうえお\" + DateTime.Now.ToString();\n            string japaneseCultureString = \"ja-JP\";\n            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(japaneseCultureString);\n            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(japaneseCultureString);\n            decimal latitude = Decimal.Parse(\"37.78215\", CultureInfo.CurrentUICulture);\n            decimal longitude = Decimal.Parse(\"-122.40060\", CultureInfo.CurrentUICulture);\n\n            //decimal latitude = 37.78215m;\n            //decimal longitude = -122.40060m;\n\n            Console.WriteLine(\"Status being sent: \" + status);\n\n            var tweet = twitterCtx.UpdateStatus(status, latitude, longitude, true);\n\n            Console.WriteLine(\n                \"User: {0}, Tweet: {1}\\nLatitude: {2}, Longitude: {3}\",\n                tweet.User.Identifier.ScreenName,\n                tweet.Text,\n                tweet.Coordinates.Latitude,\n                tweet.Coordinates.Longitude);\n        }\n\n        /// <summary>\n        /// Shows how to read contributor IDs\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void ContributorIDsDemo(TwitterContext twitterCtx)\n        {\n            var contributedStatus =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Show &&\n                       tweet.ID == \"7680619122\"\n                 select tweet)\n                 .SingleOrDefault();\n\n            Console.WriteLine(\"Contributors Enabled: {0}\\n\", contributedStatus.User.ContributorsEnabled);\n\n            contributedStatus.Contributors.ForEach(\n                contr => Console.WriteLine(\"Contributor ID: \" + contr));\n        }\n\n        /// <summary>\n        /// Shows how to specify additional contributor info\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void ContributorDetailsDemo(TwitterContext twitterCtx)\n        {\n            var contributedStatus =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Show &&\n                       tweet.ID == \"7680619122\" &&\n                       tweet.IncludeContributorDetails == true\n                 select tweet)\n                .SingleOrDefault();\n\n            Console.WriteLine(\"Contributors Enabled: {0}\\n\", contributedStatus.User.ContributorsEnabled);\n\n            contributedStatus.Contributors.ForEach(\n                contr => Console.WriteLine(\"ID: {0}\", contr));\n        }\n\n        private static void StatusCountDemo(TwitterContext twitterCtx)\n        {\n            var tweets =\n                from tweet in twitterCtx.Status\n                where tweet.Type == StatusType.Show\n                select tweet;\n\n            var tweetCount = tweets.Count();\n\n            foreach (var l in tweets)\n            {\n                Console.WriteLine(l.Text);\n            }\n        }\n\n        private static void TrimUserDemo(TwitterContext twitterCtx)\n        {\n            var tweets =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home &&\n                       tweet.TrimUser == true\n                 select tweet)\n                .ToList();\n\n            tweets.ForEach(tweet => Console.WriteLine(\"User ID: {0}\\nTweet: {1}\\n\", tweet.User.Identifier.ID, tweet.Text));\n        }\n\n        static void TweetWithMediaDemo(TwitterContext twitterCtx)\n        {\n            string status = \"Testing TweetWithMedia #Linq2Twitter £ \" + DateTime.Now.ToString(CultureInfo.InvariantCulture);\n            const bool PossiblySensitive = false;\n            const decimal Latitude = StatusExtensions.NoCoordinate; //37.78215m;\n            const decimal Longitude = StatusExtensions.NoCoordinate; // -122.40060m;\n            const bool DisplayCoordinates = false;\n\n            const string ReplaceThisWithYourImageLocation = @\"..\\..\\images\\200xColor_2.png\";\n\n            var mediaItems =\n                new List<Media>\n                {\n                    new Media\n                    {\n                        Data = Utilities.GetFileBytes(ReplaceThisWithYourImageLocation),\n                        FileName = \"200xColor_2.png\",\n                        ContentType = MediaContentType.Png\n                    }\n                };\n\n            Status tweet = twitterCtx.TweetWithMedia(\n                status, PossiblySensitive, Latitude, Longitude, \n                null, DisplayCoordinates, mediaItems, null);\n\n            Console.WriteLine(\"Media item sent - Tweet Text: \" + tweet.Text);\n        }\n\n        static void TweetEntityDemo(TwitterContext twitterCtx)\n        {\n            var tweets =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home &&\n                       tweet.Count == 100\n                 select tweet)\n                .ToList();\n\n            tweets.ForEach(tweet =>\n            {\n                Console.WriteLine(\"Tweet: \" + tweet.Text);\n                Console.WriteLine(\n                    \"Entities: \\n\\tHashes: {0}\\n\\tMedia: {1}\\n\\tUrl: {2}\\n\\tUser: {3}\\n\",\n                    tweet.Entities.HashTagEntities.Count,\n                    tweet.Entities.MediaEntities.Count,\n                    tweet.Entities.UrlEntities.Count,\n                    tweet.Entities.UserMentionEntities.Count);\n            });\n        }\n\n        static void OEmbedStatusDemo(TwitterContext twitterCtx)\n        {\n            var embeddedStatus =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Oembed &&\n                       tweet.ID == \"305050067973312514\"\n                 select tweet.EmbeddedStatus)\n                .SingleOrDefault();\n\n            Console.WriteLine(\"Embedded Status Html: \" + embeddedStatus.Html);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/StreamingDemo.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Net;\nusing System.Threading;\nusing LinqToTwitter;\nusing LitJson;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitterDemo\n{\n    public class StreamingDemo\n    {\n        public static void Run(TwitterContext twitterCtx)\n        {\n            SamplesDemo(twitterCtx);\n            //FilterDemo(twitterCtx);\n            //UserStreamDemo(twitterCtx);\n            //UserStreamWithTimeoutDemo(twitterCtx);\n            //SiteStreamDemo(twitterCtx);\n            //ControlStreamsFollowersDemo(twitterCtx);\n            //ControlStreamsInfoDemo(twitterCtx);\n            //ControlStreamsAddRemoveDemo(twitterCtx);\n        }\n\n        static void FilterDemo(TwitterContext twitterCtx)\n        {\n            twitterCtx.AuthorizedClient.UseCompression = false;\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            (from strm in twitterCtx.Streaming\n             where strm.Type == StreamingType.Filter &&\n                   //strm.Follow == \"15411837\"\n                   //strm.Language == \"fr,jp,en\" &&\n                   strm.Track == \"twitter\"//,JoeMayo,linq2twitter,microsoft,google,facebook\"\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status != TwitterErrorStatus.Success)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                if (count++ >= 25)\n                {\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n        }\n\n        static void SamplesDemo(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            (from strm in twitterCtx.Streaming\n             where strm.Type == StreamingType.Sample\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                if (count++ >= 10)\n                {\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n        }\n\n        static void UserStreamDemo(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            // the user stream is for whoever is authenticated\n            // via the Authenticator passed to TwitterContext\n            (from strm in twitterCtx.UserStream\n             where strm.Type == UserStreamType.User\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                {\n                    WebException wex = strm.Error as WebException;\n                    if (wex != null && wex.Status == WebExceptionStatus.ConnectFailure)\n                    {\n                        Console.WriteLine(wex.Message + \" You might want to reconnect.\");\n                    }\n\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                string message = string.IsNullOrEmpty(strm.Content) ? \"Keep-Alive\" : strm.Content;\n                Console.WriteLine((count + 1).ToString() + \". \" + DateTime.Now + \": \" + message + \"\\n\");\n\n                if (count++ == 25)\n                {\n                    Console.WriteLine(\"Demo is ending. Closing stream...\");\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n        }\n\n        static void UserStreamWithTimeoutDemo(TwitterContext twitterCtx)\n        {\n            twitterCtx.AuthorizedClient.UseCompression = false;\n            twitterCtx.Timeout = 3000;\n            StreamContent strmCont = null;\n\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            // the user stream is for whoever is authenticated\n            // via the Authenticator passed to TwitterContext\n            (from strm in twitterCtx.UserStream\n             where strm.Type == UserStreamType.User\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status != TwitterErrorStatus.Success)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                strmCont = strm;\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                if (count++ >= 25)\n                {\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n\n            while (strmCont == null)\n            {\n                Console.WriteLine(\"Waiting on stream to initialize.\");\n\n                Thread.Sleep(10000);\n            }\n\n            Console.WriteLine(\"Stream is initialized. Now closing...\");\n            strmCont.CloseStream();\n        }\n\n        static void SiteStreamDemo(TwitterContext twitterCtx)\n        {\n            twitterCtx.AuthorizedClient.UseCompression = false;\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            (from strm in twitterCtx.UserStream\n             where strm.Type == UserStreamType.Site &&\n                   //strm.With == \"followings\" &&\n                   strm.Follow == \"15411837\"/*, \"16761255\"*/\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                if (count++ >= 10)\n                {\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n        }\n\n        static void ControlStreamsFollowersDemo(TwitterContext twitterCtx)\n        {\n            var evt = new ManualResetEventSlim(false);\n            string streamID = string.Empty;\n\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            (from strm in twitterCtx.UserStream\n             where strm.Type == UserStreamType.Site &&\n                 //strm.With == \"followings\" &&\n                   strm.Follow == \"15411837\"/*, \"16761255\"*/\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                var json = JsonMapper.ToObject(strm.Content);\n                var jsonDict = json as IDictionary<string, JsonData>;\n\n                if (jsonDict != null && jsonDict.ContainsKey(\"control\"))\n                {\n                    streamID = json[\"control\"][\"control_uri\"].ToString().Replace(\"/1.1/site/c/\", \"\");\n                    evt.Set();\n                }\n\n                if (count++ >= 10)\n                {\n                    Console.WriteLine(\"Closing stream...\");\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n\n            evt.Wait();\n            Console.WriteLine(\"Follower Details:\\n\");\n            var ctrlStrm =\n                (from strm in twitterCtx.ControlStream\n                 where strm.Type == ControlStreamType.Followers &&\n                       strm.UserID == 15411837 &&\n                       strm.StreamID == streamID\n                 select strm)\n                .SingleOrDefault();\n\n            ControlStreamFollow follow = ctrlStrm.Follow;\n            ControlStreamUser user = follow.User;\n            List<ulong> friends = follow.Friends;\n            Cursors cursors = follow.Cursors;\n\n            Console.WriteLine(\"User ID: \" + user.UserID);\n            Console.WriteLine(\"User Name: \" + user.Name);\n            Console.WriteLine(\"Can DM: \" + user.DM);\n            friends.ForEach(friend => Console.WriteLine(friend));\n            Console.WriteLine(\"Prev Cursor: \" + cursors.Previous);\n            Console.WriteLine(\"Next Cursor: \" + cursors.Next);\n        }\n\n        static void ControlStreamsInfoDemo(TwitterContext twitterCtx)\n        {\n            var evt = new ManualResetEventSlim(false);\n            string streamID = string.Empty;\n\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            (from strm in twitterCtx.UserStream\n             where strm.Type == UserStreamType.Site &&\n                 //strm.With == \"followings\" &&\n                   strm.Follow == \"15411837\"/*, \"16761255\"*/\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                var json = JsonMapper.ToObject(strm.Content);\n                var jsonDict = json as IDictionary<string, JsonData>;\n\n                if (jsonDict != null && jsonDict.ContainsKey(\"control\"))\n                {\n                    streamID = json[\"control\"][\"control_uri\"].ToString().Replace(\"/1.1/site/c/\", \"\");\n                    evt.Set();\n                }\n\n                if (count++ >= 10)\n                {\n                    Console.WriteLine(\"Closing stream...\");\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n\n            evt.Wait();\n            Console.WriteLine(\"Info Details:\\n\");\n            var ctrlStrm =\n                (from strm in twitterCtx.ControlStream\n                 where strm.Type == ControlStreamType.Info &&\n                       strm.StreamID == streamID\n                 select strm)\n                .SingleOrDefault();\n\n            ControlStreamInfo info = ctrlStrm.Info;\n            ControlStreamUser user = info.Users.First();\n            Console.WriteLine(\"User ID: \" + user.UserID);\n            Console.WriteLine(\"User Name: \" + user.Name);\n            Console.WriteLine(\"Can DM: \" + user.DM);\n            Console.WriteLine(\"Delimited: \" + info.Delimited);\n            Console.WriteLine(\"Include Followings Acitity: \" + info.IncludeFollowingsActivity);\n            Console.WriteLine(\"Include User Changes: \" + info.IncludeUserChanges);\n            Console.WriteLine(\"Replies: \" + info.Replies);\n            Console.WriteLine(\"With: \" + info.With);\n        }\n\n        static void ControlStreamsAddRemoveDemo(TwitterContext twitterCtx)\n        {\n            var evt = new ManualResetEventSlim(false);\n            string streamID = string.Empty;\n\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n\n            (from strm in twitterCtx.UserStream\n             where strm.Type == UserStreamType.Site &&\n                 //strm.With == \"followings\" &&\n                   strm.Follow == \"15411837\"/*, \"16761255\"*/\n             select strm)\n            .StreamingCallback(strm =>\n            {\n                if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                {\n                    Console.WriteLine(strm.Error.ToString());\n                    return;\n                }\n\n                Console.WriteLine(strm.Content + \"\\n\");\n\n                var json = JsonMapper.ToObject(strm.Content);\n                var jsonDict = json as IDictionary<string, JsonData>;\n\n                if (jsonDict != null && jsonDict.ContainsKey(\"control\"))\n                {\n                    streamID = json[\"control\"][\"control_uri\"].ToString().Replace(\"/1.1/site/c/\", \"\");\n                    evt.Set();\n                }\n\n                if (count++ >= 10)\n                {\n                    Console.WriteLine(\"Closing stream...\");\n                    strm.CloseStream();\n                }\n            })\n            .SingleOrDefault();\n\n            evt.Wait();\n\n            Console.WriteLine(\"\\nInitial Stream Users: \");\n            PrintUserInfo(twitterCtx, streamID);\n\n            ControlStream csAdd = twitterCtx.AddSiteStreamUser(new List<ulong> { 16761255 }, streamID);\n            Console.WriteLine(\"Command Response: \" + csAdd.CommandResponse);\n            Console.WriteLine(\"\\nAfter Adding a User: \");\n            PrintUserInfo(twitterCtx, streamID);\n\n            ControlStream csRemove = twitterCtx.RemoveSiteStreamUser(new List<ulong> { 15411837 }, streamID);\n            Console.WriteLine(\"Command Response: \" + csRemove.CommandResponse);\n            Console.WriteLine(\"\\nAfter Removing a User: \");\n            PrintUserInfo(twitterCtx, streamID);\n        }\n\n        static void PrintUserInfo(TwitterContext twitterCtx, string streamID)\n        {\n            var ctrlStrm =\n                (from strm in twitterCtx.ControlStream\n                 where strm.Type == ControlStreamType.Info &&\n                       strm.StreamID == streamID\n                 select strm)\n                .SingleOrDefault();\n\n            Console.WriteLine(\"\\nInfo Details:\\n\");\n\n            ControlStreamInfo info = ctrlStrm.Info;\n            foreach (var user in info.Users)\n            {\n                Console.WriteLine(\"User ID: {0}, Name: {1}\", user.UserID, user.Name); \n            }\n\n            Console.WriteLine();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/StringExtensions.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitterDemo\n{\n    static class StringExtensions\n    {\n        public static bool IsNullOrEmpty(this string value)\n        {\n            return String.IsNullOrEmpty(value);\n        }\n\n        public static bool IsNullOrWhiteSpace(this string value)\n        {\n            return value.IsNullOrEmpty() || value.Trim(' ').Length == 0;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/TrendsDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows trends demos\n    /// </summary>\n    public class TrendsDemos\n    {\n        /// <summary>\n        /// Run all trends related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            SearchAvailableTrendsDemo(twitterCtx);\n            SearchClosestTrendsDemo(twitterCtx);\n            SearchPlaceTrendsDemo(twitterCtx);\n        }\n\n        /// <summary>\n        /// Find current trends\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void SearchAvailableTrendsDemo(TwitterContext twitterCtx)\n        {\n            var trends =\n                from trnd in twitterCtx.Trends\n                where trnd.Type == TrendType.Available\n                select trnd;\n\n            var trend = trends.SingleOrDefault();\n\n            trend.Locations.ToList().ForEach(\n                loc => Console.WriteLine(\n                    \"Name: {0}, Country: {1}, WoeID: {2}\",\n                    loc.Name, loc.Country, loc.WoeID));\n        }\n\n        /// <summary>\n        /// Find trends near a specified lat/long\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void SearchClosestTrendsDemo(TwitterContext twitterCtx)\n        {\n            var trends =\n                from trnd in twitterCtx.Trends\n                where trnd.Type == TrendType.Closest &&\n                      trnd.Latitude == \"37.78215\" &&\n                      trnd.Longitude == \"-122.40060\"\n                select trnd;\n\n            var trend = trends.SingleOrDefault();\n\n            trend.Locations.ToList().ForEach(\n                loc => Console.WriteLine(\n                    \"Name: {0}, Country: {1}, WoeID: {2}\",\n                    loc.Name, loc.Country, loc.WoeID));\n        }\n\n        /// <summary>\n        /// Find trends at a specified WeoID\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void SearchPlaceTrendsDemo(TwitterContext twitterCtx)\n        {\n            var trends =\n                (from trnd in twitterCtx.Trends\n                 where trnd.Type == TrendType.Place &&\n                       trnd.WoeID == 2486982 // something other than 1\n                 select trnd)\n                .ToList();\n\n            Console.WriteLine(\n                \"Location: {0}\\n\", \n                trends.First().Locations.First().Name);\n\n            trends.ForEach(trnd => \n                Console.WriteLine(\n                    \"Name: {0}, Date: {1}, Query: {2}\\nSearchUrl: {3}\",\n                    trnd.Name, trnd.CreatedAt, trnd.Query, trnd.SearchUrl));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/TwitterContextDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    public class TwitterContextDemos\n    {\n        /// <summary>\n        /// Run demos that use TwitterContext members not covered by other API demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //ShowFeatureRateLimitHeadersViaResponseHeaders(twitterCtx);\n            ShowRawResults(twitterCtx);\n        }\n\n        /// <summary>\n        /// Performs a search query and displays the X-Feature... headers from the response\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        static void ShowFeatureRateLimitHeadersViaResponseHeaders(TwitterContext twitterCtx)\n        {\n            var user =\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.Search &&\n                       usr.Query == \"Joe Mayo\"\n                 select usr)\n                 .FirstOrDefault();\n\n            Console.WriteLine(\n                \"X-FeatureRateLimit-Limit: {0}\\n\" +\n                \"X-FeatureRateLimit-Remaining: {1}\\n\" +\n                \"X-FeatureRateLimit-Reset: {2}\\n\" +\n                \"X-FeatureRateLimit-Class: {3}\\n\",\n                twitterCtx.ResponseHeaders[\"X-FeatureRateLimit-Limit\"],\n                twitterCtx.ResponseHeaders[\"X-FeatureRateLimit-Remaining\"],\n                twitterCtx.ResponseHeaders[\"X-FeatureRateLimit-Reset\"],\n                twitterCtx.ResponseHeaders[\"X-FeatureRateLimit-Class\"]);\n        }\n\n        static void ShowRawResults(TwitterContext twitterCtx)\n        {\n            var publicTweets =\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home\n                 select tweet)\n                .ToList();\n\n            Console.WriteLine(\"\\nRaw Results: \\n\\n{0}\", twitterCtx.RawResult);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemo/UserDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterDemo\n{\n    /// <summary>\n    /// Shows user demos\n    /// </summary>\n    public class UserDemos\n    {\n        /// <summary>\n        /// Run all user related demos\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        public static void Run(TwitterContext twitterCtx)\n        {\n            //UserShowWithIDQueryDemo(twitterCtx);\n            //UserShowWithScreenNameQueryDemo(twitterCtx);\n            //UserShowForAuthenticatedUser(twitterCtx);\n            UsersLookupDemo(twitterCtx);\n            //UserSearchDemo(twitterCtx);\n            //UserSuggestedCategoriesListQueryDemo(twitterCtx);\n            //UserSuggestedCategoriesListWithLangQueryDemo(twitterCtx);\n            //UsersInSuggestedCategoryQueryDemo(twitterCtx);\n            //UserShowLoggedInUserQueryDemo(twitterCtx);\n            //CategoryStatusDemo(twitterCtx);\n            //ContributeeDemo(twitterCtx);\n            //ContributorDemo(twitterCtx);\n            //BannerSizesDemo(twitterCtx);\n        }\n\n        private static void CategoryStatusDemo(TwitterContext twitterCtx)\n        {\n            var catUsers =\n                (from user in twitterCtx.User\n                 where user.Type == UserType.CategoryStatus &&\n                       user.Slug == \"Technology\"\n                 select user)\n                .ToList();\n\n            Console.WriteLine(\"Tweets from Suggested Users in Technology Category: \\n\");\n\n            catUsers.ForEach(user => \n                Console.WriteLine(\n                    \"User: {0}\\nTweet: {1}\\n\", \n                    user.Identifier.ScreenName, \n                    user.Status == null ?\n                        \"<Tweet not available.>\" : \n                        user.Status.Text));\n        }\n\n        /// <summary>\n        /// Shows how to search for a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserSearchDemo(TwitterContext twitterCtx)\n        {\n            var user =\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.Search &&\n                       usr.Query == \"Joe Mayo\"\n                 select usr)\n                 .FirstOrDefault();\n\n            Console.WriteLine(\"User Name: \" + user.Identifier.ScreenName);\n        }\n\n        /// <summary>\n        /// Shows how to perform a lookup of specified user details\n        /// </summary>\n        /// <param name=\"twitterCtx\"></param>\n        private static void UsersLookupDemo(TwitterContext twitterCtx)\n        {\n            var followers =\n                (from user in twitterCtx.SocialGraph\n                 where user.Type == SocialGraphType.Followers &&\n                       user.ScreenName == \"JoeMayo\"\n                 select user)\n                .SingleOrDefault();\n\n            var userIDs = string.Join(\",\", followers.IDs.Take(100).ToList());\n            var users =\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Lookup &&\n                       user.UserID == userIDs\n                 select user)\n                .ToList();\n\n            //var users =\n            //    (from user in twitterCtx.User\n            //     where user.Type == UserType.Lookup &&\n            //           user.ScreenName == \"JoeMayo,LinqToTweeter,NewStarCw46\"\n            //     select user)\n            //     .ToList();\n\n            users.ForEach(user => Console.WriteLine(\"Name: \" + user.Identifier.ScreenName));\n        }\n\n        /// <summary>\n        /// shows how to query for users in a suggested category\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UsersInSuggestedCategoryQueryDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                (from tweet in twitterCtx.User\n                 where tweet.Type == UserType.Category &&\n                       tweet.Slug == \"funny\"\n                 select tweet)\n                 .ToList();\n\n            users.ForEach(\n                user => Console.WriteLine(\"User: \" + user.Identifier.ScreenName));\n        }\n\n        /// <summary>\n        /// shows how to query suggested categories\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserSuggestedCategoriesListQueryDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                from tweet in twitterCtx.User\n                where tweet.Type == UserType.Categories\n                select tweet;\n\n            var user = users.SingleOrDefault();\n\n            user.Categories.ForEach(\n                cat => Console.WriteLine(\"Category: \" + cat.Name));\n        }\n\n        /// <summary>\n        /// shows how to query suggested categories\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserSuggestedCategoriesListWithLangQueryDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                from usr in twitterCtx.User\n                where usr.Type == UserType.Categories &&\n                      usr.Lang == \"it\"\n                select usr;\n\n            var user = users.SingleOrDefault();\n\n            user.Categories.ForEach(\n                cat => Console.WriteLine(\"Category: \" + cat.Name));\n        }\n\n        /// <summary>\n        /// shows how to query authenticated user\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserShowForAuthenticatedUser(TwitterContext twitterCtx)\n        {\n            string screenName = twitterCtx.AuthorizedClient.ScreenName;\n\n            var user =\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.Show &&\n                       usr.ScreenName == screenName\n                 select usr)\n                .SingleOrDefault();\n\n            var name = user.Identifier.ScreenName;\n            var lastStatus = user.Status == null ? \"No Status\" : user.Status.Text;\n\n            Console.WriteLine(\"\\nName: {0}, Last Tweet: {1}\\n\", name, lastStatus);\n        }\n\n        /// <summary>\n        /// shows how to query users\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserShowWithScreenNameQueryDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                from tweet in twitterCtx.User\n                where tweet.Type == UserType.Show &&\n                      tweet.ScreenName == \"JoeMayo\"\n                select tweet;\n\n            var user = users.SingleOrDefault();\n\n            var name = user.Identifier.ScreenName;\n            var lastStatus = user.Status == null ? \"No Status\" : user.Status.Text;\n\n            Console.WriteLine();\n            Console.WriteLine(\"Name: {0}, Last Tweet: {1}\\n\", name, lastStatus);\n        }\n\n        /// <summary>\n        /// shows how to query users\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserShowLoggedInUserQueryDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                from usr in twitterCtx.User\n                where usr.Type == UserType.Show &&\n                      usr.ScreenName == twitterCtx.UserName\n                select usr;\n\n            var user = users.SingleOrDefault();\n\n            var name = user.Identifier.ScreenName;\n            var lastStatus = user.Status == null ? \"No Status\" : user.Status.Text;\n\n            Console.WriteLine();\n            Console.WriteLine(\"Name: {0}, Last Tweet: {1}\\n\", name, lastStatus);\n        }\n\n        /// <summary>\n        /// Uses LINQ to Twitter to discover password to 1st Chirp conference\n        /// </summary>\n        /// <param name=\"twitterCtx\">TwitterContext</param>\n        private static void UserShowWithIDQueryDemo(TwitterContext twitterCtx)\n        {\n            var user =\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.Show &&\n                      usr.UserID == \"6253282\"\n                 select usr)\n                 .SingleOrDefault();\n\n            Console.WriteLine(\n                \"The password to Chirp is: {0}\",\n                user.Identifier.ScreenName);\n        }\n\n        static void ContributeeDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Contributees &&\n                       user.ScreenName == \"biz\"\n                 select user)\n                .ToList();\n\n            users.ForEach(\n                user => Console.WriteLine(\"User: \" + user.Identifier.ScreenName));\n        }\n\n        static void ContributorDemo(TwitterContext twitterCtx)\n        {\n            var users =\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Contributors &&\n                       user.ScreenName == \"twitter\"\n                 select user)\n                .ToList();\n\n            users.ForEach(\n                user => Console.WriteLine(\"User: \" + user.Identifier.ScreenName));\n        }\n\n        static void BannerSizesDemo(TwitterContext twitterCtx)\n        {\n            var user =\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.BannerSizes &&\n                       usr.ScreenName == \"JoeMayo\"\n                 select usr)\n                .SingleOrDefault();\n\n            user.BannerSizes.ForEach(size => \n                Console.WriteLine(\n                    \"Label: {0}, W: {1} H: {2} URL: {3}\",\n                    size.Label, size.Width, size.Height, size.Url));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/App.config",
    "content": "<?xml version=\"1.0\"?>\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"twitterConsumerKey\" value=\"\"/>\n    <add key=\"twitterConsumerSecret\" value=\"\"/>\n    <add key=\"twitterOAuthToken\" value=\"\"/>\n    <add key=\"twitterAccessToken\" value=\"\"/>\n  </appSettings>\n  <!--\n    The schemeSettings element, below, with the following characters, doesn't work in .NET 4.5:\n    \n      \"*():'[]\"\n      \n    Therefore, if you find that you're receiving 401 Unauthorized when these characters\n    are used, then remove these characters from your queries. \n    \n    This applies to LINQ queries, which are HTTP GET requests. There should be any problem \n    with commands, which are method calls, which execute as HTTP Post requests. -->\n  <!--\n  <uri>\n    <schemeSettings>\n      <add name=\"https\" genericUriParserOptions=\"DontUnescapePathDotsAndSlashes\"/>\n    </schemeSettings>\n  </uri>-->\n  <startup>\n    <supportedRuntime version=\"v2.0.50727\"/>\n  </startup>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/LinqToTwitterDemoVB.vbproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <StartupObject>LinqToTwitterDemoVB.Module1</StartupObject>\n    <RootNamespace>LinqToTwitterDemoVB</RootNamespace>\n    <AssemblyName>LinqToTwitterDemoVB</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <MyType>Console</MyType>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <OptionExplicit>On</OptionExplicit>\n    <OptionCompare>Binary</OptionCompare>\n    <OptionStrict>Off</OptionStrict>\n    <OptionInfer>On</OptionInfer>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <OldToolsVersion>3.5</OldToolsVersion>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <DefineDebug>true</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DocumentationFile>LinqToTwitterDemoVB.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <DefineDebug>false</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DocumentationFile>LinqToTwitterDemoVB.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <DefineDebug>true</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DocumentationFile>LinqToTwitterDemoVB.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <CodeAnalysisLogFile>bin\\Debug\\LinqToTwitterDemoVB.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>\n    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>\n    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRuleSetDirectories>;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Team Tools\\Static Analysis Tools\\\\Rule Sets</CodeAnalysisRuleSetDirectories>\n    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>\n    <CodeAnalysisRuleDirectories>;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Team Tools\\Static Analysis Tools\\FxCop\\\\Rules</CodeAnalysisRuleDirectories>\n    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <DefineTrace>true</DefineTrace>\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DocumentationFile>LinqToTwitterDemoVB.xml</DocumentationFile>\n    <Optimize>true</Optimize>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <CodeAnalysisLogFile>bin\\Release\\LinqToTwitterDemoVB.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>\n    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>\n    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <CodeAnalysisRuleSetDirectories>;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Team Tools\\Static Analysis Tools\\\\Rule Sets</CodeAnalysisRuleSetDirectories>\n    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>\n    <CodeAnalysisRuleDirectories>;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Team Tools\\Static Analysis Tools\\FxCop\\\\Rules</CodeAnalysisRuleDirectories>\n    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.configuration\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Data.DataSetExtensions\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Import Include=\"Microsoft.VisualBasic\" />\n    <Import Include=\"System\" />\n    <Import Include=\"System.Collections\" />\n    <Import Include=\"System.Collections.Generic\" />\n    <Import Include=\"System.Data\" />\n    <Import Include=\"System.Diagnostics\" />\n    <Import Include=\"System.Linq\" />\n    <Import Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Module1.vb\" />\n    <Compile Include=\"My Project\\AssemblyInfo.vb\" />\n    <Compile Include=\"My Project\\Application.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Application.myapp</DependentUpon>\n    </Compile>\n    <Compile Include=\"My Project\\Resources.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"My Project\\Settings.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"My Project\\Resources.resx\">\n      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.vb</LastGenOutput>\n      <CustomToolNamespace>My.Resources</CustomToolNamespace>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"My Project\\Application.myapp\">\n      <Generator>MyApplicationCodeGenerator</Generator>\n      <LastGenOutput>Application.Designer.vb</LastGenOutput>\n    </None>\n    <None Include=\"My Project\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <CustomToolNamespace>My</CustomToolNamespace>\n      <LastGenOutput>Settings.Designer.vb</LastGenOutput>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitter\\LinqToTwitter.csproj\">\n      <Project>{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}</Project>\n      <Name>LinqToTwitter</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.VisualBasic.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/Module1.vb",
    "content": "﻿Imports System.Configuration\nImports LinqToTwitter\n\nModule Module1\n\n    Sub Main()\n        '\n        ' get user credentials and instantiate TwitterContext\n        '\n\n        If String.IsNullOrEmpty(ConfigurationManager.AppSettings(\"twitterConsumerKey\")) Or String.IsNullOrEmpty(ConfigurationManager.AppSettings(\"twitterConsumerSecret\")) Then\n\t\t\tConsole.WriteLine(\"Please set the Twitter consumer key and secret values in the app.config file and run again.\")\n\t\t\tExit Sub\n\t\tEnd If\n\n        Dim credentials As IOAuthCredentials = New InMemoryCredentials\n\n        credentials.ConsumerKey = ConfigurationManager.AppSettings(\"twitterConsumerKey\")\n        credentials.ConsumerSecret = ConfigurationManager.AppSettings(\"twitterConsumerSecret\")\n\n        Dim auth As PinAuthorizer = New PinAuthorizer()\n        auth.Credentials = credentials\n        auth.GetPin = AddressOf VerifierCallback\n        auth.GoToTwitterAuthorization = Function(pageLink) Process.Start(pageLink)\n        auth.Authorize()\n\n        Dim twitterCtx As TwitterContext = New TwitterContext(auth)\n\n\t\ttwitterCtx.Log = Console.Out\n\n        'auth.SignOn()\n\n\t\t'Dim twitterContext = New TwitterContext(auth)\n\n\t\t'\n\t\t' Status Demos\n\t\t'\n\n        'UpdateStatusDemo(twitterCtx)\n\t\t'UpdateStatusWithReplyDemo(twitterCtx)\n\t\t'DestroyStatusDemo(twitterCtx)\n\t\t'MentionsDemo(twitterCtx)\n\t\t'SingleStatusQueryDemo(twitterCtx)\n        'FriendsStatusQueryDemo(twitterCtx)\n\t\t'UserStatusByNameDemo(twitterCtx)\n\t\t'UserStatusByQueryDemo(twitterCtx)\n\t\t'FirstStatusByQueryDemo(twitterCtx)\n        'PublicStatusQueryDemo(twitterCtx)\n\t\t'PublicStatusFilteredQueryDemo(twitterCtx)\n\n\t\t'\n\t\t' User Demos\n\t\t'\n\t\t'UserShowWithIDQueryDemo(twitterCtx)\n\t\t'UserShowWithScreenNameQueryDemo(twitterCtx)\n\t\t'UserShowLoggedInUserQueryDemo(twitterCtx)\n\n\t\t'\n\t\t' Direct Message Demos\n\t\t'\n\n        'DirectMessageSentByQueryDemo(twitterCtx)\n        'NewDirectMessageDemo(twitterCtx)\n\n\t\t'\n\t\t' Friendship Demos\n\t\t'\n\n\t\t'FriendshipExistsDemo(twitterCtx)\n\n\t\t'\n\t\t' Social Graph Demos\n\t\t'\n\n\t\t'ShowFriendsDemo(twitterCtx)\n\n\t\t'\n\t\t' Search Demos\n\t\t'\n\n        SearchTwitterDemo(twitterCtx)\n\n\t\t'\n\t\t' Favorites Demos\n\t\t'\n\n\t\t'FavoritesQueryDemo(twitterCtx)\n\n\t\t'\n\t\t' Notifications Demos\n\t\t'\n\n\t\t'EnableNotificationsDemo(twitterCtx)\n\t\t'DisableNotificationsDemo(twitterCtx)\n\n\t\t'\n\t\t' Block Demos\n\t\t'\n\n\t\t'BlockIDsDemo(twitterCtx)\n\n\t\t'\n\t\t' Help Demos\n\t\t'\n\n\t\t'PerformHelpTest(twitterCtx)\n\n\t\t'\n\t\t' Account Demos\n\t\t'\n\n        'VerifyAccountCredentialsDemo(twitterCtx)\n\n\t\t'\n\t\t' Trends Demos\n\t\t'\n\n\t\t'SearchCurrentTrendsDemo(twitterCtx)\n\n\t\t'\n\t\t' OAuth Demos\n\t\t'\n\n\t\t'HandleOAuthQueryDemo(twitterCtx)\n\n\t\t'\n\t\t' Saved Searches Demos\n\t\t'\n\n\t\t'QuerySavedSearchesDemo(twitterCtx)\n\n\t\tConsole.ReadKey()\n    End Sub\n\n    Private Function VerifierCallback() As String\n        Console.WriteLine(\"Next, you'll need to tell Twitter to authorize access.\\nThis program will not have access to your credentials, which is the benefit of OAuth.\\nOnce you log into Twitter and give this program permission,\\n come back to this console.\")\n        Console.Write(\"Please enter the PIN that Twitter gives you after authorizing this client: \")\n        Return Console.ReadLine()\n    End Function\n\n    Private Sub QuerySavedSearchesDemo(ByVal twitterCtx As TwitterContext)\n        Dim savedSearches = _\n            From search In twitterCtx.SavedSearch _\n            Where search.Type = SavedSearchType.Searches\n\n        For Each Search In savedSearches\n            Console.WriteLine(\"ID: {0}, Search: {1}\", Search.ID, Search.Name)\n        Next\n    End Sub\n\n    Private Sub HandleOAuthQueryDemo(ByVal twitterCtx As TwitterContext)\n\n        If twitterCtx.AuthorizedClient.IsAuthorized Then\n            Dim tweets = _\n                From tweet In twitterCtx.Status _\n                Where tweet.Type = StatusType.Show\n\n            For Each tweet In tweets\n                Console.WriteLine( _\n                    \"Friend: {0}, Created: {1}\\r\\nTweet: {2}\", _\n                    tweet.User.Name, _\n                    tweet.CreatedAt, _\n                    tweet.Text)\n            Next\n        End If\n\n    End Sub\n\n    Private Sub VerifyAccountCredentialsDemo(ByVal twitterCtx As TwitterContext)\n        '\n        'Uncomment the following to test the exception handling for invalid credentials.\n        '\n        'Dim credentials As IOAuthCredentials = New InMemoryCredentials\n\n        'credentials.ConsumerKey = \"abc\"\n        'credentials.ConsumerSecret = \"123\"\n\n        'Dim auth As PinAuthorizer = New PinAuthorizer()\n        'auth.Credentials = credentials\n        'twitterCtx = New TwitterContext(auth)\n\n        Dim accounts = _\n            From acct In twitterCtx.Account _\n            Where acct.Type = AccountType.VerifyCredentials\n\n        Try\n            For Each Account In accounts\n                Console.WriteLine(\"Credentials for account, {0}, are okay.\", Account.User.Name)\n            Next\n        Catch ex As TwitterQueryException\n            Console.WriteLine(\"Twitter did not recognize the credentials. Response from Twitter: \" & ex.Message)\n        End Try\n    End Sub\n\n    Private Sub BlockIDsDemo(ByVal twitterCtx As TwitterContext)\n        Dim result = _\n            From blockItem In twitterCtx.Blocks _\n            Where blockItem.Type = BlockingType.Ids\n\n\n        If result.ToList().Count = 0 Then\n            Console.WriteLine(\"No Blocks\")\n        End If\n\n        For Each block In result\n            Console.WriteLine(\"ID: {0}\", block.UserID)\n        Next\n    End Sub\n\n    Private Sub FavoritesQueryDemo(ByVal twitterCtx As TwitterContext)\n        Dim favorites = _\n            From fav In twitterCtx.Favorites _\n            Where fav.Type = FavoritesType.Favorites\n\n        For Each fav In favorites\n            Console.WriteLine( _\n                \"User Name: {0}, Tweet: {1}\", _\n                fav.User.Name, fav.Text)\n        Next\n    End Sub\n\n    Private Sub SearchTwitterDemo(ByVal twitterCtx As TwitterContext)\n        Dim queryResults = _\n            From search In twitterCtx.Search _\n            Where search.Type = SearchType.Search _\n            And search.Query = \"LINQ to Twitter\"\n\n        Console.WriteLine(\"Query: \" & Environment.NewLine)\n\n        For Each searchResult In queryResults\n            For Each entry In searchResult.Statuses\n                Console.WriteLine( _\n                    \"ID: {0}, Source: {1} - Content: {2}\" & Environment.NewLine, _\n                    entry.ID, entry.Source, entry.Text)\n            Next\n        Next\n    End Sub\n\n    Private Sub ShowFriendsDemo(ByVal twitterCtx As TwitterContext)\n        Dim friends = _\n            (From graph In twitterCtx.SocialGraph _\n             Where graph.Type = SocialGraphType.Friends _\n             And graph.ScreenName = \"LinqToTweeter\").ToList()\n\n        For Each frnd In friends\n            Console.WriteLine(\"Friend ID: \" & frnd.UserID)\n        Next\n    End Sub\n\n    Private Sub DirectMessageSentByQueryDemo(ByVal twitterContext As TwitterContext)\n        Dim directMessages = _\n            From dm In twitterContext.DirectMessage _\n            Where dm.Type = DirectMessageType.SentBy _\n            And dm.Count = 2\n\n        For Each dm In directMessages\n            Console.WriteLine( _\n                \"Sender: {0}, Tweet: {1}\", _\n                dm.SenderScreenName, _\n                dm.Text)\n        Next\n    End Sub\n\n    Private Sub UserShowWithIDQueryDemo(ByVal twitterCtx As TwitterContext)\n        Dim users = _\n            From user In twitterCtx.User _\n            Where user.Type = UserType.Show _\n            And user.ID = \"15411837\"\n\n        Dim singleUser As User = users.SingleOrDefault()\n\n        Console.WriteLine( _\n            \"Name: {0}, Last Tweet: {1}\" & Environment.NewLine, _\n            singleUser.Name, singleUser.Status.Text)\n    End Sub\n\n    Private Sub UserShowWithScreenNameQueryDemo(ByVal twitterCtx As TwitterContext)\n        Dim users = _\n            From user In twitterCtx.User _\n            Where user.Type = UserType.Show _\n            And user.ScreenName = \"JoeMayo\"\n        Dim singleUser As User = users.SingleOrDefault()\n\n        Console.WriteLine( _\n            \"Name: {0}, Last Tweet: {1}\" & Environment.NewLine, _\n            singleUser.Name, singleUser.Status.Text)\n    End Sub\n\n    Private Sub UserShowLoggedInUserQueryDemo(ByVal twitterCtx As TwitterContext)\n        Dim users = _\n            From usr In twitterCtx.User _\n            Where usr.Type = UserType.Show _\n                AndAlso usr.ScreenName = twitterCtx.UserName _\n            Select usr\n        Dim singleUser As User = users.SingleOrDefault()\n\n        Console.WriteLine( _\n            \"Name: {0}, Last Tweet: {1}\" & Environment.NewLine, _\n            singleUser.Name, singleUser.Status.Text)\n    End Sub\n\n    Private Sub FriendsStatusQueryDemo(ByVal twitterCtx As TwitterContext)\n        Dim ts = From t In twitterCtx.Status _\n                 Where t.Type = StatusType.Show\n\n        For Each tweet In ts\n            Console.WriteLine(\"Friend: \" & tweet.User.Name & Environment.NewLine & _\n                              \"Tweet: \" & tweet.Text & Environment.NewLine)\n        Next\n    End Sub\n\n    Private Sub SingleStatusQueryDemo(ByVal twitterCtx As TwitterContext)\n        Dim ts = From t In twitterCtx.Status _\n                 Where t.Type = StatusType.Show _\n                 And t.ID = \"2534357295\"\n\n        For Each mention In ts\n            Console.WriteLine(\"Mention: \" & mention.Text)\n        Next\n    End Sub\n\n    Private Sub MentionsDemo(ByVal twitterCtx As TwitterContext)\n        Dim ts = From t In twitterCtx.Status _\n                 Where t.Type = StatusType.Mentions\n\n        For Each mention In ts\n            Console.WriteLine(\"Mention: \" & mention.Text)\n        Next\n    End Sub\n\n    Private Sub UserStatusByNameDemo(ByVal twitterCtx As TwitterContext)\n        Dim lastN As Integer = 20\n        Dim screenName As String = \"JoeMayo\"\n\n        Dim ts = From t In twitterCtx.Status _\n                 Where t.Type = StatusType.User _\n                 And t.ScreenName = screenName _\n                 And t.Count = lastN\n\n        For Each tweet In ts\n            Console.WriteLine( _\n                \"(\" & tweet.ID & \")\" & _\n                \"[\" & tweet.User.ID & \"]\" & _\n                tweet.User.Name & \", \" & _\n                tweet.Text & \", \" & _\n                tweet.CreatedAt)\n        Next\n    End Sub\n\n    Private Sub UserStatusByQueryDemo(ByVal twitterCtx As TwitterContext)\n        Console.WriteLine()\n\n        Dim statusTweets = From tweet In twitterCtx.Status _\n                 Where tweet.Type = StatusType.User _\n                 And tweet.ID = \"15411837\" _\n                 And tweet.Count = 20 _\n                 And tweet.SinceID = 4444196804\n\n        For Each tweet In statusTweets\n            Console.WriteLine( _\n                \"(\" & tweet.ID & \")\" & _\n                \"[\" & tweet.User.ID & \"]\" & _\n                tweet.User.Name & \", \" & _\n                tweet.Text & \", \" & _\n                tweet.CreatedAt)\n        Next\n    End Sub\n\n    Private Sub FirstStatusByQueryDemo(ByVal twitterCtx As TwitterContext)\n        Console.WriteLine()\n\n        Dim statusTweets = From tweet In twitterCtx.Status _\n                 Where tweet.Type = StatusType.User _\n                 And tweet.ID = \"15411837\" _\n                 And tweet.Count = 20 _\n                 And tweet.SinceID = 4444196804\n\n        Dim status As Status = statusTweets.FirstOrDefault()\n\n        Console.WriteLine( _\n            \"(\" & status.ID & \")\" & _\n            \"[\" & status.User.ID & \"]\" & _\n            status.User.Name & \", \" & _\n            status.Text & \", \" & _\n            status.CreatedAt)\n    End Sub\n\n\n    Private Sub UpdateStatusDemo(ByVal twitterCtx As TwitterContext)\n        Dim statusMsg As String = \"\\u00C7 Testing LINQ to Twitter update status (with VB) on \" & DateTime.Now.ToString() & \" #linqtotwitter\"\n\n        Console.WriteLine(\"Status being sent: \" & statusMsg)\n\n        Dim tweet = twitterCtx.UpdateStatus(statusMsg)\n\n        Console.WriteLine( _\n            \"Status returned: \" & _\n            \"(\" & tweet.ID & \")\" & _\n            \"[\" & tweet.User.ID & \"]\" & _\n            tweet.User.Name & \", \" & _\n            tweet.Text & \", \" & _\n            tweet.CreatedAt)\n    End Sub\n\n    Private Sub UpdateStatusWithReplyDemo(ByVal twitterCtx As TwitterContext)\n        Dim statusMsg As String = \"@LinqToTweeter Testing LINQ to Twitter (with VB) with reply on \" & DateTime.Now.ToString() & \" #linqtotwitter\"\n\n        Console.WriteLine(\"Status being sent: \" & statusMsg)\n\n        Dim tweet = twitterCtx.UpdateStatus(statusMsg)\n\n        Console.WriteLine( _\n            \"Status returned: \" & _\n            \"(\" & tweet.ID & \")\" & _\n            \"[\" & tweet.User.ID & \"]\" & _\n            tweet.User.Name & \", \" & _\n            tweet.Text & \", \" & _\n            tweet.CreatedAt)\n    End Sub\n\n    Private Sub DestroyStatusDemo(ByVal twitterCtx As TwitterContext)\n\n        Dim tweet = twitterCtx.DestroyStatus(\"4491132999\")\n\n        Console.WriteLine( _\n            \"Deleted Status: \" & _\n            \"(\" & tweet.ID & \")\" & _\n            \"[\" & tweet.User.ID & \"]\" & _\n            tweet.User.Name & \", \" & _\n            tweet.Text & \", \" & _\n            tweet.CreatedAt)\n    End Sub\n\n    Private Sub NewDirectMessageDemo(twitterCtx As TwitterContext)\n        Dim message = twitterCtx.NewDirectMessage(\"16761255\", \"Direct Message VB Test - \" + DateTime.Now + \"!'\")\n\n        Console.WriteLine(\n            \"Recipient: {0}, Message: {1}, Date: {2}\",\n            message.RecipientScreenName,\n            message.Text,\n            message.CreatedAt)\n\n    End Sub\n\nEnd Module\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/Application.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.18033\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/Application.myapp",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<MyApplicationData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <MySubMain>false</MySubMain>\n  <SingleInstance>false</SingleInstance>\n  <ShutdownMode>0</ShutdownMode>\n  <EnableVisualStyles>true</EnableVisualStyles>\n  <AuthenticationMode>0</AuthenticationMode>\n  <ApplicationType>2</ApplicationType>\n  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>\n</MyApplicationData>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/AssemblyInfo.vb",
    "content": "﻿Imports System.Reflection\nImports System.Runtime.InteropServices\n\n' General Information about an assembly is controlled through the following \n' set of attributes. Change these attribute values to modify the information\n' associated with an assembly.\n\n' Review the values of the assembly attributes\n\n<Assembly: AssemblyTitle(\"LinqToTwitterDemoVB\")> \n<Assembly: AssemblyDescription(\"\")> \n<Assembly: AssemblyCompany(\"\")> \n<Assembly: AssemblyProduct(\"LinqToTwitterDemoVB\")> \n<Assembly: AssemblyCopyright(\"Copyright ©  2009\")> \n<Assembly: AssemblyTrademark(\"\")> \n\n<Assembly: ComVisible(False)>\n\n'The following GUID is for the ID of the typelib if this project is exposed to COM\n<Assembly: Guid(\"d34ac8b5-a3b9-4045-b747-ff41679037f4\")> \n\n' Version information for an assembly consists of the following four values:\n'\n'      Major Version\n'      Minor Version \n'      Build Number\n'      Revision\n'\n' You can specify all the values or you can default the Build and Revision Numbers \n' by using the '*' as shown below:\n' <Assembly: AssemblyVersion(\"1.0.*\")> \n\n<Assembly: AssemblyVersion(\"1.0.0.0\")> \n<Assembly: AssemblyFileVersion(\"1.0.0.0\")> \n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/Resources.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.18033\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\nImports System\n\nNamespace My.Resources\n    \n    'This class was auto-generated by the StronglyTypedResourceBuilder\n    'class via a tool like ResGen or Visual Studio.\n    'To add or remove a member, edit your .ResX file then rerun ResGen\n    'with the /str option, or rebuild your VS project.\n    '''<summary>\n    '''  A strongly-typed resource class, for looking up localized strings, etc.\n    '''</summary>\n    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\"),  _\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _\n     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _\n    Friend Module Resources\n        \n        Private resourceMan As Global.System.Resources.ResourceManager\n        \n        Private resourceCulture As Global.System.Globalization.CultureInfo\n        \n        '''<summary>\n        '''  Returns the cached ResourceManager instance used by this class.\n        '''</summary>\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\n        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager\n            Get\n                If Object.ReferenceEquals(resourceMan, Nothing) Then\n                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager(\"LinqToTwitterDemoVB.Resources\", GetType(Resources).Assembly)\n                    resourceMan = temp\n                End If\n                Return resourceMan\n            End Get\n        End Property\n        \n        '''<summary>\n        '''  Overrides the current thread's CurrentUICulture property for all\n        '''  resource lookups using this strongly typed resource class.\n        '''</summary>\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\n        Friend Property Culture() As Global.System.Globalization.CultureInfo\n            Get\n                Return resourceCulture\n            End Get\n            Set\n                resourceCulture = value\n            End Set\n        End Property\n    End Module\nEnd Namespace\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/Settings.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.18033\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n\nNamespace My\n    \n    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _\n     Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"10.0.0.0\"),  _\n     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\n    Partial Friend NotInheritable Class MySettings\n        Inherits Global.System.Configuration.ApplicationSettingsBase\n        \n        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)\n        \n#Region \"My.Settings Auto-Save Functionality\"\n#If _MyType = \"WindowsForms\" Then\n    Private Shared addedHandler As Boolean\n\n    Private Shared addedHandlerLockObject As New Object\n\n    <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\n    Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)\n        If My.Application.SaveMySettingsOnExit Then\n            My.Settings.Save()\n        End If\n    End Sub\n#End If\n#End Region\n        \n        Public Shared ReadOnly Property [Default]() As MySettings\n            Get\n                \n#If _MyType = \"WindowsForms\" Then\n               If Not addedHandler Then\n                    SyncLock addedHandlerLockObject\n                        If Not addedHandler Then\n                            AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings\n                            addedHandler = True\n                        End If\n                    End SyncLock\n                End If\n#End If\n                Return defaultInstance\n            End Get\n        End Property\n    End Class\nEnd Namespace\n\nNamespace My\n    \n    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _\n    Friend Module MySettingsProperty\n        \n        <Global.System.ComponentModel.Design.HelpKeywordAttribute(\"My.Settings\")>  _\n        Friend ReadOnly Property Settings() As Global.LinqToTwitterDemoVB.My.MySettings\n            Get\n                Return Global.LinqToTwitterDemoVB.My.MySettings.Default\n            End Get\n        End Property\n    End Module\nEnd Namespace\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterDemoVB/My Project/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" UseMySettingsClassName=\"true\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/App_Start/AuthConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.Web.WebPages.OAuth;\nusing LinqToTwitterMvcDemo.Models;\n\nnamespace LinqToTwitterMvcDemo\n{\n    public static class AuthConfig\n    {\n        public static void RegisterAuth()\n        {\n            // To let users of this site log in using their accounts from other sites such as Microsoft, Facebook, and Twitter,\n            // you must update this site. For more information visit http://go.microsoft.com/fwlink/?LinkID=252166\n\n            //OAuthWebSecurity.RegisterMicrosoftClient(\n            //    clientId: \"\",\n            //    clientSecret: \"\");\n\n            //OAuthWebSecurity.RegisterTwitterClient(\n            //    consumerKey: \"\",\n            //    consumerSecret: \"\");\n\n            //OAuthWebSecurity.RegisterFacebookClient(\n            //    appId: \"\",\n            //    appSecret: \"\");\n\n            //OAuthWebSecurity.RegisterGoogleClient();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/App_Start/BundleConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Optimization;\n\nnamespace LinqToTwitterMvcDemo\n{\n    public class BundleConfig\n    {\n        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/jquery\").Include(\n                        \"~/Scripts/jquery-{version}.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/jqueryui\").Include(\n                        \"~/Scripts/jquery-ui-{version}.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/jqueryval\").Include(\n                        \"~/Scripts/jquery.unobtrusive*\",\n                        \"~/Scripts/jquery.validate*\"));\n\n            // Use the development version of Modernizr to develop with and learn from. Then, when you're\n            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                        \"~/Scripts/modernizr-*\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/css\").Include(\"~/Content/site.css\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/themes/base/css\").Include(\n                        \"~/Content/themes/base/jquery.ui.core.css\",\n                        \"~/Content/themes/base/jquery.ui.resizable.css\",\n                        \"~/Content/themes/base/jquery.ui.selectable.css\",\n                        \"~/Content/themes/base/jquery.ui.accordion.css\",\n                        \"~/Content/themes/base/jquery.ui.autocomplete.css\",\n                        \"~/Content/themes/base/jquery.ui.button.css\",\n                        \"~/Content/themes/base/jquery.ui.dialog.css\",\n                        \"~/Content/themes/base/jquery.ui.slider.css\",\n                        \"~/Content/themes/base/jquery.ui.tabs.css\",\n                        \"~/Content/themes/base/jquery.ui.datepicker.css\",\n                        \"~/Content/themes/base/jquery.ui.progressbar.css\",\n                        \"~/Content/themes/base/jquery.ui.theme.css\"));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/App_Start/FilterConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Mvc;\n\nnamespace LinqToTwitterMvcDemo\n{\n    public class FilterConfig\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters)\n        {\n            filters.Add(new HandleErrorAttribute());\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/App_Start/RouteConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Web.Routing;\n\nnamespace LinqToTwitterMvcDemo\n{\n    public class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            routes.MapRoute(\n                name: \"Default\",\n                url: \"{controller}/{action}/{id}\",\n                defaults: new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional }\n            );\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/App_Start/WebApiConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web.Http;\n\nnamespace LinqToTwitterMvcDemo\n{\n    public static class WebApiConfig\n    {\n        public static void Register(HttpConfiguration config)\n        {\n            config.Routes.MapHttpRoute(\n                name: \"DefaultApi\",\n                routeTemplate: \"api/{controller}/{id}\",\n                defaults: new { id = RouteParameter.Optional }\n            );\n\n            // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.\n            // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.\n            // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.\n            //config.EnableQuerySupport();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/Site.css",
    "content": "﻿html {\n    background-color: #e2e2e2;\n    margin: 0;\n    padding: 0;\n}\n\nbody {\n    background-color: #fff;\n    border-top: solid 10px #000;\n    color: #333;\n    font-size: .85em;\n    font-family: \"Segoe UI\", Verdana, Helvetica, Sans-Serif;\n    margin: 0;\n    padding: 0;\n}\n\na {\n    color: #333;\n    outline: none;\n    padding-left: 3px;\n    padding-right: 3px;\n    text-decoration: underline;\n}\n\n    a:link, a:visited,\n    a:active, a:hover {\n        color: #333;\n    }\n\n    a:hover {\n        background-color: #c7d1d6;\n    }\n\nheader, footer, hgroup,\nnav, section {\n    display: block;\n}\n\nmark {\n    background-color: #a6dbed;\n    padding-left: 5px;\n    padding-right: 5px;\n}\n\n.float-left {\n    float: left;\n}\n\n.float-right {\n    float: right;\n}\n\n.clear-fix:after {\n    content: \".\";\n    clear: both;\n    display: block;\n    height: 0;\n    visibility: hidden;\n}\n\nh1, h2, h3,\nh4, h5, h6 {\n    color: #000;\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\nh1 {\n    font-size: 2em;\n}\n\nh2 {\n    font-size: 1.75em;\n}\n\nh3 {\n    font-size: 1.2em;\n}\n\nh4 {\n    font-size: 1.1em;\n}\n\nh5, h6 {\n    font-size: 1em;\n}\n\n    h5 a:link, h5 a:visited, h5 a:active {\n        padding: 0;\n        text-decoration: none;\n    }\n\n\n/* main layout\n----------------------------------------------------------*/\n.content-wrapper {\n    margin: 0 auto;\n    max-width: 960px;\n}\n\n#body {\n    background-color: #efeeef;\n    clear: both;\n    padding-bottom: 35px;\n}\n\n    .main-content {\n        background: url(\"../Images/accent.png\") no-repeat;\n        padding-left: 10px;\n        padding-top: 30px;\n    }\n\n    .featured + .main-content {\n        background: url(\"../Images/heroAccent.png\") no-repeat;\n    }\n\nheader .content-wrapper {\n    padding-top: 20px; \n}\n\nfooter {\n    clear: both;\n    background-color: #e2e2e2;\n    font-size: .8em;\n    height: 100px;\n}\n\n\n/* site title\n----------------------------------------------------------*/\n.site-title {\n    color: #c8c8c8;\n    font-family: Rockwell, Consolas, \"Courier New\", Courier, monospace;\n    font-size: 2.3em;\n    margin: 0;\n}\n\n.site-title a, .site-title a:hover, .site-title a:active {\n    background: none;\n    color: #c8c8c8;\n    outline: none;\n    text-decoration: none;\n}\n\n\n/* login\n----------------------------------------------------------*/\n#login {\n    display: block;\n    font-size: .85em;\n    margin: 0 0 10px;\n    text-align: right;\n}\n\n    #login a {\n        background-color: #d3dce0;\n        margin-left: 10px;\n        margin-right: 3px;\n        padding: 2px 3px;\n        text-decoration: none;\n    }\n\n    #login a.username {\n        background: none;\n        margin: 0;\n        padding: 0;\n        text-decoration: underline;\n    }\n\n    #login ul {\n        margin: 0;\n    }\n\n    #login li {\n        display: inline;\n        list-style: none;\n    }\n\n\n/* menu\n----------------------------------------------------------*/\nul#menu {\n    font-size: 1.3em;\n    font-weight: 600;\n    margin: 0 0 5px;\n    padding: 0;\n    text-align: right;\n}\n\n    ul#menu li {\n        display: inline;\n        list-style: none;\n        padding-left: 15px;\n    }\n\n        ul#menu li a {\n            background: none;\n            color: #999;\n            text-decoration: none;\n        }\n\n        ul#menu li a:hover {\n            color: #333;\n            text-decoration: none;\n        }\n\n\n/* page elements\n----------------------------------------------------------*/\n/* featured */\n.featured {\n    background-color: #fff;\n}\n\n    .featured .content-wrapper {\n        background-color: #7ac0da;\n        background-image: -ms-linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);\n        background-image: -o-linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);\n        background-image: -webkit-gradient(linear, left top, right top, color-stop(0, #7ac0da), color-stop(1, #a4d4e6));\n        background-image: -webkit-linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);\n        background-image: linear-gradient(left, #7ac0da 0%, #a4d4e6 100%);\n        color: #3e5667;\n        padding: 20px 40px 30px 40px;\n    }\n\n        .featured hgroup.title h1, .featured hgroup.title h2 {\n            color: #fff;\n        }\n\n        .featured p {\n            font-size: 1.1em;\n        }\n\n/* page titles */\nhgroup.title {\n    margin-bottom: 10px;\n}\n\nhgroup.title h1, hgroup.title h2 {\n    display: inline;\n}\n\nhgroup.title h2 {\n    font-weight: normal;\n    margin-left: 3px;\n}\n\n/* features */\nsection.feature {\n    width: 300px;\n    float: left;\n    padding: 10px;\n}\n\n/* ordered list */\nol.round {\n    list-style-type: none;\n    padding-left: 0;\n}\n\n    ol.round li {\n        margin: 25px 0;\n        padding-left: 45px;\n    }\n\n        ol.round li.zero {\n            background: url(\"../Images/orderedList0.png\") no-repeat;\n        }\n\n        ol.round li.one {\n            background: url(\"../Images/orderedList1.png\") no-repeat;\n        }\n\n        ol.round li.two {\n            background: url(\"../Images/orderedList2.png\") no-repeat;\n        }\n\n        ol.round li.three {\n            background: url(\"../Images/orderedList3.png\") no-repeat;\n        }\n\n        ol.round li.four {\n            background: url(\"../Images/orderedList4.png\") no-repeat;\n        }\n\n        ol.round li.five {\n            background: url(\"../Images/orderedList5.png\") no-repeat;\n        }\n\n        ol.round li.six {\n            background: url(\"../Images/orderedList6.png\") no-repeat;\n        }\n\n        ol.round li.seven {\n            background: url(\"../Images/orderedList7.png\") no-repeat;\n        }\n\n        ol.round li.eight {\n            background: url(\"../Images/orderedList8.png\") no-repeat;\n        }\n\n        ol.round li.nine {\n            background: url(\"../Images/orderedList9.png\") no-repeat;\n        }\n\n/* content */\narticle {\n    float: left;\n    width: 70%;\n}\n\naside {\n    float: right;\n    width: 25%;\n}\n\n    aside ul {\n        list-style: none;\n        padding: 0;\n    }\n\n        aside ul li {\n            background: url(\"../Images/bullet.png\") no-repeat 0 50%;\n            padding: 2px 0 2px 20px;\n        }\n\n.label {\n    font-weight: 700;\n}\n\n/* login page */\n#loginForm {\n    border-right: solid 2px #c8c8c8;\n    float: left;\n    width: 55%;\n}\n\n    #loginForm .validation-error {\n        display: block;\n        margin-left: 15px;\n    }\n\n    #loginForm .validation-summary-errors ul {\n        margin: 0;\n        padding: 0;\n    }\n\n    #loginForm .validation-summary-errors li {\n        display: inline;\n        list-style: none;\n        margin: 0;\n    }\n\n    #loginForm input {\n        width: 250px;\n    }\n\n    #loginForm input[type=\"checkbox\"],\n    #loginForm input[type=\"submit\"],\n    #loginForm input[type=\"button\"],\n    #loginForm button {\n        width: auto;\n    }\n\n#socialLoginForm {\n    margin-left: 40px;\n    float: left;\n    width: 40%;\n}\n\n    #socialLoginForm h2 {\n        margin-bottom:  5px;\n    }\n\n#socialLoginList button {\n    margin-bottom: 12px;\n}\n\n#logoutForm {\n    display: inline;\n}\n\n/* contact */\n.contact h3 {\n    font-size: 1.2em;\n}\n\n.contact p {\n    margin: 5px 0 0 10px;\n}\n\n.contact iframe {\n    border: 1px solid #333;\n    margin: 5px 0 0 10px;\n}\n\n/* forms */\nfieldset {\n    border: none;\n    margin: 0;\n    padding: 0;\n}\n\n    fieldset legend {\n        display: none;\n    }\n\n    fieldset ol {\n        padding: 0;\n        list-style: none;\n    }\n\n        fieldset ol li {\n            padding-bottom: 5px;\n        }\n\nlabel {\n    display: block;\n    font-size: 1.2em;\n    font-weight: 600;\n}\n\nlabel.checkbox {\n    display: inline;\n}\n\ninput, textarea {\n    border: 1px solid #e2e2e2;\n    background: #fff;\n    color: #333;\n    font-size: 1.2em;\n    margin: 5px 0 6px 0;\n    padding: 5px;\n    width: 300px;\n}\n\ntextarea {\n    font-family: inherit;\n    width: 500px;\n}\n\n    input:focus, textarea:focus {\n        border: 1px solid #7ac0da;\n    }\n\n    input[type=\"checkbox\"] {\n        background: transparent;\n        border: inherit;\n        width: auto;\n    }\n\n    input[type=\"submit\"],\n    input[type=\"button\"],\n    button {\n        background-color: #d3dce0;\n        border: 1px solid #787878;\n        cursor: pointer;\n        font-size: 1.2em;\n        font-weight: 600;\n        padding: 7px;\n        margin-right: 8px;\n        width: auto;\n    }\n\n    td input[type=\"submit\"],\n    td input[type=\"button\"],\n    td button {\n        font-size: 1em;\n        padding: 4px;\n        margin-right: 4px;\n    }\n\n/* info and errors */\n.message-info {\n    border: 1px solid;\n    clear: both;\n    padding: 10px 20px;\n}\n\n.message-error {\n    clear: both;\n    color: #e80c4d;\n    font-size: 1.1em;\n    font-weight: bold;\n    margin: 20px 0 10px 0;\n}\n\n.message-success {\n    color: #7ac0da;\n    font-size: 1.3em;\n    font-weight: bold;\n    margin: 20px 0 10px 0;\n}\n\n.error {\n    color: #e80c4d;\n}\n\n/* styles for validation helpers */\n.field-validation-error {\n    color: #e80c4d;\n    font-weight: bold;\n}\n\n.field-validation-valid {\n    display: none;\n}\n\ninput.input-validation-error {\n    border: 1px solid #e80c4d;\n}\n\ninput[type=\"checkbox\"].input-validation-error {\n    border: 0 none;\n}\n\n.validation-summary-errors {\n    color: #e80c4d;\n    font-weight: bold;\n    font-size: 1.1em;\n}\n\n.validation-summary-valid {\n    display: none;\n}\n\n\n/* tables\n----------------------------------------------------------*/\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n    margin-top: 0.75em;\n    border: 0 none;\n}\n\nth {\n    font-size: 1.2em;\n    text-align: left;\n    border: none 0px;\n    padding-left: 0;\n}\n\n    th a {\n        display: block;\n        position: relative;\n    }\n\n    th a:link, th a:visited, th a:active, th a:hover {\n        color: #333;\n        font-weight: 600;\n        text-decoration: none;\n        padding: 0;\n    }\n\n    th a:hover {\n        color: #000;\n    }\n\n    th.asc a, th.desc a {\n        margin-right: .75em;\n    }\n\n    th.asc a:after, th.desc a:after {\n        display: block;\n        position: absolute;\n        right: 0em;\n        top: 0;\n        font-size: 0.75em;\n    }\n\n    th.asc a:after {\n        content: '▲';\n    }\n\n    th.desc a:after {\n        content: '▼';\n    }\n\ntd {\n    padding: 0.25em 2em 0.25em 0em;\n    border: 0 none;\n}\n\ntr.pager td {\n    padding: 0 0.25em 0 0;\n}\n\n\n/********************\n*   Mobile Styles   *\n********************/\n@media only screen and (max-width: 850px) {\n\n    /* header\n    ----------------------------------------------------------*/\n    header .float-left,\n    header .float-right {\n        float: none;\n    }\n\n    /* logo */\n    header .site-title {\n        margin: 10px;\n        text-align: center;\n    }\n\n    /* login */\n    #login {\n        font-size: .85em;\n        margin: 0 0 12px;\n        text-align: center;\n    }\n\n        #login ul {\n            margin: 5px 0;\n            padding: 0;\n        }\n\n        #login li {\n            display: inline;\n            list-style: none;\n            margin: 0;\n            padding: 0;\n        }\n\n        #login a {\n            background: none;\n            color: #999;\n            font-weight: 600;\n            margin: 2px;\n            padding: 0;\n        }\n\n        #login a:hover {\n            color: #333;\n        }\n\n    /* menu */\n    nav {\n        margin-bottom: 5px;\n    }\n\n    ul#menu {\n        margin: 0;\n        padding: 0;\n        text-align: center;\n    }\n\n        ul#menu li {\n            margin: 0;\n            padding: 0;\n        }\n\n\n    /* main layout\n    ----------------------------------------------------------*/\n    .main-content,\n    .featured + .main-content {\n        background-position: 10px 0;\n    }\n\n    .content-wrapper {\n        padding-right: 10px;\n        padding-left: 10px;\n    }\n\n    .featured .content-wrapper {\n        padding: 10px;\n    }\n\n    /* page content */\n    article, aside {\n        float: none;\n        width: 100%;\n    }\n\n    /* ordered list */\n    ol.round {\n        list-style-type: none;\n        padding-left: 0;\n    }\n\n        ol.round li {\n            padding-left: 10px;\n            margin: 25px 0;\n        }\n\n            ol.round li.zero,\n            ol.round li.one,\n            ol.round li.two,\n            ol.round li.three,\n            ol.round li.four,\n            ol.round li.five,\n            ol.round li.six,\n            ol.round li.seven,\n            ol.round li.eight,\n            ol.round li.nine {\n                background: none;\n            }\n\n     /* features */\n     section.feature {\n        float: none;\n        padding: 10px;\n        width: auto;\n     }\n\n        section.feature img {\n            color: #999;\n            content: attr(alt);\n            font-size: 1.5em;\n            font-weight: 600;\n        }\n\n    /* forms */\n    input {\n        width: 90%;\n    }\n\n    /* login page */\n    #loginForm {\n        border-right: none;\n        float: none;\n        width: auto;\n    }\n\n        #loginForm .validation-error {\n            display: block;\n            margin-left: 15px;\n        }\n\n    #socialLoginForm {\n        margin-left: 0;\n        float: none;\n        width: auto;\n    }\n\n\n    /* footer\n    ----------------------------------------------------------*/\n    footer .float-left,\n    footer .float-right {\n        float: none;\n    }\n\n    footer {\n        text-align: center;\n        height: auto;\n        padding: 10px 0;\n    }\n\n        footer p {\n            margin: 0;\n        }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery-ui.css",
    "content": "/*! jQuery UI - v1.8.24 - 2012-09-28\n* https://github.com/jquery/jquery-ui\n* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css\n* Copyright (c) 2012 AUTHORS.txt; Licensed MIT */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden { display: none; }\n.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }\n.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: \"\"; display: table; }\n.ui-helper-clearfix:after { clear: both; }\n.ui-helper-clearfix { zoom: 1; }\n.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled { cursor: default !important; }\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }\n\n/* IE/Win - Fix animation bug - #4615 */\n.ui-accordion { width: 100%; }\n.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }\n.ui-accordion .ui-accordion-li-fix { display: inline; }\n.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }\n.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }\n.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }\n.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }\n.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }\n.ui-accordion .ui-accordion-content-active { display: block; }\n\n.ui-autocomplete { position: absolute; cursor: default; }\t\n\n/* workarounds */\n* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */\n\n/*\n * jQuery UI Menu 1.8.24\n *\n * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Menu#theming\n */\n.ui-menu {\n\tlist-style:none;\n\tpadding: 2px;\n\tmargin: 0;\n\tdisplay:block;\n\tfloat: left;\n}\n.ui-menu .ui-menu {\n\tmargin-top: -3px;\n}\n.ui-menu .ui-menu-item {\n\tmargin:0;\n\tpadding: 0;\n\tzoom: 1;\n\tfloat: left;\n\tclear: left;\n\twidth: 100%;\n}\n.ui-menu .ui-menu-item a {\n\ttext-decoration:none;\n\tdisplay:block;\n\tpadding:.2em .4em;\n\tline-height:1.5;\n\tzoom:1;\n}\n.ui-menu .ui-menu-item a.ui-state-hover,\n.ui-menu .ui-menu-item a.ui-state-active {\n\tfont-weight: normal;\n\tmargin: -1px;\n}\n\n.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */\n.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */\nbutton.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */\n.ui-button-icons-only { width: 3.4em; } \nbutton.ui-button-icons-only { width: 3.7em; } \n\n/*button text element */\n.ui-button .ui-button-text { display: block; line-height: 1.4;  }\n.ui-button-text-only .ui-button-text { padding: .4em 1em; }\n.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }\n.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }\n.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }\n.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }\n/* no icon support for input elements, provide padding by default */\ninput.ui-button { padding: .4em 1em; }\n\n/*button icon element(s) */\n.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }\n.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }\n.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }\n.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n\n/*button sets*/\n.ui-buttonset { margin-right: 7px; }\n.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }\n\n/* workarounds */\nbutton.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */\n\n.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }\n.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }\n.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }\n.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }\n.ui-datepicker .ui-datepicker-prev { left:2px; }\n.ui-datepicker .ui-datepicker-next { right:2px; }\n.ui-datepicker .ui-datepicker-prev-hover { left:1px; }\n.ui-datepicker .ui-datepicker-next-hover { right:1px; }\n.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }\n.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }\n.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }\n.ui-datepicker select.ui-datepicker-month-year {width: 100%;}\n.ui-datepicker select.ui-datepicker-month, \n.ui-datepicker select.ui-datepicker-year { width: 49%;}\n.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }\n.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }\n.ui-datepicker td { border: 0; padding: 1px; }\n.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }\n.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }\n.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi { width:auto; }\n.ui-datepicker-multi .ui-datepicker-group { float:left; }\n.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }\n.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }\n.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }\n.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }\n.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }\n\n/* RTL support */\n.ui-datepicker-rtl { direction: rtl; }\n.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n\n/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */\n.ui-datepicker-cover {\n    position: absolute; /*must have*/\n    z-index: -1; /*must have*/\n    filter: mask(); /*must have*/\n    top: -4px; /*must have*/\n    left: -4px; /*must have*/\n    width: 200px; /*must have*/\n    height: 200px; /*must have*/\n}\n.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }\n.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }\n.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } \n.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }\n.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }\n.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }\n.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }\n.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }\n.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }\n.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }\n.ui-draggable .ui-dialog-titlebar { cursor: move; }\n\n.ui-progressbar { height:2em; text-align: left; overflow: hidden; }\n.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }\n.ui-resizable { position: relative;}\n.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }\n.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }\n.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }\n.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }\n.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }\n.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }\n.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }\n.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }\n.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }\n.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}\n.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }\n\n.ui-slider { position: relative; text-align: left; }\n.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }\n.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }\n\n.ui-slider-horizontal { height: .8em; }\n.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }\n.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }\n.ui-slider-horizontal .ui-slider-range-min { left: 0; }\n.ui-slider-horizontal .ui-slider-range-max { right: 0; }\n\n.ui-slider-vertical { width: .8em; height: 100px; }\n.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }\n.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }\n.ui-slider-vertical .ui-slider-range-min { bottom: 0; }\n.ui-slider-vertical .ui-slider-range-max { top: 0; }\n.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }\n.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }\n.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }\n.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */\n.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }\n.ui-tabs .ui-tabs-hide { display: none !important; }\n\n/* Component containers\n----------------------------------*/\n.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }\n.ui-widget .ui-widget { font-size: 1em; }\n.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }\n.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }\n.ui-widget-content a { color: #222222/*{fcContent}*/; }\n.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }\n.ui-widget-header a { color: #222222/*{fcHeader}*/; }\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }\n.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }\n.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }\n.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }\n.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }\n.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }\n.ui-widget :active { outline: none; }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }\n.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }\n.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }\n.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }\n.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }\n.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }\n.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }\n.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }\n.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }\n.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }\n.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }\n.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }\n.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }\n.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }\n.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }\n\n/* positioning */\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-off { background-position: -96px -144px; }\n.ui-icon-radio-on { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }\n.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }\n\n/* Overlays */\n.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }\n.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.accordion.css",
    "content": "/*!\n * jQuery UI Accordion 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Accordion#theming\n */\n/* IE/Win - Fix animation bug - #4615 */\n.ui-accordion { width: 100%; }\n.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }\n.ui-accordion .ui-accordion-li-fix { display: inline; }\n.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }\n.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }\n.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }\n.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }\n.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }\n.ui-accordion .ui-accordion-content-active { display: block; }\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.all.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming\n */\n@import \"jquery.ui.base.css\";\n@import \"jquery.ui.theme.css\";\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.autocomplete.css",
    "content": "/*!\n * jQuery UI Autocomplete 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Autocomplete#theming\n */\n.ui-autocomplete { position: absolute; cursor: default; }\t\n\n/* workarounds */\n* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */\n\n/*\n * jQuery UI Menu 1.8.24\n *\n * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Menu#theming\n */\n.ui-menu {\n\tlist-style:none;\n\tpadding: 2px;\n\tmargin: 0;\n\tdisplay:block;\n\tfloat: left;\n}\n.ui-menu .ui-menu {\n\tmargin-top: -3px;\n}\n.ui-menu .ui-menu-item {\n\tmargin:0;\n\tpadding: 0;\n\tzoom: 1;\n\tfloat: left;\n\tclear: left;\n\twidth: 100%;\n}\n.ui-menu .ui-menu-item a {\n\ttext-decoration:none;\n\tdisplay:block;\n\tpadding:.2em .4em;\n\tline-height:1.5;\n\tzoom:1;\n}\n.ui-menu .ui-menu-item a.ui-state-hover,\n.ui-menu .ui-menu-item a.ui-state-active {\n\tfont-weight: normal;\n\tmargin: -1px;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.base.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming\n */\n@import url(\"jquery.ui.core.css\");\n\n@import url(\"jquery.ui.accordion.css\");\n@import url(\"jquery.ui.autocomplete.css\");\n@import url(\"jquery.ui.button.css\");\n@import url(\"jquery.ui.datepicker.css\");\n@import url(\"jquery.ui.dialog.css\");\n@import url(\"jquery.ui.progressbar.css\");\n@import url(\"jquery.ui.resizable.css\");\n@import url(\"jquery.ui.selectable.css\");\n@import url(\"jquery.ui.slider.css\");\n@import url(\"jquery.ui.tabs.css\");\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.button.css",
    "content": "/*!\n * jQuery UI Button 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Button#theming\n */\n.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */\n.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */\nbutton.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */\n.ui-button-icons-only { width: 3.4em; } \nbutton.ui-button-icons-only { width: 3.7em; } \n\n/*button text element */\n.ui-button .ui-button-text { display: block; line-height: 1.4;  }\n.ui-button-text-only .ui-button-text { padding: .4em 1em; }\n.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }\n.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }\n.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }\n.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }\n/* no icon support for input elements, provide padding by default */\ninput.ui-button { padding: .4em 1em; }\n\n/*button icon element(s) */\n.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }\n.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }\n.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }\n.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }\n\n/*button sets*/\n.ui-buttonset { margin-right: 7px; }\n.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }\n\n/* workarounds */\nbutton.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.core.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming/API\n */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden { display: none; }\n.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }\n.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: \"\"; display: table; }\n.ui-helper-clearfix:after { clear: both; }\n.ui-helper-clearfix { zoom: 1; }\n.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled { cursor: default !important; }\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.datepicker.css",
    "content": "/*!\n * jQuery UI Datepicker 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Datepicker#theming\n */\n.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }\n.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }\n.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }\n.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }\n.ui-datepicker .ui-datepicker-prev { left:2px; }\n.ui-datepicker .ui-datepicker-next { right:2px; }\n.ui-datepicker .ui-datepicker-prev-hover { left:1px; }\n.ui-datepicker .ui-datepicker-next-hover { right:1px; }\n.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }\n.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }\n.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }\n.ui-datepicker select.ui-datepicker-month-year {width: 100%;}\n.ui-datepicker select.ui-datepicker-month, \n.ui-datepicker select.ui-datepicker-year { width: 49%;}\n.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }\n.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }\n.ui-datepicker td { border: 0; padding: 1px; }\n.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }\n.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }\n.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi { width:auto; }\n.ui-datepicker-multi .ui-datepicker-group { float:left; }\n.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }\n.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }\n.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }\n.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }\n.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }\n\n/* RTL support */\n.ui-datepicker-rtl { direction: rtl; }\n.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n\n/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */\n.ui-datepicker-cover {\n    position: absolute; /*must have*/\n    z-index: -1; /*must have*/\n    filter: mask(); /*must have*/\n    top: -4px; /*must have*/\n    left: -4px; /*must have*/\n    width: 200px; /*must have*/\n    height: 200px; /*must have*/\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.dialog.css",
    "content": "/*!\n * jQuery UI Dialog 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Dialog#theming\n */\n.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }\n.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }\n.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } \n.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }\n.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }\n.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }\n.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }\n.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }\n.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }\n.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }\n.ui-draggable .ui-dialog-titlebar { cursor: move; }\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.progressbar.css",
    "content": "/*!\n * jQuery UI Progressbar 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Progressbar#theming\n */\n.ui-progressbar { height:2em; text-align: left; overflow: hidden; }\n.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.resizable.css",
    "content": "/*!\n * jQuery UI Resizable 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Resizable#theming\n */\n.ui-resizable { position: relative;}\n.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }\n.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }\n.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }\n.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }\n.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }\n.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }\n.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }\n.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }\n.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }\n.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.selectable.css",
    "content": "/*!\n * jQuery UI Selectable 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Selectable#theming\n */\n.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.slider.css",
    "content": "/*!\n * jQuery UI Slider 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Slider#theming\n */\n.ui-slider { position: relative; text-align: left; }\n.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }\n.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }\n\n.ui-slider-horizontal { height: .8em; }\n.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }\n.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }\n.ui-slider-horizontal .ui-slider-range-min { left: 0; }\n.ui-slider-horizontal .ui-slider-range-max { right: 0; }\n\n.ui-slider-vertical { width: .8em; height: 100px; }\n.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }\n.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }\n.ui-slider-vertical .ui-slider-range-min { bottom: 0; }\n.ui-slider-vertical .ui-slider-range-max { top: 0; }"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.tabs.css",
    "content": "/*!\n * jQuery UI Tabs 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Tabs#theming\n */\n.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }\n.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }\n.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }\n.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */\n.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }\n.ui-tabs .ui-tabs-hide { display: none !important; }\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Content/themes/base/jquery.ui.theme.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.8.24\n *\n * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Theming/API\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }\n.ui-widget .ui-widget { font-size: 1em; }\n.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }\n.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }\n.ui-widget-content a { color: #222222/*{fcContent}*/; }\n.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }\n.ui-widget-header a { color: #222222/*{fcHeader}*/; }\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }\n.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }\n.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }\n.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }\n.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }\n.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }\n.ui-widget :active { outline: none; }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }\n.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }\n.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }\n.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }\n.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }\n.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }\n.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }\n.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }\n.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }\n.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }\n.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }\n.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }\n.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }\n.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }\n.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }\n\n/* positioning */\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-off { background-position: -96px -144px; }\n.ui-icon-radio-on { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }\n.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }\n.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }\n\n/* Overlays */\n.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }\n.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Controllers/AccountController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Transactions;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Web.Security;\nusing DotNetOpenAuth.AspNet;\nusing Microsoft.Web.WebPages.OAuth;\nusing WebMatrix.WebData;\nusing LinqToTwitterMvcDemo.Filters;\nusing LinqToTwitterMvcDemo.Models;\n\nnamespace LinqToTwitterMvcDemo.Controllers\n{\n    [Authorize]\n    [InitializeSimpleMembership]\n    public class AccountController : Controller\n    {\n        //\n        // GET: /Account/Login\n\n        [AllowAnonymous]\n        public ActionResult Login(string returnUrl)\n        {\n            ViewBag.ReturnUrl = returnUrl;\n            return View();\n        }\n\n        //\n        // POST: /Account/Login\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult Login(LoginModel model, string returnUrl)\n        {\n            if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))\n            {\n                return RedirectToLocal(returnUrl);\n            }\n\n            // If we got this far, something failed, redisplay form\n            ModelState.AddModelError(\"\", \"The user name or password provided is incorrect.\");\n            return View(model);\n        }\n\n        //\n        // POST: /Account/LogOff\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LogOff()\n        {\n            WebSecurity.Logout();\n\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n\n        //\n        // GET: /Account/Register\n\n        [AllowAnonymous]\n        public ActionResult Register()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Account/Register\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult Register(RegisterModel model)\n        {\n            if (ModelState.IsValid)\n            {\n                // Attempt to register the user\n                try\n                {\n                    WebSecurity.CreateUserAndAccount(model.UserName, model.Password);\n                    WebSecurity.Login(model.UserName, model.Password);\n                    return RedirectToAction(\"Index\", \"Home\");\n                }\n                catch (MembershipCreateUserException e)\n                {\n                    ModelState.AddModelError(\"\", ErrorCodeToString(e.StatusCode));\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // POST: /Account/Disassociate\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Disassociate(string provider, string providerUserId)\n        {\n            string ownerAccount = OAuthWebSecurity.GetUserName(provider, providerUserId);\n            ManageMessageId? message = null;\n\n            // Only disassociate the account if the currently logged in user is the owner\n            if (ownerAccount == User.Identity.Name)\n            {\n                // Use a transaction to prevent the user from deleting their last login credential\n                using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))\n                {\n                    bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));\n                    if (hasLocalAccount || OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name).Count > 1)\n                    {\n                        OAuthWebSecurity.DeleteAccount(provider, providerUserId);\n                        scope.Complete();\n                        message = ManageMessageId.RemoveLoginSuccess;\n                    }\n                }\n            }\n\n            return RedirectToAction(\"Manage\", new { Message = message });\n        }\n\n        //\n        // GET: /Account/Manage\n\n        public ActionResult Manage(ManageMessageId? message)\n        {\n            ViewBag.StatusMessage =\n                message == ManageMessageId.ChangePasswordSuccess ? \"Your password has been changed.\"\n                : message == ManageMessageId.SetPasswordSuccess ? \"Your password has been set.\"\n                : message == ManageMessageId.RemoveLoginSuccess ? \"The external login was removed.\"\n                : \"\";\n            ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));\n            ViewBag.ReturnUrl = Url.Action(\"Manage\");\n            return View();\n        }\n\n        //\n        // POST: /Account/Manage\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult Manage(LocalPasswordModel model)\n        {\n            bool hasLocalAccount = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));\n            ViewBag.HasLocalPassword = hasLocalAccount;\n            ViewBag.ReturnUrl = Url.Action(\"Manage\");\n            if (hasLocalAccount)\n            {\n                if (ModelState.IsValid)\n                {\n                    // ChangePassword will throw an exception rather than return false in certain failure scenarios.\n                    bool changePasswordSucceeded;\n                    try\n                    {\n                        changePasswordSucceeded = WebSecurity.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword);\n                    }\n                    catch (Exception)\n                    {\n                        changePasswordSucceeded = false;\n                    }\n\n                    if (changePasswordSucceeded)\n                    {\n                        return RedirectToAction(\"Manage\", new { Message = ManageMessageId.ChangePasswordSuccess });\n                    }\n                    else\n                    {\n                        ModelState.AddModelError(\"\", \"The current password is incorrect or the new password is invalid.\");\n                    }\n                }\n            }\n            else\n            {\n                // User does not have a local password so remove any validation errors caused by a missing\n                // OldPassword field\n                ModelState state = ModelState[\"OldPassword\"];\n                if (state != null)\n                {\n                    state.Errors.Clear();\n                }\n\n                if (ModelState.IsValid)\n                {\n                    try\n                    {\n                        WebSecurity.CreateAccount(User.Identity.Name, model.NewPassword);\n                        return RedirectToAction(\"Manage\", new { Message = ManageMessageId.SetPasswordSuccess });\n                    }\n                    catch (Exception)\n                    {\n                        ModelState.AddModelError(\"\", String.Format(\"Unable to create local account. An account with the name \\\"{0}\\\" may already exist.\", User.Identity.Name));\n                    }\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // POST: /Account/ExternalLogin\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult ExternalLogin(string provider, string returnUrl)\n        {\n            return new ExternalLoginResult(provider, Url.Action(\"ExternalLoginCallback\", new { ReturnUrl = returnUrl }));\n        }\n\n        //\n        // GET: /Account/ExternalLoginCallback\n\n        [AllowAnonymous]\n        public ActionResult ExternalLoginCallback(string returnUrl)\n        {\n            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action(\"ExternalLoginCallback\", new { ReturnUrl = returnUrl }));\n            if (!result.IsSuccessful)\n            {\n                return RedirectToAction(\"ExternalLoginFailure\");\n            }\n\n            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))\n            {\n                return RedirectToLocal(returnUrl);\n            }\n\n            if (User.Identity.IsAuthenticated)\n            {\n                // If the current user is logged in add the new account\n                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);\n                return RedirectToLocal(returnUrl);\n            }\n            else\n            {\n                // User is new, ask for their desired membership name\n                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);\n                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;\n                ViewBag.ReturnUrl = returnUrl;\n                return View(\"ExternalLoginConfirmation\", new RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData });\n            }\n        }\n\n        //\n        // POST: /Account/ExternalLoginConfirmation\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl)\n        {\n            string provider = null;\n            string providerUserId = null;\n\n            if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId))\n            {\n                return RedirectToAction(\"Manage\");\n            }\n\n            if (ModelState.IsValid)\n            {\n                // Insert a new user into the database\n                using (UsersContext db = new UsersContext())\n                {\n                    UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower());\n                    // Check if user already exists\n                    if (user == null)\n                    {\n                        // Insert name into the profile table\n                        db.UserProfiles.Add(new UserProfile { UserName = model.UserName });\n                        db.SaveChanges();\n\n                        OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);\n                        OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);\n\n                        return RedirectToLocal(returnUrl);\n                    }\n                    else\n                    {\n                        ModelState.AddModelError(\"UserName\", \"User name already exists. Please enter a different user name.\");\n                    }\n                }\n            }\n\n            ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName;\n            ViewBag.ReturnUrl = returnUrl;\n            return View(model);\n        }\n\n        //\n        // GET: /Account/ExternalLoginFailure\n\n        [AllowAnonymous]\n        public ActionResult ExternalLoginFailure()\n        {\n            return View();\n        }\n\n        [AllowAnonymous]\n        [ChildActionOnly]\n        public ActionResult ExternalLoginsList(string returnUrl)\n        {\n            ViewBag.ReturnUrl = returnUrl;\n            return PartialView(\"_ExternalLoginsListPartial\", OAuthWebSecurity.RegisteredClientData);\n        }\n\n        [ChildActionOnly]\n        public ActionResult RemoveExternalLogins()\n        {\n            ICollection<OAuthAccount> accounts = OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name);\n            List<ExternalLogin> externalLogins = new List<ExternalLogin>();\n            foreach (OAuthAccount account in accounts)\n            {\n                AuthenticationClientData clientData = OAuthWebSecurity.GetOAuthClientData(account.Provider);\n\n                externalLogins.Add(new ExternalLogin\n                {\n                    Provider = account.Provider,\n                    ProviderDisplayName = clientData.DisplayName,\n                    ProviderUserId = account.ProviderUserId,\n                });\n            }\n\n            ViewBag.ShowRemoveButton = externalLogins.Count > 1 || OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));\n            return PartialView(\"_RemoveExternalLoginsPartial\", externalLogins);\n        }\n\n        #region Helpers\n        private ActionResult RedirectToLocal(string returnUrl)\n        {\n            if (Url.IsLocalUrl(returnUrl))\n            {\n                return Redirect(returnUrl);\n            }\n            else\n            {\n                return RedirectToAction(\"Index\", \"Home\");\n            }\n        }\n\n        public enum ManageMessageId\n        {\n            ChangePasswordSuccess,\n            SetPasswordSuccess,\n            RemoveLoginSuccess,\n        }\n\n        internal class ExternalLoginResult : ActionResult\n        {\n            public ExternalLoginResult(string provider, string returnUrl)\n            {\n                Provider = provider;\n                ReturnUrl = returnUrl;\n            }\n\n            public string Provider { get; private set; }\n            public string ReturnUrl { get; private set; }\n\n            public override void ExecuteResult(ControllerContext context)\n            {\n                OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);\n            }\n        }\n\n        private static string ErrorCodeToString(MembershipCreateStatus createStatus)\n        {\n            // See http://go.microsoft.com/fwlink/?LinkID=177550 for\n            // a full list of status codes.\n            switch (createStatus)\n            {\n                case MembershipCreateStatus.DuplicateUserName:\n                    return \"User name already exists. Please enter a different user name.\";\n\n                case MembershipCreateStatus.DuplicateEmail:\n                    return \"A user name for that e-mail address already exists. Please enter a different e-mail address.\";\n\n                case MembershipCreateStatus.InvalidPassword:\n                    return \"The password provided is invalid. Please enter a valid password value.\";\n\n                case MembershipCreateStatus.InvalidEmail:\n                    return \"The e-mail address provided is invalid. Please check the value and try again.\";\n\n                case MembershipCreateStatus.InvalidAnswer:\n                    return \"The password retrieval answer provided is invalid. Please check the value and try again.\";\n\n                case MembershipCreateStatus.InvalidQuestion:\n                    return \"The password retrieval question provided is invalid. Please check the value and try again.\";\n\n                case MembershipCreateStatus.InvalidUserName:\n                    return \"The user name provided is invalid. Please check the value and try again.\";\n\n                case MembershipCreateStatus.ProviderError:\n                    return \"The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.\";\n\n                case MembershipCreateStatus.UserRejected:\n                    return \"The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.\";\n\n                default:\n                    return \"An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.\";\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Linq;\nusing System.Web.Mvc;\nusing LinqToTwitter;\nusing LinqToTwitterMvcDemo.Models;\n\nnamespace LinqToTwitterMvcDemo.Controllers\n{\n    public class HomeController : Controller\n    {\n        readonly IOAuthCredentials credentials = new SessionStateCredentials();\n\n        MvcAuthorizer auth;\n        TwitterContext twitterCtx;\n\n        public ActionResult Index()\n        {\n            if (credentials.ConsumerKey == null || credentials.ConsumerSecret == null)\n            {\n                credentials.ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"];\n                credentials.ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"];\n            }\n\n            auth = new MvcAuthorizer\n            {\n                Credentials = credentials\n            };\n\n            // internally, this doesn't execute if BeginAuthorization hasn't been called yet\n            //  but it will execute after the user authorizes your application\n            auth.CompleteAuthorization(Request.Url);\n\n            // this will only execute if we don't have all 4 keys, which is what IsAuthorized checks\n            if (!auth.IsAuthorized)\n            {\n                Uri specialUri = new Uri(Request.Url.ToString());\n\n                // url param is optional, it lets you specify the page Twitter redirects to.\n                // You can use it to complete the OAuth process on another action/controller - in which\n                // case you would move auth.CompleteAuthorization to that action/controller.\n                return auth.BeginAuthorization(specialUri);\n            }\n\n            twitterCtx = new TwitterContext(auth);\n\n            List<TweetViewModel> friendTweets = \n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.User &&\n                       tweet.ScreenName == \"JoeMayo\"\n                 select new TweetViewModel\n                 {\n                     ImageUrl = tweet.User.ProfileImageUrl,\n                     ScreenName = tweet.User.Identifier.ScreenName,\n                     Tweet = tweet.Text\n                 })\n                .ToList();\n\n            return View(friendTweets);\n        }\n\n        public ActionResult About()\n        {\n            ViewBag.Message = \"Your app description page.\";\n\n            return View();\n        }\n\n        public ActionResult Contact()\n        {\n            ViewBag.Message = \"Your contact page.\";\n\n            return View();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Filters/InitializeSimpleMembershipAttribute.cs",
    "content": "﻿using System;\nusing System.Data.Entity;\nusing System.Data.Entity.Infrastructure;\nusing System.Threading;\nusing System.Web.Mvc;\nusing WebMatrix.WebData;\nusing LinqToTwitterMvcDemo.Models;\n\nnamespace LinqToTwitterMvcDemo.Filters\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]\n    public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute\n    {\n        private static SimpleMembershipInitializer _initializer;\n        private static object _initializerLock = new object();\n        private static bool _isInitialized;\n\n        public override void OnActionExecuting(ActionExecutingContext filterContext)\n        {\n            // Ensure ASP.NET Simple Membership is initialized only once per app start\n            LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);\n        }\n\n        private class SimpleMembershipInitializer\n        {\n            public SimpleMembershipInitializer()\n            {\n                Database.SetInitializer<UsersContext>(null);\n\n                try\n                {\n                    using (var context = new UsersContext())\n                    {\n                        if (!context.Database.Exists())\n                        {\n                            // Create the SimpleMembership database without Entity Framework migration schema\n                            ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();\n                        }\n                    }\n\n                    WebSecurity.InitializeDatabaseConnection(\"DefaultConnection\", \"UserProfile\", \"UserId\", \"UserName\", autoCreateTables: true);\n                }\n                catch (Exception ex)\n                {\n                    throw new InvalidOperationException(\"The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588\", ex);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"LinqToTwitterMvcDemo.MvcApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Http;\nusing System.Web.Mvc;\nusing System.Web.Optimization;\nusing System.Web.Routing;\n\nnamespace LinqToTwitterMvcDemo\n{\n    // Note: For instructions on enabling IIS6 or IIS7 classic mode, \n    // visit http://go.microsoft.com/?LinkId=9394801\n\n    public class MvcApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start()\n        {\n            AreaRegistration.RegisterAllAreas();\n\n            WebApiConfig.Register(GlobalConfiguration.Configuration);\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n            AuthConfig.RegisterAuth();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/LinqToTwitterMvcDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{757AEA15-18C0-4378-AC4B-AC3D2C600C31}</ProjectGuid>\n    <ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitterMvcDemo</RootNamespace>\n    <AssemblyName>LinqToTwitterMvcDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime\">\n      <HintPath>..\\..\\packages\\Antlr.3.4.1.9004\\lib\\Antlr3.Runtime.dll</HintPath>\n    </Reference>\n    <Reference Include=\"BundlerMiddleware\">\n      <HintPath>..\\..\\packages\\BundlerMiddleware.0.3.2\\lib\\net45\\BundlerMiddleware.dll</HintPath>\n    </Reference>\n    <Reference Include=\"BundlerMiddleware.System.Web\">\n      <HintPath>..\\..\\packages\\BundlerMiddleware.System.Web.0.3.2\\lib\\net45\\BundlerMiddleware.System.Web.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.1\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer\">\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.1\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Microsoft.Owin\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.2.1.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.WebPages.OAuth, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.OAuth.3.2.2\\lib\\net45\\Microsoft.Web.WebPages.OAuth.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.5.0.4\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin\">\n      <HintPath>..\\..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Mvc.4.0.30506.0\\lib\\net40\\System.Web.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.2\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Razor.3.2.2\\lib\\net45\\System.Web.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n    </Reference>\n    <Reference Include=\"System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Client.4.0.20710.0\\lib\\net40\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\">\n    </Reference>\n    <Reference Include=\"System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Core.4.0.20710.0\\lib\\net40\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.WebHost.4.0.20710.0\\lib\\net40\\System.Web.Http.WebHost.dll</HintPath>\n    </Reference>\n    <Reference Include=\"DotNetOpenAuth.AspNet, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\DotNetOpenAuth.AspNet.4.1.4.12333\\lib\\net45-full\\DotNetOpenAuth.AspNet.dll</HintPath>\n    </Reference>\n    <Reference Include=\"DotNetOpenAuth.Core, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\DotNetOpenAuth.Core.4.1.4.12333\\lib\\net45-full\\DotNetOpenAuth.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"DotNetOpenAuth.OAuth.Consumer, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\DotNetOpenAuth.OAuth.Consumer.4.1.4.12333\\lib\\net45-full\\DotNetOpenAuth.OAuth.Consumer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"DotNetOpenAuth.OAuth, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\DotNetOpenAuth.OAuth.Core.4.1.4.12333\\lib\\net45-full\\DotNetOpenAuth.OAuth.dll</HintPath>\n    </Reference>\n    <Reference Include=\"DotNetOpenAuth.OpenId, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\DotNetOpenAuth.OpenId.Core.4.1.4.12333\\lib\\net45-full\\DotNetOpenAuth.OpenId.dll</HintPath>\n    </Reference>\n    <Reference Include=\"DotNetOpenAuth.OpenId.RelyingParty, Version=4.1.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333\\lib\\net45-full\\DotNetOpenAuth.OpenId.RelyingParty.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Data.Edm, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Data.Edm.5.2.0\\lib\\net40\\Microsoft.Data.Edm.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Data.OData, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Data.OData.5.2.0\\lib\\net40\\Microsoft.Data.OData.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Spatial, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\System.Spatial.5.2.0\\lib\\net40\\System.Spatial.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebGrease\">\n      <HintPath>..\\..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebMatrix.Data, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.Data.3.2.2\\lib\\net45\\WebMatrix.Data.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebMatrix.WebData, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.WebData.3.2.2\\lib\\net45\\WebMatrix.WebData.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\AuthConfig.cs\" />\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"App_Start\\FilterConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\WebApiConfig.cs\" />\n    <Compile Include=\"Controllers\\AccountController.cs\" />\n    <Compile Include=\"Controllers\\HomeController.cs\" />\n    <Compile Include=\"Filters\\InitializeSimpleMembershipAttribute.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Models\\AccountModels.cs\" />\n    <Compile Include=\"Models\\TweetViewModel.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_flat_0_aaaaaa_40x100.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_flat_75_ffffff_40x100.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_glass_55_fbf9ee_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_glass_65_ffffff_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_glass_75_dadada_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_glass_75_e6e6e6_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_glass_95_fef1ec_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-bg_highlight-soft_75_cccccc_1x100.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-icons_222222_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-icons_2e83ff_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-icons_454545_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-icons_888888_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\images\\ui-icons_cd0a0a_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\jquery-ui.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.accordion.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.all.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.autocomplete.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.base.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.button.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.core.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.datepicker.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.dialog.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.progressbar.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.resizable.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.selectable.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.slider.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.tabs.css\" />\n    <Content Include=\"Content\\themes\\base\\jquery.ui.theme.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_flat_0_aaaaaa_40x100.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_flat_75_ffffff_40x100.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_glass_55_fbf9ee_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_glass_65_ffffff_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_glass_75_dadada_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_glass_75_e6e6e6_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_glass_95_fef1ec_1x400.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-bg_highlight-soft_75_cccccc_1x100.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-icons_222222_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-icons_2e83ff_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-icons_454545_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-icons_888888_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\images\\ui-icons_cd0a0a_256x240.png\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery-ui.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.accordion.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.autocomplete.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.button.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.core.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.datepicker.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.dialog.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.progressbar.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.resizable.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.selectable.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.slider.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.tabs.min.css\" />\n    <Content Include=\"Content\\themes\\base\\minified\\jquery.ui.theme.min.css\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"Global.asax\" />\n    <None Include=\"Scripts\\jquery-1.8.2.intellisense.js\" />\n    <Content Include=\"Scripts\\jquery-1.8.2.js\" />\n    <Content Include=\"Scripts\\jquery-1.8.2.min.js\" />\n    <None Include=\"Scripts\\jquery.validate-vsdoc.js\" />\n    <Content Include=\"Scripts\\jquery-ui-1.8.24.js\" />\n    <Content Include=\"Scripts\\jquery-ui-1.8.24.min.js\" />\n    <Content Include=\"Scripts\\jquery.unobtrusive-ajax.js\" />\n    <Content Include=\"Scripts\\jquery.unobtrusive-ajax.min.js\" />\n    <Content Include=\"Scripts\\jquery.validate.js\" />\n    <Content Include=\"Scripts\\jquery.validate.min.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.min.js\" />\n    <Content Include=\"Scripts\\knockout-2.2.0.debug.js\" />\n    <Content Include=\"Scripts\\knockout-2.2.0.js\" />\n    <Content Include=\"Scripts\\modernizr-2.6.2.js\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"Scripts\\_references.js\" />\n    <Content Include=\"Images\\accent.png\" />\n    <Content Include=\"Images\\bullet.png\" />\n    <Content Include=\"Images\\heroAccent.png\" />\n    <Content Include=\"Images\\orderedList0.png\" />\n    <Content Include=\"Images\\orderedList1.png\" />\n    <Content Include=\"Images\\orderedList2.png\" />\n    <Content Include=\"Images\\orderedList3.png\" />\n    <Content Include=\"Images\\orderedList4.png\" />\n    <Content Include=\"Images\\orderedList5.png\" />\n    <Content Include=\"Images\\orderedList6.png\" />\n    <Content Include=\"Images\\orderedList7.png\" />\n    <Content Include=\"Images\\orderedList8.png\" />\n    <Content Include=\"Images\\orderedList9.png\" />\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Views\\Account\\_ChangePasswordPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\_ExternalLoginsListPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\_RemoveExternalLoginsPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\_SetPasswordPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\Login.cshtml\" />\n    <Content Include=\"Views\\Account\\Manage.cshtml\" />\n    <Content Include=\"Views\\Account\\Register.cshtml\" />\n    <Content Include=\"Views\\Account\\ExternalLoginFailure.cshtml\" />\n    <Content Include=\"Views\\Account\\ExternalLoginConfirmation.cshtml\" />\n    <Content Include=\"Views\\Home\\About.cshtml\" />\n    <Content Include=\"Views\\Home\\Contact.cshtml\" />\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\n    <Content Include=\"Views\\Shared\\_LoginPartial.cshtml\" />\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Views\\Web.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitter\\LinqToTwitter.csproj\">\n      <Project>{a214b9f0-6b8c-4e91-be99-27f55cc860c1}</Project>\n      <Name>LinqToTwitter</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>0</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:26058/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Models/AccountModels.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnotations.Schema;\nusing System.Data.Entity;\nusing System.Globalization;\nusing System.Web.Security;\n\nnamespace LinqToTwitterMvcDemo.Models\n{\n    public class UsersContext : DbContext\n    {\n        public UsersContext()\n            : base(\"DefaultConnection\")\n        {\n        }\n\n        public DbSet<UserProfile> UserProfiles { get; set; }\n    }\n\n    [Table(\"UserProfile\")]\n    public class UserProfile\n    {\n        [Key]\n        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]\n        public int UserId { get; set; }\n        public string UserName { get; set; }\n    }\n\n    public class RegisterExternalLoginModel\n    {\n        [Required]\n        [Display(Name = \"User name\")]\n        public string UserName { get; set; }\n\n        public string ExternalLoginData { get; set; }\n    }\n\n    public class LocalPasswordModel\n    {\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Current password\")]\n        public string OldPassword { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class LoginModel\n    {\n        [Required]\n        [Display(Name = \"User name\")]\n        public string UserName { get; set; }\n\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [Display(Name = \"Remember me?\")]\n        public bool RememberMe { get; set; }\n    }\n\n    public class RegisterModel\n    {\n        [Required]\n        [Display(Name = \"User name\")]\n        public string UserName { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class ExternalLogin\n    {\n        public string Provider { get; set; }\n        public string ProviderDisplayName { get; set; }\n        public string ProviderUserId { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Models/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitterMvcDemo.Models\n{\n    public class TweetViewModel\n    {\n        /// <summary>\n        /// User's avatar\n        /// </summary>\n        public string ImageUrl { get; set; }\n\n        /// <summary>\n        /// User's Twitter name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Text containing user's tweet\n        /// </summary>\n        public string Tweet { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterMvcDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterMvcDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"381e86e0-d386-408d-ac3f-930a23204612\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery-1.8.2.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"Object\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"Object\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests.</summary>\n    ///   <param name=\"options\" type=\"Object\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. We recommend against using this property; please try to use feature detection instead (see jQuery.support). jQuery.browser may be moved to a plugin in a future release of jQuery.</summary>\n    /// <returns type=\"Map\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is within another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"String\">A map or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"Object\">A map or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Object\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"Object\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"Object\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n    /// <returns type=\"Function\" />\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"String\">A map or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"Object\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"Object\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"Function\">A function, or array of functions, that are to be added to the callback list.</param>\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"\">The argument or list of arguments to pass back to the callback list.</param>\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"Function\">A function, or array of functions, that are to be removed from the callback list.</param>\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved or rejected.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved or rejected.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional data map passed to an event method when the current executing handler is bound.</summary>\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"String\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"Object\">A map of CSS properties that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"Object\">A map of CSS properties that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"Object\">A map of additional options to pass to the method. Supported keys:         duration: A string or number determining how long the animation will run.easing: A string indicating which easing function to use for the transition.complete: A function to call once the animation is complete.step: A function to be called after each step of the animation.queue: A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string.specialEasing: A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions (added 1.4).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"Number\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"map\" type=\"Object\">A map of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">A map of one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the  set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"Number\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the  set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the  set of matched elements.</summary>\n    ///   <param name=\"map\" type=\"Object\">A map of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"Object\">A map of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventTypes\" type=\"Object\">A map of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to the one at the specified index.</summary>\n    ///   <param name=\"index\" type=\"Number\">An integer indicating the 0-based position of the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to the one at the specified index.</summary>\n    ///   <param name=\"-index\" type=\"Number\">An integer indicating the position of the element, counting backwards  from the last element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element, Array\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"String\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"jQuery\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"jQuery\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"Object\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Integer\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Integer\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events-map\" type=\"Object\">A map of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events-map\" type=\"Object\">A map where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"Object\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events-map\" type=\"Object\">A map in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events-map\" type=\"Object\">A map in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Integer\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Integer\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"jQuery\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"jQuery\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"jQuery\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"Boolean\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"map\" type=\"Object\">A map of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"String\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"String\">A selector expression indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content.</summary>\n    ///   <param name=\"newContent\" type=\"jQuery\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"Number\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"callback\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Object\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"Object\">A map of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A map of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"String\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"jQuery\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"jQuery\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"jQuery\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"Object\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery-1.8.2.js",
    "content": "/*!\n * jQuery JavaScript Library v1.8.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time)\n */\n(function( window, undefined ) {\nvar\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\tlocation = window.location,\n\tnavigator = window.navigator,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// Save a reference to some core methods\n\tcore_push = Array.prototype.push,\n\tcore_slice = Array.prototype.slice,\n\tcore_indexOf = Array.prototype.indexOf,\n\tcore_toString = Object.prototype.toString,\n\tcore_hasOwn = Object.prototype.hasOwnProperty,\n\tcore_trim = String.prototype.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source,\n\n\t// Used for detecting and trimming whitespace\n\tcore_rnotwhite = /\\S/,\n\tcore_rspace = /\\s+/,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\trquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn ( letter + \"\" ).toUpperCase();\n\t},\n\n\t// The ready event handler and self cleanup method\n\tDOMContentLoaded = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\t\t\tjQuery.ready();\n\t\t} else if ( document.readyState === \"complete\" ) {\n\t\t\t// we're here because readyState === \"complete\" in oldIE\n\t\t\t// which is good enough for us to call the dom ready!\n\t\t\tdocument.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\n\t// [[Class]] -> type pairs\n\tclass2type = {};\n\njQuery.fn = jQuery.prototype = {\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem, ret, doc;\n\n\t\t// Handle $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\t\t\t\t\tdoc = ( context && context.nodeType ? context.ownerDocument || context : document );\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tselector = jQuery.parseHTML( match[1], doc, true );\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tthis.attr.call( selector, context, true );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.merge( this, selector );\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The current version of jQuery being used\n\tjquery: \"1.8.2\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems, name, selector ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\tret.context = this.context;\n\n\t\tif ( name === \"find\" ) {\n\t\t\tret.selector = this.selector + ( this.selector ? \" \" : \"\" ) + selector;\n\t\t} else if ( name ) {\n\t\t\tret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\t\t}\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\teq: function( i ) {\n\t\ti = +i;\n\t\treturn i === -1 ?\n\t\t\tthis.slice( i ) :\n\t\t\tthis.slice( i, i + 1 );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ),\n\t\t\t\"slice\", core_slice.call(arguments).join(\",\") );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\treturn obj == null ?\n\t\t\tString( obj ) :\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\";\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// scripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, scripts ) {\n\t\tvar parsed;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tscripts = context;\n\t\t\tcontext = 0;\n\t\t}\n\t\tcontext = context || document;\n\n\t\t// Single tag\n\t\tif ( (parsed = rsingleTag.exec( data )) ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );\n\t\treturn jQuery.merge( [],\n\t\t\t(parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\tif ( !data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\tdata = jQuery.trim( data );\n\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\t// Make sure the incoming data is actual JSON\n\t\t// Logic borrowed from http://json.org/json2.js\n\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\treturn ( new Function( \"return \" + data ) )();\n\n\t\t}\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && core_rnotwhite.test( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar name,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisObj = length === undefined || jQuery.isFunction( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in obj ) {\n\t\t\t\t\tif ( callback.apply( obj[ name ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.apply( obj[ i++ ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in obj ) {\n\t\t\t\t\tif ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar type,\n\t\t\tret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\t// The window, strings (and functions) also have 'length'\n\t\t\t// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n\t\t\ttype = jQuery.type( arr );\n\n\t\t\tif ( arr.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( arr ) ) {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value, key,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\t// jquery objects are treated as arrays\n\t\t\tisArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( key in elems ) {\n\t\t\t\tvalue = callback( elems[ key ], key, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn ret.concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, pass ) {\n\t\tvar exec,\n\t\t\tbulk = key == null,\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\n\t\t// Sets many values\n\t\tif ( key && typeof key === \"object\" ) {\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], 1, emptyGet, value );\n\t\t\t}\n\t\t\tchainable = 1;\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\t// Optionally, function values get executed if exec is true\n\t\t\texec = pass === undefined && jQuery.isFunction( value );\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations only iterate when executing function values\n\t\t\t\tif ( exec ) {\n\t\t\t\t\texec = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn exec.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\n\t\t\t\t// Otherwise they run against the entire set\n\t\t\t\t} else {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor (; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchainable = 1;\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready, 1 );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", jQuery.ready, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", jQuery.ready );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.split( core_rspace ), function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" && ( !options.unique || !self.has( arg ) ) ) {\n\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Control if a given callback is in the list\n\t\t\thas: function( fn ) {\n\t\t\t\treturn jQuery.inArray( fn, list ) > -1;\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\targs = args || [];\n\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ]( jQuery.isFunction( fn ) ?\n\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\tvar returned = fn.apply( this, arguments );\n\t\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} :\n\t\t\t\t\t\t\t\tnewDefer[ action ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ] = list.fire\n\t\t\tdeferred[ tuple[0] ] = list.fire;\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function() {\n\n\tvar support,\n\t\tall,\n\t\ta,\n\t\tselect,\n\t\topt,\n\t\tinput,\n\t\tfragment,\n\t\teventName,\n\t\ti,\n\t\tisSupported,\n\t\tclickFn,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Preliminary tests\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\tall = div.getElementsByTagName(\"*\");\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Can't get basic test support\n\tif ( !all || !all.length ) {\n\t\treturn {};\n\t}\n\n\t// First batch of supports tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\tsupport = {\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName(\"tbody\").length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: ( a.getAttribute(\"href\") === \"/a\" ),\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.5/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Make sure that if no value is specified for a checkbox\n\t\t// that it defaults to \"on\".\n\t\t// (WebKit defaults to \"\" instead)\n\t\tcheckOn: ( input.value === \"on\" ),\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// Tests for enctype support on a form(#6743)\n\t\tenctype: !!document.createElement(\"form\").enctype,\n\n\t\t// Makes sure cloning an html5 element does not cause problems\n\t\t// Where outerHTML is undefined, this still works\n\t\thtml5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\",\n\n\t\t// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode\n\t\tboxModel: ( document.compatMode === \"CSS1Compat\" ),\n\n\t\t// Will be defined later\n\t\tsubmitBubbles: true,\n\t\tchangeBubbles: true,\n\t\tfocusinBubbles: false,\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true,\n\t\tboxSizingReliable: true,\n\t\tpixelPosition: false\n\t};\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Test to see if it's possible to delete an expando from an element\n\t// Fails in Internet Explorer\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\tif ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n\t\tdiv.attachEvent( \"onclick\", clickFn = function() {\n\t\t\t// Cloning a node shouldn't copy over any\n\t\t\t// bound event handlers (IE does this)\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\t\tdiv.cloneNode( true ).fireEvent(\"onclick\");\n\t\tdiv.detachEvent( \"onclick\", clickFn );\n\t}\n\n\t// Check if a radio maintains its value\n\t// after being appended to the DOM\n\tinput = document.createElement(\"input\");\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\tinput.setAttribute( \"checked\", \"checked\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( div.lastChild );\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\tfragment.removeChild( input );\n\tfragment.appendChild( div );\n\n\t// Technique from Juriy Zaytsev\n\t// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n\t// We only care about the case where non-standard event systems\n\t// are used, namely in IE. Short-circuiting here helps us to\n\t// avoid an eval call (in setAttribute) which can cause CSP\n\t// to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n\tif ( div.attachEvent ) {\n\t\tfor ( i in {\n\t\t\tsubmit: true,\n\t\t\tchange: true,\n\t\t\tfocusin: true\n\t\t}) {\n\t\t\teventName = \"on\" + i;\n\t\t\tisSupported = ( eventName in div );\n\t\t\tif ( !isSupported ) {\n\t\t\t\tdiv.setAttribute( eventName, \"return;\" );\n\t\t\t\tisSupported = ( typeof div[ eventName ] === \"function\" );\n\t\t\t}\n\t\t\tsupport[ i + \"Bubbles\" ] = isSupported;\n\t\t}\n\t}\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, div, tds, marginDiv,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;overflow:hidden;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px\";\n\t\tbody.insertBefore( container, body.firstChild );\n\n\t\t// Construct the test element\n\t\tdiv = document.createElement(\"div\");\n\t\tcontainer.appendChild( div );\n\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\t// (only IE 8 fails this test)\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\t// (IE <= 8 fail this test)\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\t\tsupport.boxSizing = ( div.offsetWidth === 4 );\n\t\tsupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );\n\n\t\t// NOTE: To any future maintainer, we've window.getComputedStyle\n\t\t// because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. For more\n\t\t\t// info see bug #3333\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = document.createElement(\"div\");\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdiv.appendChild( marginDiv );\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\t// (IE < 8 does this)\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\t// (IE 6 does this)\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.style.overflow = \"visible\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tcontainer.style.zoom = 1;\n\t\t}\n\n\t\t// Null elements to avoid leaks in IE\n\t\tbody.removeChild( container );\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tfragment.removeChild( div );\n\tall = a = select = opt = input = fragment = div = null;\n\n\treturn support;\n})();\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\njQuery.extend({\n\tcache: {},\n\n\tdeletedIds: [],\n\n\t// Remove at next major release (1.9/2.0)\n\tuuid: 0,\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, ret,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tgetByName = typeof name === \"string\",\n\n\t\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t\t// can't GC object references properly across the DOM-JS boundary\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t\t// attached directly to the object so GC can occur automatically\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t\t// Avoid doing any more work than we need to when trying to get data on an\n\t\t// object that has no data at all\n\t\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !id ) {\n\t\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t\t// ends up in the global cache\n\t\t\tif ( isNode ) {\n\t\t\t\telem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;\n\t\t\t} else {\n\t\t\t\tid = internalKey;\n\t\t\t}\n\t\t}\n\n\t\tif ( !cache[ id ] ) {\n\t\t\tcache[ id ] = {};\n\n\t\t\t// Avoids exposing jQuery metadata on plain JS objects when the object\n\t\t\t// is serialized using JSON.stringify\n\t\t\tif ( !isNode ) {\n\t\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t\t}\n\t\t}\n\n\t\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t\t// shallow copied over onto the existing cache\n\t\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\t\tif ( pvt ) {\n\t\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t\t} else {\n\t\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t\t}\n\t\t}\n\n\t\tthisCache = cache[ id ];\n\n\t\t// jQuery data() is stored in a separate object inside the object's internal data\n\t\t// cache in order to avoid key collisions between internal data and user-defined\n\t\t// data.\n\t\tif ( !pvt ) {\n\t\t\tif ( !thisCache.data ) {\n\t\t\t\tthisCache.data = {};\n\t\t\t}\n\n\t\t\tthisCache = thisCache.data;\n\t\t}\n\n\t\tif ( data !== undefined ) {\n\t\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t\t}\n\n\t\t// Check for both converted-to-camel and non-converted data property names\n\t\t// If a data property was specified\n\t\tif ( getByName ) {\n\n\t\t\t// First Try to find as-is property data\n\t\t\tret = thisCache[ name ];\n\n\t\t\t// Test for null|undefined property data\n\t\t\tif ( ret == null ) {\n\n\t\t\t\t// Try to find the camelCased property\n\t\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t\t}\n\t\t} else {\n\t\t\tret = thisCache;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tremoveData: function( elem, name, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, i, l,\n\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\t\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t\t// If there is already no cache entry for this object, there is no\n\t\t// purpose in continuing\n\t\tif ( !cache[ id ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( name ) {\n\n\t\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\t\tif ( thisCache ) {\n\n\t\t\t\t// Support array or space separated string names for data keys\n\t\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0, l = name.length; i < l; i++ ) {\n\t\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t\t}\n\n\t\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t\t// and let the cache object itself get destroyed\n\t\t\t\tif ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// See jQuery.data for more information\n\t\tif ( !pvt ) {\n\t\t\tdelete cache[ id ].data;\n\n\t\t\t// Don't destroy the parent cache unless the internal data object\n\t\t\t// had been the only thing left in it\n\t\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Destroy the cache\n\t\tif ( isNode ) {\n\t\t\tjQuery.cleanData( [ elem ], true );\n\n\t\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t\tdelete cache[ id ];\n\n\t\t// When all else fails, null\n\t\t} else {\n\t\t\tcache[ id ] = null;\n\t\t}\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn jQuery.data( elem, name, data, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar parts, part, attr, name, l,\n\t\t\telem = this[0],\n\t\t\ti = 0,\n\t\t\tdata = null;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattr = elem.attributes;\n\t\t\t\t\tfor ( l = attr.length; i < l; i++ ) {\n\t\t\t\t\t\tname = attr[i].name;\n\n\t\t\t\t\t\tif ( !name.indexOf( \"data-\" ) ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.substring(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\tparts = key.split( \".\", 2 );\n\t\tparts[1] = parts[1] ? \".\" + parts[1] : \"\";\n\t\tpart = parts[1] + \"!\";\n\n\t\treturn jQuery.access( this, function( value ) {\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\tdata = this.triggerHandler( \"getData\" + part, [ parts[0] ] );\n\n\t\t\t\t// Try to fetch any internally stored data first\n\t\t\t\tif ( data === undefined && elem ) {\n\t\t\t\t\tdata = jQuery.data( elem, key );\n\t\t\t\t\tdata = dataAttr( elem, key, data );\n\t\t\t\t}\n\n\t\t\t\treturn data === undefined && parts[1] ?\n\t\t\t\t\tthis.data( parts[0] ) :\n\t\t\t\t\tdata;\n\t\t\t}\n\n\t\t\tparts[1] = value;\n\t\t\tthis.each(function() {\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.triggerHandler( \"setData\" + part, parts );\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t\tself.triggerHandler( \"changeData\" + part, parts );\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, false );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\tdata === \"false\" ? false :\n\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery.removeData( elem, type + \"queue\", true );\n\t\t\t\tjQuery.removeData( elem, key, true );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook, fixSpecified,\n\trclass = /[\\t\\r\\n]/g,\n\trreturn = /\\r/g,\n\trtype = /^(?:button|input)$/i,\n\trfocusable = /^(?:button|input|object|select|textarea)$/i,\n\trclickable = /^a(?:rea|)$/i,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classNames, i, l, elem,\n\t\t\tsetClass, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( value && typeof value === \"string\" ) {\n\t\t\tclassNames = value.split( core_rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !elem.className && classNames.length === 1 ) {\n\t\t\t\t\t\telem.className = value;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetClass = \" \" + elem.className + \" \";\n\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tif ( setClass.indexOf( \" \" + classNames[ c ] + \" \" ) < 0 ) {\n\t\t\t\t\t\t\t\tsetClass += classNames[ c ] + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( setClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar removes, className, elem, c, cl, i, l;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\t\tif ( (value && typeof value === \"string\") || value === undefined ) {\n\t\t\tremoves = ( value || \"\" ).split( core_rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tif ( elem.nodeType === 1 && elem.className ) {\n\n\t\t\t\t\tclassName = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\n\t\t\t\t\t// loop over each item in the removal list\n\t\t\t\t\tfor ( c = 0, cl = removes.length; c < cl; c++ ) {\n\t\t\t\t\t\t// Remove until there is nothing to remove,\n\t\t\t\t\t\twhile ( className.indexOf(\" \" + removes[ c ] + \" \") >= 0 ) {\n\t\t\t\t\t\t\tclassName = className.replace( \" \" + removes[ c ] + \" \" , \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( className ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisBool = typeof stateVal === \"boolean\";\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tstate = stateVal,\n\t\t\t\t\tclassNames = value.split( core_rspace );\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t} else if ( type === \"undefined\" || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// toggle whole className\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val,\n\t\t\t\tself = jQuery(this);\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, self.val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, i, max, option,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tvalues = [],\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tone = elem.type === \"select-one\";\n\n\t\t\t\t// Nothing was selected\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\ti = one ? index : 0;\n\t\t\t\tmax = one ? index + 1 : options.length;\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\tif ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null) &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" )) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fixes Bug #2551 -- select.val() broken in IE after form.reset()\n\t\t\t\tif ( one && !values.length && options.length ) {\n\t\t\t\t\treturn jQuery( options[ index ] ).val();\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\t// Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9\n\tattrFn: {},\n\n\tattr: function( elem, name, value, pass ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( notxml ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\n\t\t\t} else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\tret = elem.getAttribute( name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret === null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar propName, attrNames, name, isBool,\n\t\t\ti = 0;\n\n\t\tif ( value && elem.nodeType === 1 ) {\n\n\t\t\tattrNames = value.split( core_rspace );\n\n\t\t\tfor ( ; i < attrNames.length; i++ ) {\n\t\t\t\tname = attrNames[ i ];\n\n\t\t\t\tif ( name ) {\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\t\t\tisBool = rboolean.test( name );\n\n\t\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t\t// Do not do this for boolean attributes (see #10870)\n\t\t\t\t\tif ( !isBool ) {\n\t\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\n\t\t\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\t\t\tif ( isBool && propName in elem ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\t// We can't allow the type property to be changed (since it causes problems in IE)\n\t\t\t\tif ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n\t\t\t\t\tjQuery.error( \"type property can't be changed\" );\n\t\t\t\t} else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to it's default in case type is set after value\n\t\t\t\t\t// This is for element creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Use the value property for back compat\n\t\t// Use the nodeHook for button elements in IE6/7 (#1954)\n\t\tvalue: {\n\t\t\tget: function( elem, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.get( elem, name );\n\t\t\t\t}\n\t\t\t\treturn name in elem ?\n\t\t\t\t\telem.value :\n\t\t\t\t\tnull;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.set( elem, value, name );\n\t\t\t\t}\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.value = value;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\t// Align boolean attributes with corresponding properties\n\t\t// Fall back to attribute presence where some booleans are not supported\n\t\tvar attrNode,\n\t\t\tproperty = jQuery.prop( elem, name );\n\t\treturn property === true || typeof property !== \"boolean\" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\n\tset: function( elem, value, name ) {\n\t\tvar propName;\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\tif ( propName in elem ) {\n\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\telem[ propName ] = true;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t}\n\t\treturn name;\n\t}\n};\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\tfixSpecified = {\n\t\tname: true,\n\t\tid: true,\n\t\tcoords: true\n\t};\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret;\n\t\t\tret = elem.getAttributeNode( name );\n\t\t\treturn ret && ( fixSpecified[ name ] ? ret.value !== \"\" : ret.specified ) ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\tret = document.createAttribute( name );\n\t\t\t\telem.setAttributeNode( ret );\n\t\t\t}\n\t\t\treturn ( ret.value = value + \"\" );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tget: nodeHook.get,\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = \"false\";\n\t\t\t}\n\t\t\tnodeHook.set( elem, value, name );\n\t\t}\n\t};\n}\n\n\n// Some attributes require a special call on IE\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret === null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Normalize to lowercase since IE uppercases css property names\n\t\t\treturn elem.style.cssText.toLowerCase() || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t});\n});\nvar rformElems = /^(?:textarea|input|select)$/i,\n\trtypenamespace = /^([^\\.]*|)(?:\\.(.+)|)$/,\n\trhoverHack = /(?:^|\\s)hover(\\.\\S+|)\\b/,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\thoverHack = function( events ) {\n\t\treturn jQuery.event.special.hover ? events : events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n\t};\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar elemData, eventHandle, events,\n\t\t\tt, tns, type, namespaces, handleObj,\n\t\t\thandleObjIn, handlers, special;\n\n\t\t// Don't attach events to noData or text/comment nodes (allow plain objects tho)\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tevents = elemData.events;\n\t\tif ( !events ) {\n\t\t\telemData.events = events = {};\n\t\t}\n\t\teventHandle = elemData.handle;\n\t\tif ( !eventHandle ) {\n\t\t\telemData.handle = eventHandle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = jQuery.trim( hoverHack(types) ).split( \" \" );\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = tns[1];\n\t\t\tnamespaces = ( tns[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: tns[1],\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\thandlers = events[ type ];\n\t\t\tif ( !handlers ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\tglobal: {},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar t, tns, type, origType, namespaces, origCount,\n\t\t\tj, events, special, eventType, handleObj,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = jQuery.trim( hoverHack( types || \"\" ) ).split(\" \");\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tns[1];\n\t\t\tnamespaces = tns[2];\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector? special.delegateType : special.bindType ) || type;\n\t\t\teventType = events[ type ] || [];\n\t\t\torigCount = eventType.length;\n\t\t\tnamespaces = namespaces ? new RegExp(\"(^|\\\\.)\" + namespaces.split(\".\").sort().join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n\n\t\t\t// Remove matching events\n\t\t\tfor ( j = 0; j < eventType.length; j++ ) {\n\t\t\t\thandleObj = eventType[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t ( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t ( !namespaces || namespaces.test( handleObj.namespace ) ) &&\n\t\t\t\t\t ( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\teventType.splice( j--, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\teventType.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( eventType.length === 0 && origCount !== eventType.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery.removeData( elem, \"events\", true );\n\t\t}\n\t},\n\n\t// Events that are safe to short-circuit if no handlers are attached.\n\t// Native DOM events should not be added, they may have inline handlers.\n\tcustomEvent: {\n\t\t\"getData\": true,\n\t\t\"setData\": true,\n\t\t\"changeData\": true\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Event object or event type\n\t\tvar cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,\n\t\t\ttype = event.type || event,\n\t\t\tnamespaces = [];\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \"!\" ) >= 0 ) {\n\t\t\t// Exclusive events trigger only for the exact event (no namespaces)\n\t\t\ttype = type.slice(0, -1);\n\t\t\texclusive = true;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\n\t\tif ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n\t\t\t// No jQuery handlers for this event type, and it can't have inline handlers\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an Event, Object, or just an event type string\n\t\tevent = typeof event === \"object\" ?\n\t\t\t// jQuery.Event object\n\t\t\tevent[ jQuery.expando ] ? event :\n\t\t\t// Object literal\n\t\t\tnew jQuery.Event( type, event ) :\n\t\t\t// Just the event type (string)\n\t\t\tnew jQuery.Event( type );\n\n\t\tevent.type = type;\n\t\tevent.isTrigger = true;\n\t\tevent.exclusive = exclusive;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.namespace_re = event.namespace? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n\t\tontype = type.indexOf( \":\" ) < 0 ? \"on\" + type : \"\";\n\n\t\t// Handle a global trigger\n\t\tif ( !elem ) {\n\n\t\t\t// TODO: Stop taunting the data cache; remove global events and always attach to document\n\t\t\tcache = jQuery.cache;\n\t\t\tfor ( i in cache ) {\n\t\t\t\tif ( cache[ i ].events && cache[ i ].events[ type ] ) {\n\t\t\t\t\tjQuery.event.trigger( event, data, cache[ i ].handle.elem, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data != null ? jQuery.makeArray( data ) : [];\n\t\tdata.unshift( event );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\teventPath = [[ elem, special.bindType || type ]];\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tcur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;\n\t\t\tfor ( old = elem; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push([ cur, bubbleType ]);\n\t\t\t\told = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( old === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\tfor ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {\n\n\t\t\tcur = eventPath[i][0];\n\t\t\tevent.type = eventPath[i][1];\n\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\t\t\t// Note that this is a bare JS function and not a jQuery handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486)\n\t\t\t\tif ( ontype && elem[ type ] && ((type !== \"focus\" && type !== \"blur\") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\told = elem[ ontype ];\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = old;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event || window.event );\n\n\t\tvar i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,\n\t\t\thandlers = ( (jQuery._data( this, \"events\" ) || {} )[ event.type ] || []),\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\targs = core_slice.call( arguments ),\n\t\t\trun_all = !event.exclusive && !event.namespace,\n\t\t\tspecial = jQuery.event.special[ event.type ] || {},\n\t\t\thandlerQueue = [];\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers that should run if there are delegated events\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && !(event.button && event.type === \"click\") ) {\n\n\t\t\tfor ( cur = event.target; cur != this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tselMatch = {};\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\t\t\t\t\t\tsel = handleObj.selector;\n\n\t\t\t\t\t\tif ( selMatch[ sel ] === undefined ) {\n\t\t\t\t\t\t\tselMatch[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( selMatch[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, matches: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( handlers.length > delegateCount ) {\n\t\t\thandlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\tfor ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {\n\t\t\tmatched = handlerQueue[ i ];\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tfor ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {\n\t\t\t\thandleObj = matched.matches[ j ];\n\n\t\t\t\t// Triggered event must either 1) be non-exclusive and have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.data = handleObj.data;\n\t\t\t\t\tevent.handleObj = handleObj;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tevent.result = ret;\n\t\t\t\t\t\tif ( ret === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\t// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***\n\tprops: \"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = jQuery.event.fixHooks[ event.type ] || {},\n\t\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = jQuery.Event( originalEvent );\n\n\t\tfor ( i = copy.length; i; ) {\n\t\t\tprop = copy[ --i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Target should not be a text node (#504, Safari)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\n\t\tfocus: {\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tsetup: function( data, namespaces, eventHandle ) {\n\t\t\t\t// We only want to do this special case on windows\n\t\t\t\tif ( jQuery.isWindow( this ) ) {\n\t\t\t\t\tthis.onbeforeunload = eventHandle;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tteardown: function( namespaces, eventHandle ) {\n\t\t\t\tif ( this.onbeforeunload === eventHandle ) {\n\t\t\t\t\tthis.onbeforeunload = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{ type: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\n// Some plugins are using, but it's undocumented/deprecated and will be removed.\n// The 1.7 special event interface should provide all the hooks needed now.\njQuery.event.handle = jQuery.event.dispatch;\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8 –\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\nfunction returnFalse() {\n\treturn false;\n}\nfunction returnTrue() {\n\treturn true;\n}\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tpreventDefault: function() {\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if preventDefault exists run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// otherwise set the returnValue property of the original event to false (IE)\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// if stopPropagation exists run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t\t// otherwise set the cancelBubble property of the original event to true (IE)\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t},\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj,\n\t\t\t\tselector = handleObj.selector;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"_submit_attached\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"_submit_attached\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"_change_attached\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"_change_attached\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) { // && selector != null\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tlive: function( types, data, fn ) {\n\t\tjQuery( this.context ).on( types, this.selector, data, fn );\n\t\treturn this;\n\t},\n\tdie: function( types, fn ) {\n\t\tjQuery( this.context ).off( types, this.selector || \"**\", fn );\n\t\treturn this;\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tif ( this[0] ) {\n\t\t\treturn jQuery.event.trigger( type, data, this[0], true );\n\t\t}\n\t},\n\n\ttoggle: function( fn ) {\n\t\t// Save reference to arguments for access in closure\n\t\tvar args = arguments,\n\t\t\tguid = fn.guid || jQuery.guid++,\n\t\t\ti = 0,\n\t\t\ttoggler = function( event ) {\n\t\t\t\t// Figure out which function to execute\n\t\t\t\tvar lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\t\tjQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t\t// Make sure that clicks stop\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// and execute the function\n\t\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t\t};\n\n\t\t// link all the functions, so any of them can unbind this click handler\n\t\ttoggler.guid = guid;\n\t\twhile ( i < args.length ) {\n\t\t\targs[ i++ ].guid = guid;\n\t\t}\n\n\t\treturn this.click( toggler );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n});\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\tif ( fn == null ) {\n\t\t\tfn = data;\n\t\t\tdata = null;\n\t\t}\n\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n\n\tif ( rkeyEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;\n\t}\n\n\tif ( rmouseEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;\n\t}\n});\n/*!\n * Sizzle CSS Selector Engine\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://sizzlejs.com/\n */\n(function( window, undefined ) {\n\nvar cachedruns,\n\tassertGetIdNotName,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcontains,\n\tcompile,\n\tsortOrder,\n\thasDuplicate,\n\toutermostContext,\n\n\tbaseHasDuplicate = true,\n\tstrundefined = \"undefined\",\n\n\texpando = ( \"sizcache\" + Math.random() ).replace( \".\", \"\" ),\n\n\tToken = String,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\tdirruns = 0,\n\tdone = 0,\n\tpop = [].pop,\n\tpush = [].push,\n\tslice = [].slice,\n\t// Use a stripped-down indexOf if a native one is unavailable\n\tindexOf = [].indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\t// Augment a function for special use by Sizzle\n\tmarkFunction = function( fn, value ) {\n\t\tfn[ expando ] = value == null || value;\n\t\treturn fn;\n\t},\n\n\tcreateCache = function() {\n\t\tvar cache = {},\n\t\t\tkeys = [];\n\n\t\treturn markFunction(function( key, value ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tif ( keys.push( key ) > Expr.cacheLength ) {\n\t\t\t\tdelete cache[ keys.shift() ];\n\t\t\t}\n\n\t\t\treturn (cache[ key ] = value);\n\t\t}, cache );\n\t},\n\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\n\t// Regex\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[-\\\\w]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\toperators = \"([*^$|!~]?=)\",\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:\" + operators + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments not in parens/brackets,\n\t//   then attribute selectors and non-pseudos (denoted by :),\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\2|([^()[\\\\]]*|(?:(?:\" + attributes + \")|[^:]|\\\\\\\\.)*|.*))\\\\)|)\",\n\n\t// For matchExpr.POS and matchExpr.needsContext\n\tpos = \":(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\" + whitespace + \"*\" ),\n\trpseudo = new RegExp( pseudos ),\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w\\-]+)|(\\w+)|\\.([\\w\\-]+))$/,\n\n\trnot = /^:not/,\n\trsibling = /[\\x20\\t\\r\\n\\f]*[+~]/,\n\trendsWithNot = /:not\\($/,\n\n\trheader = /h\\d/i,\n\trinputs = /input|select|textarea|button/i,\n\n\trbackslash = /\\\\(?!\\\\)/g,\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"NAME\": new RegExp( \"^\\\\[name=['\\\"]?(\" + characterEncoding + \")['\\\"]?\\\\]\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"POS\": new RegExp( pos, \"i\" ),\n\t\t\"CHILD\": new RegExp( \"^:(only|nth|first|last)-child(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|\" + pos, \"i\" )\n\t},\n\n\t// Support\n\n\t// Used for testing something on an element\n\tassert = function( fn ) {\n\t\tvar div = document.createElement(\"div\");\n\n\t\ttry {\n\t\t\treturn fn( div );\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\t// release memory in IE\n\t\t\tdiv = null;\n\t\t}\n\t},\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tassertTagNameNoComments = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t}),\n\n\t// Check if getAttribute returns normalized href attributes\n\tassertHrefNotNormalized = assert(function( div ) {\n\t\tdiv.innerHTML = \"<a href='#'></a>\";\n\t\treturn div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") === \"#\";\n\t}),\n\n\t// Check if attributes should be retrieved by attribute nodes\n\tassertAttributes = assert(function( div ) {\n\t\tdiv.innerHTML = \"<select></select>\";\n\t\tvar type = typeof div.lastChild.getAttribute(\"multiple\");\n\t\t// IE8 returns a string for some attributes even when not present\n\t\treturn type !== \"boolean\" && type !== \"string\";\n\t}),\n\n\t// Check if getElementsByClassName can be trusted\n\tassertUsableClassName = assert(function( div ) {\n\t\t// Opera can't find a second classname (in 9.6)\n\t\tdiv.innerHTML = \"<div class='hidden e'></div><div class='hidden'></div>\";\n\t\tif ( !div.getElementsByClassName || !div.getElementsByClassName(\"e\").length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Safari 3.2 caches class attributes and doesn't catch changes\n\t\tdiv.lastChild.className = \"e\";\n\t\treturn div.getElementsByClassName(\"e\").length === 2;\n\t}),\n\n\t// Check if getElementById returns elements by name\n\t// Check if getElementsByName privileges form controls or returns elements by ID\n\tassertUsableName = assert(function( div ) {\n\t\t// Inject content\n\t\tdiv.id = expando + 0;\n\t\tdiv.innerHTML = \"<a name='\" + expando + \"'></a><div name='\" + expando + \"'></div>\";\n\t\tdocElem.insertBefore( div, docElem.firstChild );\n\n\t\t// Test\n\t\tvar pass = document.getElementsByName &&\n\t\t\t// buggy browsers will return fewer than the correct 2\n\t\t\tdocument.getElementsByName( expando ).length === 2 +\n\t\t\t// buggy browsers will return more than the correct 0\n\t\t\tdocument.getElementsByName( expando + 0 ).length;\n\t\tassertGetIdNotName = !document.getElementById( expando );\n\n\t\t// Cleanup\n\t\tdocElem.removeChild( div );\n\n\t\treturn pass;\n\t});\n\n// If slice is not available, provide a backup\ntry {\n\tslice.call( docElem.childNodes, 0 )[0].nodeType;\n} catch ( e ) {\n\tslice = function( i ) {\n\t\tvar elem,\n\t\t\tresults = [];\n\t\tfor ( ; (elem = this[i]); i++ ) {\n\t\t\tresults.push( elem );\n\t\t}\n\t\treturn results;\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tresults = results || [];\n\tcontext = context || document;\n\tvar match, elem, xml, m,\n\t\tnodeType = context.nodeType;\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( nodeType !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\txml = isXML( context );\n\n\tif ( !xml && !seed ) {\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed, xml );\n}\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\treturn Sizzle( expr, null, null, [ elem ] ).length > 0;\n};\n\n// Returns a function to use in pseudos for input types\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n// Returns a function to use in pseudos for buttons\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n// Returns a function to use in pseudos for positionals\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( nodeType ) {\n\t\tif ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\t// Use textContent for elements\n\t\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else {\n\t\t\t\t// Traverse its children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\t\tret += getText( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\t\t// Do not include comment or processing instruction nodes\n\t} else {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t}\n\treturn ret;\n};\n\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Element contains another\ncontains = Sizzle.contains = docElem.contains ?\n\tfunction( a, b ) {\n\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\tbup = b && b.parentNode;\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );\n\t} :\n\tdocElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\t\treturn b && !!( a.compareDocumentPosition( b ) & 16 );\n\t} :\n\tfunction( a, b ) {\n\t\twhile ( (b = b.parentNode) ) {\n\t\t\tif ( b === a ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\nSizzle.attr = function( elem, name ) {\n\tvar val,\n\t\txml = isXML( elem );\n\n\tif ( !xml ) {\n\t\tname = name.toLowerCase();\n\t}\n\tif ( (val = Expr.attrHandle[ name ]) ) {\n\t\treturn val( elem );\n\t}\n\tif ( xml || assertAttributes ) {\n\t\treturn elem.getAttribute( name );\n\t}\n\tval = elem.getAttributeNode( name );\n\treturn val ?\n\t\ttypeof elem[ name ] === \"boolean\" ?\n\t\t\telem[ name ] ? name : null :\n\t\t\tval.specified ? val.value : null :\n\t\tnull;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\t// IE6/7 return a modified href\n\tattrHandle: assertHrefNotNormalized ?\n\t\t{} :\n\t\t{\n\t\t\t\"href\": function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t\t},\n\t\t\t\"type\": function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"type\");\n\t\t\t}\n\t\t},\n\n\tfind: {\n\t\t\"ID\": assertGetIdNotName ?\n\t\t\tfunction( id, context, xml ) {\n\t\t\t\tif ( typeof context.getElementById !== strundefined && !xml ) {\n\t\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t\t}\n\t\t\t} :\n\t\t\tfunction( id, context, xml ) {\n\t\t\t\tif ( typeof context.getElementById !== strundefined && !xml ) {\n\t\t\t\t\tvar m = context.getElementById( id );\n\n\t\t\t\t\treturn m ?\n\t\t\t\t\t\tm.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode(\"id\").value === id ?\n\t\t\t\t\t\t\t[m] :\n\t\t\t\t\t\t\tundefined :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\"TAG\": assertTagNameNoComments ?\n\t\t\tfunction( tag, context ) {\n\t\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t\t}\n\t\t\t} :\n\t\t\tfunction( tag, context ) {\n\t\t\t\tvar results = context.getElementsByTagName( tag );\n\n\t\t\t\t// Filter out possible comments\n\t\t\t\tif ( tag === \"*\" ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\ttmp = [],\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor ( ; (elem = results[i]); i++ ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn results;\n\t\t\t},\n\n\t\t\"NAME\": assertUsableName && function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByName !== strundefined ) {\n\t\t\t\treturn context.getElementsByName( name );\n\t\t\t}\n\t\t},\n\n\t\t\"CLASS\": assertUsableClassName && function( className, context, xml ) {\n\t\t\tif ( typeof context.getElementsByClassName !== strundefined && !xml ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( rbackslash, \"\" );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( rbackslash, \"\" );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t3 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t4 sign of xn-component\n\t\t\t\t5 x of xn-component\n\t\t\t\t6 sign of y-component\n\t\t\t\t7 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1] === \"nth\" ) {\n\t\t\t\t// nth-child requires argument\n\t\t\t\tif ( !match[2] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === \"even\" || match[2] === \"odd\" ) );\n\t\t\t\tmatch[4] = +( ( match[6] + match[7] ) || match[2] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar unquoted, excess;\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[3];\n\t\t\t} else if ( (unquoted = match[4]) ) {\n\t\t\t\t// Only check arguments that contain a pseudo\n\t\t\t\tif ( rpseudo.test(unquoted) &&\n\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t\t// excess is a negative index\n\t\t\t\t\tunquoted = unquoted.slice( 0, excess );\n\t\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\t}\n\t\t\t\tmatch[2] = unquoted;\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\t\t\"ID\": assertGetIdNotName ?\n\t\t\tfunction( id ) {\n\t\t\t\tid = id.replace( rbackslash, \"\" );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn elem.getAttribute(\"id\") === id;\n\t\t\t\t};\n\t\t\t} :\n\t\t\tfunction( id ) {\n\t\t\t\tid = id.replace( rbackslash, \"\" );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\t\treturn node && node.value === id;\n\t\t\t\t};\n\t\t\t},\n\n\t\t\"TAG\": function( nodeName ) {\n\t\t\tif ( nodeName === \"*\" ) {\n\t\t\t\treturn function() { return true; };\n\t\t\t}\n\t\t\tnodeName = nodeName.replace( rbackslash, \"\" ).toLowerCase();\n\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ expando ][ className ];\n\t\t\tif ( !pattern ) {\n\t\t\t\tpattern = classCache( className, new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\") );\n\t\t\t}\n\t\t\treturn function( elem ) {\n\t\t\t\treturn pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\")) || \"\" );\n\t\t\t};\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem, context ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.substr( result.length - check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.substr( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, argument, first, last ) {\n\n\t\t\tif ( type === \"nth\" ) {\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar node, diff,\n\t\t\t\t\t\tparent = elem.parentNode;\n\n\t\t\t\t\tif ( first === 1 && last === 0 ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parent ) {\n\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t\tfor ( node = parent.firstChild; node; node = node.nextSibling ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tdiff++;\n\t\t\t\t\t\t\t\tif ( elem === node ) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Incorporate the offset (or cast to NaN), then check against cycle size\n\t\t\t\t\tdiff -= last;\n\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = elem;\n\n\t\t\t\tswitch ( type ) {\n\t\t\t\t\tcase \"only\":\n\t\t\t\t\tcase \"first\":\n\t\t\t\t\t\twhile ( (node = node.previousSibling) ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( type === \"first\" ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnode = elem;\n\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase \"last\":\n\t\t\t\t\t\twhile ( (node = node.nextSibling) ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tvar nodeType;\n\t\t\telem = elem.firstChild;\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telem = elem.nextSibling;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar type, attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\t(type = elem.type) === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === type );\n\t\t},\n\n\t\t// Input types\n\t\t\"radio\": createInputPseudo(\"radio\"),\n\t\t\"checkbox\": createInputPseudo(\"checkbox\"),\n\t\t\"file\": createInputPseudo(\"file\"),\n\t\t\"password\": createInputPseudo(\"password\"),\n\t\t\"image\": createInputPseudo(\"image\"),\n\n\t\t\"submit\": createButtonPseudo(\"submit\"),\n\t\t\"reset\": createButtonPseudo(\"reset\"),\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\tvar doc = elem.ownerDocument;\n\t\t\treturn elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);\n\t\t},\n\n\t\t\"active\": function( elem ) {\n\t\t\treturn elem === elem.ownerDocument.activeElement;\n\t\t},\n\n\t\t// Positional types\n\t\t\"first\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tfor ( var i = 0; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tfor ( var i = 1; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tfor ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tfor ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nfunction siblingCheck( a, b, ret ) {\n\tif ( a === b ) {\n\t\treturn ret;\n\t}\n\n\tvar cur = a.nextSibling;\n\n\twhile ( cur ) {\n\t\tif ( cur === b ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tcur = cur.nextSibling;\n\t}\n\n\treturn 1;\n}\n\nsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn ( !a.compareDocumentPosition || !b.compareDocumentPosition ?\n\t\t\ta.compareDocumentPosition :\n\t\t\ta.compareDocumentPosition(b) & 4\n\t\t) ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// The nodes are identical, we can exit early\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Fallback to using sourceIndex (in IE) if it's available on both nodes\n\t\t} else if ( a.sourceIndex && b.sourceIndex ) {\n\t\t\treturn a.sourceIndex - b.sourceIndex;\n\t\t}\n\n\t\tvar al, bl,\n\t\t\tap = [],\n\t\t\tbp = [],\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tcur = aup;\n\n\t\t// If the nodes are siblings (or identical) we can do a quick check\n\t\tif ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\n\t\t// If no parents were found then the nodes are disconnected\n\t\t} else if ( !aup ) {\n\t\t\treturn -1;\n\n\t\t} else if ( !bup ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Otherwise they're somewhere else in the tree so we need\n\t\t// to build up a full list of the parentNodes for comparison\n\t\twhile ( cur ) {\n\t\t\tap.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tcur = bup;\n\n\t\twhile ( cur ) {\n\t\t\tbp.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tal = ap.length;\n\t\tbl = bp.length;\n\n\t\t// Start walking down the tree looking for a discrepancy\n\t\tfor ( var i = 0; i < al && i < bl; i++ ) {\n\t\t\tif ( ap[i] !== bp[i] ) {\n\t\t\t\treturn siblingCheck( ap[i], bp[i] );\n\t\t\t}\n\t\t}\n\n\t\t// We ended someplace up the tree so do a sibling check\n\t\treturn i === al ?\n\t\t\tsiblingCheck( a, bp[i], -1 ) :\n\t\t\tsiblingCheck( ap[i], b, 1 );\n\t};\n\n// Always assume the presence of duplicates if sort doesn't\n// pass them to our comparison function (as in Google Chrome).\n[0, 0].sort( sortOrder );\nbaseHasDuplicate = !hasDuplicate;\n\n// Document sorting and removing duplicates\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\ti = 1;\n\n\thasDuplicate = baseHasDuplicate;\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\tfor ( ; (elem = results[i]); i++ ) {\n\t\t\tif ( elem === results[ i - 1 ] ) {\n\t\t\t\tresults.splice( i--, 1 );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type, soFar, groups, preFilters,\n\t\tcached = tokenCache[ expando ][ selector ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\tsoFar = soFar.slice( match[0].length );\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\ttokens.push( matched = new Token( match.shift() ) );\n\t\t\tsoFar = soFar.slice( matched.length );\n\n\t\t\t// Cast descendant combinators to space\n\t\t\tmatched.type = match[0].replace( rtrim, \" \" );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t// The last two arguments here are (context, xml) for backCompat\n\t\t\t\t(match = preFilters[ type ]( match, document, true ))) ) {\n\n\t\t\t\ttokens.push( matched = new Token( match.shift() ) );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t\tmatched.type = type;\n\t\t\t\tmatched.matches = match;\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && combinator.dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( checkNonElements || elem.nodeType === 1  ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( !xml ) {\n\t\t\t\tvar cache,\n\t\t\t\t\tdirkey = dirruns + \" \" + doneName + \" \",\n\t\t\t\t\tcachedkey = dirkey + cachedruns;\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( checkNonElements || elem.nodeType === 1 ) {\n\t\t\t\t\t\tif ( (cache = elem[ expando ]) === cachedkey ) {\n\t\t\t\t\t\t\treturn elem.sizset;\n\t\t\t\t\t\t} else if ( typeof cache === \"string\" && cache.indexOf(dirkey) === 0 ) {\n\t\t\t\t\t\t\tif ( elem.sizset ) {\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ expando ] = cachedkey;\n\t\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\t\telem.sizset = true;\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telem.sizset = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( checkNonElements || elem.nodeType === 1 ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\t// Positional selectors apply to seed elements, so it is invalid to follow them with relative ones\n\t\tif ( seed && postFinder ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i, elem, postFilterIn,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [], seed ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\tpostFilterIn = condense( matcherOut, postMap );\n\t\t\tpostFilter( postFilterIn, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = postFilterIn.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = postFilterIn[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Keep seed and results synchronized\n\t\tif ( seed ) {\n\t\t\t// Ignore postFinder because it can't coexist with seed\n\t\t\ti = preFilter && matcherOut.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\tseed[ preMap[i] ] = !(results[ preMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\t// The concatenated values are (context, xml) for backCompat\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && tokens.slice( 0, i - 1 ).join(\"\").replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && tokens.join(\"\")\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Nested matchers should use non-integer dirruns\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = superMatcher.el;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tfor ( j = 0; (matcher = elementMatchers[j]); j++ ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++superMatcher.el;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tfor ( j = 0; (matcher = setMatchers[j]); j++ ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\tsuperMatcher.el = 0;\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ expando ][ selector ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results, seed ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results, seed );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed, xml ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector ),\n\t\tj = match.length;\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && !xml &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = Expr.find[\"ID\"]( token.matches[0].replace( rbackslash, \"\" ), context, xml )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\n\t\t\t\tselector = selector.slice( tokens.shift().length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\tfor ( i = matchExpr[\"POS\"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( rbackslash, \"\" ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context,\n\t\t\t\t\t\txml\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && tokens.join(\"\");\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, slice.call( seed, 0 ) );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\txml,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\nif ( document.querySelectorAll ) {\n\t(function() {\n\t\tvar disconnectedMatch,\n\t\t\toldSelect = select,\n\t\t\trescape = /'|\\\\/g,\n\t\t\trattributeQuotes = /\\=[\\x20\\t\\r\\n\\f]*([^'\"\\]]*)[\\x20\\t\\r\\n\\f]*\\]/g,\n\n\t\t\t// qSa(:focus) reports false when true (Chrome 21),\n\t\t\t// A support test would require too much code (would include document ready)\n\t\t\trbuggyQSA = [\":focus\"],\n\n\t\t\t// matchesSelector(:focus) reports false when true (Chrome 21),\n\t\t\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\t\t\t// A support test would require too much code (would include document ready)\n\t\t\t// just skip matchesSelector for :active\n\t\t\trbuggyMatches = [ \":active\", \":focus\" ],\n\t\t\tmatches = docElem.matchesSelector ||\n\t\t\t\tdocElem.mozMatchesSelector ||\n\t\t\t\tdocElem.webkitMatchesSelector ||\n\t\t\t\tdocElem.oMatchesSelector ||\n\t\t\t\tdocElem.msMatchesSelector;\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explictly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// IE8 - Some boolean attributes are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here (do not put tests after this one)\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Opera 10-12/IE9 - ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\tdiv.innerHTML = \"<p test=''></p>\";\n\t\t\tif ( div.querySelectorAll(\"[test^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:\\\"\\\"|'')\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here (do not put tests after this one)\n\t\t\tdiv.innerHTML = \"<input type='hidden'/>\";\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t}\n\t\t});\n\n\t\t// rbuggyQSA always contains :focus, so no need for a length check\n\t\trbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join(\"|\") );\n\n\t\tselect = function( selector, context, results, seed, xml ) {\n\t\t\t// Only use querySelectorAll when not filtering,\n\t\t\t// when this is not xml,\n\t\t\t// and when no QSA bugs apply\n\t\t\tif ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\t\tvar groups, i,\n\t\t\t\t\told = true,\n\t\t\t\t\tnid = expando,\n\t\t\t\t\tnewContext = context,\n\t\t\t\t\tnewSelector = context.nodeType === 9 && selector;\n\n\t\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t\t// IE 8 doesn't work on object elements\n\t\t\t\tif ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t\t}\n\t\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nid + groups[i].join(\"\");\n\t\t\t\t\t}\n\t\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results, slice.call( newContext.querySelectorAll(\n\t\t\t\t\t\t\tnewSelector\n\t\t\t\t\t\t), 0 ) );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch(qsaError) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn oldSelect( selector, context, results, seed, xml );\n\t\t};\n\n\t\tif ( matches ) {\n\t\t\tassert(function( div ) {\n\t\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t\t// on a disconnected node (IE 9)\n\t\t\t\tdisconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t\t// This should fail with an exception\n\t\t\t\t// Gecko does not error, returns false instead\n\t\t\t\ttry {\n\t\t\t\t\tmatches.call( div, \"[test!='']:sizzle\" );\n\t\t\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t\t\t} catch ( e ) {}\n\t\t\t});\n\n\t\t\t// rbuggyMatches always contains :active and :focus, so no need for a length check\n\t\t\trbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join(\"|\") );\n\n\t\t\tSizzle.matchesSelector = function( elem, expr ) {\n\t\t\t\t// Make sure that attribute selectors are quoted\n\t\t\t\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\t\t\t\t// rbuggyMatches always contains :active, so no need for an existence check\n\t\t\t\tif ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\t\tif ( ret || disconnectedMatch ||\n\t\t\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t}\n\n\t\t\t\treturn Sizzle( expr, null, null, [ elem ] ).length > 0;\n\t\t\t};\n\t\t}\n\t})();\n}\n\n// Deprecated\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Back-compat\nfunction setFilters() {}\nExpr.filters = setFilters.prototype = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i, l, length, n, r, ret,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0, l = self.length; i < l; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tret = this.pushStack( \"\", \"find\", selector );\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tlength = ret.length;\n\t\t\tjQuery.find( selector, this[i], ret );\n\n\t\t\tif ( i > 0 ) {\n\t\t\t\t// Make sure that the results are unique\n\t\t\t\tfor ( n = length; n < ret.length; n++ ) {\n\t\t\t\t\tfor ( r = 0; r < length; r++ ) {\n\t\t\t\t\t\tif ( ret[r] === ret[n] ) {\n\t\t\t\t\t\t\tret.splice(n--, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false), \"not\", selector);\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true), \"filter\", selector );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && (\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\trneedsContext.test( selector ) ?\n\t\t\t\t\tjQuery( selector, this.context ).index( this[0] ) >= 0 :\n\t\t\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\t\tthis.filter( selector ).length > 0 );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tcur = this[i];\n\n\t\t\twhile ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t}\n\n\t\tret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\n\t\treturn this.pushStack( ret, \"closest\", selectors );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n\t\t\tall :\n\t\t\tjQuery.unique( all ) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// A painfully simple check to see if an element is disconnected\n// from a document (should be improved, where feasible).\nfunction isDisconnected( node ) {\n\treturn !node || !node.parentNode || node.parentNode.nodeType === 11;\n}\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( this.length > 1 && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret, name, core_slice.call( arguments ).join(\",\") );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\treturn ( elem === qualifier ) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem, i ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\trnocache = /<(?:script|object|embed|option|style)/i,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trcheckableType = /^(?:checkbox|radio)$/,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /\\/(java|ecma)script/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)|[\\]\\-]{2}>\\s*$/g,\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\t_default: [ 0, \"\", \"\" ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n// unless wrapped in a div with non-breaking characters in front of it.\nif ( !jQuery.support.htmlSerialize ) {\n\twrapMap._default = [ 1, \"X<div>\", \"</div>\" ];\n}\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\tif ( !isDisconnected( this[0] ) ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t});\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tvar set = jQuery.clean( arguments );\n\t\t\treturn this.pushStack( jQuery.merge( set, this ), \"before\", this.selector );\n\t\t}\n\t},\n\n\tafter: function() {\n\t\tif ( !isDisconnected( this[0] ) ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t});\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tvar set = jQuery.clean( arguments );\n\t\t\treturn this.pushStack( jQuery.merge( this, set ), \"after\", this.selector );\n\t\t}\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t\t\tjQuery.cleanData( [ elem ] );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName( \"*\" ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function( value ) {\n\t\tif ( !isDisconnected( this[0] ) ) {\n\t\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t\t// this can help fix replacing a parent with child elements\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each(function(i) {\n\t\t\t\t\tvar self = jQuery(this), old = self.html();\n\t\t\t\t\tself.replaceWith( value.call( this, i, old ) );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( typeof value !== \"string\" ) {\n\t\t\t\tvalue = jQuery( value ).detach();\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\tvar next = this.nextSibling,\n\t\t\t\t\tparent = this.parentNode;\n\n\t\t\t\tjQuery( this ).remove();\n\n\t\t\t\tif ( next ) {\n\t\t\t\t\tjQuery(next).before( value );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(parent).append( value );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn this.length ?\n\t\t\tthis.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n\t\t\tthis;\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = [].concat.apply( [], args );\n\n\t\tvar results, first, fragment, iNoClone,\n\t\t\ti = 0,\n\t\t\tvalue = args[0],\n\t\t\tscripts = [],\n\t\t\tl = this.length;\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( !jQuery.support.checkClone && l > 1 && typeof value === \"string\" && rchecked.test( value ) ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery(this).domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isFunction(value) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery(this);\n\t\t\t\targs[0] = value.call( this, i, table ? self.html() : undefined );\n\t\t\t\tself.domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\tresults = jQuery.buildFragment( args, this, scripts );\n\t\t\tfragment = results.fragment;\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\ttable = table && jQuery.nodeName( first, \"tr\" );\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\t// Fragments from the fragment cache must always be cloned and never used in place.\n\t\t\t\tfor ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\ttable && jQuery.nodeName( this[i], \"table\" ) ?\n\t\t\t\t\t\t\tfindOrAppend( this[i], \"tbody\" ) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\ti === iNoClone ?\n\t\t\t\t\t\t\tfragment :\n\t\t\t\t\t\t\tjQuery.clone( fragment, true, true )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\n\t\t\tif ( scripts.length ) {\n\t\t\t\tjQuery.each( scripts, function( i, elem ) {\n\t\t\t\t\tif ( elem.src ) {\n\t\t\t\t\t\tif ( jQuery.ajax ) {\n\t\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\t\turl: elem.src,\n\t\t\t\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\t\t\t\tdataType: \"script\",\n\t\t\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\t\t\tglobal: false,\n\t\t\t\t\t\t\t\t\"throws\": true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.error(\"no ajax\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction findOrAppend( elem, tag ) {\n\treturn elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction cloneFixAttributes( src, dest ) {\n\tvar nodeName;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// clearAttributes removes the attributes, which we don't want,\n\t// but also removes the attachEvent events, which we *do* want\n\tif ( dest.clearAttributes ) {\n\t\tdest.clearAttributes();\n\t}\n\n\t// mergeAttributes, in contrast, only merges back on the\n\t// original attributes, not the events\n\tif ( dest.mergeAttributes ) {\n\t\tdest.mergeAttributes( src );\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\tif ( nodeName === \"object\" ) {\n\t\t// IE6-10 improperly clones children of object elements using classid.\n\t\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\n\t// IE blanks contents when cloning scripts\n\t} else if ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdest.text = src.text;\n\t}\n\n\t// Event data gets referenced instead of copied if the expando\n\t// gets copied too\n\tdest.removeAttribute( jQuery.expando );\n}\n\njQuery.buildFragment = function( args, context, scripts ) {\n\tvar fragment, cacheable, cachehit,\n\t\tfirst = args[ 0 ];\n\n\t// Set context from what may come in as undefined or a jQuery collection or a node\n\t// Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &\n\t// also doubles as fix for #8950 where plain objects caused createDocumentFragment exception\n\tcontext = context || document;\n\tcontext = !context.nodeType && context[0] || context;\n\tcontext = context.ownerDocument || context;\n\n\t// Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n\t// Cloning options loses the selected state, so don't cache them\n\t// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n\t// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n\t// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501\n\tif ( args.length === 1 && typeof first === \"string\" && first.length < 512 && context === document &&\n\t\tfirst.charAt(0) === \"<\" && !rnocache.test( first ) &&\n\t\t(jQuery.support.checkClone || !rchecked.test( first )) &&\n\t\t(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {\n\n\t\t// Mark cacheable and look for a hit\n\t\tcacheable = true;\n\t\tfragment = jQuery.fragments[ first ];\n\t\tcachehit = fragment !== undefined;\n\t}\n\n\tif ( !fragment ) {\n\t\tfragment = context.createDocumentFragment();\n\t\tjQuery.clean( args, context, fragment, scripts );\n\n\t\t// Update the cache, but only store false\n\t\t// unless this is a second parsing of the same content\n\t\tif ( cacheable ) {\n\t\t\tjQuery.fragments[ first ] = cachehit && fragment;\n\t\t}\n\t}\n\n\treturn { fragment: fragment, cacheable: cacheable };\n};\n\njQuery.fragments = {};\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tl = insert.length,\n\t\t\tparent = this.length === 1 && this[0].parentNode;\n\n\t\tif ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {\n\t\t\tinsert[ original ]( this[0] );\n\t\t\treturn this;\n\t\t} else {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\telems = ( i > 0 ? this.clone(true) : this ).get();\n\t\t\t\tjQuery( insert[i] )[ original ]( elems );\n\t\t\t\tret = ret.concat( elems );\n\t\t\t}\n\n\t\t\treturn this.pushStack( ret, name, insert.selector );\n\t\t}\n\t};\n});\n\nfunction getAll( elem ) {\n\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\treturn elem.getElementsByTagName( \"*\" );\n\n\t} else if ( typeof elem.querySelectorAll !== \"undefined\" ) {\n\t\treturn elem.querySelectorAll( \"*\" );\n\n\t} else {\n\t\treturn [];\n\t}\n}\n\n// Used in clean, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar srcElements,\n\t\t\tdestElements,\n\t\t\ti,\n\t\t\tclone;\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\t\t\t// IE copies events bound via attachEvent when using cloneNode.\n\t\t\t// Calling detachEvent on the clone will also remove the events\n\t\t\t// from the original. In order to get around this, we use some\n\t\t\t// proprietary methods to clear the events. Thanks to MooTools\n\t\t\t// guys for this hotness.\n\n\t\t\tcloneFixAttributes( elem, clone );\n\n\t\t\t// Using Sizzle here is crazy slow, so we use getElementsByTagName instead\n\t\t\tsrcElements = getAll( elem );\n\t\t\tdestElements = getAll( clone );\n\n\t\t\t// Weird iteration because IE will replace the length property\n\t\t\t// with an element if you are cloning the body and one of the\n\t\t\t// elements on the page has a name or id of \"length\"\n\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tcloneFixAttributes( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tcloneCopyEvent( elem, clone );\n\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = getAll( elem );\n\t\t\t\tdestElements = getAll( clone );\n\n\t\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsrcElements = destElements = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tclean: function( elems, context, fragment, scripts ) {\n\t\tvar i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,\n\t\t\tsafe = context === document && safeFragment,\n\t\t\tret = [];\n\n\t\t// Ensure that context is a document\n\t\tif ( !context || typeof context.createDocumentFragment === \"undefined\" ) {\n\t\t\tcontext = document;\n\t\t}\n\n\t\t// Use the already-created safe fragment if context permits\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( typeof elem === \"number\" ) {\n\t\t\t\telem += \"\";\n\t\t\t}\n\n\t\t\tif ( !elem ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Convert html string into DOM nodes\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\tif ( !rhtml.test( elem ) ) {\n\t\t\t\t\telem = context.createTextNode( elem );\n\t\t\t\t} else {\n\t\t\t\t\t// Ensure a safe container in which to render the html\n\t\t\t\t\tsafe = safe || createSafeFragment( context );\n\t\t\t\t\tdiv = context.createElement(\"div\");\n\t\t\t\t\tsafe.appendChild( div );\n\n\t\t\t\t\t// Fix \"XHTML\"-style tags in all browsers\n\t\t\t\t\telem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\t\t\t// Go to html and back, then peel off extra wrappers\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\tdepth = wrap[0];\n\t\t\t\t\tdiv.innerHTML = wrap[1] + elem + wrap[2];\n\n\t\t\t\t\t// Move to the right depth\n\t\t\t\t\twhile ( depth-- ) {\n\t\t\t\t\t\tdiv = div.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\thasBody = rtbody.test(elem);\n\t\t\t\t\t\t\ttbody = tag === \"table\" && !hasBody ?\n\t\t\t\t\t\t\t\tdiv.firstChild && div.firstChild.childNodes :\n\n\t\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\t\twrap[1] === \"<table>\" && !hasBody ?\n\t\t\t\t\t\t\t\t\tdiv.childNodes :\n\t\t\t\t\t\t\t\t\t[];\n\n\t\t\t\t\t\tfor ( j = tbody.length - 1; j >= 0 ; --j ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n\t\t\t\t\t\t\t\ttbody[ j ].parentNode.removeChild( tbody[ j ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// IE completely kills leading whitespace when innerHTML is used\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tdiv.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\telem = div.childNodes;\n\n\t\t\t\t\t// Take out of fragment container (we need a fresh div each time)\n\t\t\t\t\tdiv.parentNode.removeChild( div );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( elem.nodeType ) {\n\t\t\t\tret.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, elem );\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from safeFragment\n\t\tif ( div ) {\n\t\t\telem = div = safe = null;\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tfor ( i = 0; (elem = ret[i]) != null; i++ ) {\n\t\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tfixDefaultChecked( elem );\n\t\t\t\t} else if ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\tjQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Append elements to a provided document fragment\n\t\tif ( fragment ) {\n\t\t\t// Special handling of each script element\n\t\t\thandleScript = function( elem ) {\n\t\t\t\t// Check if we consider it executable\n\t\t\t\tif ( !elem.type || rscriptType.test( elem.type ) ) {\n\t\t\t\t\t// Detach the script and store it in the scripts array (if provided) or the fragment\n\t\t\t\t\t// Return truthy to indicate that it has been handled\n\t\t\t\t\treturn scripts ?\n\t\t\t\t\t\tscripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :\n\t\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor ( i = 0; (elem = ret[i]) != null; i++ ) {\n\t\t\t\t// Check if we're done after handling an executable script\n\t\t\t\tif ( !( jQuery.nodeName( elem, \"script\" ) && handleScript( elem ) ) ) {\n\t\t\t\t\t// Append to fragment and handle embedded scripts\n\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\t\t// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration\n\t\t\t\t\t\tjsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName(\"script\") ), handleScript );\n\n\t\t\t\t\t\t// Splice the scripts into ret after their former ancestor and advance our index beyond them\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t\ti += jsTags.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar data, id, elem, type,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n// Limit scope pollution from any deprecated API\n(function() {\n\nvar matched, browser;\n\n// Use of jQuery.browser is frowned upon.\n// More details: http://api.jquery.com/jQuery.browser\n// jQuery.uaMatch maintained for back-compat\njQuery.uaMatch = function( ua ) {\n\tua = ua.toLowerCase();\n\n\tvar match = /(chrome)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(webkit)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(msie) ([\\w.]+)/.exec( ua ) ||\n\t\tua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec( ua ) ||\n\t\t[];\n\n\treturn {\n\t\tbrowser: match[ 1 ] || \"\",\n\t\tversion: match[ 2 ] || \"0\"\n\t};\n};\n\nmatched = jQuery.uaMatch( navigator.userAgent );\nbrowser = {};\n\nif ( matched.browser ) {\n\tbrowser[ matched.browser ] = true;\n\tbrowser.version = matched.version;\n}\n\n// Chrome is Webkit, but Webkit is also Safari.\nif ( browser.chrome ) {\n\tbrowser.webkit = true;\n} else if ( browser.webkit ) {\n\tbrowser.safari = true;\n}\n\njQuery.browser = browser;\n\njQuery.sub = function() {\n\tfunction jQuerySub( selector, context ) {\n\t\treturn new jQuerySub.fn.init( selector, context );\n\t}\n\tjQuery.extend( true, jQuerySub, this );\n\tjQuerySub.superclass = this;\n\tjQuerySub.fn = jQuerySub.prototype = this();\n\tjQuerySub.fn.constructor = jQuerySub;\n\tjQuerySub.sub = this.sub;\n\tjQuerySub.fn.init = function init( selector, context ) {\n\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\tcontext = jQuerySub( context );\n\t\t}\n\n\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t};\n\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\tvar rootjQuerySub = jQuerySub(document);\n\treturn jQuerySub;\n};\n\n})();\nvar curCSS, iframe, iframeDoc,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity=([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([-+])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = {},\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\n\teventsToggle = jQuery.fn.toggle;\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar elem, display,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && elem.style.display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\tdisplay = curCSS( elem, \"display\" );\n\n\t\t\tif ( !values[ index ] && display !== \"none\" ) {\n\t\t\t\tjQuery._data( elem, \"olddisplay\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state, fn2 ) {\n\t\tvar bool = typeof state === \"boolean\";\n\n\t\tif ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {\n\t\t\treturn eventsToggle.apply( this, arguments );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( bool ? state : isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, numeric, extra ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( numeric || extra !== undefined ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn numeric || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.call( elem );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\n// NOTE: To any future maintainer, we've window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tcurCSS = function( elem, name ) {\n\t\tvar ret, width, minWidth, maxWidth,\n\t\t\tcomputed = window.getComputedStyle( elem, null ),\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tret = computed[ name ];\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tcurCSS = function( elem, name ) {\n\t\tvar left, rsLeft,\n\t\t\tret = elem.currentStyle && elem.currentStyle[ name ],\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trsLeft = elem.runtimeStyle && elem.runtimeStyle.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\t// we use jQuery.css instead of curCSS here\n\t\t\t// because of the reliableMarginRight CSS hook!\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true );\n\t\t}\n\n\t\t// From this point on we use curCSS for maximum performance (relevant in animations)\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= parseFloat( curCSS( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= parseFloat( curCSS( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += parseFloat( curCSS( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += parseFloat( curCSS( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tvalueIsBorderBox = true,\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\" ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox\n\t\t)\n\t) + \"px\";\n}\n\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tif ( elemdisplay[ nodeName ] ) {\n\t\treturn elemdisplay[ nodeName ];\n\t}\n\n\tvar elem = jQuery( \"<\" + nodeName + \">\" ).appendTo( document.body ),\n\t\tdisplay = elem.css(\"display\");\n\telem.remove();\n\n\t// If the simple way fails,\n\t// get element's real default display by attaching it to a temp iframe\n\tif ( display === \"none\" || display === \"\" ) {\n\t\t// Use the already-created iframe if possible\n\t\tiframe = document.body.appendChild(\n\t\t\tiframe || jQuery.extend( document.createElement(\"iframe\"), {\n\t\t\t\tframeBorder: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t})\n\t\t);\n\n\t\t// Create a cacheable copy of the iframe document on first call.\n\t\t// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n\t\t// document to it; WebKit & Firefox won't allow reusing the iframe document.\n\t\tif ( !iframeDoc || !iframe.createElement ) {\n\t\t\tiframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n\t\t\tiframeDoc.write(\"<!doctype html><html><body>\");\n\t\t\tiframeDoc.close();\n\t\t}\n\n\t\telem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );\n\n\t\tdisplay = curCSS( elem, \"display\" );\n\t\tdocument.body.removeChild( iframe );\n\t}\n\n\t// Store the correct default display\n\telemdisplay[ nodeName ] = display;\n\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\tif ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, \"display\" ) ) ) {\n\t\t\t\t\treturn jQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\" ) === \"border-box\"\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\tif ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there there is no filter style applied in a css rule, we are done\n\t\t\t\tif ( currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\treturn curCSS( elem, \"marginRight\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tvar ret = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + \"px\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\treturn ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i,\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ],\n\t\t\t\texpanded = {};\n\n\t\t\tfor ( i = 0; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n\trselectTextarea = /^(?:select|textarea)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\treturn this.elements ? jQuery.makeArray( this.elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\treturn this.name && !this.disabled &&\n\t\t\t\t( this.checked || rselectTextarea.test( this.nodeName ) ||\n\t\t\t\t\trinput.test( this.type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val, i ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// If array item is non-scalar (array or object), encode its\n\t\t\t\t// numeric index to resolve deserialization ambiguity issues.\n\t\t\t\t// Note that rack (as of 1.0.0) can't currently deserialize\n\t\t\t\t// nested arrays properly, and attempting to do so may cause\n\t\t\t\t// a server error. Possible fixes are to modify rack's\n\t\t\t\t// deserialization algorithm or to provide an option or flag\n\t\t\t\t// to force array serialization to be shallow.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trquery = /\\?/,\n\trscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\trts = /([?&])_=[^&]*/,\n\trurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = [\"*/\"] + [\"*\"];\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType, list, placeBefore,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),\n\t\t\ti = 0,\n\t\t\tlength = dataTypes.length;\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tdataType = dataTypes[ i ];\n\t\t\t\t// We control if we're asked to add before\n\t\t\t\t// any existing element\n\t\t\t\tplaceBefore = /^\\+/.test( dataType );\n\t\t\t\tif ( placeBefore ) {\n\t\t\t\t\tdataType = dataType.substr( 1 ) || \"*\";\n\t\t\t\t}\n\t\t\t\tlist = structure[ dataType ] = structure[ dataType ] || [];\n\t\t\t\t// then we add to the structure accordingly\n\t\t\t\tlist[ placeBefore ? \"unshift\" : \"push\" ]( func );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n\t\tdataType /* internal */, inspected /* internal */ ) {\n\n\tdataType = dataType || options.dataTypes[ 0 ];\n\tinspected = inspected || {};\n\n\tinspected[ dataType ] = true;\n\n\tvar selection,\n\t\tlist = structure[ dataType ],\n\t\ti = 0,\n\t\tlength = list ? list.length : 0,\n\t\texecuteOnly = ( structure === prefilters );\n\n\tfor ( ; i < length && ( executeOnly || !selection ); i++ ) {\n\t\tselection = list[ i ]( options, originalOptions, jqXHR );\n\t\t// If we got redirected to another dataType\n\t\t// we try there if executing only and not done already\n\t\tif ( typeof selection === \"string\" ) {\n\t\t\tif ( !executeOnly || inspected[ selection ] ) {\n\t\t\t\tselection = undefined;\n\t\t\t} else {\n\t\t\t\toptions.dataTypes.unshift( selection );\n\t\t\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\t\t\tstructure, options, originalOptions, jqXHR, selection, inspected );\n\t\t\t}\n\t\t}\n\t}\n\t// If we're only executing or nothing was selected\n\t// we try the catchall dataType if not done already\n\tif ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\tstructure, options, originalOptions, jqXHR, \"*\", inspected );\n\t}\n\t// unnecessary when only executing (prefilters)\n\t// but it'll be ignored by the caller in that case\n\treturn selection;\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\t// Don't do a request if no elements are being requested\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// Request the remote document\n\tjQuery.ajax({\n\t\turl: url,\n\n\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\ttype: type,\n\t\tdataType: \"html\",\n\t\tdata: params,\n\t\tcomplete: function( jqXHR, status ) {\n\t\t\tif ( callback ) {\n\t\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t}\n\t\t}\n\t}).done(function( responseText ) {\n\n\t\t// Save response for use in complete callback\n\t\tresponse = arguments;\n\n\t\t// See if a selector was specified\n\t\tself.html( selector ?\n\n\t\t\t// Create a dummy div to hold the results\n\t\t\tjQuery(\"<div>\")\n\n\t\t\t\t// inject the contents of the document in, removing the scripts\n\t\t\t\t// to avoid any 'Permission Denied' errors in IE\n\t\t\t\t.append( responseText.replace( rscript, \"\" ) )\n\n\t\t\t\t// Locate the specified elements\n\t\t\t\t.find( selector ) :\n\n\t\t\t// If not, just inject the full result\n\t\t\tresponseText );\n\n\t});\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n\tjQuery.fn[ o ] = function( f ){\n\t\treturn this.on( o, f );\n\t};\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\ttype: method,\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: callback,\n\t\t\tdataType: type\n\t\t});\n\t};\n});\n\njQuery.extend({\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\tif ( settings ) {\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( target, jQuery.ajaxSettings );\n\t\t} else {\n\t\t\t// Extending ajaxSettings\n\t\t\tsettings = target;\n\t\t\ttarget = jQuery.ajaxSettings;\n\t\t}\n\t\tajaxExtend( target, settings );\n\t\treturn target;\n\t},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\ttype: \"GET\",\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\tprocessData: true,\n\t\tasync: true,\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\thtml: \"text/html\",\n\t\t\ttext: \"text/plain\",\n\t\t\tjson: \"application/json, text/javascript\",\n\t\t\t\"*\": allTypes\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\"\n\t\t},\n\n\t\t// List of data converters\n\t\t// 1) key format is \"source_type destination_type\" (a single space in-between)\n\t\t// 2) the catchall symbol \"*\" can be used for source_type\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": window.String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\tcontext: true,\n\t\t\turl: true\n\t\t}\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // ifModified key\n\t\t\tifModifiedKey,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// transport\n\t\t\ttransport,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events\n\t\t\t// It's the callbackContext if one was provided in the options\n\t\t\t// and if it's a DOM node or a jQuery collection\n\t\t\tglobalEventContext = callbackContext !== s &&\n\t\t\t\t( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n\t\t\t\t\t\tjQuery( callbackContext ) : jQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match === undefined ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tstatusText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( statusText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, statusText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Callback for when everything is done\n\t\t// It is defined here because jslint complains if it is declared\n\t\t// at the end of the function (which would be more logical and readable)\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( status >= 200 && status < 300 || status === 304 ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ ifModifiedKey ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ ifModifiedKey ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If not modified\n\t\t\t\tif ( status === 304 ) {\n\n\t\t\t\t\tstatusText = \"notmodified\";\n\t\t\t\t\tisSuccess = true;\n\n\t\t\t\t// If we have data\n\t\t\t\t} else {\n\n\t\t\t\t\tisSuccess = ajaxConvert( s, response );\n\t\t\t\t\tstatusText = isSuccess.state;\n\t\t\t\t\tsuccess = isSuccess.data;\n\t\t\t\t\terror = isSuccess.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( !statusText || status ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n\t\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\t\tjqXHR.complete = completeDeferred.add;\n\n\t\t// Status-dependent callbacks\n\t\tjqXHR.statusCode = function( map ) {\n\t\t\tif ( map ) {\n\t\t\t\tvar tmp;\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tfor ( tmp in map ) {\n\t\t\t\t\t\tstatusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttmp = map[ jqXHR.status ];\n\t\t\t\t\tjqXHR.always( tmp );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( core_rspace );\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() ) || false;\n\t\t\ts.crossDomain = parts && ( parts.join(\":\") + ( parts[ 3 ] ? \"\" : parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !==\n\t\t\t\t( ajaxLocParts.join(\":\") + ( ajaxLocParts[ 3 ] ? \"\" : ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) );\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Get ifModifiedKey before adding the anti-cache parameter\n\t\t\tifModifiedKey = s.url;\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\n\t\t\t\tvar ts = jQuery.now(),\n\t\t\t\t\t// try replacing _= if it is there\n\t\t\t\t\tret = s.url.replace( rts, \"$1_=\" + ts );\n\n\t\t\t\t// if nothing was replaced, add timestamp to the end\n\t\t\t\ts.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tifModifiedKey = ifModifiedKey || s.url;\n\t\t\tif ( jQuery.lastModified[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout( function(){\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch (e) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {}\n\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes,\n\t\tresponseFields = s.responseFields;\n\n\t// Fill responseXXX fields\n\tfor ( type in responseFields ) {\n\t\tif ( type in responses ) {\n\t\t\tjqXHR[ responseFields[type] ] = responses[ type ];\n\t\t}\n\t}\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n// Chain conversions given the request and the original response\nfunction ajaxConvert( s, response ) {\n\n\tvar conv, conv2, current, tmp,\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice(),\n\t\tprev = dataTypes[ 0 ],\n\t\tconverters = {},\n\t\ti = 0;\n\n\t// Apply the dataFilter if provided\n\tif ( s.dataFilter ) {\n\t\tresponse = s.dataFilter( response, s.dataType );\n\t}\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\t// Convert to each sequential dataType, tolerating list modification\n\tfor ( ; (current = dataTypes[++i]); ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\tif ( current !== \"*\" ) {\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\tif ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.splice( i--, 0, current );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[\"throws\"] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update prev for next iteration\n\t\t\tprev = current;\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\nvar oldCallbacks = [],\n\trquestion = /\\?/,\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/,\n\tnonce = jQuery.now();\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tdata = s.data,\n\t\turl = s.url,\n\t\thasCallback = s.jsonp !== false,\n\t\treplaceInUrl = hasCallback && rjsonp.test( url ),\n\t\treplaceInData = hasCallback && !replaceInUrl && typeof data === \"string\" &&\n\t\t\t!( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") &&\n\t\t\trjsonp.test( data );\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( s.dataTypes[ 0 ] === \"jsonp\" || replaceInUrl || replaceInData ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\t\toverwritten = window[ callbackName ];\n\n\t\t// Insert callback into url or form data\n\t\tif ( replaceInUrl ) {\n\t\t\ts.url = url.replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( replaceInData ) {\n\t\t\ts.data = data.replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( hasCallback ) {\n\t\t\ts.url += ( rquestion.test( url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /javascript|ecmascript/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = \"async\";\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( head && script.parentNode ) {\n\t\t\t\t\t\t\thead.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = undefined;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Use insertBefore instead of appendChild  to circumvent an IE6 bug.\n\t\t\t\t// This arises when a base node is used (#2709 and #4378).\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( 0, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar xhrCallbacks,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject ? function() {\n\t\t// Abort all pending requests\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( 0, 1 );\n\t\t}\n\t} : false,\n\txhrId = 0;\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\n(function( xhr ) {\n\tjQuery.extend( jQuery.support, {\n\t\tajax: !!xhr,\n\t\tcors: !!xhr && ( \"withCredentials\" in xhr )\n\t});\n})( jQuery.ajaxSettings.xhr() );\n\n// Create transport if the browser can provide an xhr\nif ( jQuery.support.ajax ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( _ ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\n\t\t\t\t\t\tvar status,\n\t\t\t\t\t\t\tstatusText,\n\t\t\t\t\t\t\tresponseHeaders,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t\txml;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\txml = xhr.responseXML;\n\n\t\t\t\t\t\t\t\t\t// Construct response list\n\t\t\t\t\t\t\t\t\tif ( xml && xml.documentElement /* #4958 */ ) {\n\t\t\t\t\t\t\t\t\t\tresponses.xml = xml;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t} catch( _ ) {\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback, 0 );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback(0,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([-+])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar end, unit,\n\t\t\t\ttween = this.createTween( prop, value ),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tstart = +target || 0,\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( parts ) {\n\t\t\t\tend = +parts[2];\n\t\t\t\tunit = parts[3] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\n\t\t\t\t// We need to compute starting value\n\t\t\t\tif ( unit !== \"px\" && start ) {\n\t\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\t\t// Prefer the current property, because this process will be trivial if it uses the same units\n\t\t\t\t\t// Fallback to end or a simple constant\n\t\t\t\t\tstart = jQuery.css( tween.elem, prop, true ) || end || 1;\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t\t// Adjust and apply\n\t\t\t\t\t\tstart = start / scale;\n\t\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t\t}\n\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = start;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;\n\t\t\t}\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t}, 0 );\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTweens( animation, props ) {\n\tjQuery.each( props, function( prop, value ) {\n\t\tvar collection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tif ( collection[ index ].call( animation, prop, value ) ) {\n\n\t\t\t\t// we're done with this property\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tindex = 0,\n\t\ttweenerIndex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end, easing ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tcreateTweens( animation, props );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue,\n\t\t\telem: elem\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar index, prop, value, length, dataShow, tween, hooks, oldfire,\n\t\tanim = this,\n\t\tstyle = elem.style,\n\t\torig = {},\n\t\thandled = [],\n\t\thidden = elem.nodeType && isHidden( elem );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.done(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( index in props ) {\n\t\tvalue = props[ index ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ index ];\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thandled.push( index );\n\t\t}\n\t}\n\n\tlength = handled.length;\n\tif ( length ) {\n\t\tdataShow = jQuery._data( elem, \"fxshow\" ) || jQuery._data( elem, \"fxshow\", {} );\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery.removeData( elem, \"fxshow\", true );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( index = 0 ; index < length ; index++ ) {\n\t\t\tprop = handled[ index ];\n\t\t\ttween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );\n\t\t\torig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing any value as a 4th parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, false, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Remove in 2.0 - this supports IE8's panic based approach\n// to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ||\n\t\t\t// special check for .toggle( handler, handler, ... )\n\t\t\t( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations resolve immediately\n\t\t\t\tif ( empty ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) && !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\nvar rroot = /^(?:body|html)$/i;\n\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tif ( (body = doc.body) === elem ) {\n\t\treturn jQuery.offset.bodyOffset( elem );\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\tclientTop  = docElem.clientTop  || body.clientTop  || 0;\n\tclientLeft = docElem.clientLeft || body.clientLeft || 0;\n\tscrollTop  = win.pageYOffset || docElem.scrollTop;\n\tscrollLeft = win.pageXOffset || docElem.scrollLeft;\n\treturn {\n\t\ttop: box.top  + scrollTop  - clientTop,\n\t\tleft: box.left + scrollLeft - clientLeft\n\t};\n};\n\njQuery.offset = {\n\n\tbodyOffset: function( body ) {\n\t\tvar top = body.offsetTop,\n\t\t\tleft = body.offsetLeft;\n\n\t\tif ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {\n\t\t\ttop  += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n\t\t\tleft += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t},\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[0] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar elem = this[0],\n\n\t\t// Get *real* offsetParent\n\t\toffsetParent = this.offsetParent(),\n\n\t\t// Get correct offsets\n\t\toffset       = this.offset(),\n\t\tparentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\n\t\t// Subtract element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\toffset.top  -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n\t\toffset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\n\t\t// Add offsetParent borders\n\t\tparentOffset.top  += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n\t\tparentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\n\t\t// Subtract the two offsets\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top,\n\t\t\tleft: offset.left - parentOffset.left\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || document.body;\n\t\t\twhile ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || document.body;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\t top ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, value, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n\n// Expose jQuery as an AMD module, but only for AMD loaders that\n// understand the issues with loading multiple versions of jQuery\n// in a page that all might call define(). The loader will indicate\n// they have special allowances for multiple jQuery versions by\n// specifying define.amd.jQuery = true. Register as a named module,\n// since jQuery can be concatenated with other files that may use define,\n// but not use a proper concatenation script that understands anonymous\n// AMD modules. A named AMD is safest and most robust way to register.\n// Lowercase jquery is used because AMD module names are derived from\n// file names, and jQuery is normally delivered in a lowercase file name.\n// Do this after creating the global so that if an AMD module wants to call\n// noConflict to hide this version of jQuery, it will work.\nif ( typeof define === \"function\" && define.amd && define.amd.jQuery ) {\n\tdefine( \"jquery\", [], function () { return jQuery; } );\n}\n\n})( window );\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery-ui-1.8.24.js",
    "content": "/*! jQuery UI - v1.8.24 - 2012-09-28\n* https://github.com/jquery/jquery-ui\n* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.effects.core.js, jquery.effects.blind.js, jquery.effects.bounce.js, jquery.effects.clip.js, jquery.effects.drop.js, jquery.effects.explode.js, jquery.effects.fade.js, jquery.effects.fold.js, jquery.effects.highlight.js, jquery.effects.pulsate.js, jquery.effects.scale.js, jquery.effects.shake.js, jquery.effects.slide.js, jquery.effects.transfer.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.tabs.js\n* Copyright (c) 2012 AUTHORS.txt; Licensed MIT */\n\n(function( $, undefined ) {\n\n// prevent duplicate loading\n// this is only a problem because we proxy existing functions\n// and we don't want to double proxy them\n$.ui = $.ui || {};\nif ( $.ui.version ) {\n\treturn;\n}\n\n$.extend( $.ui, {\n\tversion: \"1.8.24\",\n\n\tkeyCode: {\n\t\tALT: 18,\n\t\tBACKSPACE: 8,\n\t\tCAPS_LOCK: 20,\n\t\tCOMMA: 188,\n\t\tCOMMAND: 91,\n\t\tCOMMAND_LEFT: 91, // COMMAND\n\t\tCOMMAND_RIGHT: 93,\n\t\tCONTROL: 17,\n\t\tDELETE: 46,\n\t\tDOWN: 40,\n\t\tEND: 35,\n\t\tENTER: 13,\n\t\tESCAPE: 27,\n\t\tHOME: 36,\n\t\tINSERT: 45,\n\t\tLEFT: 37,\n\t\tMENU: 93, // COMMAND_RIGHT\n\t\tNUMPAD_ADD: 107,\n\t\tNUMPAD_DECIMAL: 110,\n\t\tNUMPAD_DIVIDE: 111,\n\t\tNUMPAD_ENTER: 108,\n\t\tNUMPAD_MULTIPLY: 106,\n\t\tNUMPAD_SUBTRACT: 109,\n\t\tPAGE_DOWN: 34,\n\t\tPAGE_UP: 33,\n\t\tPERIOD: 190,\n\t\tRIGHT: 39,\n\t\tSHIFT: 16,\n\t\tSPACE: 32,\n\t\tTAB: 9,\n\t\tUP: 38,\n\t\tWINDOWS: 91 // COMMAND\n\t}\n});\n\n// plugins\n$.fn.extend({\n\tpropAttr: $.fn.prop || $.fn.attr,\n\n\t_focus: $.fn.focus,\n\tfocus: function( delay, fn ) {\n\t\treturn typeof delay === \"number\" ?\n\t\t\tthis.each(function() {\n\t\t\t\tvar elem = this;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t$( elem ).focus();\n\t\t\t\t\tif ( fn ) {\n\t\t\t\t\t\tfn.call( elem );\n\t\t\t\t\t}\n\t\t\t\t}, delay );\n\t\t\t}) :\n\t\t\tthis._focus.apply( this, arguments );\n\t},\n\n\tscrollParent: function() {\n\t\tvar scrollParent;\n\t\tif (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {\n\t\t\tscrollParent = this.parents().filter(function() {\n\t\t\t\treturn (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));\n\t\t\t}).eq(0);\n\t\t} else {\n\t\t\tscrollParent = this.parents().filter(function() {\n\t\t\t\treturn (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));\n\t\t\t}).eq(0);\n\t\t}\n\n\t\treturn (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;\n\t},\n\n\tzIndex: function( zIndex ) {\n\t\tif ( zIndex !== undefined ) {\n\t\t\treturn this.css( \"zIndex\", zIndex );\n\t\t}\n\n\t\tif ( this.length ) {\n\t\t\tvar elem = $( this[ 0 ] ), position, value;\n\t\t\twhile ( elem.length && elem[ 0 ] !== document ) {\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t\t\t// This makes behavior of this function consistent across browsers\n\t\t\t\t// WebKit always returns auto if the element is positioned\n\t\t\t\tposition = elem.css( \"position\" );\n\t\t\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t\t\t// other browsers return a string\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telem = elem.parent();\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t},\n\n\tdisableSelection: function() {\n\t\treturn this.bind( ( $.support.selectstart ? \"selectstart\" : \"mousedown\" ) +\n\t\t\t\".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t},\n\n\tenableSelection: function() {\n\t\treturn this.unbind( \".ui-disableSelection\" );\n\t}\n});\n\n// support: jQuery <1.8\nif ( !$( \"<a>\" ).outerWidth( 1 ).jquery ) {\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.curCSS( elem, \"padding\" + this, true) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.curCSS( elem, \"border\" + this + \"Width\", true) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.curCSS( elem, \"margin\" + this, true) ) || 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\n\t\t\t});\n\t\t};\n\n\t\t$.fn[ \"outer\" + name] = function( size, margin ) {\n\t\t\tif ( typeof size !== \"number\" ) {\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\t$( this).css( type, reduce( this, size, true, margin ) + \"px\" );\n\t\t\t});\n\t\t};\n\t});\n}\n\n// selectors\nfunction focusable( element, isTabIndexNotNaN ) {\n\tvar nodeName = element.nodeName.toLowerCase();\n\tif ( \"area\" === nodeName ) {\n\t\tvar map = element.parentNode,\n\t\t\tmapName = map.name,\n\t\t\timg;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap=#\" + mapName + \"]\" )[0];\n\t\treturn !!img && visible( img );\n\t}\n\treturn ( /input|select|textarea|button|object/.test( nodeName )\n\t\t? !element.disabled\n\t\t: \"a\" == nodeName\n\t\t\t? element.href || isTabIndexNotNaN\n\t\t\t: isTabIndexNotNaN)\n\t\t// the element and all of its ancestors must be visible\n\t\t&& visible( element );\n}\n\nfunction visible( element ) {\n\treturn !$( element ).parents().andSelf().filter(function() {\n\t\treturn $.curCSS( this, \"visibility\" ) === \"hidden\" ||\n\t\t\t$.expr.filters.hidden( this );\n\t}).length;\n}\n\n$.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo(function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t}) :\n\t\t// support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t},\n\n\tfocusable: function( element ) {\n\t\treturn focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\n\t},\n\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\tisTabIndexNaN = isNaN( tabIndex );\n\t\treturn ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\n\t}\n});\n\n// support\n$(function() {\n\tvar body = document.body,\n\t\tdiv = body.appendChild( div = document.createElement( \"div\" ) );\n\n\t// access offsetHeight before setting the style to prevent a layout bug\n\t// in IE 9 which causes the elemnt to continue to take up space even\n\t// after it is removed from the DOM (#8026)\n\tdiv.offsetHeight;\n\n\t$.extend( div.style, {\n\t\tminHeight: \"100px\",\n\t\theight: \"auto\",\n\t\tpadding: 0,\n\t\tborderWidth: 0\n\t});\n\n\t$.support.minHeight = div.offsetHeight === 100;\n\t$.support.selectstart = \"onselectstart\" in div;\n\n\t// set display to none to avoid a layout bug in IE\n\t// http://dev.jquery.com/ticket/4014\n\tbody.removeChild( div ).style.display = \"none\";\n});\n\n// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css\nif ( !$.curCSS ) {\n\t$.curCSS = $.css;\n}\n\n\n\n\n\n// deprecated\n$.extend( $.ui, {\n\t// $.ui.plugin is deprecated.  Use the proxy pattern instead.\n\tplugin: {\n\t\tadd: function( module, option, set ) {\n\t\t\tvar proto = $.ui[ module ].prototype;\n\t\t\tfor ( var i in set ) {\n\t\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t\t}\n\t\t},\n\t\tcall: function( instance, name, args ) {\n\t\t\tvar set = instance.plugins[ name ];\n\t\t\tif ( !set || !instance.element[ 0 ].parentNode ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tfor ( var i = 0; i < set.length; i++ ) {\n\t\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\n\t// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()\n\tcontains: function( a, b ) {\n\t\treturn document.compareDocumentPosition ?\n\t\t\ta.compareDocumentPosition( b ) & 16 :\n\t\t\ta !== b && a.contains( b );\n\t},\n\t\n\t// only used by resizable\n\thasScroll: function( el, a ) {\n\t\n\t\t//If overflow is hidden, the element might have extra content, but the user wants to hide it\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\") {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\t\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\t\n\t// these are odd functions, fix the API or move into individual plugins\n\tisOverAxis: function( x, reference, size ) {\n\t\t//Determines when x coordinate is over \"b\" element axis\n\t\treturn ( x > reference ) && ( x < ( reference + size ) );\n\t},\n\tisOver: function( y, x, top, left, height, width ) {\n\t\t//Determines when x, y coordinates is over \"b\" element\n\t\treturn $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );\n\t}\n});\n\n})( jQuery );\n\n(function( $, undefined ) {\n\n// jQuery 1.4+\nif ( $.cleanData ) {\n\tvar _cleanData = $.cleanData;\n\t$.cleanData = function( elems ) {\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\ttry {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t} catch( e ) {}\n\t\t}\n\t\t_cleanData( elems );\n\t};\n} else {\n\tvar _remove = $.fn.remove;\n\t$.fn.remove = function( selector, keepData ) {\n\t\treturn this.each(function() {\n\t\t\tif ( !keepData ) {\n\t\t\t\tif ( !selector || $.filter( selector, [ this ] ).length ) {\n\t\t\t\t\t$( \"*\", this ).add( [ this ] ).each(function() {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$( this ).triggerHandler( \"remove\" );\n\t\t\t\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t\t\t\t} catch( e ) {}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _remove.call( $(this), selector, keepData );\n\t\t});\n\t};\n}\n\n$.widget = function( name, base, prototype ) {\n\tvar namespace = name.split( \".\" )[ 0 ],\n\t\tfullName;\n\tname = name.split( \".\" )[ 1 ];\n\tfullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\t// create selector for plugin\n\t$.expr[ \":\" ][ fullName ] = function( elem ) {\n\t\treturn !!$.data( elem, name );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\t$[ namespace ][ name ] = function( options, element ) {\n\t\t// allow instantiation without initializing for simple inheritance\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\tvar basePrototype = new base();\n\t// we need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n//\t$.each( basePrototype, function( key, val ) {\n//\t\tif ( $.isPlainObject(val) ) {\n//\t\t\tbasePrototype[ key ] = $.extend( {}, val );\n//\t\t}\n//\t});\n\tbasePrototype.options = $.extend( true, {}, basePrototype.options );\n\t$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,\n\t\twidgetBaseClass: fullName\n\t}, prototype );\n\n\t$.widget.bridge( name, $[ namespace ][ name ] );\n};\n\n$.widget.bridge = function( name, object ) {\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\",\n\t\t\targs = Array.prototype.slice.call( arguments, 1 ),\n\t\t\treturnValue = this;\n\n\t\t// allow multiple hashes to be passed on init\n\t\toptions = !isMethodCall && args.length ?\n\t\t\t$.extend.apply( null, [ true, options ].concat(args) ) :\n\t\t\toptions;\n\n\t\t// prevent calls to internal methods\n\t\tif ( isMethodCall && options.charAt( 0 ) === \"_\" ) {\n\t\t\treturn returnValue;\n\t\t}\n\n\t\tif ( isMethodCall ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar instance = $.data( this, name ),\n\t\t\t\t\tmethodValue = instance && $.isFunction( instance[options] ) ?\n\t\t\t\t\t\tinstance[ options ].apply( instance, args ) :\n\t\t\t\t\t\tinstance;\n\t\t\t\t// TODO: add this back in 1.9 and use $.error() (see #5972)\n//\t\t\t\tif ( !instance ) {\n//\t\t\t\t\tthrow \"cannot call methods on \" + name + \" prior to initialization; \" +\n//\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\";\n//\t\t\t\t}\n//\t\t\t\tif ( !$.isFunction( instance[options] ) ) {\n//\t\t\t\t\tthrow \"no such method '\" + options + \"' for \" + name + \" widget instance\";\n//\t\t\t\t}\n//\t\t\t\tvar methodValue = instance[ options ].apply( instance, args );\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\treturnValue = methodValue;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis.each(function() {\n\t\t\t\tvar instance = $.data( this, name );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} )._init();\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, name, new object( options, this ) );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( options, element ) {\n\t// allow instantiation without initializing for simple inheritance\n\tif ( arguments.length ) {\n\t\tthis._createWidget( options, element );\n\t}\n};\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\toptions: {\n\t\tdisabled: false\n\t},\n\t_createWidget: function( options, element ) {\n\t\t// $.widget.bridge stores the plugin instance, but we do it anyway\n\t\t// so that it's stored even before the _create function runs\n\t\t$.data( element, this.widgetName, this );\n\t\tthis.element = $( element );\n\t\tthis.options = $.extend( true, {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tvar self = this;\n\t\tthis.element.bind( \"remove.\" + this.widgetName, function() {\n\t\t\tself.destroy();\n\t\t});\n\n\t\tthis._create();\n\t\tthis._trigger( \"create\" );\n\t\tthis._init();\n\t},\n\t_getCreateOptions: function() {\n\t\treturn $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];\n\t},\n\t_create: function() {},\n\t_init: function() {},\n\n\tdestroy: function() {\n\t\tthis.element\n\t\t\t.unbind( \".\" + this.widgetName )\n\t\t\t.removeData( this.widgetName );\n\t\tthis.widget()\n\t\t\t.unbind( \".\" + this.widgetName )\n\t\t\t.removeAttr( \"aria-disabled\" )\n\t\t\t.removeClass(\n\t\t\t\tthis.widgetBaseClass + \"-disabled \" +\n\t\t\t\t\"ui-state-disabled\" );\n\t},\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\n\t\tif ( arguments.length === 0 ) {\n\t\t\t// don't return a reference to the internal hash\n\t\t\treturn $.extend( {}, this.options );\n\t\t}\n\n\t\tif  (typeof key === \"string\" ) {\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn this.options[ key ];\n\t\t\t}\n\t\t\toptions = {};\n\t\t\toptions[ key ] = value;\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\t_setOptions: function( options ) {\n\t\tvar self = this;\n\t\t$.each( options, function( key, value ) {\n\t\t\tself._setOption( key, value );\n\t\t});\n\n\t\treturn this;\n\t},\n\t_setOption: function( key, value ) {\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.widget()\n\t\t\t\t[ value ? \"addClass\" : \"removeClass\"](\n\t\t\t\t\tthis.widgetBaseClass + \"-disabled\" + \" \" +\n\t\t\t\t\t\"ui-state-disabled\" )\n\t\t\t\t.attr( \"aria-disabled\", value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tenable: function() {\n\t\treturn this._setOption( \"disabled\", false );\n\t},\n\tdisable: function() {\n\t\treturn this._setOption( \"disabled\", true );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig,\n\t\t\tcallback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\t\t// the original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\n\t\treturn !( $.isFunction(callback) &&\n\t\t\tcallback.call( this.element[0], event, data ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n})( jQuery );\n\n(function( $, undefined ) {\n\nvar mouseHandled = false;\n$( document ).mouseup( function( e ) {\n\tmouseHandled = false;\n});\n\n$.widget(\"ui.mouse\", {\n\toptions: {\n\t\tcancel: ':input,option',\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar self = this;\n\n\t\tthis.element\n\t\t\t.bind('mousedown.'+this.widgetName, function(event) {\n\t\t\t\treturn self._mouseDown(event);\n\t\t\t})\n\t\t\t.bind('click.'+this.widgetName, function(event) {\n\t\t\t\tif (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {\n\t\t\t\t    $.removeData(event.target, self.widgetName + '.preventClickEvent');\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.unbind('.'+this.widgetName);\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\t$(document)\n\t\t\t\t.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)\n\t\t\t\t.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);\n\t\t}\n\t},\n\n\t_mouseDown: function(event) {\n\t\t// don't let more than one widget handle mouseStart\n\t\tif( mouseHandled ) { return };\n\n\t\t// we may have missed mouseup (out of window)\n\t\t(this._mouseStarted && this._mouseUp(event));\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar self = this,\n\t\t\tbtnIsLeft = (event.which == 1),\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = (typeof this.options.cancel == \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);\n\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif (!this.mouseDelayMet) {\n\t\t\tthis._mouseDelayTimer = setTimeout(function() {\n\t\t\t\tself.mouseDelayMet = true;\n\t\t\t}, this.options.delay);\n\t\t}\n\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\tthis._mouseStarted = (this._mouseStart(event) !== false);\n\t\t\tif (!this._mouseStarted) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {\n\t\t\t$.removeData(event.target, this.widgetName + '.preventClickEvent');\n\t\t}\n\n\t\t// these delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function(event) {\n\t\t\treturn self._mouseMove(event);\n\t\t};\n\t\tthis._mouseUpDelegate = function(event) {\n\t\t\treturn self._mouseUp(event);\n\t\t};\n\t\t$(document)\n\t\t\t.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)\n\t\t\t.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);\n\n\t\tevent.preventDefault();\n\t\t\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function(event) {\n\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\tif ($.browser.msie && !(document.documentMode >= 9) && !event.button) {\n\t\t\treturn this._mouseUp(event);\n\t\t}\n\n\t\tif (this._mouseStarted) {\n\t\t\tthis._mouseDrag(event);\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t(this._mouseStart(this._mouseDownEvent, event) !== false);\n\t\t\t(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function(event) {\n\t\t$(document)\n\t\t\t.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)\n\t\t\t.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);\n\n\t\tif (this._mouseStarted) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif (event.target == this._mouseDownEvent.target) {\n\t\t\t    $.data(event.target, this.widgetName + '.preventClickEvent', true);\n\t\t\t}\n\n\t\t\tthis._mouseStop(event);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseDistanceMet: function(event) {\n\t\treturn (Math.max(\n\t\t\t\tMath.abs(this._mouseDownEvent.pageX - event.pageX),\n\t\t\t\tMath.abs(this._mouseDownEvent.pageY - event.pageY)\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function(event) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function(event) {},\n\t_mouseDrag: function(event) {},\n\t_mouseStop: function(event) {},\n\t_mouseCapture: function(event) { return true; }\n});\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.widget(\"ui.draggable\", $.ui.mouse, {\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false\n\t},\n\t_create: function() {\n\n\t\tif (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css(\"position\")))\n\t\t\tthis.element[0].style.position = 'relative';\n\n\t\t(this.options.addClasses && this.element.addClass(\"ui-draggable\"));\n\t\t(this.options.disabled && this.element.addClass(\"ui-draggable-disabled\"));\n\n\t\tthis._mouseInit();\n\n\t},\n\n\tdestroy: function() {\n\t\tif(!this.element.data('draggable')) return;\n\t\tthis.element\n\t\t\t.removeData(\"draggable\")\n\t\t\t.unbind(\".draggable\")\n\t\t\t.removeClass(\"ui-draggable\"\n\t\t\t\t+ \" ui-draggable-dragging\"\n\t\t\t\t+ \" ui-draggable-disabled\");\n\t\tthis._mouseDestroy();\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function(event) {\n\n\t\tvar o = this.options;\n\n\t\t// among others, prevent a drag on a resizable-handle\n\t\tif (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle'))\n\t\t\treturn false;\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle(event);\n\t\tif (!this.handle)\n\t\t\treturn false;\n\t\t\n\t\tif ( o.iframeFix ) {\n\t\t\t$(o.iframeFix === true ? \"iframe\" : o.iframeFix).each(function() {\n\t\t\t\t$('<div class=\"ui-draggable-iframeFix\" style=\"background: #fff;\"></div>')\n\t\t\t\t.css({\n\t\t\t\t\twidth: this.offsetWidth+\"px\", height: this.offsetHeight+\"px\",\n\t\t\t\t\tposition: \"absolute\", opacity: \"0.001\", zIndex: 1000\n\t\t\t\t})\n\t\t\t\t.css($(this).offset())\n\t\t\t\t.appendTo(\"body\");\n\t\t\t});\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function(event) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper(event);\n\n\t\tthis.helper.addClass(\"ui-draggable-dragging\");\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif($.ui.ddmanager)\n\t\t\t$.ui.ddmanager.current = this;\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css(\"position\");\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.positionAbs = this.element.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend(this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper\n\t\t});\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition(event);\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\n\n\t\t//Set a containment if given in the options\n\t\tif(o.containment)\n\t\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif(this._trigger(\"start\", event) === false) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ($.ui.ddmanager && !o.dropBehaviour)\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\n\t\t\n\t\tthis._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position\n\t\t\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)\n\t\tif ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);\n\t\t\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function(event, noPropagation) {\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition(event);\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif (!noPropagation) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif(this._trigger('drag', event, ui) === false) {\n\t\t\t\tthis._mouseUp({});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tif(!this.options.axis || this.options.axis != \"y\") this.helper[0].style.left = this.position.left+'px';\n\t\tif(!this.options.axis || this.options.axis != \"x\") this.helper[0].style.top = this.position.top+'px';\n\t\tif($.ui.ddmanager) $.ui.ddmanager.drag(this, event);\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar dropped = false;\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour)\n\t\t\tdropped = $.ui.ddmanager.drop(this, event);\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif(this.dropped) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\t\t\n\t\t//if the original element is no longer in the DOM don't bother to continue (see #8269)\n\t\tvar element = this.element[0], elementInDom = false;\n\t\twhile ( element && (element = element.parentNode) ) {\n\t\t\tif (element == document ) {\n\t\t\t\telementInDom = true;\n\t\t\t}\n\t\t}\n\t\tif ( !elementInDom && this.options.helper === \"original\" )\n\t\t\treturn false;\n\n\t\tif((this.options.revert == \"invalid\" && !dropped) || (this.options.revert == \"valid\" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {\n\t\t\tvar self = this;\n\t\t\t$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {\n\t\t\t\tif(self._trigger(\"stop\", event) !== false) {\n\t\t\t\t\tself._clear();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(this._trigger(\"stop\", event) !== false) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\n\t_mouseUp: function(event) {\n\t\t//Remove frame helpers\n\t\t$(\"div.ui-draggable-iframeFix\").each(function() { \n\t\t\tthis.parentNode.removeChild(this); \n\t\t});\n\t\t\n\t\t//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)\n\t\tif( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);\n\t\t\n\t\treturn $.ui.mouse.prototype._mouseUp.call(this, event);\n\t},\n\t\n\tcancel: function() {\n\t\t\n\t\tif(this.helper.is(\".ui-draggable-dragging\")) {\n\t\t\tthis._mouseUp({});\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\t\t\n\t\treturn this;\n\t\t\n\t},\n\n\t_getHandle: function(event) {\n\n\t\tvar handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;\n\t\t$(this.options.handle, this.element)\n\t\t\t.find(\"*\")\n\t\t\t.andSelf()\n\t\t\t.each(function() {\n\t\t\t\tif(this == event.target) handle = true;\n\t\t\t});\n\n\t\treturn handle;\n\n\t},\n\n\t_createHelper: function(event) {\n\n\t\tvar o = this.options;\n\t\tvar helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);\n\n\t\tif(!helper.parents('body').length)\n\t\t\thelper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));\n\n\t\tif(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css(\"position\")))\n\t\t\thelper.css(\"position\", \"absolute\");\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function(obj) {\n\t\tif (typeof obj == 'string') {\n\t\t\tobj = obj.split(' ');\n\t\t}\n\t\tif ($.isArray(obj)) {\n\t\t\tobj = {left: +obj[0], top: +obj[1] || 0};\n\t\t}\n\t\tif ('left' in obj) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ('right' in obj) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ('top' in obj) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ('bottom' in obj) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\n\t\t//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\n\t\tif(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information\n\t\t|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix\n\t\t\tpo = { top: 0, left: 0 };\n\n\t\treturn {\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"),10) || 0),\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"),10) || 0)\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif(this.cssPosition == \"relative\") {\n\t\t\tvar p = this.element.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - (parseInt(this.helper.css(\"top\"),10) || 0) + this.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - (parseInt(this.helper.css(\"left\"),10) || 0) + this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: (parseInt(this.element.css(\"marginLeft\"),10) || 0),\n\t\t\ttop: (parseInt(this.element.css(\"marginTop\"),10) || 0),\n\t\t\tright: (parseInt(this.element.css(\"marginRight\"),10) || 0),\n\t\t\tbottom: (parseInt(this.element.css(\"marginBottom\"),10) || 0)\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar o = this.options;\n\t\tif(o.containment == 'parent') o.containment = this.helper[0].parentNode;\n\t\tif(o.containment == 'document' || o.containment == 'window') this.containment = [\n\t\t\to.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\to.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t(o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,\n\t\t\t(o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top\n\t\t];\n\n\t\tif(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {\n\t\t        var c = $(o.containment);\n\t\t\tvar ce = c[0]; if(!ce) return;\n\t\t\tvar co = c.offset();\n\t\t\tvar over = ($(ce).css(\"overflow\") != 'hidden');\n\n\t\t\tthis.containment = [\n\t\t\t\t(parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingLeft\"),10) || 0),\n\t\t\t\t(parseInt($(ce).css(\"borderTopWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingTop\"),10) || 0),\n\t\t\t\t(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingRight\"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,\n\t\t\t\t(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingBottom\"),10) || 0) - this.helperProportions.height - this.margins.top  - this.margins.bottom\n\t\t\t];\n\t\t\tthis.relative_container = c;\n\n\t\t} else if(o.containment.constructor == Array) {\n\t\t\tthis.containment = o.containment;\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function(d, pos) {\n\n\t\tif(!pos) pos = this.position;\n\t\tvar mod = d == \"absolute\" ? 1 : -1;\n\t\tvar o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpos.top\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t+ this.offset.relative.top * mod\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t+ this.offset.parent.top * mod\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpos.left\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t+ this.offset.relative.left * mod\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t+ this.offset.parent.left * mod\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t- ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function(event) {\n\n\t\tvar o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\t\tvar pageX = event.pageX;\n\t\tvar pageY = event.pageY;\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif(this.originalPosition) { //If we are not dragging yet, we won't check for options\n\t\t         var containment;\n\t\t         if(this.containment) {\n\t\t\t\t if (this.relative_container){\n\t\t\t\t     var co = this.relative_container.offset();\n\t\t\t\t     containment = [ this.containment[0] + co.left,\n\t\t\t\t\t\t     this.containment[1] + co.top,\n\t\t\t\t\t\t     this.containment[2] + co.left,\n\t\t\t\t\t\t     this.containment[3] + co.top ];\n\t\t\t\t }\n\t\t\t\t else {\n\t\t\t\t     containment = this.containment;\n\t\t\t\t }\n\n\t\t\t\tif(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;\n\t\t\t\tif(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;\n\t\t\t\tif(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;\n\t\t\t\tif(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;\n\t\t\t}\n\n\t\t\tif(o.grid) {\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)\n\t\t\t\tvar top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;\n\t\t\t\tpageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\n\n\t\t\t\tvar left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;\n\t\t\t\tpageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpageY\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t- this.offset.click.top\t\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\t- this.offset.relative.top\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t- this.offset.parent.top\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpageX\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t- this.offset.click.left\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\t- this.offset.relative.left\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t- this.offset.parent.left\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t+ ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis.helper.removeClass(\"ui-draggable-dragging\");\n\t\tif(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();\n\t\t//if($.ui.ddmanager) $.ui.ddmanager.current = null;\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function(type, event, ui) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call(this, type, [event, ui]);\n\t\tif(type == \"drag\") this.positionAbs = this._convertPositionTo(\"absolute\"); //The absolute position has to be recalculated after plugins\n\t\treturn $.Widget.prototype._trigger.call(this, type, event, ui);\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function(event) {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n});\n\n$.extend($.ui.draggable, {\n\tversion: \"1.8.24\"\n});\n\n$.ui.plugin.add(\"draggable\", \"connectToSortable\", {\n\tstart: function(event, ui) {\n\n\t\tvar inst = $(this).data(\"draggable\"), o = inst.options,\n\t\t\tuiSortable = $.extend({}, ui, { item: inst.element });\n\t\tinst.sortables = [];\n\t\t$(o.connectToSortable).each(function() {\n\t\t\tvar sortable = $.data(this, 'sortable');\n\t\t\tif (sortable && !sortable.options.disabled) {\n\t\t\t\tinst.sortables.push({\n\t\t\t\t\tinstance: sortable,\n\t\t\t\t\tshouldRevert: sortable.options.revert\n\t\t\t\t});\n\t\t\t\tsortable.refreshPositions();\t// Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).\n\t\t\t\tsortable._trigger(\"activate\", event, uiSortable);\n\t\t\t}\n\t\t});\n\n\t},\n\tstop: function(event, ui) {\n\n\t\t//If we are still over the sortable, we fake the stop event of the sortable, but also remove helper\n\t\tvar inst = $(this).data(\"draggable\"),\n\t\t\tuiSortable = $.extend({}, ui, { item: inst.element });\n\n\t\t$.each(inst.sortables, function() {\n\t\t\tif(this.instance.isOver) {\n\n\t\t\t\tthis.instance.isOver = 0;\n\n\t\t\t\tinst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance\n\t\t\t\tthis.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)\n\n\t\t\t\t//The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'\n\t\t\t\tif(this.shouldRevert) this.instance.options.revert = true;\n\n\t\t\t\t//Trigger the stop of the sortable\n\t\t\t\tthis.instance._mouseStop(event);\n\n\t\t\t\tthis.instance.options.helper = this.instance.options._helper;\n\n\t\t\t\t//If the helper has been the original item, restore properties in the sortable\n\t\t\t\tif(inst.options.helper == 'original')\n\t\t\t\t\tthis.instance.currentItem.css({ top: 'auto', left: 'auto' });\n\n\t\t\t} else {\n\t\t\t\tthis.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance\n\t\t\t\tthis.instance._trigger(\"deactivate\", event, uiSortable);\n\t\t\t}\n\n\t\t});\n\n\t},\n\tdrag: function(event, ui) {\n\n\t\tvar inst = $(this).data(\"draggable\"), self = this;\n\n\t\tvar checkPos = function(o) {\n\t\t\tvar dyClick = this.offset.click.top, dxClick = this.offset.click.left;\n\t\t\tvar helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;\n\t\t\tvar itemHeight = o.height, itemWidth = o.width;\n\t\t\tvar itemTop = o.top, itemLeft = o.left;\n\n\t\t\treturn $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);\n\t\t};\n\n\t\t$.each(inst.sortables, function(i) {\n\t\t\t\n\t\t\t//Copy over some variables to allow calling the sortable's native _intersectsWith\n\t\t\tthis.instance.positionAbs = inst.positionAbs;\n\t\t\tthis.instance.helperProportions = inst.helperProportions;\n\t\t\tthis.instance.offset.click = inst.offset.click;\n\t\t\t\n\t\t\tif(this.instance._intersectsWith(this.instance.containerCache)) {\n\n\t\t\t\t//If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once\n\t\t\t\tif(!this.instance.isOver) {\n\n\t\t\t\t\tthis.instance.isOver = 1;\n\t\t\t\t\t//Now we fake the start of dragging for the sortable instance,\n\t\t\t\t\t//by cloning the list group item, appending it to the sortable and using it as inst.currentItem\n\t\t\t\t\t//We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)\n\t\t\t\t\tthis.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data(\"sortable-item\", true);\n\t\t\t\t\tthis.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it\n\t\t\t\t\tthis.instance.options.helper = function() { return ui.helper[0]; };\n\n\t\t\t\t\tevent.target = this.instance.currentItem[0];\n\t\t\t\t\tthis.instance._mouseCapture(event, true);\n\t\t\t\t\tthis.instance._mouseStart(event, true, true);\n\n\t\t\t\t\t//Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes\n\t\t\t\t\tthis.instance.offset.click.top = inst.offset.click.top;\n\t\t\t\t\tthis.instance.offset.click.left = inst.offset.click.left;\n\t\t\t\t\tthis.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;\n\t\t\t\t\tthis.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;\n\n\t\t\t\t\tinst._trigger(\"toSortable\", event);\n\t\t\t\t\tinst.dropped = this.instance.element; //draggable revert needs that\n\t\t\t\t\t//hack so receive/update callbacks work (mostly)\n\t\t\t\t\tinst.currentItem = inst.element;\n\t\t\t\t\tthis.instance.fromOutside = inst;\n\n\t\t\t\t}\n\n\t\t\t\t//Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable\n\t\t\t\tif(this.instance.currentItem) this.instance._mouseDrag(event);\n\n\t\t\t} else {\n\n\t\t\t\t//If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t//we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval\n\t\t\t\tif(this.instance.isOver) {\n\n\t\t\t\t\tthis.instance.isOver = 0;\n\t\t\t\t\tthis.instance.cancelHelperRemoval = true;\n\t\t\t\t\t\n\t\t\t\t\t//Prevent reverting on this forced stop\n\t\t\t\t\tthis.instance.options.revert = false;\n\t\t\t\t\t\n\t\t\t\t\t// The out event needs to be triggered independently\n\t\t\t\t\tthis.instance._trigger('out', event, this.instance._uiHash(this.instance));\n\t\t\t\t\t\n\t\t\t\t\tthis.instance._mouseStop(event, true);\n\t\t\t\t\tthis.instance.options.helper = this.instance.options._helper;\n\n\t\t\t\t\t//Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size\n\t\t\t\t\tthis.instance.currentItem.remove();\n\t\t\t\t\tif(this.instance.placeholder) this.instance.placeholder.remove();\n\n\t\t\t\t\tinst._trigger(\"fromSortable\", event);\n\t\t\t\t\tinst.dropped = false; //draggable revert needs that\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t});\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"cursor\", {\n\tstart: function(event, ui) {\n\t\tvar t = $('body'), o = $(this).data('draggable').options;\n\t\tif (t.css(\"cursor\")) o._cursor = t.css(\"cursor\");\n\t\tt.css(\"cursor\", o.cursor);\n\t},\n\tstop: function(event, ui) {\n\t\tvar o = $(this).data('draggable').options;\n\t\tif (o._cursor) $('body').css(\"cursor\", o._cursor);\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"opacity\", {\n\tstart: function(event, ui) {\n\t\tvar t = $(ui.helper), o = $(this).data('draggable').options;\n\t\tif(t.css(\"opacity\")) o._opacity = t.css(\"opacity\");\n\t\tt.css('opacity', o.opacity);\n\t},\n\tstop: function(event, ui) {\n\t\tvar o = $(this).data('draggable').options;\n\t\tif(o._opacity) $(ui.helper).css('opacity', o._opacity);\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"scroll\", {\n\tstart: function(event, ui) {\n\t\tvar i = $(this).data(\"draggable\");\n\t\tif(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();\n\t},\n\tdrag: function(event, ui) {\n\n\t\tvar i = $(this).data(\"draggable\"), o = i.options, scrolled = false;\n\n\t\tif(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {\n\n\t\t\tif(!o.axis || o.axis != 'x') {\n\t\t\t\tif((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)\n\t\t\t\t\ti.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;\n\t\t\t\telse if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)\n\t\t\t\t\ti.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif(!o.axis || o.axis != 'y') {\n\t\t\t\tif((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)\n\t\t\t\t\ti.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;\n\t\t\t\telse if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)\n\t\t\t\t\ti.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif(!o.axis || o.axis != 'x') {\n\t\t\t\tif(event.pageY - $(document).scrollTop() < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);\n\t\t\t\telse if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);\n\t\t\t}\n\n\t\t\tif(!o.axis || o.axis != 'y') {\n\t\t\t\tif(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);\n\t\t\t\telse if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);\n\t\t\t}\n\n\t\t}\n\n\t\tif(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)\n\t\t\t$.ui.ddmanager.prepareOffsets(i, event);\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"snap\", {\n\tstart: function(event, ui) {\n\n\t\tvar i = $(this).data(\"draggable\"), o = i.options;\n\t\ti.snapElements = [];\n\n\t\t$(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() {\n\t\t\tvar $t = $(this); var $o = $t.offset();\n\t\t\tif(this != i.element[0]) i.snapElements.push({\n\t\t\t\titem: this,\n\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t});\n\t\t});\n\n\t},\n\tdrag: function(event, ui) {\n\n\t\tvar inst = $(this).data(\"draggable\"), o = inst.options;\n\t\tvar d = o.snapTolerance;\n\n\t\tvar x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor (var i = inst.snapElements.length - 1; i >= 0; i--){\n\n\t\t\tvar l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,\n\t\t\t\tt = inst.snapElements[i].top, b = t + inst.snapElements[i].height;\n\n\t\t\t//Yes, I know, this is insane ;)\n\t\t\tif(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {\n\t\t\t\tif(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\n\t\t\t\tinst.snapElements[i].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif(o.snapMode != 'inner') {\n\t\t\t\tvar ts = Math.abs(t - y2) <= d;\n\t\t\t\tvar bs = Math.abs(b - y1) <= d;\n\t\t\t\tvar ls = Math.abs(l - x2) <= d;\n\t\t\t\tvar rs = Math.abs(r - x1) <= d;\n\t\t\t\tif(ts) ui.position.top = inst._convertPositionTo(\"relative\", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;\n\t\t\t\tif(bs) ui.position.top = inst._convertPositionTo(\"relative\", { top: b, left: 0 }).top - inst.margins.top;\n\t\t\t\tif(ls) ui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;\n\t\t\t\tif(rs) ui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r }).left - inst.margins.left;\n\t\t\t}\n\n\t\t\tvar first = (ts || bs || ls || rs);\n\n\t\t\tif(o.snapMode != 'outer') {\n\t\t\t\tvar ts = Math.abs(t - y1) <= d;\n\t\t\t\tvar bs = Math.abs(b - y2) <= d;\n\t\t\t\tvar ls = Math.abs(l - x1) <= d;\n\t\t\t\tvar rs = Math.abs(r - x2) <= d;\n\t\t\t\tif(ts) ui.position.top = inst._convertPositionTo(\"relative\", { top: t, left: 0 }).top - inst.margins.top;\n\t\t\t\tif(bs) ui.position.top = inst._convertPositionTo(\"relative\", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;\n\t\t\t\tif(ls) ui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: l }).left - inst.margins.left;\n\t\t\t\tif(rs) ui.position.left = inst._convertPositionTo(\"relative\", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;\n\t\t\t}\n\n\t\t\tif(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))\n\t\t\t\t(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));\n\t\t\tinst.snapElements[i].snapping = (ts || bs || ls || rs || first);\n\n\t\t};\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"stack\", {\n\tstart: function(event, ui) {\n\n\t\tvar o = $(this).data(\"draggable\").options;\n\n\t\tvar group = $.makeArray($(o.stack)).sort(function(a,b) {\n\t\t\treturn (parseInt($(a).css(\"zIndex\"),10) || 0) - (parseInt($(b).css(\"zIndex\"),10) || 0);\n\t\t});\n\t\tif (!group.length) { return; }\n\t\t\n\t\tvar min = parseInt(group[0].style.zIndex) || 0;\n\t\t$(group).each(function(i) {\n\t\t\tthis.style.zIndex = min + i;\n\t\t});\n\n\t\tthis[0].style.zIndex = min + group.length;\n\n\t}\n});\n\n$.ui.plugin.add(\"draggable\", \"zIndex\", {\n\tstart: function(event, ui) {\n\t\tvar t = $(ui.helper), o = $(this).data(\"draggable\").options;\n\t\tif(t.css(\"zIndex\")) o._zIndex = t.css(\"zIndex\");\n\t\tt.css('zIndex', o.zIndex);\n\t},\n\tstop: function(event, ui) {\n\t\tvar o = $(this).data(\"draggable\").options;\n\t\tif(o._zIndex) $(ui.helper).css('zIndex', o._zIndex);\n\t}\n});\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.widget(\"ui.droppable\", {\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: '*',\n\t\tactiveClass: false,\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\thoverClass: false,\n\t\tscope: 'default',\n\t\ttolerance: 'intersect'\n\t},\n\t_create: function() {\n\n\t\tvar o = this.options, accept = o.accept;\n\t\tthis.isover = 0; this.isout = 1;\n\n\t\tthis.accept = $.isFunction(accept) ? accept : function(d) {\n\t\t\treturn d.is(accept);\n\t\t};\n\n\t\t//Store the droppable's proportions\n\t\tthis.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];\n\t\t$.ui.ddmanager.droppables[o.scope].push(this);\n\n\t\t(o.addClasses && this.element.addClass(\"ui-droppable\"));\n\n\t},\n\n\tdestroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[this.options.scope];\n\t\tfor ( var i = 0; i < drop.length; i++ )\n\t\t\tif ( drop[i] == this )\n\t\t\t\tdrop.splice(i, 1);\n\n\t\tthis.element\n\t\t\t.removeClass(\"ui-droppable ui-droppable-disabled\")\n\t\t\t.removeData(\"droppable\")\n\t\t\t.unbind(\".droppable\");\n\n\t\treturn this;\n\t},\n\n\t_setOption: function(key, value) {\n\n\t\tif(key == 'accept') {\n\t\t\tthis.accept = $.isFunction(value) ? value : function(d) {\n\t\t\t\treturn d.is(value);\n\t\t\t};\n\t\t}\n\t\t$.Widget.prototype._setOption.apply(this, arguments);\n\t},\n\n\t_activate: function(event) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif(this.options.activeClass) this.element.addClass(this.options.activeClass);\n\t\t(draggable && this._trigger('activate', event, this.ui(draggable)));\n\t},\n\n\t_deactivate: function(event) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif(this.options.activeClass) this.element.removeClass(this.options.activeClass);\n\t\t(draggable && this._trigger('deactivate', event, this.ui(draggable)));\n\t},\n\n\t_over: function(event) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element\n\n\t\tif (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\tif(this.options.hoverClass) this.element.addClass(this.options.hoverClass);\n\t\t\tthis._trigger('over', event, this.ui(draggable));\n\t\t}\n\n\t},\n\n\t_out: function(event) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\t\tif (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element\n\n\t\tif (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\tif(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);\n\t\t\tthis._trigger('out', event, this.ui(draggable));\n\t\t}\n\n\t},\n\n\t_drop: function(event,custom) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current;\n\t\tif (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element\n\n\t\tvar childrenIntersection = false;\n\t\tthis.element.find(\":data(droppable)\").not(\".ui-draggable-dragging\").each(function() {\n\t\t\tvar inst = $.data(this, 'droppable');\n\t\t\tif(\n\t\t\t\tinst.options.greedy\n\t\t\t\t&& !inst.options.disabled\n\t\t\t\t&& inst.options.scope == draggable.options.scope\n\t\t\t\t&& inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element))\n\t\t\t\t&& $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)\n\t\t\t) { childrenIntersection = true; return false; }\n\t\t});\n\t\tif(childrenIntersection) return false;\n\n\t\tif(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\tif(this.options.activeClass) this.element.removeClass(this.options.activeClass);\n\t\t\tif(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);\n\t\t\tthis._trigger('drop', event, this.ui(draggable));\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function(c) {\n\t\treturn {\n\t\t\tdraggable: (c.currentItem || c.element),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t}\n\n});\n\n$.extend($.ui.droppable, {\n\tversion: \"1.8.24\"\n});\n\n$.ui.intersect = function(draggable, droppable, toleranceMode) {\n\n\tif (!droppable.offset) return false;\n\n\tvar x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,\n\t\ty1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height;\n\tvar l = droppable.offset.left, r = l + droppable.proportions.width,\n\t\tt = droppable.offset.top, b = t + droppable.proportions.height;\n\n\tswitch (toleranceMode) {\n\t\tcase 'fit':\n\t\t\treturn (l <= x1 && x2 <= r\n\t\t\t\t&& t <= y1 && y2 <= b);\n\t\t\tbreak;\n\t\tcase 'intersect':\n\t\t\treturn (l < x1 + (draggable.helperProportions.width / 2) // Right Half\n\t\t\t\t&& x2 - (draggable.helperProportions.width / 2) < r // Left Half\n\t\t\t\t&& t < y1 + (draggable.helperProportions.height / 2) // Bottom Half\n\t\t\t\t&& y2 - (draggable.helperProportions.height / 2) < b ); // Top Half\n\t\t\tbreak;\n\t\tcase 'pointer':\n\t\t\tvar draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left),\n\t\t\t\tdraggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top),\n\t\t\t\tisOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width);\n\t\t\treturn isOver;\n\t\t\tbreak;\n\t\tcase 'touch':\n\t\t\treturn (\n\t\t\t\t\t(y1 >= t && y1 <= b) ||\t// Top edge touching\n\t\t\t\t\t(y2 >= t && y2 <= b) ||\t// Bottom edge touching\n\t\t\t\t\t(y1 < t && y2 > b)\t\t// Surrounded vertically\n\t\t\t\t) && (\n\t\t\t\t\t(x1 >= l && x1 <= r) ||\t// Left edge touching\n\t\t\t\t\t(x2 >= l && x2 <= r) ||\t// Right edge touching\n\t\t\t\t\t(x1 < l && x2 > r)\t\t// Surrounded horizontally\n\t\t\t\t);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn false;\n\t\t\tbreak;\n\t\t}\n\n};\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { 'default': [] },\n\tprepareOffsets: function(t, event) {\n\n\t\tvar m = $.ui.ddmanager.droppables[t.options.scope] || [];\n\t\tvar type = event ? event.type : null; // workaround for #2317\n\t\tvar list = (t.currentItem || t.element).find(\":data(droppable)\").andSelf();\n\n\t\tdroppablesLoop: for (var i = 0; i < m.length; i++) {\n\n\t\t\tif(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue;\t//No disabled and non-accepted\n\t\t\tfor (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item\n\t\t\tm[i].visible = m[i].element.css(\"display\") != \"none\"; if(!m[i].visible) continue; \t\t\t\t\t\t\t\t\t//If the element is not visible, continue\n\n\t\t\tif(type == \"mousedown\") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables\n\n\t\t\tm[i].offset = m[i].element.offset();\n\t\t\tm[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };\n\n\t\t}\n\n\t},\n\tdrop: function(draggable, event) {\n\n\t\tvar dropped = false;\n\t\t$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {\n\n\t\t\tif(!this.options) return;\n\t\t\tif (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance))\n\t\t\t\tdropped = this._drop.call(this, event) || dropped;\n\n\t\t\tif (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {\n\t\t\t\tthis.isout = 1; this.isover = 0;\n\t\t\t\tthis._deactivate.call(this, event);\n\t\t\t}\n\n\t\t});\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\t\t//Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)\n\t\tdraggable.element.parents( \":not(body,html)\" ).bind( \"scroll.droppable\", function() {\n\t\t\tif( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t});\n\t},\n\tdrag: function(draggable, event) {\n\n\t\t//If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.\n\t\tif(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event);\n\n\t\t//Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {\n\n\t\t\tif(this.options.disabled || this.greedyChild || !this.visible) return;\n\t\t\tvar intersects = $.ui.intersect(draggable, this, this.options.tolerance);\n\n\t\t\tvar c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);\n\t\t\tif(!c) return;\n\n\t\t\tvar parentInstance;\n\t\t\tif (this.options.greedy) {\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tvar scope = this.options.scope;\n\t\t\t\tvar parent = this.element.parents(':data(droppable)').filter(function () {\n\t\t\t\t\treturn $.data(this, 'droppable').options.scope === scope;\n\t\t\t\t});\n\n\t\t\t\tif (parent.length) {\n\t\t\t\t\tparentInstance = $.data(parent[0], 'droppable');\n\t\t\t\t\tparentInstance.greedyChild = (c == 'isover' ? 1 : 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we just moved into a greedy child\n\t\t\tif (parentInstance && c == 'isover') {\n\t\t\t\tparentInstance['isover'] = 0;\n\t\t\t\tparentInstance['isout'] = 1;\n\t\t\t\tparentInstance._out.call(parentInstance, event);\n\t\t\t}\n\n\t\t\tthis[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0;\n\t\t\tthis[c == \"isover\" ? \"_over\" : \"_out\"].call(this, event);\n\n\t\t\t// we just moved out of a greedy child\n\t\t\tif (parentInstance && c == 'isout') {\n\t\t\t\tparentInstance['isout'] = 0;\n\t\t\t\tparentInstance['isover'] = 1;\n\t\t\t\tparentInstance._over.call(parentInstance, event);\n\t\t\t}\n\t\t});\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parents( \":not(body,html)\" ).unbind( \"scroll.droppable\" );\n\t\t//Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)\n\t\tif( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );\n\t}\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.widget(\"ui.resizable\", $.ui.mouse, {\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\t\tzIndex: 1000\n\t},\n\t_create: function() {\n\n\t\tvar self = this, o = this.options;\n\t\tthis.element.addClass(\"ui-resizable\");\n\n\t\t$.extend(this, {\n\t\t\t_aspectRatio: !!(o.aspectRatio),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null\n\t\t});\n\n\t\t//Wrap the element if it cannot hold child nodes\n\t\tif(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {\n\n\t\t\t//Create a wrapper element and set the wrapper to the new current internal element\n\t\t\tthis.element.wrap(\n\t\t\t\t$('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({\n\t\t\t\t\tposition: this.element.css('position'),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css('top'),\n\t\t\t\t\tleft: this.element.css('left')\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t//Overwrite the original this.element\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"resizable\", this.element.data('resizable')\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\t//Move margins to the wrapper\n\t\t\tthis.element.css({ marginLeft: this.originalElement.css(\"marginLeft\"), marginTop: this.originalElement.css(\"marginTop\"), marginRight: this.originalElement.css(\"marginRight\"), marginBottom: this.originalElement.css(\"marginBottom\") });\n\t\t\tthis.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});\n\n\t\t\t//Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css('resize');\n\t\t\tthis.originalElement.css('resize', 'none');\n\n\t\t\t//Push the actual element to our proportionallyResize internal array\n\t\t\tthis._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' }));\n\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css({ margin: this.originalElement.css('margin') });\n\n\t\t\t// fix handlers offset\n\t\t\tthis._proportionallyResize();\n\n\t\t}\n\n\t\tthis.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? \"e,s,se\" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });\n\t\tif(this.handles.constructor == String) {\n\n\t\t\tif(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw';\n\t\t\tvar n = this.handles.split(\",\"); this.handles = {};\n\n\t\t\tfor(var i = 0; i < n.length; i++) {\n\n\t\t\t\tvar handle = $.trim(n[i]), hname = 'ui-resizable-'+handle;\n\t\t\t\tvar axis = $('<div class=\"ui-resizable-handle ' + hname + '\"></div>');\n\n\t\t\t\t// Apply zIndex to all handles - see #7960\n\t\t\t\taxis.css({ zIndex: o.zIndex });\n\n\t\t\t\t//TODO : What's going on here?\n\t\t\t\tif ('se' == handle) {\n\t\t\t\t\taxis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');\n\t\t\t\t};\n\n\t\t\t\t//Insert into internal handles object and append to element\n\t\t\t\tthis.handles[handle] = '.ui-resizable-'+handle;\n\t\t\t\tthis.element.append(axis);\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function(target) {\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor(var i in this.handles) {\n\n\t\t\t\tif(this.handles[i].constructor == String)\n\t\t\t\t\tthis.handles[i] = $(this.handles[i], this.element).show();\n\n\t\t\t\t//Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)\n\t\t\t\tif (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {\n\n\t\t\t\t\tvar axis = $(this.handles[i], this.element), padWrapper = 0;\n\n\t\t\t\t\t//Checking the correct pad and border\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();\n\n\t\t\t\t\t//The padding type i have to apply...\n\t\t\t\t\tvar padPos = [ 'padding',\n\t\t\t\t\t\t/ne|nw|n/.test(i) ? 'Top' :\n\t\t\t\t\t\t/se|sw|s/.test(i) ? 'Bottom' :\n\t\t\t\t\t\t/^e$/.test(i) ? 'Right' : 'Left' ].join(\"\");\n\n\t\t\t\t\ttarget.css(padPos, padWrapper);\n\n\t\t\t\t\tthis._proportionallyResize();\n\n\t\t\t\t}\n\n\t\t\t\t//TODO: What's that good for? There's not anything to be executed left\n\t\t\t\tif(!$(this.handles[i]).length)\n\t\t\t\t\tcontinue;\n\n\t\t\t}\n\t\t};\n\n\t\t//TODO: make renderAxis a prototype function\n\t\tthis._renderAxis(this.element);\n\n\t\tthis._handles = $('.ui-resizable-handle', this.element)\n\t\t\t.disableSelection();\n\n\t\t//Matching axis name\n\t\tthis._handles.mouseover(function() {\n\t\t\tif (!self.resizing) {\n\t\t\t\tif (this.className)\n\t\t\t\t\tvar axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);\n\t\t\t\t//Axis, default = se\n\t\t\t\tself.axis = axis && axis[1] ? axis[1] : 'se';\n\t\t\t}\n\t\t});\n\n\t\t//If we want to auto hide the elements\n\t\tif (o.autoHide) {\n\t\t\tthis._handles.hide();\n\t\t\t$(this.element)\n\t\t\t\t.addClass(\"ui-resizable-autohide\")\n\t\t\t\t.hover(function() {\n\t\t\t\t\tif (o.disabled) return;\n\t\t\t\t\t$(this).removeClass(\"ui-resizable-autohide\");\n\t\t\t\t\tself._handles.show();\n\t\t\t\t},\n\t\t\t\tfunction(){\n\t\t\t\t\tif (o.disabled) return;\n\t\t\t\t\tif (!self.resizing) {\n\t\t\t\t\t\t$(this).addClass(\"ui-resizable-autohide\");\n\t\t\t\t\t\tself._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\t//Initialize the mouse interaction\n\t\tthis._mouseInit();\n\n\t},\n\n\tdestroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar _destroy = function(exp) {\n\t\t\t$(exp).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\")\n\t\t\t\t.removeData(\"resizable\").unbind(\".resizable\").find('.ui-resizable-handle').remove();\n\t\t};\n\n\t\t//TODO: Unwrap at same DOM position\n\t\tif (this.elementIsWrapper) {\n\t\t\t_destroy(this.element);\n\t\t\tvar wrapper = this.element;\n\t\t\twrapper.after(\n\t\t\t\tthis.originalElement.css({\n\t\t\t\t\tposition: wrapper.css('position'),\n\t\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\t\ttop: wrapper.css('top'),\n\t\t\t\t\tleft: wrapper.css('left')\n\t\t\t\t})\n\t\t\t).remove();\n\t\t}\n\n\t\tthis.originalElement.css('resize', this.originalResizeStyle);\n\t\t_destroy(this.originalElement);\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function(event) {\n\t\tvar handle = false;\n\t\tfor (var i in this.handles) {\n\t\t\tif ($(this.handles[i])[0] == event.target) {\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && handle;\n\t},\n\n\t_mouseStart: function(event) {\n\n\t\tvar o = this.options, iniPos = this.element.position(), el = this.element;\n\n\t\tthis.resizing = true;\n\t\tthis.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() };\n\n\t\t// bugfix for http://dev.jquery.com/ticket/1749\n\t\tif (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {\n\t\t\tel.css({ position: 'absolute', top: iniPos.top, left: iniPos.left });\n\t\t}\n\n\t\tthis._renderProxy();\n\n\t\tvar curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top'));\n\n\t\tif (o.containment) {\n\t\t\tcurleft += $(o.containment).scrollLeft() || 0;\n\t\t\tcurtop += $(o.containment).scrollTop() || 0;\n\t\t}\n\n\t\t//Store needed variables\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\t\tthis.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };\n\t\tthis.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\t//Aspect Ratio\n\t\tthis.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);\n\n\t    var cursor = $('.ui-resizable-' + this.axis).css('cursor');\n\t    $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor);\n\n\t\tel.addClass(\"ui-resizable-resizing\");\n\t\tthis._propagate(\"start\", event);\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function(event) {\n\n\t\t//Increase performance, avoid regex\n\t\tvar el = this.helper, o = this.options, props = {},\n\t\t\tself = this, smp = this.originalMousePosition, a = this.axis;\n\n\t\tvar dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0;\n\t\tvar trigger = this._change[a];\n\t\tif (!trigger) return false;\n\n\t\t// Calculate the attrs that will be change\n\t\tvar data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;\n\n\t\t// Put this in the mouseDrag handler since the user can start pressing shift while resizing\n\t\tthis._updateVirtualBoundaries(event.shiftKey);\n\t\tif (this._aspectRatio || event.shiftKey)\n\t\t\tdata = this._updateRatio(data, event);\n\n\t\tdata = this._respectSize(data, event);\n\n\t\t// plugins callbacks need to be called first\n\t\tthis._propagate(\"resize\", event);\n\n\t\tel.css({\n\t\t\ttop: this.position.top + \"px\", left: this.position.left + \"px\",\n\t\t\twidth: this.size.width + \"px\", height: this.size.height + \"px\"\n\t\t});\n\n\t\tif (!this._helper && this._proportionallyResizeElements.length)\n\t\t\tthis._proportionallyResize();\n\n\t\tthis._updateCache(data);\n\n\t\t// calling the user callback at the end\n\t\tthis._trigger('resize', event, this.ui());\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\n\t\tthis.resizing = false;\n\t\tvar o = this.options, self = this;\n\n\t\tif(this._helper) {\n\t\t\tvar pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),\n\t\t\t\tsoffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,\n\t\t\t\tsoffsetw = ista ? 0 : self.sizeDiff.width;\n\n\t\t\tvar s = { width: (self.helper.width()  - soffsetw), height: (self.helper.height() - soffseth) },\n\t\t\t\tleft = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,\n\t\t\t\ttop = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;\n\n\t\t\tif (!o.animate)\n\t\t\t\tthis.element.css($.extend(s, { top: top, left: left }));\n\n\t\t\tself.helper.height(self.size.height);\n\t\t\tself.helper.width(self.size.width);\n\n\t\t\tif (this._helper && !o.animate) this._proportionallyResize();\n\t\t}\n\n\t\t$('body').css('cursor', 'auto');\n\n\t\tthis.element.removeClass(\"ui-resizable-resizing\");\n\n\t\tthis._propagate(\"stop\", event);\n\n\t\tif (this._helper) this.helper.remove();\n\t\treturn false;\n\n\t},\n\n    _updateVirtualBoundaries: function(forceAspectRatio) {\n        var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;\n\n        b = {\n            minWidth: isNumber(o.minWidth) ? o.minWidth : 0,\n            maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,\n            minHeight: isNumber(o.minHeight) ? o.minHeight : 0,\n            maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity\n        };\n\n        if(this._aspectRatio || forceAspectRatio) {\n            // We want to create an enclosing box whose aspect ration is the requested one\n            // First, compute the \"projected\" size for each dimension based on the aspect ratio and other dimension\n            pMinWidth = b.minHeight * this.aspectRatio;\n            pMinHeight = b.minWidth / this.aspectRatio;\n            pMaxWidth = b.maxHeight * this.aspectRatio;\n            pMaxHeight = b.maxWidth / this.aspectRatio;\n\n            if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;\n            if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;\n            if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;\n            if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;\n        }\n        this._vBoundaries = b;\n    },\n\n\t_updateCache: function(data) {\n\t\tvar o = this.options;\n\t\tthis.offset = this.helper.offset();\n\t\tif (isNumber(data.left)) this.position.left = data.left;\n\t\tif (isNumber(data.top)) this.position.top = data.top;\n\t\tif (isNumber(data.height)) this.size.height = data.height;\n\t\tif (isNumber(data.width)) this.size.width = data.width;\n\t},\n\n\t_updateRatio: function(data, event) {\n\n\t\tvar o = this.options, cpos = this.position, csize = this.size, a = this.axis;\n\n\t\tif (isNumber(data.height)) data.width = (data.height * this.aspectRatio);\n\t\telse if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);\n\n\t\tif (a == 'sw') {\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\n\t\t\tdata.top = null;\n\t\t}\n\t\tif (a == 'nw') {\n\t\t\tdata.top = cpos.top + (csize.height - data.height);\n\t\t\tdata.left = cpos.left + (csize.width - data.width);\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function(data, event) {\n\n\t\tvar el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,\n\t\t\t\tismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),\n\t\t\t\t\tisminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);\n\n\t\tif (isminw) data.width = o.minWidth;\n\t\tif (isminh) data.height = o.minHeight;\n\t\tif (ismaxw) data.width = o.maxWidth;\n\t\tif (ismaxh) data.height = o.maxHeight;\n\n\t\tvar dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height;\n\t\tvar cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);\n\n\t\tif (isminw && cw) data.left = dw - o.minWidth;\n\t\tif (ismaxw && cw) data.left = dw - o.maxWidth;\n\t\tif (isminh && ch)\tdata.top = dh - o.minHeight;\n\t\tif (ismaxh && ch)\tdata.top = dh - o.maxHeight;\n\n\t\t// fixing jump error on top/left - bug #2330\n\t\tvar isNotwh = !data.width && !data.height;\n\t\tif (isNotwh && !data.left && data.top) data.top = null;\n\t\telse if (isNotwh && !data.top && data.left) data.left = null;\n\n\t\treturn data;\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tvar o = this.options;\n\t\tif (!this._proportionallyResizeElements.length) return;\n\t\tvar element = this.helper || this.element;\n\n\t\tfor (var i=0; i < this._proportionallyResizeElements.length; i++) {\n\n\t\t\tvar prel = this._proportionallyResizeElements[i];\n\n\t\t\tif (!this.borderDif) {\n\t\t\t\tvar b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],\n\t\t\t\t\tp = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];\n\n\t\t\t\tthis.borderDif = $.map(b, function(v, i) {\n\t\t\t\t\tvar border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0;\n\t\t\t\t\treturn border + padding;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length)))\n\t\t\t\tcontinue;\n\n\t\t\tprel.css({\n\t\t\t\theight: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,\n\t\t\t\twidth: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0\n\t\t\t});\n\n\t\t};\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif(this._helper) {\n\n\t\t\tthis.helper = this.helper || $('<div style=\"overflow:hidden;\"></div>');\n\n\t\t\t// fix ie6 offset TODO: This seems broken\n\t\t\tvar ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0),\n\t\t\tpxyoffset = ( ie6 ? 2 : -1 );\n\n\t\t\tthis.helper.addClass(this._helper).css({\n\t\t\t\twidth: this.element.outerWidth() + pxyoffset,\n\t\t\t\theight: this.element.outerHeight() + pxyoffset,\n\t\t\t\tposition: 'absolute',\n\t\t\t\tleft: this.elementOffset.left - ie6offset +'px',\n\t\t\t\ttop: this.elementOffset.top - ie6offset +'px',\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t});\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo(\"body\")\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function(event, dx, dy) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function(event, dx, dy) {\n\t\t\tvar o = this.options, cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function(event, dx, dy) {\n\t\t\tvar o = this.options, cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function(event, dx, dy) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));\n\t\t},\n\t\tsw: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));\n\t\t},\n\t\tne: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));\n\t\t},\n\t\tnw: function(event, dx, dy) {\n\t\t\treturn $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));\n\t\t}\n\t},\n\n\t_propagate: function(n, event) {\n\t\t$.ui.plugin.call(this, n, [event, this.ui()]);\n\t\t(n != \"resize\" && this._trigger(n, event, this.ui()));\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n});\n\n$.extend($.ui.resizable, {\n\tversion: \"1.8.24\"\n});\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add(\"resizable\", \"alsoResize\", {\n\n\tstart: function (event, ui) {\n\t\tvar self = $(this).data(\"resizable\"), o = self.options;\n\n\t\tvar _store = function (exp) {\n\t\t\t$(exp).each(function() {\n\t\t\t\tvar el = $(this);\n\t\t\t\tel.data(\"resizable-alsoresize\", {\n\t\t\t\t\twidth: parseInt(el.width(), 10), height: parseInt(el.height(), 10),\n\t\t\t\t\tleft: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10)\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tif (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) {\n\t\t\tif (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }\n\t\t\telse { $.each(o.alsoResize, function (exp) { _store(exp); }); }\n\t\t}else{\n\t\t\t_store(o.alsoResize);\n\t\t}\n\t},\n\n\tresize: function (event, ui) {\n\t\tvar self = $(this).data(\"resizable\"), o = self.options, os = self.originalSize, op = self.originalPosition;\n\n\t\tvar delta = {\n\t\t\theight: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0,\n\t\t\ttop: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0\n\t\t},\n\n\t\t_alsoResize = function (exp, c) {\n\t\t\t$(exp).each(function() {\n\t\t\t\tvar el = $(this), start = $(this).data(\"resizable-alsoresize\"), style = {}, \n\t\t\t\t\tcss = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left'];\n\n\t\t\t\t$.each(css, function (i, prop) {\n\t\t\t\t\tvar sum = (start[prop]||0) + (delta[prop]||0);\n\t\t\t\t\tif (sum && sum >= 0)\n\t\t\t\t\t\tstyle[prop] = sum || null;\n\t\t\t\t});\n\n\t\t\t\tel.css(style);\n\t\t\t});\n\t\t};\n\n\t\tif (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) {\n\t\t\t$.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });\n\t\t}else{\n\t\t\t_alsoResize(o.alsoResize);\n\t\t}\n\t},\n\n\tstop: function (event, ui) {\n\t\t$(this).removeData(\"resizable-alsoresize\");\n\t}\n});\n\n$.ui.plugin.add(\"resizable\", \"animate\", {\n\n\tstop: function(event, ui) {\n\t\tvar self = $(this).data(\"resizable\"), o = self.options;\n\n\t\tvar pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName),\n\t\t\t\t\tsoffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height,\n\t\t\t\t\t\tsoffsetw = ista ? 0 : self.sizeDiff.width;\n\n\t\tvar style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) },\n\t\t\t\t\tleft = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,\n\t\t\t\t\t\ttop = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;\n\n\t\tself.element.animate(\n\t\t\t$.extend(style, top && left ? { top: top, left: left } : {}), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseInt(self.element.css('width'), 10),\n\t\t\t\t\t\theight: parseInt(self.element.css('height'), 10),\n\t\t\t\t\t\ttop: parseInt(self.element.css('top'), 10),\n\t\t\t\t\t\tleft: parseInt(self.element.css('left'), 10)\n\t\t\t\t\t};\n\n\t\t\t\t\tif (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height });\n\n\t\t\t\t\t// propagating resize, and updating values for each animation step\n\t\t\t\t\tself._updateCache(data);\n\t\t\t\t\tself._propagate(\"resize\", event);\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n});\n\n$.ui.plugin.add(\"resizable\", \"containment\", {\n\n\tstart: function(event, ui) {\n\t\tvar self = $(this).data(\"resizable\"), o = self.options, el = self.element;\n\t\tvar oc = o.containment,\tce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;\n\t\tif (!ce) return;\n\n\t\tself.containerElement = $(ce);\n\n\t\tif (/document/.test(oc) || oc == document) {\n\t\t\tself.containerOffset = { left: 0, top: 0 };\n\t\t\tself.containerPosition = { left: 0, top: 0 };\n\n\t\t\tself.parentData = {\n\t\t\t\telement: $(document), left: 0, top: 0,\n\t\t\t\twidth: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t}\n\n\t\t// i'm a node, so compute top, left, right, bottom\n\t\telse {\n\t\t\tvar element = $(ce), p = [];\n\t\t\t$([ \"Top\", \"Right\", \"Left\", \"Bottom\" ]).each(function(i, name) { p[i] = num(element.css(\"padding\" + name)); });\n\n\t\t\tself.containerOffset = element.offset();\n\t\t\tself.containerPosition = element.position();\n\t\t\tself.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };\n\n\t\t\tvar co = self.containerOffset, ch = self.containerSize.height,\tcw = self.containerSize.width,\n\t\t\t\t\t\twidth = ($.ui.hasScroll(ce, \"left\") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);\n\n\t\t\tself.parentData = {\n\t\t\t\telement: ce, left: co.left, top: co.top, width: width, height: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function(event, ui) {\n\t\tvar self = $(this).data(\"resizable\"), o = self.options,\n\t\t\t\tps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position,\n\t\t\t\tpRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement;\n\n\t\tif (ce[0] != document && (/static/).test(ce.css('position'))) cop = co;\n\n\t\tif (cp.left < (self._helper ? co.left : 0)) {\n\t\t\tself.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left));\n\t\t\tif (pRatio) self.size.height = self.size.width / self.aspectRatio;\n\t\t\tself.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif (cp.top < (self._helper ? co.top : 0)) {\n\t\t\tself.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top);\n\t\t\tif (pRatio) self.size.width = self.size.height * self.aspectRatio;\n\t\t\tself.position.top = self._helper ? co.top : 0;\n\t\t}\n\n\t\tself.offset.left = self.parentData.left+self.position.left;\n\t\tself.offset.top = self.parentData.top+self.position.top;\n\n\t\tvar woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ),\n\t\t\t\t\thoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height );\n\n\t\tvar isParent = self.containerElement.get(0) == self.element.parent().get(0),\n\t\t    isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position'));\n\n\t\tif(isParent && isOffsetRelative) woset -= self.parentData.left;\n\n\t\tif (woset + self.size.width >= self.parentData.width) {\n\t\t\tself.size.width = self.parentData.width - woset;\n\t\t\tif (pRatio) self.size.height = self.size.width / self.aspectRatio;\n\t\t}\n\n\t\tif (hoset + self.size.height >= self.parentData.height) {\n\t\t\tself.size.height = self.parentData.height - hoset;\n\t\t\tif (pRatio) self.size.width = self.size.height * self.aspectRatio;\n\t\t}\n\t},\n\n\tstop: function(event, ui){\n\t\tvar self = $(this).data(\"resizable\"), o = self.options, cp = self.position,\n\t\t\t\tco = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;\n\n\t\tvar helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height;\n\n\t\tif (self._helper && !o.animate && (/relative/).test(ce.css('position')))\n\t\t\t$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });\n\n\t\tif (self._helper && !o.animate && (/static/).test(ce.css('position')))\n\t\t\t$(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });\n\n\t}\n});\n\n$.ui.plugin.add(\"resizable\", \"ghost\", {\n\n\tstart: function(event, ui) {\n\n\t\tvar self = $(this).data(\"resizable\"), o = self.options, cs = self.size;\n\n\t\tself.ghost = self.originalElement.clone();\n\t\tself.ghost\n\t\t\t.css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })\n\t\t\t.addClass('ui-resizable-ghost')\n\t\t\t.addClass(typeof o.ghost == 'string' ? o.ghost : '');\n\n\t\tself.ghost.appendTo(self.helper);\n\n\t},\n\n\tresize: function(event, ui){\n\t\tvar self = $(this).data(\"resizable\"), o = self.options;\n\t\tif (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width });\n\t},\n\n\tstop: function(event, ui){\n\t\tvar self = $(this).data(\"resizable\"), o = self.options;\n\t\tif (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));\n\t}\n\n});\n\n$.ui.plugin.add(\"resizable\", \"grid\", {\n\n\tresize: function(event, ui) {\n\t\tvar self = $(this).data(\"resizable\"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey;\n\t\to.grid = typeof o.grid == \"number\" ? [o.grid, o.grid] : o.grid;\n\t\tvar ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1);\n\n\t\tif (/^(se|s|e)$/.test(a)) {\n\t\t\tself.size.width = os.width + ox;\n\t\t\tself.size.height = os.height + oy;\n\t\t}\n\t\telse if (/^(ne)$/.test(a)) {\n\t\t\tself.size.width = os.width + ox;\n\t\t\tself.size.height = os.height + oy;\n\t\t\tself.position.top = op.top - oy;\n\t\t}\n\t\telse if (/^(sw)$/.test(a)) {\n\t\t\tself.size.width = os.width + ox;\n\t\t\tself.size.height = os.height + oy;\n\t\t\tself.position.left = op.left - ox;\n\t\t}\n\t\telse {\n\t\t\tself.size.width = os.width + ox;\n\t\t\tself.size.height = os.height + oy;\n\t\t\tself.position.top = op.top - oy;\n\t\t\tself.position.left = op.left - ox;\n\t\t}\n\t}\n\n});\n\nvar num = function(v) {\n\treturn parseInt(v, 10) || 0;\n};\n\nvar isNumber = function(value) {\n\treturn !isNaN(parseInt(value, 10));\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.widget(\"ui.selectable\", $.ui.mouse, {\n\toptions: {\n\t\tappendTo: 'body',\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: '*',\n\t\ttolerance: 'touch'\n\t},\n\t_create: function() {\n\t\tvar self = this;\n\n\t\tthis.element.addClass(\"ui-selectable\");\n\n\t\tthis.dragged = false;\n\n\t\t// cache selectee children based on filter\n\t\tvar selectees;\n\t\tthis.refresh = function() {\n\t\t\tselectees = $(self.options.filter, self.element[0]);\n\t\t\tselectees.addClass(\"ui-selectee\");\n\t\t\tselectees.each(function() {\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar pos = $this.offset();\n\t\t\t\t$.data(this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass('ui-selected'),\n\t\t\t\t\tselecting: $this.hasClass('ui-selecting'),\n\t\t\t\t\tunselecting: $this.hasClass('ui-unselecting')\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis.selectees = selectees.addClass(\"ui-selectee\");\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $(\"<div class='ui-selectable-helper'></div>\");\n\t},\n\n\tdestroy: function() {\n\t\tthis.selectees\n\t\t\t.removeClass(\"ui-selectee\")\n\t\t\t.removeData(\"selectable-item\");\n\t\tthis.element\n\t\t\t.removeClass(\"ui-selectable ui-selectable-disabled\")\n\t\t\t.removeData(\"selectable\")\n\t\t\t.unbind(\".selectable\");\n\t\tthis._mouseDestroy();\n\n\t\treturn this;\n\t},\n\n\t_mouseStart: function(event) {\n\t\tvar self = this;\n\n\t\tthis.opos = [event.pageX, event.pageY];\n\n\t\tif (this.options.disabled)\n\t\t\treturn;\n\n\t\tvar options = this.options;\n\n\t\tthis.selectees = $(options.filter, this.element[0]);\n\n\t\tthis._trigger(\"start\", event);\n\n\t\t$(options.appendTo).append(this.helper);\n\t\t// position helper (lasso)\n\t\tthis.helper.css({\n\t\t\t\"left\": event.clientX,\n\t\t\t\"top\": event.clientY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t});\n\n\t\tif (options.autoRefresh) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter('.ui-selected').each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.startselected = true;\n\t\t\tif (!event.metaKey && !event.ctrlKey) {\n\t\t\t\tselectee.$element.removeClass('ui-selected');\n\t\t\t\tselectee.selected = false;\n\t\t\t\tselectee.$element.addClass('ui-unselecting');\n\t\t\t\tselectee.unselecting = true;\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tself._trigger(\"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t$(event.target).parents().andSelf().each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tif (selectee) {\n\t\t\t\tvar doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected');\n\t\t\t\tselectee.$element\n\t\t\t\t\t.removeClass(doSelect ? \"ui-unselecting\" : \"ui-selected\")\n\t\t\t\t\t.addClass(doSelect ? \"ui-selecting\" : \"ui-unselecting\");\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif (doSelect) {\n\t\t\t\t\tself._trigger(\"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tself._trigger(\"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t},\n\n\t_mouseDrag: function(event) {\n\t\tvar self = this;\n\t\tthis.dragged = true;\n\n\t\tif (this.options.disabled)\n\t\t\treturn;\n\n\t\tvar options = this.options;\n\n\t\tvar x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY;\n\t\tif (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});\n\n\t\tthis.selectees.each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif (!selectee || selectee.element == self.element[0])\n\t\t\t\treturn;\n\t\t\tvar hit = false;\n\t\t\tif (options.tolerance == 'touch') {\n\t\t\t\thit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );\n\t\t\t} else if (options.tolerance == 'fit') {\n\t\t\t\thit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);\n\t\t\t}\n\n\t\t\tif (hit) {\n\t\t\t\t// SELECT\n\t\t\t\tif (selectee.selected) {\n\t\t\t\t\tselectee.$element.removeClass('ui-selected');\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif (selectee.unselecting) {\n\t\t\t\t\tselectee.$element.removeClass('ui-unselecting');\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif (!selectee.selecting) {\n\t\t\t\t\tselectee.$element.addClass('ui-selecting');\n\t\t\t\t\tselectee.selecting = true;\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tself._trigger(\"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// UNSELECT\n\t\t\t\tif (selectee.selecting) {\n\t\t\t\t\tif ((event.metaKey || event.ctrlKey) && selectee.startselected) {\n\t\t\t\t\t\tselectee.$element.removeClass('ui-selecting');\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tselectee.$element.addClass('ui-selected');\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselectee.$element.removeClass('ui-selecting');\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif (selectee.startselected) {\n\t\t\t\t\t\t\tselectee.$element.addClass('ui-unselecting');\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tself._trigger(\"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (selectee.selected) {\n\t\t\t\t\tif (!event.metaKey && !event.ctrlKey && !selectee.startselected) {\n\t\t\t\t\t\tselectee.$element.removeClass('ui-selected');\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tselectee.$element.addClass('ui-unselecting');\n\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tself._trigger(\"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function(event) {\n\t\tvar self = this;\n\n\t\tthis.dragged = false;\n\n\t\tvar options = this.options;\n\n\t\t$('.ui-unselecting', this.element[0]).each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.$element.removeClass('ui-unselecting');\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tself._trigger(\"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t});\n\t\t});\n\t\t$('.ui-selecting', this.element[0]).each(function() {\n\t\t\tvar selectee = $.data(this, \"selectable-item\");\n\t\t\tselectee.$element.removeClass('ui-selecting').addClass('ui-selected');\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tself._trigger(\"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t});\n\t\t});\n\t\tthis._trigger(\"stop\", event);\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n});\n\n$.extend($.ui.selectable, {\n\tversion: \"1.8.24\"\n});\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.widget(\"ui.sortable\", $.ui.mouse, {\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: 'auto',\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: '> *',\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000\n\t},\n\t_create: function() {\n\n\t\tvar o = this.options;\n\t\tthis.containerCache = {};\n\t\tthis.element.addClass(\"ui-sortable\");\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine if the items are being displayed horizontally\n\t\tthis.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\t\t\n\t\t//We're ready to go\n\t\tthis.ready = true\n\n\t},\n\n\tdestroy: function() {\n\t\t$.Widget.prototype.destroy.call( this );\n\t\tthis.element\n\t\t\t.removeClass(\"ui-sortable ui-sortable-disabled\");\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- )\n\t\t\tthis.items[i].item.removeData(this.widgetName + \"-item\");\n\n\t\treturn this;\n\t},\n\n\t_setOption: function(key, value){\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.options[ key ] = value;\n\t\n\t\t\tthis.widget()\n\t\t\t\t[ value ? \"addClass\" : \"removeClass\"]( \"ui-sortable-disabled\" );\n\t\t} else {\n\t\t\t// Don't call widget base _setOption for disable as it adds ui-state-disabled class\n\t\t\t$.Widget.prototype._setOption.apply(this, arguments);\n\t\t}\n\t},\n\n\t_mouseCapture: function(event, overrideHandle) {\n\t\tvar that = this;\n\n\t\tif (this.reverting) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif(this.options.disabled || this.options.type == 'static') return false;\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems(event);\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\tvar currentItem = null, self = this, nodes = $(event.target).parents().each(function() {\n\t\t\tif($.data(this, that.widgetName + '-item') == self) {\n\t\t\t\tcurrentItem = $(this);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif($.data(event.target, that.widgetName + '-item') == self) currentItem = $(event.target);\n\n\t\tif(!currentItem) return false;\n\t\tif(this.options.handle && !overrideHandle) {\n\t\t\tvar validHandle = false;\n\n\t\t\t$(this.options.handle, currentItem).find(\"*\").andSelf().each(function() { if(this == event.target) validHandle = true; });\n\t\t\tif(!validHandle) return false;\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function(event, overrideHandle, noActivation) {\n\n\t\tvar o = this.options, self = this;\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper(event);\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend(this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper\n\t\t});\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css(\"position\", \"absolute\");\n\t\tthis.cssPosition = this.helper.css(\"position\");\n\t\t\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition(event);\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if 'cursorAt' is supplied\n\t\t(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };\n\n\t\t//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way\n\t\tif(this.helper[0] != this.currentItem[0]) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif(o.containment)\n\t\t\tthis._setContainment();\n\n\t\tif(o.cursor) { // cursor option\n\t\t\tif ($('body').css(\"cursor\")) this._storedCursor = $('body').css(\"cursor\");\n\t\t\t$('body').css(\"cursor\", o.cursor);\n\t\t}\n\n\t\tif(o.opacity) { // opacity option\n\t\t\tif (this.helper.css(\"opacity\")) this._storedOpacity = this.helper.css(\"opacity\");\n\t\t\tthis.helper.css(\"opacity\", o.opacity);\n\t\t}\n\n\t\tif(o.zIndex) { // zIndex option\n\t\t\tif (this.helper.css(\"zIndex\")) this._storedZIndex = this.helper.css(\"zIndex\");\n\t\t\tthis.helper.css(\"zIndex\", o.zIndex);\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML')\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\n\t\t//Call callbacks\n\t\tthis._trigger(\"start\", event, this._uiHash());\n\n\t\t//Recache the helper size\n\t\tif(!this._preserveHelperProportions)\n\t\t\tthis._cacheHelperProportions();\n\n\n\t\t//Post 'activate' events to possible containers\n\t\tif(!noActivation) {\n\t\t\t for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger(\"activate\", event, self._uiHash(this)); }\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif($.ui.ddmanager)\n\t\t\t$.ui.ddmanager.current = this;\n\n\t\tif ($.ui.ddmanager && !o.dropBehaviour)\n\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\n\t\tthis.dragging = true;\n\n\t\tthis.helper.addClass(\"ui-sortable-helper\");\n\t\tthis._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function(event) {\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition(event);\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\tif (!this.lastPositionAbs) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif(this.options.scroll) {\n\t\t\tvar o = this.options, scrolled = false;\n\t\t\tif(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {\n\n\t\t\t\tif((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;\n\t\t\t\telse if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)\n\t\t\t\t\tthis.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;\n\n\t\t\t\tif((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;\n\t\t\t\telse if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)\n\t\t\t\t\tthis.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;\n\n\t\t\t} else {\n\n\t\t\t\tif(event.pageY - $(document).scrollTop() < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);\n\t\t\t\telse if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);\n\n\t\t\t\tif(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);\n\t\t\t\telse if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)\n\t\t\t\t\tscrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);\n\n\t\t\t}\n\n\t\t\tif(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)\n\t\t\t\t$.ui.ddmanager.prepareOffsets(this, event);\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo(\"absolute\");\n\n\t\t//Set the helper position\n\t\tif(!this.options.axis || this.options.axis != \"y\") this.helper[0].style.left = this.position.left+'px';\n\t\tif(!this.options.axis || this.options.axis != \"x\") this.helper[0].style.top = this.position.top+'px';\n\n\t\t//Rearrange\n\t\tfor (var i = this.items.length - 1; i >= 0; i--) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\tvar item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);\n\t\t\tif (!intersection) continue;\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items form other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this moving items in \"sub-sortables\" can cause the placeholder to jitter\n\t\t\t// beetween the outer and inner container.\n\t\t\tif (item.instance !== this.currentContainer) continue;\n\n\t\t\tif (itemElement != this.currentItem[0] //cannot intersect with itself\n\t\t\t\t&&\tthis.placeholder[intersection == 1 ? \"next\" : \"prev\"]()[0] != itemElement //no useless actions that have been done before\n\t\t\t\t&&\t!$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked\n\t\t\t\t&& (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)\n\t\t\t\t//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection == 1 ? \"down\" : \"up\";\n\n\t\t\t\tif (this.options.tolerance == \"pointer\" || this._intersectsWithSides(item)) {\n\t\t\t\t\tthis._rearrange(event, item);\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers(event);\n\n\t\t//Interconnect with droppables\n\t\tif($.ui.ddmanager) $.ui.ddmanager.drag(this, event);\n\n\t\t//Call callbacks\n\t\tthis._trigger('sort', event, this._uiHash());\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function(event, noPropagation) {\n\n\t\tif(!event) return;\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ($.ui.ddmanager && !this.options.dropBehaviour)\n\t\t\t$.ui.ddmanager.drop(this, event);\n\n\t\tif(this.options.revert) {\n\t\t\tvar self = this;\n\t\t\tvar cur = self.placeholder.offset();\n\n\t\t\tself.reverting = true;\n\n\t\t\t$(this.helper).animate({\n\t\t\t\tleft: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),\n\t\t\t\ttop: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)\n\t\t\t}, parseInt(this.options.revert, 10) || 500, function() {\n\t\t\t\tself._clear(event);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._clear(event, noPropagation);\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tvar self = this;\n\n\t\tif(this.dragging) {\n\n\t\t\tthis._mouseUp({ target: null });\n\n\t\t\tif(this.options.helper == \"original\")\n\t\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\n\t\t\telse\n\t\t\t\tthis.currentItem.show();\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\n\t\t\t\tthis.containers[i]._trigger(\"deactivate\", null, self._uiHash(this));\n\t\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", null, self._uiHash(this));\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif (this.placeholder) {\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\n\t\t\tif(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);\n\t\t\tif(this.options.helper != \"original\" && this.helper && this.helper[0].parentNode) this.helper.remove();\n\n\t\t\t$.extend(this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t});\n\n\t\t\tif(this.domPosition.prev) {\n\t\t\t\t$(this.domPosition.prev).after(this.currentItem);\n\t\t\t} else {\n\t\t\t\t$(this.domPosition.parent).prepend(this.currentItem);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function(o) {\n\n\t\tvar items = this._getItemsAsjQuery(o && o.connected);\n\t\tvar str = []; o = o || {};\n\n\t\t$(items).each(function() {\n\t\t\tvar res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));\n\t\t\tif(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));\n\t\t});\n\n\t\tif(!str.length && o.key) {\n\t\t\tstr.push(o.key + '=');\n\t\t}\n\n\t\treturn str.join('&');\n\n\t},\n\n\ttoArray: function(o) {\n\n\t\tvar items = this._getItemsAsjQuery(o && o.connected);\n\t\tvar ret = []; o = o || {};\n\n\t\titems.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function(item) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height;\n\n\t\tvar l = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height;\n\n\t\tvar dyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left;\n\n\t\tvar isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;\n\n\t\tif(\t   this.options.tolerance == \"pointer\"\n\t\t\t|| this.options.forcePointerForContainers\n\t\t\t|| (this.options.tolerance != \"pointer\" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn (l < x1 + (this.helperProportions.width / 2) // Right Half\n\t\t\t\t&& x2 - (this.helperProportions.width / 2) < r // Left Half\n\t\t\t\t&& t < y1 + (this.helperProportions.height / 2) // Bottom Half\n\t\t\t\t&& y2 - (this.helperProportions.height / 2) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function(item) {\n\n\t\tvar isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),\n\t\t\tisOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth,\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif (!isOverElement)\n\t\t\treturn false;\n\n\t\treturn this.floating ?\n\t\t\t( ((horizontalDirection && horizontalDirection == \"right\") || verticalDirection == \"down\") ? 2 : 1 )\n\t\t\t: ( verticalDirection && (verticalDirection == \"down\" ? 2 : 1) );\n\n\t},\n\n\t_intersectsWithSides: function(item) {\n\n\t\tvar isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),\n\t\t\tisOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif (this.floating && horizontalDirection) {\n\t\t\treturn ((horizontalDirection == \"right\" && isOverRightHalf) || (horizontalDirection == \"left\" && !isOverRightHalf));\n\t\t} else {\n\t\t\treturn verticalDirection && ((verticalDirection == \"down\" && isOverBottomHalf) || (verticalDirection == \"up\" && !isOverBottomHalf));\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta != 0 && (delta > 0 ? \"down\" : \"up\");\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta != 0 && (delta > 0 ? \"right\" : \"left\");\n\t},\n\n\trefresh: function(event) {\n\t\tthis._refreshItems(event);\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor == String\n\t\t\t? [options.connectWith]\n\t\t\t: options.connectWith;\n\t},\n\t\n\t_getItemsAsjQuery: function(connected) {\n\n\t\tvar self = this;\n\t\tvar items = [];\n\t\tvar queries = [];\n\t\tvar connectWith = this._connectWith();\n\n\t\tif(connectWith && connected) {\n\t\t\tfor (var i = connectWith.length - 1; i >= 0; i--){\n\t\t\t\tvar cur = $(connectWith[i]);\n\t\t\t\tfor (var j = cur.length - 1; j >= 0; j--){\n\t\t\t\t\tvar inst = $.data(cur[j], this.widgetName);\n\t\t\t\t\tif(inst && inst != this && !inst.options.disabled) {\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(\".ui-sortable-helper\").not('.ui-sortable-placeholder'), inst]);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\tqueries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(\".ui-sortable-helper\").not('.ui-sortable-placeholder'), this]);\n\n\t\tfor (var i = queries.length - 1; i >= 0; i--){\n\t\t\tqueries[i][0].each(function() {\n\t\t\t\titems.push(this);\n\t\t\t});\n\t\t};\n\n\t\treturn $(items);\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find(\":data(\" + this.widgetName + \"-item)\");\n\n\t\tfor (var i=0; i < this.items.length; i++) {\n\n\t\t\tfor (var j=0; j < list.length; j++) {\n\t\t\t\tif(list[j] == this.items[i].item[0])\n\t\t\t\t\tthis.items.splice(i,1);\n\t\t\t};\n\n\t\t};\n\n\t},\n\n\t_refreshItems: function(event) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [this];\n\t\tvar items = this.items;\n\t\tvar self = this;\n\t\tvar queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];\n\t\tvar connectWith = this._connectWith();\n\n\t\tif(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down\n\t\t\tfor (var i = connectWith.length - 1; i >= 0; i--){\n\t\t\t\tvar cur = $(connectWith[i]);\n\t\t\t\tfor (var j = cur.length - 1; j >= 0; j--){\n\t\t\t\t\tvar inst = $.data(cur[j], this.widgetName);\n\t\t\t\t\tif(inst && inst != this && !inst.options.disabled) {\n\t\t\t\t\t\tqueries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);\n\t\t\t\t\t\tthis.containers.push(inst);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\tfor (var i = queries.length - 1; i >= 0; i--) {\n\t\t\tvar targetData = queries[i][1];\n\t\t\tvar _queries = queries[i][0];\n\n\t\t\tfor (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {\n\t\t\t\tvar item = $(_queries[j]);\n\n\t\t\t\titem.data(this.widgetName + '-item', targetData); // Data for target checking (mouse manager)\n\n\t\t\t\titems.push({\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t});\n\t\t\t};\n\t\t};\n\n\t},\n\n\trefreshPositions: function(fast) {\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change\n\t\tif(this.offsetParent && this.helper) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tfor (var i = this.items.length - 1; i >= 0; i--){\n\t\t\tvar item = this.items[i];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])\n\t\t\t\tcontinue;\n\n\t\t\tvar t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;\n\n\t\t\tif (!fast) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tvar p = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t};\n\n\t\tif(this.options.custom && this.options.custom.refreshContainers) {\n\t\t\tthis.options.custom.refreshContainers.call(this);\n\t\t} else {\n\t\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\n\t\t\t\tvar p = this.containers[i].element.offset();\n\t\t\t\tthis.containers[i].containerCache.left = p.left;\n\t\t\t\tthis.containers[i].containerCache.top = p.top;\n\t\t\t\tthis.containers[i].containerCache.width\t= this.containers[i].element.outerWidth();\n\t\t\t\tthis.containers[i].containerCache.height = this.containers[i].element.outerHeight();\n\t\t\t};\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function(that) {\n\n\t\tvar self = that || this, o = self.options;\n\n\t\tif(!o.placeholder || o.placeholder.constructor == String) {\n\t\t\tvar className = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar el = $(document.createElement(self.currentItem[0].nodeName))\n\t\t\t\t\t\t.addClass(className || self.currentItem[0].className+\" ui-sortable-placeholder\")\n\t\t\t\t\t\t.removeClass(\"ui-sortable-helper\")[0];\n\n\t\t\t\t\tif(!className)\n\t\t\t\t\t\tel.style.visibility = \"hidden\";\n\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t\tupdate: function(container, p) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified\n\t\t\t\t\tif(className && !o.forcePlaceholderSize) return;\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };\n\t\t\t\t\tif(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tself.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));\n\n\t\t//Append it after the actual current item\n\t\tself.currentItem.after(self.placeholder);\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update(self, self.placeholder);\n\n\t},\n\n\t_contactContainers: function(event) {\n\t\t\n\t\t// get innermost container that intersects with item \n\t\tvar innermostContainer = null, innermostIndex = null;\t\t\n\t\t\n\t\t\n\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\n\n\t\t\t// never consider a container that's located within the item itself \n\t\t\tif($.ui.contains(this.currentItem[0], this.containers[i].element[0]))\n\t\t\t\tcontinue;\n\n\t\t\tif(this._intersectsWith(this.containers[i].containerCache)) {\n\n\t\t\t\t// if we've already found a container and it's more \"inner\" than this, then continue \n\t\t\t\tif(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0]))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tinnermostContainer = this.containers[i]; \n\t\t\t\tinnermostIndex = i;\n\t\t\t\t\t\n\t\t\t} else {\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary \n\t\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\t\tthis.containers[i]._trigger(\"out\", event, this._uiHash(this));\n\t\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t\n\t\t// if no intersecting containers found, return \n\t\tif(!innermostContainer) return; \n\n\t\t// move the item into the container if it's not there already\n\t\tif(this.containers.length === 1) {\n\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\n\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\n\t\t} else if(this.currentContainer != this.containers[innermostIndex]) {\n\n\t\t\t//When entering a new container, we will find the item with the least distance and append our item near it\n\t\t\tvar dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top'];\n\t\t\tfor (var j = this.items.length - 1; j >= 0; j--) {\n\t\t\t\tif(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue;\n\t\t\t\tvar cur = this.containers[innermostIndex].floating ? this.items[j].item.offset().left : this.items[j].item.offset().top;\n\t\t\t\tif(Math.abs(cur - base) < dist) {\n\t\t\t\t\tdist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];\n\t\t\t\t\tthis.direction = (cur - base > 0) ? 'down' : 'up';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled\n\t\t\t\treturn;\n\n\t\t\tthis.currentContainer = this.containers[innermostIndex];\n\t\t\titemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);\n\t\t\tthis._trigger(\"change\", event, this._uiHash());\n\t\t\tthis.containers[innermostIndex]._trigger(\"change\", event, this._uiHash(this));\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update(this.currentContainer, this.placeholder);\n\n\t\t\tthis.containers[innermostIndex]._trigger(\"over\", event, this._uiHash(this));\n\t\t\tthis.containers[innermostIndex].containerCache.over = 1;\n\t\t} \n\t\n\t\t\n\t},\n\n\t_createHelper: function(event) {\n\n\t\tvar o = this.options;\n\t\tvar helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);\n\n\t\tif(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already\n\t\t\t$(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);\n\n\t\tif(helper[0] == this.currentItem[0])\n\t\t\tthis._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css(\"position\"), top: this.currentItem.css(\"top\"), left: this.currentItem.css(\"left\") };\n\n\t\tif(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());\n\t\tif(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function(obj) {\n\t\tif (typeof obj == 'string') {\n\t\t\tobj = obj.split(' ');\n\t\t}\n\t\tif ($.isArray(obj)) {\n\t\t\tobj = {left: +obj[0], top: +obj[1] || 0};\n\t\t}\n\t\tif ('left' in obj) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ('right' in obj) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ('top' in obj) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ('bottom' in obj) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that\n\t\t//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag\n\t\tif(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information\n\t\t|| (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix\n\t\t\tpo = { top: 0, left: 0 };\n\n\t\treturn {\n\t\t\ttop: po.top + (parseInt(this.offsetParent.css(\"borderTopWidth\"),10) || 0),\n\t\t\tleft: po.left + (parseInt(this.offsetParent.css(\"borderLeftWidth\"),10) || 0)\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif(this.cssPosition == \"relative\") {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - (parseInt(this.helper.css(\"top\"),10) || 0) + this.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - (parseInt(this.helper.css(\"left\"),10) || 0) + this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: (parseInt(this.currentItem.css(\"marginLeft\"),10) || 0),\n\t\t\ttop: (parseInt(this.currentItem.css(\"marginTop\"),10) || 0)\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar o = this.options;\n\t\tif(o.containment == 'parent') o.containment = this.helper[0].parentNode;\n\t\tif(o.containment == 'document' || o.containment == 'window') this.containment = [\n\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t$(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,\n\t\t\t($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top\n\t\t];\n\n\t\tif(!(/^(document|window|parent)$/).test(o.containment)) {\n\t\t\tvar ce = $(o.containment)[0];\n\t\t\tvar co = $(o.containment).offset();\n\t\t\tvar over = ($(ce).css(\"overflow\") != 'hidden');\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingLeft\"),10) || 0) - this.margins.left,\n\t\t\t\tco.top + (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) + (parseInt($(ce).css(\"paddingTop\"),10) || 0) - this.margins.top,\n\t\t\t\tco.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css(\"borderLeftWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingRight\"),10) || 0) - this.helperProportions.width - this.margins.left,\n\t\t\t\tco.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css(\"borderTopWidth\"),10) || 0) - (parseInt($(ce).css(\"paddingBottom\"),10) || 0) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function(d, pos) {\n\n\t\tif(!pos) pos = this.position;\n\t\tvar mod = d == \"absolute\" ? 1 : -1;\n\t\tvar o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpos.top\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t+ this.offset.relative.top * mod\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t+ this.offset.parent.top * mod\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpos.left\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t+ this.offset.relative.left * mod\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t+ this.offset.parent.left * mod\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t- ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function(event) {\n\n\t\tvar o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\tvar pageX = event.pageX;\n\t\tvar pageY = event.pageY;\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif(this.originalPosition) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif(this.containment) {\n\t\t\t\tif(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;\n\t\t\t\tif(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;\n\t\t\t\tif(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;\n\t\t\t\tif(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;\n\t\t\t}\n\n\t\t\tif(o.grid) {\n\t\t\t\tvar top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];\n\t\t\t\tpageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;\n\n\t\t\t\tvar left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];\n\t\t\t\tpageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\t\t\t\tpageY\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t- this.offset.click.top\t\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\t- this.offset.relative.top\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t- this.offset.parent.top\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))\n\t\t\t),\n\t\t\tleft: (\n\t\t\t\tpageX\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// The absolute mouse position\n\t\t\t\t- this.offset.click.left\t\t\t\t\t\t\t\t\t\t\t\t// Click offset (relative to the element)\n\t\t\t\t- this.offset.relative.left\t\t\t\t\t\t\t\t\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\t- this.offset.parent.left\t\t\t\t\t\t\t\t\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\t+ ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function(event, i, a, hardRefresh) {\n\n\t\ta ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar self = this, counter = this.counter;\n\n\t\twindow.setTimeout(function() {\n\t\t\tif(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove\n\t\t},0);\n\n\t},\n\n\t_clear: function(event, noPropagation) {\n\n\t\tthis.reverting = false;\n\t\t// We delay all events that have to be triggered to after the point where the placeholder has been removed and\n\t\t// everything else normalized again\n\t\tvar delayedTriggers = [], self = this;\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)\n\t\tif(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);\n\t\tthis._noFinalSort = null;\n\n\t\tif(this.helper[0] == this.currentItem[0]) {\n\t\t\tfor(var i in this._storedCSS) {\n\t\t\t\tif(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';\n\t\t\t}\n\t\t\tthis.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\");\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger(\"receive\", event, this._uiHash(this.fromOutside)); });\n\t\tif((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(\".ui-sortable-helper\")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger(\"update\", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif (this !== this.currentContainer) {\n\t\t\tif(!noPropagation) {\n\t\t\t\tdelayedTriggers.push(function(event) { this._trigger(\"remove\", event, this._uiHash()); });\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"receive\", event, this._uiHash(this)); };  }).call(this, this.currentContainer));\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"update\", event, this._uiHash(this));  }; }).call(this, this.currentContainer));\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfor (var i = this.containers.length - 1; i >= 0; i--){\n\t\t\tif(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger(\"deactivate\", event, this._uiHash(this)); };  }).call(this, this.containers[i]));\n\t\t\tif(this.containers[i].containerCache.over) {\n\t\t\t\tdelayedTriggers.push((function(c) { return function(event) { c._trigger(\"out\", event, this._uiHash(this)); };  }).call(this, this.containers[i]));\n\t\t\t\tthis.containers[i].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif(this._storedCursor) $('body').css(\"cursor\", this._storedCursor); //Reset cursor\n\t\tif(this._storedOpacity) this.helper.css(\"opacity\", this._storedOpacity); //Reset opacity\n\t\tif(this._storedZIndex) this.helper.css(\"zIndex\", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index\n\n\t\tthis.dragging = false;\n\t\tif(this.cancelHelperRemoval) {\n\t\t\tif(!noPropagation) {\n\t\t\t\tthis._trigger(\"beforeStop\", event, this._uiHash());\n\t\t\t\tfor (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events\n\t\t\t\tthis._trigger(\"stop\", event, this._uiHash());\n\t\t\t}\n\n\t\t\tthis.fromOutside = false;\n\t\t\treturn false;\n\t\t}\n\n\t\tif(!noPropagation) this._trigger(\"beforeStop\", event, this._uiHash());\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!\n\t\tthis.placeholder[0].parentNode.removeChild(this.placeholder[0]);\n\n\t\tif(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;\n\n\t\tif(!noPropagation) {\n\t\t\tfor (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events\n\t\t\tthis._trigger(\"stop\", event, this._uiHash());\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn true;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ($.Widget.prototype._trigger.apply(this, arguments) === false) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function(inst) {\n\t\tvar self = inst || this;\n\t\treturn {\n\t\t\thelper: self.helper,\n\t\t\tplaceholder: self.placeholder || $([]),\n\t\t\tposition: self.position,\n\t\t\toriginalPosition: self.originalPosition,\n\t\t\toffset: self.positionAbs,\n\t\t\titem: self.currentItem,\n\t\t\tsender: inst ? inst.element : null\n\t\t};\n\t}\n\n});\n\n$.extend($.ui.sortable, {\n\tversion: \"1.8.24\"\n});\n\n})(jQuery);\n\n;jQuery.effects || (function($, undefined) {\n\n$.effects = {};\n\n\n\n/******************************************************************************/\n/****************************** COLOR ANIMATIONS ******************************/\n/******************************************************************************/\n\n// override the animation for color styles\n$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',\n\t'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],\nfunction(i, attr) {\n\t$.fx.step[attr] = function(fx) {\n\t\tif (!fx.colorInit) {\n\t\t\tfx.start = getColor(fx.elem, attr);\n\t\t\tfx.end = getRGB(fx.end);\n\t\t\tfx.colorInit = true;\n\t\t}\n\n\t\tfx.elem.style[attr] = 'rgb(' +\n\t\t\tMath.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +\n\t\t\tMath.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +\n\t\t\tMath.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';\n\t};\n});\n\n// Color Conversion functions from highlightFade\n// By Blair Mitchelmore\n// http://jquery.offput.ca/highlightFade/\n\n// Parse strings looking for color tuples [255,255,255]\nfunction getRGB(color) {\n\t\tvar result;\n\n\t\t// Check if we're already dealing with an array of colors\n\t\tif ( color && color.constructor == Array && color.length == 3 )\n\t\t\t\treturn color;\n\n\t\t// Look for rgb(num,num,num)\n\t\tif (result = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(color))\n\t\t\t\treturn [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];\n\n\t\t// Look for rgb(num%,num%,num%)\n\t\tif (result = /rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(color))\n\t\t\t\treturn [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];\n\n\t\t// Look for #a0b1c2\n\t\tif (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))\n\t\t\t\treturn [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];\n\n\t\t// Look for #fff\n\t\tif (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))\n\t\t\t\treturn [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];\n\n\t\t// Look for rgba(0, 0, 0, 0) == transparent in Safari 3\n\t\tif (result = /rgba\\(0, 0, 0, 0\\)/.exec(color))\n\t\t\t\treturn colors['transparent'];\n\n\t\t// Otherwise, we're most likely dealing with a named color\n\t\treturn colors[$.trim(color).toLowerCase()];\n}\n\nfunction getColor(elem, attr) {\n\t\tvar color;\n\n\t\tdo {\n\t\t\t\t// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css\n\t\t\t\tcolor = ($.curCSS || $.css)(elem, attr);\n\n\t\t\t\t// Keep going until we find an element that has color, or we hit the body\n\t\t\t\tif ( color != '' && color != 'transparent' || $.nodeName(elem, \"body\") )\n\t\t\t\t\t\tbreak;\n\n\t\t\t\tattr = \"backgroundColor\";\n\t\t} while ( elem = elem.parentNode );\n\n\t\treturn getRGB(color);\n};\n\n// Some named colors to work with\n// From Interface by Stefan Petre\n// http://interface.eyecon.ro/\n\nvar colors = {\n\taqua:[0,255,255],\n\tazure:[240,255,255],\n\tbeige:[245,245,220],\n\tblack:[0,0,0],\n\tblue:[0,0,255],\n\tbrown:[165,42,42],\n\tcyan:[0,255,255],\n\tdarkblue:[0,0,139],\n\tdarkcyan:[0,139,139],\n\tdarkgrey:[169,169,169],\n\tdarkgreen:[0,100,0],\n\tdarkkhaki:[189,183,107],\n\tdarkmagenta:[139,0,139],\n\tdarkolivegreen:[85,107,47],\n\tdarkorange:[255,140,0],\n\tdarkorchid:[153,50,204],\n\tdarkred:[139,0,0],\n\tdarksalmon:[233,150,122],\n\tdarkviolet:[148,0,211],\n\tfuchsia:[255,0,255],\n\tgold:[255,215,0],\n\tgreen:[0,128,0],\n\tindigo:[75,0,130],\n\tkhaki:[240,230,140],\n\tlightblue:[173,216,230],\n\tlightcyan:[224,255,255],\n\tlightgreen:[144,238,144],\n\tlightgrey:[211,211,211],\n\tlightpink:[255,182,193],\n\tlightyellow:[255,255,224],\n\tlime:[0,255,0],\n\tmagenta:[255,0,255],\n\tmaroon:[128,0,0],\n\tnavy:[0,0,128],\n\tolive:[128,128,0],\n\torange:[255,165,0],\n\tpink:[255,192,203],\n\tpurple:[128,0,128],\n\tviolet:[128,0,128],\n\tred:[255,0,0],\n\tsilver:[192,192,192],\n\twhite:[255,255,255],\n\tyellow:[255,255,0],\n\ttransparent: [255,255,255]\n};\n\n\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n\nvar classAnimationActions = ['add', 'remove', 'toggle'],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\nfunction getElementStyles() {\n\tvar style = document.defaultView\n\t\t\t? document.defaultView.getComputedStyle(this, null)\n\t\t\t: this.currentStyle,\n\t\tnewStyle = {},\n\t\tkey,\n\t\tcamelCase;\n\n\t// webkit enumerates style porperties\n\tif (style && style.length && style[0] && style[style[0]]) {\n\t\tvar len = style.length;\n\t\twhile (len--) {\n\t\t\tkey = style[len];\n\t\t\tif (typeof style[key] == 'string') {\n\t\t\t\tcamelCase = key.replace(/\\-(\\w)/g, function(all, letter){\n\t\t\t\t\treturn letter.toUpperCase();\n\t\t\t\t});\n\t\t\t\tnewStyle[camelCase] = style[key];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (key in style) {\n\t\t\tif (typeof style[key] === 'string') {\n\t\t\t\tnewStyle[key] = style[key];\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn newStyle;\n}\n\nfunction filterStyles(styles) {\n\tvar name, value;\n\tfor (name in styles) {\n\t\tvalue = styles[name];\n\t\tif (\n\t\t\t// ignore null and undefined values\n\t\t\tvalue == null ||\n\t\t\t// ignore functions (when does this occur?)\n\t\t\t$.isFunction(value) ||\n\t\t\t// shorthand styles that need to be expanded\n\t\t\tname in shorthandStyles ||\n\t\t\t// ignore scrollbars (break in IE)\n\t\t\t(/scrollbar/).test(name) ||\n\n\t\t\t// only colors or values that can be converted to numbers\n\t\t\t(!(/color/i).test(name) && isNaN(parseFloat(value)))\n\t\t) {\n\t\t\tdelete styles[name];\n\t\t}\n\t}\n\t\n\treturn styles;\n}\n\nfunction styleDifference(oldStyle, newStyle) {\n\tvar diff = { _: 0 }, // http://dev.jquery.com/ticket/5459\n\t\tname;\n\n\tfor (name in newStyle) {\n\t\tif (oldStyle[name] != newStyle[name]) {\n\t\t\tdiff[name] = newStyle[name];\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n$.effects.animateClass = function(value, duration, easing, callback) {\n\tif ($.isFunction(easing)) {\n\t\tcallback = easing;\n\t\teasing = null;\n\t}\n\n\treturn this.queue(function() {\n\t\tvar that = $(this),\n\t\t\toriginalStyleAttr = that.attr('style') || ' ',\n\t\t\toriginalStyle = filterStyles(getElementStyles.call(this)),\n\t\t\tnewStyle,\n\t\t\tclassName = that.attr('class') || \"\";\n\n\t\t$.each(classAnimationActions, function(i, action) {\n\t\t\tif (value[action]) {\n\t\t\t\tthat[action + 'Class'](value[action]);\n\t\t\t}\n\t\t});\n\t\tnewStyle = filterStyles(getElementStyles.call(this));\n\t\tthat.attr('class', className);\n\n\t\tthat.animate(styleDifference(originalStyle, newStyle), {\n\t\t\tqueue: false,\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tcomplete: function() {\n\t\t\t\t$.each(classAnimationActions, function(i, action) {\n\t\t\t\t\tif (value[action]) { that[action + 'Class'](value[action]); }\n\t\t\t\t});\n\t\t\t\t// work around bug in IE by clearing the cssText before setting it\n\t\t\t\tif (typeof that.attr('style') == 'object') {\n\t\t\t\t\tthat.attr('style').cssText = '';\n\t\t\t\t\tthat.attr('style').cssText = originalStyleAttr;\n\t\t\t\t} else {\n\t\t\t\t\tthat.attr('style', originalStyleAttr);\n\t\t\t\t}\n\t\t\t\tif (callback) { callback.apply(this, arguments); }\n\t\t\t\t$.dequeue( this );\n\t\t\t}\n\t\t});\n\t});\n};\n\n$.fn.extend({\n\t_addClass: $.fn.addClass,\n\taddClass: function(classNames, speed, easing, callback) {\n\t\treturn speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);\n\t},\n\n\t_removeClass: $.fn.removeClass,\n\tremoveClass: function(classNames,speed,easing,callback) {\n\t\treturn speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);\n\t},\n\n\t_toggleClass: $.fn.toggleClass,\n\ttoggleClass: function(classNames, force, speed, easing, callback) {\n\t\tif ( typeof force == \"boolean\" || force === undefined ) {\n\t\t\tif ( !speed ) {\n\t\t\t\t// without speed parameter;\n\t\t\t\treturn this._toggleClass(classNames, force);\n\t\t\t} else {\n\t\t\t\treturn $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);\n\t\t\t}\n\t\t} else {\n\t\t\t// without switch parameter;\n\t\t\treturn $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);\n\t\t}\n\t},\n\n\tswitchClass: function(remove,add,speed,easing,callback) {\n\t\treturn $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);\n\t}\n});\n\n\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n$.extend($.effects, {\n\tversion: \"1.8.24\",\n\n\t// Saves a set of properties in a data storage\n\tsave: function(element, set) {\n\t\tfor(var i=0; i < set.length; i++) {\n\t\t\tif(set[i] !== null) element.data(\"ec.storage.\"+set[i], element[0].style[set[i]]);\n\t\t}\n\t},\n\n\t// Restores a set of previously saved properties from a data storage\n\trestore: function(element, set) {\n\t\tfor(var i=0; i < set.length; i++) {\n\t\t\tif(set[i] !== null) element.css(set[i], element.data(\"ec.storage.\"+set[i]));\n\t\t}\n\t},\n\n\tsetMode: function(el, mode) {\n\t\tif (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle\n\t\treturn mode;\n\t},\n\n\tgetBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value\n\t\t// this should be a little more flexible in the future to handle a string & hash\n\t\tvar y, x;\n\t\tswitch (origin[0]) {\n\t\t\tcase 'top': y = 0; break;\n\t\t\tcase 'middle': y = 0.5; break;\n\t\t\tcase 'bottom': y = 1; break;\n\t\t\tdefault: y = origin[0] / original.height;\n\t\t};\n\t\tswitch (origin[1]) {\n\t\t\tcase 'left': x = 0; break;\n\t\t\tcase 'center': x = 0.5; break;\n\t\t\tcase 'right': x = 1; break;\n\t\t\tdefault: x = origin[1] / original.width;\n\t\t};\n\t\treturn {x: x, y: y};\n\t},\n\n\t// Wraps the element around a wrapper that copies position properties\n\tcreateWrapper: function(element) {\n\n\t\t// if the element is already wrapped, return it\n\t\tif (element.parent().is('.ui-effects-wrapper')) {\n\t\t\treturn element.parent();\n\t\t}\n\n\t\t// wrap the element\n\t\tvar props = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\t'float': element.css('float')\n\t\t\t},\n\t\t\twrapper = $('<div></div>')\n\t\t\t\t.addClass('ui-effects-wrapper')\n\t\t\t\t.css({\n\t\t\t\t\tfontSize: '100%',\n\t\t\t\t\tbackground: 'transparent',\n\t\t\t\t\tborder: 'none',\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0\n\t\t\t\t}),\n\t\t\tactive = document.activeElement;\n\n\t\t// support: Firefox\n\t\t// Firefox incorrectly exposes anonymous content\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\ttry {\n\t\t\tactive.id;\n\t\t} catch( e ) {\n\t\t\tactive = document.body;\n\t\t}\n\n\t\telement.wrap( wrapper );\n\n\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t$( active ).focus();\n\t\t}\n\t\t\n\t\twrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element\n\n\t\t// transfer positioning properties to the wrapper\n\t\tif (element.css('position') == 'static') {\n\t\t\twrapper.css({ position: 'relative' });\n\t\t\telement.css({ position: 'relative' });\n\t\t} else {\n\t\t\t$.extend(props, {\n\t\t\t\tposition: element.css('position'),\n\t\t\t\tzIndex: element.css('z-index')\n\t\t\t});\n\t\t\t$.each(['top', 'left', 'bottom', 'right'], function(i, pos) {\n\t\t\t\tprops[pos] = element.css(pos);\n\t\t\t\tif (isNaN(parseInt(props[pos], 10))) {\n\t\t\t\t\tprops[pos] = 'auto';\n\t\t\t\t}\n\t\t\t});\n\t\t\telement.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' });\n\t\t}\n\n\t\treturn wrapper.css(props).show();\n\t},\n\n\tremoveWrapper: function(element) {\n\t\tvar parent,\n\t\t\tactive = document.activeElement;\n\t\t\n\t\tif (element.parent().is('.ui-effects-wrapper')) {\n\t\t\tparent = element.parent().replaceWith(element);\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).focus();\n\t\t\t}\n\t\t\treturn parent;\n\t\t}\n\t\t\t\n\t\treturn element;\n\t},\n\n\tsetTransition: function(element, list, factor, value) {\n\t\tvalue = value || {};\n\t\t$.each(list, function(i, x){\n\t\t\tvar unit = element.cssUnit(x);\n\t\t\tif (unit[0] > 0) value[x] = unit[0] * factor + unit[1];\n\t\t});\n\t\treturn value;\n\t}\n});\n\n\nfunction _normalizeArguments(effect, options, speed, callback) {\n\t// shift params for method overloading\n\tif (typeof effect == 'object') {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = effect;\n\t\teffect = options.effect;\n\t}\n\tif ($.isFunction(options)) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n        if (typeof options == 'number' || $.fx.speeds[options]) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\tif ($.isFunction(speed)) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\toptions = options || {};\n\n\tspeed = speed || options.duration;\n\tspeed = $.fx.off ? 0 : typeof speed == 'number'\n\t\t? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default;\n\n\tcallback = callback || options.complete;\n\n\treturn [effect, options, speed, callback];\n}\n\nfunction standardSpeed( speed ) {\n\t// valid standard speeds\n\tif ( !speed || typeof speed === \"number\" || $.fx.speeds[ speed ] ) {\n\t\treturn true;\n\t}\n\t\n\t// invalid strings - treat as \"normal\" speed\n\tif ( typeof speed === \"string\" && !$.effects[ speed ] ) {\n\t\treturn true;\n\t}\n\t\n\treturn false;\n}\n\n$.fn.extend({\n\teffect: function(effect, options, speed, callback) {\n\t\tvar args = _normalizeArguments.apply(this, arguments),\n\t\t\t// TODO: make effects take actual parameters instead of a hash\n\t\t\targs2 = {\n\t\t\t\toptions: args[1],\n\t\t\t\tduration: args[2],\n\t\t\t\tcallback: args[3]\n\t\t\t},\n\t\t\tmode = args2.options.mode,\n\t\t\teffectMethod = $.effects[effect];\n\t\t\n\t\tif ( $.fx.off || !effectMethod ) {\n\t\t\t// delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args2.duration, args2.callback );\n\t\t\t} else {\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tif ( args2.callback ) {\n\t\t\t\t\t\targs2.callback.call( this );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn effectMethod.call(this, args2);\n\t},\n\n\t_show: $.fn.show,\n\tshow: function(speed) {\n\t\tif ( standardSpeed( speed ) ) {\n\t\t\treturn this._show.apply(this, arguments);\n\t\t} else {\n\t\t\tvar args = _normalizeArguments.apply(this, arguments);\n\t\t\targs[1].mode = 'show';\n\t\t\treturn this.effect.apply(this, args);\n\t\t}\n\t},\n\n\t_hide: $.fn.hide,\n\thide: function(speed) {\n\t\tif ( standardSpeed( speed ) ) {\n\t\t\treturn this._hide.apply(this, arguments);\n\t\t} else {\n\t\t\tvar args = _normalizeArguments.apply(this, arguments);\n\t\t\targs[1].mode = 'hide';\n\t\t\treturn this.effect.apply(this, args);\n\t\t}\n\t},\n\n\t// jQuery core overloads toggle and creates _toggle\n\t__toggle: $.fn.toggle,\n\ttoggle: function(speed) {\n\t\tif ( standardSpeed( speed ) || typeof speed === \"boolean\" || $.isFunction( speed ) ) {\n\t\t\treturn this.__toggle.apply(this, arguments);\n\t\t} else {\n\t\t\tvar args = _normalizeArguments.apply(this, arguments);\n\t\t\targs[1].mode = 'toggle';\n\t\t\treturn this.effect.apply(this, args);\n\t\t}\n\t},\n\n\t// helper functions\n\tcssUnit: function(key) {\n\t\tvar style = this.css(key), val = [];\n\t\t$.each( ['em','px','%','pt'], function(i, unit){\n\t\t\tif(style.indexOf(unit) > 0)\n\t\t\t\tval = [parseFloat(style), unit];\n\t\t});\n\t\treturn val;\n\t}\n});\n\n\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n});\n\n$.extend( baseEasings, {\n\tSine: function ( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function ( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function ( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n});\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < .5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\teaseIn( p * -2 + 2 ) / -2 + 1;\n\t};\n});\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.blind = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode\n\t\tvar direction = o.options.direction || 'vertical'; // Default direction\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\tvar wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper\n\t\tvar ref = (direction == 'vertical') ? 'height' : 'width';\n\t\tvar distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();\n\t\tif(mode == 'show') wrapper.css(ref, 0); // Shift\n\n\t\t// Animation\n\t\tvar animation = {};\n\t\tanimation[ref] = mode == 'show' ? distance : 0;\n\n\t\t// Animate\n\t\twrapper.animate(animation, o.duration, o.options.easing, function() {\n\t\t\tif(mode == 'hide') el.hide(); // Hide\n\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(el[0], arguments); // Callback\n\t\t\tel.dequeue();\n\t\t});\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.bounce = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode\n\t\tvar direction = o.options.direction || 'up'; // Default direction\n\t\tvar distance = o.options.distance || 20; // Default distance\n\t\tvar times = o.options.times || 5; // Default # of times\n\t\tvar speed = o.duration || 250; // Default speed per bounce\n\t\tif (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\t$.effects.createWrapper(el); // Create Wrapper\n\t\tvar ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';\n\t\tvar motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';\n\t\tvar distance = o.options.distance || (ref == 'top' ? el.outerHeight(true) / 3 : el.outerWidth(true) / 3);\n\t\tif (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift\n\t\tif (mode == 'hide') distance = distance / (times * 2);\n\t\tif (mode != 'hide') times--;\n\n\t\t// Animate\n\t\tif (mode == 'show') { // Show Bounce\n\t\t\tvar animation = {opacity: 1};\n\t\t\tanimation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;\n\t\t\tel.animate(animation, speed / 2, o.options.easing);\n\t\t\tdistance = distance / 2;\n\t\t\ttimes--;\n\t\t};\n\t\tfor (var i = 0; i < times; i++) { // Bounces\n\t\t\tvar animation1 = {}, animation2 = {};\n\t\t\tanimation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;\n\t\t\tanimation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;\n\t\t\tel.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);\n\t\t\tdistance = (mode == 'hide') ? distance * 2 : distance / 2;\n\t\t};\n\t\tif (mode == 'hide') { // Last Bounce\n\t\t\tvar animation = {opacity: 0};\n\t\t\tanimation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;\n\t\t\tel.animate(animation, speed / 2, o.options.easing, function(){\n\t\t\t\tel.hide(); // Hide\n\t\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\t\tif(o.callback) o.callback.apply(this, arguments); // Callback\n\t\t\t});\n\t\t} else {\n\t\t\tvar animation1 = {}, animation2 = {};\n\t\t\tanimation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;\n\t\t\tanimation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;\n\t\t\tel.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){\n\t\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\t\tif(o.callback) o.callback.apply(this, arguments); // Callback\n\t\t\t});\n\t\t};\n\t\tel.queue('fx', function() { el.dequeue(); });\n\t\tel.dequeue();\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.clip = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right','height','width'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode\n\t\tvar direction = o.options.direction || 'vertical'; // Default direction\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\tvar wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper\n\t\tvar animate = el[0].tagName == 'IMG' ? wrapper : el;\n\t\tvar ref = {\n\t\t\tsize: (direction == 'vertical') ? 'height' : 'width',\n\t\t\tposition: (direction == 'vertical') ? 'top' : 'left'\n\t\t};\n\t\tvar distance = (direction == 'vertical') ? animate.height() : animate.width();\n\t\tif(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift\n\n\t\t// Animation\n\t\tvar animation = {};\n\t\tanimation[ref.size] = mode == 'show' ? distance : 0;\n\t\tanimation[ref.position] = mode == 'show' ? 0 : distance / 2;\n\n\t\t// Animate\n\t\tanimate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {\n\t\t\tif(mode == 'hide') el.hide(); // Hide\n\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(el[0], arguments); // Callback\n\t\t\tel.dequeue();\n\t\t}});\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.drop = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right','opacity'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode\n\t\tvar direction = o.options.direction || 'left'; // Default Direction\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\t$.effects.createWrapper(el); // Create Wrapper\n\t\tvar ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';\n\t\tvar motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';\n\t\tvar distance = o.options.distance || (ref == 'top' ? el.outerHeight( true ) / 2 : el.outerWidth( true ) / 2);\n\t\tif (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift\n\n\t\t// Animation\n\t\tvar animation = {opacity: mode == 'show' ? 1 : 0};\n\t\tanimation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;\n\n\t\t// Animate\n\t\tel.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {\n\t\t\tif(mode == 'hide') el.hide(); // Hide\n\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(this, arguments); // Callback\n\t\t\tel.dequeue();\n\t\t}});\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.explode = function(o) {\n\n\treturn this.queue(function() {\n\n\tvar rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;\n\tvar cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;\n\n\to.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;\n\tvar el = $(this).show().css('visibility', 'hidden');\n\tvar offset = el.offset();\n\n\t//Substract the margins - not fixing the problem yet.\n\toffset.top -= parseInt(el.css(\"marginTop\"),10) || 0;\n\toffset.left -= parseInt(el.css(\"marginLeft\"),10) || 0;\n\n\tvar width = el.outerWidth(true);\n\tvar height = el.outerHeight(true);\n\n\tfor(var i=0;i<rows;i++) { // =\n\t\tfor(var j=0;j<cells;j++) { // ||\n\t\t\tel\n\t\t\t\t.clone()\n\t\t\t\t.appendTo('body')\n\t\t\t\t.wrap('<div></div>')\n\t\t\t\t.css({\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\tleft: -j*(width/cells),\n\t\t\t\t\ttop: -i*(height/rows)\n\t\t\t\t})\n\t\t\t\t.parent()\n\t\t\t\t.addClass('ui-effects-explode')\n\t\t\t\t.css({\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\twidth: width/cells,\n\t\t\t\t\theight: height/rows,\n\t\t\t\t\tleft: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0),\n\t\t\t\t\ttop: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0),\n\t\t\t\t\topacity: o.options.mode == 'show' ? 0 : 1\n\t\t\t\t}).animate({\n\t\t\t\t\tleft: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)),\n\t\t\t\t\ttop: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)),\n\t\t\t\t\topacity: o.options.mode == 'show' ? 1 : 0\n\t\t\t\t}, o.duration || 500);\n\t\t}\n\t}\n\n\t// Set a timeout, to call the callback approx. when the other animations have finished\n\tsetTimeout(function() {\n\n\t\to.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide();\n\t\t\t\tif(o.callback) o.callback.apply(el[0]); // Callback\n\t\t\t\tel.dequeue();\n\n\t\t\t\t$('div.ui-effects-explode').remove();\n\n\t}, o.duration || 500);\n\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.fade = function(o) {\n\treturn this.queue(function() {\n\t\tvar elem = $(this),\n\t\t\tmode = $.effects.setMode(elem, o.options.mode || 'hide');\n\n\t\telem.animate({ opacity: mode }, {\n\t\t\tqueue: false,\n\t\t\tduration: o.duration,\n\t\t\teasing: o.options.easing,\n\t\t\tcomplete: function() {\n\t\t\t\t(o.callback && o.callback.apply(this, arguments));\n\t\t\t\telem.dequeue();\n\t\t\t}\n\t\t});\n\t});\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.fold = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode\n\t\tvar size = o.options.size || 15; // Default fold size\n\t\tvar horizFirst = !(!o.options.horizFirst); // Ensure a boolean value\n\t\tvar duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2;\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\tvar wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper\n\t\tvar widthFirst = ((mode == 'show') != horizFirst);\n\t\tvar ref = widthFirst ? ['width', 'height'] : ['height', 'width'];\n\t\tvar distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];\n\t\tvar percent = /([0-9]+)%/.exec(size);\n\t\tif(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1];\n\t\tif(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift\n\n\t\t// Animation\n\t\tvar animation1 = {}, animation2 = {};\n\t\tanimation1[ref[0]] = mode == 'show' ? distance[0] : size;\n\t\tanimation2[ref[1]] = mode == 'show' ? distance[1] : 0;\n\n\t\t// Animate\n\t\twrapper.animate(animation1, duration, o.options.easing)\n\t\t.animate(animation2, duration, o.options.easing, function() {\n\t\t\tif(mode == 'hide') el.hide(); // Hide\n\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(el[0], arguments); // Callback\n\t\t\tel.dequeue();\n\t\t});\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.highlight = function(o) {\n\treturn this.queue(function() {\n\t\tvar elem = $(this),\n\t\t\tprops = ['backgroundImage', 'backgroundColor', 'opacity'],\n\t\t\tmode = $.effects.setMode(elem, o.options.mode || 'show'),\n\t\t\tanimation = {\n\t\t\t\tbackgroundColor: elem.css('backgroundColor')\n\t\t\t};\n\n\t\tif (mode == 'hide') {\n\t\t\tanimation.opacity = 0;\n\t\t}\n\n\t\t$.effects.save(elem, props);\n\t\telem\n\t\t\t.show()\n\t\t\t.css({\n\t\t\t\tbackgroundImage: 'none',\n\t\t\t\tbackgroundColor: o.options.color || '#ffff99'\n\t\t\t})\n\t\t\t.animate(animation, {\n\t\t\t\tqueue: false,\n\t\t\t\tduration: o.duration,\n\t\t\t\teasing: o.options.easing,\n\t\t\t\tcomplete: function() {\n\t\t\t\t\t(mode == 'hide' && elem.hide());\n\t\t\t\t\t$.effects.restore(elem, props);\n\t\t\t\t\t(mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));\n\t\t\t\t\t(o.callback && o.callback.apply(this, arguments));\n\t\t\t\t\telem.dequeue();\n\t\t\t\t}\n\t\t\t});\n\t});\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.pulsate = function(o) {\n\treturn this.queue(function() {\n\t\tvar elem = $(this),\n\t\t\tmode = $.effects.setMode(elem, o.options.mode || 'show'),\n\t\t\ttimes = ((o.options.times || 5) * 2) - 1,\n\t\t\tduration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2,\n\t\t\tisVisible = elem.is(':visible'),\n\t\t\tanimateTo = 0;\n\n\t\tif (!isVisible) {\n\t\t\telem.css('opacity', 0).show();\n\t\t\tanimateTo = 1;\n\t\t}\n\n\t\tif ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) {\n\t\t\ttimes--;\n\t\t}\n\n\t\tfor (var i = 0; i < times; i++) {\n\t\t\telem.animate({ opacity: animateTo }, duration, o.options.easing);\n\t\t\tanimateTo = (animateTo + 1) % 2;\n\t\t}\n\n\t\telem.animate({ opacity: animateTo }, duration, o.options.easing, function() {\n\t\t\tif (animateTo == 0) {\n\t\t\t\telem.hide();\n\t\t\t}\n\t\t\t(o.callback && o.callback.apply(this, arguments));\n\t\t});\n\n\t\telem\n\t\t\t.queue('fx', function() { elem.dequeue(); })\n\t\t\t.dequeue();\n\t});\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.puff = function(o) {\n\treturn this.queue(function() {\n\t\tvar elem = $(this),\n\t\t\tmode = $.effects.setMode(elem, o.options.mode || 'hide'),\n\t\t\tpercent = parseInt(o.options.percent, 10) || 150,\n\t\t\tfactor = percent / 100,\n\t\t\toriginal = { height: elem.height(), width: elem.width() };\n\n\t\t$.extend(o.options, {\n\t\t\tfade: true,\n\t\t\tmode: mode,\n\t\t\tpercent: mode == 'hide' ? percent : 100,\n\t\t\tfrom: mode == 'hide'\n\t\t\t\t? original\n\t\t\t\t: {\n\t\t\t\t\theight: original.height * factor,\n\t\t\t\t\twidth: original.width * factor\n\t\t\t\t}\n\t\t});\n\n\t\telem.effect('scale', o.options, o.duration, o.callback);\n\t\telem.dequeue();\n\t});\n};\n\n$.effects.scale = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this);\n\n\t\t// Set options\n\t\tvar options = $.extend(true, {}, o.options);\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode\n\t\tvar percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent\n\t\tvar direction = o.options.direction || 'both'; // Set default axis\n\t\tvar origin = o.options.origin; // The origin of the scaling\n\t\tif (mode != 'effect') { // Set default origin and restore for show/hide\n\t\t\toptions.origin = origin || ['middle','center'];\n\t\t\toptions.restore = true;\n\t\t}\n\t\tvar original = {height: el.height(), width: el.width()}; // Save original\n\t\tel.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state\n\n\t\t// Adjust\n\t\tvar factor = { // Set scaling factor\n\t\t\ty: direction != 'horizontal' ? (percent / 100) : 1,\n\t\t\tx: direction != 'vertical' ? (percent / 100) : 1\n\t\t};\n\t\tel.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state\n\n\t\tif (o.options.fade) { // Fade option to support puff\n\t\t\tif (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;};\n\t\t\tif (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;};\n\t\t};\n\n\t\t// Animation\n\t\toptions.from = el.from; options.to = el.to; options.mode = mode;\n\n\t\t// Animate\n\t\tel.effect('size', options, o.duration, o.callback);\n\t\tel.dequeue();\n\t});\n\n};\n\n$.effects.size = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity'];\n\t\tvar props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore\n\t\tvar props2 = ['width','height','overflow']; // Copy for children\n\t\tvar cProps = ['fontSize'];\n\t\tvar vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\n\t\tvar hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode\n\t\tvar restore = o.options.restore || false; // Default restore\n\t\tvar scale = o.options.scale || 'both'; // Default scale mode\n\t\tvar origin = o.options.origin; // The origin of the sizing\n\t\tvar original = {height: el.height(), width: el.width()}; // Save original\n\t\tel.from = o.options.from || original; // Default from state\n\t\tel.to = o.options.to || original; // Default to state\n\t\t// Adjust\n\t\tif (origin) { // Calculate baseline shifts\n\t\t\tvar baseline = $.effects.getBaseline(origin, original);\n\t\t\tel.from.top = (original.height - el.from.height) * baseline.y;\n\t\t\tel.from.left = (original.width - el.from.width) * baseline.x;\n\t\t\tel.to.top = (original.height - el.to.height) * baseline.y;\n\t\t\tel.to.left = (original.width - el.to.width) * baseline.x;\n\t\t};\n\t\tvar factor = { // Set scaling factor\n\t\t\tfrom: {y: el.from.height / original.height, x: el.from.width / original.width},\n\t\t\tto: {y: el.to.height / original.height, x: el.to.width / original.width}\n\t\t};\n\t\tif (scale == 'box' || scale == 'both') { // Scale the css box\n\t\t\tif (factor.from.y != factor.to.y) { // Vertical props scaling\n\t\t\t\tprops = props.concat(vProps);\n\t\t\t\tel.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);\n\t\t\t\tel.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);\n\t\t\t};\n\t\t\tif (factor.from.x != factor.to.x) { // Horizontal props scaling\n\t\t\t\tprops = props.concat(hProps);\n\t\t\t\tel.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);\n\t\t\t\tel.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);\n\t\t\t};\n\t\t};\n\t\tif (scale == 'content' || scale == 'both') { // Scale the content\n\t\t\tif (factor.from.y != factor.to.y) { // Vertical props scaling\n\t\t\t\tprops = props.concat(cProps);\n\t\t\t\tel.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);\n\t\t\t\tel.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);\n\t\t\t};\n\t\t};\n\t\t$.effects.save(el, restore ? props : props1); el.show(); // Save & Show\n\t\t$.effects.createWrapper(el); // Create Wrapper\n\t\tel.css('overflow','hidden').css(el.from); // Shift\n\n\t\t// Animate\n\t\tif (scale == 'content' || scale == 'both') { // Scale the children\n\t\t\tvProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size\n\t\t\thProps = hProps.concat(['marginLeft','marginRight']); // Add margins\n\t\t\tprops2 = props.concat(vProps).concat(hProps); // Concat\n\t\t\tel.find(\"*[width]\").each(function(){\n\t\t\t\tvar child = $(this);\n\t\t\t\tif (restore) $.effects.save(child, props2);\n\t\t\t\tvar c_original = {height: child.height(), width: child.width()}; // Save original\n\t\t\t\tchild.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x};\n\t\t\t\tchild.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x};\n\t\t\t\tif (factor.from.y != factor.to.y) { // Vertical props scaling\n\t\t\t\t\tchild.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);\n\t\t\t\t\tchild.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);\n\t\t\t\t};\n\t\t\t\tif (factor.from.x != factor.to.x) { // Horizontal props scaling\n\t\t\t\t\tchild.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);\n\t\t\t\t\tchild.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);\n\t\t\t\t};\n\t\t\t\tchild.css(child.from); // Shift children\n\t\t\t\tchild.animate(child.to, o.duration, o.options.easing, function(){\n\t\t\t\t\tif (restore) $.effects.restore(child, props2); // Restore children\n\t\t\t\t}); // Animate children\n\t\t\t});\n\t\t};\n\n\t\t// Animate\n\t\tel.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {\n\t\t\tif (el.to.opacity === 0) {\n\t\t\t\tel.css('opacity', el.from.opacity);\n\t\t\t}\n\t\t\tif(mode == 'hide') el.hide(); // Hide\n\t\t\t$.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(this, arguments); // Callback\n\t\t\tel.dequeue();\n\t\t}});\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.shake = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode\n\t\tvar direction = o.options.direction || 'left'; // Default direction\n\t\tvar distance = o.options.distance || 20; // Default distance\n\t\tvar times = o.options.times || 3; // Default # of times\n\t\tvar speed = o.duration || o.options.duration || 140; // Default speed per shake\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\t$.effects.createWrapper(el); // Create Wrapper\n\t\tvar ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';\n\t\tvar motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';\n\n\t\t// Animation\n\t\tvar animation = {}, animation1 = {}, animation2 = {};\n\t\tanimation[ref] = (motion == 'pos' ? '-=' : '+=')  + distance;\n\t\tanimation1[ref] = (motion == 'pos' ? '+=' : '-=')  + distance * 2;\n\t\tanimation2[ref] = (motion == 'pos' ? '-=' : '+=')  + distance * 2;\n\n\t\t// Animate\n\t\tel.animate(animation, speed, o.options.easing);\n\t\tfor (var i = 1; i < times; i++) { // Shakes\n\t\t\tel.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);\n\t\t};\n\t\tel.animate(animation1, speed, o.options.easing).\n\t\tanimate(animation, speed / 2, o.options.easing, function(){ // Last shake\n\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(this, arguments); // Callback\n\t\t});\n\t\tel.queue('fx', function() { el.dequeue(); });\n\t\tel.dequeue();\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.slide = function(o) {\n\n\treturn this.queue(function() {\n\n\t\t// Create element\n\t\tvar el = $(this), props = ['position','top','bottom','left','right'];\n\n\t\t// Set options\n\t\tvar mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode\n\t\tvar direction = o.options.direction || 'left'; // Default Direction\n\n\t\t// Adjust\n\t\t$.effects.save(el, props); el.show(); // Save & Show\n\t\t$.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper\n\t\tvar ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';\n\t\tvar motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';\n\t\tvar distance = o.options.distance || (ref == 'top' ? el.outerHeight( true ) : el.outerWidth( true ));\n\t\tif (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? \"-\" + distance : -distance) : distance); // Shift\n\n\t\t// Animation\n\t\tvar animation = {};\n\t\tanimation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;\n\n\t\t// Animate\n\t\tel.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {\n\t\t\tif(mode == 'hide') el.hide(); // Hide\n\t\t\t$.effects.restore(el, props); $.effects.removeWrapper(el); // Restore\n\t\t\tif(o.callback) o.callback.apply(this, arguments); // Callback\n\t\t\tel.dequeue();\n\t\t}});\n\n\t});\n\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.effects.transfer = function(o) {\n\treturn this.queue(function() {\n\t\tvar elem = $(this),\n\t\t\ttarget = $(o.options.to),\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top,\n\t\t\t\tleft: endPosition.left,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = elem.offset(),\n\t\t\ttransfer = $('<div class=\"ui-effects-transfer\"></div>')\n\t\t\t\t.appendTo(document.body)\n\t\t\t\t.addClass(o.options.className)\n\t\t\t\t.css({\n\t\t\t\t\ttop: startPosition.top,\n\t\t\t\t\tleft: startPosition.left,\n\t\t\t\t\theight: elem.innerHeight(),\n\t\t\t\t\twidth: elem.innerWidth(),\n\t\t\t\t\tposition: 'absolute'\n\t\t\t\t})\n\t\t\t\t.animate(animation, o.duration, o.options.easing, function() {\n\t\t\t\t\ttransfer.remove();\n\t\t\t\t\t(o.callback && o.callback.apply(elem[0], arguments));\n\t\t\t\t\telem.dequeue();\n\t\t\t\t});\n\t});\n};\n\n})(jQuery);\n\n(function( $, undefined ) {\n\n$.widget( \"ui.accordion\", {\n\toptions: {\n\t\tactive: 0,\n\t\tanimated: \"slide\",\n\t\tautoHeight: true,\n\t\tclearStyle: false,\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\tfillSpace: false,\n\t\theader: \"> li > :first-child,> :not(li):even\",\n\t\ticons: {\n\t\t\theader: \"ui-icon-triangle-1-e\",\n\t\t\theaderSelected: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tnavigation: false,\n\t\tnavigationFilter: function() {\n\t\t\treturn this.href.toLowerCase() === location.href.toLowerCase();\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tvar self = this,\n\t\t\toptions = self.options;\n\n\t\tself.running = 0;\n\n\t\tself.element\n\t\t\t.addClass( \"ui-accordion ui-widget ui-helper-reset\" )\n\t\t\t// in lack of child-selectors in CSS\n\t\t\t// we need to mark top-LIs in a UL-accordion for some IE-fix\n\t\t\t.children( \"li\" )\n\t\t\t\t.addClass( \"ui-accordion-li-fix\" );\n\n\t\tself.headers = self.element.find( options.header )\n\t\t\t.addClass( \"ui-accordion-header ui-helper-reset ui-state-default ui-corner-all\" )\n\t\t\t.bind( \"mouseenter.accordion\", function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\t\t})\n\t\t\t.bind( \"mouseleave.accordion\", function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\t})\n\t\t\t.bind( \"focus.accordion\", function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).addClass( \"ui-state-focus\" );\n\t\t\t})\n\t\t\t.bind( \"blur.accordion\", function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).removeClass( \"ui-state-focus\" );\n\t\t\t});\n\n\t\tself.headers.next()\n\t\t\t.addClass( \"ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom\" );\n\n\t\tif ( options.navigation ) {\n\t\t\tvar current = self.element.find( \"a\" ).filter( options.navigationFilter ).eq( 0 );\n\t\t\tif ( current.length ) {\n\t\t\t\tvar header = current.closest( \".ui-accordion-header\" );\n\t\t\t\tif ( header.length ) {\n\t\t\t\t\t// anchor within header\n\t\t\t\t\tself.active = header;\n\t\t\t\t} else {\n\t\t\t\t\t// anchor within content\n\t\t\t\t\tself.active = current.closest( \".ui-accordion-content\" ).prev();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tself.active = self._findActive( self.active || options.active )\n\t\t\t.addClass( \"ui-state-default ui-state-active\" )\n\t\t\t.toggleClass( \"ui-corner-all\" )\n\t\t\t.toggleClass( \"ui-corner-top\" );\n\t\tself.active.next().addClass( \"ui-accordion-content-active\" );\n\n\t\tself._createIcons();\n\t\tself.resize();\n\t\t\n\t\t// ARIA\n\t\tself.element.attr( \"role\", \"tablist\" );\n\n\t\tself.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.bind( \"keydown.accordion\", function( event ) {\n\t\t\t\treturn self._keydown( event );\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tself.headers\n\t\t\t.not( self.active || \"\" )\n\t\t\t.attr({\n\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\ttabIndex: -1\n\t\t\t})\n\t\t\t.next()\n\t\t\t\t.hide();\n\n\t\t// make sure at least one header is in the tab order\n\t\tif ( !self.active.length ) {\n\t\t\tself.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tself.active\n\t\t\t\t.attr({\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t});\n\t\t}\n\n\t\t// only need links in tab order for Safari\n\t\tif ( !$.browser.safari ) {\n\t\t\tself.headers.find( \"a\" ).attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\tif ( options.event ) {\n\t\t\tself.headers.bind( options.event.split(\" \").join(\".accordion \") + \".accordion\", function(event) {\n\t\t\t\tself._clickHandler.call( self, event, this );\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t\t}\n\t},\n\n\t_createIcons: function() {\n\t\tvar options = this.options;\n\t\tif ( options.icons ) {\n\t\t\t$( \"<span></span>\" )\n\t\t\t\t.addClass( \"ui-icon \" + options.icons.header )\n\t\t\t\t.prependTo( this.headers );\n\t\t\tthis.active.children( \".ui-icon\" )\n\t\t\t\t.toggleClass(options.icons.header)\n\t\t\t\t.toggleClass(options.icons.headerSelected);\n\t\t\tthis.element.addClass( \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis.headers.children( \".ui-icon\" ).remove();\n\t\tthis.element.removeClass( \"ui-accordion-icons\" );\n\t},\n\n\tdestroy: function() {\n\t\tvar options = this.options;\n\n\t\tthis.element\n\t\t\t.removeClass( \"ui-accordion ui-widget ui-helper-reset\" )\n\t\t\t.removeAttr( \"role\" );\n\n\t\tthis.headers\n\t\t\t.unbind( \".accordion\" )\n\t\t\t.removeClass( \"ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-expanded\" )\n\t\t\t.removeAttr( \"aria-selected\" )\n\t\t\t.removeAttr( \"tabIndex\" );\n\n\t\tthis.headers.find( \"a\" ).removeAttr( \"tabIndex\" );\n\t\tthis._destroyIcons();\n\t\tvar contents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeClass( \"ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled\" );\n\t\tif ( options.autoHeight || options.fillHeight ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\n\t\treturn $.Widget.prototype.destroy.call( this );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\t\t\t\n\t\tif ( key == \"active\" ) {\n\t\t\tthis.activate( value );\n\t\t}\n\t\tif ( key == \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t\t// #5332 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tif ( key == \"disabled\" ) {\n\t\t\tthis.headers.add(this.headers.next())\n\t\t\t\t[ value ? \"addClass\" : \"removeClass\" ](\n\t\t\t\t\t\"ui-accordion-disabled ui-state-disabled\" );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( this.options.disabled || event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase keyCode.RIGHT:\n\t\t\tcase keyCode.DOWN:\n\t\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.LEFT:\n\t\t\tcase keyCode.UP:\n\t\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\t\tbreak;\n\t\t\tcase keyCode.SPACE:\n\t\t\tcase keyCode.ENTER:\n\t\t\t\tthis._clickHandler( { target: event.target }, event.target );\n\t\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\ttoFocus.focus();\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\tresize: function() {\n\t\tvar options = this.options,\n\t\t\tmaxHeight;\n\n\t\tif ( options.fillSpace ) {\n\t\t\tif ( $.browser.msie ) {\n\t\t\t\tvar defOverflow = this.element.parent().css( \"overflow\" );\n\t\t\t\tthis.element.parent().css( \"overflow\", \"hidden\");\n\t\t\t}\n\t\t\tmaxHeight = this.element.parent().height();\n\t\t\tif ($.browser.msie) {\n\t\t\t\tthis.element.parent().css( \"overflow\", defOverflow );\n\t\t\t}\n\n\t\t\tthis.headers.each(function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t});\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each(function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t})\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( options.autoHeight ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each(function() {\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t\t})\n\t\t\t\t.height( maxHeight );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tactivate: function( index ) {\n\t\t// TODO this gets called on init, changing the option without an explicit call for that\n\t\tthis.options.active = index;\n\t\t// call clickHandler with custom event\n\t\tvar active = this._findActive( index )[ 0 ];\n\t\tthis._clickHandler( { target: active }, active );\n\n\t\treturn this;\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn selector\n\t\t\t? typeof selector === \"number\"\n\t\t\t\t? this.headers.filter( \":eq(\" + selector + \")\" )\n\t\t\t\t: this.headers.not( this.headers.not( selector ) )\n\t\t\t: selector === false\n\t\t\t\t? $( [] )\n\t\t\t\t: this.headers.filter( \":eq(0)\" );\n\t},\n\n\t// TODO isn't event.target enough? why the separate target argument?\n\t_clickHandler: function( event, target ) {\n\t\tvar options = this.options;\n\t\tif ( options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// called only when using activate(false) to close all parts programmatically\n\t\tif ( !event.target ) {\n\t\t\tif ( !options.collapsible ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.active\n\t\t\t\t.removeClass( \"ui-state-active ui-corner-top\" )\n\t\t\t\t.addClass( \"ui-state-default ui-corner-all\" )\n\t\t\t\t.children( \".ui-icon\" )\n\t\t\t\t\t.removeClass( options.icons.headerSelected )\n\t\t\t\t\t.addClass( options.icons.header );\n\t\t\tthis.active.next().addClass( \"ui-accordion-content-active\" );\n\t\t\tvar toHide = this.active.next(),\n\t\t\t\tdata = {\n\t\t\t\t\toptions: options,\n\t\t\t\t\tnewHeader: $( [] ),\n\t\t\t\t\toldHeader: options.active,\n\t\t\t\t\tnewContent: $( [] ),\n\t\t\t\t\toldContent: toHide\n\t\t\t\t},\n\t\t\t\ttoShow = ( this.active = $( [] ) );\n\t\t\tthis._toggle( toShow, toHide, data );\n\t\t\treturn;\n\t\t}\n\n\t\t// get the click target\n\t\tvar clicked = $( event.currentTarget || target ),\n\t\t\tclickedIsActive = clicked[0] === this.active[0];\n\n\t\t// TODO the option is changed, is that correct?\n\t\t// TODO if it is correct, shouldn't that happen after determining that the click is valid?\n\t\toptions.active = options.collapsible && clickedIsActive ?\n\t\t\tfalse :\n\t\t\tthis.headers.index( clicked );\n\n\t\t// if animations are still active, or the active header is the target, ignore click\n\t\tif ( this.running || ( !options.collapsible && clickedIsActive ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// find elements to show and hide\n\t\tvar active = this.active,\n\t\t\ttoShow = clicked.next(),\n\t\t\ttoHide = this.active.next(),\n\t\t\tdata = {\n\t\t\t\toptions: options,\n\t\t\t\tnewHeader: clickedIsActive && options.collapsible ? $([]) : clicked,\n\t\t\t\toldHeader: this.active,\n\t\t\t\tnewContent: clickedIsActive && options.collapsible ? $([]) : toShow,\n\t\t\t\toldContent: toHide\n\t\t\t},\n\t\t\tdown = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );\n\n\t\t// when the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $([]) : clicked;\n\t\tthis._toggle( toShow, toHide, data, clickedIsActive, down );\n\n\t\t// switch classes\n\t\tactive\n\t\t\t.removeClass( \"ui-state-active ui-corner-top\" )\n\t\t\t.addClass( \"ui-state-default ui-corner-all\" )\n\t\t\t.children( \".ui-icon\" )\n\t\t\t\t.removeClass( options.icons.headerSelected )\n\t\t\t\t.addClass( options.icons.header );\n\t\tif ( !clickedIsActive ) {\n\t\t\tclicked\n\t\t\t\t.removeClass( \"ui-state-default ui-corner-all\" )\n\t\t\t\t.addClass( \"ui-state-active ui-corner-top\" )\n\t\t\t\t.children( \".ui-icon\" )\n\t\t\t\t\t.removeClass( options.icons.header )\n\t\t\t\t\t.addClass( options.icons.headerSelected );\n\t\t\tclicked\n\t\t\t\t.next()\n\t\t\t\t.addClass( \"ui-accordion-content-active\" );\n\t\t}\n\n\t\treturn;\n\t},\n\n\t_toggle: function( toShow, toHide, data, clickedIsActive, down ) {\n\t\tvar self = this,\n\t\t\toptions = self.options;\n\n\t\tself.toShow = toShow;\n\t\tself.toHide = toHide;\n\t\tself.data = data;\n\n\t\tvar complete = function() {\n\t\t\tif ( !self ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn self._completed.apply( self, arguments );\n\t\t};\n\n\t\t// trigger changestart event\n\t\tself._trigger( \"changestart\", null, self.data );\n\n\t\t// count elements to animate\n\t\tself.running = toHide.size() === 0 ? toShow.size() : toHide.size();\n\n\t\tif ( options.animated ) {\n\t\t\tvar animOptions = {};\n\n\t\t\tif ( options.collapsible && clickedIsActive ) {\n\t\t\t\tanimOptions = {\n\t\t\t\t\ttoShow: $( [] ),\n\t\t\t\t\ttoHide: toHide,\n\t\t\t\t\tcomplete: complete,\n\t\t\t\t\tdown: down,\n\t\t\t\t\tautoHeight: options.autoHeight || options.fillSpace\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tanimOptions = {\n\t\t\t\t\ttoShow: toShow,\n\t\t\t\t\ttoHide: toHide,\n\t\t\t\t\tcomplete: complete,\n\t\t\t\t\tdown: down,\n\t\t\t\t\tautoHeight: options.autoHeight || options.fillSpace\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( !options.proxied ) {\n\t\t\t\toptions.proxied = options.animated;\n\t\t\t}\n\n\t\t\tif ( !options.proxiedDuration ) {\n\t\t\t\toptions.proxiedDuration = options.duration;\n\t\t\t}\n\n\t\t\toptions.animated = $.isFunction( options.proxied ) ?\n\t\t\t\toptions.proxied( animOptions ) :\n\t\t\t\toptions.proxied;\n\n\t\t\toptions.duration = $.isFunction( options.proxiedDuration ) ?\n\t\t\t\toptions.proxiedDuration( animOptions ) :\n\t\t\t\toptions.proxiedDuration;\n\n\t\t\tvar animations = $.ui.accordion.animations,\n\t\t\t\tduration = options.duration,\n\t\t\t\teasing = options.animated;\n\n\t\t\tif ( easing && !animations[ easing ] && !$.easing[ easing ] ) {\n\t\t\t\teasing = \"slide\";\n\t\t\t}\n\t\t\tif ( !animations[ easing ] ) {\n\t\t\t\tanimations[ easing ] = function( options ) {\n\t\t\t\t\tthis.slide( options, {\n\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\tduration: duration || 700\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tanimations[ easing ]( animOptions );\n\t\t} else {\n\t\t\tif ( options.collapsible && clickedIsActive ) {\n\t\t\t\ttoShow.toggle();\n\t\t\t} else {\n\t\t\t\ttoHide.hide();\n\t\t\t\ttoShow.show();\n\t\t\t}\n\n\t\t\tcomplete( true );\n\t\t}\n\n\t\t// TODO assert that the blur and focus triggers are really necessary, remove otherwise\n\t\ttoHide.prev()\n\t\t\t.attr({\n\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\ttabIndex: -1\n\t\t\t})\n\t\t\t.blur();\n\t\ttoShow.prev()\n\t\t\t.attr({\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t})\n\t\t\t.focus();\n\t},\n\n\t_completed: function( cancel ) {\n\t\tthis.running = cancel ? 0 : --this.running;\n\t\tif ( this.running ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.options.clearStyle ) {\n\t\t\tthis.toShow.add( this.toHide ).css({\n\t\t\t\theight: \"\",\n\t\t\t\toverflow: \"\"\n\t\t\t});\n\t\t}\n\n\t\t// other classes are removed before the animation; this one needs to stay until completed\n\t\tthis.toHide.removeClass( \"ui-accordion-content-active\" );\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( this.toHide.length ) {\n\t\t\tthis.toHide.parent()[0].className = this.toHide.parent()[0].className;\n\t\t}\n\n\t\tthis._trigger( \"change\", null, this.data );\n\t}\n});\n\n$.extend( $.ui.accordion, {\n\tversion: \"1.8.24\",\n\tanimations: {\n\t\tslide: function( options, additions ) {\n\t\t\toptions = $.extend({\n\t\t\t\teasing: \"swing\",\n\t\t\t\tduration: 300\n\t\t\t}, options, additions );\n\t\t\tif ( !options.toHide.size() ) {\n\t\t\t\toptions.toShow.animate({\n\t\t\t\t\theight: \"show\",\n\t\t\t\t\tpaddingTop: \"show\",\n\t\t\t\t\tpaddingBottom: \"show\"\n\t\t\t\t}, options );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !options.toShow.size() ) {\n\t\t\t\toptions.toHide.animate({\n\t\t\t\t\theight: \"hide\",\n\t\t\t\t\tpaddingTop: \"hide\",\n\t\t\t\t\tpaddingBottom: \"hide\"\n\t\t\t\t}, options );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar overflow = options.toShow.css( \"overflow\" ),\n\t\t\t\tpercentDone = 0,\n\t\t\t\tshowProps = {},\n\t\t\t\thideProps = {},\n\t\t\t\tfxAttrs = [ \"height\", \"paddingTop\", \"paddingBottom\" ],\n\t\t\t\toriginalWidth;\n\t\t\t// fix width before calculating height of hidden element\n\t\t\tvar s = options.toShow;\n\t\t\toriginalWidth = s[0].style.width;\n\t\t\ts.width( s.parent().width()\n\t\t\t\t- parseFloat( s.css( \"paddingLeft\" ) )\n\t\t\t\t- parseFloat( s.css( \"paddingRight\" ) )\n\t\t\t\t- ( parseFloat( s.css( \"borderLeftWidth\" ) ) || 0 )\n\t\t\t\t- ( parseFloat( s.css( \"borderRightWidth\" ) ) || 0 ) );\n\n\t\t\t$.each( fxAttrs, function( i, prop ) {\n\t\t\t\thideProps[ prop ] = \"hide\";\n\n\t\t\t\tvar parts = ( \"\" + $.css( options.toShow[0], prop ) ).match( /^([\\d+-.]+)(.*)$/ );\n\t\t\t\tshowProps[ prop ] = {\n\t\t\t\t\tvalue: parts[ 1 ],\n\t\t\t\t\tunit: parts[ 2 ] || \"px\"\n\t\t\t\t};\n\t\t\t});\n\t\t\toptions.toShow.css({ height: 0, overflow: \"hidden\" }).show();\n\t\t\toptions.toHide\n\t\t\t\t.filter( \":hidden\" )\n\t\t\t\t\t.each( options.complete )\n\t\t\t\t.end()\n\t\t\t\t.filter( \":visible\" )\n\t\t\t\t.animate( hideProps, {\n\t\t\t\tstep: function( now, settings ) {\n\t\t\t\t\t// only calculate the percent when animating height\n\t\t\t\t\t// IE gets very inconsistent results when animating elements\n\t\t\t\t\t// with small values, which is common for padding\n\t\t\t\t\tif ( settings.prop == \"height\" ) {\n\t\t\t\t\t\tpercentDone = ( settings.end - settings.start === 0 ) ? 0 :\n\t\t\t\t\t\t\t( settings.now - settings.start ) / ( settings.end - settings.start );\n\t\t\t\t\t}\n\n\t\t\t\t\toptions.toShow[ 0 ].style[ settings.prop ] =\n\t\t\t\t\t\t( percentDone * showProps[ settings.prop ].value )\n\t\t\t\t\t\t+ showProps[ settings.prop ].unit;\n\t\t\t\t},\n\t\t\t\tduration: options.duration,\n\t\t\t\teasing: options.easing,\n\t\t\t\tcomplete: function() {\n\t\t\t\t\tif ( !options.autoHeight ) {\n\t\t\t\t\t\toptions.toShow.css( \"height\", \"\" );\n\t\t\t\t\t}\n\t\t\t\t\toptions.toShow.css({\n\t\t\t\t\t\twidth: originalWidth,\n\t\t\t\t\t\toverflow: overflow\n\t\t\t\t\t});\n\t\t\t\t\toptions.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tbounceslide: function( options ) {\n\t\t\tthis.slide( options, {\n\t\t\t\teasing: options.down ? \"easeOutBounce\" : \"swing\",\n\t\t\t\tduration: options.down ? 1000 : 200\n\t\t\t});\n\t\t}\n\t}\n});\n\n})( jQuery );\n\n(function( $, undefined ) {\n\n// used to prevent race conditions with remote data sources\nvar requestIndex = 0;\n\n$.widget( \"ui.autocomplete\", {\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null\n\t},\n\n\tpending: 0,\n\n\t_create: function() {\n\t\tvar self = this,\n\t\t\tdoc = this.element[ 0 ].ownerDocument,\n\t\t\tsuppressKeyPress;\n\t\tthis.isMultiLine = this.element.is( \"textarea\" );\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-autocomplete-input\" )\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t// TODO verify these actually work as intended\n\t\t\t.attr({\n\t\t\t\trole: \"textbox\",\n\t\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\t\"aria-haspopup\": \"true\"\n\t\t\t})\n\t\t\t.bind( \"keydown.autocomplete\", function( event ) {\n\t\t\t\tif ( self.options.disabled || self.element.propAttr( \"readOnly\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tself._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tself._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tself._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tself._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\t\t\t\tcase keyCode.NUMPAD_ENTER:\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( self.menu.active ) {\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\t//passthrough - ENTER and TAB both select the current element\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( !self.menu.active ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tself.menu.select( event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tself.element.val( self.term );\n\t\t\t\t\tself.close( event );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// keypress is triggered before the input value is changed\n\t\t\t\t\tclearTimeout( self.searching );\n\t\t\t\t\tself.searching = setTimeout(function() {\n\t\t\t\t\t\t// only search if the value has changed\n\t\t\t\t\t\tif ( self.term != self.element.val() ) {\n\t\t\t\t\t\t\tself.selectedItem = null;\n\t\t\t\t\t\t\tself.search( null, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, self.options.delay );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.bind( \"keypress.autocomplete\", function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.bind( \"focus.autocomplete\", function() {\n\t\t\t\tif ( self.options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tself.selectedItem = null;\n\t\t\t\tself.previous = self.element.val();\n\t\t\t})\n\t\t\t.bind( \"blur.autocomplete\", function( event ) {\n\t\t\t\tif ( self.options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( self.searching );\n\t\t\t\t// clicks on the menu (or a button to trigger a search) will cause a blur event\n\t\t\t\tself.closing = setTimeout(function() {\n\t\t\t\t\tself.close( event );\n\t\t\t\t\tself._change( event );\n\t\t\t\t}, 150 );\n\t\t\t});\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul></ul>\" )\n\t\t\t.addClass( \"ui-autocomplete\" )\n\t\t\t.appendTo( $( this.options.appendTo || \"body\", doc )[0] )\n\t\t\t// prevent the close-on-blur in case of a \"slow\" click on the menu (long mousedown)\n\t\t\t.mousedown(function( event ) {\n\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\n\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\n\t\t\t\t// so we have to track the next mousedown and close the menu if\n\t\t\t\t// the user clicks somewhere outside of the autocomplete\n\t\t\t\tvar menuElement = self.menu.element[ 0 ];\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item\" ).length ) {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t$( document ).one( 'mousedown', function( event ) {\n\t\t\t\t\t\t\tif ( event.target !== self.element[ 0 ] &&\n\t\t\t\t\t\t\t\tevent.target !== menuElement &&\n\t\t\t\t\t\t\t\t!$.ui.contains( menuElement, event.target ) ) {\n\t\t\t\t\t\t\t\tself.close();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1 );\n\t\t\t\t}\n\n\t\t\t\t// use another timeout to make sure the blur-event-handler on the input was already triggered\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tclearTimeout( self.closing );\n\t\t\t\t}, 13);\n\t\t\t})\n\t\t\t.menu({\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"item.autocomplete\" );\n\t\t\t\t\tif ( false !== self._trigger( \"focus\", event, { item: item } ) ) {\n\t\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\t\tif ( /^key/.test(event.originalEvent.type) ) {\n\t\t\t\t\t\t\tself.element.val( item.value );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselected: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"item.autocomplete\" ),\n\t\t\t\t\t\tprevious = self.previous;\n\n\t\t\t\t\t// only trigger when focus was lost (click on menu)\n\t\t\t\t\tif ( self.element[0] !== doc.activeElement ) {\n\t\t\t\t\t\tself.element.focus();\n\t\t\t\t\t\tself.previous = previous;\n\t\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tself.previous = previous;\n\t\t\t\t\t\t\tself.selectedItem = item;\n\t\t\t\t\t\t}, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( false !== self._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\t\tself.element.val( item.value );\n\t\t\t\t\t}\n\t\t\t\t\t// reset the term after the select event\n\t\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\t\tself.term = self.element.val();\n\n\t\t\t\t\tself.close( event );\n\t\t\t\t\tself.selectedItem = item;\n\t\t\t\t},\n\t\t\t\tblur: function( event, ui ) {\n\t\t\t\t\t// don't set the value of the text field if it's already correct\n\t\t\t\t\t// this prevents moving the cursor unnecessarily\n\t\t\t\t\tif ( self.menu.element.is(\":visible\") &&\n\t\t\t\t\t\t( self.element.val() !== self.term ) ) {\n\t\t\t\t\t\tself.element.val( self.term );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.zIndex( this.element.zIndex() + 1 )\n\t\t\t// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781\n\t\t\t.css({ top: 0, left: 0 })\n\t\t\t.hide()\n\t\t\t.data( \"menu\" );\n\t\tif ( $.fn.bgiframe ) {\n\t\t\t this.menu.element.bgiframe();\n\t\t}\n\t\t// turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tself.beforeunloadHandler = function() {\n\t\t\tself.element.removeAttr( \"autocomplete\" );\n\t\t};\n\t\t$( window ).bind( \"beforeunload\", self.beforeunloadHandler );\n\t},\n\n\tdestroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-autocomplete-input\" )\n\t\t\t.removeAttr( \"autocomplete\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-autocomplete\" )\n\t\t\t.removeAttr( \"aria-haspopup\" );\n\t\tthis.menu.element.remove();\n\t\t$( window ).unbind( \"beforeunload\", this.beforeunloadHandler );\n\t\t$.Widget.prototype.destroy.call( this );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( $( value || \"body\", this.element[0].ownerDocument )[0] )\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_initSource: function() {\n\t\tvar self = this,\n\t\t\tarray,\n\t\t\turl;\n\t\tif ( $.isArray(this.options.source) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter(array, request.term) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( self.xhr ) {\n\t\t\t\t\tself.xhr.abort();\n\t\t\t\t}\n\t\t\t\tself.xhr = $.ajax({\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data, status ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this.element.val();\n\n\t\t// always save the actual value, not the one passed as an argument\n\t\tthis.term = this.element.val();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tclearTimeout( this.closing );\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis.element.addClass( \"ui-autocomplete-loading\" );\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar that = this,\n\t\t\tindex = ++requestIndex;\n\n\t\treturn function( content ) {\n\t\t\tif ( index === requestIndex ) {\n\t\t\t\tthat.__response( content );\n\t\t\t}\n\n\t\t\tthat.pending--;\n\t\t\tif ( !that.pending ) {\n\t\t\t\tthat.element.removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t};\n\t},\n\n\t__response: function( content ) {\n\t\tif ( !this.options.disabled && content && content.length ) {\n\t\t\tcontent = this._normalize( content );\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tclearTimeout( this.closing );\n\t\tif ( this.menu.element.is(\":visible\") ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.deactivate();\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\t\n\t_change: function( event ) {\n\t\tif ( this.previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[0].label && items[0].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function(item) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend({\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t}, item );\n\t\t});\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element\n\t\t\t.empty()\n\t\t\t.zIndex( this.element.zIndex() + 1 );\n\t\tthis._renderMenu( ul, items );\n\t\t// TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate\n\t\tthis.menu.deactivate();\n\t\tthis.menu.refresh();\n\n\t\t// size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend({\n\t\t\tof: this.element\n\t\t}, this.options.position ));\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next( new $.Event(\"mouseover\") );\n\t\t}\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar self = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tself._renderItem( ul, item );\n\t\t});\n\t},\n\n\t_renderItem: function( ul, item) {\n\t\treturn $( \"<li></li>\" )\n\t\t\t.data( \"item.autocomplete\", item )\n\t\t\t.append( $( \"<a></a>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is(\":visible\") ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.first() && /^previous/.test(direction) ||\n\t\t\t\tthis.menu.last() && /^next/.test(direction) ) {\n\t\t\tthis.element.val( this.term );\n\t\t\tthis.menu.deactivate();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n});\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n\t},\n\tfilter: function(array, term) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), \"i\" );\n\t\treturn $.grep( array, function(value) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t});\n\t}\n});\n\n}( jQuery ));\n\n/*\n * jQuery UI Menu (not officially released)\n * \n * This widget isn't yet finished and the API is subject to change. We plan to finish\n * it for the next release. You're welcome to give it a try anyway and give us feedback,\n * as long as you're okay with migrating your code later on. We can help with that, too.\n *\n * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)\n * Licensed under the MIT license.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Menu\n *\n * Depends:\n *\tjquery.ui.core.js\n *  jquery.ui.widget.js\n */\n(function($) {\n\n$.widget(\"ui.menu\", {\n\t_create: function() {\n\t\tvar self = this;\n\t\tthis.element\n\t\t\t.addClass(\"ui-menu ui-widget ui-widget-content ui-corner-all\")\n\t\t\t.attr({\n\t\t\t\trole: \"listbox\",\n\t\t\t\t\"aria-activedescendant\": \"ui-active-menuitem\"\n\t\t\t})\n\t\t\t.click(function( event ) {\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item a\" ).length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// temporary\n\t\t\t\tevent.preventDefault();\n\t\t\t\tself.select( event );\n\t\t\t});\n\t\tthis.refresh();\n\t},\n\t\n\trefresh: function() {\n\t\tvar self = this;\n\n\t\t// don't refresh list items that are already adapted\n\t\tvar items = this.element.children(\"li:not(.ui-menu-item):has(a)\")\n\t\t\t.addClass(\"ui-menu-item\")\n\t\t\t.attr(\"role\", \"menuitem\");\n\t\t\n\t\titems.children(\"a\")\n\t\t\t.addClass(\"ui-corner-all\")\n\t\t\t.attr(\"tabindex\", -1)\n\t\t\t// mouseenter doesn't work with event delegation\n\t\t\t.mouseenter(function( event ) {\n\t\t\t\tself.activate( event, $(this).parent() );\n\t\t\t})\n\t\t\t.mouseleave(function() {\n\t\t\t\tself.deactivate();\n\t\t\t});\n\t},\n\n\tactivate: function( event, item ) {\n\t\tthis.deactivate();\n\t\tif (this.hasScroll()) {\n\t\t\tvar offset = item.offset().top - this.element.offset().top,\n\t\t\t\tscroll = this.element.scrollTop(),\n\t\t\t\telementHeight = this.element.height();\n\t\t\tif (offset < 0) {\n\t\t\t\tthis.element.scrollTop( scroll + offset);\n\t\t\t} else if (offset >= elementHeight) {\n\t\t\t\tthis.element.scrollTop( scroll + offset - elementHeight + item.height());\n\t\t\t}\n\t\t}\n\t\tthis.active = item.eq(0)\n\t\t\t.children(\"a\")\n\t\t\t\t.addClass(\"ui-state-hover\")\n\t\t\t\t.attr(\"id\", \"ui-active-menuitem\")\n\t\t\t.end();\n\t\tthis._trigger(\"focus\", event, { item: item });\n\t},\n\n\tdeactivate: function() {\n\t\tif (!this.active) { return; }\n\n\t\tthis.active.children(\"a\")\n\t\t\t.removeClass(\"ui-state-hover\")\n\t\t\t.removeAttr(\"id\");\n\t\tthis._trigger(\"blur\");\n\t\tthis.active = null;\n\t},\n\n\tnext: function(event) {\n\t\tthis.move(\"next\", \".ui-menu-item:first\", event);\n\t},\n\n\tprevious: function(event) {\n\t\tthis.move(\"prev\", \".ui-menu-item:last\", event);\n\t},\n\n\tfirst: function() {\n\t\treturn this.active && !this.active.prevAll(\".ui-menu-item\").length;\n\t},\n\n\tlast: function() {\n\t\treturn this.active && !this.active.nextAll(\".ui-menu-item\").length;\n\t},\n\n\tmove: function(direction, edge, event) {\n\t\tif (!this.active) {\n\t\t\tthis.activate(event, this.element.children(edge));\n\t\t\treturn;\n\t\t}\n\t\tvar next = this.active[direction + \"All\"](\".ui-menu-item\").eq(0);\n\t\tif (next.length) {\n\t\t\tthis.activate(event, next);\n\t\t} else {\n\t\t\tthis.activate(event, this.element.children(edge));\n\t\t}\n\t},\n\n\t// TODO merge with previousPage\n\tnextPage: function(event) {\n\t\tif (this.hasScroll()) {\n\t\t\t// TODO merge with no-scroll-else\n\t\t\tif (!this.active || this.last()) {\n\t\t\t\tthis.activate(event, this.element.children(\".ui-menu-item:first\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar base = this.active.offset().top,\n\t\t\t\theight = this.element.height(),\n\t\t\t\tresult = this.element.children(\".ui-menu-item\").filter(function() {\n\t\t\t\t\tvar close = $(this).offset().top - base - height + $(this).height();\n\t\t\t\t\t// TODO improve approximation\n\t\t\t\t\treturn close < 10 && close > -10;\n\t\t\t\t});\n\n\t\t\t// TODO try to catch this earlier when scrollTop indicates the last page anyway\n\t\t\tif (!result.length) {\n\t\t\t\tresult = this.element.children(\".ui-menu-item:last\");\n\t\t\t}\n\t\t\tthis.activate(event, result);\n\t\t} else {\n\t\t\tthis.activate(event, this.element.children(\".ui-menu-item\")\n\t\t\t\t.filter(!this.active || this.last() ? \":first\" : \":last\"));\n\t\t}\n\t},\n\n\t// TODO merge with nextPage\n\tpreviousPage: function(event) {\n\t\tif (this.hasScroll()) {\n\t\t\t// TODO merge with no-scroll-else\n\t\t\tif (!this.active || this.first()) {\n\t\t\t\tthis.activate(event, this.element.children(\".ui-menu-item:last\"));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar base = this.active.offset().top,\n\t\t\t\theight = this.element.height(),\n\t\t\t\tresult = this.element.children(\".ui-menu-item\").filter(function() {\n\t\t\t\t\tvar close = $(this).offset().top - base + height - $(this).height();\n\t\t\t\t\t// TODO improve approximation\n\t\t\t\t\treturn close < 10 && close > -10;\n\t\t\t\t});\n\n\t\t\t// TODO try to catch this earlier when scrollTop indicates the last page anyway\n\t\t\tif (!result.length) {\n\t\t\t\tresult = this.element.children(\".ui-menu-item:first\");\n\t\t\t}\n\t\t\tthis.activate(event, result);\n\t\t} else {\n\t\t\tthis.activate(event, this.element.children(\".ui-menu-item\")\n\t\t\t\t.filter(!this.active || this.first() ? \":last\" : \":first\"));\n\t\t}\n\t},\n\n\thasScroll: function() {\n\t\treturn this.element.height() < this.element[ $.fn.prop ? \"prop\" : \"attr\" ](\"scrollHeight\");\n\t},\n\n\tselect: function( event ) {\n\t\tthis._trigger(\"selected\", event, { item: this.active });\n\t}\n});\n\n}(jQuery));\n\n(function( $, undefined ) {\n\nvar lastActive, startXPos, startYPos, clickDragged,\n\tbaseClasses = \"ui-button ui-widget ui-state-default ui-corner-all\",\n\tstateClasses = \"ui-state-hover ui-state-active \",\n\ttypeClasses = \"ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only\",\n\tformResetHandler = function() {\n\t\tvar buttons = $( this ).find( \":ui-button\" );\n\t\tsetTimeout(function() {\n\t\t\tbuttons.button( \"refresh\" );\n\t\t}, 1 );\n\t},\n\tradioGroup = function( radio ) {\n\t\tvar name = radio.name,\n\t\t\tform = radio.form,\n\t\t\tradios = $( [] );\n\t\tif ( name ) {\n\t\t\tif ( form ) {\n\t\t\t\tradios = $( form ).find( \"[name='\" + name + \"']\" );\n\t\t\t} else {\n\t\t\t\tradios = $( \"[name='\" + name + \"']\", radio.ownerDocument )\n\t\t\t\t\t.filter(function() {\n\t\t\t\t\t\treturn !this.form;\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn radios;\n\t};\n\n$.widget( \"ui.button\", {\n\toptions: {\n\t\tdisabled: null,\n\t\ttext: true,\n\t\tlabel: null,\n\t\ticons: {\n\t\t\tprimary: null,\n\t\t\tsecondary: null\n\t\t}\n\t},\n\t_create: function() {\n\t\tthis.element.closest( \"form\" )\n\t\t\t.unbind( \"reset.button\" )\n\t\t\t.bind( \"reset.button\", formResetHandler );\n\n\t\tif ( typeof this.options.disabled !== \"boolean\" ) {\n\t\t\tthis.options.disabled = !!this.element.propAttr( \"disabled\" );\n\t\t} else {\n\t\t\tthis.element.propAttr( \"disabled\", this.options.disabled );\n\t\t}\n\n\t\tthis._determineButtonType();\n\t\tthis.hasTitle = !!this.buttonElement.attr( \"title\" );\n\n\t\tvar self = this,\n\t\t\toptions = this.options,\n\t\t\ttoggleButton = this.type === \"checkbox\" || this.type === \"radio\",\n\t\t\thoverClass = \"ui-state-hover\" + ( !toggleButton ? \" ui-state-active\" : \"\" ),\n\t\t\tfocusClass = \"ui-state-focus\";\n\n\t\tif ( options.label === null ) {\n\t\t\toptions.label = this.buttonElement.html();\n\t\t}\n\n\t\tthis.buttonElement\n\t\t\t.addClass( baseClasses )\n\t\t\t.attr( \"role\", \"button\" )\n\t\t\t.bind( \"mouseenter.button\", function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\t\t\tif ( this === lastActive ) {\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t}\n\t\t\t})\n\t\t\t.bind( \"mouseleave.button\", function() {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$( this ).removeClass( hoverClass );\n\t\t\t})\n\t\t\t.bind( \"click.button\", function( event ) {\n\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t}\n\t\t\t});\n\n\t\tthis.element\n\t\t\t.bind( \"focus.button\", function() {\n\t\t\t\t// no need to check disabled, focus won't be triggered anyway\n\t\t\t\tself.buttonElement.addClass( focusClass );\n\t\t\t})\n\t\t\t.bind( \"blur.button\", function() {\n\t\t\t\tself.buttonElement.removeClass( focusClass );\n\t\t\t});\n\n\t\tif ( toggleButton ) {\n\t\t\tthis.element.bind( \"change.button\", function() {\n\t\t\t\tif ( clickDragged ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tself.refresh();\n\t\t\t});\n\t\t\t// if mouse moves between mousedown and mouseup (drag) set clickDragged flag\n\t\t\t// prevents issue where button state changes but checkbox/radio checked state\n\t\t\t// does not in Firefox (see ticket #6970)\n\t\t\tthis.buttonElement\n\t\t\t\t.bind( \"mousedown.button\", function( event ) {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclickDragged = false;\n\t\t\t\t\tstartXPos = event.pageX;\n\t\t\t\t\tstartYPos = event.pageY;\n\t\t\t\t})\n\t\t\t\t.bind( \"mouseup.button\", function( event ) {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( startXPos !== event.pageX || startYPos !== event.pageY ) {\n\t\t\t\t\t\tclickDragged = true;\n\t\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif ( this.type === \"checkbox\" ) {\n\t\t\tthis.buttonElement.bind( \"click.button\", function() {\n\t\t\t\tif ( options.disabled || clickDragged ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$( this ).toggleClass( \"ui-state-active\" );\n\t\t\t\tself.buttonElement.attr( \"aria-pressed\", self.element[0].checked );\n\t\t\t});\n\t\t} else if ( this.type === \"radio\" ) {\n\t\t\tthis.buttonElement.bind( \"click.button\", function() {\n\t\t\t\tif ( options.disabled || clickDragged ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\tself.buttonElement.attr( \"aria-pressed\", \"true\" );\n\n\t\t\t\tvar radio = self.element[ 0 ];\n\t\t\t\tradioGroup( radio )\n\t\t\t\t\t.not( radio )\n\t\t\t\t\t.map(function() {\n\t\t\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t\t\t})\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t});\n\t\t} else {\n\t\t\tthis.buttonElement\n\t\t\t\t.bind( \"mousedown.button\", function() {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\tlastActive = this;\n\t\t\t\t\t$( document ).one( \"mouseup\", function() {\n\t\t\t\t\t\tlastActive = null;\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.bind( \"mouseup.button\", function() {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t})\n\t\t\t\t.bind( \"keydown.button\", function(event) {\n\t\t\t\t\tif ( options.disabled ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) {\n\t\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.bind( \"keyup.button\", function() {\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t});\n\n\t\t\tif ( this.buttonElement.is(\"a\") ) {\n\t\t\t\tthis.buttonElement.keyup(function(event) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\t// TODO pass through original event correctly (just as 2nd argument doesn't work)\n\t\t\t\t\t\t$( this ).click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// TODO: pull out $.Widget's handling for the disabled option into\n\t\t// $.Widget.prototype._setOptionDisabled so it's easy to proxy and can\n\t\t// be overridden by individual plugins\n\t\tthis._setOption( \"disabled\", options.disabled );\n\t\tthis._resetButton();\n\t},\n\n\t_determineButtonType: function() {\n\n\t\tif ( this.element.is(\":checkbox\") ) {\n\t\t\tthis.type = \"checkbox\";\n\t\t} else if ( this.element.is(\":radio\") ) {\n\t\t\tthis.type = \"radio\";\n\t\t} else if ( this.element.is(\"input\") ) {\n\t\t\tthis.type = \"input\";\n\t\t} else {\n\t\t\tthis.type = \"button\";\n\t\t}\n\n\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t// we don't search against the document in case the element\n\t\t\t// is disconnected from the DOM\n\t\t\tvar ancestor = this.element.parents().filter(\":last\"),\n\t\t\t\tlabelSelector = \"label[for='\" + this.element.attr(\"id\") + \"']\";\n\t\t\tthis.buttonElement = ancestor.find( labelSelector );\n\t\t\tif ( !this.buttonElement.length ) {\n\t\t\t\tancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();\n\t\t\t\tthis.buttonElement = ancestor.filter( labelSelector );\n\t\t\t\tif ( !this.buttonElement.length ) {\n\t\t\t\t\tthis.buttonElement = ancestor.find( labelSelector );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.element.addClass( \"ui-helper-hidden-accessible\" );\n\n\t\t\tvar checked = this.element.is( \":checked\" );\n\t\t\tif ( checked ) {\n\t\t\t\tthis.buttonElement.addClass( \"ui-state-active\" );\n\t\t\t}\n\t\t\tthis.buttonElement.attr( \"aria-pressed\", checked );\n\t\t} else {\n\t\t\tthis.buttonElement = this.element;\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.buttonElement;\n\t},\n\n\tdestroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-helper-hidden-accessible\" );\n\t\tthis.buttonElement\n\t\t\t.removeClass( baseClasses + \" \" + stateClasses + \" \" + typeClasses )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-pressed\" )\n\t\t\t.html( this.buttonElement.find(\".ui-button-text\").html() );\n\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.buttonElement.removeAttr( \"title\" );\n\t\t}\n\n\t\t$.Widget.prototype.destroy.call( this );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.propAttr( \"disabled\", true );\n\t\t\t} else {\n\t\t\t\tthis.element.propAttr( \"disabled\", false );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis._resetButton();\n\t},\n\n\trefresh: function() {\n\t\tvar isDisabled = this.element.is( \":disabled\" );\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOption( \"disabled\", isDisabled );\n\t\t}\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tradioGroup( this.element[0] ).each(function() {\n\t\t\t\tif ( $( this ).is( \":checked\" ) ) {\n\t\t\t\t\t$( this ).button( \"widget\" )\n\t\t\t\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\n\t\t\t\t} else {\n\t\t\t\t\t$( this ).button( \"widget\" )\n\t\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t\t}\n\t\t\t});\n\t\t} else if ( this.type === \"checkbox\" ) {\n\t\t\tif ( this.element.is( \":checked\" ) ) {\n\t\t\t\tthis.buttonElement\n\t\t\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"true\" );\n\t\t\t} else {\n\t\t\t\tthis.buttonElement\n\t\t\t\t\t.removeClass( \"ui-state-active\" )\n\t\t\t\t\t.attr( \"aria-pressed\", \"false\" );\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetButton: function() {\n\t\tif ( this.type === \"input\" ) {\n\t\t\tif ( this.options.label ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tvar buttonElement = this.buttonElement.removeClass( typeClasses ),\n\t\t\tbuttonText = $( \"<span></span>\", this.element[0].ownerDocument )\n\t\t\t\t.addClass( \"ui-button-text\" )\n\t\t\t\t.html( this.options.label )\n\t\t\t\t.appendTo( buttonElement.empty() )\n\t\t\t\t.text(),\n\t\t\ticons = this.options.icons,\n\t\t\tmultipleIcons = icons.primary && icons.secondary,\n\t\t\tbuttonClasses = [];  \n\n\t\tif ( icons.primary || icons.secondary ) {\n\t\t\tif ( this.options.text ) {\n\t\t\t\tbuttonClasses.push( \"ui-button-text-icon\" + ( multipleIcons ? \"s\" : ( icons.primary ? \"-primary\" : \"-secondary\" ) ) );\n\t\t\t}\n\n\t\t\tif ( icons.primary ) {\n\t\t\t\tbuttonElement.prepend( \"<span class='ui-button-icon-primary ui-icon \" + icons.primary + \"'></span>\" );\n\t\t\t}\n\n\t\t\tif ( icons.secondary ) {\n\t\t\t\tbuttonElement.append( \"<span class='ui-button-icon-secondary ui-icon \" + icons.secondary + \"'></span>\" );\n\t\t\t}\n\n\t\t\tif ( !this.options.text ) {\n\t\t\t\tbuttonClasses.push( multipleIcons ? \"ui-button-icons-only\" : \"ui-button-icon-only\" );\n\n\t\t\t\tif ( !this.hasTitle ) {\n\t\t\t\t\tbuttonElement.attr( \"title\", buttonText );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbuttonClasses.push( \"ui-button-text-only\" );\n\t\t}\n\t\tbuttonElement.addClass( buttonClasses.join( \" \" ) );\n\t}\n});\n\n$.widget( \"ui.buttonset\", {\n\toptions: {\n\t\titems: \":button, :submit, :reset, :checkbox, :radio, a, :data(button)\"\n\t},\n\n\t_create: function() {\n\t\tthis.element.addClass( \"ui-buttonset\" );\n\t},\n\t\n\t_init: function() {\n\t\tthis.refresh();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis.buttons.button( \"option\", key, value );\n\t\t}\n\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\t},\n\t\n\trefresh: function() {\n\t\tvar rtl = this.element.css( \"direction\" ) === \"rtl\";\n\t\t\n\t\tthis.buttons = this.element.find( this.options.items )\n\t\t\t.filter( \":ui-button\" )\n\t\t\t\t.button( \"refresh\" )\n\t\t\t.end()\n\t\t\t.not( \":ui-button\" )\n\t\t\t\t.button()\n\t\t\t.end()\n\t\t\t.map(function() {\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t})\n\t\t\t\t.removeClass( \"ui-corner-all ui-corner-left ui-corner-right\" )\n\t\t\t\t.filter( \":first\" )\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-right\" : \"ui-corner-left\" )\n\t\t\t\t.end()\n\t\t\t\t.filter( \":last\" )\n\t\t\t\t\t.addClass( rtl ? \"ui-corner-left\" : \"ui-corner-right\" )\n\t\t\t\t.end()\n\t\t\t.end();\n\t},\n\n\tdestroy: function() {\n\t\tthis.element.removeClass( \"ui-buttonset\" );\n\t\tthis.buttons\n\t\t\t.map(function() {\n\t\t\t\treturn $( this ).button( \"widget\" )[ 0 ];\n\t\t\t})\n\t\t\t\t.removeClass( \"ui-corner-left ui-corner-right\" )\n\t\t\t.end()\n\t\t\t.button( \"destroy\" );\n\n\t\t$.Widget.prototype.destroy.call( this );\n\t}\n});\n\n}( jQuery ) );\n\n(function( $, undefined ) {\n\n$.extend($.ui, { datepicker: { version: \"1.8.24\" } });\n\nvar PROP_NAME = 'datepicker';\nvar dpuuid = new Date().getTime();\nvar instActive;\n\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis.debug = false; // Change this to true to start debugging\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division\n\tthis._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class\n\tthis._appendClass = 'ui-datepicker-append'; // The name of the append marker class\n\tthis._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class\n\tthis._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class\n\tthis._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class\n\tthis._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class\n\tthis._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class\n\tthis._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[''] = { // Default regional settings\n\t\tcloseText: 'Done', // Display text for close link\n\t\tprevText: 'Prev', // Display text for previous month link\n\t\tnextText: 'Next', // Display text for next month link\n\t\tcurrentText: 'Today', // Display text for current month link\n\t\tmonthNames: ['January','February','March','April','May','June',\n\t\t\t'July','August','September','October','November','December'], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting\n\t\tdayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting\n\t\tdayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting\n\t\tdayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday\n\t\tweekHeader: 'Wk', // Column header for week of the year\n\t\tdateFormat: 'mm/dd/yy', // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: '' // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: 'focus', // 'focus' for popup on focus,\n\t\t\t// 'button' for trigger button, or 'both' for either\n\t\tshowAnim: 'fadeIn', // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: '', // Display text following the input box, e.g. showing the format\n\t\tbuttonText: '...', // Text for trigger button\n\t\tbuttonImage: '', // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: 'c-10:c+10', // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: '+10', // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with '+' for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: 'fast', // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: '', // Selector for an alternate field to store selected dates into\n\t\taltFormat: '', // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend(this._defaults, this.regional['']);\n\tthis.dpDiv = bindHover($('<div id=\"' + this._mainDivId + '\" class=\"ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all\"></div>'));\n}\n\n$.extend(Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: 'hasDatepicker',\n\t\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t/* Debug logging (if enabled). */\n\tlog: function () {\n\t\tif (this.debug)\n\t\t\tconsole.log.apply('', arguments);\n\t},\n\t\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t   @param  settings  object - the new settings to use as defaults (anonymous object)\n\t   @return the manager object */\n\tsetDefaults: function(settings) {\n\t\textendRemove(this._defaults, settings || {});\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t   @param  target    element - the target input field or division or span\n\t   @param  settings  object - the new settings to use for this date picker instance (anonymous) */\n\t_attachDatepicker: function(target, settings) {\n\t\t// check for settings on the control itself - in namespace 'date:'\n\t\tvar inlineSettings = null;\n\t\tfor (var attrName in this._defaults) {\n\t\t\tvar attrValue = target.getAttribute('date:' + attrName);\n\t\t\tif (attrValue) {\n\t\t\t\tinlineSettings = inlineSettings || {};\n\t\t\t\ttry {\n\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tinlineSettings[attrName] = attrValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar nodeName = target.nodeName.toLowerCase();\n\t\tvar inline = (nodeName == 'div' || nodeName == 'span');\n\t\tif (!target.id) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = 'dp' + this.uuid;\n\t\t}\n\t\tvar inst = this._newInst($(target), inline);\n\t\tinst.settings = $.extend({}, settings || {}, inlineSettings || {});\n\t\tif (nodeName == 'input') {\n\t\t\tthis._connectDatepicker(target, inst);\n\t\t} else if (inline) {\n\t\t\tthis._inlineDatepicker(target, inst);\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function(target, inline) {\n\t\tvar id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\\\\\$1'); // escape jQuery meta chars\n\t\treturn {id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: (!inline ? this.dpDiv : // presentation div\n\t\t\tbindHover($('<div class=\"' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all\"></div>')))};\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function(target, inst) {\n\t\tvar input = $(target);\n\t\tinst.append = $([]);\n\t\tinst.trigger = $([]);\n\t\tif (input.hasClass(this.markerClassName))\n\t\t\treturn;\n\t\tthis._attachments(input, inst);\n\t\tinput.addClass(this.markerClassName).keydown(this._doKeyDown).\n\t\t\tkeypress(this._doKeyPress).keyup(this._doKeyUp).\n\t\t\tbind(\"setData.datepicker\", function(event, key, value) {\n\t\t\t\tinst.settings[key] = value;\n\t\t\t}).bind(\"getData.datepicker\", function(event, key) {\n\t\t\t\treturn this._get(inst, key);\n\t\t\t});\n\t\tthis._autoSize(inst);\n\t\t$.data(target, PROP_NAME, inst);\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function(input, inst) {\n\t\tvar appendText = this._get(inst, 'appendText');\n\t\tvar isRTL = this._get(inst, 'isRTL');\n\t\tif (inst.append)\n\t\t\tinst.append.remove();\n\t\tif (appendText) {\n\t\t\tinst.append = $('<span class=\"' + this._appendClass + '\">' + appendText + '</span>');\n\t\t\tinput[isRTL ? 'before' : 'after'](inst.append);\n\t\t}\n\t\tinput.unbind('focus', this._showDatepicker);\n\t\tif (inst.trigger)\n\t\t\tinst.trigger.remove();\n\t\tvar showOn = this._get(inst, 'showOn');\n\t\tif (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field\n\t\t\tinput.focus(this._showDatepicker);\n\t\tif (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked\n\t\t\tvar buttonText = this._get(inst, 'buttonText');\n\t\t\tvar buttonImage = this._get(inst, 'buttonImage');\n\t\t\tinst.trigger = $(this._get(inst, 'buttonImageOnly') ?\n\t\t\t\t$('<img/>').addClass(this._triggerClass).\n\t\t\t\t\tattr({ src: buttonImage, alt: buttonText, title: buttonText }) :\n\t\t\t\t$('<button type=\"button\"></button>').addClass(this._triggerClass).\n\t\t\t\t\thtml(buttonImage == '' ? buttonText : $('<img/>').attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText })));\n\t\t\tinput[isRTL ? 'before' : 'after'](inst.trigger);\n\t\t\tinst.trigger.click(function() {\n\t\t\t\tif ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\telse if ($.datepicker._datepickerShowing && $.datepicker._lastInput != input[0]) {\n\t\t\t\t\t$.datepicker._hideDatepicker(); \n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\n\t\t\t\t} else\n\t\t\t\t\t$.datepicker._showDatepicker(input[0]);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function(inst) {\n\t\tif (this._get(inst, 'autoSize') && !inst.inline) {\n\t\t\tvar date = new Date(2009, 12 - 1, 20); // Ensure double digits\n\t\t\tvar dateFormat = this._get(inst, 'dateFormat');\n\t\t\tif (dateFormat.match(/[DM]/)) {\n\t\t\t\tvar findMax = function(names) {\n\t\t\t\t\tvar max = 0;\n\t\t\t\t\tvar maxI = 0;\n\t\t\t\t\tfor (var i = 0; i < names.length; i++) {\n\t\t\t\t\t\tif (names[i].length > max) {\n\t\t\t\t\t\t\tmax = names[i].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?\n\t\t\t\t\t'monthNames' : 'monthNamesShort'))));\n\t\t\t\tdate.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?\n\t\t\t\t\t'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());\n\t\t\t}\n\t\t\tinst.input.attr('size', this._formatDate(inst, date).length);\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function(target, inst) {\n\t\tvar divSpan = $(target);\n\t\tif (divSpan.hasClass(this.markerClassName))\n\t\t\treturn;\n\t\tdivSpan.addClass(this.markerClassName).append(inst.dpDiv).\n\t\t\tbind(\"setData.datepicker\", function(event, key, value){\n\t\t\t\tinst.settings[key] = value;\n\t\t\t}).bind(\"getData.datepicker\", function(event, key){\n\t\t\t\treturn this._get(inst, key);\n\t\t\t});\n\t\t$.data(target, PROP_NAME, inst);\n\t\tthis._setDate(inst, this._getDefaultDate(inst), true);\n\t\tthis._updateDatepicker(inst);\n\t\tthis._updateAlternate(inst);\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t   @param  input     element - ignored\n\t   @param  date      string or Date - the initial date to display\n\t   @param  onSelect  function - the function to call when a date is selected\n\t   @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t   @param  pos       int[2] - coordinates for the dialog's position within the screen or\n\t                     event - with x/y coordinates or\n\t                     leave empty for default (screen centre)\n\t   @return the manager object */\n\t_dialogDatepicker: function(input, date, onSelect, settings, pos) {\n\t\tvar inst = this._dialogInst; // internal instance\n\t\tif (!inst) {\n\t\t\tthis.uuid += 1;\n\t\t\tvar id = 'dp' + this.uuid;\n\t\t\tthis._dialogInput = $('<input type=\"text\" id=\"' + id +\n\t\t\t\t'\" style=\"position: absolute; top: -100px; width: 0px;\"/>');\n\t\t\tthis._dialogInput.keydown(this._doKeyDown);\n\t\t\t$('body').append(this._dialogInput);\n\t\t\tinst = this._dialogInst = this._newInst(this._dialogInput, false);\n\t\t\tinst.settings = {};\n\t\t\t$.data(this._dialogInput[0], PROP_NAME, inst);\n\t\t}\n\t\textendRemove(inst.settings, settings || {});\n\t\tdate = (date && date.constructor == Date ? this._formatDate(inst, date) : date);\n\t\tthis._dialogInput.val(date);\n\n\t\tthis._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);\n\t\tif (!this._pos) {\n\t\t\tvar browserWidth = document.documentElement.clientWidth;\n\t\t\tvar browserHeight = document.documentElement.clientHeight;\n\t\t\tvar scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tvar scrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];\n\t\t}\n\n\t\t// move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass(this._dialogClass);\n\t\tthis._showDatepicker(this._dialogInput[0]);\n\t\tif ($.blockUI)\n\t\t\t$.blockUI(this.dpDiv);\n\t\t$.data(this._dialogInput[0], PROP_NAME, inst);\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t   @param  target    element - the target input field or division or span */\n\t_destroyDatepicker: function(target) {\n\t\tvar $target = $(target);\n\t\tvar inst = $.data(target, PROP_NAME);\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tvar nodeName = target.nodeName.toLowerCase();\n\t\t$.removeData(target, PROP_NAME);\n\t\tif (nodeName == 'input') {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass(this.markerClassName).\n\t\t\t\tunbind('focus', this._showDatepicker).\n\t\t\t\tunbind('keydown', this._doKeyDown).\n\t\t\t\tunbind('keypress', this._doKeyPress).\n\t\t\t\tunbind('keyup', this._doKeyUp);\n\t\t} else if (nodeName == 'div' || nodeName == 'span')\n\t\t\t$target.removeClass(this.markerClassName).empty();\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t   @param  target    element - the target input field or division or span */\n\t_enableDatepicker: function(target) {\n\t\tvar $target = $(target);\n\t\tvar inst = $.data(target, PROP_NAME);\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tvar nodeName = target.nodeName.toLowerCase();\n\t\tif (nodeName == 'input') {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter('button').\n\t\t\t\teach(function() { this.disabled = false; }).end().\n\t\t\t\tfilter('img').css({opacity: '1.0', cursor: ''});\n\t\t}\n\t\telse if (nodeName == 'div' || nodeName == 'span') {\n\t\t\tvar inline = $target.children('.' + this._inlineClass);\n\t\t\tinline.children().removeClass('ui-state-disabled');\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\n\t\t\t\tremoveAttr(\"disabled\");\n\t\t}\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\n\t\t\tfunction(value) { return (value == target ? null : value); }); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t   @param  target    element - the target input field or division or span */\n\t_disableDatepicker: function(target) {\n\t\tvar $target = $(target);\n\t\tvar inst = $.data(target, PROP_NAME);\n\t\tif (!$target.hasClass(this.markerClassName)) {\n\t\t\treturn;\n\t\t}\n\t\tvar nodeName = target.nodeName.toLowerCase();\n\t\tif (nodeName == 'input') {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter('button').\n\t\t\t\teach(function() { this.disabled = true; }).end().\n\t\t\t\tfilter('img').css({opacity: '0.5', cursor: 'default'});\n\t\t}\n\t\telse if (nodeName == 'div' || nodeName == 'span') {\n\t\t\tvar inline = $target.children('.' + this._inlineClass);\n\t\t\tinline.children().addClass('ui-state-disabled');\n\t\t\tinline.find(\"select.ui-datepicker-month, select.ui-datepicker-year\").\n\t\t\t\tattr(\"disabled\", \"disabled\");\n\t\t}\n\t\tthis._disabledInputs = $.map(this._disabledInputs,\n\t\t\tfunction(value) { return (value == target ? null : value); }); // delete entry\n\t\tthis._disabledInputs[this._disabledInputs.length] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t   @param  target    element - the target input field or division or span\n\t   @return boolean - true if disabled, false if enabled */\n\t_isDisabledDatepicker: function(target) {\n\t\tif (!target) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < this._disabledInputs.length; i++) {\n\t\t\tif (this._disabledInputs[i] == target)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t   @param  target  element - the target input field or division or span\n\t   @return  object - the associated instance data\n\t   @throws  error if a jQuery problem getting data */\n\t_getInst: function(target) {\n\t\ttry {\n\t\t\treturn $.data(target, PROP_NAME);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow 'Missing instance data for this datepicker';\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t   @param  target  element - the target input field or division or span\n\t   @param  name    object - the new settings to update or\n\t                   string - the name of the setting to change or retrieve,\n\t                   when retrieving also 'all' for all instance settings or\n\t                   'defaults' for all global defaults\n\t   @param  value   any - the new value for the setting\n\t                   (omit if above is an object or to retrieve a value) */\n\t_optionDatepicker: function(target, name, value) {\n\t\tvar inst = this._getInst(target);\n\t\tif (arguments.length == 2 && typeof name == 'string') {\n\t\t\treturn (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :\n\t\t\t\t(inst ? (name == 'all' ? $.extend({}, inst.settings) :\n\t\t\t\tthis._get(inst, name)) : null));\n\t\t}\n\t\tvar settings = name || {};\n\t\tif (typeof name == 'string') {\n\t\t\tsettings = {};\n\t\t\tsettings[name] = value;\n\t\t}\n\t\tif (inst) {\n\t\t\tif (this._curInst == inst) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\t\t\tvar date = this._getDateDatepicker(target, true);\n\t\t\tvar minDate = this._getMinMaxDate(inst, 'min');\n\t\t\tvar maxDate = this._getMinMaxDate(inst, 'max');\n\t\t\textendRemove(inst.settings, settings);\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined)\n\t\t\t\tinst.settings.minDate = this._formatDate(inst, minDate);\n\t\t\tif (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined)\n\t\t\t\tinst.settings.maxDate = this._formatDate(inst, maxDate);\n\t\t\tthis._attachments($(target), inst);\n\t\t\tthis._autoSize(inst);\n\t\t\tthis._setDate(inst, date);\n\t\t\tthis._updateAlternate(inst);\n\t\t\tthis._updateDatepicker(inst);\n\t\t}\n\t},\n\n\t// change method deprecated\n\t_changeDatepicker: function(target, name, value) {\n\t\tthis._optionDatepicker(target, name, value);\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t   @param  target  element - the target input field or division or span */\n\t_refreshDatepicker: function(target) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst) {\n\t\t\tthis._updateDatepicker(inst);\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t   @param  target   element - the target input field or division or span\n\t   @param  date     Date - the new date */\n\t_setDateDatepicker: function(target, date) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst) {\n\t\t\tthis._setDate(inst, date);\n\t\t\tthis._updateDatepicker(inst);\n\t\t\tthis._updateAlternate(inst);\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t   @param  target     element - the target input field or division or span\n\t   @param  noDefault  boolean - true if no default date is to be used\n\t   @return Date - the current date */\n\t_getDateDatepicker: function(target, noDefault) {\n\t\tvar inst = this._getInst(target);\n\t\tif (inst && !inst.inline)\n\t\t\tthis._setDateFromField(inst, noDefault);\n\t\treturn (inst ? this._getDate(inst) : null);\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function(event) {\n\t\tvar inst = $.datepicker._getInst(event.target);\n\t\tvar handled = true;\n\t\tvar isRTL = inst.dpDiv.is('.ui-datepicker-rtl');\n\t\tinst._keyEvent = true;\n\t\tif ($.datepicker._datepickerShowing)\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + \n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + ')', inst.dpDiv);\n\t\t\t\t\t\tif (sel[0])\n\t\t\t\t\t\t\t$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);\n\t\t\t\t\t\t\tvar onSelect = $.datepicker._get(inst, 'onSelect');\n\t\t\t\t\t\t\tif (onSelect) {\n\t\t\t\t\t\t\t\tvar dateStr = $.datepicker._formatDate(inst);\n\n\t\t\t\t\t\t\t\t// trigger custom callback\n\t\t\t\t\t\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\t\t\tbreak; // select the value on enter\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get(inst, 'stepBigMonths') :\n\t\t\t\t\t\t\t-$.datepicker._get(inst, 'stepMonths')), 'M');\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get(inst, 'stepBigMonths') :\n\t\t\t\t\t\t\t+$.datepicker._get(inst, 'stepMonths')), 'M');\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t\t\t-$.datepicker._get(inst, 'stepBigMonths') :\n\t\t\t\t\t\t\t\t\t-$.datepicker._get(inst, 'stepMonths')), 'M');\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?\n\t\t\t\t\t\t\t\t\t+$.datepicker._get(inst, 'stepBigMonths') :\n\t\t\t\t\t\t\t\t\t+$.datepicker._get(inst, 'stepMonths')), 'M');\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\telse if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker(this);\n\t\telse {\n\t\t\thandled = false;\n\t\t}\n\t\tif (handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function(event) {\n\t\tvar inst = $.datepicker._getInst(event.target);\n\t\tif ($.datepicker._get(inst, 'constrainInput')) {\n\t\t\tvar chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));\n\t\t\tvar chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);\n\t\t\treturn event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function(event) {\n\t\tvar inst = $.datepicker._getInst(event.target);\n\t\tif (inst.input.val() != inst.lastVal) {\n\t\t\ttry {\n\t\t\t\tvar date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),\n\t\t\t\t\t(inst.input ? inst.input.val() : null),\n\t\t\t\t\t$.datepicker._getFormatConfig(inst));\n\t\t\t\tif (date) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField(inst);\n\t\t\t\t\t$.datepicker._updateAlternate(inst);\n\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\t$.datepicker.log(err);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n       If false returned from beforeShow event handler do not show. \n\t   @param  input  element - the input field attached to the date picker or\n\t                  event - if triggered by focus */\n\t_showDatepicker: function(input) {\n\t\tinput = input.target || input;\n\t\tif (input.nodeName.toLowerCase() != 'input') // find from button/image trigger\n\t\t\tinput = $('input', input.parentNode)[0];\n\t\tif ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here\n\t\t\treturn;\n\t\tvar inst = $.datepicker._getInst(input);\n\t\tif ($.datepicker._curInst && $.datepicker._curInst != inst) {\n\t\t\t$.datepicker._curInst.dpDiv.stop(true, true);\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );\n\t\t\t}\n\t\t}\n\t\tvar beforeShow = $.datepicker._get(inst, 'beforeShow');\n\t\tvar beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};\n\t\tif(beforeShowSettings === false){\n            //false\n\t\t\treturn;\n\t\t}\n\t\textendRemove(inst.settings, beforeShowSettings);\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField(inst);\n\t\tif ($.datepicker._inDialog) // hide cursor\n\t\t\tinput.value = '';\n\t\tif (!$.datepicker._pos) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos(input);\n\t\t\t$.datepicker._pos[1] += input.offsetHeight; // add the height\n\t\t}\n\t\tvar isFixed = false;\n\t\t$(input).parents().each(function() {\n\t\t\tisFixed |= $(this).css('position') == 'fixed';\n\t\t\treturn !isFixed;\n\t\t});\n\t\tif (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled\n\t\t\t$.datepicker._pos[0] -= document.documentElement.scrollLeft;\n\t\t\t$.datepicker._pos[1] -= document.documentElement.scrollTop;\n\t\t}\n\t\tvar offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};\n\t\t$.datepicker._pos = null;\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});\n\t\t$.datepicker._updateDatepicker(inst);\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset(inst, offset, isFixed);\n\t\tinst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?\n\t\t\t'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',\n\t\t\tleft: offset.left + 'px', top: offset.top + 'px'});\n\t\tif (!inst.inline) {\n\t\t\tvar showAnim = $.datepicker._get(inst, 'showAnim');\n\t\t\tvar duration = $.datepicker._get(inst, 'duration');\n\t\t\tvar postProcess = function() {\n\t\t\t\tvar cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only\n\t\t\t\tif( !! cover.length ){\n\t\t\t\t\tvar borders = $.datepicker._getBorders(inst.dpDiv);\n\t\t\t\t\tcover.css({left: -borders[0], top: -borders[1],\n\t\t\t\t\t\twidth: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});\n\t\t\t\t}\n\t\t\t};\n\t\t\tinst.dpDiv.zIndex($(input).zIndex()+1);\n\t\t\t$.datepicker._datepickerShowing = true;\n\t\t\tif ($.effects && $.effects[showAnim])\n\t\t\t\tinst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);\n\t\t\telse\n\t\t\t\tinst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);\n\t\t\tif (!showAnim || !duration)\n\t\t\t\tpostProcess();\n\t\t\tif (inst.input.is(':visible') && !inst.input.is(':disabled'))\n\t\t\t\tinst.input.focus();\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function(inst) {\n\t\tvar self = this;\n\t\tself.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tvar borders = $.datepicker._getBorders(inst.dpDiv);\n\t\tinstActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append(this._generateHTML(inst));\n\t\tthis._attachHandlers(inst);\n\t\tvar cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only\n\t\tif( !!cover.length ){ //avoid call to outerXXXX() when not in IE6\n\t\t\tcover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})\n\t\t}\n\t\tinst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();\n\t\tvar numMonths = this._getNumberOfMonths(inst);\n\t\tvar cols = numMonths[1];\n\t\tvar width = 17;\n\t\tinst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');\n\t\tif (cols > 1)\n\t\t\tinst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');\n\t\tinst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +\n\t\t\t'Class']('ui-datepicker-multi');\n\t\tinst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +\n\t\t\t'Class']('ui-datepicker-rtl');\n\t\tif (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&\n\t\t\t\t// #6694 - don't focus the input if it's already focused\n\t\t\t\t// this breaks the change event in IE\n\t\t\t\tinst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement)\n\t\t\tinst.input.focus();\n\t\t// deffered render of the years select (to avoid flashes on Firefox) \n\t\tif( inst.yearshtml ){\n\t\t\tvar origyearshtml = inst.yearshtml;\n\t\t\tsetTimeout(function(){\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif( origyearshtml === inst.yearshtml && inst.yearshtml ){\n\t\t\t\t\tinst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0);\n\t\t}\n\t},\n\n\t/* Retrieve the size of left and top borders for an element.\n\t   @param  elem  (jQuery object) the element of interest\n\t   @return  (number[2]) the left and top borders */\n\t_getBorders: function(elem) {\n\t\tvar convert = function(value) {\n\t\t\treturn {thin: 1, medium: 2, thick: 3}[value] || value;\n\t\t};\n\t\treturn [parseFloat(convert(elem.css('border-left-width'))),\n\t\t\tparseFloat(convert(elem.css('border-top-width')))];\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function(inst, offset, isFixed) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth();\n\t\tvar dpHeight = inst.dpDiv.outerHeight();\n\t\tvar inputWidth = inst.input ? inst.input.outerWidth() : 0;\n\t\tvar inputHeight = inst.input ? inst.input.outerHeight() : 0;\n\t\tvar viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft());\n\t\tvar viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());\n\n\t\toffset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);\n\t\toffset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;\n\t\toffset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;\n\n\t\t// now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?\n\t\t\tMath.abs(offset.left + dpWidth - viewWidth) : 0);\n\t\toffset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?\n\t\t\tMath.abs(dpHeight + inputHeight) : 0);\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function(obj) {\n\t\tvar inst = this._getInst(obj);\n\t\tvar isRTL = this._get(inst, 'isRTL');\n        while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) {\n            obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];\n        }\n        var position = $(obj).offset();\n\t    return [position.left, position.top];\n\t},\n\n\t/* Hide the date picker from view.\n\t   @param  input  element - the input field attached to the date picker */\n\t_hideDatepicker: function(input) {\n\t\tvar inst = this._curInst;\n\t\tif (!inst || (input && inst != $.data(input, PROP_NAME)))\n\t\t\treturn;\n\t\tif (this._datepickerShowing) {\n\t\t\tvar showAnim = this._get(inst, 'showAnim');\n\t\t\tvar duration = this._get(inst, 'duration');\n\t\t\tvar postProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog(inst);\n\t\t\t};\n\t\t\tif ($.effects && $.effects[showAnim])\n\t\t\t\tinst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);\n\t\t\telse\n\t\t\t\tinst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :\n\t\t\t\t\t(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);\n\t\t\tif (!showAnim)\n\t\t\t\tpostProcess();\n\t\t\tthis._datepickerShowing = false;\n\t\t\tvar onClose = this._get(inst, 'onClose');\n\t\t\tif (onClose)\n\t\t\t\tonClose.apply((inst.input ? inst.input[0] : null),\n\t\t\t\t\t[(inst.input ? inst.input.val() : ''), inst]);\n\t\t\tthis._lastInput = null;\n\t\t\tif (this._inDialog) {\n\t\t\t\tthis._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });\n\t\t\t\tif ($.blockUI) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$('body').append(this.dpDiv);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function(inst) {\n\t\tinst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function(event) {\n\t\tif (!$.datepicker._curInst)\n\t\t\treturn;\n\n\t\tvar $target = $(event.target),\n\t\t\tinst = $.datepicker._getInst($target[0]);\n\n\t\tif ( ( ( $target[0].id != $.datepicker._mainDivId &&\n\t\t\t\t$target.parents('#' + $.datepicker._mainDivId).length == 0 &&\n\t\t\t\t!$target.hasClass($.datepicker.markerClassName) &&\n\t\t\t\t!$target.closest(\".\" + $.datepicker._triggerClass).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||\n\t\t\t( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != inst ) )\n\t\t\t$.datepicker._hideDatepicker();\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function(id, offset, period) {\n\t\tvar target = $(id);\n\t\tvar inst = this._getInst(target[0]);\n\t\tif (this._isDisabledDatepicker(target[0])) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate(inst, offset +\n\t\t\t(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning\n\t\t\tperiod);\n\t\tthis._updateDatepicker(inst);\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function(id) {\n\t\tvar target = $(id);\n\t\tvar inst = this._getInst(target[0]);\n\t\tif (this._get(inst, 'gotoCurrent') && inst.currentDay) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t}\n\t\telse {\n\t\t\tvar date = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange(inst);\n\t\tthis._adjustDate(target);\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function(id, select, period) {\n\t\tvar target = $(id);\n\t\tvar inst = this._getInst(target[0]);\n\t\tinst['selected' + (period == 'M' ? 'Month' : 'Year')] =\n\t\tinst['draw' + (period == 'M' ? 'Month' : 'Year')] =\n\t\t\tparseInt(select.options[select.selectedIndex].value,10);\n\t\tthis._notifyChange(inst);\n\t\tthis._adjustDate(target);\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function(id, month, year, td) {\n\t\tvar target = $(id);\n\t\tif ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {\n\t\t\treturn;\n\t\t}\n\t\tvar inst = this._getInst(target[0]);\n\t\tinst.selectedDay = inst.currentDay = $('a', td).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate(id, this._formatDate(inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear));\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function(id) {\n\t\tvar target = $(id);\n\t\tvar inst = this._getInst(target[0]);\n\t\tthis._selectDate(target, '');\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function(id, dateStr) {\n\t\tvar target = $(id);\n\t\tvar inst = this._getInst(target[0]);\n\t\tdateStr = (dateStr != null ? dateStr : this._formatDate(inst));\n\t\tif (inst.input)\n\t\t\tinst.input.val(dateStr);\n\t\tthis._updateAlternate(inst);\n\t\tvar onSelect = this._get(inst, 'onSelect');\n\t\tif (onSelect)\n\t\t\tonSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback\n\t\telse if (inst.input)\n\t\t\tinst.input.trigger('change'); // fire the change event\n\t\tif (inst.inline)\n\t\t\tthis._updateDatepicker(inst);\n\t\telse {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[0];\n\t\t\tif (typeof(inst.input[0]) != 'object')\n\t\t\t\tinst.input.focus(); // restore focus\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function(inst) {\n\t\tvar altField = this._get(inst, 'altField');\n\t\tif (altField) { // update alternate field too\n\t\t\tvar altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');\n\t\t\tvar date = this._getDate(inst);\n\t\t\tvar dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));\n\t\t\t$(altField).each(function() { $(this).val(dateStr); });\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t   @param  date  Date - the date to customise\n\t   @return [boolean, string] - is this date selectable?, what is its CSS class? */\n\tnoWeekends: function(date) {\n\t\tvar day = date.getDay();\n\t\treturn [(day > 0 && day < 6), ''];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t   @param  date  Date - the date to get the week for\n\t   @return  number - the number of the week within the year that contains this date */\n\tiso8601Week: function(date) {\n\t\tvar checkDate = new Date(date.getTime());\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n\t\tvar time = checkDate.getTime();\n\t\tcheckDate.setMonth(0); // Compare with Jan 1\n\t\tcheckDate.setDate(1);\n\t\treturn Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t   See formatDate below for the possible formats.\n\n\t   @param  format    string - the expected format of the date\n\t   @param  value     string - the date in the above format\n\t   @param  settings  Object - attributes include:\n\t                     shortYearCutoff  number - the cutoff year for determining the century (optional)\n\t                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)\n\t                     dayNames         string[7] - names of the days from Sunday (optional)\n\t                     monthNamesShort  string[12] - abbreviated names of the months (optional)\n\t                     monthNames       string[12] - names of the months (optional)\n\t   @return  Date - the extracted date value or null if value is blank */\n\tparseDate: function (format, value, settings) {\n\t\tif (format == null || value == null)\n\t\t\tthrow 'Invalid arguments';\n\t\tvalue = (typeof value == 'object' ? value.toString() : value + '');\n\t\tif (value == '')\n\t\t\treturn null;\n\t\tvar shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;\n\t\tshortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\n\t\tvar dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;\n\t\tvar dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;\n\t\tvar monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;\n\t\tvar monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;\n\t\tvar year = -1;\n\t\tvar month = -1;\n\t\tvar day = -1;\n\t\tvar doy = -1;\n\t\tvar literal = false;\n\t\t// Check whether a format character is doubled\n\t\tvar lookAhead = function(match) {\n\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\n\t\t\tif (matches)\n\t\t\t\tiFormat++;\n\t\t\treturn matches;\n\t\t};\n\t\t// Extract a number from the string value\n\t\tvar getNumber = function(match) {\n\t\t\tvar isDoubled = lookAhead(match);\n\t\t\tvar size = (match == '@' ? 14 : (match == '!' ? 20 :\n\t\t\t\t(match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2))));\n\t\t\tvar digits = new RegExp('^\\\\d{1,' + size + '}');\n\t\t\tvar num = value.substring(iValue).match(digits);\n\t\t\tif (!num)\n\t\t\t\tthrow 'Missing number at position ' + iValue;\n\t\t\tiValue += num[0].length;\n\t\t\treturn parseInt(num[0], 10);\n\t\t};\n\t\t// Extract a name from the string value and convert to an index\n\t\tvar getName = function(match, shortNames, longNames) {\n\t\t\tvar names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {\n\t\t\t\treturn [ [k, v] ];\n\t\t\t}).sort(function (a, b) {\n\t\t\t\treturn -(a[1].length - b[1].length);\n\t\t\t});\n\t\t\tvar index = -1;\n\t\t\t$.each(names, function (i, pair) {\n\t\t\t\tvar name = pair[1];\n\t\t\t\tif (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {\n\t\t\t\t\tindex = pair[0];\n\t\t\t\t\tiValue += name.length;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (index != -1)\n\t\t\t\treturn index + 1;\n\t\t\telse\n\t\t\t\tthrow 'Unknown name at position ' + iValue;\n\t\t};\n\t\t// Confirm that a literal character matches the string value\n\t\tvar checkLiteral = function() {\n\t\t\tif (value.charAt(iValue) != format.charAt(iFormat))\n\t\t\t\tthrow 'Unexpected literal at position ' + iValue;\n\t\t\tiValue++;\n\t\t};\n\t\tvar iValue = 0;\n\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\tif (literal)\n\t\t\t\tif (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\"))\n\t\t\t\t\tliteral = false;\n\t\t\t\telse\n\t\t\t\t\tcheckLiteral();\n\t\t\telse\n\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tday = getNumber('d');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'D':\n\t\t\t\t\t\tgetName('D', dayNamesShort, dayNames);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'o':\n\t\t\t\t\t\tdoy = getNumber('o');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\tmonth = getNumber('m');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'M':\n\t\t\t\t\t\tmonth = getName('M', monthNamesShort, monthNames);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'y':\n\t\t\t\t\t\tyear = getNumber('y');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '@':\n\t\t\t\t\t\tvar date = new Date(getNumber('@'));\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '!':\n\t\t\t\t\t\tvar date = new Date((getNumber('!') - this._ticksTo1970) / 10000);\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif (lookAhead(\"'\"))\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t}\n\t\tif (iValue < value.length){\n\t\t\tthrow \"Extra/unparsed characters found in date: \" + value.substring(iValue);\n\t\t}\n\t\tif (year == -1)\n\t\t\tyear = new Date().getFullYear();\n\t\telse if (year < 100)\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t(year <= shortYearCutoff ? 0 : -100);\n\t\tif (doy > -1) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tvar dim = this._getDaysInMonth(year, month - 1);\n\t\t\t\tif (day <= dim)\n\t\t\t\t\tbreak;\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while (true);\n\t\t}\n\t\tvar date = this._daylightSavingAdjust(new Date(year, month - 1, day));\n\t\tif (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)\n\t\t\tthrow 'Invalid date'; // E.g. 31/02/00\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)\n\tCOOKIE: 'D, dd M yy',\n\tISO_8601: 'yy-mm-dd',\n\tRFC_822: 'D, d M y',\n\tRFC_850: 'DD, dd-M-y',\n\tRFC_1036: 'D, d M y',\n\tRFC_1123: 'D, d M yy',\n\tRFC_2822: 'D, d M yy',\n\tRSS: 'D, d M y', // RFC 822\n\tTICKS: '!',\n\tTIMESTAMP: '@',\n\tW3C: 'yy-mm-dd', // ISO 8601\n\n\t_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\n\t\tMath.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),\n\n\t/* Format a date object into a string value.\n\t   The format can be combinations of the following:\n\t   d  - day of month (no leading zero)\n\t   dd - day of month (two digit)\n\t   o  - day of year (no leading zeros)\n\t   oo - day of year (three digit)\n\t   D  - day name short\n\t   DD - day name long\n\t   m  - month of year (no leading zero)\n\t   mm - month of year (two digit)\n\t   M  - month name short\n\t   MM - month name long\n\t   y  - year (two digit)\n\t   yy - year (four digit)\n\t   @ - Unix timestamp (ms since 01/01/1970)\n\t   ! - Windows ticks (100ns since 01/01/0001)\n\t   '...' - literal text\n\t   '' - single quote\n\n\t   @param  format    string - the desired format of the date\n\t   @param  date      Date - the date value to format\n\t   @param  settings  Object - attributes include:\n\t                     dayNamesShort    string[7] - abbreviated names of the days from Sunday (optional)\n\t                     dayNames         string[7] - names of the days from Sunday (optional)\n\t                     monthNamesShort  string[12] - abbreviated names of the months (optional)\n\t                     monthNames       string[12] - names of the months (optional)\n\t   @return  string - the date in the above format */\n\tformatDate: function (format, date, settings) {\n\t\tif (!date)\n\t\t\treturn '';\n\t\tvar dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;\n\t\tvar dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;\n\t\tvar monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;\n\t\tvar monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;\n\t\t// Check whether a format character is doubled\n\t\tvar lookAhead = function(match) {\n\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\n\t\t\tif (matches)\n\t\t\t\tiFormat++;\n\t\t\treturn matches;\n\t\t};\n\t\t// Format a number, with leading zero if necessary\n\t\tvar formatNumber = function(match, value, len) {\n\t\t\tvar num = '' + value;\n\t\t\tif (lookAhead(match))\n\t\t\t\twhile (num.length < len)\n\t\t\t\t\tnum = '0' + num;\n\t\t\treturn num;\n\t\t};\n\t\t// Format a name, short or long as requested\n\t\tvar formatName = function(match, value, shortNames, longNames) {\n\t\t\treturn (lookAhead(match) ? longNames[value] : shortNames[value]);\n\t\t};\n\t\tvar output = '';\n\t\tvar literal = false;\n\t\tif (date)\n\t\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++) {\n\t\t\t\tif (literal)\n\t\t\t\t\tif (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\"))\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\telse\n\t\t\t\t\t\toutput += format.charAt(iFormat);\n\t\t\t\telse\n\t\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\toutput += formatNumber('d', date.getDate(), 2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'D':\n\t\t\t\t\t\t\toutput += formatName('D', date.getDay(), dayNamesShort, dayNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'o':\n\t\t\t\t\t\t\toutput += formatNumber('o',\n\t\t\t\t\t\t\t\tMath.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\toutput += formatNumber('m', date.getMonth() + 1, 2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\toutput += formatName('M', date.getMonth(), monthNamesShort, monthNames);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\toutput += (lookAhead('y') ? date.getFullYear() :\n\t\t\t\t\t\t\t\t(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '@':\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '!':\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif (lookAhead(\"'\"))\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt(iFormat);\n\t\t\t\t\t}\n\t\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function (format) {\n\t\tvar chars = '';\n\t\tvar literal = false;\n\t\t// Check whether a format character is doubled\n\t\tvar lookAhead = function(match) {\n\t\t\tvar matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);\n\t\t\tif (matches)\n\t\t\t\tiFormat++;\n\t\t\treturn matches;\n\t\t};\n\t\tfor (var iFormat = 0; iFormat < format.length; iFormat++)\n\t\t\tif (literal)\n\t\t\t\tif (format.charAt(iFormat) == \"'\" && !lookAhead(\"'\"))\n\t\t\t\t\tliteral = false;\n\t\t\t\telse\n\t\t\t\t\tchars += format.charAt(iFormat);\n\t\t\telse\n\t\t\t\tswitch (format.charAt(iFormat)) {\n\t\t\t\t\tcase 'd': case 'm': case 'y': case '@':\n\t\t\t\t\t\tchars += '0123456789';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'D': case 'M':\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif (lookAhead(\"'\"))\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt(iFormat);\n\t\t\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function(inst, name) {\n\t\treturn inst.settings[name] !== undefined ?\n\t\t\tinst.settings[name] : this._defaults[name];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function(inst, noDefault) {\n\t\tif (inst.input.val() == inst.lastVal) {\n\t\t\treturn;\n\t\t}\n\t\tvar dateFormat = this._get(inst, 'dateFormat');\n\t\tvar dates = inst.lastVal = inst.input ? inst.input.val() : null;\n\t\tvar date, defaultDate;\n\t\tdate = defaultDate = this._getDefaultDate(inst);\n\t\tvar settings = this._getFormatConfig(inst);\n\t\ttry {\n\t\t\tdate = this.parseDate(dateFormat, dates, settings) || defaultDate;\n\t\t} catch (event) {\n\t\t\tthis.log(event);\n\t\t\tdates = (noDefault ? '' : dates);\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = (dates ? date.getDate() : 0);\n\t\tinst.currentMonth = (dates ? date.getMonth() : 0);\n\t\tinst.currentYear = (dates ? date.getFullYear() : 0);\n\t\tthis._adjustInstDate(inst);\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function(inst) {\n\t\treturn this._restrictMinMax(inst,\n\t\t\tthis._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function(inst, date, defaultDate) {\n\t\tvar offsetNumeric = function(offset) {\n\t\t\tvar date = new Date();\n\t\t\tdate.setDate(date.getDate() + offset);\n\t\t\treturn date;\n\t\t};\n\t\tvar offsetString = function(offset) {\n\t\t\ttry {\n\t\t\t\treturn $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),\n\t\t\t\t\toffset, $.datepicker._getFormatConfig(inst));\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\t// Ignore\n\t\t\t}\n\t\t\tvar date = (offset.toLowerCase().match(/^c/) ?\n\t\t\t\t$.datepicker._getDate(inst) : null) || new Date();\n\t\t\tvar year = date.getFullYear();\n\t\t\tvar month = date.getMonth();\n\t\t\tvar day = date.getDate();\n\t\t\tvar pattern = /([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;\n\t\t\tvar matches = pattern.exec(offset);\n\t\t\twhile (matches) {\n\t\t\t\tswitch (matches[2] || 'd') {\n\t\t\t\t\tcase 'd' : case 'D' :\n\t\t\t\t\t\tday += parseInt(matches[1],10); break;\n\t\t\t\t\tcase 'w' : case 'W' :\n\t\t\t\t\t\tday += parseInt(matches[1],10) * 7; break;\n\t\t\t\t\tcase 'm' : case 'M' :\n\t\t\t\t\t\tmonth += parseInt(matches[1],10);\n\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'y': case 'Y' :\n\t\t\t\t\t\tyear += parseInt(matches[1],10);\n\t\t\t\t\t\tday = Math.min(day, $.datepicker._getDaysInMonth(year, month));\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatches = pattern.exec(offset);\n\t\t\t}\n\t\t\treturn new Date(year, month, day);\n\t\t};\n\t\tvar newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) :\n\t\t\t(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));\n\t\tnewDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);\n\t\tif (newDate) {\n\t\t\tnewDate.setHours(0);\n\t\t\tnewDate.setMinutes(0);\n\t\t\tnewDate.setSeconds(0);\n\t\t\tnewDate.setMilliseconds(0);\n\t\t}\n\t\treturn this._daylightSavingAdjust(newDate);\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t   Hours may be non-zero on daylight saving cut-over:\n\t   > 12 when midnight changeover, but then cannot generate\n\t   midnight datetime, so jump to 1AM, otherwise reset.\n\t   @param  date  (Date) the date to check\n\t   @return  (Date) the corrected date */\n\t_daylightSavingAdjust: function(date) {\n\t\tif (!date) return null;\n\t\tdate.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function(inst, date, noChange) {\n\t\tvar clear = !date;\n\t\tvar origMonth = inst.selectedMonth;\n\t\tvar origYear = inst.selectedYear;\n\t\tvar newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)\n\t\t\tthis._notifyChange(inst);\n\t\tthis._adjustInstDate(inst);\n\t\tif (inst.input) {\n\t\t\tinst.input.val(clear ? '' : this._formatDate(inst));\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function(inst) {\n\t\tvar startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :\n\t\t\tthis._daylightSavingAdjust(new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function(inst) {\n\t\tvar stepMonths = this._get(inst, 'stepMonths');\n\t\tvar id = '#' + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find('[data-handler]').map(function () {\n\t\t\tvar handler = {\n\t\t\t\tprev: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, -stepMonths, 'M');\n\t\t\t\t},\n\t\t\t\tnext: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._adjustDate(id, +stepMonths, 'M');\n\t\t\t\t},\n\t\t\t\thide: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._gotoToday(id);\n\t\t\t\t},\n\t\t\t\tselectDay: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._selectDay(id, +this.getAttribute('data-month'), +this.getAttribute('data-year'), this);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'M');\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function () {\n\t\t\t\t\twindow['DP_jQuery_' + dpuuid].datepicker._selectMonthYear(id, this, 'Y');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$(this).bind(this.getAttribute('data-event'), handler[this.getAttribute('data-handler')]);\n\t\t});\n\t},\n\t\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function(inst) {\n\t\tvar today = new Date();\n\t\ttoday = this._daylightSavingAdjust(\n\t\t\tnew Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time\n\t\tvar isRTL = this._get(inst, 'isRTL');\n\t\tvar showButtonPanel = this._get(inst, 'showButtonPanel');\n\t\tvar hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');\n\t\tvar navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');\n\t\tvar numMonths = this._getNumberOfMonths(inst);\n\t\tvar showCurrentAtPos = this._get(inst, 'showCurrentAtPos');\n\t\tvar stepMonths = this._get(inst, 'stepMonths');\n\t\tvar isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);\n\t\tvar currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :\n\t\t\tnew Date(inst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\tvar minDate = this._getMinMaxDate(inst, 'min');\n\t\tvar maxDate = this._getMinMaxDate(inst, 'max');\n\t\tvar drawMonth = inst.drawMonth - showCurrentAtPos;\n\t\tvar drawYear = inst.drawYear;\n\t\tif (drawMonth < 0) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif (maxDate) {\n\t\t\tvar maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));\n\t\t\tmaxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);\n\t\t\twhile (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif (drawMonth < 0) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\t\tvar prevText = this._get(inst, 'prevText');\n\t\tprevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),\n\t\t\tthis._getFormatConfig(inst)));\n\t\tvar prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?\n\t\t\t'<a class=\"ui-datepicker-prev ui-corner-all\" data-handler=\"prev\" data-event=\"click\"' +\n\t\t\t' title=\"' + prevText + '\"><span class=\"ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '\">' + prevText + '</span></a>' :\n\t\t\t(hideIfNoPrevNext ? '' : '<a class=\"ui-datepicker-prev ui-corner-all ui-state-disabled\" title=\"'+ prevText +'\"><span class=\"ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '\">' + prevText + '</span></a>'));\n\t\tvar nextText = this._get(inst, 'nextText');\n\t\tnextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,\n\t\t\tthis._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),\n\t\t\tthis._getFormatConfig(inst)));\n\t\tvar next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?\n\t\t\t'<a class=\"ui-datepicker-next ui-corner-all\" data-handler=\"next\" data-event=\"click\"' +\n\t\t\t' title=\"' + nextText + '\"><span class=\"ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '\">' + nextText + '</span></a>' :\n\t\t\t(hideIfNoPrevNext ? '' : '<a class=\"ui-datepicker-next ui-corner-all ui-state-disabled\" title=\"'+ nextText + '\"><span class=\"ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '\">' + nextText + '</span></a>'));\n\t\tvar currentText = this._get(inst, 'currentText');\n\t\tvar gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);\n\t\tcurrentText = (!navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));\n\t\tvar controls = (!inst.inline ? '<button type=\"button\" class=\"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\" data-handler=\"hide\" data-event=\"click\">' +\n\t\t\tthis._get(inst, 'closeText') + '</button>' : '');\n\t\tvar buttonPanel = (showButtonPanel) ? '<div class=\"ui-datepicker-buttonpane ui-widget-content\">' + (isRTL ? controls : '') +\n\t\t\t(this._isInRange(inst, gotoDate) ? '<button type=\"button\" class=\"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\" data-handler=\"today\" data-event=\"click\"' +\n\t\t\t'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';\n\t\tvar firstDay = parseInt(this._get(inst, 'firstDay'),10);\n\t\tfirstDay = (isNaN(firstDay) ? 0 : firstDay);\n\t\tvar showWeek = this._get(inst, 'showWeek');\n\t\tvar dayNames = this._get(inst, 'dayNames');\n\t\tvar dayNamesShort = this._get(inst, 'dayNamesShort');\n\t\tvar dayNamesMin = this._get(inst, 'dayNamesMin');\n\t\tvar monthNames = this._get(inst, 'monthNames');\n\t\tvar monthNamesShort = this._get(inst, 'monthNamesShort');\n\t\tvar beforeShowDay = this._get(inst, 'beforeShowDay');\n\t\tvar showOtherMonths = this._get(inst, 'showOtherMonths');\n\t\tvar selectOtherMonths = this._get(inst, 'selectOtherMonths');\n\t\tvar calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;\n\t\tvar defaultDate = this._getDefaultDate(inst);\n\t\tvar html = '';\n\t\tfor (var row = 0; row < numMonths[0]; row++) {\n\t\t\tvar group = '';\n\t\t\tthis.maxRows = 4;\n\t\t\tfor (var col = 0; col < numMonths[1]; col++) {\n\t\t\t\tvar selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));\n\t\t\t\tvar cornerClass = ' ui-corner-all';\n\t\t\t\tvar calender = '';\n\t\t\t\tif (isMultiMonth) {\n\t\t\t\t\tcalender += '<div class=\"ui-datepicker-group';\n\t\t\t\t\tif (numMonths[1] > 1)\n\t\t\t\t\t\tswitch (col) {\n\t\t\t\t\t\t\tcase 0: calender += ' ui-datepicker-group-first';\n\t\t\t\t\t\t\t\tcornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;\n\t\t\t\t\t\t\tcase numMonths[1]-1: calender += ' ui-datepicker-group-last';\n\t\t\t\t\t\t\t\tcornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;\n\t\t\t\t\t\t\tdefault: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;\n\t\t\t\t\t\t}\n\t\t\t\t\tcalender += '\">';\n\t\t\t\t}\n\t\t\t\tcalender += '<div class=\"ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '\">' +\n\t\t\t\t\t(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +\n\t\t\t\t\t(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +\n\t\t\t\t\tthis._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers\n\t\t\t\t\t'</div><table class=\"ui-datepicker-calendar\"><thead>' +\n\t\t\t\t\t'<tr>';\n\t\t\t\tvar thead = (showWeek ? '<th class=\"ui-datepicker-week-col\">' + this._get(inst, 'weekHeader') + '</th>' : '');\n\t\t\t\tfor (var dow = 0; dow < 7; dow++) { // days of the week\n\t\t\t\t\tvar day = (dow + firstDay) % 7;\n\t\t\t\t\tthead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class=\"ui-datepicker-week-end\"' : '') + '>' +\n\t\t\t\t\t\t'<span title=\"' + dayNames[day] + '\">' + dayNamesMin[day] + '</span></th>';\n\t\t\t\t}\n\t\t\t\tcalender += thead + '</tr></thead><tbody>';\n\t\t\t\tvar daysInMonth = this._getDaysInMonth(drawYear, drawMonth);\n\t\t\t\tif (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)\n\t\t\t\t\tinst.selectedDay = Math.min(inst.selectedDay, daysInMonth);\n\t\t\t\tvar leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;\n\t\t\t\tvar curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate\n\t\t\t\tvar numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tvar printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));\n\t\t\t\tfor (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows\n\t\t\t\t\tcalender += '<tr>';\n\t\t\t\t\tvar tbody = (!showWeek ? '' : '<td class=\"ui-datepicker-week-col\">' +\n\t\t\t\t\t\tthis._get(inst, 'calculateWeek')(printDate) + '</td>');\n\t\t\t\t\tfor (var dow = 0; dow < 7; dow++) { // create date picker days\n\t\t\t\t\t\tvar daySettings = (beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);\n\t\t\t\t\t\tvar otherMonth = (printDate.getMonth() != drawMonth);\n\t\t\t\t\t\tvar unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||\n\t\t\t\t\t\t\t(minDate && printDate < minDate) || (maxDate && printDate > maxDate);\n\t\t\t\t\t\ttbody += '<td class=\"' +\n\t\t\t\t\t\t\t((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends\n\t\t\t\t\t\t\t(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months\n\t\t\t\t\t\t\t((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key\n\t\t\t\t\t\t\t(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t' ' + this._dayOverClass : '') + // highlight selected day\n\t\t\t\t\t\t\t(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') +  // highlight unselectable days\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates\n\t\t\t\t\t\t\t(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day\n\t\t\t\t\t\t\t(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '\"' + // highlight today (if different)\n\t\t\t\t\t\t\t((!otherMonth || showOtherMonths) && daySettings[2] ? ' title=\"' + daySettings[2] + '\"' : '') + // cell title\n\t\t\t\t\t\t\t(unselectable ? '' : ' data-handler=\"selectDay\" data-event=\"click\" data-month=\"' + printDate.getMonth() + '\" data-year=\"' + printDate.getFullYear() + '\"') + '>' + // actions\n\t\t\t\t\t\t\t(otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months\n\t\t\t\t\t\t\t(unselectable ? '<span class=\"ui-state-default\">' + printDate.getDate() + '</span>' : '<a class=\"ui-state-default' +\n\t\t\t\t\t\t\t(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +\n\t\t\t\t\t\t\t(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day\n\t\t\t\t\t\t\t(otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months\n\t\t\t\t\t\t\t'\" href=\"#\">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date\n\t\t\t\t\t\tprintDate.setDate(printDate.getDate() + 1);\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust(printDate);\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + '</tr>';\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif (drawMonth > 11) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += '</tbody></table>' + (isMultiMonth ? '</div>' + \n\t\t\t\t\t\t\t((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class=\"ui-datepicker-row-break\"></div>' : '') : '');\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?\n\t\t\t'<iframe src=\"javascript:false;\" class=\"ui-datepicker-cover\" frameborder=\"0\"></iframe>' : '');\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort) {\n\t\tvar changeMonth = this._get(inst, 'changeMonth');\n\t\tvar changeYear = this._get(inst, 'changeYear');\n\t\tvar showMonthAfterYear = this._get(inst, 'showMonthAfterYear');\n\t\tvar html = '<div class=\"ui-datepicker-title\">';\n\t\tvar monthHtml = '';\n\t\t// month selection\n\t\tif (secondary || !changeMonth)\n\t\t\tmonthHtml += '<span class=\"ui-datepicker-month\">' + monthNames[drawMonth] + '</span>';\n\t\telse {\n\t\t\tvar inMinYear = (minDate && minDate.getFullYear() == drawYear);\n\t\t\tvar inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);\n\t\t\tmonthHtml += '<select class=\"ui-datepicker-month\" data-handler=\"selectMonth\" data-event=\"change\">';\n\t\t\tfor (var month = 0; month < 12; month++) {\n\t\t\t\tif ((!inMinYear || month >= minDate.getMonth()) &&\n\t\t\t\t\t\t(!inMaxYear || month <= maxDate.getMonth()))\n\t\t\t\t\tmonthHtml += '<option value=\"' + month + '\"' +\n\t\t\t\t\t\t(month == drawMonth ? ' selected=\"selected\"' : '') +\n\t\t\t\t\t\t'>' + monthNamesShort[month] + '</option>';\n\t\t\t}\n\t\t\tmonthHtml += '</select>';\n\t\t}\n\t\tif (!showMonthAfterYear)\n\t\t\thtml += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');\n\t\t// year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = '';\n\t\t\tif (secondary || !changeYear)\n\t\t\t\thtml += '<span class=\"ui-datepicker-year\">' + drawYear + '</span>';\n\t\t\telse {\n\t\t\t\t// determine range of years to display\n\t\t\t\tvar years = this._get(inst, 'yearRange').split(':');\n\t\t\t\tvar thisYear = new Date().getFullYear();\n\t\t\t\tvar determineYear = function(value) {\n\t\t\t\t\tvar year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :\n\t\t\t\t\t\t(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :\n\t\t\t\t\t\tparseInt(value, 10)));\n\t\t\t\t\treturn (isNaN(year) ? thisYear : year);\n\t\t\t\t};\n\t\t\t\tvar year = determineYear(years[0]);\n\t\t\t\tvar endYear = Math.max(year, determineYear(years[1] || ''));\n\t\t\t\tyear = (minDate ? Math.max(year, minDate.getFullYear()) : year);\n\t\t\t\tendYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);\n\t\t\t\tinst.yearshtml += '<select class=\"ui-datepicker-year\" data-handler=\"selectYear\" data-event=\"change\">';\n\t\t\t\tfor (; year <= endYear; year++) {\n\t\t\t\t\tinst.yearshtml += '<option value=\"' + year + '\"' +\n\t\t\t\t\t\t(year == drawYear ? ' selected=\"selected\"' : '') +\n\t\t\t\t\t\t'>' + year + '</option>';\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += '</select>';\n\t\t\t\t\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\t\thtml += this._get(inst, 'yearSuffix');\n\t\tif (showMonthAfterYear)\n\t\t\thtml += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;\n\t\thtml += '</div>'; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function(inst, offset, period) {\n\t\tvar year = inst.drawYear + (period == 'Y' ? offset : 0);\n\t\tvar month = inst.drawMonth + (period == 'M' ? offset : 0);\n\t\tvar day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +\n\t\t\t(period == 'D' ? offset : 0);\n\t\tvar date = this._restrictMinMax(inst,\n\t\t\tthis._daylightSavingAdjust(new Date(year, month, day)));\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif (period == 'M' || period == 'Y')\n\t\t\tthis._notifyChange(inst);\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function(inst, date) {\n\t\tvar minDate = this._getMinMaxDate(inst, 'min');\n\t\tvar maxDate = this._getMinMaxDate(inst, 'max');\n\t\tvar newDate = (minDate && date < minDate ? minDate : date);\n\t\tnewDate = (maxDate && newDate > maxDate ? maxDate : newDate);\n\t\treturn newDate;\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function(inst) {\n\t\tvar onChange = this._get(inst, 'onChangeMonthYear');\n\t\tif (onChange)\n\t\t\tonChange.apply((inst.input ? inst.input[0] : null),\n\t\t\t\t[inst.selectedYear, inst.selectedMonth + 1, inst]);\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function(inst) {\n\t\tvar numMonths = this._get(inst, 'numberOfMonths');\n\t\treturn (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function(inst, minMax) {\n\t\treturn this._determineDate(inst, this._get(inst, minMax + 'Date'), null);\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function(year, month) {\n\t\treturn 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function(year, month) {\n\t\treturn new Date(year, month, 1).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function(inst, offset, curYear, curMonth) {\n\t\tvar numMonths = this._getNumberOfMonths(inst);\n\t\tvar date = this._daylightSavingAdjust(new Date(curYear,\n\t\t\tcurMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));\n\t\tif (offset < 0)\n\t\t\tdate.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));\n\t\treturn this._isInRange(inst, date);\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function(inst, date) {\n\t\tvar minDate = this._getMinMaxDate(inst, 'min');\n\t\tvar maxDate = this._getMinMaxDate(inst, 'max');\n\t\treturn ((!minDate || date.getTime() >= minDate.getTime()) &&\n\t\t\t(!maxDate || date.getTime() <= maxDate.getTime()));\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function(inst) {\n\t\tvar shortYearCutoff = this._get(inst, 'shortYearCutoff');\n\t\tshortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));\n\t\treturn {shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),\n\t\t\tmonthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function(inst, day, month, year) {\n\t\tif (!day) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = (day ? (typeof day == 'object' ? day :\n\t\t\tthis._daylightSavingAdjust(new Date(year, month, day))) :\n\t\t\tthis._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));\n\t\treturn this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));\n\t}\n});\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */ \nfunction bindHover(dpDiv) {\n\tvar selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';\n\treturn dpDiv.bind('mouseout', function(event) {\n\t\t\tvar elem = $( event.target ).closest( selector );\n\t\t\tif ( !elem.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telem.removeClass( \"ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover\" );\n\t\t})\n\t\t.bind('mouseover', function(event) {\n\t\t\tvar elem = $( event.target ).closest( selector );\n\t\t\tif ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||\n\t\t\t\t\t!elem.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');\n\t\t\telem.addClass('ui-state-hover');\n\t\t\tif (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');\n\t\t\tif (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');\n\t\t});\n}\n\n/* jQuery extend now ignores nulls! */\nfunction extendRemove(target, props) {\n\t$.extend(target, props);\n\tfor (var name in props)\n\t\tif (props[name] == null || props[name] == undefined)\n\t\t\ttarget[name] = props[name];\n\treturn target;\n};\n\n/* Determine whether an object is an array. */\nfunction isArray(a) {\n\treturn (a && (($.browser.safari && typeof a == 'object' && a.length) ||\n\t\t(a.constructor && a.constructor.toString().match(/\\Array\\(\\)/))));\n};\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n                    Object - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function(options){\n\t\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\t\n\t/* Initialise the date picker. */\n\tif (!$.datepicker.initialized) {\n\t\t$(document).mousedown($.datepicker._checkExternalClick).\n\t\t\tfind('body').append($.datepicker.dpDiv);\n\t\t$.datepicker.initialized = true;\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call(arguments, 1);\n\tif (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))\n\t\treturn $.datepicker['_' + options + 'Datepicker'].\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\n\tif (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')\n\t\treturn $.datepicker['_' + options + 'Datepicker'].\n\t\t\tapply($.datepicker, [this[0]].concat(otherArgs));\n\treturn this.each(function() {\n\t\ttypeof options == 'string' ?\n\t\t\t$.datepicker['_' + options + 'Datepicker'].\n\t\t\t\tapply($.datepicker, [this].concat(otherArgs)) :\n\t\t\t$.datepicker._attachDatepicker(this, options);\n\t});\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.8.24\";\n\n// Workaround for #4055\n// Add another global to avoid noConflict issues with inline event handlers\nwindow['DP_jQuery_' + dpuuid] = $;\n\n})(jQuery);\n\n(function( $, undefined ) {\n\nvar uiDialogClasses =\n\t\t'ui-dialog ' +\n\t\t'ui-widget ' +\n\t\t'ui-widget-content ' +\n\t\t'ui-corner-all ',\n\tsizeRelatedOptions = {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\tresizableRelatedOptions = {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t};\n\n$.widget(\"ui.dialog\", {\n\toptions: {\n\t\tautoOpen: true,\n\t\tbuttons: {},\n\t\tcloseOnEscape: true,\n\t\tcloseText: 'close',\n\t\tdialogClass: '',\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: 'auto',\n\t\tmaxHeight: false,\n\t\tmaxWidth: false,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: 'center',\n\t\t\tat: 'center',\n\t\t\tcollision: 'fit',\n\t\t\t// ensure that the titlebar is never outside the document\n\t\t\tusing: function(pos) {\n\t\t\t\tvar topOffset = $(this).css(pos).offset().top;\n\t\t\t\tif (topOffset < 0) {\n\t\t\t\t\t$(this).css('top', pos.top - topOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\tstack: true,\n\t\ttitle: '',\n\t\twidth: 300,\n\t\tzIndex: 1000\n\t},\n\n\t_create: function() {\n\t\tthis.originalTitle = this.element.attr('title');\n\t\t// #5742 - .attr() might return a DOMElement\n\t\tif ( typeof this.originalTitle !== \"string\" ) {\n\t\t\tthis.originalTitle = \"\";\n\t\t}\n\n\t\tthis.options.title = this.options.title || this.originalTitle;\n\t\tvar self = this,\n\t\t\toptions = self.options,\n\n\t\t\ttitle = options.title || '&#160;',\n\t\t\ttitleId = $.ui.dialog.getTitleId(self.element),\n\n\t\t\tuiDialog = (self.uiDialog = $('<div></div>'))\n\t\t\t\t.appendTo(document.body)\n\t\t\t\t.hide()\n\t\t\t\t.addClass(uiDialogClasses + options.dialogClass)\n\t\t\t\t.css({\n\t\t\t\t\tzIndex: options.zIndex\n\t\t\t\t})\n\t\t\t\t// setting tabIndex makes the div focusable\n\t\t\t\t// setting outline to 0 prevents a border on focus in Mozilla\n\t\t\t\t.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {\n\t\t\t\t\tif (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.close(event);\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.attr({\n\t\t\t\t\trole: 'dialog',\n\t\t\t\t\t'aria-labelledby': titleId\n\t\t\t\t})\n\t\t\t\t.mousedown(function(event) {\n\t\t\t\t\tself.moveToTop(false, event);\n\t\t\t\t}),\n\n\t\t\tuiDialogContent = self.element\n\t\t\t\t.show()\n\t\t\t\t.removeAttr('title')\n\t\t\t\t.addClass(\n\t\t\t\t\t'ui-dialog-content ' +\n\t\t\t\t\t'ui-widget-content')\n\t\t\t\t.appendTo(uiDialog),\n\n\t\t\tuiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>'))\n\t\t\t\t.addClass(\n\t\t\t\t\t'ui-dialog-titlebar ' +\n\t\t\t\t\t'ui-widget-header ' +\n\t\t\t\t\t'ui-corner-all ' +\n\t\t\t\t\t'ui-helper-clearfix'\n\t\t\t\t)\n\t\t\t\t.prependTo(uiDialog),\n\n\t\t\tuiDialogTitlebarClose = $('<a href=\"#\"></a>')\n\t\t\t\t.addClass(\n\t\t\t\t\t'ui-dialog-titlebar-close ' +\n\t\t\t\t\t'ui-corner-all'\n\t\t\t\t)\n\t\t\t\t.attr('role', 'button')\n\t\t\t\t.hover(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tuiDialogTitlebarClose.addClass('ui-state-hover');\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tuiDialogTitlebarClose.removeClass('ui-state-hover');\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t.focus(function() {\n\t\t\t\t\tuiDialogTitlebarClose.addClass('ui-state-focus');\n\t\t\t\t})\n\t\t\t\t.blur(function() {\n\t\t\t\t\tuiDialogTitlebarClose.removeClass('ui-state-focus');\n\t\t\t\t})\n\t\t\t\t.click(function(event) {\n\t\t\t\t\tself.close(event);\n\t\t\t\t\treturn false;\n\t\t\t\t})\n\t\t\t\t.appendTo(uiDialogTitlebar),\n\n\t\t\tuiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>'))\n\t\t\t\t.addClass(\n\t\t\t\t\t'ui-icon ' +\n\t\t\t\t\t'ui-icon-closethick'\n\t\t\t\t)\n\t\t\t\t.text(options.closeText)\n\t\t\t\t.appendTo(uiDialogTitlebarClose),\n\n\t\t\tuiDialogTitle = $('<span></span>')\n\t\t\t\t.addClass('ui-dialog-title')\n\t\t\t\t.attr('id', titleId)\n\t\t\t\t.html(title)\n\t\t\t\t.prependTo(uiDialogTitlebar);\n\n\t\t//handling of deprecated beforeclose (vs beforeClose) option\n\t\t//Ticket #4669 http://dev.jqueryui.com/ticket/4669\n\t\t//TODO: remove in 1.9pre\n\t\tif ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) {\n\t\t\toptions.beforeClose = options.beforeclose;\n\t\t}\n\n\t\tuiDialogTitlebar.find(\"*\").add(uiDialogTitlebar).disableSelection();\n\n\t\tif (options.draggable && $.fn.draggable) {\n\t\t\tself._makeDraggable();\n\t\t}\n\t\tif (options.resizable && $.fn.resizable) {\n\t\t\tself._makeResizable();\n\t\t}\n\n\t\tself._createButtons(options.buttons);\n\t\tself._isOpen = false;\n\n\t\tif ($.fn.bgiframe) {\n\t\t\tuiDialog.bgiframe();\n\t\t}\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tvar self = this;\n\t\t\n\t\tif (self.overlay) {\n\t\t\tself.overlay.destroy();\n\t\t}\n\t\tself.uiDialog.hide();\n\t\tself.element\n\t\t\t.unbind('.dialog')\n\t\t\t.removeData('dialog')\n\t\t\t.removeClass('ui-dialog-content ui-widget-content')\n\t\t\t.hide().appendTo('body');\n\t\tself.uiDialog.remove();\n\n\t\tif (self.originalTitle) {\n\t\t\tself.element.attr('title', self.originalTitle);\n\t\t}\n\n\t\treturn self;\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tclose: function(event) {\n\t\tvar self = this,\n\t\t\tmaxZ, thisZ;\n\t\t\n\t\tif (false === self._trigger('beforeClose', event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.overlay) {\n\t\t\tself.overlay.destroy();\n\t\t}\n\t\tself.uiDialog.unbind('keypress.ui-dialog');\n\n\t\tself._isOpen = false;\n\n\t\tif (self.options.hide) {\n\t\t\tself.uiDialog.hide(self.options.hide, function() {\n\t\t\t\tself._trigger('close', event);\n\t\t\t});\n\t\t} else {\n\t\t\tself.uiDialog.hide();\n\t\t\tself._trigger('close', event);\n\t\t}\n\n\t\t$.ui.dialog.overlay.resize();\n\n\t\t// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)\n\t\tif (self.options.modal) {\n\t\t\tmaxZ = 0;\n\t\t\t$('.ui-dialog').each(function() {\n\t\t\t\tif (this !== self.uiDialog[0]) {\n\t\t\t\t\tthisZ = $(this).css('z-index');\n\t\t\t\t\tif(!isNaN(thisZ)) {\n\t\t\t\t\t\tmaxZ = Math.max(maxZ, thisZ);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t$.ui.dialog.maxZ = maxZ;\n\t\t}\n\n\t\treturn self;\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\t// the force parameter allows us to move modal dialogs to their correct\n\t// position on open\n\tmoveToTop: function(force, event) {\n\t\tvar self = this,\n\t\t\toptions = self.options,\n\t\t\tsaveScroll;\n\n\t\tif ((options.modal && !force) ||\n\t\t\t(!options.stack && !options.modal)) {\n\t\t\treturn self._trigger('focus', event);\n\t\t}\n\n\t\tif (options.zIndex > $.ui.dialog.maxZ) {\n\t\t\t$.ui.dialog.maxZ = options.zIndex;\n\t\t}\n\t\tif (self.overlay) {\n\t\t\t$.ui.dialog.maxZ += 1;\n\t\t\tself.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ);\n\t\t}\n\n\t\t//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.\n\t\t//  http://ui.jquery.com/bugs/ticket/3193\n\t\tsaveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() };\n\t\t$.ui.dialog.maxZ += 1;\n\t\tself.uiDialog.css('z-index', $.ui.dialog.maxZ);\n\t\tself.element.attr(saveScroll);\n\t\tself._trigger('focus', event);\n\n\t\treturn self;\n\t},\n\n\topen: function() {\n\t\tif (this._isOpen) { return; }\n\n\t\tvar self = this,\n\t\t\toptions = self.options,\n\t\t\tuiDialog = self.uiDialog;\n\n\t\tself.overlay = options.modal ? new $.ui.dialog.overlay(self) : null;\n\t\tself._size();\n\t\tself._position(options.position);\n\t\tuiDialog.show(options.show);\n\t\tself.moveToTop(true);\n\n\t\t// prevent tabbing out of modal dialogs\n\t\tif ( options.modal ) {\n\t\t\tuiDialog.bind( \"keydown.ui-dialog\", function( event ) {\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar tabbables = $(':tabbable', this),\n\t\t\t\t\tfirst = tabbables.filter(':first'),\n\t\t\t\t\tlast  = tabbables.filter(':last');\n\n\t\t\t\tif (event.target === last[0] && !event.shiftKey) {\n\t\t\t\t\tfirst.focus(1);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (event.target === first[0] && event.shiftKey) {\n\t\t\t\t\tlast.focus(1);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// set focus to the first tabbable element in the content area or the first button\n\t\t// if there are no tabbable elements, set focus on the dialog itself\n\t\t$(self.element.find(':tabbable').get().concat(\n\t\t\tuiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(\n\t\t\t\tuiDialog.get()))).eq(0).focus();\n\n\t\tself._isOpen = true;\n\t\tself._trigger('open');\n\n\t\treturn self;\n\t},\n\n\t_createButtons: function(buttons) {\n\t\tvar self = this,\n\t\t\thasButtons = false,\n\t\t\tuiDialogButtonPane = $('<div></div>')\n\t\t\t\t.addClass(\n\t\t\t\t\t'ui-dialog-buttonpane ' +\n\t\t\t\t\t'ui-widget-content ' +\n\t\t\t\t\t'ui-helper-clearfix'\n\t\t\t\t),\n\t\t\tuiButtonSet = $( \"<div></div>\" )\n\t\t\t\t.addClass( \"ui-dialog-buttonset\" )\n\t\t\t\t.appendTo( uiDialogButtonPane );\n\n\t\t// if we already have a button pane, remove it\n\t\tself.uiDialog.find('.ui-dialog-buttonpane').remove();\n\n\t\tif (typeof buttons === 'object' && buttons !== null) {\n\t\t\t$.each(buttons, function() {\n\t\t\t\treturn !(hasButtons = true);\n\t\t\t});\n\t\t}\n\t\tif (hasButtons) {\n\t\t\t$.each(buttons, function(name, props) {\n\t\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t\t{ click: props, text: name } :\n\t\t\t\t\tprops;\n\t\t\t\tvar button = $('<button type=\"button\"></button>')\n\t\t\t\t\t.click(function() {\n\t\t\t\t\t\tprops.click.apply(self.element[0], arguments);\n\t\t\t\t\t})\n\t\t\t\t\t.appendTo(uiButtonSet);\n\t\t\t\t// can't use .attr( props, true ) with jQuery 1.3.2.\n\t\t\t\t$.each( props, function( key, value ) {\n\t\t\t\t\tif ( key === \"click\" ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( key in button ) {\n\t\t\t\t\t\tbutton[ key ]( value );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbutton.attr( key, value );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif ($.fn.button) {\n\t\t\t\t\tbutton.button();\n\t\t\t\t}\n\t\t\t});\n\t\t\tuiDialogButtonPane.appendTo(self.uiDialog);\n\t\t}\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar self = this,\n\t\t\toptions = self.options,\n\t\t\tdoc = $(document),\n\t\t\theightBeforeDrag;\n\n\t\tfunction filteredUi(ui) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tself.uiDialog.draggable({\n\t\t\tcancel: '.ui-dialog-content, .ui-dialog-titlebar-close',\n\t\t\thandle: '.ui-dialog-titlebar',\n\t\t\tcontainment: 'document',\n\t\t\tstart: function(event, ui) {\n\t\t\t\theightBeforeDrag = options.height === \"auto\" ? \"auto\" : $(this).height();\n\t\t\t\t$(this).height($(this).height()).addClass(\"ui-dialog-dragging\");\n\t\t\t\tself._trigger('dragStart', event, filteredUi(ui));\n\t\t\t},\n\t\t\tdrag: function(event, ui) {\n\t\t\t\tself._trigger('drag', event, filteredUi(ui));\n\t\t\t},\n\t\t\tstop: function(event, ui) {\n\t\t\t\toptions.position = [ui.position.left - doc.scrollLeft(),\n\t\t\t\t\tui.position.top - doc.scrollTop()];\n\t\t\t\t$(this).removeClass(\"ui-dialog-dragging\").height(heightBeforeDrag);\n\t\t\t\tself._trigger('dragStop', event, filteredUi(ui));\n\t\t\t\t$.ui.dialog.overlay.resize();\n\t\t\t}\n\t\t});\n\t},\n\n\t_makeResizable: function(handles) {\n\t\thandles = (handles === undefined ? this.options.resizable : handles);\n\t\tvar self = this,\n\t\t\toptions = self.options,\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = self.uiDialog.css('position'),\n\t\t\tresizeHandles = (typeof handles === 'string' ?\n\t\t\t\thandles\t:\n\t\t\t\t'n,e,s,w,se,sw,ne,nw'\n\t\t\t);\n\n\t\tfunction filteredUi(ui) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tself.uiDialog.resizable({\n\t\t\tcancel: '.ui-dialog-content',\n\t\t\tcontainment: 'document',\n\t\t\talsoResize: self.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: self._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function(event, ui) {\n\t\t\t\t$(this).addClass(\"ui-dialog-resizing\");\n\t\t\t\tself._trigger('resizeStart', event, filteredUi(ui));\n\t\t\t},\n\t\t\tresize: function(event, ui) {\n\t\t\t\tself._trigger('resize', event, filteredUi(ui));\n\t\t\t},\n\t\t\tstop: function(event, ui) {\n\t\t\t\t$(this).removeClass(\"ui-dialog-resizing\");\n\t\t\t\toptions.height = $(this).height();\n\t\t\t\toptions.width = $(this).width();\n\t\t\t\tself._trigger('resizeStop', event, filteredUi(ui));\n\t\t\t\t$.ui.dialog.overlay.resize();\n\t\t\t}\n\t\t})\n\t\t.css('position', position)\n\t\t.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\tif (options.height === 'auto') {\n\t\t\treturn options.minHeight;\n\t\t} else {\n\t\t\treturn Math.min(options.minHeight, options.height);\n\t\t}\n\t},\n\n\t_position: function(position) {\n\t\tvar myAt = [],\n\t\t\toffset = [0, 0],\n\t\t\tisVisible;\n\n\t\tif (position) {\n\t\t\t// deep extending converts arrays to objects in jQuery <= 1.3.2 :-(\n\t//\t\tif (typeof position == 'string' || $.isArray(position)) {\n\t//\t\t\tmyAt = $.isArray(position) ? position : position.split(' ');\n\n\t\t\tif (typeof position === 'string' || (typeof position === 'object' && '0' in position)) {\n\t\t\t\tmyAt = position.split ? position.split(' ') : [position[0], position[1]];\n\t\t\t\tif (myAt.length === 1) {\n\t\t\t\t\tmyAt[1] = myAt[0];\n\t\t\t\t}\n\n\t\t\t\t$.each(['left', 'top'], function(i, offsetPosition) {\n\t\t\t\t\tif (+myAt[i] === myAt[i]) {\n\t\t\t\t\t\toffset[i] = myAt[i];\n\t\t\t\t\t\tmyAt[i] = offsetPosition;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tposition = {\n\t\t\t\t\tmy: myAt.join(\" \"),\n\t\t\t\t\tat: myAt.join(\" \"),\n\t\t\t\t\toffset: offset.join(\" \")\n\t\t\t\t};\n\t\t\t} \n\n\t\t\tposition = $.extend({}, $.ui.dialog.prototype.options.position, position);\n\t\t} else {\n\t\t\tposition = $.ui.dialog.prototype.options.position;\n\t\t}\n\n\t\t// need to show the dialog to get the actual offset in the position plugin\n\t\tisVisible = this.uiDialog.is(':visible');\n\t\tif (!isVisible) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog\n\t\t\t// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781\n\t\t\t.css({ top: 0, left: 0 })\n\t\t\t.position($.extend({ of: window }, position));\n\t\tif (!isVisible) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar self = this,\n\t\t\tresizableOptions = {},\n\t\t\tresize = false;\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tself._setOption( key, value );\n\t\t\t\n\t\t\tif ( key in sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t});\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function(key, value){\n\t\tvar self = this,\n\t\t\tuiDialog = self.uiDialog;\n\n\t\tswitch (key) {\n\t\t\t//handling of deprecated beforeclose (vs beforeClose) option\n\t\t\t//Ticket #4669 http://dev.jqueryui.com/ticket/4669\n\t\t\t//TODO: remove in 1.9pre\n\t\t\tcase \"beforeclose\":\n\t\t\t\tkey = \"beforeClose\";\n\t\t\t\tbreak;\n\t\t\tcase \"buttons\":\n\t\t\t\tself._createButtons(value);\n\t\t\t\tbreak;\n\t\t\tcase \"closeText\":\n\t\t\t\t// ensure that we always pass a string\n\t\t\t\tself.uiDialogTitlebarCloseText.text(\"\" + value);\n\t\t\t\tbreak;\n\t\t\tcase \"dialogClass\":\n\t\t\t\tuiDialog\n\t\t\t\t\t.removeClass(self.options.dialogClass)\n\t\t\t\t\t.addClass(uiDialogClasses + value);\n\t\t\t\tbreak;\n\t\t\tcase \"disabled\":\n\t\t\t\tif (value) {\n\t\t\t\t\tuiDialog.addClass('ui-dialog-disabled');\n\t\t\t\t} else {\n\t\t\t\t\tuiDialog.removeClass('ui-dialog-disabled');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"draggable\":\n\t\t\t\tvar isDraggable = uiDialog.is( \":data(draggable)\" );\n\t\t\t\tif ( isDraggable && !value ) {\n\t\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( !isDraggable && value ) {\n\t\t\t\t\tself._makeDraggable();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"position\":\n\t\t\t\tself._position(value);\n\t\t\t\tbreak;\n\t\t\tcase \"resizable\":\n\t\t\t\t// currently resizable, becoming non-resizable\n\t\t\t\tvar isResizable = uiDialog.is( \":data(resizable)\" );\n\t\t\t\tif (isResizable && !value) {\n\t\t\t\t\tuiDialog.resizable('destroy');\n\t\t\t\t}\n\n\t\t\t\t// currently resizable, changing handles\n\t\t\t\tif (isResizable && typeof value === 'string') {\n\t\t\t\t\tuiDialog.resizable('option', 'handles', value);\n\t\t\t\t}\n\n\t\t\t\t// currently non-resizable, becoming resizable\n\t\t\t\tif (!isResizable && value !== false) {\n\t\t\t\t\tself._makeResizable(value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"title\":\n\t\t\t\t// convert whatever was passed in o a string, for html() to not throw up\n\t\t\t\t$(\".ui-dialog-title\", self.uiDialogTitlebar).html(\"\" + (value || '&#160;'));\n\t\t\t\tbreak;\n\t\t}\n\n\t\t$.Widget.prototype._setOption.apply(self, arguments);\n\t},\n\n\t_size: function() {\n\t\t/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t * divs will both have width and height set, so we need to reset them\n\t\t */\n\t\tvar options = this.options,\n\t\t\tnonContentHeight,\n\t\t\tminContentHeight,\n\t\t\tisVisible = this.uiDialog.is( \":visible\" );\n\n\t\t// reset content sizing\n\t\tthis.element.show().css({\n\t\t\twidth: 'auto',\n\t\t\tminHeight: 0,\n\t\t\theight: 0\n\t\t});\n\n\t\tif (options.minWidth > options.width) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css({\n\t\t\t\theight: 'auto',\n\t\t\t\twidth: options.width\n\t\t\t})\n\t\t\t.height();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\t\n\t\tif ( options.height === \"auto\" ) {\n\t\t\t// only needed for IE6 support\n\t\t\tif ( $.support.minHeight ) {\n\t\t\t\tthis.element.css({\n\t\t\t\t\tminHeight: minContentHeight,\n\t\t\t\t\theight: \"auto\"\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.uiDialog.show();\n\t\t\t\tvar autoHeight = this.element.css( \"height\", \"auto\" ).height();\n\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\tthis.uiDialog.hide();\n\t\t\t\t}\n\t\t\t\tthis.element.height( Math.max( autoHeight, minContentHeight ) );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.height( Math.max( options.height - nonContentHeight, 0 ) );\n\t\t}\n\n\t\tif (this.uiDialog.is(':data(resizable)')) {\n\t\t\tthis.uiDialog.resizable('option', 'minHeight', this._minHeight());\n\t\t}\n\t}\n});\n\n$.extend($.ui.dialog, {\n\tversion: \"1.8.24\",\n\n\tuuid: 0,\n\tmaxZ: 0,\n\n\tgetTitleId: function($el) {\n\t\tvar id = $el.attr('id');\n\t\tif (!id) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = this.uuid;\n\t\t}\n\t\treturn 'ui-dialog-title-' + id;\n\t},\n\n\toverlay: function(dialog) {\n\t\tthis.$el = $.ui.dialog.overlay.create(dialog);\n\t}\n});\n\n$.extend($.ui.dialog.overlay, {\n\tinstances: [],\n\t// reuse old instances due to IE memory leak with alpha transparency (see #5185)\n\toldInstances: [],\n\tmaxZ: 0,\n\tevents: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),\n\t\tfunction(event) { return event + '.dialog-overlay'; }).join(' '),\n\tcreate: function(dialog) {\n\t\tif (this.instances.length === 0) {\n\t\t\t// prevent use of anchors and inputs\n\t\t\t// we use a setTimeout in case the overlay is created from an\n\t\t\t// event that we're going to be cancelling (see #2804)\n\t\t\tsetTimeout(function() {\n\t\t\t\t// handle $(el).dialog().dialog('close') (see #4065)\n\t\t\t\tif ($.ui.dialog.overlay.instances.length) {\n\t\t\t\t\t$(document).bind($.ui.dialog.overlay.events, function(event) {\n\t\t\t\t\t\t// stop events if the z-index of the target is < the z-index of the overlay\n\t\t\t\t\t\t// we cannot return true when we don't want to cancel the event (#3523)\n\t\t\t\t\t\tif ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, 1);\n\n\t\t\t// allow closing by pressing the escape key\n\t\t\t$(document).bind('keydown.dialog-overlay', function(event) {\n\t\t\t\tif (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE) {\n\t\t\t\t\t\n\t\t\t\t\tdialog.close(event);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// handle window resize\n\t\t\t$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);\n\t\t}\n\n\t\tvar $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay'))\n\t\t\t.appendTo(document.body)\n\t\t\t.css({\n\t\t\t\twidth: this.width(),\n\t\t\t\theight: this.height()\n\t\t\t});\n\n\t\tif ($.fn.bgiframe) {\n\t\t\t$el.bgiframe();\n\t\t}\n\n\t\tthis.instances.push($el);\n\t\treturn $el;\n\t},\n\n\tdestroy: function($el) {\n\t\tvar indexOf = $.inArray($el, this.instances);\n\t\tif (indexOf != -1){\n\t\t\tthis.oldInstances.push(this.instances.splice(indexOf, 1)[0]);\n\t\t}\n\n\t\tif (this.instances.length === 0) {\n\t\t\t$([document, window]).unbind('.dialog-overlay');\n\t\t}\n\n\t\t$el.remove();\n\t\t\n\t\t// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)\n\t\tvar maxZ = 0;\n\t\t$.each(this.instances, function() {\n\t\t\tmaxZ = Math.max(maxZ, this.css('z-index'));\n\t\t});\n\t\tthis.maxZ = maxZ;\n\t},\n\n\theight: function() {\n\t\tvar scrollHeight,\n\t\t\toffsetHeight;\n\t\t// handle IE 6\n\t\tif ($.browser.msie && $.browser.version < 7) {\n\t\t\tscrollHeight = Math.max(\n\t\t\t\tdocument.documentElement.scrollHeight,\n\t\t\t\tdocument.body.scrollHeight\n\t\t\t);\n\t\t\toffsetHeight = Math.max(\n\t\t\t\tdocument.documentElement.offsetHeight,\n\t\t\t\tdocument.body.offsetHeight\n\t\t\t);\n\n\t\t\tif (scrollHeight < offsetHeight) {\n\t\t\t\treturn $(window).height() + 'px';\n\t\t\t} else {\n\t\t\t\treturn scrollHeight + 'px';\n\t\t\t}\n\t\t// handle \"good\" browsers\n\t\t} else {\n\t\t\treturn $(document).height() + 'px';\n\t\t}\n\t},\n\n\twidth: function() {\n\t\tvar scrollWidth,\n\t\t\toffsetWidth;\n\t\t// handle IE\n\t\tif ( $.browser.msie ) {\n\t\t\tscrollWidth = Math.max(\n\t\t\t\tdocument.documentElement.scrollWidth,\n\t\t\t\tdocument.body.scrollWidth\n\t\t\t);\n\t\t\toffsetWidth = Math.max(\n\t\t\t\tdocument.documentElement.offsetWidth,\n\t\t\t\tdocument.body.offsetWidth\n\t\t\t);\n\n\t\t\tif (scrollWidth < offsetWidth) {\n\t\t\t\treturn $(window).width() + 'px';\n\t\t\t} else {\n\t\t\t\treturn scrollWidth + 'px';\n\t\t\t}\n\t\t// handle \"good\" browsers\n\t\t} else {\n\t\t\treturn $(document).width() + 'px';\n\t\t}\n\t},\n\n\tresize: function() {\n\t\t/* If the dialog is draggable and the user drags it past the\n\t\t * right edge of the window, the document becomes wider so we\n\t\t * need to stretch the overlay. If the user then drags the\n\t\t * dialog back to the left, the document will become narrower,\n\t\t * so we need to shrink the overlay to the appropriate size.\n\t\t * This is handled by shrinking the overlay before setting it\n\t\t * to the full document size.\n\t\t */\n\t\tvar $overlays = $([]);\n\t\t$.each($.ui.dialog.overlay.instances, function() {\n\t\t\t$overlays = $overlays.add(this);\n\t\t});\n\n\t\t$overlays.css({\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t}).css({\n\t\t\twidth: $.ui.dialog.overlay.width(),\n\t\t\theight: $.ui.dialog.overlay.height()\n\t\t});\n\t}\n});\n\n$.extend($.ui.dialog.overlay.prototype, {\n\tdestroy: function() {\n\t\t$.ui.dialog.overlay.destroy(this.$el);\n\t}\n});\n\n}(jQuery));\n\n(function( $, undefined ) {\n\n$.ui = $.ui || {};\n\nvar horizontalPositions = /left|center|right/,\n\tverticalPositions = /top|center|bottom/,\n\tcenter = \"center\",\n\tsupport = {},\n\t_position = $.fn.position,\n\t_offset = $.fn.offset;\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar target = $( options.of ),\n\t\ttargetElem = target[0],\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffset = options.offset ? options.offset.split( \" \" ) : [ 0, 0 ],\n\t\ttargetWidth,\n\t\ttargetHeight,\n\t\tbasePosition;\n\n\tif ( targetElem.nodeType === 9 ) {\n\t\ttargetWidth = target.width();\n\t\ttargetHeight = target.height();\n\t\tbasePosition = { top: 0, left: 0 };\n\t// TODO: use $.isWindow() in 1.9\n\t} else if ( targetElem.setTimeout ) {\n\t\ttargetWidth = target.width();\n\t\ttargetHeight = target.height();\n\t\tbasePosition = { top: target.scrollTop(), left: target.scrollLeft() };\n\t} else if ( targetElem.preventDefault ) {\n\t\t// force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t\ttargetWidth = targetHeight = 0;\n\t\tbasePosition = { top: options.of.pageY, left: options.of.pageX };\n\t} else {\n\t\ttargetWidth = target.outerWidth();\n\t\ttargetHeight = target.outerHeight();\n\t\tbasePosition = target.offset();\n\t}\n\n\t// force my and at to have valid horizontal and veritcal positions\n\t// if a value is missing or invalid, it will be converted to center \n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[this] || \"\" ).split( \" \" );\n\t\tif ( pos.length === 1) {\n\t\t\tpos = horizontalPositions.test( pos[0] ) ?\n\t\t\t\tpos.concat( [center] ) :\n\t\t\t\tverticalPositions.test( pos[0] ) ?\n\t\t\t\t\t[ center ].concat( pos ) :\n\t\t\t\t\t[ center, center ];\n\t\t}\n\t\tpos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center;\n\t\tpos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center;\n\t\toptions[ this ] = pos;\n\t});\n\n\t// normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\t// normalize offset option\n\toffset[ 0 ] = parseInt( offset[0], 10 ) || 0;\n\tif ( offset.length === 1 ) {\n\t\toffset[ 1 ] = offset[ 0 ];\n\t}\n\toffset[ 1 ] = parseInt( offset[1], 10 ) || 0;\n\n\tif ( options.at[0] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[0] === center ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[1] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[1] === center ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tbasePosition.left += offset[ 0 ];\n\tbasePosition.top += offset[ 1 ];\n\n\treturn this.each(function() {\n\t\tvar elem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseInt( $.curCSS( this, \"marginLeft\", true ) ) || 0,\n\t\t\tmarginTop = parseInt( $.curCSS( this, \"marginTop\", true ) ) || 0,\n\t\t\tcollisionWidth = elemWidth + marginLeft +\n\t\t\t\t( parseInt( $.curCSS( this, \"marginRight\", true ) ) || 0 ),\n\t\t\tcollisionHeight = elemHeight + marginTop +\n\t\t\t\t( parseInt( $.curCSS( this, \"marginBottom\", true ) ) || 0 ),\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tcollisionPosition;\n\n\t\tif ( options.my[0] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[0] === center ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[1] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[1] === center ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\t// prevent fractions if jQuery version doesn't support them (see #5280)\n\t\tif ( !support.fractions ) {\n\t\t\tposition.left = Math.round( position.left );\n\t\t\tposition.top = Math.round( position.top );\n\t\t}\n\n\t\tcollisionPosition = {\n\t\t\tleft: position.left - marginLeft,\n\t\t\ttop: position.top - marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[i] ] ) {\n\t\t\t\t$.ui.position[ collision[i] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: offset,\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tif ( $.fn.bgiframe ) {\n\t\t\telem.bgiframe();\n\t\t}\n\t\telem.offset( $.extend( position, { using: options.using } ) );\n\t});\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar win = $( window ),\n\t\t\t\tover = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft();\n\t\t\tposition.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left );\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar win = $( window ),\n\t\t\t\tover = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop();\n\t\t\tposition.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top );\n\t\t}\n\t},\n\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tif ( data.at[0] === center ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar win = $( window ),\n\t\t\t\tover = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(),\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\t-data.targetWidth,\n\t\t\t\toffset = -2 * data.offset[ 0 ];\n\t\t\tposition.left += data.collisionPosition.left < 0 ?\n\t\t\t\tmyOffset + atOffset + offset :\n\t\t\t\tover > 0 ?\n\t\t\t\t\tmyOffset + atOffset + offset :\n\t\t\t\t\t0;\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tif ( data.at[1] === center ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar win = $( window ),\n\t\t\t\tover = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(),\n\t\t\t\tmyOffset = data.my[ 1 ] === \"top\" ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\t-data.targetHeight,\n\t\t\t\toffset = -2 * data.offset[ 1 ];\n\t\t\tposition.top += data.collisionPosition.top < 0 ?\n\t\t\t\tmyOffset + atOffset + offset :\n\t\t\t\tover > 0 ?\n\t\t\t\t\tmyOffset + atOffset + offset :\n\t\t\t\t\t0;\n\t\t}\n\t}\n};\n\n// offset setter from jQuery 1.4\nif ( !$.offset.setOffset ) {\n\t$.offset.setOffset = function( elem, options ) {\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( /static/.test( $.curCSS( elem, \"position\" ) ) ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\t\tvar curElem   = $( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurTop    = parseInt( $.curCSS( elem, \"top\",  true ), 10 ) || 0,\n\t\t\tcurLeft   = parseInt( $.curCSS( elem, \"left\", true ), 10)  || 0,\n\t\t\tprops     = {\n\t\t\t\ttop:  (options.top  - curOffset.top)  + curTop,\n\t\t\t\tleft: (options.left - curOffset.left) + curLeft\n\t\t\t};\n\t\t\n\t\tif ( 'using' in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t};\n\n\t$.fn.offset = function( options ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( !elem || !elem.ownerDocument ) { return null; }\n\t\tif ( options ) {\n\t\t\tif ( $.isFunction( options ) ) {\n\t\t\t\treturn this.each(function( i ) {\n\t\t\t\t\t$( this ).offset( options.call( this, i, $( this ).offset() ) );\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.each(function() {\n\t\t\t\t$.offset.setOffset( this, options );\n\t\t\t});\n\t\t}\n\t\treturn _offset.call( this );\n\t};\n}\n\n// jQuery <1.4.3 uses curCSS, in 1.4.3 - 1.7.2 curCSS = css, 1.8+ only has css\nif ( !$.curCSS ) {\n\t$.curCSS = $.css;\n}\n\n// fraction support test (older versions of jQuery don't support fractions)\n(function () {\n\tvar body = document.getElementsByTagName( \"body\" )[ 0 ], \n\t\tdiv = document.createElement( \"div\" ),\n\t\ttestElement, testElementParent, testElementStyle, offset, offsetTotal;\n\n\t//Create a \"fake body\" for testing based on method used in jQuery.support\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\n\ttestElementStyle = {\n\t\tvisibility: \"hidden\",\n\t\twidth: 0,\n\t\theight: 0,\n\t\tborder: 0,\n\t\tmargin: 0,\n\t\tbackground: \"none\"\n\t};\n\tif ( body ) {\n\t\t$.extend( testElementStyle, {\n\t\t\tposition: \"absolute\",\n\t\t\tleft: \"-1000px\",\n\t\t\ttop: \"-1000px\"\n\t\t});\n\t}\n\tfor ( var i in testElementStyle ) {\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\n\t}\n\ttestElement.appendChild( div );\n\ttestElementParent = body || document.documentElement;\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\n\n\tdiv.style.cssText = \"position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;\";\n\n\toffset = $( div ).offset( function( _, offset ) {\n\t\treturn offset;\n\t}).offset();\n\n\ttestElement.innerHTML = \"\";\n\ttestElementParent.removeChild( testElement );\n\n\toffsetTotal = offset.top + offset.left + ( body ? 2000 : 0 );\n\tsupport.fractions = offsetTotal > 21 && offsetTotal < 22;\n})();\n\n}( jQuery ));\n\n(function( $, undefined ) {\n\n$.widget( \"ui.progressbar\", {\n\toptions: {\n\t\tvalue: 0,\n\t\tmax: 100\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\t\tthis.element\n\t\t\t.addClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.attr({\n\t\t\t\trole: \"progressbar\",\n\t\t\t\t\"aria-valuemin\": this.min,\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": this._value()\n\t\t\t});\n\n\t\tthis.valueDiv = $( \"<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>\" )\n\t\t\t.appendTo( this.element );\n\n\t\tthis.oldValue = this._value();\n\t\tthis._refreshValue();\n\t},\n\n\tdestroy: function() {\n\t\tthis.element\n\t\t\t.removeClass( \"ui-progressbar ui-widget ui-widget-content ui-corner-all\" )\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.removeAttr( \"aria-valuemin\" )\n\t\t\t.removeAttr( \"aria-valuemax\" )\n\t\t\t.removeAttr( \"aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\n\t\t$.Widget.prototype.destroy.apply( this, arguments );\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this._value();\n\t\t}\n\n\t\tthis._setOption( \"value\", newValue );\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"value\" ) {\n\t\t\tthis.options.value = value;\n\t\t\tthis._refreshValue();\n\t\t\tif ( this._value() === this.options.max ) {\n\t\t\t\tthis._trigger( \"complete\" );\n\t\t\t}\n\t\t}\n\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\t},\n\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\t// normalize invalid value\n\t\tif ( typeof val !== \"number\" ) {\n\t\t\tval = 0;\n\t\t}\n\t\treturn Math.min( this.options.max, Math.max( this.min, val ) );\n\t},\n\n\t_percentage: function() {\n\t\treturn 100 * this._value() / this.options.max;\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.value();\n\t\tvar percentage = this._percentage();\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\n\t\tthis.valueDiv\n\t\t\t.toggle( value > this.min )\n\t\t\t.toggleClass( \"ui-corner-right\", value === this.options.max )\n\t\t\t.width( percentage.toFixed(0) + \"%\" );\n\t\tthis.element.attr( \"aria-valuenow\", value );\n\t}\n});\n\n$.extend( $.ui.progressbar, {\n\tversion: \"1.8.24\"\n});\n\n})( jQuery );\n\n(function( $, undefined ) {\n\n// number of pages in a slider\n// (how many times can you page up/down to go through the whole range)\nvar numPages = 5;\n\n$.widget( \"ui.slider\", $.ui.mouse, {\n\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null\n\t},\n\n\t_create: function() {\n\t\tvar self = this,\n\t\t\to = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ).addClass( \"ui-state-default ui-corner-all\" ),\n\t\t\thandle = \"<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>\",\n\t\t\thandleCount = ( o.values && o.values.length ) || 1,\n\t\t\thandles = [];\n\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\n\t\tthis.element\n\t\t\t.addClass( \"ui-slider\" +\n\t\t\t\t\" ui-slider-\" + this.orientation +\n\t\t\t\t\" ui-widget\" +\n\t\t\t\t\" ui-widget-content\" +\n\t\t\t\t\" ui-corner-all\" +\n\t\t\t\t( o.disabled ? \" ui-slider-disabled ui-disabled\" : \"\" ) );\n\n\t\tthis.range = $([]);\n\n\t\tif ( o.range ) {\n\t\t\tif ( o.range === true ) {\n\t\t\t\tif ( !o.values ) {\n\t\t\t\t\to.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t}\n\t\t\t\tif ( o.values.length && o.values.length !== 2 ) {\n\t\t\t\t\to.values = [ o.values[0], o.values[0] ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.range = $( \"<div></div>\" )\n\t\t\t\t.appendTo( this.element )\n\t\t\t\t.addClass( \"ui-slider-range\" +\n\t\t\t\t// note: this isn't the most fittingly semantic framework class for this element,\n\t\t\t\t// but worked best visually with a variety of themes\n\t\t\t\t\" ui-widget-header\" + \n\t\t\t\t( ( o.range === \"min\" || o.range === \"max\" ) ? \" ui-slider-range-\" + o.range : \"\" ) );\n\t\t}\n\n\t\tfor ( var i = existingHandles.length; i < handleCount; i += 1 ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( self.element ) );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.add( this.range ).filter( \"a\" )\n\t\t\t.click(function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t})\n\t\t\t.hover(function() {\n\t\t\t\tif ( !o.disabled ) {\n\t\t\t\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\t\t\t}\n\t\t\t}, function() {\n\t\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\t})\n\t\t\t.focus(function() {\n\t\t\t\tif ( !o.disabled ) {\n\t\t\t\t\t$( \".ui-slider .ui-state-focus\" ).removeClass( \"ui-state-focus\" );\n\t\t\t\t\t$( this ).addClass( \"ui-state-focus\" );\n\t\t\t\t} else {\n\t\t\t\t\t$( this ).blur();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.blur(function() {\n\t\t\t\t$( this ).removeClass( \"ui-state-focus\" );\n\t\t\t});\n\n\t\tthis.handles.each(function( i ) {\n\t\t\t$( this ).data( \"index.ui-slider-handle\", i );\n\t\t});\n\n\t\tthis.handles\n\t\t\t.keydown(function( event ) {\n\t\t\t\tvar index = $( this ).data( \"index.ui-slider-handle\" ),\n\t\t\t\t\tallowed,\n\t\t\t\t\tcurVal,\n\t\t\t\t\tnewVal,\n\t\t\t\t\tstep;\n\t\n\t\t\t\tif ( self.options.disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tif ( !self._keySliding ) {\n\t\t\t\t\t\t\tself._keySliding = true;\n\t\t\t\t\t\t\t$( this ).addClass( \"ui-state-active\" );\n\t\t\t\t\t\t\tallowed = self._start( event, index );\n\t\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\n\t\t\t\tstep = self.options.step;\n\t\t\t\tif ( self.options.values && self.options.values.length ) {\n\t\t\t\t\tcurVal = newVal = self.values( index );\n\t\t\t\t} else {\n\t\t\t\t\tcurVal = newVal = self.value();\n\t\t\t\t}\n\t\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\t\tnewVal = self._valueMin();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\t\tnewVal = self._valueMax();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\t\tnewVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\t\tnewVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\t\tif ( curVal === self._valueMax() ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnewVal = self._trimAlignValue( curVal + step );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\t\tif ( curVal === self._valueMin() ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnewVal = self._trimAlignValue( curVal - step );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\n\t\t\t\tself._slide( event, index, newVal );\n\t\t\t})\n\t\t\t.keyup(function( event ) {\n\t\t\t\tvar index = $( this ).data( \"index.ui-slider-handle\" );\n\t\n\t\t\t\tif ( self._keySliding ) {\n\t\t\t\t\tself._keySliding = false;\n\t\t\t\t\tself._stop( event, index );\n\t\t\t\t\tself._change( event, index );\n\t\t\t\t\t$( this ).removeClass( \"ui-state-active\" );\n\t\t\t\t}\n\t\n\t\t\t});\n\n\t\tthis._refreshValue();\n\n\t\tthis._animateOff = false;\n\t},\n\n\tdestroy: function() {\n\t\tthis.handles.remove();\n\t\tthis.range.remove();\n\n\t\tthis.element\n\t\t\t.removeClass( \"ui-slider\" +\n\t\t\t\t\" ui-slider-horizontal\" +\n\t\t\t\t\" ui-slider-vertical\" +\n\t\t\t\t\" ui-slider-disabled\" +\n\t\t\t\t\" ui-widget\" +\n\t\t\t\t\" ui-widget-content\" +\n\t\t\t\t\" ui-corner-all\" )\n\t\t\t.removeData( \"slider\" )\n\t\t\t.unbind( \".slider\" );\n\n\t\tthis._mouseDestroy();\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options,\n\t\t\tposition,\n\t\t\tnormValue,\n\t\t\tdistance,\n\t\t\tclosestHandle,\n\t\t\tself,\n\t\t\tindex,\n\t\t\tallowed,\n\t\t\toffset,\n\t\t\tmouseOverHandle;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tself = this;\n\t\tthis.handles.each(function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - self.values(i) );\n\t\t\tif ( distance > thisDistance ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t});\n\n\t\t// workaround for bug #3736 (if both handles of a range are at 0,\n\t\t// the first is always used as the one with least distance,\n\t\t// and moving it is obviously prevented by preventing negative ranges)\n\t\tif( o.range === true && this.values(1) === o.min ) {\n\t\t\tindex += 1;\n\t\t\tclosestHandle = $( this.handles[index] );\n\t\t}\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tself._handleIndex = index;\n\n\t\tclosestHandle\n\t\t\t.addClass( \"ui-state-active\" )\n\t\t\t.focus();\n\t\t\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().andSelf().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css(\"borderTopWidth\"), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css(\"borderBottomWidth\"), 10 ) || 0) +\n\t\t\t\t( parseInt( closestHandle.css(\"marginTop\"), 10 ) || 0)\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function( event ) {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\t\t\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis.handles.removeClass( \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\t\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_start: function( event, index ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\tvalue: this.value()\n\t\t};\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tuiHash.value = this.values( index );\n\t\t\tuiHash.values = this.values();\n\t\t}\n\t\treturn this._trigger( \"start\", event, uiHash );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar otherVal,\n\t\t\tnewValues,\n\t\t\tallowed;\n\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\n\t\t\tif ( ( this.options.values.length === 2 && this.options.range === true ) && \n\t\t\t\t\t( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )\n\t\t\t\t) {\n\t\t\t\tnewVal = otherVal;\n\t\t\t}\n\n\t\t\tif ( newVal !== this.values( index ) ) {\n\t\t\t\tnewValues = this.values();\n\t\t\t\tnewValues[ index ] = newVal;\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\n\t\t\t\t\thandle: this.handles[ index ],\n\t\t\t\t\tvalue: newVal,\n\t\t\t\t\tvalues: newValues\n\t\t\t\t} );\n\t\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\t\tif ( allowed !== false ) {\n\t\t\t\t\tthis.values( index, newVal, true );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif ( newVal !== this.value() ) {\n\t\t\t\t// A slide can be canceled by returning false from the slide callback\n\t\t\t\tallowed = this._trigger( \"slide\", event, {\n\t\t\t\t\thandle: this.handles[ index ],\n\t\t\t\t\tvalue: newVal\n\t\t\t\t} );\n\t\t\t\tif ( allowed !== false ) {\n\t\t\t\t\tthis.value( newVal );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\tvalue: this.value()\n\t\t};\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tuiHash.value = this.values( index );\n\t\t\tuiHash.values = this.values();\n\t\t}\n\n\t\tthis._trigger( \"stop\", event, uiHash );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\t\t\tvar uiHash = {\n\t\t\t\thandle: this.handles[ index ],\n\t\t\t\tvalue: this.value()\n\t\t\t};\n\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\tuiHash.value = this.values( index );\n\t\t\t\tuiHash.values = this.values();\n\t\t\t}\n\n\t\t\tthis._trigger( \"change\", event, uiHash );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\t$.Widget.prototype._setOption.apply( this, arguments );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"disabled\":\n\t\t\t\tif ( value ) {\n\t\t\t\t\tthis.handles.filter( \".ui-state-focus\" ).blur();\n\t\t\t\t\tthis.handles.removeClass( \"ui-state-hover\" );\n\t\t\t\t\tthis.handles.propAttr( \"disabled\", true );\n\t\t\t\t\tthis.element.addClass( \"ui-disabled\" );\n\t\t\t\t} else {\n\t\t\t\t\tthis.handles.propAttr( \"disabled\", false );\n\t\t\t\t\tthis.element.removeClass( \"ui-disabled\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis.element\n\t\t\t\t\t.removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t.addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tfor ( i = 0; i < valsLength; i += 1 ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else {\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i+= 1) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t}\n\t},\n\t\n\t// returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = (val - this._valueMin()) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs(valModStep) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed(5) );\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.options.max;\n\t},\n\t\n\t_refreshValue: function() {\n\t\tvar oRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tself = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\tvalPercent,\n\t\t\t_set = {},\n\t\t\tlastValPercent,\n\t\t\tvalue,\n\t\t\tvalueMin,\n\t\t\tvalueMax;\n\n\t\tif ( this.options.values && this.options.values.length ) {\n\t\t\tthis.handles.each(function( i, j ) {\n\t\t\t\tvalPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100;\n\t\t\t\t_set[ self.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( self.options.range === true ) {\n\t\t\t\t\tif ( self.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tself.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { left: valPercent + \"%\" }, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tself.range[ animate ? \"animate\" : \"css\" ]( { width: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tself.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { bottom: ( valPercent ) + \"%\" }, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tself.range[ animate ? \"animate\" : \"css\" ]( { height: ( valPercent - lastValPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ self.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { width: valPercent + \"%\" }, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { width: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( { height: valPercent + \"%\" }, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range[ animate ? \"animate\" : \"css\" ]( { height: ( 100 - valPercent ) + \"%\" }, { queue: false, duration: o.animate } );\n\t\t\t}\n\t\t}\n\t}\n\n});\n\n$.extend( $.ui.slider, {\n\tversion: \"1.8.24\"\n});\n\n}(jQuery));\n\n(function( $, undefined ) {\n\nvar tabId = 0,\n\tlistId = 0;\n\nfunction getNextTabId() {\n\treturn ++tabId;\n}\n\nfunction getNextListId() {\n\treturn ++listId;\n}\n\n$.widget( \"ui.tabs\", {\n\toptions: {\n\t\tadd: null,\n\t\tajaxOptions: null,\n\t\tcache: false,\n\t\tcookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }\n\t\tcollapsible: false,\n\t\tdisable: null,\n\t\tdisabled: [],\n\t\tenable: null,\n\t\tevent: \"click\",\n\t\tfx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }\n\t\tidPrefix: \"ui-tabs-\",\n\t\tload: null,\n\t\tpanelTemplate: \"<div></div>\",\n\t\tremove: null,\n\t\tselect: null,\n\t\tshow: null,\n\t\tspinner: \"<em>Loading&#8230;</em>\",\n\t\ttabTemplate: \"<li><a href='#{href}'><span>#{label}</span></a></li>\"\n\t},\n\n\t_create: function() {\n\t\tthis._tabify( true );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key == \"selected\" ) {\n\t\t\tif (this.options.collapsible && value == this.options.selected ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.select( value );\n\t\t} else {\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis._tabify();\n\t\t}\n\t},\n\n\t_tabId: function( a ) {\n\t\treturn a.title && a.title.replace( /\\s/g, \"_\" ).replace( /[^\\w\\u00c0-\\uFFFF-]/g, \"\" ) ||\n\t\t\tthis.options.idPrefix + getNextTabId();\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\t// we need this because an id may contain a \":\"\n\t\treturn hash.replace( /:/g, \"\\\\:\" );\n\t},\n\n\t_cookie: function() {\n\t\tvar cookie = this.cookie ||\n\t\t\t( this.cookie = this.options.cookie.name || \"ui-tabs-\" + getNextListId() );\n\t\treturn $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );\n\t},\n\n\t_ui: function( tab, panel ) {\n\t\treturn {\n\t\t\ttab: tab,\n\t\t\tpanel: panel,\n\t\t\tindex: this.anchors.index( tab )\n\t\t};\n\t},\n\n\t_cleanup: function() {\n\t\t// restore all former loading tabs labels\n\t\tthis.lis.filter( \".ui-state-processing\" )\n\t\t\t.removeClass( \"ui-state-processing\" )\n\t\t\t.find( \"span:data(label.tabs)\" )\n\t\t\t\t.each(function() {\n\t\t\t\t\tvar el = $( this );\n\t\t\t\t\tel.html( el.data( \"label.tabs\" ) ).removeData( \"label.tabs\" );\n\t\t\t\t});\n\t},\n\n\t_tabify: function( init ) {\n\t\tvar self = this,\n\t\t\to = this.options,\n\t\t\tfragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash\n\n\t\tthis.list = this.element.find( \"ol,ul\" ).eq( 0 );\n\t\tthis.lis = $( \" > li:has(a[href])\", this.list );\n\t\tthis.anchors = this.lis.map(function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t});\n\t\tthis.panels = $( [] );\n\n\t\tthis.anchors.each(function( i, a ) {\n\t\t\tvar href = $( a ).attr( \"href\" );\n\t\t\t// For dynamically created HTML that contains a hash as href IE < 8 expands\n\t\t\t// such href to the full page url with hash and then misinterprets tab as ajax.\n\t\t\t// Same consideration applies for an added tab with a fragment identifier\n\t\t\t// since a[href=#fragment-identifier] does unexpectedly not match.\n\t\t\t// Thus normalize href attribute...\n\t\t\tvar hrefBase = href.split( \"#\" )[ 0 ],\n\t\t\t\tbaseEl;\n\t\t\tif ( hrefBase && ( hrefBase === location.toString().split( \"#\" )[ 0 ] ||\n\t\t\t\t\t( baseEl = $( \"base\" )[ 0 ]) && hrefBase === baseEl.href ) ) {\n\t\t\t\thref = a.hash;\n\t\t\t\ta.href = href;\n\t\t\t}\n\n\t\t\t// inline tab\n\t\t\tif ( fragmentId.test( href ) ) {\n\t\t\t\tself.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) );\n\t\t\t// remote tab\n\t\t\t// prevent loading the page itself if href is just \"#\"\n\t\t\t} else if ( href && href !== \"#\" ) {\n\t\t\t\t// required for restore on destroy\n\t\t\t\t$.data( a, \"href.tabs\", href );\n\n\t\t\t\t// TODO until #3808 is fixed strip fragment identifier from url\n\t\t\t\t// (IE fails to load from such url)\n\t\t\t\t$.data( a, \"load.tabs\", href.replace( /#.*$/, \"\" ) );\n\n\t\t\t\tvar id = self._tabId( a );\n\t\t\t\ta.href = \"#\" + id;\n\t\t\t\tvar $panel = self.element.find( \"#\" + id );\n\t\t\t\tif ( !$panel.length ) {\n\t\t\t\t\t$panel = $( o.panelTemplate )\n\t\t\t\t\t\t.attr( \"id\", id )\n\t\t\t\t\t\t.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom\" )\n\t\t\t\t\t\t.insertAfter( self.panels[ i - 1 ] || self.list );\n\t\t\t\t\t$panel.data( \"destroy.tabs\", true );\n\t\t\t\t}\n\t\t\t\tself.panels = self.panels.add( $panel );\n\t\t\t// invalid tab href\n\t\t\t} else {\n\t\t\t\to.disabled.push( i );\n\t\t\t}\n\t\t});\n\n\t\t// initialization from scratch\n\t\tif ( init ) {\n\t\t\t// attach necessary classes for styling\n\t\t\tthis.element.addClass( \"ui-tabs ui-widget ui-widget-content ui-corner-all\" );\n\t\t\tthis.list.addClass( \"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\" );\n\t\t\tthis.lis.addClass( \"ui-state-default ui-corner-top\" );\n\t\t\tthis.panels.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom\" );\n\n\t\t\t// Selected tab\n\t\t\t// use \"selected\" option or try to retrieve:\n\t\t\t// 1. from fragment identifier in url\n\t\t\t// 2. from cookie\n\t\t\t// 3. from selected class attribute on <li>\n\t\t\tif ( o.selected === undefined ) {\n\t\t\t\tif ( location.hash ) {\n\t\t\t\t\tthis.anchors.each(function( i, a ) {\n\t\t\t\t\t\tif ( a.hash == location.hash ) {\n\t\t\t\t\t\t\to.selected = i;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif ( typeof o.selected !== \"number\" && o.cookie ) {\n\t\t\t\t\to.selected = parseInt( self._cookie(), 10 );\n\t\t\t\t}\n\t\t\t\tif ( typeof o.selected !== \"number\" && this.lis.filter( \".ui-tabs-selected\" ).length ) {\n\t\t\t\t\to.selected = this.lis.index( this.lis.filter( \".ui-tabs-selected\" ) );\n\t\t\t\t}\n\t\t\t\to.selected = o.selected || ( this.lis.length ? 0 : -1 );\n\t\t\t} else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release\n\t\t\t\to.selected = -1;\n\t\t\t}\n\n\t\t\t// sanity check - default to first tab...\n\t\t\to.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 )\n\t\t\t\t? o.selected\n\t\t\t\t: 0;\n\n\t\t\t// Take disabling tabs via class attribute from HTML\n\t\t\t// into account and update option properly.\n\t\t\t// A selected tab cannot become disabled.\n\t\t\to.disabled = $.unique( o.disabled.concat(\n\t\t\t\t$.map( this.lis.filter( \".ui-state-disabled\" ), function( n, i ) {\n\t\t\t\t\treturn self.lis.index( n );\n\t\t\t\t})\n\t\t\t) ).sort();\n\n\t\t\tif ( $.inArray( o.selected, o.disabled ) != -1 ) {\n\t\t\t\to.disabled.splice( $.inArray( o.selected, o.disabled ), 1 );\n\t\t\t}\n\n\t\t\t// highlight selected tab\n\t\t\tthis.panels.addClass( \"ui-tabs-hide\" );\n\t\t\tthis.lis.removeClass( \"ui-tabs-selected ui-state-active\" );\n\t\t\t// check for length avoids error when initializing empty list\n\t\t\tif ( o.selected >= 0 && this.anchors.length ) {\n\t\t\t\tself.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( \"ui-tabs-hide\" );\n\t\t\t\tthis.lis.eq( o.selected ).addClass( \"ui-tabs-selected ui-state-active\" );\n\n\t\t\t\t// seems to be expected behavior that the show callback is fired\n\t\t\t\tself.element.queue( \"tabs\", function() {\n\t\t\t\t\tself._trigger( \"show\", null,\n\t\t\t\t\t\tself._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) );\n\t\t\t\t});\n\n\t\t\t\tthis.load( o.selected );\n\t\t\t}\n\n\t\t\t// clean up to avoid memory leaks in certain versions of IE 6\n\t\t\t// TODO: namespace this event\n\t\t\t$( window ).bind( \"unload\", function() {\n\t\t\t\tself.lis.add( self.anchors ).unbind( \".tabs\" );\n\t\t\t\tself.lis = self.anchors = self.panels = null;\n\t\t\t});\n\t\t// update selected after add/remove\n\t\t} else {\n\t\t\to.selected = this.lis.index( this.lis.filter( \".ui-tabs-selected\" ) );\n\t\t}\n\n\t\t// update collapsible\n\t\t// TODO: use .toggleClass()\n\t\tthis.element[ o.collapsible ? \"addClass\" : \"removeClass\" ]( \"ui-tabs-collapsible\" );\n\n\t\t// set or update cookie after init and add/remove respectively\n\t\tif ( o.cookie ) {\n\t\t\tthis._cookie( o.selected, o.cookie );\n\t\t}\n\n\t\t// disable tabs\n\t\tfor ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {\n\t\t\t$( li )[ $.inArray( i, o.disabled ) != -1 &&\n\t\t\t\t// TODO: use .toggleClass()\n\t\t\t\t!$( li ).hasClass( \"ui-tabs-selected\" ) ? \"addClass\" : \"removeClass\" ]( \"ui-state-disabled\" );\n\t\t}\n\n\t\t// reset cache if switching from cached to not cached\n\t\tif ( o.cache === false ) {\n\t\t\tthis.anchors.removeData( \"cache.tabs\" );\n\t\t}\n\n\t\t// remove all handlers before, tabify may run on existing tabs after add or option change\n\t\tthis.lis.add( this.anchors ).unbind( \".tabs\" );\n\n\t\tif ( o.event !== \"mouseover\" ) {\n\t\t\tvar addState = function( state, el ) {\n\t\t\t\tif ( el.is( \":not(.ui-state-disabled)\" ) ) {\n\t\t\t\t\tel.addClass( \"ui-state-\" + state );\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar removeState = function( state, el ) {\n\t\t\t\tel.removeClass( \"ui-state-\" + state );\n\t\t\t};\n\t\t\tthis.lis.bind( \"mouseover.tabs\" , function() {\n\t\t\t\taddState( \"hover\", $( this ) );\n\t\t\t});\n\t\t\tthis.lis.bind( \"mouseout.tabs\", function() {\n\t\t\t\tremoveState( \"hover\", $( this ) );\n\t\t\t});\n\t\t\tthis.anchors.bind( \"focus.tabs\", function() {\n\t\t\t\taddState( \"focus\", $( this ).closest( \"li\" ) );\n\t\t\t});\n\t\t\tthis.anchors.bind( \"blur.tabs\", function() {\n\t\t\t\tremoveState( \"focus\", $( this ).closest( \"li\" ) );\n\t\t\t});\n\t\t}\n\n\t\t// set up animations\n\t\tvar hideFx, showFx;\n\t\tif ( o.fx ) {\n\t\t\tif ( $.isArray( o.fx ) ) {\n\t\t\t\thideFx = o.fx[ 0 ];\n\t\t\t\tshowFx = o.fx[ 1 ];\n\t\t\t} else {\n\t\t\t\thideFx = showFx = o.fx;\n\t\t\t}\n\t\t}\n\n\t\t// Reset certain styles left over from animation\n\t\t// and prevent IE's ClearType bug...\n\t\tfunction resetStyle( $el, fx ) {\n\t\t\t$el.css( \"display\", \"\" );\n\t\t\tif ( !$.support.opacity && fx.opacity ) {\n\t\t\t\t$el[ 0 ].style.removeAttribute( \"filter\" );\n\t\t\t}\n\t\t}\n\n\t\t// Show a tab...\n\t\tvar showTab = showFx\n\t\t\t? function( clicked, $show ) {\n\t\t\t\t$( clicked ).closest( \"li\" ).addClass( \"ui-tabs-selected ui-state-active\" );\n\t\t\t\t$show.hide().removeClass( \"ui-tabs-hide\" ) // avoid flicker that way\n\t\t\t\t\t.animate( showFx, showFx.duration || \"normal\", function() {\n\t\t\t\t\t\tresetStyle( $show, showFx );\n\t\t\t\t\t\tself._trigger( \"show\", null, self._ui( clicked, $show[ 0 ] ) );\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t: function( clicked, $show ) {\n\t\t\t\t$( clicked ).closest( \"li\" ).addClass( \"ui-tabs-selected ui-state-active\" );\n\t\t\t\t$show.removeClass( \"ui-tabs-hide\" );\n\t\t\t\tself._trigger( \"show\", null, self._ui( clicked, $show[ 0 ] ) );\n\t\t\t};\n\n\t\t// Hide a tab, $show is optional...\n\t\tvar hideTab = hideFx\n\t\t\t? function( clicked, $hide ) {\n\t\t\t\t$hide.animate( hideFx, hideFx.duration || \"normal\", function() {\n\t\t\t\t\tself.lis.removeClass( \"ui-tabs-selected ui-state-active\" );\n\t\t\t\t\t$hide.addClass( \"ui-tabs-hide\" );\n\t\t\t\t\tresetStyle( $hide, hideFx );\n\t\t\t\t\tself.element.dequeue( \"tabs\" );\n\t\t\t\t});\n\t\t\t}\n\t\t\t: function( clicked, $hide, $show ) {\n\t\t\t\tself.lis.removeClass( \"ui-tabs-selected ui-state-active\" );\n\t\t\t\t$hide.addClass( \"ui-tabs-hide\" );\n\t\t\t\tself.element.dequeue( \"tabs\" );\n\t\t\t};\n\n\t\t// attach tab event handler, unbind to avoid duplicates from former tabifying...\n\t\tthis.anchors.bind( o.event + \".tabs\", function() {\n\t\t\tvar el = this,\n\t\t\t\t$li = $(el).closest( \"li\" ),\n\t\t\t\t$hide = self.panels.filter( \":not(.ui-tabs-hide)\" ),\n\t\t\t\t$show = self.element.find( self._sanitizeSelector( el.hash ) );\n\n\t\t\t// If tab is already selected and not collapsible or tab disabled or\n\t\t\t// or is already loading or click callback returns false stop here.\n\t\t\t// Check if click handler returns false last so that it is not executed\n\t\t\t// for a disabled or loading tab!\n\t\t\tif ( ( $li.hasClass( \"ui-tabs-selected\" ) && !o.collapsible) ||\n\t\t\t\t$li.hasClass( \"ui-state-disabled\" ) ||\n\t\t\t\t$li.hasClass( \"ui-state-processing\" ) ||\n\t\t\t\tself.panels.filter( \":animated\" ).length ||\n\t\t\t\tself._trigger( \"select\", null, self._ui( this, $show[ 0 ] ) ) === false ) {\n\t\t\t\tthis.blur();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\to.selected = self.anchors.index( this );\n\n\t\t\tself.abort();\n\n\t\t\t// if tab may be closed\n\t\t\tif ( o.collapsible ) {\n\t\t\t\tif ( $li.hasClass( \"ui-tabs-selected\" ) ) {\n\t\t\t\t\to.selected = -1;\n\n\t\t\t\t\tif ( o.cookie ) {\n\t\t\t\t\t\tself._cookie( o.selected, o.cookie );\n\t\t\t\t\t}\n\n\t\t\t\t\tself.element.queue( \"tabs\", function() {\n\t\t\t\t\t\thideTab( el, $hide );\n\t\t\t\t\t}).dequeue( \"tabs\" );\n\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t} else if ( !$hide.length ) {\n\t\t\t\t\tif ( o.cookie ) {\n\t\t\t\t\t\tself._cookie( o.selected, o.cookie );\n\t\t\t\t\t}\n\n\t\t\t\t\tself.element.queue( \"tabs\", function() {\n\t\t\t\t\t\tshowTab( el, $show );\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171\n\t\t\t\t\tself.load( self.anchors.index( this ) );\n\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.cookie ) {\n\t\t\t\tself._cookie( o.selected, o.cookie );\n\t\t\t}\n\n\t\t\t// show new tab\n\t\t\tif ( $show.length ) {\n\t\t\t\tif ( $hide.length ) {\n\t\t\t\t\tself.element.queue( \"tabs\", function() {\n\t\t\t\t\t\thideTab( el, $hide );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.element.queue( \"tabs\", function() {\n\t\t\t\t\tshowTab( el, $show );\n\t\t\t\t});\n\n\t\t\t\tself.load( self.anchors.index( this ) );\n\t\t\t} else {\n\t\t\t\tthrow \"jQuery UI Tabs: Mismatching fragment identifier.\";\n\t\t\t}\n\n\t\t\t// Prevent IE from keeping other link focussed when using the back button\n\t\t\t// and remove dotted border from clicked link. This is controlled via CSS\n\t\t\t// in modern browsers; blur() removes focus from address bar in Firefox\n\t\t\t// which can become a usability and annoying problem with tabs('rotate').\n\t\t\tif ( $.browser.msie ) {\n\t\t\t\tthis.blur();\n\t\t\t}\n\t\t});\n\n\t\t// disable click in any case\n\t\tthis.anchors.bind( \"click.tabs\", function(){\n\t\t\treturn false;\n\t\t});\n\t},\n\n    _getIndex: function( index ) {\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\t// also sanitizes numerical indexes to valid values.\n\t\tif ( typeof index == \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" + index + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\tdestroy: function() {\n\t\tvar o = this.options;\n\n\t\tthis.abort();\n\n\t\tthis.element\n\t\t\t.unbind( \".tabs\" )\n\t\t\t.removeClass( \"ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible\" )\n\t\t\t.removeData( \"tabs\" );\n\n\t\tthis.list.removeClass( \"ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\" );\n\n\t\tthis.anchors.each(function() {\n\t\t\tvar href = $.data( this, \"href.tabs\" );\n\t\t\tif ( href ) {\n\t\t\t\tthis.href = href;\n\t\t\t}\n\t\t\tvar $this = $( this ).unbind( \".tabs\" );\n\t\t\t$.each( [ \"href\", \"load\", \"cache\" ], function( i, prefix ) {\n\t\t\t\t$this.removeData( prefix + \".tabs\" );\n\t\t\t});\n\t\t});\n\n\t\tthis.lis.unbind( \".tabs\" ).add( this.panels ).each(function() {\n\t\t\tif ( $.data( this, \"destroy.tabs\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeClass([\n\t\t\t\t\t\"ui-state-default\",\n\t\t\t\t\t\"ui-corner-top\",\n\t\t\t\t\t\"ui-tabs-selected\",\n\t\t\t\t\t\"ui-state-active\",\n\t\t\t\t\t\"ui-state-hover\",\n\t\t\t\t\t\"ui-state-focus\",\n\t\t\t\t\t\"ui-state-disabled\",\n\t\t\t\t\t\"ui-tabs-panel\",\n\t\t\t\t\t\"ui-widget-content\",\n\t\t\t\t\t\"ui-corner-bottom\",\n\t\t\t\t\t\"ui-tabs-hide\"\n\t\t\t\t].join( \" \" ) );\n\t\t\t}\n\t\t});\n\n\t\tif ( o.cookie ) {\n\t\t\tthis._cookie( null, o.cookie );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tadd: function( url, label, index ) {\n\t\tif ( index === undefined ) {\n\t\t\tindex = this.anchors.length;\n\t\t}\n\n\t\tvar self = this,\n\t\t\to = this.options,\n\t\t\t$li = $( o.tabTemplate.replace( /#\\{href\\}/g, url ).replace( /#\\{label\\}/g, label ) ),\n\t\t\tid = !url.indexOf( \"#\" ) ? url.replace( \"#\", \"\" ) : this._tabId( $( \"a\", $li )[ 0 ] );\n\n\t\t$li.addClass( \"ui-state-default ui-corner-top\" ).data( \"destroy.tabs\", true );\n\n\t\t// try to find an existing element before creating a new one\n\t\tvar $panel = self.element.find( \"#\" + id );\n\t\tif ( !$panel.length ) {\n\t\t\t$panel = $( o.panelTemplate )\n\t\t\t\t.attr( \"id\", id )\n\t\t\t\t.data( \"destroy.tabs\", true );\n\t\t}\n\t\t$panel.addClass( \"ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide\" );\n\n\t\tif ( index >= this.lis.length ) {\n\t\t\t$li.appendTo( this.list );\n\t\t\t$panel.appendTo( this.list[ 0 ].parentNode );\n\t\t} else {\n\t\t\t$li.insertBefore( this.lis[ index ] );\n\t\t\t$panel.insertBefore( this.panels[ index ] );\n\t\t}\n\n\t\to.disabled = $.map( o.disabled, function( n, i ) {\n\t\t\treturn n >= index ? ++n : n;\n\t\t});\n\n\t\tthis._tabify();\n\n\t\tif ( this.anchors.length == 1 ) {\n\t\t\to.selected = 0;\n\t\t\t$li.addClass( \"ui-tabs-selected ui-state-active\" );\n\t\t\t$panel.removeClass( \"ui-tabs-hide\" );\n\t\t\tthis.element.queue( \"tabs\", function() {\n\t\t\t\tself._trigger( \"show\", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) );\n\t\t\t});\n\n\t\t\tthis.load( 0 );\n\t\t}\n\n\t\tthis._trigger( \"add\", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );\n\t\treturn this;\n\t},\n\n\tremove: function( index ) {\n\t\tindex = this._getIndex( index );\n\t\tvar o = this.options,\n\t\t\t$li = this.lis.eq( index ).remove(),\n\t\t\t$panel = this.panels.eq( index ).remove();\n\n\t\t// If selected tab was removed focus tab to the right or\n\t\t// in case the last tab was removed the tab to the left.\n\t\tif ( $li.hasClass( \"ui-tabs-selected\" ) && this.anchors.length > 1) {\n\t\t\tthis.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) );\n\t\t}\n\n\t\to.disabled = $.map(\n\t\t\t$.grep( o.disabled, function(n, i) {\n\t\t\t\treturn n != index;\n\t\t\t}),\n\t\t\tfunction( n, i ) {\n\t\t\t\treturn n >= index ? --n : n;\n\t\t\t});\n\n\t\tthis._tabify();\n\n\t\tthis._trigger( \"remove\", null, this._ui( $li.find( \"a\" )[ 0 ], $panel[ 0 ] ) );\n\t\treturn this;\n\t},\n\n\tenable: function( index ) {\n\t\tindex = this._getIndex( index );\n\t\tvar o = this.options;\n\t\tif ( $.inArray( index, o.disabled ) == -1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lis.eq( index ).removeClass( \"ui-state-disabled\" );\n\t\to.disabled = $.grep( o.disabled, function( n, i ) {\n\t\t\treturn n != index;\n\t\t});\n\n\t\tthis._trigger( \"enable\", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );\n\t\treturn this;\n\t},\n\n\tdisable: function( index ) {\n\t\tindex = this._getIndex( index );\n\t\tvar self = this, o = this.options;\n\t\t// cannot disable already selected tab\n\t\tif ( index != o.selected ) {\n\t\t\tthis.lis.eq( index ).addClass( \"ui-state-disabled\" );\n\n\t\t\to.disabled.push( index );\n\t\t\to.disabled.sort();\n\n\t\t\tthis._trigger( \"disable\", null, this._ui( this.anchors[ index ], this.panels[ index ] ) );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tselect: function( index ) {\n\t\tindex = this._getIndex( index );\n\t\tif ( index == -1 ) {\n\t\t\tif ( this.options.collapsible && this.options.selected != -1 ) {\n\t\t\t\tindex = this.options.selected;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.anchors.eq( index ).trigger( this.options.event + \".tabs\" );\n\t\treturn this;\n\t},\n\n\tload: function( index ) {\n\t\tindex = this._getIndex( index );\n\t\tvar self = this,\n\t\t\to = this.options,\n\t\t\ta = this.anchors.eq( index )[ 0 ],\n\t\t\turl = $.data( a, \"load.tabs\" );\n\n\t\tthis.abort();\n\n\t\t// not remote or from cache\n\t\tif ( !url || this.element.queue( \"tabs\" ).length !== 0 && $.data( a, \"cache.tabs\" ) ) {\n\t\t\tthis.element.dequeue( \"tabs\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// load remote from here on\n\t\tthis.lis.eq( index ).addClass( \"ui-state-processing\" );\n\n\t\tif ( o.spinner ) {\n\t\t\tvar span = $( \"span\", a );\n\t\t\tspan.data( \"label.tabs\", span.html() ).html( o.spinner );\n\t\t}\n\n\t\tthis.xhr = $.ajax( $.extend( {}, o.ajaxOptions, {\n\t\t\turl: url,\n\t\t\tsuccess: function( r, s ) {\n\t\t\t\tself.element.find( self._sanitizeSelector( a.hash ) ).html( r );\n\n\t\t\t\t// take care of tab labels\n\t\t\t\tself._cleanup();\n\n\t\t\t\tif ( o.cache ) {\n\t\t\t\t\t$.data( a, \"cache.tabs\", true );\n\t\t\t\t}\n\n\t\t\t\tself._trigger( \"load\", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );\n\t\t\t\ttry {\n\t\t\t\t\to.ajaxOptions.success( r, s );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t},\n\t\t\terror: function( xhr, s, e ) {\n\t\t\t\t// take care of tab labels\n\t\t\t\tself._cleanup();\n\n\t\t\t\tself._trigger( \"load\", null, self._ui( self.anchors[ index ], self.panels[ index ] ) );\n\t\t\t\ttry {\n\t\t\t\t\t// Passing index avoid a race condition when this method is\n\t\t\t\t\t// called after the user has selected another tab.\n\t\t\t\t\t// Pass the anchor that initiated this request allows\n\t\t\t\t\t// loadError to manipulate the tab content panel via $(a.hash)\n\t\t\t\t\to.ajaxOptions.error( xhr, s, index, a );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} ) );\n\n\t\t// last, so that load event is fired before show...\n\t\tself.element.dequeue( \"tabs\" );\n\n\t\treturn this;\n\t},\n\n\tabort: function() {\n\t\t// stop possibly running animations\n\t\tthis.element.queue( [] );\n\t\tthis.panels.stop( false, true );\n\n\t\t// \"tabs\" queue must not contain more than two elements,\n\t\t// which are the callbacks for the latest clicked tab...\n\t\tthis.element.queue( \"tabs\", this.element.queue( \"tabs\" ).splice( -2, 2 ) );\n\n\t\t// terminate pending requests from other tabs\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t\tdelete this.xhr;\n\t\t}\n\n\t\t// take care of tab labels\n\t\tthis._cleanup();\n\t\treturn this;\n\t},\n\n\turl: function( index, url ) {\n\t\tthis.anchors.eq( index ).removeData( \"cache.tabs\" ).data( \"load.tabs\", url );\n\t\treturn this;\n\t},\n\n\tlength: function() {\n\t\treturn this.anchors.length;\n\t}\n});\n\n$.extend( $.ui.tabs, {\n\tversion: \"1.8.24\"\n});\n\n/*\n * Tabs Extensions\n */\n\n/*\n * Rotate\n */\n$.extend( $.ui.tabs.prototype, {\n\trotation: null,\n\trotate: function( ms, continuing ) {\n\t\tvar self = this,\n\t\t\to = this.options;\n\n\t\tvar rotate = self._rotate || ( self._rotate = function( e ) {\n\t\t\tclearTimeout( self.rotation );\n\t\t\tself.rotation = setTimeout(function() {\n\t\t\t\tvar t = o.selected;\n\t\t\t\tself.select( ++t < self.anchors.length ? t : 0 );\n\t\t\t}, ms );\n\t\t\t\n\t\t\tif ( e ) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\n\t\tvar stop = self._unrotate || ( self._unrotate = !continuing\n\t\t\t? function(e) {\n\t\t\t\tif (e.clientX) { // in case of a true click\n\t\t\t\t\tself.rotate(null);\n\t\t\t\t}\n\t\t\t}\n\t\t\t: function( e ) {\n\t\t\t\trotate();\n\t\t\t});\n\n\t\t// start rotation\n\t\tif ( ms ) {\n\t\t\tthis.element.bind( \"tabsshow\", rotate );\n\t\t\tthis.anchors.bind( o.event + \".tabs\", stop );\n\t\t\trotate();\n\t\t// stop rotation\n\t\t} else {\n\t\t\tclearTimeout( self.rotation );\n\t\t\tthis.element.unbind( \"tabsshow\", rotate );\n\t\t\tthis.anchors.unbind( o.event + \".tabs\", stop );\n\t\t\tdelete this._rotate;\n\t\t\tdelete this._unrotate;\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n})( jQuery );\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery.unobtrusive-ajax.js",
    "content": "﻿/*!\n** Unobtrusive Ajax support library for jQuery\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global window: false, jQuery: false */\n\n(function ($) {\n    var data_click = \"unobtrusiveAjaxClick\",\n        data_validation = \"unobtrusiveValidation\";\n\n    function getFunction(code, argNames) {\n        var fn = window, parts = (code || \"\").split(\".\");\n        while (fn && parts.length) {\n            fn = fn[parts.shift()];\n        }\n        if (typeof (fn) === \"function\") {\n            return fn;\n        }\n        argNames.push(code);\n        return Function.constructor.apply(null, argNames);\n    }\n\n    function isMethodProxySafe(method) {\n        return method === \"GET\" || method === \"POST\";\n    }\n\n    function asyncOnBeforeSend(xhr, method) {\n        if (!isMethodProxySafe(method)) {\n            xhr.setRequestHeader(\"X-HTTP-Method-Override\", method);\n        }\n    }\n\n    function asyncOnSuccess(element, data, contentType) {\n        var mode;\n\n        if (contentType.indexOf(\"application/x-javascript\") !== -1) {  // jQuery already executes JavaScript for us\n            return;\n        }\n\n        mode = (element.getAttribute(\"data-ajax-mode\") || \"\").toUpperCase();\n        $(element.getAttribute(\"data-ajax-update\")).each(function (i, update) {\n            var top;\n\n            switch (mode) {\n            case \"BEFORE\":\n                top = update.firstChild;\n                $(\"<div />\").html(data).contents().each(function () {\n                    update.insertBefore(this, top);\n                });\n                break;\n            case \"AFTER\":\n                $(\"<div />\").html(data).contents().each(function () {\n                    update.appendChild(this);\n                });\n                break;\n            default:\n                $(update).html(data);\n                break;\n            }\n        });\n    }\n\n    function asyncRequest(element, options) {\n        var confirm, loading, method, duration;\n\n        confirm = element.getAttribute(\"data-ajax-confirm\");\n        if (confirm && !window.confirm(confirm)) {\n            return;\n        }\n\n        loading = $(element.getAttribute(\"data-ajax-loading\"));\n        duration = element.getAttribute(\"data-ajax-loading-duration\") || 0;\n\n        $.extend(options, {\n            type: element.getAttribute(\"data-ajax-method\") || undefined,\n            url: element.getAttribute(\"data-ajax-url\") || undefined,\n            beforeSend: function (xhr) {\n                var result;\n                asyncOnBeforeSend(xhr, method);\n                result = getFunction(element.getAttribute(\"data-ajax-begin\"), [\"xhr\"]).apply(this, arguments);\n                if (result !== false) {\n                    loading.show(duration);\n                }\n                return result;\n            },\n            complete: function () {\n                loading.hide(duration);\n                getFunction(element.getAttribute(\"data-ajax-complete\"), [\"xhr\", \"status\"]).apply(this, arguments);\n            },\n            success: function (data, status, xhr) {\n                asyncOnSuccess(element, data, xhr.getResponseHeader(\"Content-Type\") || \"text/html\");\n                getFunction(element.getAttribute(\"data-ajax-success\"), [\"data\", \"status\", \"xhr\"]).apply(this, arguments);\n            },\n            error: getFunction(element.getAttribute(\"data-ajax-failure\"), [\"xhr\", \"status\", \"error\"])\n        });\n\n        options.data.push({ name: \"X-Requested-With\", value: \"XMLHttpRequest\" });\n\n        method = options.type.toUpperCase();\n        if (!isMethodProxySafe(method)) {\n            options.type = \"POST\";\n            options.data.push({ name: \"X-HTTP-Method-Override\", value: method });\n        }\n\n        $.ajax(options);\n    }\n\n    function validate(form) {\n        var validationInfo = $(form).data(data_validation);\n        return !validationInfo || !validationInfo.validate || validationInfo.validate();\n    }\n\n    $(document).on(\"click\", \"a[data-ajax=true]\", function (evt) {\n        evt.preventDefault();\n        asyncRequest(this, {\n            url: this.href,\n            type: \"GET\",\n            data: []\n        });\n    });\n\n    $(document).on(\"click\", \"form[data-ajax=true] input[type=image]\", function (evt) {\n        var name = evt.target.name,\n            $target = $(evt.target),\n            form = $target.parents(\"form\")[0],\n            offset = $target.offset();\n\n        $(form).data(data_click, [\n            { name: name + \".x\", value: Math.round(evt.pageX - offset.left) },\n            { name: name + \".y\", value: Math.round(evt.pageY - offset.top) }\n        ]);\n\n        setTimeout(function () {\n            $(form).removeData(data_click);\n        }, 0);\n    });\n\n    $(document).on(\"click\", \"form[data-ajax=true] :submit\", function (evt) {\n        var name = evt.target.name,\n            form = $(evt.target).parents(\"form\")[0];\n\n        $(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []);\n\n        setTimeout(function () {\n            $(form).removeData(data_click);\n        }, 0);\n    });\n\n    $(document).on(\"submit\", \"form[data-ajax=true]\", function (evt) {\n        var clickInfo = $(this).data(data_click) || [];\n        evt.preventDefault();\n        if (!validate(this)) {\n            return;\n        }\n        asyncRequest(this, {\n            url: this.action,\n            type: this.method || \"GET\",\n            data: clickInfo.concat($(this).serializeArray())\n        });\n    });\n}(jQuery));"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery.validate-vsdoc.js",
    "content": "/*\n* This file has been commented to support Visual Studio Intellisense.\n* You should not use this file at runtime inside the browser--it is only\n* intended to be used only for design-time IntelliSense.  Please use the\n* standard jQuery library for all production use.\n*\n* Comment version: 1.10.0\n*/\n\n/*\n* Note: While Microsoft is not the author of this file, Microsoft is\n* offering you a license subject to the terms of the Microsoft Software\n* License Terms for Microsoft ASP.NET Model View Controller 3.\n* Microsoft reserves all other rights. The notices below are provided\n* for informational purposes only and are not the license terms under\n* which Microsoft distributed this file.\n*\n* jQuery validation plugin 1.10.0\n*\n* http://bassistance.de/jquery-plugins/jquery-plugin-validation/\n* http://docs.jquery.com/Plugins/Validation\n*\n* Copyright (c) 2006 - 2011 Jörn Zaefferer\n*\n*/\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\t\t/// <summary>\n\t\t/// Validates the selected form. This method sets up event handlers for submit, focus,\n\t\t/// keyup, blur and click to trigger validation of the entire form or individual\n\t\t/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,\n\t\t/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.\n\t\t/// </summary>\n\t\t/// <param name=\"options\" type=\"Object\">\n\t\t/// A set of key/value pairs that configure the validate. All options are optional.\n\t\t/// </param>\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif (!this.length) {\n\t\t\toptions && options.debug && window.console && console.warn( \"nothing selected, can't validate, returning nothing\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data(this[0], 'validator');\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\t\t\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data(this[0], 'validator', validator); \n\t\t\n\t\tif ( validator.settings.onsubmit ) {\n\t\t\n\t\t\t// allow suppresing validation by adding a cancel class to the submit button\n\t\t\tthis.find(\"input, button\").filter(\".cancel\").click(function() {\n\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t});\n\t\t\t\n\t\t\t// when a submitHandler is used, capture the submitting button\n\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\tthis.find(\"input, button\").filter(\":submit\").click(function() {\n\t\t\t\t\tvalidator.submitButton = this;\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug )\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\n\t\t\t\tfunction handle() {\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\tvar hidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm );\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\t/// <summary>\n\t\t/// Checks if the selected form is valid or if all selected elements are valid.\n\t\t/// validate() needs to be called on the form before checking it using this method.\n\t\t/// </summary>\n\t\t/// <returns type=\"Boolean\" />\n\n        if ( $(this[0]).is('form')) {\n            return this.validate().form();\n        } else {\n            var valid = true;\n            var validator = $(this[0].form).validate();\n            this.each(function() {\n\t\t\t\tvalid &= validator.element(this);\n            });\n            return valid;\n        }\n    },\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function(attributes) {\n\t\t/// <summary>\n\t\t/// Remove the specified attributes from the first matched element and return them.\n\t\t/// </summary>\n\t\t/// <param name=\"attributes\" type=\"String\">\n\t\t/// A space-seperated list of attribute names to remove.\n\t\t/// </param>\n\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function(command, argument) {\n\t\t/// <summary>\n\t\t/// Return the validations rules for the first selected element.\n\t\t/// </summary>\n\t\t/// <param name=\"command\" type=\"String\">\n\t\t/// Can be either \"add\" or \"remove\".\n\t\t/// </param>\n\t\t/// <param name=\"argument\" type=\"\">\n\t\t/// A list of rules to add or remove.\n\t\t/// </param>\n\n\t\tvar element = this[0];\n\t\t\n\t\tif (command) {\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif (argument.messages)\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif (!argument) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.metadataRules(element),\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\t\t\n\t\t// make sure required is at front\n\t\tif (data.required) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function(a) {return !a.checked;}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function(source, params) {\n\t/// <summary>\n\t/// Replaces {n} placeholders with arguments.\n\t/// One or more arguments can be passed, in addition to the string template itself, to insert\n\t/// into the string.\n\t/// </summary>\n\t/// <param name=\"source\" type=\"String\">\n\t/// The string to format.\n\t/// </param>\n\t/// <param name=\"params\" type=\"String\">\n\t/// The first argument to insert, or an array of Strings to insert\n\t/// </param>\n\t/// <returns type=\"String\" />\n\n\tif ( arguments.length == 1 ) \n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\tif ( arguments.length > 2 && params.constructor != Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor != Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function(i, n) {\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\t\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: [],\n\t\tignoreTitle: false,\n\t\tonfocusin: function(element) {\n\t\t\tthis.lastActive = element;\n\t\t\t\t\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tthis.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function(element) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function(element) {\n\t\t\tif ( element.name in this.submitted || element == this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function(element) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted )\n\t\t\t\tthis.element(element);\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if (element.parentNode.name in this.submitted)\n\t\t\t\tthis.element(element.parentNode);\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function(settings) {\n\t\t/// <summary>\n\t\t/// Modify default settings for validation.\n\t\t/// Accepts everything that Plugins/Validation/validate accepts.\n\t\t/// </summary>\n\t\t/// <param name=\"settings\" type=\"Options\">\n\t\t/// Options to set as default.\n\t\t/// </param>\n\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\taccept: \"Please enter a value with a valid extension.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\t\n\tautoCreateRanges: false,\n\t\n\tprototype: {\n\t\t\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\t\t\t\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function(key, value) {\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function(key, value) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\t\t\t\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tvalidator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, :password, :file, select, textarea\", \"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\":radio, :checkbox, select, option\", \"click\", delegate);\n\n\t\t\tif (this.settings.invalidHandler)\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\t/// <summary>\n\t\t\t/// Validates the form, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as a normal submit event, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif (!this.valid())\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\t\t\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid(); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\t/// <summary>\n\t\t\t/// Validates a single element, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as validation on blur or keyup, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"element\" type=\"Selector\">\n\t\t\t/// An element to validate, must be inside the validated form.\n\t\t\t/// </param>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\telement = this.clean( element );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element );\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function(errors) {\n\t\t\t/// <summary>\n\t\t\t/// Show the specified messages.\n\t\t\t/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"errors\" type=\"Object\">\n\t\t\t/// One or more key/value pairs of input names and messages.\n\t\t\t/// </param>\n\n\t\t\tif(errors) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.settings.showErrors\n\t\t\t\t? this.settings.showErrors.call( this, this.errorMap, this.errorList )\n\t\t\t\t: this.defaultShowErrors();\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\t/// <summary>\n\t\t\t/// Resets the controlled form.\n\t\t\t/// Resets input fields to their original value (requires form plugin), removes classes\n\t\t\t/// indicating invalid elements and hides error messages.\n\t\t\t/// </summary>\n\n\t\t\tif ( $.fn.resetForm )\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass );\n\t\t},\n\t\t\n\t\tnumberOfInvalids: function() {\n\t\t\t/// <summary>\n\t\t\t/// Returns the number of invalid fields.\n\t\t\t/// This depends on the internal validator state. It covers all fields only after\n\t\t\t/// validating the complete form (on submit or via $(\"form\").valid()). After validating\n\t\t\t/// a single element, only that element is counted. Most useful in combination with the\n\t\t\t/// invalidHandler-option.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Number\" />\n\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\t\t\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj )\n\t\t\t\tcount++;\n\t\t\treturn count;\n\t\t},\n\t\t\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\t\t\n\t\tvalid: function() {\n\t\t\treturn this.size() == 0;\n\t\t},\n\t\t\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\t\t\n\t\tfocusInvalid: function() {\n\t\t\tif( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\n\t\t\t\treturn n.element.name == lastActive.name;\n\t\t\t}).length == 1 && lastActive;\n\t\t},\n\t\t\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\t\t\t\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\t// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved\n\t\t\treturn $([]).add(this.currentForm.elements)\n\t\t\t.filter(\":input\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\t!this.name && validator.settings.debug && window.console && console.error( \"%o has no name assigned\", this);\n\t\t\t\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) )\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\t\t\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[0];\n\t\t},\n\t\t\n\t\terrors: function() {\n\t\t\treturn $( this.settings.errorElement + \".\" + this.settings.errorClass, this.errorContext );\n\t\t},\n\t\t\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\t\t\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\t\t\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\t\n\t\tcheck: function( element ) {\n\t\t\telement = this.clean( element );\n\t\t\t\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif (this.checkable(element)) {\n\t\t\t    element = this.findByName(element.name).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\t\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tfor (var method in rules) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\t\t\t\t\tvar result = $.validator.methods[method].call( this, element.value.replace(/\\r/g, \"\"), element, rule.parameters );\n\t\t\t\t\t\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result == \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\t\t\t\t\t\n\t\t\t\t\tif ( result == \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tthis.settings.debug && window.console && console.log(\"exception occured when checking element \" + element.id\n\t\t\t\t\t\t + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dependencyMismatch)\n\t\t\t\treturn;\n\t\t\tif ( this.objectLength(rules) )\n\t\t\t\tthis.successList.push(element);\n\t\t\treturn true;\n\t\t},\n\t\t\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's \"messages\" metadata\n\t\tcustomMetaMessage: function(element, method) {\n\t\t\tif (!$.metadata)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tvar meta = this.settings.meta\n\t\t\t\t? $(element).metadata()[this.settings.meta]\n\t\t\t\t: $(element).metadata();\n\t\t\t\n\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t},\n\t\t\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor == String\n\t\t\t\t? m\n\t\t\t\t: m[method]);\n\t\t},\n\t\t\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif (arguments[i] !== undefined)\n\t\t\t\t\treturn arguments[i];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t\n\t\tdefaultMessage: function( element, method) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customMetaMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\t\t\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message == \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t}\t\t\t\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\t\t\t\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\t\t\n\t\taddWrapper: function(toToggle) {\n\t\t\tif ( this.settings.wrapper )\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\treturn toToggle;\n\t\t},\n\t\t\n\t\tdefaultShowErrors: function() {\n\t\t\tfor ( var i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tthis.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif (this.settings.success) {\n\t\t\t\tfor ( var i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.settings.unhighlight) {\n\t\t\t\tfor ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\t\t\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\t\t\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\t\t\n\t\tshowLabel: function(element, message) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass().addClass( this.settings.errorClass );\n\t\t\t\n\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\tlabel.attr(\"generated\") && label.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length )\n\t\t\t\t\tthis.settings.errorPlacement\n\t\t\t\t\t\t? this.settings.errorPlacement(label, $(element) )\n\t\t\t\t\t\t: label.insertAfter(element);\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\ttypeof this.settings.success == \"string\"\n\t\t\t\t\t? label.addClass( this.settings.success )\n\t\t\t\t\t: this.settings.success( label );\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\t\t\n\t\terrorsFor: function(element) {\n\t\t\tvar name = this.idOrName(element);\n    \t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr('for') == name;\n\t\t\t});\n\t\t},\n\t\t\n\t\tidOrName: function(element) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn /radio|checkbox/i.test(element.type);\n\t\t},\n\t\t\n\t\tfindByName: function( name ) {\n\t\t\t// select by name and filter by form for performance over form.find(\"[name=...]\")\n\t\t\tvar form = this.currentForm;\n\t\t\treturn $(document.getElementsByName(name)).map(function(index, element) {\n\t\t\t\treturn element.form == form && element.name == name && element  || null;\n\t\t\t});\n\t\t},\n\t\t\n\t\tgetLength: function(value, element) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase 'input':\n\t\t\t\tif( this.checkable( element) )\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\t\n\t\tdepend: function(param, element) {\n\t\t\treturn this.dependTypes[typeof param]\n\t\t\t\t? this.dependTypes[typeof param](param, element)\n\t\t\t\t: true;\n\t\t},\n\t\n\t\tdependTypes: {\n\t\t\t\"boolean\": function(param, element) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function(param, element) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function(param, element) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\t\t\n\t\toptional: function(element) {\n\t\t\treturn !$.validator.methods.required.call(this, $.trim(element.value), element) && \"dependency-mismatch\";\n\t\t},\n\t\t\n\t\tstartRequest: function(element) {\n\t\t\tif (!this.pending[element.name]) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\t\t\n\t\tstopRequest: function(element, valid) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif (this.pendingRequest < 0)\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\tpreviousValue: function(element) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\t\t\n\t},\n\t\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tdateDE: {dateDE: true},\n\t\tnumber: {number: true},\n\t\tnumberDE: {numberDE: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\t\n\taddClassRules: function(className, rules) {\n\t\t/// <summary>\n\t\t/// Add a compound class method - useful to refactor common combinations of rules into a single\n\t\t/// class.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the class rule to add\n\t\t/// </param>\n\t\t/// <param name=\"rules\" type=\"Options\">\n\t\t/// The compound rules\n\t\t/// </param>\n\n\t\tclassName.constructor == String ?\n\t\t\tthis.classRuleSettings[className] = rules :\n\t\t\t$.extend(this.classRuleSettings, className);\n\t},\n\t\n\tclassRules: function(element) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr('class');\n\t\tclasses && $.each(classes.split(' '), function() {\n\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t}\n\t\t});\n\t\treturn rules;\n\t},\n\t\n\tattributeRules: function(element) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value = $element.attr(method);\n\t\t\tif (value) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\tmetadataRules: function(element) {\n\t\tif (!$.metadata) return {};\n\t\t\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\treturn meta ?\n\t\t\t$(element).metadata()[meta] :\n\t\t\t$(element).metadata();\n\t},\n\t\n\tstaticRules: function(element) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, 'validator');\n\t\tif (validator.settings.rules) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\t\n\tnormalizeRules: function(rules, element) {\n\t\t// handle dependency check\n\t\t$.each(rules, function(prop, val) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif (val === false) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (val.param || val.depends) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (keepRule) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// evaluate parameters\n\t\t$.each(rules, function(rule, parameter) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\t\t\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t}\n\t\t});\n\t\t\n\t\tif ($.validator.autoCreateRanges) {\n\t\t\t// auto-create ranges\n\t\t\tif (rules.min && rules.max) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\tif (rules.messages) {\n\t\t\tdelete rules.messages;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function(data) {\n\t\tif( typeof data == \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\t\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function(name, method, message) {\n\t\t/// <summary>\n\t\t/// Add a custom validation method. It must consist of a name (must be a legal javascript \n\t\t/// identifier), a javascript based function and a default string message.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the method, used to identify and referencing it, must be a valid javascript\n\t\t/// identifier\n\t\t/// </param>\n\t\t/// <param name=\"method\" type=\"Function\">\n\t\t/// The actual method implementation, returning true if an element is valid\n\t\t/// </param>\n\t\t/// <param name=\"message\" type=\"String\" optional=\"true\">\n\t\t/// (Optional) The default message to display for this method. Can be a function created by \n\t\t/// jQuery.validator.format(value). When undefined, an already existing message is used \n\t\t/// (handy for localization), otherwise the field-specific messages have to be defined.\n\t\t/// </param>\n\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];\n\t\tif (method.length < 3) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function(value, element, param) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\tcase 'input':\n\t\t\t\tif ( this.checkable(element) )\n\t\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\tdefault:\n\t\t\t\treturn $.trim(value).length > 0;\n\t\t\t}\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function(value, element, param) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] )\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\t\t\t\n\t\t\tparam = typeof param == \"string\" && {url:param} || param; \n\t\t\t\n\t\t\tif ( this.pending[element.name] ) {\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage(element, \"remote\");\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function(value, element, param) {\n\t\t\tvar length = this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n        \n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function(value, element) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function(value, element) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function(value, element) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t// accept only digits and dashes\n\t\t\tif (/[^0-9-]+/.test(value))\n\t\t\t\treturn false;\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tvar nDigit = parseInt(cDigit, 10);\n\t\t\t\tif (bEven) {\n\t\t\t\t\tif ((nDigit *= 2) > 9)\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) == 0;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/accept\n\t\taccept: function(value, element, param) {\n\t\t\tparam = typeof param == \"string\" ? param.replace(/,/g, '|') : \"png|jpe?g|gif\";\n\t\t\treturn this.optional(element) || value.match(new RegExp(\".(\" + param + \")$\", \"i\")); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function(value, element, param) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param).unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t$(element).valid();\n\t\t\t});\n\t\t\treturn value == target.val();\n\t\t}\n\t\t\n\t}\n\t\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n})(jQuery);\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() \n;(function($) {\n\tvar pendingRequests = {};\n\t\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\n\t\t    var port = settings.port;\n\t\t    if (settings.mode == \"abort\") {\n\t\t\t    if ( pendingRequests[port] ) {\n\t\t\t\t    pendingRequests[port].abort();\n\t\t\t    }\t\t\t\tpendingRequests[port] = xhr;\n\t\t    }\n\t    });\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function(settings) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif (mode == \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\n\t\t\t    return (pendingRequests[port] = ajax.apply(this, arguments));\n\t\t    }\n\t\t    return ajax.apply(this, arguments);\n\t    };\n    }\n})(jQuery);\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target \n;(function($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\t\n\t\t}, function( original, fix ){\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup:function() {\n\t\t\t\t\tthis.addEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\tteardown:function() {\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\thandler: function(e) {\n\t\t\t\t\targuments[0] = $.event.fix(e);\n\t\t\t\t\targuments[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t};\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function(delegate, type, handler) {\n\t\t\treturn this.bind(type, function(event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery.validate.js",
    "content": "/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012\n* https://github.com/jzaefferer/jquery-validation\n* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT */\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif (!this.length) {\n\t\t\tif (options && options.debug && window.console) {\n\t\t\t\tconsole.warn( \"nothing selected, can't validate, returning nothing\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data(this[0], 'validator');\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr('novalidate', 'novalidate');\n\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data(this[0], 'validator', validator);\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.validateDelegate( \":submit\", \"click\", function(ev) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = ev.target;\n\t\t\t\t}\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $(ev.target).hasClass('cancel') ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\tif ( $(this[0]).is('form')) {\n\t\t\treturn this.validate().form();\n\t\t} else {\n\t\t\tvar valid = true;\n\t\t\tvar validator = $(this[0].form).validate();\n\t\t\tthis.each(function() {\n\t\t\t\tvalid &= validator.element(this);\n\t\t\t});\n\t\t\treturn valid;\n\t\t}\n\t},\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function(attributes) {\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function(command, argument) {\n\t\tvar element = this[0];\n\n\t\tif (command) {\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif (argument.messages) {\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif (!argument) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.metadataRules(element),\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\n\t\t// make sure required is at front\n\t\tif (data.required) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function(a) {return !a.checked;}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function(source, params) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function(i, n) {\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function(element, event) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function(element, event) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function(element, event) {\n\t\t\tif ( event.which === 9 && this.elementValue(element) === '' ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastActive ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function(element, event) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if (element.parentNode.name in this.submitted) {\n\t\t\t\tthis.element(element.parentNode);\n\t\t\t}\n\t\t},\n\t\thighlight: function(element, errorClass, validClass) {\n\t\t\tif (element.type === 'radio') {\n\t\t\t\tthis.findByName(element.name).addClass(errorClass).removeClass(validClass);\n\t\t\t} else {\n\t\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t\t}\n\t\t},\n\t\tunhighlight: function(element, errorClass, validClass) {\n\t\t\tif (element.type === 'radio') {\n\t\t\t\tthis.findByName(element.name).removeClass(errorClass).addClass(validClass);\n\t\t\t} else {\n\t\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function(settings) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function(key, value) {\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function(key, value) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tif (validator.settings[eventType]) {\n\t\t\t\t\tvalidator.settings[eventType].call(validator, this[0], event);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, [type='password'], [type='file'], select, textarea, \" +\n\t\t\t\t\t\"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" +\n\t\t\t\t\t\"[type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], \" +\n\t\t\t\t\t\"[type='range'], [type='color'] \",\n\t\t\t\t\t\"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\"[type='radio'], [type='checkbox'], select, option\", \"click\", delegate);\n\n\t\t\tif (this.settings.invalidHandler) {\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif (!this.valid()) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element ) !== false;\n\t\t\tif (result) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function(errors) {\n\t\t\tif(errors) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.settings.showErrors) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass ).removeData( \"previousValue\" );\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $(this.currentForm)\n\t\t\t.find(\"input, select, textarea\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this);\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[0];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.replace(' ', '.');\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar type = $(element).attr('type'),\n\t\t\t\tval = $(element).val();\n\n\t\t\tif ( type === 'radio' || type === 'checkbox' ) {\n\t\t\t\treturn $('input[name=\"' + $(element).attr('name') + '\"]:checked').val();\n\t\t\t}\n\n\t\t\tif ( typeof val === 'string' ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\");\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tvar val = this.elementValue(element);\n\t\t\tvar result;\n\n\t\t\tfor (var method in rules ) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[method].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log(\"exception occured when checking element \" + element.id + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dependencyMismatch) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength(rules) ) {\n\t\t\t\tthis.successList.push(element);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's \"messages\" metadata\n\t\tcustomMetaMessage: function(element, method) {\n\t\t\tif (!$.metadata) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata();\n\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\tcustomDataMessage: function(element, method) {\n\t\t\treturn $(element).data('msg-' + method.toLowerCase()) || (element.attributes && $(element).attr('data-msg-' + method.toLowerCase()));\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor === String ? m : m[method]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif (arguments[i] !== undefined) {\n\t\t\t\t\treturn arguments[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\tthis.customMetaMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\n\t\taddWrapper: function(toToggle) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements;\n\t\t\tfor ( i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif (this.settings.success) {\n\t\t\t\tfor ( i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.settings.unhighlight) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function(element, message) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\tif ( label.attr(\"generated\") ) {\n\t\t\t\t\tlabel.html(message);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length ) {\n\t\t\t\t\tif ( this.settings.errorPlacement ) {\n\t\t\t\t\t\tthis.settings.errorPlacement(label, $(element) );\n\t\t\t\t\t} else {\n\t\t\t\t\tlabel.insertAfter(element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\tlabel.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( label, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\n\t\terrorsFor: function(element) {\n\t\t\tvar name = this.idOrName(element);\n\t\t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr('for') === name;\n\t\t\t});\n\t\t},\n\n\t\tidOrName: function(element) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tvalidationTargetFor: function(element) {\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif (this.checkable(element)) {\n\t\t\t\telement = this.findByName( element.name ).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\treturn element;\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn (/radio|checkbox/i).test(element.type);\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $(this.currentForm).find('[name=\"' + name + '\"]');\n\t\t},\n\n\t\tgetLength: function(value, element) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase 'input':\n\t\t\t\tif( this.checkable( element) ) {\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function(param, element) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function(param, element) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function(param, element) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function(param, element) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\n\t\toptional: function(element) {\n\t\t\tvar val = this.elementValue(element);\n\t\t\treturn !$.validator.methods.required.call(this, val, element) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function(element) {\n\t\t\tif (!this.pending[element.name]) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function(element, valid) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif (this.pendingRequest < 0) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function(element) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tnumber: {number: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\n\taddClassRules: function(className, rules) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[className] = rules;\n\t\t} else {\n\t\t\t$.extend(this.classRuleSettings, className);\n\t\t}\n\t},\n\n\tclassRules: function(element) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr('class');\n\t\tif ( classes ) {\n\t\t\t$.each(classes.split(' '), function() {\n\t\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tattributeRules: function(element) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value;\n\n\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\tif (method === 'required') {\n\t\t\t\tvalue = $element.get(0).getAttribute(method);\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif (value === \"\") {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr(method);\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\trules[method] = value;\n\t\t\t} else if ($element[0].getAttribute(\"type\") === method) {\n\t\t\t\trules[method] = true;\n\t\t\t}\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tmetadataRules: function(element) {\n\t\tif (!$.metadata) {\n\t\t\treturn {};\n\t\t}\n\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\treturn meta ?\n\t\t\t$(element).metadata()[meta] :\n\t\t\t$(element).metadata();\n\t},\n\n\tstaticRules: function(element) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, 'validator');\n\t\tif (validator.settings.rules) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function(rules, element) {\n\t\t// handle dependency check\n\t\t$.each(rules, function(prop, val) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif (val === false) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (val.param || val.depends) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (keepRule) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each(rules, function(rule, parameter) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t}\n\t\t});\n\n\t\tif ($.validator.autoCreateRanges) {\n\t\t\t// auto-create ranges\n\t\t\tif (rules.min && rules.max) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\tif (rules.messages) {\n\t\t\tdelete rules.messages;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function(data) {\n\t\tif( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function(name, method, message) {\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];\n\t\tif (method.length < 3) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function(value, element, param) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable(element) ) {\n\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\t}\n\t\t\treturn $.trim(value).length > 0;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function(value, element, param) {\n\t\t\tif ( this.optional(element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] ) {\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && {url:param} || param;\n\n\t\t\tif ( this.pending[element.name] ) {\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true || response === \"true\";\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tdelete validator.invalid[element.name];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.invalid[element.name] = true;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function(value, element, param) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || length >= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function(value, element, param) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || length <= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function(value, element, param) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function(value, element) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function(value, element) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function(value, element) {\n\t\t\tif ( this.optional(element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif (/[^0-9 \\-]+/.test(value)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tnDigit = parseInt(cDigit, 10);\n\t\t\t\tif (bEven) {\n\t\t\t\t\tif ((nDigit *= 2) > 9) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) === 0;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function(value, element, param) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param);\n\t\t\tif (this.settings.onfocusout) {\n\t\t\t\ttarget.unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t\t$(element).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t}\n\n\t}\n\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n}(jQuery));\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n(function($) {\n\tvar pendingRequests = {};\n\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\n\t\t\tvar port = settings.port;\n\t\t\tif (settings.mode === \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\tpendingRequests[port] = xhr;\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function(settings) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif (mode === \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\treturn (pendingRequests[port] = ajax.apply(this, arguments));\n\t\t\t}\n\t\t\treturn ajax.apply(this, arguments);\n\t\t};\n\t}\n}(jQuery));\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\n(function($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\n\t\t}, function( original, fix ){\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup:function() {\n\t\t\t\t\tthis.addEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\tteardown:function() {\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\thandler: function(e) {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\targs[0] = $.event.fix(e);\n\t\t\t\t\targs[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, args);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t}\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function(delegate, type, handler) {\n\t\t\treturn this.bind(type, function(event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}(jQuery));\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/jquery.validate.unobtrusive.js",
    "content": "﻿/*!\n** Unobtrusive validation support library for jQuery and jQuery Validate\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n        if (container) {\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this);\n        $form.data(\"validator\").resetForm();\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n                .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form);\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: \"input-validation-error\",\n                    errorElement: \"span\",\n                    errorPlacement: $.proxy(onError, form),\n                    invalidHandler: $.proxy(onErrors, form),\n                    messages: {},\n                    rules: {},\n                    success: $.proxy(onSuccess, form)\n                },\n                attachValidation: function () {\n                    $form\n                        .unbind(\"reset.\" + data_validation, onResetProxy)\n                        .bind(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n            var $forms = $(selector)\n                .parents(\"form\")\n                .andSelf()\n                .add($(selector).find(\"form\"))\n                .filter(\"form\");\n\n            $(selector).find(\":input[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    adapters.addSingleVal(\"accept\", \"exts\").addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                return $(options.form).find(\":input[name='\" + escapeAttributeValue(paramName) + \"']\").val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n} (jQuery));"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/knockout-2.2.0.debug.js",
    "content": "// Knockout JavaScript library v2.2.0\n// (c) Steven Sanderson - http://knockoutjs.com/\n// License: MIT (http://www.opensource.org/licenses/mit-license.php)\n\n(function(){\nvar DEBUG=true;\n(function(window,document,navigator,jQuery,undefined){\n!function(factory) {\n    // Support three module loading scenarios\n    if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n        // [1] CommonJS/Node.js\n        var target = module['exports'] || exports; // module.exports is for Node.js\n        factory(target);\n    } else if (typeof define === 'function' && define['amd']) {\n        // [2] AMD anonymous module\n        define(['exports'], factory);\n    } else {\n        // [3] No module loader (plain <script> tag) - put directly in global namespace\n        factory(window['ko'] = {});\n    }\n}(function(koExports){\n// Internally, all KO objects are attached to koExports (even the non-exported ones whose names will be minified by the closure compiler).\n// In the future, the following \"ko\" variable may be made distinct from \"koExports\" so that private objects are not externally reachable.\nvar ko = typeof koExports !== 'undefined' ? koExports : {};\n// Google Closure Compiler helpers (used only to make the minified file smaller)\nko.exportSymbol = function(koPath, object) {\n\tvar tokens = koPath.split(\".\");\n\n\t// In the future, \"ko\" may become distinct from \"koExports\" (so that non-exported objects are not reachable)\n\t// At that point, \"target\" would be set to: (typeof koExports !== \"undefined\" ? koExports : ko)\n\tvar target = ko;\n\n\tfor (var i = 0; i < tokens.length - 1; i++)\n\t\ttarget = target[tokens[i]];\n\ttarget[tokens[tokens.length - 1]] = object;\n};\nko.exportProperty = function(owner, publicName, object) {\n  owner[publicName] = object;\n};\nko.version = \"2.2.0\";\n\nko.exportSymbol('version', ko.version);\nko.utils = new (function () {\n    var stringTrimRegex = /^(\\s|\\u00A0)+|(\\s|\\u00A0)+$/g;\n\n    // Represent the known event types in a compact way, then at runtime transform it into a hash with event name as key (for fast lookup)\n    var knownEvents = {}, knownEventTypesByEventName = {};\n    var keyEventTypeName = /Firefox\\/2/i.test(navigator.userAgent) ? 'KeyboardEvent' : 'UIEvents';\n    knownEvents[keyEventTypeName] = ['keyup', 'keydown', 'keypress'];\n    knownEvents['MouseEvents'] = ['click', 'dblclick', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave'];\n    for (var eventType in knownEvents) {\n        var knownEventsForType = knownEvents[eventType];\n        if (knownEventsForType.length) {\n            for (var i = 0, j = knownEventsForType.length; i < j; i++)\n                knownEventTypesByEventName[knownEventsForType[i]] = eventType;\n        }\n    }\n    var eventsThatMustBeRegisteredUsingAttachEvent = { 'propertychange': true }; // Workaround for an IE9 issue - https://github.com/SteveSanderson/knockout/issues/406\n\n    // Detect IE versions for bug workarounds (uses IE conditionals, not UA string, for robustness)\n    // Note that, since IE 10 does not support conditional comments, the following logic only detects IE < 10.\n    // Currently this is by design, since IE 10+ behaves correctly when treated as a standard browser.\n    // If there is a future need to detect specific versions of IE10+, we will amend this.\n    var ieVersion = (function() {\n        var version = 3, div = document.createElement('div'), iElems = div.getElementsByTagName('i');\n\n        // Keep constructing conditional HTML blocks until we hit one that resolves to an empty fragment\n        while (\n            div.innerHTML = '<!--[if gt IE ' + (++version) + ']><i></i><![endif]-->',\n            iElems[0]\n        );\n        return version > 4 ? version : undefined;\n    }());\n    var isIe6 = ieVersion === 6,\n        isIe7 = ieVersion === 7;\n\n    function isClickOnCheckableElement(element, eventType) {\n        if ((ko.utils.tagNameLower(element) !== \"input\") || !element.type) return false;\n        if (eventType.toLowerCase() != \"click\") return false;\n        var inputType = element.type;\n        return (inputType == \"checkbox\") || (inputType == \"radio\");\n    }\n\n    return {\n        fieldsIncludedWithJsonPost: ['authenticity_token', /^__RequestVerificationToken(_.*)?$/],\n\n        arrayForEach: function (array, action) {\n            for (var i = 0, j = array.length; i < j; i++)\n                action(array[i]);\n        },\n\n        arrayIndexOf: function (array, item) {\n            if (typeof Array.prototype.indexOf == \"function\")\n                return Array.prototype.indexOf.call(array, item);\n            for (var i = 0, j = array.length; i < j; i++)\n                if (array[i] === item)\n                    return i;\n            return -1;\n        },\n\n        arrayFirst: function (array, predicate, predicateOwner) {\n            for (var i = 0, j = array.length; i < j; i++)\n                if (predicate.call(predicateOwner, array[i]))\n                    return array[i];\n            return null;\n        },\n\n        arrayRemoveItem: function (array, itemToRemove) {\n            var index = ko.utils.arrayIndexOf(array, itemToRemove);\n            if (index >= 0)\n                array.splice(index, 1);\n        },\n\n        arrayGetDistinctValues: function (array) {\n            array = array || [];\n            var result = [];\n            for (var i = 0, j = array.length; i < j; i++) {\n                if (ko.utils.arrayIndexOf(result, array[i]) < 0)\n                    result.push(array[i]);\n            }\n            return result;\n        },\n\n        arrayMap: function (array, mapping) {\n            array = array || [];\n            var result = [];\n            for (var i = 0, j = array.length; i < j; i++)\n                result.push(mapping(array[i]));\n            return result;\n        },\n\n        arrayFilter: function (array, predicate) {\n            array = array || [];\n            var result = [];\n            for (var i = 0, j = array.length; i < j; i++)\n                if (predicate(array[i]))\n                    result.push(array[i]);\n            return result;\n        },\n\n        arrayPushAll: function (array, valuesToPush) {\n            if (valuesToPush instanceof Array)\n                array.push.apply(array, valuesToPush);\n            else\n                for (var i = 0, j = valuesToPush.length; i < j; i++)\n                    array.push(valuesToPush[i]);\n            return array;\n        },\n\n        extend: function (target, source) {\n            if (source) {\n                for(var prop in source) {\n                    if(source.hasOwnProperty(prop)) {\n                        target[prop] = source[prop];\n                    }\n                }\n            }\n            return target;\n        },\n\n        emptyDomNode: function (domNode) {\n            while (domNode.firstChild) {\n                ko.removeNode(domNode.firstChild);\n            }\n        },\n\n        moveCleanedNodesToContainerElement: function(nodes) {\n            // Ensure it's a real array, as we're about to reparent the nodes and\n            // we don't want the underlying collection to change while we're doing that.\n            var nodesArray = ko.utils.makeArray(nodes);\n\n            var container = document.createElement('div');\n            for (var i = 0, j = nodesArray.length; i < j; i++) {\n                container.appendChild(ko.cleanNode(nodesArray[i]));\n            }\n            return container;\n        },\n\n        cloneNodes: function (nodesArray, shouldCleanNodes) {\n            for (var i = 0, j = nodesArray.length, newNodesArray = []; i < j; i++) {\n                var clonedNode = nodesArray[i].cloneNode(true);\n                newNodesArray.push(shouldCleanNodes ? ko.cleanNode(clonedNode) : clonedNode);\n            }\n            return newNodesArray;\n        },\n\n        setDomNodeChildren: function (domNode, childNodes) {\n            ko.utils.emptyDomNode(domNode);\n            if (childNodes) {\n                for (var i = 0, j = childNodes.length; i < j; i++)\n                    domNode.appendChild(childNodes[i]);\n            }\n        },\n\n        replaceDomNodes: function (nodeToReplaceOrNodeArray, newNodesArray) {\n            var nodesToReplaceArray = nodeToReplaceOrNodeArray.nodeType ? [nodeToReplaceOrNodeArray] : nodeToReplaceOrNodeArray;\n            if (nodesToReplaceArray.length > 0) {\n                var insertionPoint = nodesToReplaceArray[0];\n                var parent = insertionPoint.parentNode;\n                for (var i = 0, j = newNodesArray.length; i < j; i++)\n                    parent.insertBefore(newNodesArray[i], insertionPoint);\n                for (var i = 0, j = nodesToReplaceArray.length; i < j; i++) {\n                    ko.removeNode(nodesToReplaceArray[i]);\n                }\n            }\n        },\n\n        setOptionNodeSelectionState: function (optionNode, isSelected) {\n            // IE6 sometimes throws \"unknown error\" if you try to write to .selected directly, whereas Firefox struggles with setAttribute. Pick one based on browser.\n            if (ieVersion < 7)\n                optionNode.setAttribute(\"selected\", isSelected);\n            else\n                optionNode.selected = isSelected;\n        },\n\n        stringTrim: function (string) {\n            return (string || \"\").replace(stringTrimRegex, \"\");\n        },\n\n        stringTokenize: function (string, delimiter) {\n            var result = [];\n            var tokens = (string || \"\").split(delimiter);\n            for (var i = 0, j = tokens.length; i < j; i++) {\n                var trimmed = ko.utils.stringTrim(tokens[i]);\n                if (trimmed !== \"\")\n                    result.push(trimmed);\n            }\n            return result;\n        },\n\n        stringStartsWith: function (string, startsWith) {\n            string = string || \"\";\n            if (startsWith.length > string.length)\n                return false;\n            return string.substring(0, startsWith.length) === startsWith;\n        },\n\n        domNodeIsContainedBy: function (node, containedByNode) {\n            if (containedByNode.compareDocumentPosition)\n                return (containedByNode.compareDocumentPosition(node) & 16) == 16;\n            while (node != null) {\n                if (node == containedByNode)\n                    return true;\n                node = node.parentNode;\n            }\n            return false;\n        },\n\n        domNodeIsAttachedToDocument: function (node) {\n            return ko.utils.domNodeIsContainedBy(node, node.ownerDocument);\n        },\n\n        tagNameLower: function(element) {\n            // For HTML elements, tagName will always be upper case; for XHTML elements, it'll be lower case.\n            // Possible future optimization: If we know it's an element from an XHTML document (not HTML),\n            // we don't need to do the .toLowerCase() as it will always be lower case anyway.\n            return element && element.tagName && element.tagName.toLowerCase();\n        },\n\n        registerEventHandler: function (element, eventType, handler) {\n            var mustUseAttachEvent = ieVersion && eventsThatMustBeRegisteredUsingAttachEvent[eventType];\n            if (!mustUseAttachEvent && typeof jQuery != \"undefined\") {\n                if (isClickOnCheckableElement(element, eventType)) {\n                    // For click events on checkboxes, jQuery interferes with the event handling in an awkward way:\n                    // it toggles the element checked state *after* the click event handlers run, whereas native\n                    // click events toggle the checked state *before* the event handler.\n                    // Fix this by intecepting the handler and applying the correct checkedness before it runs.\n                    var originalHandler = handler;\n                    handler = function(event, eventData) {\n                        var jQuerySuppliedCheckedState = this.checked;\n                        if (eventData)\n                            this.checked = eventData.checkedStateBeforeEvent !== true;\n                        originalHandler.call(this, event);\n                        this.checked = jQuerySuppliedCheckedState; // Restore the state jQuery applied\n                    };\n                }\n                jQuery(element)['bind'](eventType, handler);\n            } else if (!mustUseAttachEvent && typeof element.addEventListener == \"function\")\n                element.addEventListener(eventType, handler, false);\n            else if (typeof element.attachEvent != \"undefined\")\n                element.attachEvent(\"on\" + eventType, function (event) {\n                    handler.call(element, event);\n                });\n            else\n                throw new Error(\"Browser doesn't support addEventListener or attachEvent\");\n        },\n\n        triggerEvent: function (element, eventType) {\n            if (!(element && element.nodeType))\n                throw new Error(\"element must be a DOM node when calling triggerEvent\");\n\n            if (typeof jQuery != \"undefined\") {\n                var eventData = [];\n                if (isClickOnCheckableElement(element, eventType)) {\n                    // Work around the jQuery \"click events on checkboxes\" issue described above by storing the original checked state before triggering the handler\n                    eventData.push({ checkedStateBeforeEvent: element.checked });\n                }\n                jQuery(element)['trigger'](eventType, eventData);\n            } else if (typeof document.createEvent == \"function\") {\n                if (typeof element.dispatchEvent == \"function\") {\n                    var eventCategory = knownEventTypesByEventName[eventType] || \"HTMLEvents\";\n                    var event = document.createEvent(eventCategory);\n                    event.initEvent(eventType, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, element);\n                    element.dispatchEvent(event);\n                }\n                else\n                    throw new Error(\"The supplied element doesn't support dispatchEvent\");\n            } else if (typeof element.fireEvent != \"undefined\") {\n                // Unlike other browsers, IE doesn't change the checked state of checkboxes/radiobuttons when you trigger their \"click\" event\n                // so to make it consistent, we'll do it manually here\n                if (isClickOnCheckableElement(element, eventType))\n                    element.checked = element.checked !== true;\n                element.fireEvent(\"on\" + eventType);\n            }\n            else\n                throw new Error(\"Browser doesn't support triggering events\");\n        },\n\n        unwrapObservable: function (value) {\n            return ko.isObservable(value) ? value() : value;\n        },\n\n        peekObservable: function (value) {\n            return ko.isObservable(value) ? value.peek() : value;\n        },\n\n        toggleDomNodeCssClass: function (node, classNames, shouldHaveClass) {\n            if (classNames) {\n                var cssClassNameRegex = /[\\w-]+/g,\n                    currentClassNames = node.className.match(cssClassNameRegex) || [];\n                ko.utils.arrayForEach(classNames.match(cssClassNameRegex), function(className) {\n                    var indexOfClass = ko.utils.arrayIndexOf(currentClassNames, className);\n                    if (indexOfClass >= 0) {\n                        if (!shouldHaveClass)\n                            currentClassNames.splice(indexOfClass, 1);\n                    } else {\n                        if (shouldHaveClass)\n                            currentClassNames.push(className);\n                    }\n                });\n                node.className = currentClassNames.join(\" \");\n            }\n        },\n\n        setTextContent: function(element, textContent) {\n            var value = ko.utils.unwrapObservable(textContent);\n            if ((value === null) || (value === undefined))\n                value = \"\";\n\n            if (element.nodeType === 3) {\n                element.data = value;\n            } else {\n                // We need there to be exactly one child: a text node.\n                // If there are no children, more than one, or if it's not a text node,\n                // we'll clear everything and create a single text node.\n                var innerTextNode = ko.virtualElements.firstChild(element);\n                if (!innerTextNode || innerTextNode.nodeType != 3 || ko.virtualElements.nextSibling(innerTextNode)) {\n                    ko.virtualElements.setDomNodeChildren(element, [document.createTextNode(value)]);\n                } else {\n                    innerTextNode.data = value;\n                }\n\n                ko.utils.forceRefresh(element);\n            }\n        },\n\n        setElementName: function(element, name) {\n            element.name = name;\n\n            // Workaround IE 6/7 issue\n            // - https://github.com/SteveSanderson/knockout/issues/197\n            // - http://www.matts411.com/post/setting_the_name_attribute_in_ie_dom/\n            if (ieVersion <= 7) {\n                try {\n                    element.mergeAttributes(document.createElement(\"<input name='\" + element.name + \"'/>\"), false);\n                }\n                catch(e) {} // For IE9 with doc mode \"IE9 Standards\" and browser mode \"IE9 Compatibility View\"\n            }\n        },\n\n        forceRefresh: function(node) {\n            // Workaround for an IE9 rendering bug - https://github.com/SteveSanderson/knockout/issues/209\n            if (ieVersion >= 9) {\n                // For text nodes and comment nodes (most likely virtual elements), we will have to refresh the container\n                var elem = node.nodeType == 1 ? node : node.parentNode;\n                if (elem.style)\n                    elem.style.zoom = elem.style.zoom;\n            }\n        },\n\n        ensureSelectElementIsRenderedCorrectly: function(selectElement) {\n            // Workaround for IE9 rendering bug - it doesn't reliably display all the text in dynamically-added select boxes unless you force it to re-render by updating the width.\n            // (See https://github.com/SteveSanderson/knockout/issues/312, http://stackoverflow.com/questions/5908494/select-only-shows-first-char-of-selected-option)\n            if (ieVersion >= 9) {\n                var originalWidth = selectElement.style.width;\n                selectElement.style.width = 0;\n                selectElement.style.width = originalWidth;\n            }\n        },\n\n        range: function (min, max) {\n            min = ko.utils.unwrapObservable(min);\n            max = ko.utils.unwrapObservable(max);\n            var result = [];\n            for (var i = min; i <= max; i++)\n                result.push(i);\n            return result;\n        },\n\n        makeArray: function(arrayLikeObject) {\n            var result = [];\n            for (var i = 0, j = arrayLikeObject.length; i < j; i++) {\n                result.push(arrayLikeObject[i]);\n            };\n            return result;\n        },\n\n        isIe6 : isIe6,\n        isIe7 : isIe7,\n        ieVersion : ieVersion,\n\n        getFormFields: function(form, fieldName) {\n            var fields = ko.utils.makeArray(form.getElementsByTagName(\"input\")).concat(ko.utils.makeArray(form.getElementsByTagName(\"textarea\")));\n            var isMatchingField = (typeof fieldName == 'string')\n                ? function(field) { return field.name === fieldName }\n                : function(field) { return fieldName.test(field.name) }; // Treat fieldName as regex or object containing predicate\n            var matches = [];\n            for (var i = fields.length - 1; i >= 0; i--) {\n                if (isMatchingField(fields[i]))\n                    matches.push(fields[i]);\n            };\n            return matches;\n        },\n\n        parseJson: function (jsonString) {\n            if (typeof jsonString == \"string\") {\n                jsonString = ko.utils.stringTrim(jsonString);\n                if (jsonString) {\n                    if (window.JSON && window.JSON.parse) // Use native parsing where available\n                        return window.JSON.parse(jsonString);\n                    return (new Function(\"return \" + jsonString))(); // Fallback on less safe parsing for older browsers\n                }\n            }\n            return null;\n        },\n\n        stringifyJson: function (data, replacer, space) {   // replacer and space are optional\n            if ((typeof JSON == \"undefined\") || (typeof JSON.stringify == \"undefined\"))\n                throw new Error(\"Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js\");\n            return JSON.stringify(ko.utils.unwrapObservable(data), replacer, space);\n        },\n\n        postJson: function (urlOrForm, data, options) {\n            options = options || {};\n            var params = options['params'] || {};\n            var includeFields = options['includeFields'] || this.fieldsIncludedWithJsonPost;\n            var url = urlOrForm;\n\n            // If we were given a form, use its 'action' URL and pick out any requested field values\n            if((typeof urlOrForm == 'object') && (ko.utils.tagNameLower(urlOrForm) === \"form\")) {\n                var originalForm = urlOrForm;\n                url = originalForm.action;\n                for (var i = includeFields.length - 1; i >= 0; i--) {\n                    var fields = ko.utils.getFormFields(originalForm, includeFields[i]);\n                    for (var j = fields.length - 1; j >= 0; j--)\n                        params[fields[j].name] = fields[j].value;\n                }\n            }\n\n            data = ko.utils.unwrapObservable(data);\n            var form = document.createElement(\"form\");\n            form.style.display = \"none\";\n            form.action = url;\n            form.method = \"post\";\n            for (var key in data) {\n                var input = document.createElement(\"input\");\n                input.name = key;\n                input.value = ko.utils.stringifyJson(ko.utils.unwrapObservable(data[key]));\n                form.appendChild(input);\n            }\n            for (var key in params) {\n                var input = document.createElement(\"input\");\n                input.name = key;\n                input.value = params[key];\n                form.appendChild(input);\n            }\n            document.body.appendChild(form);\n            options['submitter'] ? options['submitter'](form) : form.submit();\n            setTimeout(function () { form.parentNode.removeChild(form); }, 0);\n        }\n    }\n})();\n\nko.exportSymbol('utils', ko.utils);\nko.exportSymbol('utils.arrayForEach', ko.utils.arrayForEach);\nko.exportSymbol('utils.arrayFirst', ko.utils.arrayFirst);\nko.exportSymbol('utils.arrayFilter', ko.utils.arrayFilter);\nko.exportSymbol('utils.arrayGetDistinctValues', ko.utils.arrayGetDistinctValues);\nko.exportSymbol('utils.arrayIndexOf', ko.utils.arrayIndexOf);\nko.exportSymbol('utils.arrayMap', ko.utils.arrayMap);\nko.exportSymbol('utils.arrayPushAll', ko.utils.arrayPushAll);\nko.exportSymbol('utils.arrayRemoveItem', ko.utils.arrayRemoveItem);\nko.exportSymbol('utils.extend', ko.utils.extend);\nko.exportSymbol('utils.fieldsIncludedWithJsonPost', ko.utils.fieldsIncludedWithJsonPost);\nko.exportSymbol('utils.getFormFields', ko.utils.getFormFields);\nko.exportSymbol('utils.peekObservable', ko.utils.peekObservable);\nko.exportSymbol('utils.postJson', ko.utils.postJson);\nko.exportSymbol('utils.parseJson', ko.utils.parseJson);\nko.exportSymbol('utils.registerEventHandler', ko.utils.registerEventHandler);\nko.exportSymbol('utils.stringifyJson', ko.utils.stringifyJson);\nko.exportSymbol('utils.range', ko.utils.range);\nko.exportSymbol('utils.toggleDomNodeCssClass', ko.utils.toggleDomNodeCssClass);\nko.exportSymbol('utils.triggerEvent', ko.utils.triggerEvent);\nko.exportSymbol('utils.unwrapObservable', ko.utils.unwrapObservable);\n\nif (!Function.prototype['bind']) {\n    // Function.prototype.bind is a standard part of ECMAScript 5th Edition (December 2009, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf)\n    // In case the browser doesn't implement it natively, provide a JavaScript implementation. This implementation is based on the one in prototype.js\n    Function.prototype['bind'] = function (object) {\n        var originalFunction = this, args = Array.prototype.slice.call(arguments), object = args.shift();\n        return function () {\n            return originalFunction.apply(object, args.concat(Array.prototype.slice.call(arguments)));\n        };\n    };\n}\n\nko.utils.domData = new (function () {\n    var uniqueId = 0;\n    var dataStoreKeyExpandoPropertyName = \"__ko__\" + (new Date).getTime();\n    var dataStore = {};\n    return {\n        get: function (node, key) {\n            var allDataForNode = ko.utils.domData.getAll(node, false);\n            return allDataForNode === undefined ? undefined : allDataForNode[key];\n        },\n        set: function (node, key, value) {\n            if (value === undefined) {\n                // Make sure we don't actually create a new domData key if we are actually deleting a value\n                if (ko.utils.domData.getAll(node, false) === undefined)\n                    return;\n            }\n            var allDataForNode = ko.utils.domData.getAll(node, true);\n            allDataForNode[key] = value;\n        },\n        getAll: function (node, createIfNotFound) {\n            var dataStoreKey = node[dataStoreKeyExpandoPropertyName];\n            var hasExistingDataStore = dataStoreKey && (dataStoreKey !== \"null\") && dataStore[dataStoreKey];\n            if (!hasExistingDataStore) {\n                if (!createIfNotFound)\n                    return undefined;\n                dataStoreKey = node[dataStoreKeyExpandoPropertyName] = \"ko\" + uniqueId++;\n                dataStore[dataStoreKey] = {};\n            }\n            return dataStore[dataStoreKey];\n        },\n        clear: function (node) {\n            var dataStoreKey = node[dataStoreKeyExpandoPropertyName];\n            if (dataStoreKey) {\n                delete dataStore[dataStoreKey];\n                node[dataStoreKeyExpandoPropertyName] = null;\n                return true; // Exposing \"did clean\" flag purely so specs can infer whether things have been cleaned up as intended\n            }\n            return false;\n        }\n    }\n})();\n\nko.exportSymbol('utils.domData', ko.utils.domData);\nko.exportSymbol('utils.domData.clear', ko.utils.domData.clear); // Exporting only so specs can clear up after themselves fully\n\nko.utils.domNodeDisposal = new (function () {\n    var domDataKey = \"__ko_domNodeDisposal__\" + (new Date).getTime();\n    var cleanableNodeTypes = { 1: true, 8: true, 9: true };       // Element, Comment, Document\n    var cleanableNodeTypesWithDescendants = { 1: true, 9: true }; // Element, Document\n\n    function getDisposeCallbacksCollection(node, createIfNotFound) {\n        var allDisposeCallbacks = ko.utils.domData.get(node, domDataKey);\n        if ((allDisposeCallbacks === undefined) && createIfNotFound) {\n            allDisposeCallbacks = [];\n            ko.utils.domData.set(node, domDataKey, allDisposeCallbacks);\n        }\n        return allDisposeCallbacks;\n    }\n    function destroyCallbacksCollection(node) {\n        ko.utils.domData.set(node, domDataKey, undefined);\n    }\n\n    function cleanSingleNode(node) {\n        // Run all the dispose callbacks\n        var callbacks = getDisposeCallbacksCollection(node, false);\n        if (callbacks) {\n            callbacks = callbacks.slice(0); // Clone, as the array may be modified during iteration (typically, callbacks will remove themselves)\n            for (var i = 0; i < callbacks.length; i++)\n                callbacks[i](node);\n        }\n\n        // Also erase the DOM data\n        ko.utils.domData.clear(node);\n\n        // Special support for jQuery here because it's so commonly used.\n        // Many jQuery plugins (including jquery.tmpl) store data using jQuery's equivalent of domData\n        // so notify it to tear down any resources associated with the node & descendants here.\n        if ((typeof jQuery == \"function\") && (typeof jQuery['cleanData'] == \"function\"))\n            jQuery['cleanData']([node]);\n\n        // Also clear any immediate-child comment nodes, as these wouldn't have been found by\n        // node.getElementsByTagName(\"*\") in cleanNode() (comment nodes aren't elements)\n        if (cleanableNodeTypesWithDescendants[node.nodeType])\n            cleanImmediateCommentTypeChildren(node);\n    }\n\n    function cleanImmediateCommentTypeChildren(nodeWithChildren) {\n        var child, nextChild = nodeWithChildren.firstChild;\n        while (child = nextChild) {\n            nextChild = child.nextSibling;\n            if (child.nodeType === 8)\n                cleanSingleNode(child);\n        }\n    }\n\n    return {\n        addDisposeCallback : function(node, callback) {\n            if (typeof callback != \"function\")\n                throw new Error(\"Callback must be a function\");\n            getDisposeCallbacksCollection(node, true).push(callback);\n        },\n\n        removeDisposeCallback : function(node, callback) {\n            var callbacksCollection = getDisposeCallbacksCollection(node, false);\n            if (callbacksCollection) {\n                ko.utils.arrayRemoveItem(callbacksCollection, callback);\n                if (callbacksCollection.length == 0)\n                    destroyCallbacksCollection(node);\n            }\n        },\n\n        cleanNode : function(node) {\n            // First clean this node, where applicable\n            if (cleanableNodeTypes[node.nodeType]) {\n                cleanSingleNode(node);\n\n                // ... then its descendants, where applicable\n                if (cleanableNodeTypesWithDescendants[node.nodeType]) {\n                    // Clone the descendants list in case it changes during iteration\n                    var descendants = [];\n                    ko.utils.arrayPushAll(descendants, node.getElementsByTagName(\"*\"));\n                    for (var i = 0, j = descendants.length; i < j; i++)\n                        cleanSingleNode(descendants[i]);\n                }\n            }\n            return node;\n        },\n\n        removeNode : function(node) {\n            ko.cleanNode(node);\n            if (node.parentNode)\n                node.parentNode.removeChild(node);\n        }\n    }\n})();\nko.cleanNode = ko.utils.domNodeDisposal.cleanNode; // Shorthand name for convenience\nko.removeNode = ko.utils.domNodeDisposal.removeNode; // Shorthand name for convenience\nko.exportSymbol('cleanNode', ko.cleanNode);\nko.exportSymbol('removeNode', ko.removeNode);\nko.exportSymbol('utils.domNodeDisposal', ko.utils.domNodeDisposal);\nko.exportSymbol('utils.domNodeDisposal.addDisposeCallback', ko.utils.domNodeDisposal.addDisposeCallback);\nko.exportSymbol('utils.domNodeDisposal.removeDisposeCallback', ko.utils.domNodeDisposal.removeDisposeCallback);\n(function () {\n    var leadingCommentRegex = /^(\\s*)<!--(.*?)-->/;\n\n    function simpleHtmlParse(html) {\n        // Based on jQuery's \"clean\" function, but only accounting for table-related elements.\n        // If you have referenced jQuery, this won't be used anyway - KO will use jQuery's \"clean\" function directly\n\n        // Note that there's still an issue in IE < 9 whereby it will discard comment nodes that are the first child of\n        // a descendant node. For example: \"<div><!-- mycomment -->abc</div>\" will get parsed as \"<div>abc</div>\"\n        // This won't affect anyone who has referenced jQuery, and there's always the workaround of inserting a dummy node\n        // (possibly a text node) in front of the comment. So, KO does not attempt to workaround this IE issue automatically at present.\n\n        // Trim whitespace, otherwise indexOf won't work as expected\n        var tags = ko.utils.stringTrim(html).toLowerCase(), div = document.createElement(\"div\");\n\n        // Finds the first match from the left column, and returns the corresponding \"wrap\" data from the right column\n        var wrap = tags.match(/^<(thead|tbody|tfoot)/)              && [1, \"<table>\", \"</table>\"] ||\n                   !tags.indexOf(\"<tr\")                             && [2, \"<table><tbody>\", \"</tbody></table>\"] ||\n                   (!tags.indexOf(\"<td\") || !tags.indexOf(\"<th\"))   && [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"] ||\n                   /* anything else */                                 [0, \"\", \"\"];\n\n        // Go to html and back, then peel off extra wrappers\n        // Note that we always prefix with some dummy text, because otherwise, IE<9 will strip out leading comment nodes in descendants. Total madness.\n        var markup = \"ignored<div>\" + wrap[1] + html + wrap[2] + \"</div>\";\n        if (typeof window['innerShiv'] == \"function\") {\n            div.appendChild(window['innerShiv'](markup));\n        } else {\n            div.innerHTML = markup;\n        }\n\n        // Move to the right depth\n        while (wrap[0]--)\n            div = div.lastChild;\n\n        return ko.utils.makeArray(div.lastChild.childNodes);\n    }\n\n    function jQueryHtmlParse(html) {\n        var elems = jQuery['clean']([html]);\n\n        // As of jQuery 1.7.1, jQuery parses the HTML by appending it to some dummy parent nodes held in an in-memory document fragment.\n        // Unfortunately, it never clears the dummy parent nodes from the document fragment, so it leaks memory over time.\n        // Fix this by finding the top-most dummy parent element, and detaching it from its owner fragment.\n        if (elems && elems[0]) {\n            // Find the top-most parent element that's a direct child of a document fragment\n            var elem = elems[0];\n            while (elem.parentNode && elem.parentNode.nodeType !== 11 /* i.e., DocumentFragment */)\n                elem = elem.parentNode;\n            // ... then detach it\n            if (elem.parentNode)\n                elem.parentNode.removeChild(elem);\n        }\n\n        return elems;\n    }\n\n    ko.utils.parseHtmlFragment = function(html) {\n        return typeof jQuery != 'undefined' ? jQueryHtmlParse(html)   // As below, benefit from jQuery's optimisations where possible\n                                            : simpleHtmlParse(html);  // ... otherwise, this simple logic will do in most common cases.\n    };\n\n    ko.utils.setHtml = function(node, html) {\n        ko.utils.emptyDomNode(node);\n\n        // There's no legitimate reason to display a stringified observable without unwrapping it, so we'll unwrap it\n        html = ko.utils.unwrapObservable(html);\n\n        if ((html !== null) && (html !== undefined)) {\n            if (typeof html != 'string')\n                html = html.toString();\n\n            // jQuery contains a lot of sophisticated code to parse arbitrary HTML fragments,\n            // for example <tr> elements which are not normally allowed to exist on their own.\n            // If you've referenced jQuery we'll use that rather than duplicating its code.\n            if (typeof jQuery != 'undefined') {\n                jQuery(node)['html'](html);\n            } else {\n                // ... otherwise, use KO's own parsing logic.\n                var parsedNodes = ko.utils.parseHtmlFragment(html);\n                for (var i = 0; i < parsedNodes.length; i++)\n                    node.appendChild(parsedNodes[i]);\n            }\n        }\n    };\n})();\n\nko.exportSymbol('utils.parseHtmlFragment', ko.utils.parseHtmlFragment);\nko.exportSymbol('utils.setHtml', ko.utils.setHtml);\n\nko.memoization = (function () {\n    var memos = {};\n\n    function randomMax8HexChars() {\n        return (((1 + Math.random()) * 0x100000000) | 0).toString(16).substring(1);\n    }\n    function generateRandomId() {\n        return randomMax8HexChars() + randomMax8HexChars();\n    }\n    function findMemoNodes(rootNode, appendToArray) {\n        if (!rootNode)\n            return;\n        if (rootNode.nodeType == 8) {\n            var memoId = ko.memoization.parseMemoText(rootNode.nodeValue);\n            if (memoId != null)\n                appendToArray.push({ domNode: rootNode, memoId: memoId });\n        } else if (rootNode.nodeType == 1) {\n            for (var i = 0, childNodes = rootNode.childNodes, j = childNodes.length; i < j; i++)\n                findMemoNodes(childNodes[i], appendToArray);\n        }\n    }\n\n    return {\n        memoize: function (callback) {\n            if (typeof callback != \"function\")\n                throw new Error(\"You can only pass a function to ko.memoization.memoize()\");\n            var memoId = generateRandomId();\n            memos[memoId] = callback;\n            return \"<!--[ko_memo:\" + memoId + \"]-->\";\n        },\n\n        unmemoize: function (memoId, callbackParams) {\n            var callback = memos[memoId];\n            if (callback === undefined)\n                throw new Error(\"Couldn't find any memo with ID \" + memoId + \". Perhaps it's already been unmemoized.\");\n            try {\n                callback.apply(null, callbackParams || []);\n                return true;\n            }\n            finally { delete memos[memoId]; }\n        },\n\n        unmemoizeDomNodeAndDescendants: function (domNode, extraCallbackParamsArray) {\n            var memos = [];\n            findMemoNodes(domNode, memos);\n            for (var i = 0, j = memos.length; i < j; i++) {\n                var node = memos[i].domNode;\n                var combinedParams = [node];\n                if (extraCallbackParamsArray)\n                    ko.utils.arrayPushAll(combinedParams, extraCallbackParamsArray);\n                ko.memoization.unmemoize(memos[i].memoId, combinedParams);\n                node.nodeValue = \"\"; // Neuter this node so we don't try to unmemoize it again\n                if (node.parentNode)\n                    node.parentNode.removeChild(node); // If possible, erase it totally (not always possible - someone else might just hold a reference to it then call unmemoizeDomNodeAndDescendants again)\n            }\n        },\n\n        parseMemoText: function (memoText) {\n            var match = memoText.match(/^\\[ko_memo\\:(.*?)\\]$/);\n            return match ? match[1] : null;\n        }\n    };\n})();\n\nko.exportSymbol('memoization', ko.memoization);\nko.exportSymbol('memoization.memoize', ko.memoization.memoize);\nko.exportSymbol('memoization.unmemoize', ko.memoization.unmemoize);\nko.exportSymbol('memoization.parseMemoText', ko.memoization.parseMemoText);\nko.exportSymbol('memoization.unmemoizeDomNodeAndDescendants', ko.memoization.unmemoizeDomNodeAndDescendants);\nko.extenders = {\n    'throttle': function(target, timeout) {\n        // Throttling means two things:\n\n        // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies\n        //     notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate\n        target['throttleEvaluation'] = timeout;\n\n        // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*\n        //     so the target cannot change value synchronously or faster than a certain rate\n        var writeTimeoutInstance = null;\n        return ko.dependentObservable({\n            'read': target,\n            'write': function(value) {\n                clearTimeout(writeTimeoutInstance);\n                writeTimeoutInstance = setTimeout(function() {\n                    target(value);\n                }, timeout);\n            }\n        });\n    },\n\n    'notify': function(target, notifyWhen) {\n        target[\"equalityComparer\"] = notifyWhen == \"always\"\n            ? function() { return false } // Treat all values as not equal\n            : ko.observable[\"fn\"][\"equalityComparer\"];\n        return target;\n    }\n};\n\nfunction applyExtenders(requestedExtenders) {\n    var target = this;\n    if (requestedExtenders) {\n        for (var key in requestedExtenders) {\n            var extenderHandler = ko.extenders[key];\n            if (typeof extenderHandler == 'function') {\n                target = extenderHandler(target, requestedExtenders[key]);\n            }\n        }\n    }\n    return target;\n}\n\nko.exportSymbol('extenders', ko.extenders);\n\nko.subscription = function (target, callback, disposeCallback) {\n    this.target = target;\n    this.callback = callback;\n    this.disposeCallback = disposeCallback;\n    ko.exportProperty(this, 'dispose', this.dispose);\n};\nko.subscription.prototype.dispose = function () {\n    this.isDisposed = true;\n    this.disposeCallback();\n};\n\nko.subscribable = function () {\n    this._subscriptions = {};\n\n    ko.utils.extend(this, ko.subscribable['fn']);\n    ko.exportProperty(this, 'subscribe', this.subscribe);\n    ko.exportProperty(this, 'extend', this.extend);\n    ko.exportProperty(this, 'getSubscriptionsCount', this.getSubscriptionsCount);\n}\n\nvar defaultEvent = \"change\";\n\nko.subscribable['fn'] = {\n    subscribe: function (callback, callbackTarget, event) {\n        event = event || defaultEvent;\n        var boundCallback = callbackTarget ? callback.bind(callbackTarget) : callback;\n\n        var subscription = new ko.subscription(this, boundCallback, function () {\n            ko.utils.arrayRemoveItem(this._subscriptions[event], subscription);\n        }.bind(this));\n\n        if (!this._subscriptions[event])\n            this._subscriptions[event] = [];\n        this._subscriptions[event].push(subscription);\n        return subscription;\n    },\n\n    \"notifySubscribers\": function (valueToNotify, event) {\n        event = event || defaultEvent;\n        if (this._subscriptions[event]) {\n            ko.dependencyDetection.ignore(function() {\n                ko.utils.arrayForEach(this._subscriptions[event].slice(0), function (subscription) {\n                    // In case a subscription was disposed during the arrayForEach cycle, check\n                    // for isDisposed on each subscription before invoking its callback\n                    if (subscription && (subscription.isDisposed !== true))\n                        subscription.callback(valueToNotify);\n                });\n            }, this);\n        }\n    },\n\n    getSubscriptionsCount: function () {\n        var total = 0;\n        for (var eventName in this._subscriptions) {\n            if (this._subscriptions.hasOwnProperty(eventName))\n                total += this._subscriptions[eventName].length;\n        }\n        return total;\n    },\n\n    extend: applyExtenders\n};\n\n\nko.isSubscribable = function (instance) {\n    return typeof instance.subscribe == \"function\" && typeof instance[\"notifySubscribers\"] == \"function\";\n};\n\nko.exportSymbol('subscribable', ko.subscribable);\nko.exportSymbol('isSubscribable', ko.isSubscribable);\n\nko.dependencyDetection = (function () {\n    var _frames = [];\n\n    return {\n        begin: function (callback) {\n            _frames.push({ callback: callback, distinctDependencies:[] });\n        },\n\n        end: function () {\n            _frames.pop();\n        },\n\n        registerDependency: function (subscribable) {\n            if (!ko.isSubscribable(subscribable))\n                throw new Error(\"Only subscribable things can act as dependencies\");\n            if (_frames.length > 0) {\n                var topFrame = _frames[_frames.length - 1];\n                if (!topFrame || ko.utils.arrayIndexOf(topFrame.distinctDependencies, subscribable) >= 0)\n                    return;\n                topFrame.distinctDependencies.push(subscribable);\n                topFrame.callback(subscribable);\n            }\n        },\n\n        ignore: function(callback, callbackTarget, callbackArgs) {\n            try {\n                _frames.push(null);\n                return callback.apply(callbackTarget, callbackArgs || []);\n            } finally {\n                _frames.pop();\n            }\n        }\n    };\n})();\nvar primitiveTypes = { 'undefined':true, 'boolean':true, 'number':true, 'string':true };\n\nko.observable = function (initialValue) {\n    var _latestValue = initialValue;\n\n    function observable() {\n        if (arguments.length > 0) {\n            // Write\n\n            // Ignore writes if the value hasn't changed\n            if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue, arguments[0])) {\n                observable.valueWillMutate();\n                _latestValue = arguments[0];\n                if (DEBUG) observable._latestValue = _latestValue;\n                observable.valueHasMutated();\n            }\n            return this; // Permits chained assignments\n        }\n        else {\n            // Read\n            ko.dependencyDetection.registerDependency(observable); // The caller only needs to be notified of changes if they did a \"read\" operation\n            return _latestValue;\n        }\n    }\n    if (DEBUG) observable._latestValue = _latestValue;\n    ko.subscribable.call(observable);\n    observable.peek = function() { return _latestValue };\n    observable.valueHasMutated = function () { observable[\"notifySubscribers\"](_latestValue); }\n    observable.valueWillMutate = function () { observable[\"notifySubscribers\"](_latestValue, \"beforeChange\"); }\n    ko.utils.extend(observable, ko.observable['fn']);\n\n    ko.exportProperty(observable, 'peek', observable.peek);\n    ko.exportProperty(observable, \"valueHasMutated\", observable.valueHasMutated);\n    ko.exportProperty(observable, \"valueWillMutate\", observable.valueWillMutate);\n\n    return observable;\n}\n\nko.observable['fn'] = {\n    \"equalityComparer\": function valuesArePrimitiveAndEqual(a, b) {\n        var oldValueIsPrimitive = (a === null) || (typeof(a) in primitiveTypes);\n        return oldValueIsPrimitive ? (a === b) : false;\n    }\n};\n\nvar protoProperty = ko.observable.protoProperty = \"__ko_proto__\";\nko.observable['fn'][protoProperty] = ko.observable;\n\nko.hasPrototype = function(instance, prototype) {\n    if ((instance === null) || (instance === undefined) || (instance[protoProperty] === undefined)) return false;\n    if (instance[protoProperty] === prototype) return true;\n    return ko.hasPrototype(instance[protoProperty], prototype); // Walk the prototype chain\n};\n\nko.isObservable = function (instance) {\n    return ko.hasPrototype(instance, ko.observable);\n}\nko.isWriteableObservable = function (instance) {\n    // Observable\n    if ((typeof instance == \"function\") && instance[protoProperty] === ko.observable)\n        return true;\n    // Writeable dependent observable\n    if ((typeof instance == \"function\") && (instance[protoProperty] === ko.dependentObservable) && (instance.hasWriteFunction))\n        return true;\n    // Anything else\n    return false;\n}\n\n\nko.exportSymbol('observable', ko.observable);\nko.exportSymbol('isObservable', ko.isObservable);\nko.exportSymbol('isWriteableObservable', ko.isWriteableObservable);\nko.observableArray = function (initialValues) {\n    if (arguments.length == 0) {\n        // Zero-parameter constructor initializes to empty array\n        initialValues = [];\n    }\n    if ((initialValues !== null) && (initialValues !== undefined) && !('length' in initialValues))\n        throw new Error(\"The argument passed when initializing an observable array must be an array, or null, or undefined.\");\n\n    var result = ko.observable(initialValues);\n    ko.utils.extend(result, ko.observableArray['fn']);\n    return result;\n}\n\nko.observableArray['fn'] = {\n    'remove': function (valueOrPredicate) {\n        var underlyingArray = this.peek();\n        var removedValues = [];\n        var predicate = typeof valueOrPredicate == \"function\" ? valueOrPredicate : function (value) { return value === valueOrPredicate; };\n        for (var i = 0; i < underlyingArray.length; i++) {\n            var value = underlyingArray[i];\n            if (predicate(value)) {\n                if (removedValues.length === 0) {\n                    this.valueWillMutate();\n                }\n                removedValues.push(value);\n                underlyingArray.splice(i, 1);\n                i--;\n            }\n        }\n        if (removedValues.length) {\n            this.valueHasMutated();\n        }\n        return removedValues;\n    },\n\n    'removeAll': function (arrayOfValues) {\n        // If you passed zero args, we remove everything\n        if (arrayOfValues === undefined) {\n            var underlyingArray = this.peek();\n            var allValues = underlyingArray.slice(0);\n            this.valueWillMutate();\n            underlyingArray.splice(0, underlyingArray.length);\n            this.valueHasMutated();\n            return allValues;\n        }\n        // If you passed an arg, we interpret it as an array of entries to remove\n        if (!arrayOfValues)\n            return [];\n        return this['remove'](function (value) {\n            return ko.utils.arrayIndexOf(arrayOfValues, value) >= 0;\n        });\n    },\n\n    'destroy': function (valueOrPredicate) {\n        var underlyingArray = this.peek();\n        var predicate = typeof valueOrPredicate == \"function\" ? valueOrPredicate : function (value) { return value === valueOrPredicate; };\n        this.valueWillMutate();\n        for (var i = underlyingArray.length - 1; i >= 0; i--) {\n            var value = underlyingArray[i];\n            if (predicate(value))\n                underlyingArray[i][\"_destroy\"] = true;\n        }\n        this.valueHasMutated();\n    },\n\n    'destroyAll': function (arrayOfValues) {\n        // If you passed zero args, we destroy everything\n        if (arrayOfValues === undefined)\n            return this['destroy'](function() { return true });\n\n        // If you passed an arg, we interpret it as an array of entries to destroy\n        if (!arrayOfValues)\n            return [];\n        return this['destroy'](function (value) {\n            return ko.utils.arrayIndexOf(arrayOfValues, value) >= 0;\n        });\n    },\n\n    'indexOf': function (item) {\n        var underlyingArray = this();\n        return ko.utils.arrayIndexOf(underlyingArray, item);\n    },\n\n    'replace': function(oldItem, newItem) {\n        var index = this['indexOf'](oldItem);\n        if (index >= 0) {\n            this.valueWillMutate();\n            this.peek()[index] = newItem;\n            this.valueHasMutated();\n        }\n    }\n}\n\n// Populate ko.observableArray.fn with read/write functions from native arrays\n// Important: Do not add any additional functions here that may reasonably be used to *read* data from the array\n// because we'll eval them without causing subscriptions, so ko.computed output could end up getting stale\nko.utils.arrayForEach([\"pop\", \"push\", \"reverse\", \"shift\", \"sort\", \"splice\", \"unshift\"], function (methodName) {\n    ko.observableArray['fn'][methodName] = function () {\n        // Use \"peek\" to avoid creating a subscription in any computed that we're executing in the context of\n        // (for consistency with mutating regular observables)\n        var underlyingArray = this.peek();\n        this.valueWillMutate();\n        var methodCallResult = underlyingArray[methodName].apply(underlyingArray, arguments);\n        this.valueHasMutated();\n        return methodCallResult;\n    };\n});\n\n// Populate ko.observableArray.fn with read-only functions from native arrays\nko.utils.arrayForEach([\"slice\"], function (methodName) {\n    ko.observableArray['fn'][methodName] = function () {\n        var underlyingArray = this();\n        return underlyingArray[methodName].apply(underlyingArray, arguments);\n    };\n});\n\nko.exportSymbol('observableArray', ko.observableArray);\nko.dependentObservable = function (evaluatorFunctionOrOptions, evaluatorFunctionTarget, options) {\n    var _latestValue,\n        _hasBeenEvaluated = false,\n        _isBeingEvaluated = false,\n        readFunction = evaluatorFunctionOrOptions;\n\n    if (readFunction && typeof readFunction == \"object\") {\n        // Single-parameter syntax - everything is on this \"options\" param\n        options = readFunction;\n        readFunction = options[\"read\"];\n    } else {\n        // Multi-parameter syntax - construct the options according to the params passed\n        options = options || {};\n        if (!readFunction)\n            readFunction = options[\"read\"];\n    }\n    if (typeof readFunction != \"function\")\n        throw new Error(\"Pass a function that returns the value of the ko.computed\");\n\n    function addSubscriptionToDependency(subscribable) {\n        _subscriptionsToDependencies.push(subscribable.subscribe(evaluatePossiblyAsync));\n    }\n\n    function disposeAllSubscriptionsToDependencies() {\n        ko.utils.arrayForEach(_subscriptionsToDependencies, function (subscription) {\n            subscription.dispose();\n        });\n        _subscriptionsToDependencies = [];\n    }\n\n    function evaluatePossiblyAsync() {\n        var throttleEvaluationTimeout = dependentObservable['throttleEvaluation'];\n        if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n            clearTimeout(evaluationTimeoutInstance);\n            evaluationTimeoutInstance = setTimeout(evaluateImmediate, throttleEvaluationTimeout);\n        } else\n            evaluateImmediate();\n    }\n\n    function evaluateImmediate() {\n        if (_isBeingEvaluated) {\n            // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.\n            // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost\n            // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing\n            // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387\n            return;\n        }\n\n        // Don't dispose on first evaluation, because the \"disposeWhen\" callback might\n        // e.g., dispose when the associated DOM element isn't in the doc, and it's not\n        // going to be in the doc until *after* the first evaluation\n        if (_hasBeenEvaluated && disposeWhen()) {\n            dispose();\n            return;\n        }\n\n        _isBeingEvaluated = true;\n        try {\n            // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).\n            // Then, during evaluation, we cross off any that are in fact still being used.\n            var disposalCandidates = ko.utils.arrayMap(_subscriptionsToDependencies, function(item) {return item.target;});\n\n            ko.dependencyDetection.begin(function(subscribable) {\n                var inOld;\n                if ((inOld = ko.utils.arrayIndexOf(disposalCandidates, subscribable)) >= 0)\n                    disposalCandidates[inOld] = undefined; // Don't want to dispose this subscription, as it's still being used\n                else\n                    addSubscriptionToDependency(subscribable); // Brand new subscription - add it\n            });\n\n            var newValue = readFunction.call(evaluatorFunctionTarget);\n\n            // For each subscription no longer being used, remove it from the active subscriptions list and dispose it\n            for (var i = disposalCandidates.length - 1; i >= 0; i--) {\n                if (disposalCandidates[i])\n                    _subscriptionsToDependencies.splice(i, 1)[0].dispose();\n            }\n            _hasBeenEvaluated = true;\n\n            dependentObservable[\"notifySubscribers\"](_latestValue, \"beforeChange\");\n            _latestValue = newValue;\n            if (DEBUG) dependentObservable._latestValue = _latestValue;\n        } finally {\n            ko.dependencyDetection.end();\n        }\n\n        dependentObservable[\"notifySubscribers\"](_latestValue);\n        _isBeingEvaluated = false;\n        if (!_subscriptionsToDependencies.length)\n            dispose();\n    }\n\n    function dependentObservable() {\n        if (arguments.length > 0) {\n            if (typeof writeFunction === \"function\") {\n                // Writing a value\n                writeFunction.apply(evaluatorFunctionTarget, arguments);\n            } else {\n                throw new Error(\"Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\");\n            }\n            return this; // Permits chained assignments\n        } else {\n            // Reading the value\n            if (!_hasBeenEvaluated)\n                evaluateImmediate();\n            ko.dependencyDetection.registerDependency(dependentObservable);\n            return _latestValue;\n        }\n    }\n\n    function peek() {\n        if (!_hasBeenEvaluated)\n            evaluateImmediate();\n        return _latestValue;\n    }\n\n    function isActive() {\n        return !_hasBeenEvaluated || _subscriptionsToDependencies.length > 0;\n    }\n\n    // By here, \"options\" is always non-null\n    var writeFunction = options[\"write\"],\n        disposeWhenNodeIsRemoved = options[\"disposeWhenNodeIsRemoved\"] || options.disposeWhenNodeIsRemoved || null,\n        disposeWhen = options[\"disposeWhen\"] || options.disposeWhen || function() { return false; },\n        dispose = disposeAllSubscriptionsToDependencies,\n        _subscriptionsToDependencies = [],\n        evaluationTimeoutInstance = null;\n\n    if (!evaluatorFunctionTarget)\n        evaluatorFunctionTarget = options[\"owner\"];\n\n    dependentObservable.peek = peek;\n    dependentObservable.getDependenciesCount = function () { return _subscriptionsToDependencies.length; };\n    dependentObservable.hasWriteFunction = typeof options[\"write\"] === \"function\";\n    dependentObservable.dispose = function () { dispose(); };\n    dependentObservable.isActive = isActive;\n\n    ko.subscribable.call(dependentObservable);\n    ko.utils.extend(dependentObservable, ko.dependentObservable['fn']);\n\n    ko.exportProperty(dependentObservable, 'peek', dependentObservable.peek);\n    ko.exportProperty(dependentObservable, 'dispose', dependentObservable.dispose);\n    ko.exportProperty(dependentObservable, 'isActive', dependentObservable.isActive);\n    ko.exportProperty(dependentObservable, 'getDependenciesCount', dependentObservable.getDependenciesCount);\n\n    // Evaluate, unless deferEvaluation is true\n    if (options['deferEvaluation'] !== true)\n        evaluateImmediate();\n\n    // Build \"disposeWhenNodeIsRemoved\" and \"disposeWhenNodeIsRemovedCallback\" option values.\n    // But skip if isActive is false (there will never be any dependencies to dispose).\n    // (Note: \"disposeWhenNodeIsRemoved\" option both proactively disposes as soon as the node is removed using ko.removeNode(),\n    // plus adds a \"disposeWhen\" callback that, on each evaluation, disposes if the node was removed by some other means.)\n    if (disposeWhenNodeIsRemoved && isActive()) {\n        dispose = function() {\n            ko.utils.domNodeDisposal.removeDisposeCallback(disposeWhenNodeIsRemoved, arguments.callee);\n            disposeAllSubscriptionsToDependencies();\n        };\n        ko.utils.domNodeDisposal.addDisposeCallback(disposeWhenNodeIsRemoved, dispose);\n        var existingDisposeWhenFunction = disposeWhen;\n        disposeWhen = function () {\n            return !ko.utils.domNodeIsAttachedToDocument(disposeWhenNodeIsRemoved) || existingDisposeWhenFunction();\n        }\n    }\n\n    return dependentObservable;\n};\n\nko.isComputed = function(instance) {\n    return ko.hasPrototype(instance, ko.dependentObservable);\n};\n\nvar protoProp = ko.observable.protoProperty; // == \"__ko_proto__\"\nko.dependentObservable[protoProp] = ko.observable;\n\nko.dependentObservable['fn'] = {};\nko.dependentObservable['fn'][protoProp] = ko.dependentObservable;\n\nko.exportSymbol('dependentObservable', ko.dependentObservable);\nko.exportSymbol('computed', ko.dependentObservable); // Make \"ko.computed\" an alias for \"ko.dependentObservable\"\nko.exportSymbol('isComputed', ko.isComputed);\n\n(function() {\n    var maxNestedObservableDepth = 10; // Escape the (unlikely) pathalogical case where an observable's current value is itself (or similar reference cycle)\n\n    ko.toJS = function(rootObject) {\n        if (arguments.length == 0)\n            throw new Error(\"When calling ko.toJS, pass the object you want to convert.\");\n\n        // We just unwrap everything at every level in the object graph\n        return mapJsObjectGraph(rootObject, function(valueToMap) {\n            // Loop because an observable's value might in turn be another observable wrapper\n            for (var i = 0; ko.isObservable(valueToMap) && (i < maxNestedObservableDepth); i++)\n                valueToMap = valueToMap();\n            return valueToMap;\n        });\n    };\n\n    ko.toJSON = function(rootObject, replacer, space) {     // replacer and space are optional\n        var plainJavaScriptObject = ko.toJS(rootObject);\n        return ko.utils.stringifyJson(plainJavaScriptObject, replacer, space);\n    };\n\n    function mapJsObjectGraph(rootObject, mapInputCallback, visitedObjects) {\n        visitedObjects = visitedObjects || new objectLookup();\n\n        rootObject = mapInputCallback(rootObject);\n        var canHaveProperties = (typeof rootObject == \"object\") && (rootObject !== null) && (rootObject !== undefined) && (!(rootObject instanceof Date));\n        if (!canHaveProperties)\n            return rootObject;\n\n        var outputProperties = rootObject instanceof Array ? [] : {};\n        visitedObjects.save(rootObject, outputProperties);\n\n        visitPropertiesOrArrayEntries(rootObject, function(indexer) {\n            var propertyValue = mapInputCallback(rootObject[indexer]);\n\n            switch (typeof propertyValue) {\n                case \"boolean\":\n                case \"number\":\n                case \"string\":\n                case \"function\":\n                    outputProperties[indexer] = propertyValue;\n                    break;\n                case \"object\":\n                case \"undefined\":\n                    var previouslyMappedValue = visitedObjects.get(propertyValue);\n                    outputProperties[indexer] = (previouslyMappedValue !== undefined)\n                        ? previouslyMappedValue\n                        : mapJsObjectGraph(propertyValue, mapInputCallback, visitedObjects);\n                    break;\n            }\n        });\n\n        return outputProperties;\n    }\n\n    function visitPropertiesOrArrayEntries(rootObject, visitorCallback) {\n        if (rootObject instanceof Array) {\n            for (var i = 0; i < rootObject.length; i++)\n                visitorCallback(i);\n\n            // For arrays, also respect toJSON property for custom mappings (fixes #278)\n            if (typeof rootObject['toJSON'] == 'function')\n                visitorCallback('toJSON');\n        } else {\n            for (var propertyName in rootObject)\n                visitorCallback(propertyName);\n        }\n    };\n\n    function objectLookup() {\n        var keys = [];\n        var values = [];\n        this.save = function(key, value) {\n            var existingIndex = ko.utils.arrayIndexOf(keys, key);\n            if (existingIndex >= 0)\n                values[existingIndex] = value;\n            else {\n                keys.push(key);\n                values.push(value);\n            }\n        };\n        this.get = function(key) {\n            var existingIndex = ko.utils.arrayIndexOf(keys, key);\n            return (existingIndex >= 0) ? values[existingIndex] : undefined;\n        };\n    };\n})();\n\nko.exportSymbol('toJS', ko.toJS);\nko.exportSymbol('toJSON', ko.toJSON);\n(function () {\n    var hasDomDataExpandoProperty = '__ko__hasDomDataOptionValue__';\n\n    // Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values\n    // are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values\n    // that are arbitrary objects. This is very convenient when implementing things like cascading dropdowns.\n    ko.selectExtensions = {\n        readValue : function(element) {\n            switch (ko.utils.tagNameLower(element)) {\n                case 'option':\n                    if (element[hasDomDataExpandoProperty] === true)\n                        return ko.utils.domData.get(element, ko.bindingHandlers.options.optionValueDomDataKey);\n                    return ko.utils.ieVersion <= 7\n                        ? (element.getAttributeNode('value').specified ? element.value : element.text)\n                        : element.value;\n                case 'select':\n                    return element.selectedIndex >= 0 ? ko.selectExtensions.readValue(element.options[element.selectedIndex]) : undefined;\n                default:\n                    return element.value;\n            }\n        },\n\n        writeValue: function(element, value) {\n            switch (ko.utils.tagNameLower(element)) {\n                case 'option':\n                    switch(typeof value) {\n                        case \"string\":\n                            ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, undefined);\n                            if (hasDomDataExpandoProperty in element) { // IE <= 8 throws errors if you delete non-existent properties from a DOM node\n                                delete element[hasDomDataExpandoProperty];\n                            }\n                            element.value = value;\n                            break;\n                        default:\n                            // Store arbitrary object using DomData\n                            ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, value);\n                            element[hasDomDataExpandoProperty] = true;\n\n                            // Special treatment of numbers is just for backward compatibility. KO 1.2.1 wrote numerical values to element.value.\n                            element.value = typeof value === \"number\" ? value : \"\";\n                            break;\n                    }\n                    break;\n                case 'select':\n                    for (var i = element.options.length - 1; i >= 0; i--) {\n                        if (ko.selectExtensions.readValue(element.options[i]) == value) {\n                            element.selectedIndex = i;\n                            break;\n                        }\n                    }\n                    break;\n                default:\n                    if ((value === null) || (value === undefined))\n                        value = \"\";\n                    element.value = value;\n                    break;\n            }\n        }\n    };\n})();\n\nko.exportSymbol('selectExtensions', ko.selectExtensions);\nko.exportSymbol('selectExtensions.readValue', ko.selectExtensions.readValue);\nko.exportSymbol('selectExtensions.writeValue', ko.selectExtensions.writeValue);\nko.expressionRewriting = (function () {\n    var restoreCapturedTokensRegex = /\\@ko_token_(\\d+)\\@/g;\n    var javaScriptReservedWords = [\"true\", \"false\"];\n\n    // Matches something that can be assigned to--either an isolated identifier or something ending with a property accessor\n    // This is designed to be simple and avoid false negatives, but could produce false positives (e.g., a+b.c).\n    var javaScriptAssignmentTarget = /^(?:[$_a-z][$\\w]*|(.+)(\\.\\s*[$_a-z][$\\w]*|\\[.+\\]))$/i;\n\n    function restoreTokens(string, tokens) {\n        var prevValue = null;\n        while (string != prevValue) { // Keep restoring tokens until it no longer makes a difference (they may be nested)\n            prevValue = string;\n            string = string.replace(restoreCapturedTokensRegex, function (match, tokenIndex) {\n                return tokens[tokenIndex];\n            });\n        }\n        return string;\n    }\n\n    function getWriteableValue(expression) {\n        if (ko.utils.arrayIndexOf(javaScriptReservedWords, ko.utils.stringTrim(expression).toLowerCase()) >= 0)\n            return false;\n        var match = expression.match(javaScriptAssignmentTarget);\n        return match === null ? false : match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression;\n    }\n\n    function ensureQuoted(key) {\n        var trimmedKey = ko.utils.stringTrim(key);\n        switch (trimmedKey.length && trimmedKey.charAt(0)) {\n            case \"'\":\n            case '\"':\n                return key;\n            default:\n                return \"'\" + trimmedKey + \"'\";\n        }\n    }\n\n    return {\n        bindingRewriteValidators: [],\n\n        parseObjectLiteral: function(objectLiteralString) {\n            // A full tokeniser+lexer would add too much weight to this library, so here's a simple parser\n            // that is sufficient just to split an object literal string into a set of top-level key-value pairs\n\n            var str = ko.utils.stringTrim(objectLiteralString);\n            if (str.length < 3)\n                return [];\n            if (str.charAt(0) === \"{\")// Ignore any braces surrounding the whole object literal\n                str = str.substring(1, str.length - 1);\n\n            // Pull out any string literals and regex literals\n            var tokens = [];\n            var tokenStart = null, tokenEndChar;\n            for (var position = 0; position < str.length; position++) {\n                var c = str.charAt(position);\n                if (tokenStart === null) {\n                    switch (c) {\n                        case '\"':\n                        case \"'\":\n                        case \"/\":\n                            tokenStart = position;\n                            tokenEndChar = c;\n                            break;\n                    }\n                } else if ((c == tokenEndChar) && (str.charAt(position - 1) !== \"\\\\\")) {\n                    var token = str.substring(tokenStart, position + 1);\n                    tokens.push(token);\n                    var replacement = \"@ko_token_\" + (tokens.length - 1) + \"@\";\n                    str = str.substring(0, tokenStart) + replacement + str.substring(position + 1);\n                    position -= (token.length - replacement.length);\n                    tokenStart = null;\n                }\n            }\n\n            // Next pull out balanced paren, brace, and bracket blocks\n            tokenStart = null;\n            tokenEndChar = null;\n            var tokenDepth = 0, tokenStartChar = null;\n            for (var position = 0; position < str.length; position++) {\n                var c = str.charAt(position);\n                if (tokenStart === null) {\n                    switch (c) {\n                        case \"{\": tokenStart = position; tokenStartChar = c;\n                                  tokenEndChar = \"}\";\n                                  break;\n                        case \"(\": tokenStart = position; tokenStartChar = c;\n                                  tokenEndChar = \")\";\n                                  break;\n                        case \"[\": tokenStart = position; tokenStartChar = c;\n                                  tokenEndChar = \"]\";\n                                  break;\n                    }\n                }\n\n                if (c === tokenStartChar)\n                    tokenDepth++;\n                else if (c === tokenEndChar) {\n                    tokenDepth--;\n                    if (tokenDepth === 0) {\n                        var token = str.substring(tokenStart, position + 1);\n                        tokens.push(token);\n                        var replacement = \"@ko_token_\" + (tokens.length - 1) + \"@\";\n                        str = str.substring(0, tokenStart) + replacement + str.substring(position + 1);\n                        position -= (token.length - replacement.length);\n                        tokenStart = null;\n                    }\n                }\n            }\n\n            // Now we can safely split on commas to get the key/value pairs\n            var result = [];\n            var keyValuePairs = str.split(\",\");\n            for (var i = 0, j = keyValuePairs.length; i < j; i++) {\n                var pair = keyValuePairs[i];\n                var colonPos = pair.indexOf(\":\");\n                if ((colonPos > 0) && (colonPos < pair.length - 1)) {\n                    var key = pair.substring(0, colonPos);\n                    var value = pair.substring(colonPos + 1);\n                    result.push({ 'key': restoreTokens(key, tokens), 'value': restoreTokens(value, tokens) });\n                } else {\n                    result.push({ 'unknown': restoreTokens(pair, tokens) });\n                }\n            }\n            return result;\n        },\n\n        preProcessBindings: function (objectLiteralStringOrKeyValueArray) {\n            var keyValueArray = typeof objectLiteralStringOrKeyValueArray === \"string\"\n                ? ko.expressionRewriting.parseObjectLiteral(objectLiteralStringOrKeyValueArray)\n                : objectLiteralStringOrKeyValueArray;\n            var resultStrings = [], propertyAccessorResultStrings = [];\n\n            var keyValueEntry;\n            for (var i = 0; keyValueEntry = keyValueArray[i]; i++) {\n                if (resultStrings.length > 0)\n                    resultStrings.push(\",\");\n\n                if (keyValueEntry['key']) {\n                    var quotedKey = ensureQuoted(keyValueEntry['key']), val = keyValueEntry['value'];\n                    resultStrings.push(quotedKey);\n                    resultStrings.push(\":\");\n                    resultStrings.push(val);\n\n                    if (val = getWriteableValue(ko.utils.stringTrim(val))) {\n                        if (propertyAccessorResultStrings.length > 0)\n                            propertyAccessorResultStrings.push(\", \");\n                        propertyAccessorResultStrings.push(quotedKey + \" : function(__ko_value) { \" + val + \" = __ko_value; }\");\n                    }\n                } else if (keyValueEntry['unknown']) {\n                    resultStrings.push(keyValueEntry['unknown']);\n                }\n            }\n\n            var combinedResult = resultStrings.join(\"\");\n            if (propertyAccessorResultStrings.length > 0) {\n                var allPropertyAccessors = propertyAccessorResultStrings.join(\"\");\n                combinedResult = combinedResult + \", '_ko_property_writers' : { \" + allPropertyAccessors + \" } \";\n            }\n\n            return combinedResult;\n        },\n\n        keyValueArrayContainsKey: function(keyValueArray, key) {\n            for (var i = 0; i < keyValueArray.length; i++)\n                if (ko.utils.stringTrim(keyValueArray[i]['key']) == key)\n                    return true;\n            return false;\n        },\n\n        // Internal, private KO utility for updating model properties from within bindings\n        // property:            If the property being updated is (or might be) an observable, pass it here\n        //                      If it turns out to be a writable observable, it will be written to directly\n        // allBindingsAccessor: All bindings in the current execution context.\n        //                      This will be searched for a '_ko_property_writers' property in case you're writing to a non-observable\n        // key:                 The key identifying the property to be written. Example: for { hasFocus: myValue }, write to 'myValue' by specifying the key 'hasFocus'\n        // value:               The value to be written\n        // checkIfDifferent:    If true, and if the property being written is a writable observable, the value will only be written if\n        //                      it is !== existing value on that writable observable\n        writeValueToProperty: function(property, allBindingsAccessor, key, value, checkIfDifferent) {\n            if (!property || !ko.isWriteableObservable(property)) {\n                var propWriters = allBindingsAccessor()['_ko_property_writers'];\n                if (propWriters && propWriters[key])\n                    propWriters[key](value);\n            } else if (!checkIfDifferent || property.peek() !== value) {\n                property(value);\n            }\n        }\n    };\n})();\n\nko.exportSymbol('expressionRewriting', ko.expressionRewriting);\nko.exportSymbol('expressionRewriting.bindingRewriteValidators', ko.expressionRewriting.bindingRewriteValidators);\nko.exportSymbol('expressionRewriting.parseObjectLiteral', ko.expressionRewriting.parseObjectLiteral);\nko.exportSymbol('expressionRewriting.preProcessBindings', ko.expressionRewriting.preProcessBindings);\n\n// For backward compatibility, define the following aliases. (Previously, these function names were misleading because\n// they referred to JSON specifically, even though they actually work with arbitrary JavaScript object literal expressions.)\nko.exportSymbol('jsonExpressionRewriting', ko.expressionRewriting);\nko.exportSymbol('jsonExpressionRewriting.insertPropertyAccessorsIntoJson', ko.expressionRewriting.preProcessBindings);(function() {\n    // \"Virtual elements\" is an abstraction on top of the usual DOM API which understands the notion that comment nodes\n    // may be used to represent hierarchy (in addition to the DOM's natural hierarchy).\n    // If you call the DOM-manipulating functions on ko.virtualElements, you will be able to read and write the state\n    // of that virtual hierarchy\n    //\n    // The point of all this is to support containerless templates (e.g., <!-- ko foreach:someCollection -->blah<!-- /ko -->)\n    // without having to scatter special cases all over the binding and templating code.\n\n    // IE 9 cannot reliably read the \"nodeValue\" property of a comment node (see https://github.com/SteveSanderson/knockout/issues/186)\n    // but it does give them a nonstandard alternative property called \"text\" that it can read reliably. Other browsers don't have that property.\n    // So, use node.text where available, and node.nodeValue elsewhere\n    var commentNodesHaveTextProperty = document.createComment(\"test\").text === \"<!--test-->\";\n\n    var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\\s*ko(?:\\s+(.+\\s*\\:[\\s\\S]*))?\\s*-->$/ : /^\\s*ko(?:\\s+(.+\\s*\\:[\\s\\S]*))?\\s*$/;\n    var endCommentRegex =   commentNodesHaveTextProperty ? /^<!--\\s*\\/ko\\s*-->$/ : /^\\s*\\/ko\\s*$/;\n    var htmlTagsWithOptionallyClosingChildren = { 'ul': true, 'ol': true };\n\n    function isStartComment(node) {\n        return (node.nodeType == 8) && (commentNodesHaveTextProperty ? node.text : node.nodeValue).match(startCommentRegex);\n    }\n\n    function isEndComment(node) {\n        return (node.nodeType == 8) && (commentNodesHaveTextProperty ? node.text : node.nodeValue).match(endCommentRegex);\n    }\n\n    function getVirtualChildren(startComment, allowUnbalanced) {\n        var currentNode = startComment;\n        var depth = 1;\n        var children = [];\n        while (currentNode = currentNode.nextSibling) {\n            if (isEndComment(currentNode)) {\n                depth--;\n                if (depth === 0)\n                    return children;\n            }\n\n            children.push(currentNode);\n\n            if (isStartComment(currentNode))\n                depth++;\n        }\n        if (!allowUnbalanced)\n            throw new Error(\"Cannot find closing comment tag to match: \" + startComment.nodeValue);\n        return null;\n    }\n\n    function getMatchingEndComment(startComment, allowUnbalanced) {\n        var allVirtualChildren = getVirtualChildren(startComment, allowUnbalanced);\n        if (allVirtualChildren) {\n            if (allVirtualChildren.length > 0)\n                return allVirtualChildren[allVirtualChildren.length - 1].nextSibling;\n            return startComment.nextSibling;\n        } else\n            return null; // Must have no matching end comment, and allowUnbalanced is true\n    }\n\n    function getUnbalancedChildTags(node) {\n        // e.g., from <div>OK</div><!-- ko blah --><span>Another</span>, returns: <!-- ko blah --><span>Another</span>\n        //       from <div>OK</div><!-- /ko --><!-- /ko -->,             returns: <!-- /ko --><!-- /ko -->\n        var childNode = node.firstChild, captureRemaining = null;\n        if (childNode) {\n            do {\n                if (captureRemaining)                   // We already hit an unbalanced node and are now just scooping up all subsequent nodes\n                    captureRemaining.push(childNode);\n                else if (isStartComment(childNode)) {\n                    var matchingEndComment = getMatchingEndComment(childNode, /* allowUnbalanced: */ true);\n                    if (matchingEndComment)             // It's a balanced tag, so skip immediately to the end of this virtual set\n                        childNode = matchingEndComment;\n                    else\n                        captureRemaining = [childNode]; // It's unbalanced, so start capturing from this point\n                } else if (isEndComment(childNode)) {\n                    captureRemaining = [childNode];     // It's unbalanced (if it wasn't, we'd have skipped over it already), so start capturing\n                }\n            } while (childNode = childNode.nextSibling);\n        }\n        return captureRemaining;\n    }\n\n    ko.virtualElements = {\n        allowedBindings: {},\n\n        childNodes: function(node) {\n            return isStartComment(node) ? getVirtualChildren(node) : node.childNodes;\n        },\n\n        emptyNode: function(node) {\n            if (!isStartComment(node))\n                ko.utils.emptyDomNode(node);\n            else {\n                var virtualChildren = ko.virtualElements.childNodes(node);\n                for (var i = 0, j = virtualChildren.length; i < j; i++)\n                    ko.removeNode(virtualChildren[i]);\n            }\n        },\n\n        setDomNodeChildren: function(node, childNodes) {\n            if (!isStartComment(node))\n                ko.utils.setDomNodeChildren(node, childNodes);\n            else {\n                ko.virtualElements.emptyNode(node);\n                var endCommentNode = node.nextSibling; // Must be the next sibling, as we just emptied the children\n                for (var i = 0, j = childNodes.length; i < j; i++)\n                    endCommentNode.parentNode.insertBefore(childNodes[i], endCommentNode);\n            }\n        },\n\n        prepend: function(containerNode, nodeToPrepend) {\n            if (!isStartComment(containerNode)) {\n                if (containerNode.firstChild)\n                    containerNode.insertBefore(nodeToPrepend, containerNode.firstChild);\n                else\n                    containerNode.appendChild(nodeToPrepend);\n            } else {\n                // Start comments must always have a parent and at least one following sibling (the end comment)\n                containerNode.parentNode.insertBefore(nodeToPrepend, containerNode.nextSibling);\n            }\n        },\n\n        insertAfter: function(containerNode, nodeToInsert, insertAfterNode) {\n            if (!insertAfterNode) {\n                ko.virtualElements.prepend(containerNode, nodeToInsert);\n            } else if (!isStartComment(containerNode)) {\n                // Insert after insertion point\n                if (insertAfterNode.nextSibling)\n                    containerNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);\n                else\n                    containerNode.appendChild(nodeToInsert);\n            } else {\n                // Children of start comments must always have a parent and at least one following sibling (the end comment)\n                containerNode.parentNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);\n            }\n        },\n\n        firstChild: function(node) {\n            if (!isStartComment(node))\n                return node.firstChild;\n            if (!node.nextSibling || isEndComment(node.nextSibling))\n                return null;\n            return node.nextSibling;\n        },\n\n        nextSibling: function(node) {\n            if (isStartComment(node))\n                node = getMatchingEndComment(node);\n            if (node.nextSibling && isEndComment(node.nextSibling))\n                return null;\n            return node.nextSibling;\n        },\n\n        virtualNodeBindingValue: function(node) {\n            var regexMatch = isStartComment(node);\n            return regexMatch ? regexMatch[1] : null;\n        },\n\n        normaliseVirtualElementDomStructure: function(elementVerified) {\n            // Workaround for https://github.com/SteveSanderson/knockout/issues/155\n            // (IE <= 8 or IE 9 quirks mode parses your HTML weirdly, treating closing </li> tags as if they don't exist, thereby moving comment nodes\n            // that are direct descendants of <ul> into the preceding <li>)\n            if (!htmlTagsWithOptionallyClosingChildren[ko.utils.tagNameLower(elementVerified)])\n                return;\n\n            // Scan immediate children to see if they contain unbalanced comment tags. If they do, those comment tags\n            // must be intended to appear *after* that child, so move them there.\n            var childNode = elementVerified.firstChild;\n            if (childNode) {\n                do {\n                    if (childNode.nodeType === 1) {\n                        var unbalancedTags = getUnbalancedChildTags(childNode);\n                        if (unbalancedTags) {\n                            // Fix up the DOM by moving the unbalanced tags to where they most likely were intended to be placed - *after* the child\n                            var nodeToInsertBefore = childNode.nextSibling;\n                            for (var i = 0; i < unbalancedTags.length; i++) {\n                                if (nodeToInsertBefore)\n                                    elementVerified.insertBefore(unbalancedTags[i], nodeToInsertBefore);\n                                else\n                                    elementVerified.appendChild(unbalancedTags[i]);\n                            }\n                        }\n                    }\n                } while (childNode = childNode.nextSibling);\n            }\n        }\n    };\n})();\nko.exportSymbol('virtualElements', ko.virtualElements);\nko.exportSymbol('virtualElements.allowedBindings', ko.virtualElements.allowedBindings);\nko.exportSymbol('virtualElements.emptyNode', ko.virtualElements.emptyNode);\n//ko.exportSymbol('virtualElements.firstChild', ko.virtualElements.firstChild);     // firstChild is not minified\nko.exportSymbol('virtualElements.insertAfter', ko.virtualElements.insertAfter);\n//ko.exportSymbol('virtualElements.nextSibling', ko.virtualElements.nextSibling);   // nextSibling is not minified\nko.exportSymbol('virtualElements.prepend', ko.virtualElements.prepend);\nko.exportSymbol('virtualElements.setDomNodeChildren', ko.virtualElements.setDomNodeChildren);\n(function() {\n    var defaultBindingAttributeName = \"data-bind\";\n\n    ko.bindingProvider = function() {\n        this.bindingCache = {};\n    };\n\n    ko.utils.extend(ko.bindingProvider.prototype, {\n        'nodeHasBindings': function(node) {\n            switch (node.nodeType) {\n                case 1: return node.getAttribute(defaultBindingAttributeName) != null;   // Element\n                case 8: return ko.virtualElements.virtualNodeBindingValue(node) != null; // Comment node\n                default: return false;\n            }\n        },\n\n        'getBindings': function(node, bindingContext) {\n            var bindingsString = this['getBindingsString'](node, bindingContext);\n            return bindingsString ? this['parseBindingsString'](bindingsString, bindingContext, node) : null;\n        },\n\n        // The following function is only used internally by this default provider.\n        // It's not part of the interface definition for a general binding provider.\n        'getBindingsString': function(node, bindingContext) {\n            switch (node.nodeType) {\n                case 1: return node.getAttribute(defaultBindingAttributeName);   // Element\n                case 8: return ko.virtualElements.virtualNodeBindingValue(node); // Comment node\n                default: return null;\n            }\n        },\n\n        // The following function is only used internally by this default provider.\n        // It's not part of the interface definition for a general binding provider.\n        'parseBindingsString': function(bindingsString, bindingContext, node) {\n            try {\n                var bindingFunction = createBindingsStringEvaluatorViaCache(bindingsString, this.bindingCache);\n                return bindingFunction(bindingContext, node);\n            } catch (ex) {\n                throw new Error(\"Unable to parse bindings.\\nMessage: \" + ex + \";\\nBindings value: \" + bindingsString);\n            }\n        }\n    });\n\n    ko.bindingProvider['instance'] = new ko.bindingProvider();\n\n    function createBindingsStringEvaluatorViaCache(bindingsString, cache) {\n        var cacheKey = bindingsString;\n        return cache[cacheKey]\n            || (cache[cacheKey] = createBindingsStringEvaluator(bindingsString));\n    }\n\n    function createBindingsStringEvaluator(bindingsString) {\n        // Build the source for a function that evaluates \"expression\"\n        // For each scope variable, add an extra level of \"with\" nesting\n        // Example result: with(sc1) { with(sc0) { return (expression) } }\n        var rewrittenBindings = ko.expressionRewriting.preProcessBindings(bindingsString),\n            functionBody = \"with($context){with($data||{}){return{\" + rewrittenBindings + \"}}}\";\n        return new Function(\"$context\", \"$element\", functionBody);\n    }\n})();\n\nko.exportSymbol('bindingProvider', ko.bindingProvider);\n(function () {\n    ko.bindingHandlers = {};\n\n    ko.bindingContext = function(dataItem, parentBindingContext, dataItemAlias) {\n        if (parentBindingContext) {\n            ko.utils.extend(this, parentBindingContext); // Inherit $root and any custom properties\n            this['$parentContext'] = parentBindingContext;\n            this['$parent'] = parentBindingContext['$data'];\n            this['$parents'] = (parentBindingContext['$parents'] || []).slice(0);\n            this['$parents'].unshift(this['$parent']);\n        } else {\n            this['$parents'] = [];\n            this['$root'] = dataItem;\n            // Export 'ko' in the binding context so it will be available in bindings and templates\n            // even if 'ko' isn't exported as a global, such as when using an AMD loader.\n            // See https://github.com/SteveSanderson/knockout/issues/490\n            this['ko'] = ko;\n        }\n        this['$data'] = dataItem;\n        if (dataItemAlias)\n            this[dataItemAlias] = dataItem;\n    }\n    ko.bindingContext.prototype['createChildContext'] = function (dataItem, dataItemAlias) {\n        return new ko.bindingContext(dataItem, this, dataItemAlias);\n    };\n    ko.bindingContext.prototype['extend'] = function(properties) {\n        var clone = ko.utils.extend(new ko.bindingContext(), this);\n        return ko.utils.extend(clone, properties);\n    };\n\n    function validateThatBindingIsAllowedForVirtualElements(bindingName) {\n        var validator = ko.virtualElements.allowedBindings[bindingName];\n        if (!validator)\n            throw new Error(\"The binding '\" + bindingName + \"' cannot be used with virtual elements\")\n    }\n\n    function applyBindingsToDescendantsInternal (viewModel, elementOrVirtualElement, bindingContextsMayDifferFromDomParentElement) {\n        var currentChild, nextInQueue = ko.virtualElements.firstChild(elementOrVirtualElement);\n        while (currentChild = nextInQueue) {\n            // Keep a record of the next child *before* applying bindings, in case the binding removes the current child from its position\n            nextInQueue = ko.virtualElements.nextSibling(currentChild);\n            applyBindingsToNodeAndDescendantsInternal(viewModel, currentChild, bindingContextsMayDifferFromDomParentElement);\n        }\n    }\n\n    function applyBindingsToNodeAndDescendantsInternal (viewModel, nodeVerified, bindingContextMayDifferFromDomParentElement) {\n        var shouldBindDescendants = true;\n\n        // Perf optimisation: Apply bindings only if...\n        // (1) We need to store the binding context on this node (because it may differ from the DOM parent node's binding context)\n        //     Note that we can't store binding contexts on non-elements (e.g., text nodes), as IE doesn't allow expando properties for those\n        // (2) It might have bindings (e.g., it has a data-bind attribute, or it's a marker for a containerless template)\n        var isElement = (nodeVerified.nodeType === 1);\n        if (isElement) // Workaround IE <= 8 HTML parsing weirdness\n            ko.virtualElements.normaliseVirtualElementDomStructure(nodeVerified);\n\n        var shouldApplyBindings = (isElement && bindingContextMayDifferFromDomParentElement)             // Case (1)\n                               || ko.bindingProvider['instance']['nodeHasBindings'](nodeVerified);       // Case (2)\n        if (shouldApplyBindings)\n            shouldBindDescendants = applyBindingsToNodeInternal(nodeVerified, null, viewModel, bindingContextMayDifferFromDomParentElement).shouldBindDescendants;\n\n        if (shouldBindDescendants) {\n            // We're recursing automatically into (real or virtual) child nodes without changing binding contexts. So,\n            //  * For children of a *real* element, the binding context is certainly the same as on their DOM .parentNode,\n            //    hence bindingContextsMayDifferFromDomParentElement is false\n            //  * For children of a *virtual* element, we can't be sure. Evaluating .parentNode on those children may\n            //    skip over any number of intermediate virtual elements, any of which might define a custom binding context,\n            //    hence bindingContextsMayDifferFromDomParentElement is true\n            applyBindingsToDescendantsInternal(viewModel, nodeVerified, /* bindingContextsMayDifferFromDomParentElement: */ !isElement);\n        }\n    }\n\n    function applyBindingsToNodeInternal (node, bindings, viewModelOrBindingContext, bindingContextMayDifferFromDomParentElement) {\n        // Need to be sure that inits are only run once, and updates never run until all the inits have been run\n        var initPhase = 0; // 0 = before all inits, 1 = during inits, 2 = after all inits\n\n        // Each time the dependentObservable is evaluated (after data changes),\n        // the binding attribute is reparsed so that it can pick out the correct\n        // model properties in the context of the changed data.\n        // DOM event callbacks need to be able to access this changed data,\n        // so we need a single parsedBindings variable (shared by all callbacks\n        // associated with this node's bindings) that all the closures can access.\n        var parsedBindings;\n        function makeValueAccessor(bindingKey) {\n            return function () { return parsedBindings[bindingKey] }\n        }\n        function parsedBindingsAccessor() {\n            return parsedBindings;\n        }\n\n        var bindingHandlerThatControlsDescendantBindings;\n        ko.dependentObservable(\n            function () {\n                // Ensure we have a nonnull binding context to work with\n                var bindingContextInstance = viewModelOrBindingContext && (viewModelOrBindingContext instanceof ko.bindingContext)\n                    ? viewModelOrBindingContext\n                    : new ko.bindingContext(ko.utils.unwrapObservable(viewModelOrBindingContext));\n                var viewModel = bindingContextInstance['$data'];\n\n                // Optimization: Don't store the binding context on this node if it's definitely the same as on node.parentNode, because\n                // we can easily recover it just by scanning up the node's ancestors in the DOM\n                // (note: here, parent node means \"real DOM parent\" not \"virtual parent\", as there's no O(1) way to find the virtual parent)\n                if (bindingContextMayDifferFromDomParentElement)\n                    ko.storedBindingContextForNode(node, bindingContextInstance);\n\n                // Use evaluatedBindings if given, otherwise fall back on asking the bindings provider to give us some bindings\n                var evaluatedBindings = (typeof bindings == \"function\") ? bindings(bindingContextInstance, node) : bindings;\n                parsedBindings = evaluatedBindings || ko.bindingProvider['instance']['getBindings'](node, bindingContextInstance);\n\n                if (parsedBindings) {\n                    // First run all the inits, so bindings can register for notification on changes\n                    if (initPhase === 0) {\n                        initPhase = 1;\n                        for (var bindingKey in parsedBindings) {\n                            var binding = ko.bindingHandlers[bindingKey];\n                            if (binding && node.nodeType === 8)\n                                validateThatBindingIsAllowedForVirtualElements(bindingKey);\n\n                            if (binding && typeof binding[\"init\"] == \"function\") {\n                                var handlerInitFn = binding[\"init\"];\n                                var initResult = handlerInitFn(node, makeValueAccessor(bindingKey), parsedBindingsAccessor, viewModel, bindingContextInstance);\n\n                                // If this binding handler claims to control descendant bindings, make a note of this\n                                if (initResult && initResult['controlsDescendantBindings']) {\n                                    if (bindingHandlerThatControlsDescendantBindings !== undefined)\n                                        throw new Error(\"Multiple bindings (\" + bindingHandlerThatControlsDescendantBindings + \" and \" + bindingKey + \") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\");\n                                    bindingHandlerThatControlsDescendantBindings = bindingKey;\n                                }\n                            }\n                        }\n                        initPhase = 2;\n                    }\n\n                    // ... then run all the updates, which might trigger changes even on the first evaluation\n                    if (initPhase === 2) {\n                        for (var bindingKey in parsedBindings) {\n                            var binding = ko.bindingHandlers[bindingKey];\n                            if (binding && typeof binding[\"update\"] == \"function\") {\n                                var handlerUpdateFn = binding[\"update\"];\n                                handlerUpdateFn(node, makeValueAccessor(bindingKey), parsedBindingsAccessor, viewModel, bindingContextInstance);\n                            }\n                        }\n                    }\n                }\n            },\n            null,\n            { disposeWhenNodeIsRemoved : node }\n        );\n\n        return {\n            shouldBindDescendants: bindingHandlerThatControlsDescendantBindings === undefined\n        };\n    };\n\n    var storedBindingContextDomDataKey = \"__ko_bindingContext__\";\n    ko.storedBindingContextForNode = function (node, bindingContext) {\n        if (arguments.length == 2)\n            ko.utils.domData.set(node, storedBindingContextDomDataKey, bindingContext);\n        else\n            return ko.utils.domData.get(node, storedBindingContextDomDataKey);\n    }\n\n    ko.applyBindingsToNode = function (node, bindings, viewModel) {\n        if (node.nodeType === 1) // If it's an element, workaround IE <= 8 HTML parsing weirdness\n            ko.virtualElements.normaliseVirtualElementDomStructure(node);\n        return applyBindingsToNodeInternal(node, bindings, viewModel, true);\n    };\n\n    ko.applyBindingsToDescendants = function(viewModel, rootNode) {\n        if (rootNode.nodeType === 1 || rootNode.nodeType === 8)\n            applyBindingsToDescendantsInternal(viewModel, rootNode, true);\n    };\n\n    ko.applyBindings = function (viewModel, rootNode) {\n        if (rootNode && (rootNode.nodeType !== 1) && (rootNode.nodeType !== 8))\n            throw new Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\");\n        rootNode = rootNode || window.document.body; // Make \"rootNode\" parameter optional\n\n        applyBindingsToNodeAndDescendantsInternal(viewModel, rootNode, true);\n    };\n\n    // Retrieving binding context from arbitrary nodes\n    ko.contextFor = function(node) {\n        // We can only do something meaningful for elements and comment nodes (in particular, not text nodes, as IE can't store domdata for them)\n        switch (node.nodeType) {\n            case 1:\n            case 8:\n                var context = ko.storedBindingContextForNode(node);\n                if (context) return context;\n                if (node.parentNode) return ko.contextFor(node.parentNode);\n                break;\n        }\n        return undefined;\n    };\n    ko.dataFor = function(node) {\n        var context = ko.contextFor(node);\n        return context ? context['$data'] : undefined;\n    };\n\n    ko.exportSymbol('bindingHandlers', ko.bindingHandlers);\n    ko.exportSymbol('applyBindings', ko.applyBindings);\n    ko.exportSymbol('applyBindingsToDescendants', ko.applyBindingsToDescendants);\n    ko.exportSymbol('applyBindingsToNode', ko.applyBindingsToNode);\n    ko.exportSymbol('contextFor', ko.contextFor);\n    ko.exportSymbol('dataFor', ko.dataFor);\n})();\nvar attrHtmlToJavascriptMap = { 'class': 'className', 'for': 'htmlFor' };\nko.bindingHandlers['attr'] = {\n    'update': function(element, valueAccessor, allBindingsAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor()) || {};\n        for (var attrName in value) {\n            if (typeof attrName == \"string\") {\n                var attrValue = ko.utils.unwrapObservable(value[attrName]);\n\n                // To cover cases like \"attr: { checked:someProp }\", we want to remove the attribute entirely\n                // when someProp is a \"no value\"-like value (strictly null, false, or undefined)\n                // (because the absence of the \"checked\" attr is how to mark an element as not checked, etc.)\n                var toRemove = (attrValue === false) || (attrValue === null) || (attrValue === undefined);\n                if (toRemove)\n                    element.removeAttribute(attrName);\n\n                // In IE <= 7 and IE8 Quirks Mode, you have to use the Javascript property name instead of the\n                // HTML attribute name for certain attributes. IE8 Standards Mode supports the correct behavior,\n                // but instead of figuring out the mode, we'll just set the attribute through the Javascript\n                // property for IE <= 8.\n                if (ko.utils.ieVersion <= 8 && attrName in attrHtmlToJavascriptMap) {\n                    attrName = attrHtmlToJavascriptMap[attrName];\n                    if (toRemove)\n                        element.removeAttribute(attrName);\n                    else\n                        element[attrName] = attrValue;\n                } else if (!toRemove) {\n                    element.setAttribute(attrName, attrValue.toString());\n                }\n\n                // Treat \"name\" specially - although you can think of it as an attribute, it also needs\n                // special handling on older versions of IE (https://github.com/SteveSanderson/knockout/pull/333)\n                // Deliberately being case-sensitive here because XHTML would regard \"Name\" as a different thing\n                // entirely, and there's no strong reason to allow for such casing in HTML.\n                if (attrName === \"name\") {\n                    ko.utils.setElementName(element, toRemove ? \"\" : attrValue.toString());\n                }\n            }\n        }\n    }\n};\nko.bindingHandlers['checked'] = {\n    'init': function (element, valueAccessor, allBindingsAccessor) {\n        var updateHandler = function() {\n            var valueToWrite;\n            if (element.type == \"checkbox\") {\n                valueToWrite = element.checked;\n            } else if ((element.type == \"radio\") && (element.checked)) {\n                valueToWrite = element.value;\n            } else {\n                return; // \"checked\" binding only responds to checkboxes and selected radio buttons\n            }\n\n            var modelValue = valueAccessor(), unwrappedValue = ko.utils.unwrapObservable(modelValue);\n            if ((element.type == \"checkbox\") && (unwrappedValue instanceof Array)) {\n                // For checkboxes bound to an array, we add/remove the checkbox value to that array\n                // This works for both observable and non-observable arrays\n                var existingEntryIndex = ko.utils.arrayIndexOf(unwrappedValue, element.value);\n                if (element.checked && (existingEntryIndex < 0))\n                    modelValue.push(element.value);\n                else if ((!element.checked) && (existingEntryIndex >= 0))\n                    modelValue.splice(existingEntryIndex, 1);\n            } else {\n                ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'checked', valueToWrite, true);\n            }\n        };\n        ko.utils.registerEventHandler(element, \"click\", updateHandler);\n\n        // IE 6 won't allow radio buttons to be selected unless they have a name\n        if ((element.type == \"radio\") && !element.name)\n            ko.bindingHandlers['uniqueName']['init'](element, function() { return true });\n    },\n    'update': function (element, valueAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor());\n\n        if (element.type == \"checkbox\") {\n            if (value instanceof Array) {\n                // When bound to an array, the checkbox being checked represents its value being present in that array\n                element.checked = ko.utils.arrayIndexOf(value, element.value) >= 0;\n            } else {\n                // When bound to anything other value (not an array), the checkbox being checked represents the value being trueish\n                element.checked = value;\n            }\n        } else if (element.type == \"radio\") {\n            element.checked = (element.value == value);\n        }\n    }\n};\nvar classesWrittenByBindingKey = '__ko__cssValue';\nko.bindingHandlers['css'] = {\n    'update': function (element, valueAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor());\n        if (typeof value == \"object\") {\n            for (var className in value) {\n                var shouldHaveClass = ko.utils.unwrapObservable(value[className]);\n                ko.utils.toggleDomNodeCssClass(element, className, shouldHaveClass);\n            }\n        } else {\n            value = String(value || ''); // Make sure we don't try to store or set a non-string value\n            ko.utils.toggleDomNodeCssClass(element, element[classesWrittenByBindingKey], false);\n            element[classesWrittenByBindingKey] = value;\n            ko.utils.toggleDomNodeCssClass(element, value, true);\n        }\n    }\n};\nko.bindingHandlers['enable'] = {\n    'update': function (element, valueAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor());\n        if (value && element.disabled)\n            element.removeAttribute(\"disabled\");\n        else if ((!value) && (!element.disabled))\n            element.disabled = true;\n    }\n};\n\nko.bindingHandlers['disable'] = {\n    'update': function (element, valueAccessor) {\n        ko.bindingHandlers['enable']['update'](element, function() { return !ko.utils.unwrapObservable(valueAccessor()) });\n    }\n};\n// For certain common events (currently just 'click'), allow a simplified data-binding syntax\n// e.g. click:handler instead of the usual full-length event:{click:handler}\nfunction makeEventHandlerShortcut(eventName) {\n    ko.bindingHandlers[eventName] = {\n        'init': function(element, valueAccessor, allBindingsAccessor, viewModel) {\n            var newValueAccessor = function () {\n                var result = {};\n                result[eventName] = valueAccessor();\n                return result;\n            };\n            return ko.bindingHandlers['event']['init'].call(this, element, newValueAccessor, allBindingsAccessor, viewModel);\n        }\n    }\n}\n\nko.bindingHandlers['event'] = {\n    'init' : function (element, valueAccessor, allBindingsAccessor, viewModel) {\n        var eventsToHandle = valueAccessor() || {};\n        for(var eventNameOutsideClosure in eventsToHandle) {\n            (function() {\n                var eventName = eventNameOutsideClosure; // Separate variable to be captured by event handler closure\n                if (typeof eventName == \"string\") {\n                    ko.utils.registerEventHandler(element, eventName, function (event) {\n                        var handlerReturnValue;\n                        var handlerFunction = valueAccessor()[eventName];\n                        if (!handlerFunction)\n                            return;\n                        var allBindings = allBindingsAccessor();\n\n                        try {\n                            // Take all the event args, and prefix with the viewmodel\n                            var argsForHandler = ko.utils.makeArray(arguments);\n                            argsForHandler.unshift(viewModel);\n                            handlerReturnValue = handlerFunction.apply(viewModel, argsForHandler);\n                        } finally {\n                            if (handlerReturnValue !== true) { // Normally we want to prevent default action. Developer can override this be explicitly returning true.\n                                if (event.preventDefault)\n                                    event.preventDefault();\n                                else\n                                    event.returnValue = false;\n                            }\n                        }\n\n                        var bubble = allBindings[eventName + 'Bubble'] !== false;\n                        if (!bubble) {\n                            event.cancelBubble = true;\n                            if (event.stopPropagation)\n                                event.stopPropagation();\n                        }\n                    });\n                }\n            })();\n        }\n    }\n};\n// \"foreach: someExpression\" is equivalent to \"template: { foreach: someExpression }\"\n// \"foreach: { data: someExpression, afterAdd: myfn }\" is equivalent to \"template: { foreach: someExpression, afterAdd: myfn }\"\nko.bindingHandlers['foreach'] = {\n    makeTemplateValueAccessor: function(valueAccessor) {\n        return function() {\n            var modelValue = valueAccessor(),\n                unwrappedValue = ko.utils.peekObservable(modelValue);    // Unwrap without setting a dependency here\n\n            // If unwrappedValue is the array, pass in the wrapped value on its own\n            // The value will be unwrapped and tracked within the template binding\n            // (See https://github.com/SteveSanderson/knockout/issues/523)\n            if ((!unwrappedValue) || typeof unwrappedValue.length == \"number\")\n                return { 'foreach': modelValue, 'templateEngine': ko.nativeTemplateEngine.instance };\n\n            // If unwrappedValue.data is the array, preserve all relevant options and unwrap again value so we get updates\n            ko.utils.unwrapObservable(modelValue);\n            return {\n                'foreach': unwrappedValue['data'],\n                'as': unwrappedValue['as'],\n                'includeDestroyed': unwrappedValue['includeDestroyed'],\n                'afterAdd': unwrappedValue['afterAdd'],\n                'beforeRemove': unwrappedValue['beforeRemove'],\n                'afterRender': unwrappedValue['afterRender'],\n                'beforeMove': unwrappedValue['beforeMove'],\n                'afterMove': unwrappedValue['afterMove'],\n                'templateEngine': ko.nativeTemplateEngine.instance\n            };\n        };\n    },\n    'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n        return ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor));\n    },\n    'update': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n        return ko.bindingHandlers['template']['update'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor), allBindingsAccessor, viewModel, bindingContext);\n    }\n};\nko.expressionRewriting.bindingRewriteValidators['foreach'] = false; // Can't rewrite control flow bindings\nko.virtualElements.allowedBindings['foreach'] = true;\nvar hasfocusUpdatingProperty = '__ko_hasfocusUpdating';\nko.bindingHandlers['hasfocus'] = {\n    'init': function(element, valueAccessor, allBindingsAccessor) {\n        var handleElementFocusChange = function(isFocused) {\n            // Where possible, ignore which event was raised and determine focus state using activeElement,\n            // as this avoids phantom focus/blur events raised when changing tabs in modern browsers.\n            // However, not all KO-targeted browsers (Firefox 2) support activeElement. For those browsers,\n            // prevent a loss of focus when changing tabs/windows by setting a flag that prevents hasfocus\n            // from calling 'blur()' on the element when it loses focus.\n            // Discussion at https://github.com/SteveSanderson/knockout/pull/352\n            element[hasfocusUpdatingProperty] = true;\n            var ownerDoc = element.ownerDocument;\n            if (\"activeElement\" in ownerDoc) {\n                isFocused = (ownerDoc.activeElement === element);\n            }\n            var modelValue = valueAccessor();\n            ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'hasfocus', isFocused, true);\n            element[hasfocusUpdatingProperty] = false;\n        };\n        var handleElementFocusIn = handleElementFocusChange.bind(null, true);\n        var handleElementFocusOut = handleElementFocusChange.bind(null, false);\n\n        ko.utils.registerEventHandler(element, \"focus\", handleElementFocusIn);\n        ko.utils.registerEventHandler(element, \"focusin\", handleElementFocusIn); // For IE\n        ko.utils.registerEventHandler(element, \"blur\",  handleElementFocusOut);\n        ko.utils.registerEventHandler(element, \"focusout\",  handleElementFocusOut); // For IE\n    },\n    'update': function(element, valueAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor());\n        if (!element[hasfocusUpdatingProperty]) {\n            value ? element.focus() : element.blur();\n            ko.dependencyDetection.ignore(ko.utils.triggerEvent, null, [element, value ? \"focusin\" : \"focusout\"]); // For IE, which doesn't reliably fire \"focus\" or \"blur\" events synchronously\n        }\n    }\n};\nko.bindingHandlers['html'] = {\n    'init': function() {\n        // Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications)\n        return { 'controlsDescendantBindings': true };\n    },\n    'update': function (element, valueAccessor) {\n        // setHtml will unwrap the value if needed\n        ko.utils.setHtml(element, valueAccessor());\n    }\n};\nvar withIfDomDataKey = '__ko_withIfBindingData';\n// Makes a binding like with or if\nfunction makeWithIfBinding(bindingKey, isWith, isNot, makeContextCallback) {\n    ko.bindingHandlers[bindingKey] = {\n        'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n            ko.utils.domData.set(element, withIfDomDataKey, {});\n            return { 'controlsDescendantBindings': true };\n        },\n        'update': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n            var withIfData = ko.utils.domData.get(element, withIfDomDataKey),\n                dataValue = ko.utils.unwrapObservable(valueAccessor()),\n                shouldDisplay = !isNot !== !dataValue, // equivalent to isNot ? !dataValue : !!dataValue\n                isFirstRender = !withIfData.savedNodes,\n                needsRefresh = isFirstRender || isWith || (shouldDisplay !== withIfData.didDisplayOnLastUpdate);\n\n            if (needsRefresh) {\n                if (isFirstRender) {\n                    withIfData.savedNodes = ko.utils.cloneNodes(ko.virtualElements.childNodes(element), true /* shouldCleanNodes */);\n                }\n\n                if (shouldDisplay) {\n                    if (!isFirstRender) {\n                        ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(withIfData.savedNodes));\n                    }\n                    ko.applyBindingsToDescendants(makeContextCallback ? makeContextCallback(bindingContext, dataValue) : bindingContext, element);\n                } else {\n                    ko.virtualElements.emptyNode(element);\n                }\n\n                withIfData.didDisplayOnLastUpdate = shouldDisplay;\n            }\n        }\n    };\n    ko.expressionRewriting.bindingRewriteValidators[bindingKey] = false; // Can't rewrite control flow bindings\n    ko.virtualElements.allowedBindings[bindingKey] = true;\n}\n\n// Construct the actual binding handlers\nmakeWithIfBinding('if');\nmakeWithIfBinding('ifnot', false /* isWith */, true /* isNot */);\nmakeWithIfBinding('with', true /* isWith */, false /* isNot */,\n    function(bindingContext, dataValue) {\n        return bindingContext['createChildContext'](dataValue);\n    }\n);\nfunction ensureDropdownSelectionIsConsistentWithModelValue(element, modelValue, preferModelValue) {\n    if (preferModelValue) {\n        if (modelValue !== ko.selectExtensions.readValue(element))\n            ko.selectExtensions.writeValue(element, modelValue);\n    }\n\n    // No matter which direction we're syncing in, we want the end result to be equality between dropdown value and model value.\n    // If they aren't equal, either we prefer the dropdown value, or the model value couldn't be represented, so either way,\n    // change the model value to match the dropdown.\n    if (modelValue !== ko.selectExtensions.readValue(element))\n        ko.dependencyDetection.ignore(ko.utils.triggerEvent, null, [element, \"change\"]);\n};\n\nko.bindingHandlers['options'] = {\n    'update': function (element, valueAccessor, allBindingsAccessor) {\n        if (ko.utils.tagNameLower(element) !== \"select\")\n            throw new Error(\"options binding applies only to SELECT elements\");\n\n        var selectWasPreviouslyEmpty = element.length == 0;\n        var previousSelectedValues = ko.utils.arrayMap(ko.utils.arrayFilter(element.childNodes, function (node) {\n            return node.tagName && (ko.utils.tagNameLower(node) === \"option\") && node.selected;\n        }), function (node) {\n            return ko.selectExtensions.readValue(node) || node.innerText || node.textContent;\n        });\n        var previousScrollTop = element.scrollTop;\n\n        var value = ko.utils.unwrapObservable(valueAccessor());\n        var selectedValue = element.value;\n\n        // Remove all existing <option>s.\n        // Need to use .remove() rather than .removeChild() for <option>s otherwise IE behaves oddly (https://github.com/SteveSanderson/knockout/issues/134)\n        while (element.length > 0) {\n            ko.cleanNode(element.options[0]);\n            element.remove(0);\n        }\n\n        if (value) {\n            var allBindings = allBindingsAccessor(),\n                includeDestroyed = allBindings['optionsIncludeDestroyed'];\n\n            if (typeof value.length != \"number\")\n                value = [value];\n            if (allBindings['optionsCaption']) {\n                var option = document.createElement(\"option\");\n                ko.utils.setHtml(option, allBindings['optionsCaption']);\n                ko.selectExtensions.writeValue(option, undefined);\n                element.appendChild(option);\n            }\n\n            for (var i = 0, j = value.length; i < j; i++) {\n                // Skip destroyed items\n                var arrayEntry = value[i];\n                if (arrayEntry && arrayEntry['_destroy'] && !includeDestroyed)\n                    continue;\n\n                var option = document.createElement(\"option\");\n\n                function applyToObject(object, predicate, defaultValue) {\n                    var predicateType = typeof predicate;\n                    if (predicateType == \"function\")    // Given a function; run it against the data value\n                        return predicate(object);\n                    else if (predicateType == \"string\") // Given a string; treat it as a property name on the data value\n                        return object[predicate];\n                    else                                // Given no optionsText arg; use the data value itself\n                        return defaultValue;\n                }\n\n                // Apply a value to the option element\n                var optionValue = applyToObject(arrayEntry, allBindings['optionsValue'], arrayEntry);\n                ko.selectExtensions.writeValue(option, ko.utils.unwrapObservable(optionValue));\n\n                // Apply some text to the option element\n                var optionText = applyToObject(arrayEntry, allBindings['optionsText'], optionValue);\n                ko.utils.setTextContent(option, optionText);\n\n                element.appendChild(option);\n            }\n\n            // IE6 doesn't like us to assign selection to OPTION nodes before they're added to the document.\n            // That's why we first added them without selection. Now it's time to set the selection.\n            var newOptions = element.getElementsByTagName(\"option\");\n            var countSelectionsRetained = 0;\n            for (var i = 0, j = newOptions.length; i < j; i++) {\n                if (ko.utils.arrayIndexOf(previousSelectedValues, ko.selectExtensions.readValue(newOptions[i])) >= 0) {\n                    ko.utils.setOptionNodeSelectionState(newOptions[i], true);\n                    countSelectionsRetained++;\n                }\n            }\n\n            element.scrollTop = previousScrollTop;\n\n            if (selectWasPreviouslyEmpty && ('value' in allBindings)) {\n                // Ensure consistency between model value and selected option.\n                // If the dropdown is being populated for the first time here (or was otherwise previously empty),\n                // the dropdown selection state is meaningless, so we preserve the model value.\n                ensureDropdownSelectionIsConsistentWithModelValue(element, ko.utils.peekObservable(allBindings['value']), /* preferModelValue */ true);\n            }\n\n            // Workaround for IE9 bug\n            ko.utils.ensureSelectElementIsRenderedCorrectly(element);\n        }\n    }\n};\nko.bindingHandlers['options'].optionValueDomDataKey = '__ko.optionValueDomData__';\nko.bindingHandlers['selectedOptions'] = {\n    'init': function (element, valueAccessor, allBindingsAccessor) {\n        ko.utils.registerEventHandler(element, \"change\", function () {\n            var value = valueAccessor(), valueToWrite = [];\n            ko.utils.arrayForEach(element.getElementsByTagName(\"option\"), function(node) {\n                if (node.selected)\n                    valueToWrite.push(ko.selectExtensions.readValue(node));\n            });\n            ko.expressionRewriting.writeValueToProperty(value, allBindingsAccessor, 'value', valueToWrite);\n        });\n    },\n    'update': function (element, valueAccessor) {\n        if (ko.utils.tagNameLower(element) != \"select\")\n            throw new Error(\"values binding applies only to SELECT elements\");\n\n        var newValue = ko.utils.unwrapObservable(valueAccessor());\n        if (newValue && typeof newValue.length == \"number\") {\n            ko.utils.arrayForEach(element.getElementsByTagName(\"option\"), function(node) {\n                var isSelected = ko.utils.arrayIndexOf(newValue, ko.selectExtensions.readValue(node)) >= 0;\n                ko.utils.setOptionNodeSelectionState(node, isSelected);\n            });\n        }\n    }\n};\nko.bindingHandlers['style'] = {\n    'update': function (element, valueAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor() || {});\n        for (var styleName in value) {\n            if (typeof styleName == \"string\") {\n                var styleValue = ko.utils.unwrapObservable(value[styleName]);\n                element.style[styleName] = styleValue || \"\"; // Empty string removes the value, whereas null/undefined have no effect\n            }\n        }\n    }\n};\nko.bindingHandlers['submit'] = {\n    'init': function (element, valueAccessor, allBindingsAccessor, viewModel) {\n        if (typeof valueAccessor() != \"function\")\n            throw new Error(\"The value for a submit binding must be a function\");\n        ko.utils.registerEventHandler(element, \"submit\", function (event) {\n            var handlerReturnValue;\n            var value = valueAccessor();\n            try { handlerReturnValue = value.call(viewModel, element); }\n            finally {\n                if (handlerReturnValue !== true) { // Normally we want to prevent default action. Developer can override this be explicitly returning true.\n                    if (event.preventDefault)\n                        event.preventDefault();\n                    else\n                        event.returnValue = false;\n                }\n            }\n        });\n    }\n};\nko.bindingHandlers['text'] = {\n    'update': function (element, valueAccessor) {\n        ko.utils.setTextContent(element, valueAccessor());\n    }\n};\nko.virtualElements.allowedBindings['text'] = true;\nko.bindingHandlers['uniqueName'] = {\n    'init': function (element, valueAccessor) {\n        if (valueAccessor()) {\n            var name = \"ko_unique_\" + (++ko.bindingHandlers['uniqueName'].currentIndex);\n            ko.utils.setElementName(element, name);\n        }\n    }\n};\nko.bindingHandlers['uniqueName'].currentIndex = 0;\nko.bindingHandlers['value'] = {\n    'init': function (element, valueAccessor, allBindingsAccessor) {\n        // Always catch \"change\" event; possibly other events too if asked\n        var eventsToCatch = [\"change\"];\n        var requestedEventsToCatch = allBindingsAccessor()[\"valueUpdate\"];\n        var propertyChangedFired = false;\n        if (requestedEventsToCatch) {\n            if (typeof requestedEventsToCatch == \"string\") // Allow both individual event names, and arrays of event names\n                requestedEventsToCatch = [requestedEventsToCatch];\n            ko.utils.arrayPushAll(eventsToCatch, requestedEventsToCatch);\n            eventsToCatch = ko.utils.arrayGetDistinctValues(eventsToCatch);\n        }\n\n        var valueUpdateHandler = function() {\n            propertyChangedFired = false;\n            var modelValue = valueAccessor();\n            var elementValue = ko.selectExtensions.readValue(element);\n            ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'value', elementValue);\n        }\n\n        // Workaround for https://github.com/SteveSanderson/knockout/issues/122\n        // IE doesn't fire \"change\" events on textboxes if the user selects a value from its autocomplete list\n        var ieAutoCompleteHackNeeded = ko.utils.ieVersion && element.tagName.toLowerCase() == \"input\" && element.type == \"text\"\n                                       && element.autocomplete != \"off\" && (!element.form || element.form.autocomplete != \"off\");\n        if (ieAutoCompleteHackNeeded && ko.utils.arrayIndexOf(eventsToCatch, \"propertychange\") == -1) {\n            ko.utils.registerEventHandler(element, \"propertychange\", function () { propertyChangedFired = true });\n            ko.utils.registerEventHandler(element, \"blur\", function() {\n                if (propertyChangedFired) {\n                    valueUpdateHandler();\n                }\n            });\n        }\n\n        ko.utils.arrayForEach(eventsToCatch, function(eventName) {\n            // The syntax \"after<eventname>\" means \"run the handler asynchronously after the event\"\n            // This is useful, for example, to catch \"keydown\" events after the browser has updated the control\n            // (otherwise, ko.selectExtensions.readValue(this) will receive the control's value *before* the key event)\n            var handler = valueUpdateHandler;\n            if (ko.utils.stringStartsWith(eventName, \"after\")) {\n                handler = function() { setTimeout(valueUpdateHandler, 0) };\n                eventName = eventName.substring(\"after\".length);\n            }\n            ko.utils.registerEventHandler(element, eventName, handler);\n        });\n    },\n    'update': function (element, valueAccessor) {\n        var valueIsSelectOption = ko.utils.tagNameLower(element) === \"select\";\n        var newValue = ko.utils.unwrapObservable(valueAccessor());\n        var elementValue = ko.selectExtensions.readValue(element);\n        var valueHasChanged = (newValue != elementValue);\n\n        // JavaScript's 0 == \"\" behavious is unfortunate here as it prevents writing 0 to an empty text box (loose equality suggests the values are the same).\n        // We don't want to do a strict equality comparison as that is more confusing for developers in certain cases, so we specifically special case 0 != \"\" here.\n        if ((newValue === 0) && (elementValue !== 0) && (elementValue !== \"0\"))\n            valueHasChanged = true;\n\n        if (valueHasChanged) {\n            var applyValueAction = function () { ko.selectExtensions.writeValue(element, newValue); };\n            applyValueAction();\n\n            // Workaround for IE6 bug: It won't reliably apply values to SELECT nodes during the same execution thread\n            // right after you've changed the set of OPTION nodes on it. So for that node type, we'll schedule a second thread\n            // to apply the value as well.\n            var alsoApplyAsynchronously = valueIsSelectOption;\n            if (alsoApplyAsynchronously)\n                setTimeout(applyValueAction, 0);\n        }\n\n        // If you try to set a model value that can't be represented in an already-populated dropdown, reject that change,\n        // because you're not allowed to have a model value that disagrees with a visible UI selection.\n        if (valueIsSelectOption && (element.length > 0))\n            ensureDropdownSelectionIsConsistentWithModelValue(element, newValue, /* preferModelValue */ false);\n    }\n};\nko.bindingHandlers['visible'] = {\n    'update': function (element, valueAccessor) {\n        var value = ko.utils.unwrapObservable(valueAccessor());\n        var isCurrentlyVisible = !(element.style.display == \"none\");\n        if (value && !isCurrentlyVisible)\n            element.style.display = \"\";\n        else if ((!value) && isCurrentlyVisible)\n            element.style.display = \"none\";\n    }\n};\n// 'click' is just a shorthand for the usual full-length event:{click:handler}\nmakeEventHandlerShortcut('click');\n// If you want to make a custom template engine,\n//\n// [1] Inherit from this class (like ko.nativeTemplateEngine does)\n// [2] Override 'renderTemplateSource', supplying a function with this signature:\n//\n//        function (templateSource, bindingContext, options) {\n//            // - templateSource.text() is the text of the template you should render\n//            // - bindingContext.$data is the data you should pass into the template\n//            //   - you might also want to make bindingContext.$parent, bindingContext.$parents,\n//            //     and bindingContext.$root available in the template too\n//            // - options gives you access to any other properties set on \"data-bind: { template: options }\"\n//            //\n//            // Return value: an array of DOM nodes\n//        }\n//\n// [3] Override 'createJavaScriptEvaluatorBlock', supplying a function with this signature:\n//\n//        function (script) {\n//            // Return value: Whatever syntax means \"Evaluate the JavaScript statement 'script' and output the result\"\n//            //               For example, the jquery.tmpl template engine converts 'someScript' to '${ someScript }'\n//        }\n//\n//     This is only necessary if you want to allow data-bind attributes to reference arbitrary template variables.\n//     If you don't want to allow that, you can set the property 'allowTemplateRewriting' to false (like ko.nativeTemplateEngine does)\n//     and then you don't need to override 'createJavaScriptEvaluatorBlock'.\n\nko.templateEngine = function () { };\n\nko.templateEngine.prototype['renderTemplateSource'] = function (templateSource, bindingContext, options) {\n    throw new Error(\"Override renderTemplateSource\");\n};\n\nko.templateEngine.prototype['createJavaScriptEvaluatorBlock'] = function (script) {\n    throw new Error(\"Override createJavaScriptEvaluatorBlock\");\n};\n\nko.templateEngine.prototype['makeTemplateSource'] = function(template, templateDocument) {\n    // Named template\n    if (typeof template == \"string\") {\n        templateDocument = templateDocument || document;\n        var elem = templateDocument.getElementById(template);\n        if (!elem)\n            throw new Error(\"Cannot find template with ID \" + template);\n        return new ko.templateSources.domElement(elem);\n    } else if ((template.nodeType == 1) || (template.nodeType == 8)) {\n        // Anonymous template\n        return new ko.templateSources.anonymousTemplate(template);\n    } else\n        throw new Error(\"Unknown template type: \" + template);\n};\n\nko.templateEngine.prototype['renderTemplate'] = function (template, bindingContext, options, templateDocument) {\n    var templateSource = this['makeTemplateSource'](template, templateDocument);\n    return this['renderTemplateSource'](templateSource, bindingContext, options);\n};\n\nko.templateEngine.prototype['isTemplateRewritten'] = function (template, templateDocument) {\n    // Skip rewriting if requested\n    if (this['allowTemplateRewriting'] === false)\n        return true;\n    return this['makeTemplateSource'](template, templateDocument)['data'](\"isRewritten\");\n};\n\nko.templateEngine.prototype['rewriteTemplate'] = function (template, rewriterCallback, templateDocument) {\n    var templateSource = this['makeTemplateSource'](template, templateDocument);\n    var rewritten = rewriterCallback(templateSource['text']());\n    templateSource['text'](rewritten);\n    templateSource['data'](\"isRewritten\", true);\n};\n\nko.exportSymbol('templateEngine', ko.templateEngine);\n\nko.templateRewriting = (function () {\n    var memoizeDataBindingAttributeSyntaxRegex = /(<[a-z]+\\d*(\\s+(?!data-bind=)[a-z0-9\\-]+(=(\\\"[^\\\"]*\\\"|\\'[^\\']*\\'))?)*\\s+)data-bind=([\"'])([\\s\\S]*?)\\5/gi;\n    var memoizeVirtualContainerBindingSyntaxRegex = /<!--\\s*ko\\b\\s*([\\s\\S]*?)\\s*-->/g;\n\n    function validateDataBindValuesForRewriting(keyValueArray) {\n        var allValidators = ko.expressionRewriting.bindingRewriteValidators;\n        for (var i = 0; i < keyValueArray.length; i++) {\n            var key = keyValueArray[i]['key'];\n            if (allValidators.hasOwnProperty(key)) {\n                var validator = allValidators[key];\n\n                if (typeof validator === \"function\") {\n                    var possibleErrorMessage = validator(keyValueArray[i]['value']);\n                    if (possibleErrorMessage)\n                        throw new Error(possibleErrorMessage);\n                } else if (!validator) {\n                    throw new Error(\"This template engine does not support the '\" + key + \"' binding within its templates\");\n                }\n            }\n        }\n    }\n\n    function constructMemoizedTagReplacement(dataBindAttributeValue, tagToRetain, templateEngine) {\n        var dataBindKeyValueArray = ko.expressionRewriting.parseObjectLiteral(dataBindAttributeValue);\n        validateDataBindValuesForRewriting(dataBindKeyValueArray);\n        var rewrittenDataBindAttributeValue = ko.expressionRewriting.preProcessBindings(dataBindKeyValueArray);\n\n        // For no obvious reason, Opera fails to evaluate rewrittenDataBindAttributeValue unless it's wrapped in an additional\n        // anonymous function, even though Opera's built-in debugger can evaluate it anyway. No other browser requires this\n        // extra indirection.\n        var applyBindingsToNextSiblingScript =\n            \"ko.__tr_ambtns(function($context,$element){return(function(){return{ \" + rewrittenDataBindAttributeValue + \" } })()})\";\n        return templateEngine['createJavaScriptEvaluatorBlock'](applyBindingsToNextSiblingScript) + tagToRetain;\n    }\n\n    return {\n        ensureTemplateIsRewritten: function (template, templateEngine, templateDocument) {\n            if (!templateEngine['isTemplateRewritten'](template, templateDocument))\n                templateEngine['rewriteTemplate'](template, function (htmlString) {\n                    return ko.templateRewriting.memoizeBindingAttributeSyntax(htmlString, templateEngine);\n                }, templateDocument);\n        },\n\n        memoizeBindingAttributeSyntax: function (htmlString, templateEngine) {\n            return htmlString.replace(memoizeDataBindingAttributeSyntaxRegex, function () {\n                return constructMemoizedTagReplacement(/* dataBindAttributeValue: */ arguments[6], /* tagToRetain: */ arguments[1], templateEngine);\n            }).replace(memoizeVirtualContainerBindingSyntaxRegex, function() {\n                return constructMemoizedTagReplacement(/* dataBindAttributeValue: */ arguments[1], /* tagToRetain: */ \"<!-- ko -->\", templateEngine);\n            });\n        },\n\n        applyMemoizedBindingsToNextSibling: function (bindings) {\n            return ko.memoization.memoize(function (domNode, bindingContext) {\n                if (domNode.nextSibling)\n                    ko.applyBindingsToNode(domNode.nextSibling, bindings, bindingContext);\n            });\n        }\n    }\n})();\n\n\n// Exported only because it has to be referenced by string lookup from within rewritten template\nko.exportSymbol('__tr_ambtns', ko.templateRewriting.applyMemoizedBindingsToNextSibling);\n(function() {\n    // A template source represents a read/write way of accessing a template. This is to eliminate the need for template loading/saving\n    // logic to be duplicated in every template engine (and means they can all work with anonymous templates, etc.)\n    //\n    // Two are provided by default:\n    //  1. ko.templateSources.domElement       - reads/writes the text content of an arbitrary DOM element\n    //  2. ko.templateSources.anonymousElement - uses ko.utils.domData to read/write text *associated* with the DOM element, but\n    //                                           without reading/writing the actual element text content, since it will be overwritten\n    //                                           with the rendered template output.\n    // You can implement your own template source if you want to fetch/store templates somewhere other than in DOM elements.\n    // Template sources need to have the following functions:\n    //   text() \t\t\t- returns the template text from your storage location\n    //   text(value)\t\t- writes the supplied template text to your storage location\n    //   data(key)\t\t\t- reads values stored using data(key, value) - see below\n    //   data(key, value)\t- associates \"value\" with this template and the key \"key\". Is used to store information like \"isRewritten\".\n    //\n    // Optionally, template sources can also have the following functions:\n    //   nodes()            - returns a DOM element containing the nodes of this template, where available\n    //   nodes(value)       - writes the given DOM element to your storage location\n    // If a DOM element is available for a given template source, template engines are encouraged to use it in preference over text()\n    // for improved speed. However, all templateSources must supply text() even if they don't supply nodes().\n    //\n    // Once you've implemented a templateSource, make your template engine use it by subclassing whatever template engine you were\n    // using and overriding \"makeTemplateSource\" to return an instance of your custom template source.\n\n    ko.templateSources = {};\n\n    // ---- ko.templateSources.domElement -----\n\n    ko.templateSources.domElement = function(element) {\n        this.domElement = element;\n    }\n\n    ko.templateSources.domElement.prototype['text'] = function(/* valueToWrite */) {\n        var tagNameLower = ko.utils.tagNameLower(this.domElement),\n            elemContentsProperty = tagNameLower === \"script\" ? \"text\"\n                                 : tagNameLower === \"textarea\" ? \"value\"\n                                 : \"innerHTML\";\n\n        if (arguments.length == 0) {\n            return this.domElement[elemContentsProperty];\n        } else {\n            var valueToWrite = arguments[0];\n            if (elemContentsProperty === \"innerHTML\")\n                ko.utils.setHtml(this.domElement, valueToWrite);\n            else\n                this.domElement[elemContentsProperty] = valueToWrite;\n        }\n    };\n\n    ko.templateSources.domElement.prototype['data'] = function(key /*, valueToWrite */) {\n        if (arguments.length === 1) {\n            return ko.utils.domData.get(this.domElement, \"templateSourceData_\" + key);\n        } else {\n            ko.utils.domData.set(this.domElement, \"templateSourceData_\" + key, arguments[1]);\n        }\n    };\n\n    // ---- ko.templateSources.anonymousTemplate -----\n    // Anonymous templates are normally saved/retrieved as DOM nodes through \"nodes\".\n    // For compatibility, you can also read \"text\"; it will be serialized from the nodes on demand.\n    // Writing to \"text\" is still supported, but then the template data will not be available as DOM nodes.\n\n    var anonymousTemplatesDomDataKey = \"__ko_anon_template__\";\n    ko.templateSources.anonymousTemplate = function(element) {\n        this.domElement = element;\n    }\n    ko.templateSources.anonymousTemplate.prototype = new ko.templateSources.domElement();\n    ko.templateSources.anonymousTemplate.prototype['text'] = function(/* valueToWrite */) {\n        if (arguments.length == 0) {\n            var templateData = ko.utils.domData.get(this.domElement, anonymousTemplatesDomDataKey) || {};\n            if (templateData.textData === undefined && templateData.containerData)\n                templateData.textData = templateData.containerData.innerHTML;\n            return templateData.textData;\n        } else {\n            var valueToWrite = arguments[0];\n            ko.utils.domData.set(this.domElement, anonymousTemplatesDomDataKey, {textData: valueToWrite});\n        }\n    };\n    ko.templateSources.domElement.prototype['nodes'] = function(/* valueToWrite */) {\n        if (arguments.length == 0) {\n            var templateData = ko.utils.domData.get(this.domElement, anonymousTemplatesDomDataKey) || {};\n            return templateData.containerData;\n        } else {\n            var valueToWrite = arguments[0];\n            ko.utils.domData.set(this.domElement, anonymousTemplatesDomDataKey, {containerData: valueToWrite});\n        }\n    };\n\n    ko.exportSymbol('templateSources', ko.templateSources);\n    ko.exportSymbol('templateSources.domElement', ko.templateSources.domElement);\n    ko.exportSymbol('templateSources.anonymousTemplate', ko.templateSources.anonymousTemplate);\n})();\n(function () {\n    var _templateEngine;\n    ko.setTemplateEngine = function (templateEngine) {\n        if ((templateEngine != undefined) && !(templateEngine instanceof ko.templateEngine))\n            throw new Error(\"templateEngine must inherit from ko.templateEngine\");\n        _templateEngine = templateEngine;\n    }\n\n    function invokeForEachNodeOrCommentInContinuousRange(firstNode, lastNode, action) {\n        var node, nextInQueue = firstNode, firstOutOfRangeNode = ko.virtualElements.nextSibling(lastNode);\n        while (nextInQueue && ((node = nextInQueue) !== firstOutOfRangeNode)) {\n            nextInQueue = ko.virtualElements.nextSibling(node);\n            if (node.nodeType === 1 || node.nodeType === 8)\n                action(node);\n        }\n    }\n\n    function activateBindingsOnContinuousNodeArray(continuousNodeArray, bindingContext) {\n        // To be used on any nodes that have been rendered by a template and have been inserted into some parent element\n        // Walks through continuousNodeArray (which *must* be continuous, i.e., an uninterrupted sequence of sibling nodes, because\n        // the algorithm for walking them relies on this), and for each top-level item in the virtual-element sense,\n        // (1) Does a regular \"applyBindings\" to associate bindingContext with this node and to activate any non-memoized bindings\n        // (2) Unmemoizes any memos in the DOM subtree (e.g., to activate bindings that had been memoized during template rewriting)\n\n        if (continuousNodeArray.length) {\n            var firstNode = continuousNodeArray[0], lastNode = continuousNodeArray[continuousNodeArray.length - 1];\n\n            // Need to applyBindings *before* unmemoziation, because unmemoization might introduce extra nodes (that we don't want to re-bind)\n            // whereas a regular applyBindings won't introduce new memoized nodes\n            invokeForEachNodeOrCommentInContinuousRange(firstNode, lastNode, function(node) {\n                ko.applyBindings(bindingContext, node);\n            });\n            invokeForEachNodeOrCommentInContinuousRange(firstNode, lastNode, function(node) {\n                ko.memoization.unmemoizeDomNodeAndDescendants(node, [bindingContext]);\n            });\n        }\n    }\n\n    function getFirstNodeFromPossibleArray(nodeOrNodeArray) {\n        return nodeOrNodeArray.nodeType ? nodeOrNodeArray\n                                        : nodeOrNodeArray.length > 0 ? nodeOrNodeArray[0]\n                                        : null;\n    }\n\n    function executeTemplate(targetNodeOrNodeArray, renderMode, template, bindingContext, options) {\n        options = options || {};\n        var firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);\n        var templateDocument = firstTargetNode && firstTargetNode.ownerDocument;\n        var templateEngineToUse = (options['templateEngine'] || _templateEngine);\n        ko.templateRewriting.ensureTemplateIsRewritten(template, templateEngineToUse, templateDocument);\n        var renderedNodesArray = templateEngineToUse['renderTemplate'](template, bindingContext, options, templateDocument);\n\n        // Loosely check result is an array of DOM nodes\n        if ((typeof renderedNodesArray.length != \"number\") || (renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType != \"number\"))\n            throw new Error(\"Template engine must return an array of DOM nodes\");\n\n        var haveAddedNodesToParent = false;\n        switch (renderMode) {\n            case \"replaceChildren\":\n                ko.virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);\n                haveAddedNodesToParent = true;\n                break;\n            case \"replaceNode\":\n                ko.utils.replaceDomNodes(targetNodeOrNodeArray, renderedNodesArray);\n                haveAddedNodesToParent = true;\n                break;\n            case \"ignoreTargetNode\": break;\n            default:\n                throw new Error(\"Unknown renderMode: \" + renderMode);\n        }\n\n        if (haveAddedNodesToParent) {\n            activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext);\n            if (options['afterRender'])\n                ko.dependencyDetection.ignore(options['afterRender'], null, [renderedNodesArray, bindingContext['$data']]);\n        }\n\n        return renderedNodesArray;\n    }\n\n    ko.renderTemplate = function (template, dataOrBindingContext, options, targetNodeOrNodeArray, renderMode) {\n        options = options || {};\n        if ((options['templateEngine'] || _templateEngine) == undefined)\n            throw new Error(\"Set a template engine before calling renderTemplate\");\n        renderMode = renderMode || \"replaceChildren\";\n\n        if (targetNodeOrNodeArray) {\n            var firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);\n\n            var whenToDispose = function () { return (!firstTargetNode) || !ko.utils.domNodeIsAttachedToDocument(firstTargetNode); }; // Passive disposal (on next evaluation)\n            var activelyDisposeWhenNodeIsRemoved = (firstTargetNode && renderMode == \"replaceNode\") ? firstTargetNode.parentNode : firstTargetNode;\n\n            return ko.dependentObservable( // So the DOM is automatically updated when any dependency changes\n                function () {\n                    // Ensure we've got a proper binding context to work with\n                    var bindingContext = (dataOrBindingContext && (dataOrBindingContext instanceof ko.bindingContext))\n                        ? dataOrBindingContext\n                        : new ko.bindingContext(ko.utils.unwrapObservable(dataOrBindingContext));\n\n                    // Support selecting template as a function of the data being rendered\n                    var templateName = typeof(template) == 'function' ? template(bindingContext['$data'], bindingContext) : template;\n\n                    var renderedNodesArray = executeTemplate(targetNodeOrNodeArray, renderMode, templateName, bindingContext, options);\n                    if (renderMode == \"replaceNode\") {\n                        targetNodeOrNodeArray = renderedNodesArray;\n                        firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);\n                    }\n                },\n                null,\n                { disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: activelyDisposeWhenNodeIsRemoved }\n            );\n        } else {\n            // We don't yet have a DOM node to evaluate, so use a memo and render the template later when there is a DOM node\n            return ko.memoization.memoize(function (domNode) {\n                ko.renderTemplate(template, dataOrBindingContext, options, domNode, \"replaceNode\");\n            });\n        }\n    };\n\n    ko.renderTemplateForEach = function (template, arrayOrObservableArray, options, targetNode, parentBindingContext) {\n        // Since setDomNodeChildrenFromArrayMapping always calls executeTemplateForArrayItem and then\n        // activateBindingsCallback for added items, we can store the binding context in the former to use in the latter.\n        var arrayItemContext;\n\n        // This will be called by setDomNodeChildrenFromArrayMapping to get the nodes to add to targetNode\n        var executeTemplateForArrayItem = function (arrayValue, index) {\n            // Support selecting template as a function of the data being rendered\n            arrayItemContext = parentBindingContext['createChildContext'](ko.utils.unwrapObservable(arrayValue), options['as']);\n            arrayItemContext['$index'] = index;\n            var templateName = typeof(template) == 'function' ? template(arrayValue, arrayItemContext) : template;\n            return executeTemplate(null, \"ignoreTargetNode\", templateName, arrayItemContext, options);\n        }\n\n        // This will be called whenever setDomNodeChildrenFromArrayMapping has added nodes to targetNode\n        var activateBindingsCallback = function(arrayValue, addedNodesArray, index) {\n            activateBindingsOnContinuousNodeArray(addedNodesArray, arrayItemContext);\n            if (options['afterRender'])\n                options['afterRender'](addedNodesArray, arrayValue);\n        };\n\n        return ko.dependentObservable(function () {\n            var unwrappedArray = ko.utils.unwrapObservable(arrayOrObservableArray) || [];\n            if (typeof unwrappedArray.length == \"undefined\") // Coerce single value into array\n                unwrappedArray = [unwrappedArray];\n\n            // Filter out any entries marked as destroyed\n            var filteredArray = ko.utils.arrayFilter(unwrappedArray, function(item) {\n                return options['includeDestroyed'] || item === undefined || item === null || !ko.utils.unwrapObservable(item['_destroy']);\n            });\n\n            // Call setDomNodeChildrenFromArrayMapping, ignoring any observables unwrapped within (most likely from a callback function).\n            // If the array items are observables, though, they will be unwrapped in executeTemplateForArrayItem and managed within setDomNodeChildrenFromArrayMapping.\n            ko.dependencyDetection.ignore(ko.utils.setDomNodeChildrenFromArrayMapping, null, [targetNode, filteredArray, executeTemplateForArrayItem, options, activateBindingsCallback]);\n\n        }, null, { disposeWhenNodeIsRemoved: targetNode });\n    };\n\n    var templateComputedDomDataKey = '__ko__templateComputedDomDataKey__';\n    function disposeOldComputedAndStoreNewOne(element, newComputed) {\n        var oldComputed = ko.utils.domData.get(element, templateComputedDomDataKey);\n        if (oldComputed && (typeof(oldComputed.dispose) == 'function'))\n            oldComputed.dispose();\n        ko.utils.domData.set(element, templateComputedDomDataKey, (newComputed && newComputed.isActive()) ? newComputed : undefined);\n    }\n\n    ko.bindingHandlers['template'] = {\n        'init': function(element, valueAccessor) {\n            // Support anonymous templates\n            var bindingValue = ko.utils.unwrapObservable(valueAccessor());\n            if ((typeof bindingValue != \"string\") && (!bindingValue['name']) && (element.nodeType == 1 || element.nodeType == 8)) {\n                // It's an anonymous template - store the element contents, then clear the element\n                var templateNodes = element.nodeType == 1 ? element.childNodes : ko.virtualElements.childNodes(element),\n                    container = ko.utils.moveCleanedNodesToContainerElement(templateNodes); // This also removes the nodes from their current parent\n                new ko.templateSources.anonymousTemplate(element)['nodes'](container);\n            }\n            return { 'controlsDescendantBindings': true };\n        },\n        'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\n            var templateName = ko.utils.unwrapObservable(valueAccessor()),\n                options = {},\n                shouldDisplay = true,\n                dataValue,\n                templateComputed = null;\n\n            if (typeof templateName != \"string\") {\n                options = templateName;\n                templateName = options['name'];\n\n                // Support \"if\"/\"ifnot\" conditions\n                if ('if' in options)\n                    shouldDisplay = ko.utils.unwrapObservable(options['if']);\n                if (shouldDisplay && 'ifnot' in options)\n                    shouldDisplay = !ko.utils.unwrapObservable(options['ifnot']);\n\n                dataValue = ko.utils.unwrapObservable(options['data']);\n            }\n\n            if ('foreach' in options) {\n                // Render once for each data point (treating data set as empty if shouldDisplay==false)\n                var dataArray = (shouldDisplay && options['foreach']) || [];\n                templateComputed = ko.renderTemplateForEach(templateName || element, dataArray, options, element, bindingContext);\n            } else if (!shouldDisplay) {\n                ko.virtualElements.emptyNode(element);\n            } else {\n                // Render once for this single data point (or use the viewModel if no data was provided)\n                var innerBindingContext = ('data' in options) ?\n                    bindingContext['createChildContext'](dataValue, options['as']) :  // Given an explitit 'data' value, we create a child binding context for it\n                    bindingContext;                                                        // Given no explicit 'data' value, we retain the same binding context\n                templateComputed = ko.renderTemplate(templateName || element, innerBindingContext, options, element);\n            }\n\n            // It only makes sense to have a single template computed per element (otherwise which one should have its output displayed?)\n            disposeOldComputedAndStoreNewOne(element, templateComputed);\n        }\n    };\n\n    // Anonymous templates can't be rewritten. Give a nice error message if you try to do it.\n    ko.expressionRewriting.bindingRewriteValidators['template'] = function(bindingValue) {\n        var parsedBindingValue = ko.expressionRewriting.parseObjectLiteral(bindingValue);\n\n        if ((parsedBindingValue.length == 1) && parsedBindingValue[0]['unknown'])\n            return null; // It looks like a string literal, not an object literal, so treat it as a named template (which is allowed for rewriting)\n\n        if (ko.expressionRewriting.keyValueArrayContainsKey(parsedBindingValue, \"name\"))\n            return null; // Named templates can be rewritten, so return \"no error\"\n        return \"This template engine does not support anonymous templates nested within its templates\";\n    };\n\n    ko.virtualElements.allowedBindings['template'] = true;\n})();\n\nko.exportSymbol('setTemplateEngine', ko.setTemplateEngine);\nko.exportSymbol('renderTemplate', ko.renderTemplate);\n\nko.utils.compareArrays = (function () {\n    var statusNotInOld = 'added', statusNotInNew = 'deleted';\n\n    // Simple calculation based on Levenshtein distance.\n    function compareArrays(oldArray, newArray, dontLimitMoves) {\n        oldArray = oldArray || [];\n        newArray = newArray || [];\n\n        if (oldArray.length <= newArray.length)\n            return compareSmallArrayToBigArray(oldArray, newArray, statusNotInOld, statusNotInNew, dontLimitMoves);\n        else\n            return compareSmallArrayToBigArray(newArray, oldArray, statusNotInNew, statusNotInOld, dontLimitMoves);\n    }\n\n    function compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, dontLimitMoves) {\n        var myMin = Math.min,\n            myMax = Math.max,\n            editDistanceMatrix = [],\n            smlIndex, smlIndexMax = smlArray.length,\n            bigIndex, bigIndexMax = bigArray.length,\n            compareRange = (bigIndexMax - smlIndexMax) || 1,\n            maxDistance = smlIndexMax + bigIndexMax + 1,\n            thisRow, lastRow,\n            bigIndexMaxForRow, bigIndexMinForRow;\n\n        for (smlIndex = 0; smlIndex <= smlIndexMax; smlIndex++) {\n            lastRow = thisRow;\n            editDistanceMatrix.push(thisRow = []);\n            bigIndexMaxForRow = myMin(bigIndexMax, smlIndex + compareRange);\n            bigIndexMinForRow = myMax(0, smlIndex - 1);\n            for (bigIndex = bigIndexMinForRow; bigIndex <= bigIndexMaxForRow; bigIndex++) {\n                if (!bigIndex)\n                    thisRow[bigIndex] = smlIndex + 1;\n                else if (!smlIndex)  // Top row - transform empty array into new array via additions\n                    thisRow[bigIndex] = bigIndex + 1;\n                else if (smlArray[smlIndex - 1] === bigArray[bigIndex - 1])\n                    thisRow[bigIndex] = lastRow[bigIndex - 1];                  // copy value (no edit)\n                else {\n                    var northDistance = lastRow[bigIndex] || maxDistance;       // not in big (deletion)\n                    var westDistance = thisRow[bigIndex - 1] || maxDistance;    // not in small (addition)\n                    thisRow[bigIndex] = myMin(northDistance, westDistance) + 1;\n                }\n            }\n        }\n\n        var editScript = [], meMinusOne, notInSml = [], notInBig = [];\n        for (smlIndex = smlIndexMax, bigIndex = bigIndexMax; smlIndex || bigIndex;) {\n            meMinusOne = editDistanceMatrix[smlIndex][bigIndex] - 1;\n            if (bigIndex && meMinusOne === editDistanceMatrix[smlIndex][bigIndex-1]) {\n                notInSml.push(editScript[editScript.length] = {     // added\n                    'status': statusNotInSml,\n                    'value': bigArray[--bigIndex],\n                    'index': bigIndex });\n            } else if (smlIndex && meMinusOne === editDistanceMatrix[smlIndex - 1][bigIndex]) {\n                notInBig.push(editScript[editScript.length] = {     // deleted\n                    'status': statusNotInBig,\n                    'value': smlArray[--smlIndex],\n                    'index': smlIndex });\n            } else {\n                editScript.push({\n                    'status': \"retained\",\n                    'value': bigArray[--bigIndex] });\n                --smlIndex;\n            }\n        }\n\n        if (notInSml.length && notInBig.length) {\n            // Set a limit on the number of consecutive non-matching comparisons; having it a multiple of\n            // smlIndexMax keeps the time complexity of this algorithm linear.\n            var limitFailedCompares = smlIndexMax * 10, failedCompares,\n                a, d, notInSmlItem, notInBigItem;\n            // Go through the items that have been added and deleted and try to find matches between them.\n            for (failedCompares = a = 0; (dontLimitMoves || failedCompares < limitFailedCompares) && (notInSmlItem = notInSml[a]); a++) {\n                for (d = 0; notInBigItem = notInBig[d]; d++) {\n                    if (notInSmlItem['value'] === notInBigItem['value']) {\n                        notInSmlItem['moved'] = notInBigItem['index'];\n                        notInBigItem['moved'] = notInSmlItem['index'];\n                        notInBig.splice(d,1);       // This item is marked as moved; so remove it from notInBig list\n                        failedCompares = d = 0;     // Reset failed compares count because we're checking for consecutive failures\n                        break;\n                    }\n                }\n                failedCompares += d;\n            }\n        }\n        return editScript.reverse();\n    }\n\n    return compareArrays;\n})();\n\nko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);\n\n(function () {\n    // Objective:\n    // * Given an input array, a container DOM node, and a function from array elements to arrays of DOM nodes,\n    //   map the array elements to arrays of DOM nodes, concatenate together all these arrays, and use them to populate the container DOM node\n    // * Next time we're given the same combination of things (with the array possibly having mutated), update the container DOM node\n    //   so that its children is again the concatenation of the mappings of the array elements, but don't re-map any array elements that we\n    //   previously mapped - retain those nodes, and just insert/delete other ones\n\n    // \"callbackAfterAddingNodes\" will be invoked after any \"mapping\"-generated nodes are inserted into the container node\n    // You can use this, for example, to activate bindings on those nodes.\n\n    function fixUpNodesToBeMovedOrRemoved(contiguousNodeArray) {\n        // Before moving, deleting, or replacing a set of nodes that were previously outputted by the \"map\" function, we have to reconcile\n        // them against what is in the DOM right now. It may be that some of the nodes have already been removed from the document,\n        // or that new nodes might have been inserted in the middle, for example by a binding. Also, there may previously have been\n        // leading comment nodes (created by rewritten string-based templates) that have since been removed during binding.\n        // So, this function translates the old \"map\" output array into its best guess of what set of current DOM nodes should be removed.\n        //\n        // Rules:\n        //   [A] Any leading nodes that aren't in the document any more should be ignored\n        //       These most likely correspond to memoization nodes that were already removed during binding\n        //       See https://github.com/SteveSanderson/knockout/pull/440\n        //   [B] We want to output a contiguous series of nodes that are still in the document. So, ignore any nodes that\n        //       have already been removed, and include any nodes that have been inserted among the previous collection\n\n        // Rule [A]\n        while (contiguousNodeArray.length && !ko.utils.domNodeIsAttachedToDocument(contiguousNodeArray[0]))\n            contiguousNodeArray.splice(0, 1);\n\n        // Rule [B]\n        if (contiguousNodeArray.length > 1) {\n            // Build up the actual new contiguous node set\n            var current = contiguousNodeArray[0], last = contiguousNodeArray[contiguousNodeArray.length - 1], newContiguousSet = [current];\n            while (current !== last) {\n                current = current.nextSibling;\n                if (!current) // Won't happen, except if the developer has manually removed some DOM elements (then we're in an undefined scenario)\n                    return;\n                newContiguousSet.push(current);\n            }\n\n            // ... then mutate the input array to match this.\n            // (The following line replaces the contents of contiguousNodeArray with newContiguousSet)\n            Array.prototype.splice.apply(contiguousNodeArray, [0, contiguousNodeArray.length].concat(newContiguousSet));\n        }\n        return contiguousNodeArray;\n    }\n\n    function mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes, index) {\n        // Map this array value inside a dependentObservable so we re-map when any dependency changes\n        var mappedNodes = [];\n        var dependentObservable = ko.dependentObservable(function() {\n            var newMappedNodes = mapping(valueToMap, index) || [];\n\n            // On subsequent evaluations, just replace the previously-inserted DOM nodes\n            if (mappedNodes.length > 0) {\n                ko.utils.replaceDomNodes(fixUpNodesToBeMovedOrRemoved(mappedNodes), newMappedNodes);\n                if (callbackAfterAddingNodes)\n                    ko.dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]);\n            }\n\n            // Replace the contents of the mappedNodes array, thereby updating the record\n            // of which nodes would be deleted if valueToMap was itself later removed\n            mappedNodes.splice(0, mappedNodes.length);\n            ko.utils.arrayPushAll(mappedNodes, newMappedNodes);\n        }, null, { disposeWhenNodeIsRemoved: containerNode, disposeWhen: function() { return (mappedNodes.length == 0) || !ko.utils.domNodeIsAttachedToDocument(mappedNodes[0]) } });\n        return { mappedNodes : mappedNodes, dependentObservable : (dependentObservable.isActive() ? dependentObservable : undefined) };\n    }\n\n    var lastMappingResultDomDataKey = \"setDomNodeChildrenFromArrayMapping_lastMappingResult\";\n\n    ko.utils.setDomNodeChildrenFromArrayMapping = function (domNode, array, mapping, options, callbackAfterAddingNodes) {\n        // Compare the provided array against the previous one\n        array = array || [];\n        options = options || {};\n        var isFirstExecution = ko.utils.domData.get(domNode, lastMappingResultDomDataKey) === undefined;\n        var lastMappingResult = ko.utils.domData.get(domNode, lastMappingResultDomDataKey) || [];\n        var lastArray = ko.utils.arrayMap(lastMappingResult, function (x) { return x.arrayEntry; });\n        var editScript = ko.utils.compareArrays(lastArray, array);\n\n        // Build the new mapping result\n        var newMappingResult = [];\n        var lastMappingResultIndex = 0;\n        var newMappingResultIndex = 0;\n\n        var nodesToDelete = [];\n        var itemsToProcess = [];\n        var itemsForBeforeRemoveCallbacks = [];\n        var itemsForMoveCallbacks = [];\n        var itemsForAfterAddCallbacks = [];\n        var mapData;\n\n        function itemMovedOrRetained(editScriptIndex, oldPosition) {\n            mapData = lastMappingResult[oldPosition];\n            if (newMappingResultIndex !== oldPosition)\n                itemsForMoveCallbacks[editScriptIndex] = mapData;\n            // Since updating the index might change the nodes, do so before calling fixUpNodesToBeMovedOrRemoved\n            mapData.indexObservable(newMappingResultIndex++);\n            fixUpNodesToBeMovedOrRemoved(mapData.mappedNodes);\n            newMappingResult.push(mapData);\n            itemsToProcess.push(mapData);\n        }\n\n        function callCallback(callback, items) {\n            if (callback) {\n                for (var i = 0, n = items.length; i < n; i++) {\n                    if (items[i]) {\n                        ko.utils.arrayForEach(items[i].mappedNodes, function(node) {\n                            callback(node, i, items[i].arrayEntry);\n                        });\n                    }\n                }\n            }\n        }\n\n        for (var i = 0, editScriptItem, movedIndex; editScriptItem = editScript[i]; i++) {\n            movedIndex = editScriptItem['moved'];\n            switch (editScriptItem['status']) {\n                case \"deleted\":\n                    if (movedIndex === undefined) {\n                        mapData = lastMappingResult[lastMappingResultIndex];\n\n                        // Stop tracking changes to the mapping for these nodes\n                        if (mapData.dependentObservable)\n                            mapData.dependentObservable.dispose();\n\n                        // Queue these nodes for later removal\n                        nodesToDelete.push.apply(nodesToDelete, fixUpNodesToBeMovedOrRemoved(mapData.mappedNodes));\n                        if (options['beforeRemove']) {\n                            itemsForBeforeRemoveCallbacks[i] = mapData;\n                            itemsToProcess.push(mapData);\n                        }\n                    }\n                    lastMappingResultIndex++;\n                    break;\n\n                case \"retained\":\n                    itemMovedOrRetained(i, lastMappingResultIndex++);\n                    break;\n\n                case \"added\":\n                    if (movedIndex !== undefined) {\n                        itemMovedOrRetained(i, movedIndex);\n                    } else {\n                        mapData = { arrayEntry: editScriptItem['value'], indexObservable: ko.observable(newMappingResultIndex++) };\n                        newMappingResult.push(mapData);\n                        itemsToProcess.push(mapData);\n                        if (!isFirstExecution)\n                            itemsForAfterAddCallbacks[i] = mapData;\n                    }\n                    break;\n            }\n        }\n\n        // Call beforeMove first before any changes have been made to the DOM\n        callCallback(options['beforeMove'], itemsForMoveCallbacks);\n\n        // Next remove nodes for deleted items (or just clean if there's a beforeRemove callback)\n        ko.utils.arrayForEach(nodesToDelete, options['beforeRemove'] ? ko.cleanNode : ko.removeNode);\n\n        // Next add/reorder the remaining items (will include deleted items if there's a beforeRemove callback)\n        for (var i = 0, nextNode = ko.virtualElements.firstChild(domNode), lastNode, node; mapData = itemsToProcess[i]; i++) {\n            // Get nodes for newly added items\n            if (!mapData.mappedNodes)\n                ko.utils.extend(mapData, mapNodeAndRefreshWhenChanged(domNode, mapping, mapData.arrayEntry, callbackAfterAddingNodes, mapData.indexObservable));\n\n            // Put nodes in the right place if they aren't there already\n            for (var j = 0; node = mapData.mappedNodes[j]; nextNode = node.nextSibling, lastNode = node, j++) {\n                if (node !== nextNode)\n                    ko.virtualElements.insertAfter(domNode, node, lastNode);\n            }\n\n            // Run the callbacks for newly added nodes (for example, to apply bindings, etc.)\n            if (!mapData.initialized && callbackAfterAddingNodes) {\n                callbackAfterAddingNodes(mapData.arrayEntry, mapData.mappedNodes, mapData.indexObservable);\n                mapData.initialized = true;\n            }\n        }\n\n        // If there's a beforeRemove callback, call it after reordering.\n        // Note that we assume that the beforeRemove callback will usually be used to remove the nodes using\n        // some sort of animation, which is why we first reorder the nodes that will be removed. If the\n        // callback instead removes the nodes right away, it would be more efficient to skip reordering them.\n        // Perhaps we'll make that change in the future if this scenario becomes more common.\n        callCallback(options['beforeRemove'], itemsForBeforeRemoveCallbacks);\n\n        // Finally call afterMove and afterAdd callbacks\n        callCallback(options['afterMove'], itemsForMoveCallbacks);\n        callCallback(options['afterAdd'], itemsForAfterAddCallbacks);\n\n        // Store a copy of the array items we just considered so we can difference it next time\n        ko.utils.domData.set(domNode, lastMappingResultDomDataKey, newMappingResult);\n    }\n})();\n\nko.exportSymbol('utils.setDomNodeChildrenFromArrayMapping', ko.utils.setDomNodeChildrenFromArrayMapping);\nko.nativeTemplateEngine = function () {\n    this['allowTemplateRewriting'] = false;\n}\n\nko.nativeTemplateEngine.prototype = new ko.templateEngine();\nko.nativeTemplateEngine.prototype['renderTemplateSource'] = function (templateSource, bindingContext, options) {\n    var useNodesIfAvailable = !(ko.utils.ieVersion < 9), // IE<9 cloneNode doesn't work properly\n        templateNodesFunc = useNodesIfAvailable ? templateSource['nodes'] : null,\n        templateNodes = templateNodesFunc ? templateSource['nodes']() : null;\n\n    if (templateNodes) {\n        return ko.utils.makeArray(templateNodes.cloneNode(true).childNodes);\n    } else {\n        var templateText = templateSource['text']();\n        return ko.utils.parseHtmlFragment(templateText);\n    }\n};\n\nko.nativeTemplateEngine.instance = new ko.nativeTemplateEngine();\nko.setTemplateEngine(ko.nativeTemplateEngine.instance);\n\nko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine);\n(function() {\n    ko.jqueryTmplTemplateEngine = function () {\n        // Detect which version of jquery-tmpl you're using. Unfortunately jquery-tmpl\n        // doesn't expose a version number, so we have to infer it.\n        // Note that as of Knockout 1.3, we only support jQuery.tmpl 1.0.0pre and later,\n        // which KO internally refers to as version \"2\", so older versions are no longer detected.\n        var jQueryTmplVersion = this.jQueryTmplVersion = (function() {\n            if ((typeof(jQuery) == \"undefined\") || !(jQuery['tmpl']))\n                return 0;\n            // Since it exposes no official version number, we use our own numbering system. To be updated as jquery-tmpl evolves.\n            try {\n                if (jQuery['tmpl']['tag']['tmpl']['open'].toString().indexOf('__') >= 0) {\n                    // Since 1.0.0pre, custom tags should append markup to an array called \"__\"\n                    return 2; // Final version of jquery.tmpl\n                }\n            } catch(ex) { /* Apparently not the version we were looking for */ }\n\n            return 1; // Any older version that we don't support\n        })();\n\n        function ensureHasReferencedJQueryTemplates() {\n            if (jQueryTmplVersion < 2)\n                throw new Error(\"Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.\");\n        }\n\n        function executeTemplate(compiledTemplate, data, jQueryTemplateOptions) {\n            return jQuery['tmpl'](compiledTemplate, data, jQueryTemplateOptions);\n        }\n\n        this['renderTemplateSource'] = function(templateSource, bindingContext, options) {\n            options = options || {};\n            ensureHasReferencedJQueryTemplates();\n\n            // Ensure we have stored a precompiled version of this template (don't want to reparse on every render)\n            var precompiled = templateSource['data']('precompiled');\n            if (!precompiled) {\n                var templateText = templateSource['text']() || \"\";\n                // Wrap in \"with($whatever.koBindingContext) { ... }\"\n                templateText = \"{{ko_with $item.koBindingContext}}\" + templateText + \"{{/ko_with}}\";\n\n                precompiled = jQuery['template'](null, templateText);\n                templateSource['data']('precompiled', precompiled);\n            }\n\n            var data = [bindingContext['$data']]; // Prewrap the data in an array to stop jquery.tmpl from trying to unwrap any arrays\n            var jQueryTemplateOptions = jQuery['extend']({ 'koBindingContext': bindingContext }, options['templateOptions']);\n\n            var resultNodes = executeTemplate(precompiled, data, jQueryTemplateOptions);\n            resultNodes['appendTo'](document.createElement(\"div\")); // Using \"appendTo\" forces jQuery/jQuery.tmpl to perform necessary cleanup work\n\n            jQuery['fragments'] = {}; // Clear jQuery's fragment cache to avoid a memory leak after a large number of template renders\n            return resultNodes;\n        };\n\n        this['createJavaScriptEvaluatorBlock'] = function(script) {\n            return \"{{ko_code ((function() { return \" + script + \" })()) }}\";\n        };\n\n        this['addTemplate'] = function(templateName, templateMarkup) {\n            document.write(\"<script type='text/html' id='\" + templateName + \"'>\" + templateMarkup + \"</script>\");\n        };\n\n        if (jQueryTmplVersion > 0) {\n            jQuery['tmpl']['tag']['ko_code'] = {\n                open: \"__.push($1 || '');\"\n            };\n            jQuery['tmpl']['tag']['ko_with'] = {\n                open: \"with($1) {\",\n                close: \"} \"\n            };\n        }\n    };\n\n    ko.jqueryTmplTemplateEngine.prototype = new ko.templateEngine();\n\n    // Use this one by default *only if jquery.tmpl is referenced*\n    var jqueryTmplTemplateEngineInstance = new ko.jqueryTmplTemplateEngine();\n    if (jqueryTmplTemplateEngineInstance.jQueryTmplVersion > 0)\n        ko.setTemplateEngine(jqueryTmplTemplateEngineInstance);\n\n    ko.exportSymbol('jqueryTmplTemplateEngine', ko.jqueryTmplTemplateEngine);\n})();\n});\n})(window,document,navigator,window[\"jQuery\"]);\n})();\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/knockout-2.2.0.js",
    "content": "// Knockout JavaScript library v2.2.0\n// (c) Steven Sanderson - http://knockoutjs.com/\n// License: MIT (http://www.opensource.org/licenses/mit-license.php)\n\n(function() {function i(v){throw v;}var l=!0,n=null,q=!1;function t(v){return function(){return v}};var w=window,x=document,fa=navigator,E=window.jQuery,H=void 0;\nfunction K(v){function ga(a,d,c,e,f){var g=[],a=b.j(function(){var a=d(c,f)||[];0<g.length&&(b.a.Xa(L(g),a),e&&b.r.K(e,n,[c,a,f]));g.splice(0,g.length);b.a.P(g,a)},n,{W:a,Ja:function(){return 0==g.length||!b.a.X(g[0])}});return{M:g,j:a.oa()?a:H}}function L(a){for(;a.length&&!b.a.X(a[0]);)a.splice(0,1);if(1<a.length){for(var d=a[0],c=a[a.length-1],e=[d];d!==c;){d=d.nextSibling;if(!d)return;e.push(d)}Array.prototype.splice.apply(a,[0,a.length].concat(e))}return a}function R(a,b,c,e,f){var g=Math.min,\nh=Math.max,j=[],k,m=a.length,p,r=b.length,u=r-m||1,F=m+r+1,I,z,y;for(k=0;k<=m;k++){z=I;j.push(I=[]);y=g(r,k+u);for(p=h(0,k-1);p<=y;p++)I[p]=p?k?a[k-1]===b[p-1]?z[p-1]:g(z[p]||F,I[p-1]||F)+1:p+1:k+1}g=[];h=[];u=[];k=m;for(p=r;k||p;)r=j[k][p]-1,p&&r===j[k][p-1]?h.push(g[g.length]={status:c,value:b[--p],index:p}):k&&r===j[k-1][p]?u.push(g[g.length]={status:e,value:a[--k],index:k}):(g.push({status:\"retained\",value:b[--p]}),--k);if(h.length&&u.length)for(var a=10*m,s,b=c=0;(f||b<a)&&(s=h[c]);c++){for(e=\n0;j=u[e];e++)if(s.value===j.value){s.moved=j.index;j.moved=s.index;u.splice(e,1);b=e=0;break}b+=e}return g.reverse()}function S(a,d,c,e,f){var f=f||{},g=a&&M(a),g=g&&g.ownerDocument,h=f.templateEngine||N;b.ya.ub(c,h,g);c=h.renderTemplate(c,e,f,g);(\"number\"!=typeof c.length||0<c.length&&\"number\"!=typeof c[0].nodeType)&&i(Error(\"Template engine must return an array of DOM nodes\"));g=q;switch(d){case \"replaceChildren\":b.e.N(a,c);g=l;break;case \"replaceNode\":b.a.Xa(a,c);g=l;break;case \"ignoreTargetNode\":break;\ndefault:i(Error(\"Unknown renderMode: \"+d))}g&&(T(c,e),f.afterRender&&b.r.K(f.afterRender,n,[c,e.$data]));return c}function M(a){return a.nodeType?a:0<a.length?a[0]:n}function T(a,d){if(a.length){var c=a[0],e=a[a.length-1];U(c,e,function(a){b.Ca(d,a)});U(c,e,function(a){b.s.hb(a,[d])})}}function U(a,d,c){for(var e,d=b.e.nextSibling(d);a&&(e=a)!==d;)a=b.e.nextSibling(e),(1===e.nodeType||8===e.nodeType)&&c(e)}function V(a,d,c){for(var a=b.g.aa(a),e=b.g.Q,f=0;f<a.length;f++){var g=a[f].key;if(e.hasOwnProperty(g)){var h=\ne[g];\"function\"===typeof h?(g=h(a[f].value))&&i(Error(g)):h||i(Error(\"This template engine does not support the '\"+g+\"' binding within its templates\"))}}a=\"ko.__tr_ambtns(function($context,$element){return(function(){return{ \"+b.g.ba(a)+\" } })()})\";return c.createJavaScriptEvaluatorBlock(a)+d}function W(a,d,c,e){function f(a){return function(){return j[a]}}function g(){return j}var h=0,j,k;b.j(function(){var m=c&&c instanceof b.z?c:new b.z(b.a.d(c)),p=m.$data;e&&b.cb(a,m);if(j=(\"function\"==typeof d?\nd(m,a):d)||b.J.instance.getBindings(a,m)){if(0===h){h=1;for(var r in j){var u=b.c[r];u&&8===a.nodeType&&!b.e.I[r]&&i(Error(\"The binding '\"+r+\"' cannot be used with virtual elements\"));if(u&&\"function\"==typeof u.init&&(u=(0,u.init)(a,f(r),g,p,m))&&u.controlsDescendantBindings)k!==H&&i(Error(\"Multiple bindings (\"+k+\" and \"+r+\") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\")),k=r}h=2}if(2===h)for(r in j)(u=b.c[r])&&\"function\"==\ntypeof u.update&&(0,u.update)(a,f(r),g,p,m)}},n,{W:a});return{Mb:k===H}}function X(a,d,c){var e=l,f=1===d.nodeType;f&&b.e.Sa(d);if(f&&c||b.J.instance.nodeHasBindings(d))e=W(d,n,a,c).Mb;e&&Y(a,d,!f)}function Y(a,d,c){for(var e=b.e.firstChild(d);d=e;)e=b.e.nextSibling(d),X(a,d,c)}function Z(a,b){var c=$(a,b);return c?0<c.length?c[c.length-1].nextSibling:a.nextSibling:n}function $(a,b){for(var c=a,e=1,f=[];c=c.nextSibling;){if(G(c)&&(e--,0===e))return f;f.push(c);A(c)&&e++}b||i(Error(\"Cannot find closing comment tag to match: \"+\na.nodeValue));return n}function G(a){return 8==a.nodeType&&(J?a.text:a.nodeValue).match(ha)}function A(a){return 8==a.nodeType&&(J?a.text:a.nodeValue).match(ia)}function O(a,b){for(var c=n;a!=c;)c=a,a=a.replace(ja,function(a,c){return b[c]});return a}function ka(){var a=[],d=[];this.save=function(c,e){var f=b.a.i(a,c);0<=f?d[f]=e:(a.push(c),d.push(e))};this.get=function(c){c=b.a.i(a,c);return 0<=c?d[c]:H}}function aa(a,b,c){function e(e){var g=b(a[e]);switch(typeof g){case \"boolean\":case \"number\":case \"string\":case \"function\":f[e]=\ng;break;case \"object\":case \"undefined\":var h=c.get(g);f[e]=h!==H?h:aa(g,b,c)}}c=c||new ka;a=b(a);if(!(\"object\"==typeof a&&a!==n&&a!==H&&!(a instanceof Date)))return a;var f=a instanceof Array?[]:{};c.save(a,f);var g=a;if(g instanceof Array){for(var h=0;h<g.length;h++)e(h);\"function\"==typeof g.toJSON&&e(\"toJSON\")}else for(h in g)e(h);return f}function ba(a,d){if(a)if(8==a.nodeType){var c=b.s.Ta(a.nodeValue);c!=n&&d.push({rb:a,Eb:c})}else if(1==a.nodeType)for(var c=0,e=a.childNodes,f=e.length;c<f;c++)ba(e[c],\nd)}function P(a,d,c,e){b.c[a]={init:function(a){b.a.f.set(a,ca,{});return{controlsDescendantBindings:l}},update:function(a,g,h,j,k){var h=b.a.f.get(a,ca),g=b.a.d(g()),j=!c!==!g,m=!h.Ya;if(m||d||j!==h.pb)m&&(h.Ya=b.a.Ha(b.e.childNodes(a),l)),j?(m||b.e.N(a,b.a.Ha(h.Ya)),b.Da(e?e(k,g):k,a)):b.e.Y(a),h.pb=j}};b.g.Q[a]=q;b.e.I[a]=l}function da(a,d,c){c&&d!==b.k.q(a)&&b.k.T(a,d);d!==b.k.q(a)&&b.r.K(b.a.Aa,n,[a,\"change\"])}var b=\"undefined\"!==typeof v?v:{};b.b=function(a,d){for(var c=a.split(\".\"),e=b,f=0;f<\nc.length-1;f++)e=e[c[f]];e[c[c.length-1]]=d};b.p=function(a,b,c){a[b]=c};b.version=\"2.2.0\";b.b(\"version\",b.version);b.a=new function(){function a(a,d){if(\"input\"!==b.a.u(a)||!a.type||\"click\"!=d.toLowerCase())return q;var c=a.type;return\"checkbox\"==c||\"radio\"==c}var d=/^(\\s|\\u00A0)+|(\\s|\\u00A0)+$/g,c={},e={};c[/Firefox\\/2/i.test(fa.userAgent)?\"KeyboardEvent\":\"UIEvents\"]=[\"keyup\",\"keydown\",\"keypress\"];c.MouseEvents=\"click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave\".split(\" \");\nfor(var f in c){var g=c[f];if(g.length)for(var h=0,j=g.length;h<j;h++)e[g[h]]=f}var k={propertychange:l},m,c=3;f=x.createElement(\"div\");for(g=f.getElementsByTagName(\"i\");f.innerHTML=\"<\\!--[if gt IE \"+ ++c+\"]><i></i><![endif]--\\>\",g[0];);m=4<c?c:H;return{Ma:[\"authenticity_token\",/^__RequestVerificationToken(_.*)?$/],o:function(a,b){for(var d=0,c=a.length;d<c;d++)b(a[d])},i:function(a,b){if(\"function\"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b);for(var d=0,c=a.length;d<\nc;d++)if(a[d]===b)return d;return-1},kb:function(a,b,d){for(var c=0,e=a.length;c<e;c++)if(b.call(d,a[c]))return a[c];return n},ga:function(a,d){var c=b.a.i(a,d);0<=c&&a.splice(c,1)},Fa:function(a){for(var a=a||[],d=[],c=0,e=a.length;c<e;c++)0>b.a.i(d,a[c])&&d.push(a[c]);return d},V:function(a,b){for(var a=a||[],d=[],c=0,e=a.length;c<e;c++)d.push(b(a[c]));return d},fa:function(a,b){for(var a=a||[],d=[],c=0,e=a.length;c<e;c++)b(a[c])&&d.push(a[c]);return d},P:function(a,b){if(b instanceof Array)a.push.apply(a,\nb);else for(var d=0,c=b.length;d<c;d++)a.push(b[d]);return a},extend:function(a,b){if(b)for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);return a},ka:function(a){for(;a.firstChild;)b.removeNode(a.firstChild)},Gb:function(a){for(var a=b.a.L(a),d=x.createElement(\"div\"),c=0,e=a.length;c<e;c++)d.appendChild(b.A(a[c]));return d},Ha:function(a,d){for(var c=0,e=a.length,g=[];c<e;c++){var f=a[c].cloneNode(l);g.push(d?b.A(f):f)}return g},N:function(a,d){b.a.ka(a);if(d)for(var c=0,e=d.length;c<e;c++)a.appendChild(d[c])},\nXa:function(a,d){var c=a.nodeType?[a]:a;if(0<c.length){for(var e=c[0],g=e.parentNode,f=0,h=d.length;f<h;f++)g.insertBefore(d[f],e);f=0;for(h=c.length;f<h;f++)b.removeNode(c[f])}},ab:function(a,b){7>m?a.setAttribute(\"selected\",b):a.selected=b},D:function(a){return(a||\"\").replace(d,\"\")},Qb:function(a,d){for(var c=[],e=(a||\"\").split(d),f=0,g=e.length;f<g;f++){var h=b.a.D(e[f]);\"\"!==h&&c.push(h)}return c},Nb:function(a,b){a=a||\"\";return b.length>a.length?q:a.substring(0,b.length)===b},sb:function(a,b){if(b.compareDocumentPosition)return 16==\n(b.compareDocumentPosition(a)&16);for(;a!=n;){if(a==b)return l;a=a.parentNode}return q},X:function(a){return b.a.sb(a,a.ownerDocument)},u:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},n:function(b,d,c){var e=m&&k[d];if(!e&&\"undefined\"!=typeof E){if(a(b,d))var f=c,c=function(a,b){var d=this.checked;b&&(this.checked=b.mb!==l);f.call(this,a);this.checked=d};E(b).bind(d,c)}else!e&&\"function\"==typeof b.addEventListener?b.addEventListener(d,c,q):\"undefined\"!=typeof b.attachEvent?b.attachEvent(\"on\"+\nd,function(a){c.call(b,a)}):i(Error(\"Browser doesn't support addEventListener or attachEvent\"))},Aa:function(b,d){(!b||!b.nodeType)&&i(Error(\"element must be a DOM node when calling triggerEvent\"));if(\"undefined\"!=typeof E){var c=[];a(b,d)&&c.push({mb:b.checked});E(b).trigger(d,c)}else\"function\"==typeof x.createEvent?\"function\"==typeof b.dispatchEvent?(c=x.createEvent(e[d]||\"HTMLEvents\"),c.initEvent(d,l,l,w,0,0,0,0,0,q,q,q,q,0,b),b.dispatchEvent(c)):i(Error(\"The supplied element doesn't support dispatchEvent\")):\n\"undefined\"!=typeof b.fireEvent?(a(b,d)&&(b.checked=b.checked!==l),b.fireEvent(\"on\"+d)):i(Error(\"Browser doesn't support triggering events\"))},d:function(a){return b.$(a)?a():a},ta:function(a){return b.$(a)?a.t():a},da:function(a,d,c){if(d){var e=/[\\w-]+/g,f=a.className.match(e)||[];b.a.o(d.match(e),function(a){var d=b.a.i(f,a);0<=d?c||f.splice(d,1):c&&f.push(a)});a.className=f.join(\" \")}},bb:function(a,d){var c=b.a.d(d);if(c===n||c===H)c=\"\";if(3===a.nodeType)a.data=c;else{var e=b.e.firstChild(a);\n!e||3!=e.nodeType||b.e.nextSibling(e)?b.e.N(a,[x.createTextNode(c)]):e.data=c;b.a.vb(a)}},$a:function(a,b){a.name=b;if(7>=m)try{a.mergeAttributes(x.createElement(\"<input name='\"+a.name+\"'/>\"),q)}catch(d){}},vb:function(a){9<=m&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},tb:function(a){if(9<=m){var b=a.style.width;a.style.width=0;a.style.width=b}},Kb:function(a,d){for(var a=b.a.d(a),d=b.a.d(d),c=[],e=a;e<=d;e++)c.push(e);return c},L:function(a){for(var b=[],d=0,c=a.length;d<\nc;d++)b.push(a[d]);return b},Ob:6===m,Pb:7===m,Z:m,Na:function(a,d){for(var c=b.a.L(a.getElementsByTagName(\"input\")).concat(b.a.L(a.getElementsByTagName(\"textarea\"))),e=\"string\"==typeof d?function(a){return a.name===d}:function(a){return d.test(a.name)},f=[],g=c.length-1;0<=g;g--)e(c[g])&&f.push(c[g]);return f},Hb:function(a){return\"string\"==typeof a&&(a=b.a.D(a))?w.JSON&&w.JSON.parse?w.JSON.parse(a):(new Function(\"return \"+a))():n},wa:function(a,d,c){(\"undefined\"==typeof JSON||\"undefined\"==typeof JSON.stringify)&&\ni(Error(\"Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js\"));return JSON.stringify(b.a.d(a),d,c)},Ib:function(a,d,c){var c=c||{},e=c.params||{},f=c.includeFields||this.Ma,g=a;if(\"object\"==typeof a&&\"form\"===b.a.u(a))for(var g=a.action,h=f.length-1;0<=h;h--)for(var j=b.a.Na(a,f[h]),k=j.length-1;0<=k;k--)e[j[k].name]=j[k].value;var d=b.a.d(d),m=x.createElement(\"form\");\nm.style.display=\"none\";m.action=g;m.method=\"post\";for(var v in d)a=x.createElement(\"input\"),a.name=v,a.value=b.a.wa(b.a.d(d[v])),m.appendChild(a);for(v in e)a=x.createElement(\"input\"),a.name=v,a.value=e[v],m.appendChild(a);x.body.appendChild(m);c.submitter?c.submitter(m):m.submit();setTimeout(function(){m.parentNode.removeChild(m)},0)}}};b.b(\"utils\",b.a);b.b(\"utils.arrayForEach\",b.a.o);b.b(\"utils.arrayFirst\",b.a.kb);b.b(\"utils.arrayFilter\",b.a.fa);b.b(\"utils.arrayGetDistinctValues\",b.a.Fa);b.b(\"utils.arrayIndexOf\",\nb.a.i);b.b(\"utils.arrayMap\",b.a.V);b.b(\"utils.arrayPushAll\",b.a.P);b.b(\"utils.arrayRemoveItem\",b.a.ga);b.b(\"utils.extend\",b.a.extend);b.b(\"utils.fieldsIncludedWithJsonPost\",b.a.Ma);b.b(\"utils.getFormFields\",b.a.Na);b.b(\"utils.peekObservable\",b.a.ta);b.b(\"utils.postJson\",b.a.Ib);b.b(\"utils.parseJson\",b.a.Hb);b.b(\"utils.registerEventHandler\",b.a.n);b.b(\"utils.stringifyJson\",b.a.wa);b.b(\"utils.range\",b.a.Kb);b.b(\"utils.toggleDomNodeCssClass\",b.a.da);b.b(\"utils.triggerEvent\",b.a.Aa);b.b(\"utils.unwrapObservable\",\nb.a.d);Function.prototype.bind||(Function.prototype.bind=function(a){var b=this,c=Array.prototype.slice.call(arguments),a=c.shift();return function(){return b.apply(a,c.concat(Array.prototype.slice.call(arguments)))}});b.a.f=new function(){var a=0,d=\"__ko__\"+(new Date).getTime(),c={};return{get:function(a,d){var c=b.a.f.getAll(a,q);return c===H?H:c[d]},set:function(a,d,c){c===H&&b.a.f.getAll(a,q)===H||(b.a.f.getAll(a,l)[d]=c)},getAll:function(b,f){var g=b[d];if(!g||!(\"null\"!==g&&c[g])){if(!f)return H;\ng=b[d]=\"ko\"+a++;c[g]={}}return c[g]},clear:function(a){var b=a[d];return b?(delete c[b],a[d]=n,l):q}}};b.b(\"utils.domData\",b.a.f);b.b(\"utils.domData.clear\",b.a.f.clear);b.a.F=new function(){function a(a,d){var e=b.a.f.get(a,c);e===H&&d&&(e=[],b.a.f.set(a,c,e));return e}function d(c){var e=a(c,q);if(e)for(var e=e.slice(0),j=0;j<e.length;j++)e[j](c);b.a.f.clear(c);\"function\"==typeof E&&\"function\"==typeof E.cleanData&&E.cleanData([c]);if(f[c.nodeType])for(e=c.firstChild;c=e;)e=c.nextSibling,8===c.nodeType&&\nd(c)}var c=\"__ko_domNodeDisposal__\"+(new Date).getTime(),e={1:l,8:l,9:l},f={1:l,9:l};return{Ba:function(b,d){\"function\"!=typeof d&&i(Error(\"Callback must be a function\"));a(b,l).push(d)},Wa:function(d,e){var f=a(d,q);f&&(b.a.ga(f,e),0==f.length&&b.a.f.set(d,c,H))},A:function(a){if(e[a.nodeType]&&(d(a),f[a.nodeType])){var c=[];b.a.P(c,a.getElementsByTagName(\"*\"));for(var j=0,k=c.length;j<k;j++)d(c[j])}return a},removeNode:function(a){b.A(a);a.parentNode&&a.parentNode.removeChild(a)}}};b.A=b.a.F.A;\nb.removeNode=b.a.F.removeNode;b.b(\"cleanNode\",b.A);b.b(\"removeNode\",b.removeNode);b.b(\"utils.domNodeDisposal\",b.a.F);b.b(\"utils.domNodeDisposal.addDisposeCallback\",b.a.F.Ba);b.b(\"utils.domNodeDisposal.removeDisposeCallback\",b.a.F.Wa);b.a.sa=function(a){var d;if(\"undefined\"!=typeof E){if((d=E.clean([a]))&&d[0]){for(a=d[0];a.parentNode&&11!==a.parentNode.nodeType;)a=a.parentNode;a.parentNode&&a.parentNode.removeChild(a)}}else{var c=b.a.D(a).toLowerCase();d=x.createElement(\"div\");c=c.match(/^<(thead|tbody|tfoot)/)&&\n[1,\"<table>\",\"</table>\"]||!c.indexOf(\"<tr\")&&[2,\"<table><tbody>\",\"</tbody></table>\"]||(!c.indexOf(\"<td\")||!c.indexOf(\"<th\"))&&[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"]||[0,\"\",\"\"];a=\"ignored<div>\"+c[1]+a+c[2]+\"</div>\";for(\"function\"==typeof w.innerShiv?d.appendChild(w.innerShiv(a)):d.innerHTML=a;c[0]--;)d=d.lastChild;d=b.a.L(d.lastChild.childNodes)}return d};b.a.ca=function(a,d){b.a.ka(a);d=b.a.d(d);if(d!==n&&d!==H)if(\"string\"!=typeof d&&(d=d.toString()),\"undefined\"!=typeof E)E(a).html(d);else for(var c=\nb.a.sa(d),e=0;e<c.length;e++)a.appendChild(c[e])};b.b(\"utils.parseHtmlFragment\",b.a.sa);b.b(\"utils.setHtml\",b.a.ca);var Q={};b.s={qa:function(a){\"function\"!=typeof a&&i(Error(\"You can only pass a function to ko.memoization.memoize()\"));var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);Q[b]=a;return\"<\\!--[ko_memo:\"+b+\"]--\\>\"},gb:function(a,b){var c=Q[a];c===H&&i(Error(\"Couldn't find any memo with ID \"+a+\". Perhaps it's already been unmemoized.\"));\ntry{return c.apply(n,b||[]),l}finally{delete Q[a]}},hb:function(a,d){var c=[];ba(a,c);for(var e=0,f=c.length;e<f;e++){var g=c[e].rb,h=[g];d&&b.a.P(h,d);b.s.gb(c[e].Eb,h);g.nodeValue=\"\";g.parentNode&&g.parentNode.removeChild(g)}},Ta:function(a){return(a=a.match(/^\\[ko_memo\\:(.*?)\\]$/))?a[1]:n}};b.b(\"memoization\",b.s);b.b(\"memoization.memoize\",b.s.qa);b.b(\"memoization.unmemoize\",b.s.gb);b.b(\"memoization.parseMemoText\",b.s.Ta);b.b(\"memoization.unmemoizeDomNodeAndDescendants\",b.s.hb);b.La={throttle:function(a,\nd){a.throttleEvaluation=d;var c=n;return b.j({read:a,write:function(b){clearTimeout(c);c=setTimeout(function(){a(b)},d)}})},notify:function(a,d){a.equalityComparer=\"always\"==d?t(q):b.m.fn.equalityComparer;return a}};b.b(\"extenders\",b.La);b.eb=function(a,d,c){this.target=a;this.ha=d;this.qb=c;b.p(this,\"dispose\",this.B)};b.eb.prototype.B=function(){this.Bb=l;this.qb()};b.S=function(){this.w={};b.a.extend(this,b.S.fn);b.p(this,\"subscribe\",this.xa);b.p(this,\"extend\",this.extend);b.p(this,\"getSubscriptionsCount\",\nthis.xb)};b.S.fn={xa:function(a,d,c){var c=c||\"change\",a=d?a.bind(d):a,e=new b.eb(this,a,function(){b.a.ga(this.w[c],e)}.bind(this));this.w[c]||(this.w[c]=[]);this.w[c].push(e);return e},notifySubscribers:function(a,d){d=d||\"change\";this.w[d]&&b.r.K(function(){b.a.o(this.w[d].slice(0),function(b){b&&b.Bb!==l&&b.ha(a)})},this)},xb:function(){var a=0,b;for(b in this.w)this.w.hasOwnProperty(b)&&(a+=this.w[b].length);return a},extend:function(a){var d=this;if(a)for(var c in a){var e=b.La[c];\"function\"==\ntypeof e&&(d=e(d,a[c]))}return d}};b.Pa=function(a){return\"function\"==typeof a.xa&&\"function\"==typeof a.notifySubscribers};b.b(\"subscribable\",b.S);b.b(\"isSubscribable\",b.Pa);var B=[];b.r={lb:function(a){B.push({ha:a,Ka:[]})},end:function(){B.pop()},Va:function(a){b.Pa(a)||i(Error(\"Only subscribable things can act as dependencies\"));if(0<B.length){var d=B[B.length-1];d&&!(0<=b.a.i(d.Ka,a))&&(d.Ka.push(a),d.ha(a))}},K:function(a,b,c){try{return B.push(n),a.apply(b,c||[])}finally{B.pop()}}};var la={undefined:l,\n\"boolean\":l,number:l,string:l};b.m=function(a){function d(){if(0<arguments.length){if(!d.equalityComparer||!d.equalityComparer(c,arguments[0]))d.H(),c=arguments[0],d.G();return this}b.r.Va(d);return c}var c=a;b.S.call(d);d.t=function(){return c};d.G=function(){d.notifySubscribers(c)};d.H=function(){d.notifySubscribers(c,\"beforeChange\")};b.a.extend(d,b.m.fn);b.p(d,\"peek\",d.t);b.p(d,\"valueHasMutated\",d.G);b.p(d,\"valueWillMutate\",d.H);return d};b.m.fn={equalityComparer:function(a,b){return a===n||typeof a in\nla?a===b:q}};var D=b.m.Jb=\"__ko_proto__\";b.m.fn[D]=b.m;b.la=function(a,d){return a===n||a===H||a[D]===H?q:a[D]===d?l:b.la(a[D],d)};b.$=function(a){return b.la(a,b.m)};b.Qa=function(a){return\"function\"==typeof a&&a[D]===b.m||\"function\"==typeof a&&a[D]===b.j&&a.yb?l:q};b.b(\"observable\",b.m);b.b(\"isObservable\",b.$);b.b(\"isWriteableObservable\",b.Qa);b.R=function(a){0==arguments.length&&(a=[]);a!==n&&(a!==H&&!(\"length\"in a))&&i(Error(\"The argument passed when initializing an observable array must be an array, or null, or undefined.\"));\nvar d=b.m(a);b.a.extend(d,b.R.fn);return d};b.R.fn={remove:function(a){for(var b=this.t(),c=[],e=\"function\"==typeof a?a:function(b){return b===a},f=0;f<b.length;f++){var g=b[f];e(g)&&(0===c.length&&this.H(),c.push(g),b.splice(f,1),f--)}c.length&&this.G();return c},removeAll:function(a){if(a===H){var d=this.t(),c=d.slice(0);this.H();d.splice(0,d.length);this.G();return c}return!a?[]:this.remove(function(d){return 0<=b.a.i(a,d)})},destroy:function(a){var b=this.t(),c=\"function\"==typeof a?a:function(b){return b===\na};this.H();for(var e=b.length-1;0<=e;e--)c(b[e])&&(b[e]._destroy=l);this.G()},destroyAll:function(a){return a===H?this.destroy(t(l)):!a?[]:this.destroy(function(d){return 0<=b.a.i(a,d)})},indexOf:function(a){var d=this();return b.a.i(d,a)},replace:function(a,b){var c=this.indexOf(a);0<=c&&(this.H(),this.t()[c]=b,this.G())}};b.a.o(\"pop push reverse shift sort splice unshift\".split(\" \"),function(a){b.R.fn[a]=function(){var b=this.t();this.H();b=b[a].apply(b,arguments);this.G();return b}});b.a.o([\"slice\"],\nfunction(a){b.R.fn[a]=function(){var b=this();return b[a].apply(b,arguments)}});b.b(\"observableArray\",b.R);b.j=function(a,d,c){function e(){b.a.o(y,function(a){a.B()});y=[]}function f(){var a=h.throttleEvaluation;a&&0<=a?(clearTimeout(s),s=setTimeout(g,a)):g()}function g(){if(!p)if(m&&v())z();else{p=l;try{var a=b.a.V(y,function(a){return a.target});b.r.lb(function(c){var d;0<=(d=b.a.i(a,c))?a[d]=H:y.push(c.xa(f))});for(var c=r.call(d),e=a.length-1;0<=e;e--)a[e]&&y.splice(e,1)[0].B();m=l;h.notifySubscribers(k,\n\"beforeChange\");k=c}finally{b.r.end()}h.notifySubscribers(k);p=q;y.length||z()}}function h(){if(0<arguments.length)return\"function\"===typeof u?u.apply(d,arguments):i(Error(\"Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\")),this;m||g();b.r.Va(h);return k}function j(){return!m||0<y.length}var k,m=q,p=q,r=a;r&&\"object\"==typeof r?(c=r,r=c.read):(c=c||{},r||(r=c.read));\"function\"!=typeof r&&i(Error(\"Pass a function that returns the value of the ko.computed\"));\nvar u=c.write,F=c.disposeWhenNodeIsRemoved||c.W||n,v=c.disposeWhen||c.Ja||t(q),z=e,y=[],s=n;d||(d=c.owner);h.t=function(){m||g();return k};h.wb=function(){return y.length};h.yb=\"function\"===typeof c.write;h.B=function(){z()};h.oa=j;b.S.call(h);b.a.extend(h,b.j.fn);b.p(h,\"peek\",h.t);b.p(h,\"dispose\",h.B);b.p(h,\"isActive\",h.oa);b.p(h,\"getDependenciesCount\",h.wb);c.deferEvaluation!==l&&g();if(F&&j()){z=function(){b.a.F.Wa(F,arguments.callee);e()};b.a.F.Ba(F,z);var C=v,v=function(){return!b.a.X(F)||C()}}return h};\nb.Ab=function(a){return b.la(a,b.j)};v=b.m.Jb;b.j[v]=b.m;b.j.fn={};b.j.fn[v]=b.j;b.b(\"dependentObservable\",b.j);b.b(\"computed\",b.j);b.b(\"isComputed\",b.Ab);b.fb=function(a){0==arguments.length&&i(Error(\"When calling ko.toJS, pass the object you want to convert.\"));return aa(a,function(a){for(var c=0;b.$(a)&&10>c;c++)a=a();return a})};b.toJSON=function(a,d,c){a=b.fb(a);return b.a.wa(a,d,c)};b.b(\"toJS\",b.fb);b.b(\"toJSON\",b.toJSON);b.k={q:function(a){switch(b.a.u(a)){case \"option\":return a.__ko__hasDomDataOptionValue__===\nl?b.a.f.get(a,b.c.options.ra):7>=b.a.Z?a.getAttributeNode(\"value\").specified?a.value:a.text:a.value;case \"select\":return 0<=a.selectedIndex?b.k.q(a.options[a.selectedIndex]):H;default:return a.value}},T:function(a,d){switch(b.a.u(a)){case \"option\":switch(typeof d){case \"string\":b.a.f.set(a,b.c.options.ra,H);\"__ko__hasDomDataOptionValue__\"in a&&delete a.__ko__hasDomDataOptionValue__;a.value=d;break;default:b.a.f.set(a,b.c.options.ra,d),a.__ko__hasDomDataOptionValue__=l,a.value=\"number\"===typeof d?\nd:\"\"}break;case \"select\":for(var c=a.options.length-1;0<=c;c--)if(b.k.q(a.options[c])==d){a.selectedIndex=c;break}break;default:if(d===n||d===H)d=\"\";a.value=d}}};b.b(\"selectExtensions\",b.k);b.b(\"selectExtensions.readValue\",b.k.q);b.b(\"selectExtensions.writeValue\",b.k.T);var ja=/\\@ko_token_(\\d+)\\@/g,ma=[\"true\",\"false\"],na=/^(?:[$_a-z][$\\w]*|(.+)(\\.\\s*[$_a-z][$\\w]*|\\[.+\\]))$/i;b.g={Q:[],aa:function(a){var d=b.a.D(a);if(3>d.length)return[];\"{\"===d.charAt(0)&&(d=d.substring(1,d.length-1));for(var a=[],\nc=n,e,f=0;f<d.length;f++){var g=d.charAt(f);if(c===n)switch(g){case '\"':case \"'\":case \"/\":c=f,e=g}else if(g==e&&\"\\\\\"!==d.charAt(f-1)){g=d.substring(c,f+1);a.push(g);var h=\"@ko_token_\"+(a.length-1)+\"@\",d=d.substring(0,c)+h+d.substring(f+1),f=f-(g.length-h.length),c=n}}e=c=n;for(var j=0,k=n,f=0;f<d.length;f++){g=d.charAt(f);if(c===n)switch(g){case \"{\":c=f;k=g;e=\"}\";break;case \"(\":c=f;k=g;e=\")\";break;case \"[\":c=f,k=g,e=\"]\"}g===k?j++:g===e&&(j--,0===j&&(g=d.substring(c,f+1),a.push(g),h=\"@ko_token_\"+(a.length-\n1)+\"@\",d=d.substring(0,c)+h+d.substring(f+1),f-=g.length-h.length,c=n))}e=[];d=d.split(\",\");c=0;for(f=d.length;c<f;c++)j=d[c],k=j.indexOf(\":\"),0<k&&k<j.length-1?(g=j.substring(k+1),e.push({key:O(j.substring(0,k),a),value:O(g,a)})):e.push({unknown:O(j,a)});return e},ba:function(a){for(var d=\"string\"===typeof a?b.g.aa(a):a,c=[],a=[],e,f=0;e=d[f];f++)if(0<c.length&&c.push(\",\"),e.key){var g;a:{g=e.key;var h=b.a.D(g);switch(h.length&&h.charAt(0)){case \"'\":case '\"':break a;default:g=\"'\"+h+\"'\"}}e=e.value;\nc.push(g);c.push(\":\");c.push(e);e=b.a.D(e);0<=b.a.i(ma,b.a.D(e).toLowerCase())?e=q:(h=e.match(na),e=h===n?q:h[1]?\"Object(\"+h[1]+\")\"+h[2]:e);e&&(0<a.length&&a.push(\", \"),a.push(g+\" : function(__ko_value) { \"+e+\" = __ko_value; }\"))}else e.unknown&&c.push(e.unknown);d=c.join(\"\");0<a.length&&(d=d+\", '_ko_property_writers' : { \"+a.join(\"\")+\" } \");return d},Db:function(a,d){for(var c=0;c<a.length;c++)if(b.a.D(a[c].key)==d)return l;return q},ea:function(a,d,c,e,f){if(!a||!b.Qa(a)){if((a=d()._ko_property_writers)&&\na[c])a[c](e)}else(!f||a.t()!==e)&&a(e)}};b.b(\"expressionRewriting\",b.g);b.b(\"expressionRewriting.bindingRewriteValidators\",b.g.Q);b.b(\"expressionRewriting.parseObjectLiteral\",b.g.aa);b.b(\"expressionRewriting.preProcessBindings\",b.g.ba);b.b(\"jsonExpressionRewriting\",b.g);b.b(\"jsonExpressionRewriting.insertPropertyAccessorsIntoJson\",b.g.ba);var J=\"<\\!--test--\\>\"===x.createComment(\"test\").text,ia=J?/^<\\!--\\s*ko(?:\\s+(.+\\s*\\:[\\s\\S]*))?\\s*--\\>$/:/^\\s*ko(?:\\s+(.+\\s*\\:[\\s\\S]*))?\\s*$/,ha=J?/^<\\!--\\s*\\/ko\\s*--\\>$/:\n/^\\s*\\/ko\\s*$/,oa={ul:l,ol:l};b.e={I:{},childNodes:function(a){return A(a)?$(a):a.childNodes},Y:function(a){if(A(a))for(var a=b.e.childNodes(a),d=0,c=a.length;d<c;d++)b.removeNode(a[d]);else b.a.ka(a)},N:function(a,d){if(A(a)){b.e.Y(a);for(var c=a.nextSibling,e=0,f=d.length;e<f;e++)c.parentNode.insertBefore(d[e],c)}else b.a.N(a,d)},Ua:function(a,b){A(a)?a.parentNode.insertBefore(b,a.nextSibling):a.firstChild?a.insertBefore(b,a.firstChild):a.appendChild(b)},Oa:function(a,d,c){c?A(a)?a.parentNode.insertBefore(d,\nc.nextSibling):c.nextSibling?a.insertBefore(d,c.nextSibling):a.appendChild(d):b.e.Ua(a,d)},firstChild:function(a){return!A(a)?a.firstChild:!a.nextSibling||G(a.nextSibling)?n:a.nextSibling},nextSibling:function(a){A(a)&&(a=Z(a));return a.nextSibling&&G(a.nextSibling)?n:a.nextSibling},ib:function(a){return(a=A(a))?a[1]:n},Sa:function(a){if(oa[b.a.u(a)]){var d=a.firstChild;if(d){do if(1===d.nodeType){var c;c=d.firstChild;var e=n;if(c){do if(e)e.push(c);else if(A(c)){var f=Z(c,l);f?c=f:e=[c]}else G(c)&&\n(e=[c]);while(c=c.nextSibling)}if(c=e){e=d.nextSibling;for(f=0;f<c.length;f++)e?a.insertBefore(c[f],e):a.appendChild(c[f])}}while(d=d.nextSibling)}}}};b.b(\"virtualElements\",b.e);b.b(\"virtualElements.allowedBindings\",b.e.I);b.b(\"virtualElements.emptyNode\",b.e.Y);b.b(\"virtualElements.insertAfter\",b.e.Oa);b.b(\"virtualElements.prepend\",b.e.Ua);b.b(\"virtualElements.setDomNodeChildren\",b.e.N);b.J=function(){this.Ga={}};b.a.extend(b.J.prototype,{nodeHasBindings:function(a){switch(a.nodeType){case 1:return a.getAttribute(\"data-bind\")!=\nn;case 8:return b.e.ib(a)!=n;default:return q}},getBindings:function(a,b){var c=this.getBindingsString(a,b);return c?this.parseBindingsString(c,b,a):n},getBindingsString:function(a){switch(a.nodeType){case 1:return a.getAttribute(\"data-bind\");case 8:return b.e.ib(a);default:return n}},parseBindingsString:function(a,d,c){try{var e;if(!(e=this.Ga[a])){var f=this.Ga,g=\"with($context){with($data||{}){return{\"+b.g.ba(a)+\"}}}\";e=f[a]=new Function(\"$context\",\"$element\",g)}return e(d,c)}catch(h){i(Error(\"Unable to parse bindings.\\nMessage: \"+\nh+\";\\nBindings value: \"+a))}}});b.J.instance=new b.J;b.b(\"bindingProvider\",b.J);b.c={};b.z=function(a,d,c){d?(b.a.extend(this,d),this.$parentContext=d,this.$parent=d.$data,this.$parents=(d.$parents||[]).slice(0),this.$parents.unshift(this.$parent)):(this.$parents=[],this.$root=a,this.ko=b);this.$data=a;c&&(this[c]=a)};b.z.prototype.createChildContext=function(a,d){return new b.z(a,this,d)};b.z.prototype.extend=function(a){var d=b.a.extend(new b.z,this);return b.a.extend(d,a)};b.cb=function(a,d){if(2==\narguments.length)b.a.f.set(a,\"__ko_bindingContext__\",d);else return b.a.f.get(a,\"__ko_bindingContext__\")};b.Ea=function(a,d,c){1===a.nodeType&&b.e.Sa(a);return W(a,d,c,l)};b.Da=function(a,b){(1===b.nodeType||8===b.nodeType)&&Y(a,b,l)};b.Ca=function(a,b){b&&(1!==b.nodeType&&8!==b.nodeType)&&i(Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\"));b=b||w.document.body;X(a,b,l)};b.ja=function(a){switch(a.nodeType){case 1:case 8:var d=b.cb(a);if(d)return d;\nif(a.parentNode)return b.ja(a.parentNode)}return H};b.ob=function(a){return(a=b.ja(a))?a.$data:H};b.b(\"bindingHandlers\",b.c);b.b(\"applyBindings\",b.Ca);b.b(\"applyBindingsToDescendants\",b.Da);b.b(\"applyBindingsToNode\",b.Ea);b.b(\"contextFor\",b.ja);b.b(\"dataFor\",b.ob);var ea={\"class\":\"className\",\"for\":\"htmlFor\"};b.c.attr={update:function(a,d){var c=b.a.d(d())||{},e;for(e in c)if(\"string\"==typeof e){var f=b.a.d(c[e]),g=f===q||f===n||f===H;g&&a.removeAttribute(e);8>=b.a.Z&&e in ea?(e=ea[e],g?a.removeAttribute(e):\na[e]=f):g||a.setAttribute(e,f.toString());\"name\"===e&&b.a.$a(a,g?\"\":f.toString())}}};b.c.checked={init:function(a,d,c){b.a.n(a,\"click\",function(){var e;if(\"checkbox\"==a.type)e=a.checked;else if(\"radio\"==a.type&&a.checked)e=a.value;else return;var f=d(),g=b.a.d(f);\"checkbox\"==a.type&&g instanceof Array?(e=b.a.i(g,a.value),a.checked&&0>e?f.push(a.value):!a.checked&&0<=e&&f.splice(e,1)):b.g.ea(f,c,\"checked\",e,l)});\"radio\"==a.type&&!a.name&&b.c.uniqueName.init(a,t(l))},update:function(a,d){var c=b.a.d(d());\n\"checkbox\"==a.type?a.checked=c instanceof Array?0<=b.a.i(c,a.value):c:\"radio\"==a.type&&(a.checked=a.value==c)}};b.c.css={update:function(a,d){var c=b.a.d(d());if(\"object\"==typeof c)for(var e in c){var f=b.a.d(c[e]);b.a.da(a,e,f)}else c=String(c||\"\"),b.a.da(a,a.__ko__cssValue,q),a.__ko__cssValue=c,b.a.da(a,c,l)}};b.c.enable={update:function(a,d){var c=b.a.d(d());c&&a.disabled?a.removeAttribute(\"disabled\"):!c&&!a.disabled&&(a.disabled=l)}};b.c.disable={update:function(a,d){b.c.enable.update(a,function(){return!b.a.d(d())})}};\nb.c.event={init:function(a,d,c,e){var f=d()||{},g;for(g in f)(function(){var f=g;\"string\"==typeof f&&b.a.n(a,f,function(a){var g,m=d()[f];if(m){var p=c();try{var r=b.a.L(arguments);r.unshift(e);g=m.apply(e,r)}finally{g!==l&&(a.preventDefault?a.preventDefault():a.returnValue=q)}p[f+\"Bubble\"]===q&&(a.cancelBubble=l,a.stopPropagation&&a.stopPropagation())}})})()}};b.c.foreach={Ra:function(a){return function(){var d=a(),c=b.a.ta(d);if(!c||\"number\"==typeof c.length)return{foreach:d,templateEngine:b.C.na};\nb.a.d(d);return{foreach:c.data,as:c.as,includeDestroyed:c.includeDestroyed,afterAdd:c.afterAdd,beforeRemove:c.beforeRemove,afterRender:c.afterRender,beforeMove:c.beforeMove,afterMove:c.afterMove,templateEngine:b.C.na}}},init:function(a,d){return b.c.template.init(a,b.c.foreach.Ra(d))},update:function(a,d,c,e,f){return b.c.template.update(a,b.c.foreach.Ra(d),c,e,f)}};b.g.Q.foreach=q;b.e.I.foreach=l;b.c.hasfocus={init:function(a,d,c){function e(e){a.__ko_hasfocusUpdating=l;var f=a.ownerDocument;\"activeElement\"in\nf&&(e=f.activeElement===a);f=d();b.g.ea(f,c,\"hasfocus\",e,l);a.__ko_hasfocusUpdating=q}var f=e.bind(n,l),g=e.bind(n,q);b.a.n(a,\"focus\",f);b.a.n(a,\"focusin\",f);b.a.n(a,\"blur\",g);b.a.n(a,\"focusout\",g)},update:function(a,d){var c=b.a.d(d());a.__ko_hasfocusUpdating||(c?a.focus():a.blur(),b.r.K(b.a.Aa,n,[a,c?\"focusin\":\"focusout\"]))}};b.c.html={init:function(){return{controlsDescendantBindings:l}},update:function(a,d){b.a.ca(a,d())}};var ca=\"__ko_withIfBindingData\";P(\"if\");P(\"ifnot\",q,l);P(\"with\",l,q,function(a,\nb){return a.createChildContext(b)});b.c.options={update:function(a,d,c){\"select\"!==b.a.u(a)&&i(Error(\"options binding applies only to SELECT elements\"));for(var e=0==a.length,f=b.a.V(b.a.fa(a.childNodes,function(a){return a.tagName&&\"option\"===b.a.u(a)&&a.selected}),function(a){return b.k.q(a)||a.innerText||a.textContent}),g=a.scrollTop,h=b.a.d(d());0<a.length;)b.A(a.options[0]),a.remove(0);if(h){var c=c(),j=c.optionsIncludeDestroyed;\"number\"!=typeof h.length&&(h=[h]);if(c.optionsCaption){var k=x.createElement(\"option\");\nb.a.ca(k,c.optionsCaption);b.k.T(k,H);a.appendChild(k)}for(var d=0,m=h.length;d<m;d++){var p=h[d];if(!p||!p._destroy||j){var k=x.createElement(\"option\"),r=function(a,b,c){var d=typeof b;return\"function\"==d?b(a):\"string\"==d?a[b]:c},u=r(p,c.optionsValue,p);b.k.T(k,b.a.d(u));p=r(p,c.optionsText,u);b.a.bb(k,p);a.appendChild(k)}}h=a.getElementsByTagName(\"option\");d=j=0;for(m=h.length;d<m;d++)0<=b.a.i(f,b.k.q(h[d]))&&(b.a.ab(h[d],l),j++);a.scrollTop=g;e&&\"value\"in c&&da(a,b.a.ta(c.value),l);b.a.tb(a)}}};\nb.c.options.ra=\"__ko.optionValueDomData__\";b.c.selectedOptions={init:function(a,d,c){b.a.n(a,\"change\",function(){var e=d(),f=[];b.a.o(a.getElementsByTagName(\"option\"),function(a){a.selected&&f.push(b.k.q(a))});b.g.ea(e,c,\"value\",f)})},update:function(a,d){\"select\"!=b.a.u(a)&&i(Error(\"values binding applies only to SELECT elements\"));var c=b.a.d(d());c&&\"number\"==typeof c.length&&b.a.o(a.getElementsByTagName(\"option\"),function(a){var d=0<=b.a.i(c,b.k.q(a));b.a.ab(a,d)})}};b.c.style={update:function(a,\nd){var c=b.a.d(d()||{}),e;for(e in c)if(\"string\"==typeof e){var f=b.a.d(c[e]);a.style[e]=f||\"\"}}};b.c.submit={init:function(a,d,c,e){\"function\"!=typeof d()&&i(Error(\"The value for a submit binding must be a function\"));b.a.n(a,\"submit\",function(b){var c,h=d();try{c=h.call(e,a)}finally{c!==l&&(b.preventDefault?b.preventDefault():b.returnValue=q)}})}};b.c.text={update:function(a,d){b.a.bb(a,d())}};b.e.I.text=l;b.c.uniqueName={init:function(a,d){if(d()){var c=\"ko_unique_\"+ ++b.c.uniqueName.nb;b.a.$a(a,\nc)}}};b.c.uniqueName.nb=0;b.c.value={init:function(a,d,c){function e(){h=q;var e=d(),f=b.k.q(a);b.g.ea(e,c,\"value\",f)}var f=[\"change\"],g=c().valueUpdate,h=q;g&&(\"string\"==typeof g&&(g=[g]),b.a.P(f,g),f=b.a.Fa(f));if(b.a.Z&&(\"input\"==a.tagName.toLowerCase()&&\"text\"==a.type&&\"off\"!=a.autocomplete&&(!a.form||\"off\"!=a.form.autocomplete))&&-1==b.a.i(f,\"propertychange\"))b.a.n(a,\"propertychange\",function(){h=l}),b.a.n(a,\"blur\",function(){h&&e()});b.a.o(f,function(c){var d=e;b.a.Nb(c,\"after\")&&(d=function(){setTimeout(e,\n0)},c=c.substring(5));b.a.n(a,c,d)})},update:function(a,d){var c=\"select\"===b.a.u(a),e=b.a.d(d()),f=b.k.q(a),g=e!=f;0===e&&(0!==f&&\"0\"!==f)&&(g=l);g&&(f=function(){b.k.T(a,e)},f(),c&&setTimeout(f,0));c&&0<a.length&&da(a,e,q)}};b.c.visible={update:function(a,d){var c=b.a.d(d()),e=\"none\"!=a.style.display;c&&!e?a.style.display=\"\":!c&&e&&(a.style.display=\"none\")}};b.c.click={init:function(a,d,c,e){return b.c.event.init.call(this,a,function(){var a={};a.click=d();return a},c,e)}};b.v=function(){};b.v.prototype.renderTemplateSource=\nfunction(){i(Error(\"Override renderTemplateSource\"))};b.v.prototype.createJavaScriptEvaluatorBlock=function(){i(Error(\"Override createJavaScriptEvaluatorBlock\"))};b.v.prototype.makeTemplateSource=function(a,d){if(\"string\"==typeof a){var d=d||x,c=d.getElementById(a);c||i(Error(\"Cannot find template with ID \"+a));return new b.l.h(c)}if(1==a.nodeType||8==a.nodeType)return new b.l.O(a);i(Error(\"Unknown template type: \"+a))};b.v.prototype.renderTemplate=function(a,b,c,e){a=this.makeTemplateSource(a,e);\nreturn this.renderTemplateSource(a,b,c)};b.v.prototype.isTemplateRewritten=function(a,b){return this.allowTemplateRewriting===q?l:this.makeTemplateSource(a,b).data(\"isRewritten\")};b.v.prototype.rewriteTemplate=function(a,b,c){a=this.makeTemplateSource(a,c);b=b(a.text());a.text(b);a.data(\"isRewritten\",l)};b.b(\"templateEngine\",b.v);var pa=/(<[a-z]+\\d*(\\s+(?!data-bind=)[a-z0-9\\-]+(=(\\\"[^\\\"]*\\\"|\\'[^\\']*\\'))?)*\\s+)data-bind=([\"'])([\\s\\S]*?)\\5/gi,qa=/<\\!--\\s*ko\\b\\s*([\\s\\S]*?)\\s*--\\>/g;b.ya={ub:function(a,\nd,c){d.isTemplateRewritten(a,c)||d.rewriteTemplate(a,function(a){return b.ya.Fb(a,d)},c)},Fb:function(a,b){return a.replace(pa,function(a,e,f,g,h,j,k){return V(k,e,b)}).replace(qa,function(a,e){return V(e,\"<\\!-- ko --\\>\",b)})},jb:function(a){return b.s.qa(function(d,c){d.nextSibling&&b.Ea(d.nextSibling,a,c)})}};b.b(\"__tr_ambtns\",b.ya.jb);b.l={};b.l.h=function(a){this.h=a};b.l.h.prototype.text=function(){var a=b.a.u(this.h),a=\"script\"===a?\"text\":\"textarea\"===a?\"value\":\"innerHTML\";if(0==arguments.length)return this.h[a];\nvar d=arguments[0];\"innerHTML\"===a?b.a.ca(this.h,d):this.h[a]=d};b.l.h.prototype.data=function(a){if(1===arguments.length)return b.a.f.get(this.h,\"templateSourceData_\"+a);b.a.f.set(this.h,\"templateSourceData_\"+a,arguments[1])};b.l.O=function(a){this.h=a};b.l.O.prototype=new b.l.h;b.l.O.prototype.text=function(){if(0==arguments.length){var a=b.a.f.get(this.h,\"__ko_anon_template__\")||{};a.za===H&&a.ia&&(a.za=a.ia.innerHTML);return a.za}b.a.f.set(this.h,\"__ko_anon_template__\",{za:arguments[0]})};b.l.h.prototype.nodes=\nfunction(){if(0==arguments.length)return(b.a.f.get(this.h,\"__ko_anon_template__\")||{}).ia;b.a.f.set(this.h,\"__ko_anon_template__\",{ia:arguments[0]})};b.b(\"templateSources\",b.l);b.b(\"templateSources.domElement\",b.l.h);b.b(\"templateSources.anonymousTemplate\",b.l.O);var N;b.va=function(a){a!=H&&!(a instanceof b.v)&&i(Error(\"templateEngine must inherit from ko.templateEngine\"));N=a};b.ua=function(a,d,c,e,f){c=c||{};(c.templateEngine||N)==H&&i(Error(\"Set a template engine before calling renderTemplate\"));\nf=f||\"replaceChildren\";if(e){var g=M(e);return b.j(function(){var h=d&&d instanceof b.z?d:new b.z(b.a.d(d)),j=\"function\"==typeof a?a(h.$data,h):a,h=S(e,f,j,h,c);\"replaceNode\"==f&&(e=h,g=M(e))},n,{Ja:function(){return!g||!b.a.X(g)},W:g&&\"replaceNode\"==f?g.parentNode:g})}return b.s.qa(function(e){b.ua(a,d,c,e,\"replaceNode\")})};b.Lb=function(a,d,c,e,f){function g(a,b){T(b,j);c.afterRender&&c.afterRender(b,a)}function h(d,e){j=f.createChildContext(b.a.d(d),c.as);j.$index=e;var g=\"function\"==typeof a?\na(d,j):a;return S(n,\"ignoreTargetNode\",g,j,c)}var j;return b.j(function(){var a=b.a.d(d)||[];\"undefined\"==typeof a.length&&(a=[a]);a=b.a.fa(a,function(a){return c.includeDestroyed||a===H||a===n||!b.a.d(a._destroy)});b.r.K(b.a.Za,n,[e,a,h,c,g])},n,{W:e})};b.c.template={init:function(a,d){var c=b.a.d(d());if(\"string\"!=typeof c&&!c.name&&(1==a.nodeType||8==a.nodeType))c=1==a.nodeType?a.childNodes:b.e.childNodes(a),c=b.a.Gb(c),(new b.l.O(a)).nodes(c);return{controlsDescendantBindings:l}},update:function(a,\nd,c,e,f){var d=b.a.d(d()),c={},e=l,g,h=n;\"string\"!=typeof d&&(c=d,d=c.name,\"if\"in c&&(e=b.a.d(c[\"if\"])),e&&\"ifnot\"in c&&(e=!b.a.d(c.ifnot)),g=b.a.d(c.data));\"foreach\"in c?h=b.Lb(d||a,e&&c.foreach||[],c,a,f):e?(f=\"data\"in c?f.createChildContext(g,c.as):f,h=b.ua(d||a,f,c,a)):b.e.Y(a);f=h;(g=b.a.f.get(a,\"__ko__templateComputedDomDataKey__\"))&&\"function\"==typeof g.B&&g.B();b.a.f.set(a,\"__ko__templateComputedDomDataKey__\",f&&f.oa()?f:H)}};b.g.Q.template=function(a){a=b.g.aa(a);return 1==a.length&&a[0].unknown||\nb.g.Db(a,\"name\")?n:\"This template engine does not support anonymous templates nested within its templates\"};b.e.I.template=l;b.b(\"setTemplateEngine\",b.va);b.b(\"renderTemplate\",b.ua);b.a.Ia=function(a,b,c){a=a||[];b=b||[];return a.length<=b.length?R(a,b,\"added\",\"deleted\",c):R(b,a,\"deleted\",\"added\",c)};b.b(\"utils.compareArrays\",b.a.Ia);b.a.Za=function(a,d,c,e,f){function g(a,b){s=k[b];v!==b&&(y[a]=s);s.ma(v++);L(s.M);r.push(s);z.push(s)}function h(a,c){if(a)for(var d=0,e=c.length;d<e;d++)c[d]&&b.a.o(c[d].M,\nfunction(b){a(b,d,c[d].U)})}for(var d=d||[],e=e||{},j=b.a.f.get(a,\"setDomNodeChildrenFromArrayMapping_lastMappingResult\")===H,k=b.a.f.get(a,\"setDomNodeChildrenFromArrayMapping_lastMappingResult\")||[],m=b.a.V(k,function(a){return a.U}),p=b.a.Ia(m,d),r=[],u=0,v=0,A=[],z=[],d=[],y=[],m=[],s,C=0,B,D;B=p[C];C++)switch(D=B.moved,B.status){case \"deleted\":D===H&&(s=k[u],s.j&&s.j.B(),A.push.apply(A,L(s.M)),e.beforeRemove&&(d[C]=s,z.push(s)));u++;break;case \"retained\":g(C,u++);break;case \"added\":D!==H?g(C,\nD):(s={U:B.value,ma:b.m(v++)},r.push(s),z.push(s),j||(m[C]=s))}h(e.beforeMove,y);b.a.o(A,e.beforeRemove?b.A:b.removeNode);for(var C=0,j=b.e.firstChild(a),G;s=z[C];C++){s.M||b.a.extend(s,ga(a,c,s.U,f,s.ma));for(u=0;p=s.M[u];j=p.nextSibling,G=p,u++)p!==j&&b.e.Oa(a,p,G);!s.zb&&f&&(f(s.U,s.M,s.ma),s.zb=l)}h(e.beforeRemove,d);h(e.afterMove,y);h(e.afterAdd,m);b.a.f.set(a,\"setDomNodeChildrenFromArrayMapping_lastMappingResult\",r)};b.b(\"utils.setDomNodeChildrenFromArrayMapping\",b.a.Za);b.C=function(){this.allowTemplateRewriting=\nq};b.C.prototype=new b.v;b.C.prototype.renderTemplateSource=function(a){var d=!(9>b.a.Z)&&a.nodes?a.nodes():n;if(d)return b.a.L(d.cloneNode(l).childNodes);a=a.text();return b.a.sa(a)};b.C.na=new b.C;b.va(b.C.na);b.b(\"nativeTemplateEngine\",b.C);b.pa=function(){var a=this.Cb=function(){if(\"undefined\"==typeof E||!E.tmpl)return 0;try{if(0<=E.tmpl.tag.tmpl.open.toString().indexOf(\"__\"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,c,e){e=e||{};2>a&&i(Error(\"Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.\"));\nvar f=b.data(\"precompiled\");f||(f=b.text()||\"\",f=E.template(n,\"{{ko_with $item.koBindingContext}}\"+f+\"{{/ko_with}}\"),b.data(\"precompiled\",f));b=[c.$data];c=E.extend({koBindingContext:c},e.templateOptions);c=E.tmpl(f,b,c);c.appendTo(x.createElement(\"div\"));E.fragments={};return c};this.createJavaScriptEvaluatorBlock=function(a){return\"{{ko_code ((function() { return \"+a+\" })()) }}\"};this.addTemplate=function(a,b){x.write(\"<script type='text/html' id='\"+a+\"'>\"+b+\"<\\/script>\")};0<a&&(E.tmpl.tag.ko_code=\n{open:\"__.push($1 || '');\"},E.tmpl.tag.ko_with={open:\"with($1) {\",close:\"} \"})};b.pa.prototype=new b.v;v=new b.pa;0<v.Cb&&b.va(v);b.b(\"jqueryTmplTemplateEngine\",b.pa)}\"function\"===typeof require&&\"object\"===typeof exports&&\"object\"===typeof module?K(module.exports||exports):\"function\"===typeof define&&define.amd?define([\"exports\"],K):K(w.ko={});l;\n})();\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Scripts/modernizr-2.6.2.js",
    "content": "/*!\n * Modernizr v2.6.2\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.6.2',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq).matches;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   daneden.me/2011/12/putting-up-with-androids-bullshit/\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /*! HTML5 Shiv v3.6.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */\n    ;(function(window, document) {\n    /*jshint evil:true */\n      /** Preset options */\n      var options = window.html5 || {};\n\n      /** Used to skip problem elements */\n      var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n      /** Not all elements can be cloned in IE **/\n      var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n      /** Detect whether the browser supports default html5 styles */\n      var supportsHtml5Styles;\n\n      /** Name of the expando, to work with multiple documents or to re-shiv one document */\n      var expando = '_html5shiv';\n\n      /** The id for the the documents expando */\n      var expanID = 0;\n\n      /** Cached data for each document */\n      var expandoData = {};\n\n      /** Detect whether the browser supports unknown elements */\n      var supportsUnknownElements;\n\n      (function() {\n        try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n        } catch(e) {\n          supportsHtml5Styles = true;\n          supportsUnknownElements = true;\n        }\n\n      }());\n\n      /*--------------------------------------------------------------------------*/\n\n      /**\n       * Creates a style sheet with the given CSS text and adds it to the document.\n       * @private\n       * @param {Document} ownerDocument The document.\n       * @param {String} cssText The CSS text.\n       * @returns {StyleSheet} The style element.\n       */\n      function addStyleSheet(ownerDocument, cssText) {\n        var p = ownerDocument.createElement('p'),\n            parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n        p.innerHTML = 'x<style>' + cssText + '</style>';\n        return parent.insertBefore(p.lastChild, parent.firstChild);\n      }\n\n      /**\n       * Returns the value of `html5.elements` as an array.\n       * @private\n       * @returns {Array} An array of shived element node names.\n       */\n      function getElements() {\n        var elements = html5.elements;\n        return typeof elements == 'string' ? elements.split(' ') : elements;\n      }\n\n        /**\n       * Returns the data associated to the given document\n       * @private\n       * @param {Document} ownerDocument The document.\n       * @returns {Object} An object of data.\n       */\n      function getExpandoData(ownerDocument) {\n        var data = expandoData[ownerDocument[expando]];\n        if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n        }\n        return data;\n      }\n\n      /**\n       * returns a shived element for the given nodeName and document\n       * @memberOf html5\n       * @param {String} nodeName name of the element\n       * @param {Document} ownerDocument The context document.\n       * @returns {Object} The shived element.\n       */\n      function createElement(nodeName, ownerDocument, data){\n        if (!ownerDocument) {\n            ownerDocument = document;\n        }\n        if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n        }\n        if (!data) {\n            data = getExpandoData(ownerDocument);\n        }\n        var node;\n\n        if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n        } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n        } else {\n            node = data.createElem(nodeName);\n        }\n\n        // Avoid adding some elements to fragments in IE < 9 because\n        // * Attributes like `name` or `type` cannot be set/changed once an element\n        //   is inserted into a document/fragment\n        // * Link elements with `src` attributes that are inaccessible, as with\n        //   a 403 response, will cause the tab/window to crash\n        // * Script elements appended to fragments will execute when their `src`\n        //   or `text` property is set\n        return node.canHaveChildren && !reSkip.test(nodeName) ? data.frag.appendChild(node) : node;\n      }\n\n      /**\n       * returns a shived DocumentFragment for the given document\n       * @memberOf html5\n       * @param {Document} ownerDocument The context document.\n       * @returns {Object} The shived DocumentFragment.\n       */\n      function createDocumentFragment(ownerDocument, data){\n        if (!ownerDocument) {\n            ownerDocument = document;\n        }\n        if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n        }\n        data = data || getExpandoData(ownerDocument);\n        var clone = data.frag.cloneNode(),\n            i = 0,\n            elems = getElements(),\n            l = elems.length;\n        for(;i<l;i++){\n            clone.createElement(elems[i]);\n        }\n        return clone;\n      }\n\n      /**\n       * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n       * @private\n       * @param {Document|DocumentFragment} ownerDocument The document.\n       * @param {Object} data of the document.\n       */\n      function shivMethods(ownerDocument, data) {\n        if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n        }\n\n\n        ownerDocument.createElement = function(nodeName) {\n          //abort shiv\n          if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n          }\n          return createElement(nodeName, ownerDocument, data);\n        };\n\n        ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n          'var n=f.cloneNode(),c=n.createElement;' +\n          'h.shivMethods&&(' +\n            // unroll the `createElement` calls\n            getElements().join().replace(/\\w+/g, function(nodeName) {\n              data.createElem(nodeName);\n              data.frag.createElement(nodeName);\n              return 'c(\"' + nodeName + '\")';\n            }) +\n          ');return n}'\n        )(html5, data.frag);\n      }\n\n      /*--------------------------------------------------------------------------*/\n\n      /**\n       * Shivs the given document.\n       * @memberOf html5\n       * @param {Document} ownerDocument The document to shiv.\n       * @returns {Document} The shived document.\n       */\n      function shivDocument(ownerDocument) {\n        if (!ownerDocument) {\n            ownerDocument = document;\n        }\n        var data = getExpandoData(ownerDocument);\n\n        if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n          data.hasCSS = !!addStyleSheet(ownerDocument,\n            // corrects block display not defined in IE6/7/8/9\n            'article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +\n            // adds styling not present in IE6/7/8/9\n            'mark{background:#FF0;color:#000}'\n          );\n        }\n        if (!supportsUnknownElements) {\n          shivMethods(ownerDocument, data);\n        }\n        return ownerDocument;\n      }\n\n      /*--------------------------------------------------------------------------*/\n\n      /**\n       * The `html5` object is exposed so that more elements can be shived and\n       * existing shiving can be detected on iframes.\n       * @type Object\n       * @example\n       *\n       * // options can be changed before the script is included\n       * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n       */\n      var html5 = {\n\n        /**\n         * An array or space separated string of node names of the elements to shiv.\n         * @memberOf html5\n         * @type Array|String\n         */\n        'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video',\n\n        /**\n         * A flag to indicate that the HTML5 style sheet should be inserted.\n         * @memberOf html5\n         * @type Boolean\n         */\n        'shivCSS': (options.shivCSS !== false),\n\n        /**\n         * Is equal to true if a browser supports creating unknown/HTML5 elements\n         * @memberOf html5\n         * @type boolean\n         */\n        'supportsUnknownElements': supportsUnknownElements,\n\n        /**\n         * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n         * methods should be overwritten.\n         * @memberOf html5\n         * @type Boolean\n         */\n        'shivMethods': (options.shivMethods !== false),\n\n        /**\n         * A string to describe the type of `html5` object (\"default\" or \"default print\").\n         * @memberOf html5\n         * @type String\n         */\n        'type': 'default',\n\n        // shivs the document according to the specified `html5` object options\n        'shivDocument': shivDocument,\n\n        //creates a shived element\n        createElement: createElement,\n\n        //creates a shived documentFragment\n        createDocumentFragment: createDocumentFragment\n      };\n\n      /*--------------------------------------------------------------------------*/\n\n      // expose html5\n      window.html5 = html5;\n\n      // shiv the document\n      shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/ExternalLoginConfirmation.cshtml",
    "content": "﻿@model LinqToTwitterMvcDemo.Models.RegisterExternalLoginModel\n@{\n    ViewBag.Title = \"Register\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n    <h2>Associate your @ViewBag.ProviderDisplayName account.</h2>\n</hgroup>\n\n@using (Html.BeginForm(\"ExternalLoginConfirmation\", \"Account\", new { ReturnUrl = ViewBag.ReturnUrl })) {\n    @Html.AntiForgeryToken()\n    @Html.ValidationSummary(true)\n\n    <fieldset>\n        <legend>Association Form</legend>\n        <p>\n            You've successfully authenticated with <strong>@ViewBag.ProviderDisplayName</strong>.\n            Please enter a user name for this site below and click the Confirm button to finish\n            logging in.\n        </p>\n        <ol>\n            <li class=\"name\">\n                @Html.LabelFor(m => m.UserName)\n                @Html.TextBoxFor(m => m.UserName)\n                @Html.ValidationMessageFor(m => m.UserName)\n            </li>\n        </ol>\n        @Html.HiddenFor(m => m.ExternalLoginData)\n        <input type=\"submit\" value=\"Register\" />\n    </fieldset>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/ExternalLoginFailure.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Login Failure\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n    <h2>Unsuccessful login with service.</h2>\n</hgroup>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/Login.cshtml",
    "content": "﻿@model LinqToTwitterMvcDemo.Models.LoginModel\n\n@{\n    ViewBag.Title = \"Log in\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n</hgroup>\n\n<section id=\"loginForm\">\n<h2>Use a local account to log in.</h2>\n@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {\n    @Html.AntiForgeryToken()\n    @Html.ValidationSummary(true)\n\n    <fieldset>\n        <legend>Log in Form</legend>\n        <ol>\n            <li>\n                @Html.LabelFor(m => m.UserName)\n                @Html.TextBoxFor(m => m.UserName)\n                @Html.ValidationMessageFor(m => m.UserName)\n            </li>\n            <li>\n                @Html.LabelFor(m => m.Password)\n                @Html.PasswordFor(m => m.Password)\n                @Html.ValidationMessageFor(m => m.Password)\n            </li>\n            <li>\n                @Html.CheckBoxFor(m => m.RememberMe)\n                @Html.LabelFor(m => m.RememberMe, new { @class = \"checkbox\" })\n            </li>\n        </ol>\n        <input type=\"submit\" value=\"Log in\" />\n    </fieldset>\n    <p>\n        @Html.ActionLink(\"Register\", \"Register\") if you don't have an account.\n    </p>\n}\n</section>\n\n<section class=\"social\" id=\"socialLoginForm\">\n    <h2>Use another service to log in.</h2>\n    @Html.Action(\"ExternalLoginsList\", new { ReturnUrl = ViewBag.ReturnUrl })\n</section>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/Manage.cshtml",
    "content": "﻿@model LinqToTwitterMvcDemo.Models.LocalPasswordModel\n@{\n    ViewBag.Title = \"Manage Account\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n</hgroup>\n\n<p class=\"message-success\">@ViewBag.StatusMessage</p>\n\n<p>You're logged in as <strong>@User.Identity.Name</strong>.</p>\n\n@if (ViewBag.HasLocalPassword)\n{\n    @Html.Partial(\"_ChangePasswordPartial\")\n}\nelse\n{ \n    @Html.Partial(\"_SetPasswordPartial\")\n}\n\n<section id=\"externalLogins\">\n    @Html.Action(\"RemoveExternalLogins\")\n\n    <h3>Add an external login</h3>\n    @Html.Action(\"ExternalLoginsList\", new { ReturnUrl = ViewBag.ReturnUrl })\n</section>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/Register.cshtml",
    "content": "﻿@model LinqToTwitterMvcDemo.Models.RegisterModel\n@{\n    ViewBag.Title = \"Register\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n    <h2>Create a new account.</h2>\n</hgroup>\n\n@using (Html.BeginForm()) {\n    @Html.AntiForgeryToken()\n    @Html.ValidationSummary()\n\n    <fieldset>\n        <legend>Registration Form</legend>\n        <ol>\n            <li>\n                @Html.LabelFor(m => m.UserName)\n                @Html.TextBoxFor(m => m.UserName)\n            </li>\n            <li>\n                @Html.LabelFor(m => m.Password)\n                @Html.PasswordFor(m => m.Password)\n            </li>\n            <li>\n                @Html.LabelFor(m => m.ConfirmPassword)\n                @Html.PasswordFor(m => m.ConfirmPassword)\n            </li>\n        </ol>\n        <input type=\"submit\" value=\"Register\" />\n    </fieldset>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/_ChangePasswordPartial.cshtml",
    "content": "﻿@model LinqToTwitterMvcDemo.Models.LocalPasswordModel\n\n<h3>Change password</h3>\n\n@using (Html.BeginForm(\"Manage\", \"Account\")) {\n    @Html.AntiForgeryToken()\n    @Html.ValidationSummary()\n\n    <fieldset>\n        <legend>Change Password Form</legend>\n        <ol>\n            <li>\n                @Html.LabelFor(m => m.OldPassword)\n                @Html.PasswordFor(m => m.OldPassword)\n            </li>\n            <li>\n                @Html.LabelFor(m => m.NewPassword)\n                @Html.PasswordFor(m => m.NewPassword)\n            </li>\n            <li>\n                @Html.LabelFor(m => m.ConfirmPassword)\n                @Html.PasswordFor(m => m.ConfirmPassword)\n            </li>\n        </ol>\n        <input type=\"submit\" value=\"Change password\" />\n    </fieldset>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/_ExternalLoginsListPartial.cshtml",
    "content": "﻿@model ICollection<AuthenticationClientData>\n\n@if (Model.Count == 0)\n{\n    <div class=\"message-info\">\n        <p>There are no external authentication services configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=252166\">this article</a>\n        for details on setting up this ASP.NET application to support logging in via external services.</p>\n    </div>\n}\nelse\n{\n    using (Html.BeginForm(\"ExternalLogin\", \"Account\", new { ReturnUrl = ViewBag.ReturnUrl }))\n    {\n    @Html.AntiForgeryToken()\n    <fieldset id=\"socialLoginList\">\n        <legend>Log in using another service</legend>\n        <p>\n        @foreach (AuthenticationClientData p in Model)\n        {\n            <button type=\"submit\" name=\"provider\" value=\"@p.AuthenticationClient.ProviderName\" title=\"Log in using your @p.DisplayName account\">@p.DisplayName</button>\n        }\n        </p>\n    </fieldset>\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/_RemoveExternalLoginsPartial.cshtml",
    "content": "﻿@model ICollection<LinqToTwitterMvcDemo.Models.ExternalLogin>\n\n@if (Model.Count > 0)\n{\n    <h3>Registered external logins</h3>\n    <table>\n        <tbody>\n        @foreach (LinqToTwitterMvcDemo.Models.ExternalLogin externalLogin in Model)\n        {\n            <tr>\n                <td>@externalLogin.ProviderDisplayName</td>\n                <td>\n                    @if (ViewBag.ShowRemoveButton)\n                    {\n                        using (Html.BeginForm(\"Disassociate\", \"Account\"))\n                        {\n                            @Html.AntiForgeryToken()\n                            <div>\n                                @Html.Hidden(\"provider\", externalLogin.Provider)\n                                @Html.Hidden(\"providerUserId\", externalLogin.ProviderUserId)\n                                <input type=\"submit\" value=\"Remove\" title=\"Remove this @externalLogin.ProviderDisplayName credential from your account\" />\n                            </div>\n                        }\n                    }\n                    else\n                    {\n                        @: &nbsp;\n                    }\n                </td>\n            </tr>\n        }\n        </tbody>\n    </table>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Account/_SetPasswordPartial.cshtml",
    "content": "﻿@model LinqToTwitterMvcDemo.Models.LocalPasswordModel\n\n<p>\n    You do not have a local password for this site. Add a local\n    password so you can log in without an external login.\n</p>\n\n@using (Html.BeginForm(\"Manage\", \"Account\")) {\n    @Html.AntiForgeryToken()\n    @Html.ValidationSummary()\n\n    <fieldset>\n        <legend>Set Password Form</legend>\n        <ol>\n            <li>\n                @Html.LabelFor(m => m.NewPassword)\n                @Html.PasswordFor(m => m.NewPassword)\n            </li>\n            <li>\n                @Html.LabelFor(m => m.ConfirmPassword)\n                @Html.PasswordFor(m => m.ConfirmPassword)\n            </li>\n        </ol>\n        <input type=\"submit\" value=\"Set password\" />\n    </fieldset>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Home/About.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"About\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n    <h2>@ViewBag.Message</h2>\n</hgroup>\n\n<article>\n    <p>\n        Use this area to provide additional information.\n    </p>\n\n    <p>\n        Use this area to provide additional information.\n    </p>\n\n    <p>\n        Use this area to provide additional information.\n    </p>\n</article>\n\n<aside>\n    <h3>Aside Title</h3>\n    <p>\n        Use this area to provide additional information.\n    </p>\n    <ul>\n        <li>@Html.ActionLink(\"Home\", \"Index\", \"Home\")</li>\n        <li>@Html.ActionLink(\"About\", \"About\", \"Home\")</li>\n        <li>@Html.ActionLink(\"Contact\", \"Contact\", \"Home\")</li>\n    </ul>\n</aside>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Home/Contact.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Contact\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n    <h2>@ViewBag.Message</h2>\n</hgroup>\n\n<section class=\"contact\">\n    <header>\n        <h3>Phone</h3>\n    </header>\n    <p>\n        <span class=\"label\">Main:</span>\n        <span>425.555.0100</span>\n    </p>\n    <p>\n        <span class=\"label\">After Hours:</span>\n        <span>425.555.0199</span>\n    </p>\n</section>\n\n<section class=\"contact\">\n    <header>\n        <h3>Email</h3>\n    </header>\n    <p>\n        <span class=\"label\">Support:</span>\n        <span><a href=\"mailto:Support@example.com\">Support@example.com</a></span>\n    </p>\n    <p>\n        <span class=\"label\">Marketing:</span>\n        <span><a href=\"mailto:Marketing@example.com\">Marketing@example.com</a></span>\n    </p>\n    <p>\n        <span class=\"label\">General:</span>\n        <span><a href=\"mailto:General@example.com\">General@example.com</a></span>\n    </p>\n</section>\n\n<section class=\"contact\">\n    <header>\n        <h3>Address</h3>\n    </header>\n    <p>\n        One Microsoft Way<br />\n        Redmond, WA 98052-6399\n    </p>\n</section>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Home/Index.cshtml",
    "content": "﻿@model IEnumerable<LinqToTwitterMvcDemo.Models.TweetViewModel>\n@{\n    ViewBag.Title = \"Home Page\";\n}\n@section featured {\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <hgroup class=\"title\">\n                <h1>LINQ to Twitter</h1>\n                <h2>MVC Demo</h2>\n            </hgroup>\n            <p>\n                An example of how you can use LINQ to Twitter with ASP.NET MVC.\n            </p>\n        </div>\n    </section>\n}\n\n<ul>\n    @foreach (var tweet in Model)\n    {\n        <li>ScreenName: @tweet.ScreenName, Tweet: @tweet.Tweet</li>\n    }\n</ul>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Shared/Error.cshtml",
    "content": "﻿@model System.Web.Mvc.HandleErrorInfo\n\n@{\n    ViewBag.Title = \"Error\";\n}\n\n<hgroup class=\"title\">\n    <h1 class=\"error\">Error.</h1>\n    <h2 class=\"error\">An error occurred while processing your request.</h2>\n</hgroup>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\" />\n        <title>@ViewBag.Title - My ASP.NET MVC Application</title>\n        <link href=\"~/favicon.ico\" rel=\"shortcut icon\" type=\"image/x-icon\" />\n        <meta name=\"viewport\" content=\"width=device-width\" />\n        @Styles.Render(\"~/Content/css\")\n        @Scripts.Render(\"~/bundles/modernizr\")\n    </head>\n    <body>\n        <header>\n            <div class=\"content-wrapper\">\n                <div class=\"float-left\">\n                    <p class=\"site-title\">@Html.ActionLink(\"your logo here\", \"Index\", \"Home\")</p>\n                </div>\n                <div class=\"float-right\">\n                    <section id=\"login\">\n                        @Html.Partial(\"_LoginPartial\")\n                    </section>\n                    <nav>\n                        <ul id=\"menu\">\n                            <li>@Html.ActionLink(\"Home\", \"Index\", \"Home\")</li>\n                            <li>@Html.ActionLink(\"About\", \"About\", \"Home\")</li>\n                            <li>@Html.ActionLink(\"Contact\", \"Contact\", \"Home\")</li>\n                        </ul>\n                    </nav>\n                </div>\n            </div>\n        </header>\n        <div id=\"body\">\n            @RenderSection(\"featured\", required: false)\n            <section class=\"content-wrapper main-content clear-fix\">\n                @RenderBody()\n            </section>\n        </div>\n        <footer>\n            <div class=\"content-wrapper\">\n                <div class=\"float-left\">\n                    <p>&copy; @DateTime.Now.Year - My ASP.NET MVC Application</p>\n                </div>\n            </div>\n        </footer>\n\n        @Scripts.Render(\"~/bundles/jquery\")\n        @RenderSection(\"scripts\", required: false)\n    </body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Shared/_LoginPartial.cshtml",
    "content": "﻿@if (Request.IsAuthenticated) {\n    <text>\n        Hello, @Html.ActionLink(User.Identity.Name, \"Manage\", \"Account\", routeValues: null, htmlAttributes: new { @class = \"username\", title = \"Manage\" })!\n        @using (Html.BeginForm(\"LogOff\", \"Account\", FormMethod.Post, new { id = \"logoutForm\" })) {\n            @Html.AntiForgeryToken()\n            <a href=\"javascript:document.getElementById('logoutForm').submit()\">Log off</a>\n        }\n    </text>\n} else {\n    <ul>\n        <li>@Html.ActionLink(\"Register\", \"Register\", \"Account\", routeValues: null, htmlAttributes: new { id = \"registerLink\" })</li>\n        <li>@Html.ActionLink(\"Log in\", \"Login\", \"Account\", routeValues: null, htmlAttributes: new { id = \"loginLink\" })</li>\n    </ul>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <httpHandlers>\n      <add path=\"*\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\"/>\n    </httpHandlers>\n\n    <!--\n        Enabling request validation in view pages would cause validation to occur\n        after the input has already been processed by the controller. By default\n        MVC performs request validation before a controller processes the input.\n        To change this behavior apply the ValidateInputAttribute to a\n        controller or action.\n    -->\n    <pages\n        validateRequest=\"false\"\n        pageParserFilterType=\"System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        pageBaseType=\"System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        userControlBaseType=\"System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <controls>\n        <add assembly=\"System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" namespace=\"System.Web.Mvc\" tagPrefix=\"mvc\" />\n      </controls>\n    </pages>\n  </system.web>\n\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n<configuration>\n  <configSections>\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n    <sectionGroup name=\"dotNetOpenAuth\" type=\"DotNetOpenAuth.Configuration.DotNetOpenAuthSection, DotNetOpenAuth.Core\">\n      <section name=\"messaging\" type=\"DotNetOpenAuth.Configuration.MessagingElement, DotNetOpenAuth.Core\" requirePermission=\"false\" allowLocation=\"true\" />\n      <section name=\"reporting\" type=\"DotNetOpenAuth.Configuration.ReportingElement, DotNetOpenAuth.Core\" requirePermission=\"false\" allowLocation=\"true\" />\n      <section name=\"openid\" type=\"DotNetOpenAuth.Configuration.OpenIdElement, DotNetOpenAuth.OpenId\" requirePermission=\"false\" allowLocation=\"true\" />\n      <section name=\"oauth\" type=\"DotNetOpenAuth.Configuration.OAuthElement, DotNetOpenAuth.OAuth\" requirePermission=\"false\" allowLocation=\"true\" />\n    </sectionGroup>\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n  </configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=(LocalDb)\\v11.0;Initial Catalog=aspnet-LinqToTwitterMvcDemo-20130412201228;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\\aspnet-LinqToTwitterMvcDemo-20130412201228.mdf\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <add key=\"webpages:Version\" value=\"2.0.0.0\" />\n    <add key=\"webpages:Enabled\" value=\"false\" />\n    <add key=\"PreserveLoginUrl\" value=\"true\" />\n    <add key=\"ClientValidationEnabled\" value=\"true\" />\n    <add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"twitterConsumerKey\" value=\"\" />\n    <add key=\"twitterConsumerSecret\" value=\"\" />\n    <add key=\"twitterOAuthToken\" value=\"\" />\n    <add key=\"twitterAccessToken\" value=\"\" />\n  </appSettings>\n  <system.web>\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <httpRuntime targetFramework=\"4.5\" />\n    <authentication mode=\"Forms\">\n      <forms loginUrl=\"~/Account/Login\" timeout=\"2880\" />\n    </authentication>\n    <pages>\n      <namespaces>\n        <add namespace=\"System.Web.Helpers\" />\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\" />\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"System.Web.WebPages\" />\n      </namespaces>\n    </pages>\n  </system.web>\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n    <handlers>\n      <remove name=\"ExtensionlessUrlHandler-ISAPI-4.0_32bit\" />\n      <remove name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" />\n      <remove name=\"ExtensionlessUrlHandler-Integrated-4.0\" />\n      <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n      <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n      <add name=\"ExtensionlessUrlHandler-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n    </handlers>\n  </system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"DotNetOpenAuth.Core\" publicKeyToken=\"2780ccd10d57b246\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"DotNetOpenAuth.AspNet\" publicKeyToken=\"2780ccd10d57b246\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Razor\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages.Razor\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n    <!-- This prevents the Windows Event Log from frequently logging that HMAC1 is being used (when the other party needs it). -->\n    <legacyHMACWarning enabled=\"0\" />\n    <!-- When targeting ASP.NET MVC 3, this assemblyBinding makes MVC 1 and 2 references relink\n\t\t     to MVC 3 so libraries such as DotNetOpenAuth that compile against MVC 1 will work with it.\n\t\t<assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n\t\t\t\t<bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n\t\t\t</dependentAssembly>\n\t\t</assemblyBinding>\n\t\t -->\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework\" />\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n  <system.net>\n    <defaultProxy enabled=\"true\" />\n    <settings>\n      <!-- This setting causes .NET to check certificate revocation lists (CRL) \n\t\t\t     before trusting HTTPS certificates.  But this setting tends to not \n\t\t\t     be allowed in shared hosting environments. -->\n      <!--<servicePointManager checkCertificateRevocationList=\"true\"/>-->\n    </settings>\n  </system.net>\n  <dotNetOpenAuth>\n    <messaging>\n      <untrustedWebRequest>\n        <whitelistHosts>\n          <!-- Uncomment to enable communication with localhost (should generally not activate in production!) -->\n          <!--<add name=\"localhost\" />-->\n        </whitelistHosts>\n      </untrustedWebRequest>\n    </messaging>\n    <!-- Allow DotNetOpenAuth to publish usage statistics to library authors to improve the library. -->\n    <reporting enabled=\"true\" />\n    <!-- This is an optional configuration section where aspects of dotnetopenauth can be customized. -->\n    <!-- For a complete set of configuration options see http://www.dotnetopenauth.net/developers/code-snippets/configuration-options/ -->\n    <openid>\n      <relyingParty>\n        <security requireSsl=\"false\">\n          <!-- Uncomment the trustedProviders tag if your relying party should only accept positive assertions from a closed set of OpenID Providers. -->\n          <!--<trustedProviders rejectAssertionsFromUntrustedProviders=\"true\">\n\t\t\t\t\t\t<add endpoint=\"https://www.google.com/accounts/o8/ud\" />\n\t\t\t\t\t</trustedProviders>-->\n        </security>\n        <behaviors>\n          <!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible\n\t\t\t\t\t     with OPs that use Attribute Exchange (in various formats). -->\n          <add type=\"DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth.OpenId.RelyingParty\" />\n        </behaviors>\n      </relyingParty>\n    </openid>\n  </dotNetOpenAuth>\n  <uri>\n    <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names),\n\t\t     which is necessary for OpenID urls with unicode characters in the domain/host name.\n\t\t     It is also required to put the Uri class into RFC 3986 escaping mode, which OpenID and OAuth require. -->\n    <idn enabled=\"All\" />\n    <iriParsing enabled=\"true\" />\n  </uri>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterMvcDemo/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.4.1.9004\" targetFramework=\"net45\" />\n  <package id=\"BundlerMiddleware\" version=\"0.3.2\" targetFramework=\"net45\" />\n  <package id=\"BundlerMiddleware.System.Web\" version=\"0.3.2\" targetFramework=\"net45\" />\n  <package id=\"DotNetOpenAuth.AspNet\" version=\"4.1.4.12333\" targetFramework=\"net45\" />\n  <package id=\"DotNetOpenAuth.Core\" version=\"4.1.4.12333\" targetFramework=\"net45\" />\n  <package id=\"DotNetOpenAuth.OAuth.Consumer\" version=\"4.1.4.12333\" targetFramework=\"net45\" />\n  <package id=\"DotNetOpenAuth.OAuth.Core\" version=\"4.1.4.12333\" targetFramework=\"net45\" />\n  <package id=\"DotNetOpenAuth.OpenId.Core\" version=\"4.1.4.12333\" targetFramework=\"net45\" />\n  <package id=\"DotNetOpenAuth.OpenId.RelyingParty\" version=\"4.1.4.12333\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework\" version=\"6.1.1\" targetFramework=\"net45\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net45\" />\n  <package id=\"jQuery.UI.Combined\" version=\"1.13.2\" targetFramework=\"net45\" />\n  <package id=\"jQuery.Validation\" version=\"1.19.4\" targetFramework=\"net45\" />\n  <package id=\"knockoutjs\" version=\"2.2.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"4.0.30506.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Mvc.FixedDisplayModes\" version=\"1.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi\" version=\"4.0.20710.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"4.0.20710.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"4.0.20710.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.OData\" version=\"4.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost\" version=\"4.0.20710.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages.Data\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages.OAuth\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages.WebData\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Data.Edm\" version=\"5.2.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Data.OData\" version=\"5.8.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Ajax\" version=\"2.0.30116.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Validation\" version=\"2.0.30116.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.0.20710.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" />\n  <package id=\"Modernizr\" version=\"2.6.2\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" />\n  <package id=\"System.Spatial\" version=\"5.2.0\" targetFramework=\"net45\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/App.xaml",
    "content": "﻿<Application   \n  x:Class=\"LinqToTwitterSilverlightDemo.App\"\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n  <Application.Resources>\n    <ResourceDictionary>\n      <ResourceDictionary.MergedDictionaries>\n        <ResourceDictionary Source=\"Assets/Styles.xaml\"/>\n      </ResourceDictionary.MergedDictionaries>\n    </ResourceDictionary>\n  </Application.Resources>\n\n</Application>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing System.Windows.Controls;\n\nnamespace LinqToTwitterSilverlightDemo\n{\n    public partial class App : Application\n    {\n        public App()\n        {\n            this.Startup += this.Application_Startup;\n            this.UnhandledException += this.Application_UnhandledException;\n\n            InitializeComponent();\n        }\n\n        private void Application_Startup(object sender, StartupEventArgs e)\n        {\n            this.RootVisual = new MainPage();\n\n            //if (e.InitParams.ContainsKey(\"ConsumerKey\"))\n            //{\n            //    TwitterConfiguration.ConsumerKey = e.InitParams[\"ConsumerKey\"];\n            //}\n\n            //if (e.InitParams.ContainsKey(\"ConsumerSecret\"))\n            //{\n            //    TwitterConfiguration.ConsumerSecret = e.InitParams[\"ConsumerSecret\"];\n            //}\n        }\n\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            // If the app is running outside of the debugger then report the exception using\n            // a ChildWindow control.\n            if (!System.Diagnostics.Debugger.IsAttached)\n            {\n                // NOTE: This will allow the application to continue running after an exception has been thrown\n                // but not handled. \n                // For production applications this error handling should be replaced with something that will \n                // report the error to the website and stop the application.\n                e.Handled = true;\n                ChildWindow errorWin = new ErrorWindow(e.ExceptionObject);\n                errorWin.Show();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Assets/Styles.xaml",
    "content": "﻿<ResourceDictionary\n  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n  xmlns:navigation=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation\">\n\n  <!-- ******MAIN PAGE STYLES****** -->\n  <!-- **************************** -->\n  <!-- Primary Color Brushes -->\n  <SolidColorBrush x:Key=\"NavigationBackgroundColorBrush\" Color=\"#FF484848\"/>\n  <SolidColorBrush x:Key=\"NavigationForegroundColorBrush\" Color=\"#FFFFFFFF\"/>\n  <SolidColorBrush x:Key=\"HighLightColorBrush\" Color=\"#FF0097FC\"/>\n  <SolidColorBrush x:Key=\"HoverHyperlinkForegroundColorBrush\" Color=\"#FFEBF7FF\"/>\n  <SolidColorBrush x:Key=\"HoverHyperLinkBackgroundColorBrush\" Color=\"#FF747474\"/>\n  <SolidColorBrush x:Key=\"BodyTextColorBrush\" Color=\"#FF313131\"/>\n\n  <!-- LayoutRoot Grid Style -->\n  <Style x:Key=\"LayoutRootGridStyle\" TargetType=\"Grid\">\n    <Setter Property=\"Background\" Value=\"#FFFFFFFF\"/>\n  </Style>\n\n  <!-- Content Border Style -->\n  <Style x:Key=\"ContentBorderStyle\" TargetType=\"Border\">\n    <Setter Property=\"Background\">\n      <Setter.Value>\n        <LinearGradientBrush EndPoint=\"0.5,0.045\" StartPoint=\"0.5,0\">\n          <GradientStop Color=\"#6FCCCCCC\"/>\n          <GradientStop Color=\"#00CCCCCC\" Offset=\"1\"/>\n        </LinearGradientBrush>\n      </Setter.Value>\n    </Setter>\n    <Setter Property=\"BorderBrush\" Value=\"#FFFFFFFF\"/>\n    <Setter Property=\"BorderThickness\" Value=\"0,3,0,0\"/>\n    <Setter Property=\"Margin\" Value=\"0,42,0,0\"/>\n    <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n    <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n  </Style>\n\n  <!-- Content Frame Style -->\n  <Style x:Key=\"ContentFrameStyle\" TargetType=\"navigation:Frame\">\n    <Setter Property=\"Background\" Value=\"Transparent\"/>\n    <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n    <Setter Property=\"Padding\" Value=\"58,15,58,15\"/>\n    <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n    <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n  </Style>\n\n  <!-- Navigation Grid Style -->\n  <Style x:Key=\"NavigationGridStyle\" TargetType=\"Grid\">\n    <Setter Property=\"Background\" Value=\"{StaticResource NavigationBackgroundColorBrush}\"/>\n    <Setter Property=\"Height\" Value=\"42\"/>\n    <Setter Property=\"Margin\" Value=\"0\"/>\n    <Setter Property=\"VerticalAlignment\" Value=\"Top\"/>\n  </Style>\n\n  <!-- Branding Border Style -->\n  <Style x:Key=\"BrandingBorderStyle\" TargetType=\"Border\">\n    <Setter Property=\"Height\" Value=\"42\"/>\n    <Setter Property=\"Margin\" Value=\"25,0,25,0\"/>\n    <Setter Property=\"VerticalAlignment\" Value=\"Top\"/>\n    <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\n  </Style>\n\n  <!-- Branding StackPanel Style -->\n  <Style x:Key=\"BrandingStackPanelStyle\" TargetType=\"StackPanel\">\n    <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\n    <Setter Property=\"Orientation\" Value=\"Horizontal\"/>\n  </Style>\n\n  <!-- Logo Path Style -->\n  <Style x:Key=\"LogoIcon\" TargetType=\"ContentControl\">\n    <Setter Property=\"Height\" Value=\"24\"/>\n    <Setter Property=\"Width\" Value=\"24\"/>\n    <Setter Property=\"Margin\" Value=\"0,1,10,0\"/>\n    <Setter Property=\"Template\">\n      <Setter.Value>\n        <ControlTemplate TargetType=\"ContentControl\">\n          <Grid>\n            <Path UseLayoutRounding='False' Fill=\"{StaticResource HighLightColorBrush}\" Stretch=\"Fill\" Data=\"M8,0 C12.417931,2.8898596E-06 16,3.5814998 16,8 C16,12.417819 12.41803,16 8,16 C3.5816212,16 6.1398991E-06,12.417912 0,8 C1.5351338E-06,6.8954077 0.22386749,5.8431153 0.62867981,4.8860393 C0.65398115,4.82622 0.6799894,4.7667723 0.70669389,4.7077074 L0.73170543,4.6541386 L5.6357112,9.5581446 L3.7429986,11.450858 L3.7429986,11.493001 L11.669835,11.493001 L11.669835,3.5661643 L11.627691,3.5661643 L9.7349787,5.4588776 L4.8993444,0.62324351 L5.0666013,0.55490673 C5.5510159,0.36389247 6.0585575,0.21878535 6.5838675,0.12495131 C6.8465204,0.078035071 7.1136146,0.043936942 7.3844767,0.023327276 C7.5199089,0.013022465 7.6562829,0.0060896641 7.7935166,0.0026129775 C7.862133,0.00087448902 7.9309645,4.5157563E-08 8,0 z\"/>\n          </Grid>\n        </ControlTemplate>\n      </Setter.Value>\n    </Setter>\n  </Style>\n\n  <!-- ApplicationName Style -->\n  <Style x:Key=\"ApplicationNameStyle\" TargetType=\"TextBlock\">\n    <Setter Property=\"Foreground\" Value=\"{StaticResource NavigationForegroundColorBrush}\"/>\n    <Setter Property=\"FontSize\" Value=\"14\"/>\n    <Setter Property=\"FontWeight\" Value=\"Bold\"/>\n    <Setter Property=\"Margin\" Value=\"0,2,0,0\"/>\n    <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n    <Setter Property=\"Effect\">\n      <Setter.Value>\n        <DropShadowEffect BlurRadius=\"10\" Opacity=\"0.25\" ShadowDepth=\"0\"/>\n      </Setter.Value>\n    </Setter>\n  </Style>\n\n  <!-- Links Border Style -->\n  <Style x:Key=\"LinksBorderStyle\" TargetType=\"Border\">\n    <Setter Property=\"Height\" Value=\"42\"/>\n    <Setter Property=\"Margin\" Value=\"25,0,25,0\"/>\n    <Setter Property=\"HorizontalAlignment\" Value=\"Right\"/>\n  </Style>\n\n  <!-- Links StackPanel Style -->\n  <Style x:Key=\"LinksStackPanelStyle\" TargetType=\"StackPanel\">\n    <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n    <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\n    <Setter Property=\"Orientation\" Value=\"Horizontal\"/>\n  </Style>\n\n  <!-- Link Style -->\n  <Style x:Key=\"LinkStyle\" TargetType=\"HyperlinkButton\">\n    <Setter Property=\"Background\" Value=\"{StaticResource HighLightColorBrush}\"/>\n    <Setter Property=\"BorderThickness\" Value=\"1\"/>\n    <Setter Property=\"BorderBrush\" Value=\"#FF9D9492\"/>\n    <Setter Property=\"Foreground\" Value=\"{StaticResource NavigationForegroundColorBrush}\"/>\n    <Setter Property=\"FontSize\" Value=\"12\"/>\n    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n    <Setter Property=\"MinHeight\" Value=\"28\"/>\n    <Setter Property=\"MinWidth\" Value=\"78\"/>\n    <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n    <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n    <Setter Property=\"Padding\" Value=\"8,4,8,4\"/>\n    <Setter Property=\"Template\">\n      <Setter.Value>\n        <ControlTemplate TargetType=\"HyperlinkButton\">\n          <Grid x:Name=\"ButtonGrid\" Cursor=\"{TemplateBinding Cursor}\">\n            <VisualStateManager.VisualStateGroups>\n              <VisualStateGroup x:Name=\"CommonStates\">\n                <VisualState x:Name=\"Normal\"/>\n                <VisualState x:Name=\"MouseOver\">\n                  <Storyboard>\n                    <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"InteractiveElementBorder\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\n                      <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <Visibility>Visible</Visibility>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"InteractiveElementBorder\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0.95\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Effect).(DropShadowEffect.BlurRadius)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"10\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"InteractiveBorder\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"1\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                  </Storyboard>\n                </VisualState>\n                <VisualState x:Name=\"Pressed\">\n                  <Storyboard>\n                    <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"InteractiveElementBorder\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\n                      <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <Visibility>Visible</Visibility>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"InteractiveElementBorder\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0.8\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Effect).(DropShadowEffect.BlurRadius)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"5\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0.5\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"InteractiveBorder\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"1\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                  </Storyboard>\n                </VisualState>\n                <VisualState x:Name=\"Disabled\">\n                  <Storyboard>\n                    <ObjectAnimationUsingKeyFrames Duration=\"0\" Storyboard.TargetName=\"DisabledOverlay\" Storyboard.TargetProperty=\"Visibility\">\n                      <DiscreteObjectKeyFrame KeyTime=\"0\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <Visibility>Visible</Visibility>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(FrameworkElement.HorizontalAlignment)\">\n                      <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <HorizontalAlignment>Center</HorizontalAlignment>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(FrameworkElement.VerticalAlignment)\">\n                      <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <VerticalAlignment>Center</VerticalAlignment>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"DisabledOverlay\" Storyboard.TargetProperty=\"(FrameworkElement.HorizontalAlignment)\">\n                      <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <HorizontalAlignment>Center</HorizontalAlignment>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"DisabledOverlay\" Storyboard.TargetProperty=\"(FrameworkElement.VerticalAlignment)\">\n                      <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\n                        <DiscreteObjectKeyFrame.Value>\n                          <VerticalAlignment>Center</VerticalAlignment>\n                        </DiscreteObjectKeyFrame.Value>\n                      </DiscreteObjectKeyFrame>\n                    </ObjectAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"DisabledOverlay\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0.5\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                  </Storyboard>\n                </VisualState>\n              </VisualStateGroup>\n              <VisualStateGroup x:Name=\"LinkStates\">\n                <VisualState x:Name=\"ActiveLink\">\n                  <Storyboard>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ActiveBorder\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"1\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"ContentBorder\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"1\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                  </Storyboard>\n                </VisualState>\n                <VisualState x:Name=\"InactiveLink\"/>\n              </VisualStateGroup>\n              <VisualStateGroup x:Name=\"FocusStates\">\n                <VisualState x:Name=\"Focused\">\n                  <Storyboard>\n                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"FocusVisualElement\" Storyboard.TargetProperty=\"Opacity\">\n                      <SplineDoubleKeyFrame KeyTime=\"0\" Value=\"0.35\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"FocusVisualElement\" Storyboard.TargetProperty=\"(Rectangle.RadiusX)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"1\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                    <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Duration=\"00:00:00.0010000\" Storyboard.TargetName=\"FocusVisualElement\" Storyboard.TargetProperty=\"(Rectangle.RadiusY)\">\n                      <EasingDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"1\"/>\n                    </DoubleAnimationUsingKeyFrames>\n                  </Storyboard>\n                </VisualState>\n                <VisualState x:Name=\"Unfocused\"/>\n              </VisualStateGroup>\n            </VisualStateManager.VisualStateGroups>\n            <Rectangle x:Name=\"FocusVisualElement\" Stroke=\"{TemplateBinding BorderBrush}\" StrokeThickness=\"2\" Opacity=\"0\" Margin=\"-1\" RadiusX=\"1\" RadiusY=\"1\"/>\n            <Border x:Name=\"ActiveBorder\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" CornerRadius=\"1\" Opacity=\"0\"/>\n            <Border x:Name=\"ContentBorder\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\" Opacity=\"1\">\n              <ContentPresenter x:Name=\"ContentPresenter\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" Content=\"{TemplateBinding Content}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" Opacity=\"1\">\n                <ContentPresenter.Effect>\n                  <DropShadowEffect ShadowDepth=\"0\" Color=\"#FF484848\" Opacity=\"0.65\" BlurRadius=\"0\"/>\n                </ContentPresenter.Effect>\n              </ContentPresenter>\n            </Border>\n            <Border x:Name=\"InteractiveBorder\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{StaticResource HoverHyperLinkBackgroundColorBrush}\" BorderThickness=\"1,1,1,1\" Opacity=\"0\" BorderBrush=\"{StaticResource HoverHyperLinkBackgroundColorBrush}\" CornerRadius=\"1,1,1,1\"/>\n            <Border x:Name=\"InteractiveElementBorder\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Visibility=\"Collapsed\">\n              <TextBlock x:Name=\"InteractiveElement\" Foreground=\"{StaticResource HoverHyperlinkForegroundColorBrush}\" FontSize=\"{TemplateBinding FontSize}\" FontWeight=\"{TemplateBinding FontWeight}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" Text=\"{TemplateBinding Content}\"/>\n            </Border>\n            <TextBlock x:Name=\"DisabledOverlay\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" Text=\"{TemplateBinding Content}\" Foreground=\"#FFAAAAAA\" Visibility=\"Collapsed\"/>\n          </Grid>\n        </ControlTemplate>\n      </Setter.Value>\n    </Setter>\n  </Style>\n\n  <!-- Divider Style -->\n  <Style x:Key=\"DividerStyle\" TargetType=\"Rectangle\">\n    <Setter Property=\"Fill\" Value=\"#1FFFFFFF\"/>\n    <Setter Property=\"Stroke\" Value=\"Transparent\"/>\n    <Setter Property=\"Width\" Value=\"1\"/>\n    <Setter Property=\"Margin\" Value=\"2,4,2,4\"/>\n  </Style>\n\n  <!-- ******CONTENT PAGE STYLES****** -->\n  <!-- ******************************* -->\n  <!-- Page Style -->\n  <Style x:Key=\"PageStyle\" TargetType=\"navigation:Page\"/>\n\n  <!-- Page ScrollViewer Style -->\n  <Style x:Key=\"PageScrollViewerStyle\" TargetType=\"ScrollViewer\">\n    <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n    <Setter Property=\"BorderThickness\" Value=\"0,1,0,1\"/>\n    <Setter Property=\"Margin\" Value=\"-58,-15,-58,-15\"/>\n    <Setter Property=\"Padding\" Value=\"58,0,58,0\"/>\n    <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n    <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n  </Style>\n\n  <!-- Content Panel Style -->\n  <Style x:Key=\"ContentPanelStyle\" TargetType=\"StackPanel\"/>\n\n  <!-- Header Text Style -->\n  <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\">\n    <Setter Property=\"Foreground\" Value=\"{StaticResource BodyTextColorBrush}\"/>\n    <Setter Property=\"FontSize\" Value=\"15\"/>\n    <Setter Property=\"FontWeight\" Value=\"Bold\"/>\n    <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n    <Setter Property=\"Margin\" Value=\"0,15,0,4\"/>\n    <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\n  </Style>\n\n  <!-- Content Text Style -->\n  <Style x:Key=\"ContentTextStyle\" TargetType=\"TextBlock\">\n    <Setter Property=\"Foreground\" Value=\"{StaticResource BodyTextColorBrush}\"/>\n    <Setter Property=\"FontSize\" Value=\"12\"/>\n    <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n    <Setter Property=\"Margin\" Value=\"0,2,0,2\"/>\n    <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\n  </Style>\n\n  <!-- Page HyperlinkButton Style -->\n  <Style x:Key=\"PageHyperlinkButtonStyle\" TargetType=\"HyperlinkButton\">\n    <Setter Property=\"TargetName\" Value=\"_new\"/>\n    <Setter Property=\"FontSize\" Value=\"12\"/>\n    <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n  </Style>\n\n</ResourceDictionary>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/LinqToTwitterSilverlightDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{F1F4D80B-4772-4D9A-97F9-F11D57F4E519}</ProjectGuid>\n    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitterSilverlightDemo</RootNamespace>\n    <AssemblyName>LinqToTwitterSilverlightDemo</AssemblyName>\n    <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>LinqToTwitterSilverlightDemo.xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>LinqToTwitterSilverlightDemo.App</SilverlightAppEntry>\n    <TestPageFileName>LinqToTwitterSilverlightDemoTestPage.html</TestPageFileName>\n    <CreateTestPage>true</CreateTestPage>\n    <ValidateXaml>true</ValidateXaml>\n    <EnableOutOfBrowser>true</EnableOutOfBrowser>\n    <OutOfBrowserSettingsFile>Properties\\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>\n    <UsePlatformExtensions>false</UsePlatformExtensions>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <LinkedServerProject>\n    </LinkedServerProject>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n  </PropertyGroup>\n  <!-- This property group is only here to support building this project using the \n       MSBuild 3.5 toolset. In order to work correctly with this older toolset, it needs \n       to set the TargetFrameworkVersion to v3.5 -->\n  <PropertyGroup Condition=\"'$(MSBuildToolsVersion)' == '3.5'\">\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations, Version=2.0.5.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Windows\" />\n    <Reference Include=\"system\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Windows.Controls.Data, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n    <Reference Include=\"System.Windows.Controls.Data.Input, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n    <Reference Include=\"System.Windows.Data, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Windows.Browser\" />\n    <Reference Include=\"System.Windows.Controls\" />\n    <Reference Include=\"System.Windows.Controls.Navigation\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Model\\MyTweet.cs\" />\n    <Compile Include=\"Model\\TwitterConfiguration.cs\" />\n    <Compile Include=\"Views\\ErrorWindow.xaml.cs\">\n      <DependentUpon>ErrorWindow.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Views\\About.xaml.cs\">\n      <DependentUpon>About.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Views\\HomeTimelineQuery.xaml.cs\">\n      <DependentUpon>HomeTimelineQuery.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Views\\Home.xaml.cs\">\n      <DependentUpon>Home.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Views\\StatusUpdate.xaml.cs\">\n      <DependentUpon>StatusUpdate.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Views\\HomeTimelineQuery.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"Views\\StatusUpdate.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Resource Include=\"Assets\\Styles.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Resource>\n    <Page Include=\"Views\\ErrorWindow.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"Views\\About.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"Views\\Home.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Properties\\AppManifest.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Properties\\OutOfBrowserSettings.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <WCFMetadata Include=\"Service References\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Silverlight\\$(SilverlightVersion)\\Microsoft.Silverlight.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{A1591282-1198-4647-A2B1-27E5FF5F6F3B}\">\n        <SilverlightProjectProperties />\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/MainPage.xaml",
    "content": "﻿<UserControl\n    x:Class=\"LinqToTwitterSilverlightDemo.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:navigation=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation\" \n    xmlns:uriMapper=\"clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    mc:Ignorable=\"d\" d:DesignWidth=\"640\" d:DesignHeight=\"480\">\n\n    <Grid x:Name=\"LayoutRoot\" Style=\"{StaticResource LayoutRootGridStyle}\">\n\n        <Border x:Name=\"ContentBorder\" Style=\"{StaticResource ContentBorderStyle}\">\n\n            <navigation:Frame x:Name=\"ContentFrame\" Style=\"{StaticResource ContentFrameStyle}\" \n                              Source=\"/Home\" Navigated=\"ContentFrame_Navigated\" NavigationFailed=\"ContentFrame_NavigationFailed\">\n                <navigation:Frame.UriMapper>\n                  <uriMapper:UriMapper>\n                    <uriMapper:UriMapping Uri=\"\" MappedUri=\"/Views/Home.xaml\"/>\n                    <uriMapper:UriMapping Uri=\"/{pageName}\" MappedUri=\"/Views/{pageName}.xaml\"/>\n                  </uriMapper:UriMapper>\n                </navigation:Frame.UriMapper>\n            </navigation:Frame>\n        </Border>\n\n        <Grid x:Name=\"NavigationGrid\" Style=\"{StaticResource NavigationGridStyle}\">\n\n            <Border x:Name=\"BrandingBorder\" Style=\"{StaticResource BrandingBorderStyle}\">\n                <StackPanel x:Name=\"BrandingStackPanel\" Style=\"{StaticResource BrandingStackPanelStyle}\">\n\n                    <ContentControl Style=\"{StaticResource LogoIcon}\"/>\n                    <TextBlock x:Name=\"ApplicationNameTextBlock\" Style=\"{StaticResource ApplicationNameStyle}\" \n                               Text=\"LINQ to Twitter Silverlight Demo\"/>\n\n                </StackPanel>\n            </Border>\n\n            <Border x:Name=\"LinksBorder\" Style=\"{StaticResource LinksBorderStyle}\">\n                <StackPanel x:Name=\"LinksStackPanel\" Style=\"{StaticResource LinksStackPanelStyle}\">\n\n                    <HyperlinkButton x:Name=\"Link1\" Style=\"{StaticResource LinkStyle}\" \n                                     NavigateUri=\"/Home\" TargetName=\"ContentFrame\" Content=\"home\"/>\n\t\t\t\t\t\t\t\t\t \n                    <Rectangle x:Name=\"Divider1\" Style=\"{StaticResource DividerStyle}\"/>\n\t\t\t\t\t\n                    <HyperlinkButton x:Name=\"HomeTimelilneLink\" Style=\"{StaticResource LinkStyle}\" \n                                     NavigateUri=\"/HomeTimelineQuery\" TargetName=\"ContentFrame\" Content=\"Home Timeline\"/>\n\n                    <Rectangle x:Name=\"Divider2\" Style=\"{StaticResource DividerStyle}\"/>\n\n                    <HyperlinkButton x:Name=\"UpdateLink\" Style=\"{StaticResource LinkStyle}\" \n                                     NavigateUri=\"/StatusUpdate\" TargetName=\"ContentFrame\" Content=\"Status Update\"/>\n\n                </StackPanel>\n            </Border>\n\n        </Grid>\n\n    </Grid>\n\n</UserControl>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/MainPage.xaml.cs",
    "content": "﻿using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\n\nnamespace LinqToTwitterSilverlightDemo\n{\n    public partial class MainPage : UserControl\n    {\n        public MainPage()\n        {\n            InitializeComponent();\n        }\n\n        // After the Frame navigates, ensure the HyperlinkButton representing the current page is selected\n        private void ContentFrame_Navigated(object sender, NavigationEventArgs e)\n        {\n            foreach (UIElement child in LinksStackPanel.Children)\n            {\n                HyperlinkButton hb = child as HyperlinkButton;\n                if (hb != null && hb.NavigateUri != null)\n                {\n                    if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))\n                    {\n                        VisualStateManager.GoToState(hb, \"ActiveLink\", true);\n                    }\n                    else\n                    {\n                        VisualStateManager.GoToState(hb, \"InactiveLink\", true);\n                    }\n                }\n            }\n        }\n\n        // If an error occurs during navigation, show an error window\n        private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            e.Handled = true;\n            ChildWindow errorWin = new ErrorWindow(e.Uri);\n            errorWin.Show();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Model/MyTweet.cs",
    "content": "﻿namespace LinqToTwitterSilverlightDemo\n{\n    public class MyTweet\n    {\n        public string ScreenName { get; set; }\n        public string Tweet { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Model/TwitterConfiguration.cs",
    "content": "﻿namespace LinqToTwitterSilverlightDemo\n{\n    public static class TwitterConfiguration\n    {\n        public static string ConsumerKey { get; set; }\n\n        public static string ConsumerSecret { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n\n</Deployment>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterSilverlightDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterSilverlightDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2010\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"cc3bec38-dc76-460a-8ae5-74f1bd2e21f0\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Properties/OutOfBrowserSettings.xml",
    "content": "<OutOfBrowserSettings ShortName=\"LinqToTwitterSilverlightDemo Application\" EnableGPUAcceleration=\"False\" ShowInstallMenuItem=\"True\">\n  <OutOfBrowserSettings.Blurb>LinqToTwitterSilverlightDemo Application on your desktop; at home, at work or on the go.</OutOfBrowserSettings.Blurb>\n  <OutOfBrowserSettings.WindowSettings>\n    <WindowSettings Title=\"LinqToTwitterSilverlightDemo Application\" />\n  </OutOfBrowserSettings.WindowSettings>\n  <OutOfBrowserSettings.SecuritySettings>\n    <SecuritySettings ElevatedPermissions=\"Required\" />\n  </OutOfBrowserSettings.SecuritySettings>\n  <OutOfBrowserSettings.Icons />\n</OutOfBrowserSettings>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/About.xaml",
    "content": "﻿<navigation:Page x:Class=\"LinqToTwitterSilverlightDemo.About\" \n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:navigation=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation\"\n    mc:Ignorable=\"d\" d:DesignWidth=\"640\" d:DesignHeight=\"480\"\n    Title=\"About\" \n    Style=\"{StaticResource PageStyle}\">\n\n    <Grid x:Name=\"LayoutRoot\">\n        <ScrollViewer x:Name=\"PageScrollViewer\" Style=\"{StaticResource PageScrollViewerStyle}\">\n\n            <StackPanel x:Name=\"ContentStackPanel\">\n\n                <TextBlock x:Name=\"HeaderText\" Style=\"{StaticResource HeaderTextStyle}\" \n                           Text=\"About\"/>\n                <TextBlock x:Name=\"ContentText\" Style=\"{StaticResource ContentTextStyle}\" \n                           Text=\"About page content\"/>\n\n            </StackPanel>\n\n        </ScrollViewer>\n    </Grid>\n\n</navigation:Page>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/About.xaml.cs",
    "content": "﻿using System.Windows.Controls;\nusing System.Windows.Navigation;\n\nnamespace LinqToTwitterSilverlightDemo\n{\n    public partial class About : Page\n    {\n        public About()\n        {\n            InitializeComponent();\n        }\n\n        // Executes when the user navigates to this page.\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/ErrorWindow.xaml",
    "content": "﻿<controls:ChildWindow  \n    x:Class=\"LinqToTwitterSilverlightDemo.ErrorWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n    xmlns:controls=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls\"    \n    Title=\"Error\">\n\n    <Grid x:Name=\"LayoutRoot\" Width=\"540\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <TextBlock x:Name=\"IntroductoryText\" Grid.Row=\"0\" Margin=\"0\" \n               Text=\"An unknown error was encountered. Please contact your administrator for more information.\"/>\n\n        <StackPanel x:Name=\"ContentStackPanel\" Grid.Row=\"2\" Margin=\"0,6,0,0\">\n\n            <TextBlock x:Name=\"LabelText\" TextWrapping=\"Wrap\" Margin=\"0,0,0,2\" \n                       Text=\"Error details\"/>\n            <TextBox x:Name=\"ErrorTextBox\" Height=\"90\" TextWrapping=\"Wrap\" IsReadOnly=\"True\"\n                     VerticalScrollBarVisibility=\"Auto\"/>\n\n        </StackPanel>\n\n        <Button x:Name=\"OKButton\" Grid.Row=\"3\" Click=\"OKButton_Click\" \n            Width=\"75\" Height=\"23\" HorizontalAlignment=\"Right\" Margin=\"0,10,0,0\" \n            TabIndex=\"0\" Content=\"OK\"/>\n\n    </Grid>\n\n</controls:ChildWindow>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/ErrorWindow.xaml.cs",
    "content": "﻿using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace LinqToTwitterSilverlightDemo\n{\n    public partial class ErrorWindow : ChildWindow\n    {\n        public ErrorWindow(Exception e)\n        {\n            InitializeComponent();\n            if (e != null)\n            {\n                ErrorTextBox.Text = e.Message + Environment.NewLine + Environment.NewLine + e.StackTrace;\n            }\n        }\n\n        public ErrorWindow(Uri uri)\n        {\n            InitializeComponent();\n            if (uri != null)\n            {\n                ErrorTextBox.Text = \"Page not found: \\\"\" + uri.ToString() + \"\\\"\";\n            }\n        }\n\n        public ErrorWindow(string message, string details)\n        {\n            InitializeComponent();\n            ErrorTextBox.Text = message + Environment.NewLine + Environment.NewLine + details;\n        }\n\n        private void OKButton_Click(object sender, RoutedEventArgs e)\n        {\n            this.DialogResult = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/Home.xaml",
    "content": "﻿<navigation:Page x:Class=\"LinqToTwitterSilverlightDemo.Home\" \n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:navigation=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation\"\n    mc:Ignorable=\"d\" d:DesignWidth=\"640\" d:DesignHeight=\"480\"\n    Title=\"Home\"\n    Style=\"{StaticResource PageStyle}\">\n\n    <Grid x:Name=\"LayoutRoot\">\n        <ScrollViewer x:Name=\"PageScrollViewer\" Style=\"{StaticResource PageScrollViewerStyle}\">\n\n            <StackPanel x:Name=\"ContentStackPanel\">\n\n                <TextBlock x:Name=\"HeaderText\" Style=\"{StaticResource HeaderTextStyle}\" \n                                   Text=\"Home\"/>\n                <TextBlock x:Name=\"ContentText\" Style=\"{StaticResource ContentTextStyle}\" \n                                   Text=\"Home page content\"/>\n\n            </StackPanel>\n\n        </ScrollViewer>\n    </Grid>\n\n</navigation:Page>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/Home.xaml.cs",
    "content": "﻿using System.Windows.Controls;\nusing System.Windows.Navigation;\n\nnamespace LinqToTwitterSilverlightDemo\n{\n    public partial class Home : Page\n    {\n        public Home()\n        {\n            InitializeComponent();\n        }\n\n        // Executes when the user navigates to this page.\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/HomeTimelineQuery.xaml",
    "content": "﻿<navigation:Page x:Class=\"LinqToTwitterSilverlightDemo.Views.HomeTimelineQuery\" \n           xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n           xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n           xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n           xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n           mc:Ignorable=\"d\"\n           xmlns:navigation=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation\"\n           d:DesignWidth=\"640\" d:DesignHeight=\"480\"\n           Title=\"FriendsStatusQuery Page\" xmlns:sdk=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk\">\n    <Grid x:Name=\"LayoutRoot\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\" />\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n        <WebBrowser Grid.Row=\"0\" Name=\"WebBrowser\" />\n        <StackPanel Grid.Row=\"1\" Name=\"PinPanel\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Top\">\n            <sdk:Label Name=\"label2\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Right\" Margin=\"0,10,0,0\" Width=\"37\" Content=\"Pin:\" />\n            <TextBox Name=\"PinTextBox\" VerticalAlignment=\"Top\" Margin=\"5\" Width=\"120\" />\n            <Button Content=\"Submit\" Height=\"23\" Name=\"PinButton\" Margin=\"5\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"PinButton_Click\" />\n        </StackPanel>\n        <StackPanel Grid.Row=\"2\" HorizontalAlignment=\"Center\" Name=\"FriendsPanel\" Visibility=\"Collapsed\">\n            <Button Content=\"Show friends\" Height=\"23\" Name=\"FriendsButton\" Width=\"85\" Margin=\"5\" Click=\"FriendsButton_Click\" />\n            <sdk:DataGrid AutoGenerateColumns=\"True\" Name=\"FriendsDataGrid\" Margin=\"5\" />\n        </StackPanel>\n    </Grid>\n</navigation:Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/HomeTimelineQuery.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Browser;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterSilverlightDemo.Views\n{\n    public partial class HomeTimelineQuery : Page\n    {\n        private TwitterContext twitterCtx = null;\n        private PinAuthorizer pinAuth = null;\n\n        public HomeTimelineQuery()\n        {\n            InitializeComponent();\n        }\n\n        // Executes when the user navigates to this page.\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            // Uncomment the code below if you need to use XAuth. Generally, XAuth isn't available unless you specifically\n            // justify using it with Twitter: http://dev.twitter.com/pages/xauth. You should use OAuth instead.  However,\n            // LINQ to Twitter supports XAuth if you're one of the rare cases that Twitter gives permission to.\n\n            //DoXAuth();\n            //return;\n\n            if (Application.Current.IsRunningOutOfBrowser &&\n                Application.Current.HasElevatedPermissions)\n            {\n                DoPinAuth(); \n            }\n            else\n            {\n                DoWebAuth();\n            }\n        }\n\n        private void DoWebAuth()\n        {\n            WebBrowser.Visibility = Visibility.Collapsed;\n            PinPanel.Visibility = Visibility.Collapsed;\n\n            var auth = new SilverlightAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                },\n                PerformRedirect = authUrl => \n                    Dispatcher.BeginInvoke(() => HtmlPage.Window.Navigate(new Uri(authUrl)))\n            };\n\n            Uri url = HtmlPage.Document.DocumentUri;\n\n            auth.CompleteAuthorize(url, resp =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    // you can save these in the db and add logic\n                    // to look for credentials from db before\n                    // doing Oauth dance.\n                    var oauthToken = auth.Credentials.OAuthToken;\n                    var accessToken = auth.Credentials.AccessToken;\n\n                    switch (resp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            FriendsPanel.Visibility = Visibility.Visible;\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                resp.Exception.ToString(),\n                                resp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n\n            if (!auth.IsAuthorized && !auth.IsAuthorizing)\n            {\n                auth.BeginAuthorize(url, resp =>\n                    Dispatcher.BeginInvoke(() =>\n                    {\n                        switch (resp.Status)\n                        {\n                            case TwitterErrorStatus.Success:\n                                break;\n                            case TwitterErrorStatus.TwitterApiError:\n                            case TwitterErrorStatus.RequestProcessingException:\n                                MessageBox.Show(\n                                    resp.Exception.ToString(),\n                                    resp.Message,\n                                    MessageBoxButton.OK);\n                                break;\n                        }\n                    }));\n            }\n\n            twitterCtx = new TwitterContext(auth);\n        }\n\n        private void DoPinAuth()\n        {\n            pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                },\n                UseCompression = true,\n                GoToTwitterAuthorization = pageLink =>\n                    Dispatcher.BeginInvoke(() => WebBrowser.Navigate(new Uri(pageLink)))\n            };\n\n            pinAuth.BeginAuthorize(resp =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    switch (resp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                resp.Exception.ToString(),\n                                resp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n\n            twitterCtx = new TwitterContext(pinAuth);\n        }\n\n        private void PinButton_Click(object sender, RoutedEventArgs e)\n        {\n            string pin = PinTextBox.Text;\n\n            pinAuth.CompleteAuthorize(\n                PinTextBox.Text,\n                completeResp => Dispatcher.BeginInvoke(() =>\n                {\n                    switch (completeResp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            FriendsPanel.Visibility = Visibility.Visible;\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                completeResp.Exception.ToString(),\n                                completeResp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n        }\n\n        private void FriendsButton_Click(object sender, RoutedEventArgs e)\n        {\n            (from tweet in twitterCtx.Status\n             where tweet.Type == StatusType.Home\n             select tweet)\n            .AsyncCallback(tweets =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    var projectedTweets =\n                        (from tweet in tweets\n                        select new MyTweet\n                        {\n                            ScreenName = tweet.User.Identifier.ScreenName,\n                            Tweet = tweet.Text\n                        })\n                        .ToList();\n\n                    FriendsDataGrid.ItemsSource = projectedTweets;\n                }))\n            .SingleOrDefault();\n        }\n\n        private void DoXAuth()\n        {\n            WebBrowser.Visibility = Visibility.Collapsed;\n            PinPanel.Visibility = Visibility.Collapsed;\n\n            var auth = new XAuthAuthorizer\n            {\n                Credentials = new XAuthCredentials\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\",\n                    UserName = \"\",\n                    Password = \"\"\n                }\n            };\n\n            auth.BeginAuthorize(resp =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    switch (resp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            FriendsPanel.Visibility = Visibility.Visible;\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                resp.Exception.ToString(),\n                                resp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n\n            twitterCtx = new TwitterContext(auth);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/StatusUpdate.xaml",
    "content": "﻿<navigation:Page x:Class=\"LinqToTwitterSilverlightDemo.Views.StatusUpdate\" \n           xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n           xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n           xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n           xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n           mc:Ignorable=\"d\"\n           xmlns:navigation=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation\"\n           d:DesignWidth=\"640\" d:DesignHeight=\"500\"\n           Title=\"StatusUpdate Page\" xmlns:sdk=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk\">\n    <Grid x:Name=\"LayoutRoot\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\" />\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n        <WebBrowser Grid.Row=\"0\" Name=\"WebBrowser\" />\n        <StackPanel Grid.Row=\"1\" Name=\"PinPanel\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Top\">\n            <sdk:Label Name=\"label2\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Right\" Margin=\"0,10,0,0\" Width=\"37\" Content=\"Pin:\" />\n            <TextBox Name=\"PinTextBox\" VerticalAlignment=\"Top\" Margin=\"5\" Width=\"120\" />\n            <Button Content=\"Submit\" Height=\"23\" Name=\"PinButton\" Margin=\"5\" VerticalAlignment=\"Top\" Width=\"75\" Click=\"PinButton_Click\" />\n        </StackPanel>\n        <StackPanel Grid.Row=\"2\" Height=\"81\" HorizontalAlignment=\"Center\" Name=\"UpdatePanel\" VerticalAlignment=\"Top\" Orientation=\"Horizontal\" Visibility=\"Collapsed\">\n            <sdk:Label Name=\"label1\" Content=\"Tweet:\" />\n            <TextBox Height=\"52\" Name=\"TweetTextBox\" Width=\"349\" />\n            <Button Content=\"Send\" Height=\"23\" Name=\"SendButton\" Width=\"75\" Margin=\"5\" Click=\"SendButton_Click\" />\n        </StackPanel>\n    </Grid>\n</navigation:Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo/Views/StatusUpdate.xaml.cs",
    "content": "﻿using System;\nusing System.Windows;\nusing System.Windows.Browser;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterSilverlightDemo.Views\n{\n    public partial class StatusUpdate : Page\n    {\n        private TwitterContext twitterCtx = null;\n        private PinAuthorizer pinAuth = null;\n\n        public StatusUpdate()\n        {\n            InitializeComponent();\n        }\n\n        // Executes when the user navigates to this page.\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (Application.Current.IsRunningOutOfBrowser &&\n                Application.Current.HasElevatedPermissions)\n            {\n                DoPinAuth();\n            }\n            else\n            {\n                DoWebAuth();\n            }\n        }\n\n        private void DoPinAuth()\n        {\n            pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                },\n                UseCompression = true,\n                GoToTwitterAuthorization = pageLink =>\n                    Dispatcher.BeginInvoke(() => WebBrowser.Navigate(new Uri(pageLink)))\n            };\n\n            pinAuth.BeginAuthorize(resp =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    switch (resp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                resp.Exception.ToString(),\n                                resp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n\n            twitterCtx = new TwitterContext(pinAuth);\n        }\n\n        private void DoWebAuth()\n        {\n            WebBrowser.Visibility = Visibility.Collapsed;\n            PinPanel.Visibility = Visibility.Collapsed;\n\n            var auth = new SilverlightAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                },\n                PerformRedirect = authUrl =>\n                    Dispatcher.BeginInvoke(() => HtmlPage.Window.Navigate(new Uri(authUrl)))\n            };\n\n            Uri url = HtmlPage.Document.DocumentUri;\n\n            auth.CompleteAuthorize(url, resp =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    switch (resp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            UpdatePanel.Visibility = Visibility.Visible;\n                            TweetTextBox.Text = \"Silverlight Web Test, \" + DateTime.Now.ToString() + \" #linqtotwitter\";\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                resp.Exception.ToString(),\n                                resp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n\n            if (!auth.IsAuthorized && !auth.IsAuthorizing)\n            {\n                auth.BeginAuthorize(url, resp =>\n                    Dispatcher.BeginInvoke(() =>\n                    {\n                        switch (resp.Status)\n                        {\n                            case TwitterErrorStatus.Success:\n                                break;\n                            case TwitterErrorStatus.TwitterApiError:\n                            case TwitterErrorStatus.RequestProcessingException:\n                                MessageBox.Show(\n                                    resp.Exception.ToString(),\n                                    resp.Message,\n                                    MessageBoxButton.OK);\n                                break;\n                        }\n                    }));\n            }\n\n            twitterCtx = new TwitterContext(auth);\n        }\n\n        private void PinButton_Click(object sender, RoutedEventArgs e)\n        {\n            pinAuth.CompleteAuthorize(\n                PinTextBox.Text,\n                completeResp => Dispatcher.BeginInvoke(() =>\n                {\n                    switch (completeResp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            UpdatePanel.Visibility = Visibility.Visible;\n                            TweetTextBox.Text = \"Silverlight OOB Test, \" + DateTime.Now.ToString() + \" #linqtotwitter\";\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                completeResp.Exception.ToString(),\n                                completeResp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n        }\n\n        private void SendButton_Click(object sender, RoutedEventArgs e)\n        {\n            twitterCtx.UpdateStatus(TweetTextBox.Text,\n                updateResp => Dispatcher.BeginInvoke(() =>\n                {\n                    switch (updateResp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            Status tweet = updateResp.State;\n                            User user = tweet.User;\n                            UserIdentifier id = user.Identifier;\n                            MessageBox.Show(\n                                \"User: \" + id.ScreenName +\n                                \", Posted Status: \" + tweet.Text,\n                                \"Update Successfully Posted.\",\n                                MessageBoxButton.OK);\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                updateResp.Exception.ToString(),\n                                updateResp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/LinqToTwitterProxy.ashx",
    "content": "﻿<%@ WebHandler Language=\"C#\" CodeBehind=\"LinqToTwitterProxy.ashx.cs\" Class=\"LinqToTwitterSilverlightDemo.Web.LinqToTwitterProxy\" %>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/LinqToTwitterProxy.ashx.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net;\nusing System.Text;\nusing System.Web;\n\nnamespace LinqToTwitterSilverlightDemo.Web\n{\n    /// <summary>\n    /// Proxy for Silverlight Web calls\n    /// </summary>\n    public class LinqToTwitterProxy : IHttpHandler\n    {\n        /// <summary>\n        /// Handle proxy request to Twitter\n        /// </summary>\n        /// <param name=\"context\"></param>\n        public void ProcessRequest(HttpContext context)\n        {\n            string url = PrepareUrl(context);\n\n            if (context.Request.HttpMethod == \"GET\")\n            {\n                var req = WebRequest.Create(url) as HttpWebRequest;\n                req = SetCookies(req, context.Request);\n                req = SetHeaders(req, context.Request.Headers);\n\n                ProcessResponse(req, context);\n            }\n\n            if (context.Request.HttpMethod == \"POST\")\n            {\n                var req = WebRequest.Create(url) as HttpWebRequest;\n                req.Method = \"POST\";\n                req = SetCookies(req, context.Request);\n                req = SetHeaders(req, context.Request.Headers);\n                string postData =\n                    string.Join(\n                        \"&\",\n                        (from string key in context.Request.Form\n                         select key + \"=\" + context.Request.Form[key])\n                        .ToArray());\n\n                byte[] postDataBytes = Encoding.UTF8.GetBytes(postData);\n                using (var reqStream = req.GetRequestStream())\n                {\n                    reqStream.Write(postDataBytes, 0, postDataBytes.Length);\n                    reqStream.Flush();\n                }\n\n                ProcessResponse(req, context);\n            }\n        }\n  \n        private void ProcessResponse(HttpWebRequest req, HttpContext context)\n        {\n            using (WebResponse resp = req.GetResponse())\n            {\n                //using (var respStream = resp.GetResponseStream())\n                //    using (var respReader = new StreamReader(respStream))\n                //    {\n                //        string respString = respReader.ReadToEnd();\n                //        context.Response.Write(respString);\n                //    }\n                using (var respStream = resp.GetResponseStream())\n                {\n                    string responseData = \"\";\n                    string contentEncoding = resp.Headers[\"Content-Encoding\"] ?? \"\";\n                    if (contentEncoding.ToLower().Contains(\"gzip\"))\n                    {\n                        using (var gzip = new GZipStream(respStream, CompressionMode.Decompress))\n                        {\n                            using (var reader = new StreamReader(gzip))\n                            {\n                                responseData = reader.ReadToEnd();\n                            }\n                        }\n                    }\n                    else if (contentEncoding.ToLower().Contains(\"deflate\"))\n                    {\n                        using (var gzip = new DeflateStream(respStream, CompressionMode.Decompress))\n                        {\n                            using (var reader = new StreamReader(gzip))\n                            {\n                                responseData = reader.ReadToEnd();\n                            }\n                        }\n                    }\n                    else\n                    {\n                        using (var respReader = new StreamReader(respStream))\n                        {\n                            responseData = respReader.ReadToEnd();\n                        }\n                    }\n\n                    context.Response.Write(responseData);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Ensures url is properly encoded and formatted\n        /// </summary>\n        /// <param name=\"context\">HttpContext for accessing Request</param>\n        /// <returns>URL for query</returns>\n        private string PrepareUrl(HttpContext context)\n        {\n            var queryDict =\n                (from keyValPair in context.Request.QueryString.ToString().Split('&')\n                 let pairArr = keyValPair.Split('=')\n                 let key = pairArr[0]\n                 let val = pairArr[1]\n                 select new\n                 {\n                     Key = key,\n                     Val = val\n                 })\n                .ToDictionary(pair => pair.Key, pair => pair.Val);\n\n            string queryString = string.Join(\"&\",\n                (from key in queryDict.Keys\n                 where key != \"url\"\n                 select key + \"=\" + queryDict[key])\n                .ToArray());\n\n            string url = HttpUtility.UrlDecode(queryDict[\"url\"]);\n\n            if (queryString.Length > 0)\n            {\n                if (url.Contains('?'))\n                    url += \"&\" + queryString;\n                else\n                    url += \"?\" + queryString;\n            }\n\n            return url;\n        }\n\n        /// <summary>\n        /// Transfer any cookies from original Silverlight request to real outbound request\n        /// </summary>\n        /// <param name=\"wc\">HttpRequest with Headers property</param>\n        /// <param name=\"origReq\">Request containing original cookies</param>\n        /// <returns>HttpRequest with updated cookies</returns>\n        private HttpWebRequest SetCookies(HttpWebRequest proxyReq, HttpRequest origReq)\n        {\n            HttpCookieCollection coll = origReq.Cookies;\n            foreach (string cookieName in coll.Keys)\n            {\n                proxyReq.Headers.Add(\"Cookie\", cookieName + \"=\" + coll[cookieName].Value);\n            }\n            return proxyReq;\n        }\n\n        /// <summary>\n        /// Transfer Headers for Twitter query\n        /// </summary>\n        /// <param name=\"proxyReq\">WebClient with Headers property</param>\n        /// <param name=\"origReq\">Headers, from original request, to transfer</param>\n        /// <returns>WebClient with updated headers</returns>\n        private HttpWebRequest SetHeaders(HttpWebRequest proxyReq, NameValueCollection origReq)\n        {\n            var headersToNotSet = new List<string> \n            { \n                \"Accept\",\n                \"Accept-Encoding\",\n                \"Authorization\", \n                \"Connection\", \n                \"Content-Length\", \n                \"Content-Type\",\n                \"Host\", \n                \"Referer\",\n                \"User-Agent\"\n            };\n            string hdrvalue = \"\";\n\n            foreach (string headerName in origReq.Keys)\n            {\n                hdrvalue = origReq[headerName];\n\n                if (!headersToNotSet.Contains(headerName))\n                    proxyReq.Headers.Add(headerName, hdrvalue);\n            }\n\n            if (origReq[\"Authorization\"] != null)\n            {\n                proxyReq.Headers[\"Authorization\"] = origReq[\"Authorization\"]; \n            }\n\n            proxyReq.ServicePoint.Expect100Continue = false;\n\n            proxyReq.UserAgent = \"LINQ to Twitter v2.1\";\n\n            proxyReq.Headers[HttpRequestHeader.AcceptEncoding] = \"gzip\";\n\n            return proxyReq;\n        }\n\n        /// <summary>\n        /// This handler can't be reused\n        /// </summary>\n        public bool IsReusable\n        {\n            get { return false; }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/LinqToTwitterSilverlightDemo.Web.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{509AAAE9-A9DD-4CD1-9807-B315506BC6CE}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitterSilverlightDemo.Web</RootNamespace>\n    <AssemblyName>LinqToTwitterSilverlightDemo.Web</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <SilverlightApplicationList>\n    </SilverlightApplicationList>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <OldToolsVersion>4.0</OldToolsVersion>\n    <UseIISExpress>false</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"ClientBin\\LinqToTwitterSilverlightDemo.xap\" />\n    <Content Include=\"LinqToTwitterSilverlightDemoTestPage.aspx\" />\n    <Content Include=\"LinqToTwitterSilverlightDemoTestPage.html\" />\n    <Content Include=\"Silverlight.js\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"LinqToTwitterProxy.ashx.cs\">\n      <DependentUpon>LinqToTwitterProxy.ashx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"LinqToTwitterProxy.ashx\" />\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>False</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>5013</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>\n          </IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/LinqToTwitterSilverlightDemoTestPage.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" %>\n\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\n<head runat=\"server\">\n    <title>LinqToTwitterSilverlightDemo</title>\n    <style type=\"text/css\">\n    html, body {\n\t    height: 100%;\n\t    overflow: auto;\n    }\n    body {\n\t    padding: 0;\n\t    margin: 0;\n    }\n    #silverlightControlHost {\n\t    height: 100%;\n\t    text-align:center;\n    }\n    </style>\n    <script type=\"text/javascript\" src=\"Silverlight.js\"></script>\n    <script type=\"text/javascript\">\n        function onSilverlightError(sender, args) {\n            var appSource = \"\";\n            if (sender != null && sender != 0) {\n              appSource = sender.getHost().Source;\n            }\n            \n            var errorType = args.ErrorType;\n            var iErrorCode = args.ErrorCode;\n\n            if (errorType == \"ImageError\" || errorType == \"MediaError\") {\n              return;\n            }\n\n            var errMsg = \"Unhandled Error in Silverlight Application \" +  appSource + \"\\n\" ;\n\n            errMsg += \"Code: \"+ iErrorCode + \"    \\n\";\n            errMsg += \"Category: \" + errorType + \"       \\n\";\n            errMsg += \"Message: \" + args.ErrorMessage + \"     \\n\";\n\n            if (errorType == \"ParserError\") {\n                errMsg += \"File: \" + args.xamlFile + \"     \\n\";\n                errMsg += \"Line: \" + args.lineNumber + \"     \\n\";\n                errMsg += \"Position: \" + args.charPosition + \"     \\n\";\n            }\n            else if (errorType == \"RuntimeError\") {           \n                if (args.lineNumber != 0) {\n                    errMsg += \"Line: \" + args.lineNumber + \"     \\n\";\n                    errMsg += \"Position: \" +  args.charPosition + \"     \\n\";\n                }\n                errMsg += \"MethodName: \" + args.methodName + \"     \\n\";\n            }\n\n            throw new Error(errMsg);\n        }\n    </script>\n    <script runat=\"server\">\n        public string InitParams\n        {\n            get\n            {\n                var consumerKey = ConfigurationManager.AppSettings[\"ConsumerKey\"];\n                var consumerSecret = ConfigurationManager.AppSettings[\"ConsumerSecret\"];\n                \n                return string.Format(\n                    \"ConsumerKey={0},ConsumerSecret={1}\", \n                    consumerKey,\n                    consumerSecret);\n            }\n        }\n    //private void Page_Load()\n    //{\n    //    var consumerKey = ConfigurationManager.AppSettings[\"ConsumerKey\"];\n    //    var consumerSecret = ConfigurationManager.AppSettings[\"ConsumerSecret\"];\n    //    mySlPart.InitParameters = string.Format(\"mySilverlightSetting={0}\", mySetting);\n    //}\n    </script>\n</head>\n<body>\n    <form id=\"form1\" runat=\"server\" style=\"height:100%\">\n    <div id=\"silverlightControlHost\">\n        <object data=\"data:application/x-silverlight-2,\" type=\"application/x-silverlight-2\" width=\"100%\" height=\"100%\">\n\t\t  <param name=\"source\" value=\"ClientBin/LinqToTwitterSilverlightDemo.xap\"/>\n\t\t  <param name=\"onError\" value=\"onSilverlightError\" />\n\t\t  <param name=\"background\" value=\"white\" />\n\t\t  <param name=\"minRuntimeVersion\" value=\"4.0.50826.0\" />\n\t\t  <param name=\"autoUpgrade\" value=\"true\" />\n          <param name=\"initParams\" value=\"ConsumerKey=key,ConsumerSecret=secret\" />\n\t\t  <a href=\"http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0\" style=\"text-decoration:none\">\n \t\t\t  <img src=\"http://go.microsoft.com/fwlink/?LinkId=161376\" alt=\"Get Microsoft Silverlight\" style=\"border-style:none\"/>\n\t\t  </a>\n\t    </object><iframe id=\"_sl_historyFrame\" style=\"visibility:hidden;height:0px;width:0px;border:0px\"></iframe></div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/LinqToTwitterSilverlightDemoTestPage.html",
    "content": "﻿<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\n\n<head>\n    <title>LinqToTwitterSilverlightDemo</title>\n    <style type=\"text/css\">\n    html, body {\n\t    height: 100%;\n\t    overflow: auto;\n    }\n    body {\n\t    padding: 0;\n\t    margin: 0;\n    }\n    #silverlightControlHost {\n\t    height: 100%;\n\t    text-align:center;\n    }\n    </style>\n    <script type=\"text/javascript\" src=\"Silverlight.js\"></script>\n    <script type=\"text/javascript\">\n        function onSilverlightError(sender, args) {\n            var appSource = \"\";\n            if (sender != null && sender != 0) {\n              appSource = sender.getHost().Source;\n            }\n            \n            var errorType = args.ErrorType;\n            var iErrorCode = args.ErrorCode;\n\n            if (errorType == \"ImageError\" || errorType == \"MediaError\") {\n              return;\n            }\n\n            var errMsg = \"Unhandled Error in Silverlight Application \" +  appSource + \"\\n\" ;\n\n            errMsg += \"Code: \"+ iErrorCode + \"    \\n\";\n            errMsg += \"Category: \" + errorType + \"       \\n\";\n            errMsg += \"Message: \" + args.ErrorMessage + \"     \\n\";\n\n            if (errorType == \"ParserError\") {\n                errMsg += \"File: \" + args.xamlFile + \"     \\n\";\n                errMsg += \"Line: \" + args.lineNumber + \"     \\n\";\n                errMsg += \"Position: \" + args.charPosition + \"     \\n\";\n            }\n            else if (errorType == \"RuntimeError\") {           \n                if (args.lineNumber != 0) {\n                    errMsg += \"Line: \" + args.lineNumber + \"     \\n\";\n                    errMsg += \"Position: \" +  args.charPosition + \"     \\n\";\n                }\n                errMsg += \"MethodName: \" + args.methodName + \"     \\n\";\n            }\n\n            throw new Error(errMsg);\n        }\n    </script>\n</head>\n<body>\n    <form id=\"form1\" runat=\"server\" style=\"height:100%\">\n    <div id=\"silverlightControlHost\">\n        <object data=\"data:application/x-silverlight-2,\" type=\"application/x-silverlight-2\" width=\"100%\" height=\"100%\">\n\t\t  <param name=\"source\" value=\"ClientBin/LinqToTwitterSilverlightDemo.xap\"/>\n\t\t  <param name=\"onError\" value=\"onSilverlightError\" />\n\t\t  <param name=\"background\" value=\"white\" />\n\t\t  <param name=\"minRuntimeVersion\" value=\"4.0.50826.0\" />\n\t\t  <param name=\"autoUpgrade\" value=\"true\" />\n\t\t  <a href=\"http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0\" style=\"text-decoration:none\">\n \t\t\t  <img src=\"http://go.microsoft.com/fwlink/?LinkId=161376\" alt=\"Get Microsoft Silverlight\" style=\"border-style:none\"/>\n\t\t  </a>\n\t    </object><iframe id=\"_sl_historyFrame\" style=\"visibility:hidden;height:0px;width:0px;border:0px\"></iframe></div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterSilverlightDemo.Web\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterSilverlightDemo.Web\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2010\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"93defda1-92f5-4c33-a578-8bbed37d6bca\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/Silverlight.js",
    "content": "//v2.0.30511.0\nif(!window.Silverlight)window.Silverlight={};Silverlight._silverlightCount=0;Silverlight.__onSilverlightInstalledCalled=false;Silverlight.fwlinkRoot=\"http://go2.microsoft.com/fwlink/?LinkID=\";Silverlight.__installationEventFired=false;Silverlight.onGetSilverlight=null;Silverlight.onSilverlightInstalled=function(){window.location.reload(false)};Silverlight.isInstalled=function(b){if(b==undefined)b=null;var a=false,m=null;try{var i=null,j=false;if(window.ActiveXObject)try{i=new ActiveXObject(\"AgControl.AgControl\");if(b===null)a=true;else if(i.IsVersionSupported(b))a=true;i=null}catch(l){j=true}else j=true;if(j){var k=navigator.plugins[\"Silverlight Plug-In\"];if(k)if(b===null)a=true;else{var h=k.description;if(h===\"1.0.30226.2\")h=\"2.0.30226.2\";var c=h.split(\".\");while(c.length>3)c.pop();while(c.length<4)c.push(0);var e=b.split(\".\");while(e.length>4)e.pop();var d,g,f=0;do{d=parseInt(e[f]);g=parseInt(c[f]);f++}while(f<e.length&&d===g);if(d<=g&&!isNaN(d))a=true}}}catch(l){a=false}return a};Silverlight.WaitForInstallCompletion=function(){if(!Silverlight.isBrowserRestartRequired&&Silverlight.onSilverlightInstalled){try{navigator.plugins.refresh()}catch(a){}if(Silverlight.isInstalled(null)&&!Silverlight.__onSilverlightInstalledCalled){Silverlight.onSilverlightInstalled();Silverlight.__onSilverlightInstalledCalled=true}else setTimeout(Silverlight.WaitForInstallCompletion,3e3)}};Silverlight.__startup=function(){navigator.plugins.refresh();Silverlight.isBrowserRestartRequired=Silverlight.isInstalled(null);if(!Silverlight.isBrowserRestartRequired){Silverlight.WaitForInstallCompletion();if(!Silverlight.__installationEventFired){Silverlight.onInstallRequired();Silverlight.__installationEventFired=true}}else if(window.navigator.mimeTypes){var b=navigator.mimeTypes[\"application/x-silverlight-2\"],c=navigator.mimeTypes[\"application/x-silverlight-2-b2\"],d=navigator.mimeTypes[\"application/x-silverlight-2-b1\"],a=d;if(c)a=c;if(!b&&(d||c)){if(!Silverlight.__installationEventFired){Silverlight.onUpgradeRequired();Silverlight.__installationEventFired=true}}else if(b&&a)if(b.enabledPlugin&&a.enabledPlugin)if(b.enabledPlugin.description!=a.enabledPlugin.description)if(!Silverlight.__installationEventFired){Silverlight.onRestartRequired();Silverlight.__installationEventFired=true}}if(!Silverlight.disableAutoStartup)if(window.removeEventListener)window.removeEventListener(\"load\",Silverlight.__startup,false);else window.detachEvent(\"onload\",Silverlight.__startup)};if(!Silverlight.disableAutoStartup)if(window.addEventListener)window.addEventListener(\"load\",Silverlight.__startup,false);else window.attachEvent(\"onload\",Silverlight.__startup);Silverlight.createObject=function(m,f,e,k,l,h,j){var d={},a=k,c=l;d.version=a.version;a.source=m;d.alt=a.alt;if(h)a.initParams=h;if(a.isWindowless&&!a.windowless)a.windowless=a.isWindowless;if(a.framerate&&!a.maxFramerate)a.maxFramerate=a.framerate;if(e&&!a.id)a.id=e;delete a.ignoreBrowserVer;delete a.inplaceInstallPrompt;delete a.version;delete a.isWindowless;delete a.framerate;delete a.data;delete a.src;delete a.alt;if(Silverlight.isInstalled(d.version)){for(var b in c)if(c[b]){if(b==\"onLoad\"&&typeof c[b]==\"function\"&&c[b].length!=1){var i=c[b];c[b]=function(a){return i(document.getElementById(e),j,a)}}var g=Silverlight.__getHandlerName(c[b]);if(g!=null){a[b]=g;c[b]=null}else throw\"typeof events.\"+b+\" must be 'function' or 'string'\";}slPluginHTML=Silverlight.buildHTML(a)}else slPluginHTML=Silverlight.buildPromptHTML(d);if(f)f.innerHTML=slPluginHTML;else return slPluginHTML};Silverlight.buildHTML=function(a){var b=[];b.push('<object type=\"application/x-silverlight\" data=\"data:application/x-silverlight,\"');if(a.id!=null)b.push(' id=\"'+Silverlight.HtmlAttributeEncode(a.id)+'\"');if(a.width!=null)b.push(' width=\"'+a.width+'\"');if(a.height!=null)b.push(' height=\"'+a.height+'\"');b.push(\" >\");delete a.id;delete a.width;delete a.height;for(var c in a)if(a[c])b.push('<param name=\"'+Silverlight.HtmlAttributeEncode(c)+'\" value=\"'+Silverlight.HtmlAttributeEncode(a[c])+'\" />');b.push(\"</object>\");return b.join(\"\")};Silverlight.createObjectEx=function(b){var a=b,c=Silverlight.createObject(a.source,a.parentElement,a.id,a.properties,a.events,a.initParams,a.context);if(a.parentElement==null)return c};Silverlight.buildPromptHTML=function(b){var a=\"\",d=Silverlight.fwlinkRoot,c=b.version;if(b.alt)a=b.alt;else{if(!c)c=\"\";a=\"<a href='javascript:Silverlight.getSilverlight(\\\"{1}\\\");' style='text-decoration: none;'><img src='{2}' alt='Get Microsoft Silverlight' style='border-style: none'/></a>\";a=a.replace(\"{1}\",c);a=a.replace(\"{2}\",d+\"108181\")}return a};Silverlight.getSilverlight=function(e){if(Silverlight.onGetSilverlight)Silverlight.onGetSilverlight();var b=\"\",a=String(e).split(\".\");if(a.length>1){var c=parseInt(a[0]);if(isNaN(c)||c<2)b=\"1.0\";else b=a[0]+\".\"+a[1]}var d=\"\";if(b.match(/^\\d+\\056\\d+$/))d=\"&v=\"+b;Silverlight.followFWLink(\"149156\"+d)};Silverlight.followFWLink=function(a){top.location=Silverlight.fwlinkRoot+String(a)};Silverlight.HtmlAttributeEncode=function(c){var a,b=\"\";if(c==null)return null;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);if(a>96&&a<123||a>64&&a<91||a>43&&a<58&&a!=47||a==95)b=b+String.fromCharCode(a);else b=b+\"&#\"+a+\";\"}return b};Silverlight.default_error_handler=function(e,b){var d,c=b.ErrorType;d=b.ErrorCode;var a=\"\\nSilverlight error message     \\n\";a+=\"ErrorCode: \"+d+\"\\n\";a+=\"ErrorType: \"+c+\"       \\n\";a+=\"Message: \"+b.ErrorMessage+\"     \\n\";if(c==\"ParserError\"){a+=\"XamlFile: \"+b.xamlFile+\"     \\n\";a+=\"Line: \"+b.lineNumber+\"     \\n\";a+=\"Position: \"+b.charPosition+\"     \\n\"}else if(c==\"RuntimeError\"){if(b.lineNumber!=0){a+=\"Line: \"+b.lineNumber+\"     \\n\";a+=\"Position: \"+b.charPosition+\"     \\n\"}a+=\"MethodName: \"+b.methodName+\"     \\n\"}alert(a)};Silverlight.__cleanup=function(){for(var a=Silverlight._silverlightCount-1;a>=0;a--)window[\"__slEvent\"+a]=null;Silverlight._silverlightCount=0;if(window.removeEventListener)window.removeEventListener(\"unload\",Silverlight.__cleanup,false);else window.detachEvent(\"onunload\",Silverlight.__cleanup)};Silverlight.__getHandlerName=function(b){var a=\"\";if(typeof b==\"string\")a=b;else if(typeof b==\"function\"){if(Silverlight._silverlightCount==0)if(window.addEventListener)window.addEventListener(\"onunload\",Silverlight.__cleanup,false);else window.attachEvent(\"onunload\",Silverlight.__cleanup);var c=Silverlight._silverlightCount++;a=\"__slEvent\"+c;window[a]=b}else a=null;return a};Silverlight.onRequiredVersionAvailable=function(){};Silverlight.onRestartRequired=function(){};Silverlight.onUpgradeRequired=function(){};Silverlight.onInstallRequired=function(){};Silverlight.IsVersionAvailableOnError=function(d,a){var b=false;try{if(a.ErrorCode==8001&&!Silverlight.__installationEventFired){Silverlight.onUpgradeRequired();Silverlight.__installationEventFired=true}else if(a.ErrorCode==8002&&!Silverlight.__installationEventFired){Silverlight.onRestartRequired();Silverlight.__installationEventFired=true}else if(a.ErrorCode==5014||a.ErrorCode==2106){if(Silverlight.__verifySilverlight2UpgradeSuccess(a.getHost()))b=true}else b=true}catch(c){}return b};Silverlight.IsVersionAvailableOnLoad=function(b){var a=false;try{if(Silverlight.__verifySilverlight2UpgradeSuccess(b.getHost()))a=true}catch(c){}return a};Silverlight.__verifySilverlight2UpgradeSuccess=function(d){var c=false,b=\"2.0.31005\",a=null;try{if(d.IsVersionSupported(b+\".99\")){a=Silverlight.onRequiredVersionAvailable;c=true}else if(d.IsVersionSupported(b+\".0\"))a=Silverlight.onRestartRequired;else a=Silverlight.onUpgradeRequired;if(a&&!Silverlight.__installationEventFired){a();Silverlight.__installationEventFired=true}}catch(e){}return c}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterSilverlightDemo.Web/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n\n<configuration>\n  \n  <system.web>\n        <compilation debug=\"true\" targetFramework=\"4.0\" />\n    </system.web>\n\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/Default.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"Default.aspx.cs\" Inherits=\"_Default\" %>\n<%@ Import Namespace=\"LinqToTwitter\" %>\n\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n\t<title></title>\n</head>\n<body>\n\t<form id=\"form1\" runat=\"server\">\n\t<h1>Twitter updates </h1>\n\t<asp:MultiView ID=\"PrivateDataMultiView\" runat=\"server\">\n\t\t<asp:View ID=\"SetupTwitterConsumer\" runat=\"server\">\n\t\t\t<h2>Twitter Consumer setup</h2>\n\t\t\t<p>A Twitter client app must be endorsed by a Twitter user. </p>\n\t\t\t<ol>\n\t\t\t\t<li><a target=\"_blank\" href=\"https://twitter.com/oauth_clients\">Visit Twitter and\n\t\t\t\t\tcreate a client app</a>. </li>\n\t\t\t\t<li>Modify your web.config file to include your consumer key and consumer secret.</li>\n\t\t\t</ol>\n\t\t\t<p>Until you authorize this web app, we can only show you the <b>public</b> feed.</p>\n\t\t</asp:View>\n\t\t<asp:View ID=\"AuthorizeTwitter\" runat=\"server\">\n\t\t\t<h2>Authorize Twitter Client </h2>\n\t\t\t<p>Now that you have this sample configured with a Twitter consumer key and secret,\n\t\t\t\tyou can authorize this web application to download your private Twitter messages.\n\t\t\t</p>\n\t\t\t<asp:Button runat=\"server\" Text=\"Cool!  Authorize now.\" ID=\"authorizeTwitterButton\"\n\t\t\t\tOnClick=\"authorizeTwitterButton_Click\" />\n\t\t\t<p>Once you authorize this app, you'll see the results of a search on &quot;LINQ to Twitter&quot;.</p>\n\t\t</asp:View>\n\t\t<asp:View ID=\"ViewPrivateUpdates\" runat=\"server\">\n\t\t\t<p>Twitter has authorized us to download your feeds and now we're displaying your\n\t\t\t\t<b>personal</b> feed. Notice, <asp:Label runat=\"server\" ID=\"screenNameLabel\" Font-Bold=\"true\" />,\n\t\t\t\thow we never asked you for your Twitter username or password. </p>\n\t\t\t<asp:Panel DefaultButton=\"postUpdateButton\" runat=\"server\">\n\t\t\t\tPost an update: <asp:TextBox ID=\"updateBox\" runat=\"server\" Columns=\"60\" Text=\"Trying out LinqToTwitter's web update post sample.\" />\n\t\t\t\t<asp:Button ID=\"postUpdateButton\" runat=\"server\" Text=\"Post update\" OnClick=\"postUpdateButton_Click\" />\n\t\t\t\t&nbsp;<asp:RequiredFieldValidator ID=\"RequiredFieldValidator1\" runat=\"server\" ControlToValidate=\"updateBox\"\n\t\t\t\t\tErrorMessage=\"type in some message first\" />\n\t\t\t</asp:Panel>\n\t\t</asp:View>\n\t</asp:MultiView>\n\t<asp:ListView ID=\"TwitterListView\" runat=\"server\">\n\t\t<LayoutTemplate>\n\t\t\t<table id=\"Table1\" runat=\"server\">\n\t\t\t\t<tr id=\"Tr1\" runat=\"server\">\n\t\t\t\t\t<th>Picture </th>\n\t\t\t\t\t<th>Name </th>\n\t\t\t\t\t<th>Last Tweet </th>\n                    <th>Mentions </th>\n\t\t\t\t</tr>\n\t\t\t\t<tr id=\"itemPlaceholder\">\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</LayoutTemplate>\n\t\t<ItemTemplate>\n\t\t\t<tr id=\"Tr2\" runat=\"server\">\n\t\t\t\t<td>\n\t\t\t\t\t<asp:Image ID=\"UserImage\" runat=\"server\" ImageUrl='<%#Eval(\"User.ProfileImageUrl\") %>' />\n\t\t\t\t</td>\n\t\t\t\t<td><asp:Label ID=\"NameLabel\" runat=\"server\" Text='<%#Eval(\"User.Name\") %>' /> </td>\n\t\t\t\t<td><asp:Label ID=\"TweetLabel\" runat=\"server\" Text='<%#Eval(\"Text\") %>' /> </td>\n                <td>\n                    <asp:Repeater runat=\"server\" DataSource='<%#Eval(\"Entities.UserMentionEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"ScreenName\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                    <asp:Repeater ID=\"Repeater1\" runat=\"server\" DataSource='<%#Eval(\"Entities.UrlEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Url\")%>,</ItemTemplate>\n                    </asp:Repeater>\n\n                    <asp:Repeater ID=\"Repeater2\" runat=\"server\" DataSource='<%#Eval(\"Entities.HashTagEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Tag\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                </td>\n\t\t\t</tr>\n\t\t</ItemTemplate>\n\t</asp:ListView>\n\t</form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/Default.aspx.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Linq;\nusing LinqToTwitter;\n\npublic partial class _Default : System.Web.UI.Page\n{\n    private WebAuthorizer auth;\n    private TwitterContext twitterCtx;\n\n    protected void Page_Load(object sender, EventArgs e)\n    {\n        IOAuthCredentials credentials = new SessionStateCredentials();\n\n        if (credentials.ConsumerKey == null || credentials.ConsumerSecret == null)\n        {\n            credentials.ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"];\n            credentials.ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"];\n        }\n\n        auth = new WebAuthorizer\n        {\n            Credentials = credentials,\n            PerformRedirect = authUrl => Response.Redirect(authUrl)\n        };\n\n        if (!Page.IsPostBack && Request.QueryString[\"oauth_token\"] != null)\n        {\n            auth.CompleteAuthorization(Request.Url);\n        }\n\n        if (string.IsNullOrWhiteSpace(credentials.ConsumerKey) ||\n            string.IsNullOrWhiteSpace(credentials.ConsumerSecret))\n        {\n            // The user needs to set up the web.config file to include Twitter consumer key and secret.\n            PrivateDataMultiView.SetActiveView(SetupTwitterConsumer);\n        }\n        else if (auth.IsAuthorized)\n        {\n            screenNameLabel.Text = auth.ScreenName;\n            PrivateDataMultiView.SetActiveView(ViewPrivateUpdates);\n            updateBox.Focus();\n        }\n        else\n        {\n            PrivateDataMultiView.SetActiveView(AuthorizeTwitter);\n        }\n\n        if (auth.IsAuthorized)\n        {\n            twitterCtx = new TwitterContext(auth);\n\n            var search =\n                (from srch in twitterCtx.Search\n                 where srch.Type == SearchType.Search &&\n                       srch.Query == \"LINQ to Twitter\"\n                 select srch)\n                .SingleOrDefault();\n\n            TwitterListView.DataSource = search.Statuses;\n            TwitterListView.DataBind(); \n        }\n    }\n\n    protected override void OnPreRender(EventArgs e)\n    {\n        base.OnPreRender(e);\n\n        if (twitterCtx != null)\n        {\n            twitterCtx.Dispose();\n            twitterCtx = null;\n        }\n    }\n\n    protected void authorizeTwitterButton_Click(object sender, EventArgs e)\n    {\n        auth.BeginAuthorization(Request.Url);\n    }\n\n    protected void postUpdateButton_Click(object sender, EventArgs e)\n    {\n        if (!Page.IsValid)\n        {\n            return;\n        }\n\n        twitterCtx.UpdateStatus(updateBox.Text);\n        updateBox.Text = string.Empty;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/PostOnly.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"PostOnly.aspx.cs\" Inherits=\"PostOnly\" %>\n\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n\t<title></title>\n</head>\n<body>\n\t<form id=\"form1\" runat=\"server\">\n\t<asp:Panel runat=\"server\" DefaultButton=\"postUpdateButton\">\n\t\tPost an update: <asp:TextBox ID=\"updateBox\" runat=\"server\" Columns=\"60\" Text=\"Trying out LinqToTwitter's web update post sample.\" />\n\t\t<asp:Button ID=\"postUpdateButton\" runat=\"server\" Text=\"Post update\" OnClick=\"postUpdateButton_Click\" />\n\t\t&nbsp;<asp:RequiredFieldValidator ID=\"RequiredFieldValidator1\" runat=\"server\" ControlToValidate=\"updateBox\"\n\t\t\tErrorMessage=\"type in some message first\" />\n\t</asp:Panel>\n\t<asp:Label runat=\"server\" EnableViewState=\"false\" Text=\"Update posted.\" Visible=\"false\"\n\t\tID=\"successLabel\" /> <asp:HyperLink runat=\"server\" Text=\"Go back to view updates\"\n\t\t\tNavigateUrl=\"~/Default.aspx\" />\n\t</form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/PostOnly.aspx.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing LinqToTwitter;\n\npublic partial class PostOnly : System.Web.UI.Page\n{\n    private const string OAuthCredentialsKey = \"OAuthCredentialsKey\";\n    private WebAuthorizer auth;\n    private TwitterContext twitterCtx;\n\n    protected void Page_Load(object sender, EventArgs e)\n    {\n        IOAuthCredentials credentials = new InMemoryCredentials();\n        string authString = Session[OAuthCredentialsKey] as string;\n\n        if (authString == null)\n        {\n            credentials.ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"];\n            credentials.ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"];\n\n            Session[OAuthCredentialsKey] = credentials.ToString();\n        }\n        else\n        {\n            credentials.Load(authString);\n        }\n\n        auth = new WebAuthorizer\n        {\n            Credentials = new InMemoryCredentials\n            {\n                ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"]\n            },\n            PerformRedirect = authUrl => Response.Redirect(authUrl)\n        };\n\n        if (string.IsNullOrEmpty(credentials.ConsumerKey) ||\n            string.IsNullOrEmpty(credentials.ConsumerSecret) ||\n            !auth.IsAuthorized)\n        {\n            // Authorization occurs only on the home page.\n            Response.Redirect(\"~/\");\n        }\n\n        updateBox.Focus();\n    }\n\n\n    protected void postUpdateButton_Click(object sender, EventArgs e)\n    {\n        if (!Page.IsValid)\n        {\n            return;\n        }\n\n        twitterCtx = new TwitterContext(auth);\n        twitterCtx.UpdateStatus(updateBox.Text);\n        updateBox.Text = string.Empty;\n        successLabel.Visible = true;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/SignIn.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"SignIn.aspx.cs\" Inherits=\"SignIn\" %>\n\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n\t<title></title>\n</head>\n<body>\n\t<form id=\"form1\" runat=\"server\">\n\t<asp:MultiView ID=\"AuthMultiView\" runat=\"server\" ActiveViewIndex=\"0\">\n\t\t<asp:View ID=\"SetupTwitterConsumer\" runat=\"server\">\n\t\t\t<h2>\n\t\t\t\tTwitter Consumer setup</h2>\n\t\t\t<p>\n\t\t\t\tA Twitter client app must be endorsed by a Twitter user.\n\t\t\t</p>\n\t\t\t<ol>\n\t\t\t\t<li><a target=\"_blank\" href=\"https://twitter.com/oauth_clients\">Visit Twitter and create\n\t\t\t\t\ta client app</a>. </li>\n\t\t\t\t<li>Modify your web.config file to include your consumer key and consumer secret.</li>\n\t\t\t</ol>\n\t\t</asp:View>\n\t\t<asp:View ID=\"StartSignInView\" runat=\"server\">\n\t\t\t<asp:ImageButton ID=\"signInButton\" runat=\"server\" \n\t\t\t\tImageUrl=\"~/images/Sign-in-with-Twitter-darker.png\" \n\t\t\t\tonclick=\"signInButton_Click\" />\n\t\t</asp:View>\n\t\t<asp:View ID=\"SignedInView\" runat=\"server\">\n\t\t\tYou've signed in as <asp:Label runat=\"server\" ID=\"screenNameLabel\" />\n\t\t</asp:View>\n\t</asp:MultiView>\n\t</form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/SignIn.aspx.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Web.UI;\nusing LinqToTwitter;\n\npublic partial class SignIn : System.Web.UI.Page\n{\n    private const string OAuthCredentialsKey = \"OAuthCredentialsKey\";\n    private SignInAuthorizer auth;\n\n    protected void Page_Load(object sender, EventArgs e)\n    {\n        IOAuthCredentials credentials = new InMemoryCredentials();\n        string authString = Session[OAuthCredentialsKey] as string;\n\n        if (authString == null)\n        {\n            credentials.ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"];\n            credentials.ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"];\n\n            Session[OAuthCredentialsKey] = credentials.ToString();\n        }\n        else\n        {\n            credentials.Load(authString);\n        }\n\n        auth = new SignInAuthorizer\n        {\n            Credentials = new InMemoryCredentials\n            {\n                ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"],\n                ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"]\n            },\n            PerformRedirect = authUrl => Response.Redirect(authUrl)\n        };\n\n        if (!Page.IsPostBack)\n        {\n            if (!string.IsNullOrWhiteSpace(credentials.ConsumerKey) &&\n                !string.IsNullOrWhiteSpace(credentials.ConsumerSecret))\n            {\n                AuthMultiView.ActiveViewIndex = 1;\n\n                if (auth.CompleteAuthorization(Request.Url))\n                {\n                    AuthMultiView.SetActiveView(SignedInView);\n                    screenNameLabel.Text = auth.ScreenName;\n                }\n            }\n        }\n    }\n\n    protected void signInButton_Click(object sender, ImageClickEventArgs e)\n    {\n        auth.BeginAuthorization(Request.Url, /*forceLogin:*/ true);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/UserTimeline.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"UserTimeline.aspx.cs\" Inherits=\"UserTimeline\" %>\n\n<!DOCTYPE html>\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n    <title></title>\n</head>\n<body>\n    <form id=\"form1\" runat=\"server\">\n    <input type=\"submit\" />\n    <div>\n\t<asp:ListView ID=\"UserListView\" runat=\"server\">\n\t\t<LayoutTemplate>\n\t\t\t<table id=\"Table1\" runat=\"server\">\n\t\t\t\t<tr id=\"Tr1\" runat=\"server\">\n\t\t\t\t\t<th>Picture </th>\n\t\t\t\t\t<th>Name </th>\n\t\t\t\t\t<th>Last Tweet </th>\n                    <th>Mentions </th>\n\t\t\t\t</tr>\n\t\t\t\t<tr id=\"itemPlaceholder\">\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</LayoutTemplate>\n\t\t<ItemTemplate>\n\t\t\t<tr id=\"Tr2\" runat=\"server\">\n\t\t\t\t<td>\n\t\t\t\t\t<asp:Image ID=\"UserImage\" runat=\"server\" ImageUrl='<%#Eval(\"User.ProfileImageUrl\") %>' />\n\t\t\t\t</td>\n\t\t\t\t<td><asp:Label ID=\"NameLabel\" runat=\"server\" Text='<%#Eval(\"User.Name\") %>' /> </td>\n\t\t\t\t<td><asp:Label ID=\"TweetLabel\" runat=\"server\" Text='<%#Eval(\"Text\") %>' /> </td>\n                <td>\n                    <asp:Repeater ID=\"Repeater1\" runat=\"server\" DataSource='<%#Eval(\"Entities.UserMentionEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"ScreenName\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                    <asp:Repeater ID=\"Repeater2\" runat=\"server\" DataSource='<%#Eval(\"Entities.UrlEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Url\")%>,</ItemTemplate>\n                    </asp:Repeater>\n\n                    <asp:Repeater ID=\"Repeater3\" runat=\"server\" DataSource='<%#Eval(\"Entities.HashTagEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Tag\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                </td>\n\t\t\t</tr>\n\t\t</ItemTemplate>\n\t</asp:ListView>\n    </div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/UserTimeline.aspx.cs",
    "content": "﻿using LinqToTwitter;\nusing System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\npublic partial class UserTimeline : System.Web.UI.Page\n{\n    protected void Page_Load(object sender, EventArgs e)\n    {\n        IOAuthCredentials creds = new SessionStateCredentials();\n        creds.ConsumerKey = ConfigurationManager.AppSettings[\"twitterConsumerKey\"];\n        creds.ConsumerSecret = ConfigurationManager.AppSettings[\"twitterConsumerSecret\"];\n        creds.AccessToken = ConfigurationManager.AppSettings[\"twitterAccessToken\"];\n        creds.OAuthToken = ConfigurationManager.AppSettings[\"twitterOauthToken\"];\n        //Auth Object With Credentials\n        var auth = new WebAuthorizer\n        {\n            Credentials = creds\n        };     \n        var twitterCtx = new TwitterContext(auth);\n\n        var users =\n            (from user in twitterCtx.Status\n             where user.Type == StatusType.User &&\n                   user.ScreenName == \"JoeMayo\" &&\n                   user.Count == 200\n             select user)\n            .ToList();\n\n        UserListView.DataSource = users;\n        UserListView.DataBind();\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/LinqToTwitterWebFormsDemo/web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n<!-- \n    Note: As an alternative to hand editing this file you can use the \n    web admin tool to configure settings for your application. Use\n    the Website->Asp.Net Configuration option in Visual Studio.\n    A full list of settings and comments can be found in \n    machine.config.comments usually located in \n    \\Windows\\Microsoft.Net\\Framework\\v2.x\\Config \n-->\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"twitterConsumerKey\" value=\"\"/>\n    <add key=\"twitterConsumerSecret\" value=\"\"/>\n    <add key=\"twitterOAuthToken\" value=\"\"/>\n    <add key=\"twitterAccessToken\" value=\"\"/>\n  </appSettings>\n  <connectionStrings/>\n\t<system.web>\n\t\t<!-- \n            Set compilation debug=\"true\" to insert debugging \n            symbols into the compiled page. Because this \n            affects performance, set this value to true only \n            during development.\n        -->\n\t\t<compilation debug=\"true\" targetFramework=\"4.0\">\n\t\t</compilation>\n\t\t<!-- \n            Use this for testing AllowPartiallyTrustedCallers\n      <trust level=\"Medium\" originUrl=\".*\"/>\n    -->\n\t\t<!--\n            The <authentication> section enables configuration \n            of the security authentication mode used by \n            ASP.NET to identify an incoming user. \n        -->\n\t\t<authentication mode=\"Windows\"/>\n\t\t<sessionState mode=\"StateServer\"/>\n\t\t<!--\n            The <customErrors> section enables configuration \n            of what to do if/when an unhandled error occurs \n            during the execution of a request. Specifically, \n            it enables developers to configure html error pages \n            to be displayed in place of a error stack trace.\n\n        <customErrors mode=\"RemoteOnly\" defaultRedirect=\"GenericErrorPage.htm\">\n            <error statusCode=\"403\" redirect=\"NoAccess.htm\" />\n            <error statusCode=\"404\" redirect=\"FileNotFound.htm\" />\n        </customErrors>\n        -->\n\t\t<pages controlRenderingCompatibilityVersion=\"3.5\" clientIDMode=\"AutoID\"/></system.web>\n\t<!-- \n        The system.webServer section is required for running ASP.NET AJAX under Internet\n        Information Services 7.0.  It is not necessary for previous version of IIS.\n    -->\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/App.xaml",
    "content": "﻿<Application\n    x:Class=\"MetroOAuthDemo.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:MetroOAuthDemo\">\n\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n\n                <!-- \n                    Styles that define common aspects of the platform look and feel\n                    Required by Visual Studio project and item templates\n                 -->\n                <ResourceDictionary Source=\"Common/StandardStyles.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227\n\nnamespace MetroOAuthDemo\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used when the application is launched to open a specific file, to display\n        /// search results, and so forth.\n        /// </summary>\n        /// <param name=\"args\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs args)\n        {\n            // Do not repeat app initialization when already running, just ensure that\n            // the window is active\n            if (args.PreviousExecutionState == ApplicationExecutionState.Running)\n            {\n                Window.Current.Activate();\n                return;\n            }\n\n            if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)\n            {\n                //TODO: Load state from previously suspended application\n            }\n\n            // Create a Frame to act navigation context and navigate to the first page\n            var rootFrame = new Frame();\n            if (!rootFrame.Navigate(typeof(TweetPage)))\n            {\n                throw new Exception(\"Failed to create initial page\");\n            }\n\n            // Place the frame in the current Window and ensure that it is active\n            Window.Current.Content = rootFrame;\n            Window.Current.Activate();\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/BindableBase.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing Windows.UI.Xaml.Data;\n\nnamespace MetroOAuthDemo.Common\n{\n    /// <summary>\n    /// Implementation of <see cref=\"INotifyPropertyChanged\"/> to simplify models.\n    /// </summary>\n    [Windows.Foundation.Metadata.WebHostHidden]\n    public abstract class BindableBase : INotifyPropertyChanged\n    {\n        /// <summary>\n        /// Multicast event for property change notifications.\n        /// </summary>\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        /// <summary>\n        /// Checks if a property already matches a desired value.  Sets the property and\n        /// notifies listeners only when necessary.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the property.</typeparam>\n        /// <param name=\"storage\">Reference to a property with both getter and setter.</param>\n        /// <param name=\"value\">Desired value for the property.</param>\n        /// <param name=\"propertyName\">Name of the property used to notify listeners.  This\n        /// value is optional and can be provided automatically when invoked from compilers that\n        /// support CallerMemberName.</param>\n        /// <returns>True if the value was changed, false if the existing value matched the\n        /// desired value.</returns>\n        protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)\n        {\n            if (object.Equals(storage, value)) return false;\n\n            storage = value;\n            this.OnPropertyChanged(propertyName);\n            return true;\n        }\n\n        /// <summary>\n        /// Notifies listeners that a property value has changed.\n        /// </summary>\n        /// <param name=\"propertyName\">Name of the property used to notify listeners.  This\n        /// value is optional and can be provided automatically when invoked from compilers\n        /// that support <see cref=\"CallerMemberNameAttribute\"/>.</param>\n        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)\n        {\n            var eventHandler = this.PropertyChanged;\n            if (eventHandler != null)\n            {\n                eventHandler(this, new PropertyChangedEventArgs(propertyName));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/BooleanNegationConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace MetroOAuthDemo.Common\n{\n    /// <summary>\n    /// Value converter that translates true to false and vice versa.\n    /// </summary>\n    public sealed class BooleanNegationConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            return !(value is bool && (bool)value);\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            return !(value is bool && (bool)value);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/BooleanToVisibilityConverter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.Graphics.Display;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Data;\n\nnamespace MetroOAuthDemo.Common\n{\n    /// <summary>\n    /// Value converter that translates true to <see cref=\"Visibility.Visible\"/> and false to\n    /// <see cref=\"Visibility.Collapsed\"/>.\n    /// </summary>\n    public sealed class BooleanToVisibilityConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            return value is Visibility && (Visibility)value == Visibility.Visible;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/LayoutAwarePage.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.System;\nusing Windows.UI.Core;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace MetroOAuthDemo.Common\n{\n    /// <summary>\n    /// Typical implementation of Page that provides several important conveniences:\n    /// <list type=\"bullet\">\n    /// <item>\n    /// <description>Application view state to visual state mapping</description>\n    /// </item>\n    /// <item>\n    /// <description>GoBack, GoForward, and GoHome event handlers</description>\n    /// </item>\n    /// <item>\n    /// <description>Mouse and keyboard shortcuts for navigation</description>\n    /// </item>\n    /// <item>\n    /// <description>State management for navigation and process lifetime management</description>\n    /// </item>\n    /// <item>\n    /// <description>A default view model</description>\n    /// </item>\n    /// </list>\n    /// </summary>\n    [Windows.Foundation.Metadata.WebHostHidden]\n    public class LayoutAwarePage : Page\n    {\n        /// <summary>\n        /// Identifies the <see cref=\"DefaultViewModel\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty DefaultViewModelProperty =\n            DependencyProperty.Register(\"DefaultViewModel\", typeof(IObservableMap<String, Object>),\n            typeof(LayoutAwarePage), null);\n\n        private List<Control> _layoutAwareControls;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"LayoutAwarePage\"/> class.\n        /// </summary>\n        public LayoutAwarePage()\n        {\n            if (Windows.ApplicationModel.DesignMode.DesignModeEnabled) return;\n\n            // Create an empty default view model\n            this.DefaultViewModel = new ObservableDictionary<String, Object>();\n\n            // When this page is part of the visual tree make two changes:\n            // 1) Map application view state to visual state for the page\n            // 2) Handle keyboard and mouse navigation requests\n            this.Loaded += (sender, e) =>\n            {\n                this.StartLayoutUpdates(sender, e);\n\n                // Keyboard and mouse navigation only apply when occupying the entire window\n                if (this.ActualHeight == Window.Current.Bounds.Height &&\n                    this.ActualWidth == Window.Current.Bounds.Width)\n                {\n                    // Listen to the window directly so focus isn't required\n                    Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated +=\n                        CoreDispatcher_AcceleratorKeyActivated;\n                    Window.Current.CoreWindow.PointerPressed +=\n                        this.CoreWindow_PointerPressed;\n                }\n            };\n\n            // Undo the same changes when the page is no longer visible\n            this.Unloaded += (sender, e) =>\n            {\n                this.StopLayoutUpdates(sender, e);\n                Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated -=\n                    CoreDispatcher_AcceleratorKeyActivated;\n                Window.Current.CoreWindow.PointerPressed -=\n                    this.CoreWindow_PointerPressed;\n            };\n        }\n\n        /// <summary>\n        /// An implementation of <see cref=\"IObservableMap&lt;String, Object&gt;\"/> designed to be\n        /// used as a trivial view model.\n        /// </summary>\n        protected IObservableMap<String, Object> DefaultViewModel\n        {\n            get\n            {\n                return this.GetValue(DefaultViewModelProperty) as IObservableMap<String, Object>;\n            }\n\n            set\n            {\n                this.SetValue(DefaultViewModelProperty, value);\n            }\n        }\n\n        #region Navigation support\n\n        /// <summary>\n        /// Invoked as an event handler to navigate backward in the page's associated\n        /// <see cref=\"Frame\"/> until it reaches the top of the navigation stack.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"e\">Event data describing the conditions that led to the event.</param>\n        protected virtual void GoHome(object sender, RoutedEventArgs e)\n        {\n            // Use the navigation frame to return to the topmost page\n            if (this.Frame != null)\n            {\n                while (this.Frame.CanGoBack) this.Frame.GoBack();\n            }\n        }\n\n        /// <summary>\n        /// Invoked as an event handler to navigate backward in the navigation stack\n        /// associated with this page's <see cref=\"Frame\"/>.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"e\">Event data describing the conditions that led to the\n        /// event.</param>\n        protected virtual void GoBack(object sender, RoutedEventArgs e)\n        {\n            // Use the navigation frame to return to the previous page\n            if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack();\n        }\n\n        /// <summary>\n        /// Invoked as an event handler to navigate forward in the navigation stack\n        /// associated with this page's <see cref=\"Frame\"/>.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"e\">Event data describing the conditions that led to the\n        /// event.</param>\n        protected virtual void GoForward(object sender, RoutedEventArgs e)\n        {\n            // Use the navigation frame to move to the next page\n            if (this.Frame != null && this.Frame.CanGoForward) this.Frame.GoForward();\n        }\n\n        /// <summary>\n        /// Invoked on every keystroke, including system keys such as Alt key combinations, when\n        /// this page is active and occupies the entire window.  Used to detect keyboard navigation\n        /// between pages even when the page itself doesn't have focus.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"args\">Event data describing the conditions that led to the event.</param>\n        private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender,\n            AcceleratorKeyEventArgs args)\n        {\n            var virtualKey = args.VirtualKey;\n\n            // Only investigate further when Left, Right, or the dedicated Previous or Next keys\n            // are pressed\n            if ((args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown ||\n                args.EventType == CoreAcceleratorKeyEventType.KeyDown) &&\n                (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right ||\n                (int)virtualKey == 166 || (int)virtualKey == 167))\n            {\n                var coreWindow = Window.Current.CoreWindow;\n                var downState = CoreVirtualKeyStates.Down;\n                bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState;\n                bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState;\n                bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState;\n                bool noModifiers = !menuKey && !controlKey && !shiftKey;\n                bool onlyAlt = menuKey && !controlKey && !shiftKey;\n\n                if (((int)virtualKey == 166 && noModifiers) ||\n                    (virtualKey == VirtualKey.Left && onlyAlt))\n                {\n                    // When the previous key or Alt+Left are pressed navigate back\n                    args.Handled = true;\n                    this.GoBack(this, new RoutedEventArgs());\n                }\n                else if (((int)virtualKey == 167 && noModifiers) ||\n                    (virtualKey == VirtualKey.Right && onlyAlt))\n                {\n                    // When the next key or Alt+Right are pressed navigate forward\n                    args.Handled = true;\n                    this.GoForward(this, new RoutedEventArgs());\n                }\n            }\n        }\n\n        /// <summary>\n        /// Invoked on every mouse click, touch screen tap, or equivalent interaction when this\n        /// page is active and occupies the entire window.  Used to detect browser-style next and\n        /// previous mouse button clicks to navigate between pages.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"args\">Event data describing the conditions that led to the event.</param>\n        private void CoreWindow_PointerPressed(CoreWindow sender,\n            PointerEventArgs args)\n        {\n            var properties = args.CurrentPoint.Properties;\n\n            // Ignore button chords with the left, right, and middle buttons\n            if (properties.IsLeftButtonPressed || properties.IsRightButtonPressed ||\n                properties.IsMiddleButtonPressed) return;\n\n            // If back or foward are pressed (but not both) navigate appropriately\n            bool backPressed = properties.IsXButton1Pressed;\n            bool forwardPressed = properties.IsXButton2Pressed;\n            if (backPressed ^ forwardPressed)\n            {\n                args.Handled = true;\n                if (backPressed) this.GoBack(this, new RoutedEventArgs());\n                if (forwardPressed) this.GoForward(this, new RoutedEventArgs());\n            }\n        }\n\n        #endregion\n\n        #region Visual state switching\n\n        /// <summary>\n        /// Invoked as an event handler, typically on the <see cref=\"FrameworkElement.Loaded\"/>\n        /// event of a <see cref=\"Control\"/> within the page, to indicate that the sender should\n        /// start receiving visual state management changes that correspond to application view\n        /// state changes.\n        /// </summary>\n        /// <param name=\"sender\">Instance of <see cref=\"Control\"/> that supports visual state\n        /// management corresponding to view states.</param>\n        /// <param name=\"e\">Event data that describes how the request was made.</param>\n        /// <remarks>The current view state will immediately be used to set the corresponding\n        /// visual state when layout updates are requested.  A corresponding\n        /// <see cref=\"FrameworkElement.Unloaded\"/> event handler connected to\n        /// <see cref=\"StopLayoutUpdates\"/> is strongly encouraged.  Instances of\n        /// <see cref=\"LayoutAwarePage\"/> automatically invoke these handlers in their Loaded and\n        /// Unloaded events.</remarks>\n        /// <seealso cref=\"DetermineVisualState\"/>\n        /// <seealso cref=\"InvalidateVisualState\"/>\n        public void StartLayoutUpdates(object sender, RoutedEventArgs e)\n        {\n            var control = sender as Control;\n            if (control == null) return;\n            if (this._layoutAwareControls == null)\n            {\n                // Start listening to view state changes when there are controls interested in updates\n                Window.Current.SizeChanged += this.WindowSizeChanged;\n                this._layoutAwareControls = new List<Control>();\n            }\n            this._layoutAwareControls.Add(control);\n\n            // Set the initial visual state of the control\n            VisualStateManager.GoToState(control, DetermineVisualState(ApplicationView.Value), false);\n        }\n\n        private void WindowSizeChanged(object sender, WindowSizeChangedEventArgs e)\n        {\n            this.InvalidateVisualState();\n        }\n\n        /// <summary>\n        /// Invoked as an event handler, typically on the <see cref=\"FrameworkElement.Unloaded\"/>\n        /// event of a <see cref=\"Control\"/>, to indicate that the sender should start receiving\n        /// visual state management changes that correspond to application view state changes.\n        /// </summary>\n        /// <param name=\"sender\">Instance of <see cref=\"Control\"/> that supports visual state\n        /// management corresponding to view states.</param>\n        /// <param name=\"e\">Event data that describes how the request was made.</param>\n        /// <remarks>The current view state will immediately be used to set the corresponding\n        /// visual state when layout updates are requested.</remarks>\n        /// <seealso cref=\"StartLayoutUpdates\"/>\n        public void StopLayoutUpdates(object sender, RoutedEventArgs e)\n        {\n            var control = sender as Control;\n            if (control == null || this._layoutAwareControls == null) return;\n            this._layoutAwareControls.Remove(control);\n            if (this._layoutAwareControls.Count == 0)\n            {\n                // Stop listening to view state changes when no controls are interested in updates\n                this._layoutAwareControls = null;\n                Window.Current.SizeChanged -= this.WindowSizeChanged;\n            }\n        }\n\n        /// <summary>\n        /// Translates <see cref=\"ApplicationViewState\"/> values into strings for visual state\n        /// management within the page.  The default implementation uses the names of enum values.\n        /// Subclasses may override this method to control the mapping scheme used.\n        /// </summary>\n        /// <param name=\"viewState\">View state for which a visual state is desired.</param>\n        /// <returns>Visual state name used to drive the\n        /// <see cref=\"VisualStateManager\"/></returns>\n        /// <seealso cref=\"InvalidateVisualState\"/>\n        protected virtual string DetermineVisualState(ApplicationViewState viewState)\n        {\n            return viewState.ToString();\n        }\n\n        /// <summary>\n        /// Updates all controls that are listening for visual state changes with the correct\n        /// visual state.\n        /// </summary>\n        /// <remarks>\n        /// Typically used in conjunction with overriding <see cref=\"DetermineVisualState\"/> to\n        /// signal that a different value may be returned even though the view state has not\n        /// changed.\n        /// </remarks>\n        public void InvalidateVisualState()\n        {\n            if (this._layoutAwareControls != null)\n            {\n                string visualState = DetermineVisualState(ApplicationView.Value);\n                foreach (var layoutAwareControl in this._layoutAwareControls)\n                {\n                    VisualStateManager.GoToState(layoutAwareControl, visualState, false);\n                }\n            }\n        }\n\n        #endregion\n\n        #region Process lifetime management\n\n        private String _pageKey;\n\n        /// <summary>\n        /// Invoked when this page is about to be displayed in a Frame.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property provides the group to be displayed.</param>\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            // Returning to a cached page through navigation shouldn't trigger state loading\n            if (this._pageKey != null) return;\n\n            var frameState = SuspensionManager.SessionStateForFrame(this.Frame);\n            this._pageKey = \"Page-\" + this.Frame.BackStackDepth;\n\n            if (e.NavigationMode == NavigationMode.New)\n            {\n                // Clear existing state for forward navigation when adding a new page to the\n                // navigation stack\n                var nextPageKey = this._pageKey;\n                int nextPageIndex = this.Frame.BackStackDepth;\n                while (frameState.Remove(nextPageKey))\n                {\n                    nextPageIndex++;\n                    nextPageKey = \"Page-\" + nextPageIndex;\n                }\n\n                // Pass the navigation parameter to the new page\n                this.LoadState(e.Parameter, null);\n            }\n            else\n            {\n                // Pass the navigation parameter and preserved page state to the page, using\n                // the same strategy for loading suspended state and recreating pages discarded\n                // from cache\n                this.LoadState(e.Parameter, (Dictionary<String, Object>)frameState[this._pageKey]);\n            }\n        }\n\n        /// <summary>\n        /// Invoked when this page will no longer be displayed in a Frame.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property provides the group to be displayed.</param>\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            var frameState = SuspensionManager.SessionStateForFrame(this.Frame);\n            var pageState = new Dictionary<String, Object>();\n            this.SaveState(pageState);\n            frameState[_pageKey] = pageState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation.  Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"navigationParameter\">The parameter value passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested.\n        /// </param>\n        /// <param name=\"pageState\">A dictionary of state preserved by this page during an earlier\n        /// session.  This will be null the first time a page is visited.</param>\n        protected virtual void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)\n        {\n        }\n\n        /// <summary>\n        /// Preserves state associated with this page in case the application is suspended or the\n        /// page is discarded from the navigation cache.  Values must conform to the serialization\n        /// requirements of <see cref=\"SuspensionManager.SessionState\"/>.\n        /// </summary>\n        /// <param name=\"pageState\">An empty dictionary to be populated with serializable state.</param>\n        protected virtual void SaveState(Dictionary<String, Object> pageState)\n        {\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Implementation of IObservableMap that supports reentrancy for use as a default view\n        /// model.\n        /// </summary>\n        private class ObservableDictionary<K, V> : IObservableMap<K, V>\n        {\n            private class ObservableDictionaryChangedEventArgs : IMapChangedEventArgs<K>\n            {\n                public ObservableDictionaryChangedEventArgs(CollectionChange change, K key)\n                {\n                    this.CollectionChange = change;\n                    this.Key = key;\n                }\n\n                public CollectionChange CollectionChange { get; private set; }\n                public K Key { get; private set; }\n            }\n\n            private Dictionary<K, V> _dictionary = new Dictionary<K, V>();\n            public event MapChangedEventHandler<K, V> MapChanged;\n\n            private void InvokeMapChanged(CollectionChange change, K key)\n            {\n                var eventHandler = MapChanged;\n                if (eventHandler != null)\n                {\n                    eventHandler(this, new ObservableDictionaryChangedEventArgs(CollectionChange.ItemInserted, key));\n                }\n            }\n\n            public void Add(K key, V value)\n            {\n                this._dictionary.Add(key, value);\n                this.InvokeMapChanged(CollectionChange.ItemInserted, key);\n            }\n\n            public void Add(KeyValuePair<K, V> item)\n            {\n                this.Add(item.Key, item.Value);\n            }\n\n            public bool Remove(K key)\n            {\n                if (this._dictionary.Remove(key))\n                {\n                    this.InvokeMapChanged(CollectionChange.ItemRemoved, key);\n                    return true;\n                }\n                return false;\n            }\n\n            public bool Remove(KeyValuePair<K, V> item)\n            {\n                V currentValue;\n                if (this._dictionary.TryGetValue(item.Key, out currentValue) &&\n                    Object.Equals(item.Value, currentValue) && this._dictionary.Remove(item.Key))\n                {\n                    this.InvokeMapChanged(CollectionChange.ItemRemoved, item.Key);\n                    return true;\n                }\n                return false;\n            }\n\n            public V this[K key]\n            {\n                get\n                {\n                    return this._dictionary[key];\n                }\n                set\n                {\n                    this._dictionary[key] = value;\n                    this.InvokeMapChanged(CollectionChange.ItemChanged, key);\n                }\n            }\n\n            public void Clear()\n            {\n                var priorKeys = this._dictionary.Keys.ToArray();\n                this._dictionary.Clear();\n                foreach (var key in priorKeys)\n                {\n                    this.InvokeMapChanged(CollectionChange.ItemRemoved, key);\n                }\n            }\n\n            public ICollection<K> Keys\n            {\n                get { return this._dictionary.Keys; }\n            }\n\n            public bool ContainsKey(K key)\n            {\n                return this._dictionary.ContainsKey(key);\n            }\n\n            public bool TryGetValue(K key, out V value)\n            {\n                return this._dictionary.TryGetValue(key, out value);\n            }\n\n            public ICollection<V> Values\n            {\n                get { return this._dictionary.Values; }\n            }\n\n            public bool Contains(KeyValuePair<K, V> item)\n            {\n                return this._dictionary.Contains(item);\n            }\n\n            public int Count\n            {\n                get { return this._dictionary.Count; }\n            }\n\n            public bool IsReadOnly\n            {\n                get { return false; }\n            }\n\n            public IEnumerator<KeyValuePair<K, V>> GetEnumerator()\n            {\n                return this._dictionary.GetEnumerator();\n            }\n\n            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n            {\n                return this._dictionary.GetEnumerator();\n            }\n\n            public void CopyTo(KeyValuePair<K, V>[] array, int arrayIndex)\n            {\n                int arraySize = array.Length;\n                foreach (var pair in this._dictionary)\n                {\n                    if (arrayIndex >= arraySize) break;\n                    array[arrayIndex++] = pair;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/ReadMe.txt",
    "content": "﻿The Common directory contains classes and XAML styles that simplify application development.\n\nThese are not merely convenient, but are required by most Visual Studio project and item templates.\nIf you need a variation on one of the styles in StandardStyles it is recommended that you make a\ncopy in your own resource dictionary.  When right-clicking on a styled control in the design\nsurface the context menu includes an option to Edit a Copy to simplify this process.\n\nClasses in the Common directory form part of your project and may be further enhanced to meet your\nneeds.  Care should be taken when altering existing methods and properties as incompatible changes\nwill require corresponding changes to code included in a variety of Visual Studio templates.  For\nexample, additional pages added to your project are written assuming that the original methods and\nproperties in Common classes are still present and that the names of the types have not changed."
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/RichTextColumns.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Documents;\n\nnamespace MetroOAuthDemo.Common\n{\n    /// <summary>\n    /// Wrapper for <see cref=\"RichTextBlock\"/> that creates as many additional overflow\n    /// columns as needed to fit the available content.\n    /// </summary>\n    /// <example>\n    /// The following creates a collection of 400-pixel wide columns spaced 50 pixels apart\n    /// to contain arbitrary data-bound content:\n    /// <code>\n    /// <RichTextColumns>\n    ///     <RichTextColumns.ColumnTemplate>\n    ///         <DataTemplate>\n    ///             <RichTextBlockOverflow Width=\"400\" Margin=\"50,0,0,0\"/>\n    ///         </DataTemplate>\n    ///     </RichTextColumns.ColumnTemplate>\n    ///     \n    ///     <RichTextBlock Width=\"400\">\n    ///         <Paragraph>\n    ///             <Run Text=\"{Binding Content}\"/>\n    ///         </Paragraph>\n    ///     </RichTextBlock>\n    /// </RichTextColumns>\n    /// </code>\n    /// </example>\n    /// <remarks>Typically used in a horizontally scrolling region where an unbounded amount of\n    /// space allows for all needed columns to be created.  When used in a vertically scrolling\n    /// space there will never be any additional columns.</remarks>\n    [Windows.UI.Xaml.Markup.ContentProperty(Name = \"RichTextContent\")]\n    public sealed class RichTextColumns : Panel\n    {\n        /// <summary>\n        /// Identifies the <see cref=\"RichTextContent\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty RichTextContentProperty =\n            DependencyProperty.Register(\"RichTextContent\", typeof(RichTextBlock),\n            typeof(RichTextColumns), new PropertyMetadata(null, ResetOverflowLayout));\n\n        /// <summary>\n        /// Identifies the <see cref=\"ColumnTemplate\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty ColumnTemplateProperty =\n            DependencyProperty.Register(\"ColumnTemplate\", typeof(DataTemplate),\n            typeof(RichTextColumns), new PropertyMetadata(null, ResetOverflowLayout));\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RichTextColumns\"/> class.\n        /// </summary>\n        public RichTextColumns()\n        {\n            this.HorizontalAlignment = HorizontalAlignment.Left;\n        }\n\n        /// <summary>\n        /// Gets or sets the initial rich text content to be used as the first column.\n        /// </summary>\n        public RichTextBlock RichTextContent\n        {\n            get { return (RichTextBlock)GetValue(RichTextContentProperty); }\n            set { SetValue(RichTextContentProperty, value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the template used to create additional\n        /// <see cref=\"RichTextBlockOverflow\"/> instances.\n        /// </summary>\n        public DataTemplate ColumnTemplate\n        {\n            get { return (DataTemplate)GetValue(ColumnTemplateProperty); }\n            set { SetValue(ColumnTemplateProperty, value); }\n        }\n\n        /// <summary>\n        /// Invoked when the content or overflow template is changed to recreate the column layout.\n        /// </summary>\n        /// <param name=\"d\">Instance of <see cref=\"RichTextColumns\"/> where the change\n        /// occurred.</param>\n        /// <param name=\"e\">Event data describing the specific change.</param>\n        private static void ResetOverflowLayout(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            // When dramatic changes occur, rebuild the column layout from scratch\n            var target = d as RichTextColumns;\n            if (target != null)\n            {\n                target._overflowColumns = null;\n                target.Children.Clear();\n                target.InvalidateMeasure();\n            }\n        }\n\n        /// <summary>\n        /// Lists overflow columns already created.  Must maintain a 1:1 relationship with\n        /// instances in the <see cref=\"Panel.Children\"/> collection following the initial\n        /// RichTextBlock child.\n        /// </summary>\n        private List<RichTextBlockOverflow> _overflowColumns = null;\n\n        /// <summary>\n        /// Determines whether additional overflow columns are needed and if existing columns can\n        /// be removed.\n        /// </summary>\n        /// <param name=\"availableSize\">The size of the space available, used to constrain the\n        /// number of additional columns that can be created.</param>\n        /// <returns>The resulting size of the original content plus any extra columns.</returns>\n        protected override Size MeasureOverride(Size availableSize)\n        {\n            if (this.RichTextContent == null) return new Size(0, 0);\n\n            // Make sure the RichTextBlock is a child, using the lack of\n            // a list of additional columns as a sign that this hasn't been\n            // done yet\n            if (this._overflowColumns == null)\n            {\n                Children.Add(this.RichTextContent);\n                this._overflowColumns = new List<RichTextBlockOverflow>();\n            }\n\n            // Start by measuring the original RichTextBlock content\n            this.RichTextContent.Measure(availableSize);\n            var maxWidth = this.RichTextContent.DesiredSize.Width;\n            var maxHeight = this.RichTextContent.DesiredSize.Height;\n            var hasOverflow = this.RichTextContent.HasOverflowContent;\n\n            // Make sure there are enough overflow columns\n            int overflowIndex = 0;\n            while (hasOverflow && maxWidth < availableSize.Width && this.ColumnTemplate != null)\n            {\n                // Use existing overflow columns until we run out, then create\n                // more from the supplied template\n                RichTextBlockOverflow overflow;\n                if (this._overflowColumns.Count > overflowIndex)\n                {\n                    overflow = this._overflowColumns[overflowIndex];\n                }\n                else\n                {\n                    overflow = (RichTextBlockOverflow)this.ColumnTemplate.LoadContent();\n                    this._overflowColumns.Add(overflow);\n                    this.Children.Add(overflow);\n                    if (overflowIndex == 0)\n                    {\n                        this.RichTextContent.OverflowContentTarget = overflow;\n                    }\n                    else\n                    {\n                        this._overflowColumns[overflowIndex - 1].OverflowContentTarget = overflow;\n                    }\n                }\n\n                // Measure the new column and prepare to repeat as necessary\n                overflow.Measure(new Size(availableSize.Width - maxWidth, availableSize.Height));\n                maxWidth += overflow.DesiredSize.Width;\n                maxHeight = Math.Max(maxHeight, overflow.DesiredSize.Height);\n                hasOverflow = overflow.HasOverflowContent;\n                overflowIndex++;\n            }\n\n            // Disconnect extra columns from the overflow chain, remove them from our private list\n            // of columns, and remove them as children\n            if (this._overflowColumns.Count > overflowIndex)\n            {\n                if (overflowIndex == 0)\n                {\n                    this.RichTextContent.OverflowContentTarget = null;\n                }\n                else\n                {\n                    this._overflowColumns[overflowIndex - 1].OverflowContentTarget = null;\n                }\n                while (this._overflowColumns.Count > overflowIndex)\n                {\n                    this._overflowColumns.RemoveAt(overflowIndex);\n                    this.Children.RemoveAt(overflowIndex + 1);\n                }\n            }\n\n            // Report final determined size\n            return new Size(maxWidth, maxHeight);\n        }\n\n        /// <summary>\n        /// Arranges the original content and all extra columns.\n        /// </summary>\n        /// <param name=\"finalSize\">Defines the size of the area the children must be arranged\n        /// within.</param>\n        /// <returns>The size of the area the children actually required.</returns>\n        protected override Size ArrangeOverride(Size finalSize)\n        {\n            double maxWidth = 0;\n            double maxHeight = 0;\n            foreach (var child in Children)\n            {\n                child.Arrange(new Rect(maxWidth, 0, child.DesiredSize.Width, finalSize.Height));\n                maxWidth += child.DesiredSize.Width;\n                maxHeight = Math.Max(maxHeight, child.DesiredSize.Height);\n            }\n            return new Size(maxWidth, maxHeight);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/StandardStyles.xaml",
    "content": "﻿<!--\n    This file contains XAML styles that simplify application development.\n\n    These are not merely convenient, but are required by most Visual Studio project and item templates.\n    Removing, renaming, or otherwise modifying the content of these files may result in a project that\n    does not build, or that will not build once additional pages are added.  If variations on these\n    styles are desired it is recommended that you copy the content under a new name and modify your\n    private copy.\n-->\n\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!-- Non-brush values that vary across themes -->\n    \n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Default\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE071;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0BA;</x:String>\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"HighContrast\">\n            <x:String x:Key=\"BackButtonGlyph\">&#xE0A6;</x:String>\n            <x:String x:Key=\"BackButtonSnappedGlyph\">&#xE0C4;</x:String>\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <!-- RichTextBlock styles -->\n\n    <Style x:Key=\"BasicRichTextStyle\" TargetType=\"RichTextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BasicRichTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"ItemRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\"/>\n\n    <Style x:Key=\"BodyRichTextStyle\" TargetType=\"RichTextBlock\" BasedOn=\"{StaticResource BaselineRichTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <!-- TextBlock styles -->\n\n    <Style x:Key=\"BasicTextStyle\" TargetType=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationForegroundThemeBrush}\"/>\n        <Setter Property=\"FontSize\" Value=\"{StaticResource ControlContentThemeFontSize}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource ContentControlThemeFontFamily}\"/>\n        <Setter Property=\"TextTrimming\" Value=\"WordEllipsis\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n        <Setter Property=\"Typography.StylisticSet20\" Value=\"True\"/>\n        <Setter Property=\"Typography.DiscretionaryLigatures\" Value=\"True\"/>\n        <Setter Property=\"Typography.CaseSensitiveForms\" Value=\"True\"/>\n    </Style>\n\n    <Style x:Key=\"BaselineTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BasicTextStyle}\">\n        <Setter Property=\"LineHeight\" Value=\"20\"/>\n        <Setter Property=\"LineStackingStrategy\" Value=\"BlockLineHeight\"/>\n        <!-- Properly align text along its baseline -->\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"4\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"40\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-2\" Y=\"8\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"26.667\"/>\n        <Setter Property=\"FontWeight\" Value=\"Light\"/>\n        <Setter Property=\"LineHeight\" Value=\"30\"/>\n        <Setter Property=\"RenderTransform\">\n            <Setter.Value>\n                <TranslateTransform X=\"-1\" Y=\"6\"/>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"TitleTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\"/>\n    </Style>\n\n    <Style x:Key=\"ItemTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\"/>\n\n    <Style x:Key=\"BodyTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\"/>\n    </Style>\n\n    <Style x:Key=\"CaptionTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaselineTextStyle}\">\n        <Setter Property=\"FontSize\" Value=\"12\"/>\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n    </Style>\n\n    <!-- Button styles -->\n\n    <!--\n        TextButtonStyle is used to style a Button using subheader-styled text with no other adornment.  This\n        style is used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering\n        commands.\n    -->\n    <Style x:Key=\"TextButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid Background=\"Transparent\">\n                        <TextBlock\n                            x:Name=\"Text\"\n                            Text=\"{TemplateBinding Content}\"\n                            Margin=\"3,-7,3,10\"\n                            TextWrapping=\"NoWrap\"\n                            Style=\"{StaticResource SubheaderTextStyle}\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment.\n        This style is used in the SearchResultsPage to allow selection among filters.\n    -->\n    <Style x:Key=\"TextRadioButtonStyle\" TargetType=\"RadioButton\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,0\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"RadioButton\">\n                    <Grid Background=\"Transparent\">\n                        <TextBlock\n                            x:Name=\"Text\"\n                            Text=\"{TemplateBinding Content}\"\n                            Margin=\"3,-7,3,10\"\n                            TextWrapping=\"NoWrap\"\n                            Style=\"{StaticResource SubheaderTextStyle}\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ButtonDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualWhite\" Storyboard.TargetProperty=\"Opacity\"/>\n                                        <DoubleAnimation Duration=\"0\" To=\"1\" Storyboard.TargetName=\"FocusVisualBlack\" Storyboard.TargetProperty=\"Opacity\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\"/>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CheckStates\">\n                                <VisualState x:Name=\"Checked\"/>\n                                <VisualState x:Name=\"Unchecked\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Text\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Indeterminate\"/>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        AppBarButtonStyle is used to style a Button for use in an App Bar.  Content will be centered and should fit within\n        the 40-pixel radius glyph provided.  16-point Segoe UI Symbol is used for content text to simplify the use of glyphs\n        from that font.  AutomationProperties.Name is used for the text below the glyph.\n    -->\n    <Style x:Key=\"AppBarButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"20\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"App Bar Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"100\" Background=\"Transparent\">\n                        <StackPanel VerticalAlignment=\"Top\" Margin=\"0,12,0,11\">\n                            <Grid Width=\"40\" Height=\"40\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\">\n                                <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\" Foreground=\"{StaticResource AppBarItemBackgroundThemeBrush}\"/>\n                                <TextBlock x:Name=\"OutlineGlyph\" Text=\"&#xE0A7;\" FontFamily=\"Segoe UI Symbol\" FontSize=\"53.333\" Margin=\"-4,-19,0,0\"/>\n                                <ContentPresenter x:Name=\"Content\" HorizontalAlignment=\"Center\" Margin=\"-1,-1,0,0\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                            <TextBlock\n                                x:Name=\"TextLabel\"\n                                Text=\"{TemplateBinding AutomationProperties.Name}\"\n                                Foreground=\"{StaticResource AppBarItemForegroundThemeBrush}\"\n                                Margin=\"0,0,2,0\"\n                                FontSize=\"12\"\n                                TextAlignment=\"Center\"\n                                Width=\"88\"\n                                MaxHeight=\"32\"\n                                TextTrimming=\"WordEllipsis\"\n                                Style=\"{StaticResource BasicTextStyle}\"/>\n                        </StackPanel>\n                        <Rectangle\n                                x:Name=\"FocusVisualWhite\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                                x:Name=\"FocusVisualBlack\"\n                                IsHitTestVisible=\"False\"\n                                Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                                StrokeEndLineCap=\"Square\"\n                                StrokeDashArray=\"1,1\"\n                                Opacity=\"0\"\n                                StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                                <VisualState x:Name=\"FullScreenLandscape\"/>\n                                <VisualState x:Name=\"Filled\"/>\n                                <VisualState x:Name=\"FullScreenPortrait\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Snapped\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Width\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"60\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\"/>\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemPressedForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OutlineGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Content\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"TextLabel\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource AppBarItemDisabledForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualWhite\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                        <DoubleAnimation\n                                                Storyboard.TargetName=\"FocusVisualBlack\"\n                                                Storyboard.TargetProperty=\"Opacity\"\n                                                To=\"1\"\n                                                Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Standard App Bar buttons -->\n  \n    <Style x:Key=\"SkipBackAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipBackAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Back\"/>\n        <Setter Property=\"Content\" Value=\"&#xE100;\"/>\n    </Style>\n    <Style x:Key=\"SkipAheadAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SkipAheadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Skip Ahead\"/>\n        <Setter Property=\"Content\" Value=\"&#xE101;\"/>\n    </Style>\n    <Style x:Key=\"PlayAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PlayAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Play\"/>\n        <Setter Property=\"Content\" Value=\"&#xE102;\"/>\n    </Style>\n    <Style x:Key=\"PauseAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PauseAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pause\"/>\n        <Setter Property=\"Content\" Value=\"&#xE103;\"/>\n    </Style>\n    <Style x:Key=\"EditAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"EditAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Edit\"/>\n        <Setter Property=\"Content\" Value=\"&#xE104;\"/>\n    </Style>\n    <Style x:Key=\"SaveAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SaveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Save\"/>\n        <Setter Property=\"Content\" Value=\"&#xE105;\"/>\n    </Style>\n    <Style x:Key=\"DeleteAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DeleteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Delete\"/>\n        <Setter Property=\"Content\" Value=\"&#xE106;\"/>\n    </Style>\n    <Style x:Key=\"DiscardAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DiscardAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Discard\"/>\n        <Setter Property=\"Content\" Value=\"&#xE107;\"/>\n    </Style>\n    <Style x:Key=\"RemoveAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RemoveAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Remove\"/>\n        <Setter Property=\"Content\" Value=\"&#xE108;\"/>\n    </Style>\n    <Style x:Key=\"AddAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"AddAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Add\"/>\n        <Setter Property=\"Content\" Value=\"&#xE109;\"/>\n    </Style>\n    <Style x:Key=\"NoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"No\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10A;\"/>\n    </Style>\n    <Style x:Key=\"YesAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"YesAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Yes\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10B;\"/>\n    </Style>\n    <Style x:Key=\"MoreAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MoreAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"More\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10C;\"/>\n    </Style>\n    <Style x:Key=\"RedoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RedoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Redo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10D;\"/>\n    </Style>\n    <Style x:Key=\"UndoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UndoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Undo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10E;\"/>\n    </Style>\n    <Style x:Key=\"HomeAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HomeAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Home\"/>\n        <Setter Property=\"Content\" Value=\"&#xE10F;\"/>\n    </Style>\n    <Style x:Key=\"OutAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"OutAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Out\"/>\n        <Setter Property=\"Content\" Value=\"&#xE110;\"/>\n    </Style>\n    <Style x:Key=\"NextAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"NextAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Next\"/>\n        <Setter Property=\"Content\" Value=\"&#xE111;\"/>\n    </Style>\n    <Style x:Key=\"PreviousAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PreviousAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Previous\"/>\n        <Setter Property=\"Content\" Value=\"&#xE112;\"/>\n    </Style>\n    <Style x:Key=\"FavoriteAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"FavoriteAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Favorite\"/>\n        <Setter Property=\"Content\" Value=\"&#xE113;\"/>\n    </Style>\n    <Style x:Key=\"PhotoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PhotoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Photo\"/>\n        <Setter Property=\"Content\" Value=\"&#xE114;\"/>\n    </Style>\n    <Style x:Key=\"SettingsAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SettingsAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Settings\"/>\n        <Setter Property=\"Content\" Value=\"&#xE115;\"/>\n    </Style>\n    <Style x:Key=\"VideoAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"VideoAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Video\"/>\n        <Setter Property=\"Content\" Value=\"&#xE116;\"/>\n    </Style>\n    <Style x:Key=\"RefreshAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"RefreshAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Refresh\"/>\n        <Setter Property=\"Content\" Value=\"&#xE117;\"/>\n    </Style>\n    <Style x:Key=\"DownloadAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"DownloadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Download\"/>\n        <Setter Property=\"Content\" Value=\"&#xE118;\"/>\n    </Style>\n    <Style x:Key=\"MailAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"MailAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Mail\"/>\n        <Setter Property=\"Content\" Value=\"&#xE119;\"/>\n    </Style>\n    <Style x:Key=\"SearchAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"SearchAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Search\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n    </Style>\n    <Style x:Key=\"HelpAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"HelpAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Help\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11B;\"/>\n    </Style>\n    <Style x:Key=\"UploadAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UploadAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Upload\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11C;\"/>\n    </Style>\n    <Style x:Key=\"PinAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"PinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Pin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE141;\"/>\n    </Style>\n    <Style x:Key=\"UnpinAppBarButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource AppBarButtonStyle}\">\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"UnpinAppBarButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Unpin\"/>\n        <Setter Property=\"Content\" Value=\"&#xE196;\"/>\n    </Style>\n\n    <!-- Title area styles -->\n\n    <Style x:Key=\"PageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource HeaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,30,40\"/>\n    </Style>\n\n    <Style x:Key=\"PageSubheaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource SubheaderTextStyle}\">\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"Margin\" Value=\"0,0,0,40\"/>\n    </Style>\n\n    <Style x:Key=\"SnappedPageHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource PageSubheaderTextStyle}\">\n        <Setter Property=\"Margin\" Value=\"0,0,18,40\"/>\n    </Style>\n\n    <!--\n        BackButtonStyle is used to style a Button for use in the title area of a page.  Margins appropriate for\n        the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"BackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Width\" Value=\"48\"/>\n        <Setter Property=\"Height\" Value=\"48\"/>\n        <Setter Property=\"Margin\" Value=\"36,0,36,36\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"56\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\">\n                        <Grid Margin=\"-1,-16,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0A8;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0A6;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--\n        PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n    -->\n    <Style x:Key=\"PortraitBackButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource BackButtonStyle}\">\n        <Setter Property=\"Margin\" Value=\"26,0,26,36\"/>\n    </Style>\n\n    <!--\n        SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page.  Margins appropriate\n        for the conventional page layout are included as part of the style.\n        \n        The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same\n        glyph but are actually distinct.\n    -->\n    <Style x:Key=\"SnappedBackButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"Margin\" Value=\"20,0,0,0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe UI Symbol\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"FontSize\" Value=\"26.66667\"/>\n        <Setter Property=\"AutomationProperties.AutomationId\" Value=\"BackButton\"/>\n        <Setter Property=\"AutomationProperties.Name\" Value=\"Back\"/>\n        <Setter Property=\"AutomationProperties.ItemType\" Value=\"Navigation Button\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid x:Name=\"RootGrid\" Width=\"36\" Height=\"36\" Margin=\"-3,0,7,33\">\n                        <Grid Margin=\"-1,-1,0,0\">\n                            <TextBlock x:Name=\"BackgroundGlyph\" Text=\"&#xE0D4;\" Foreground=\"{StaticResource BackButtonBackgroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"NormalGlyph\" Text=\"{StaticResource BackButtonSnappedGlyph}\" Foreground=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                            <TextBlock x:Name=\"ArrowGlyph\" Text=\"&#xE0C4;\" Foreground=\"{StaticResource BackButtonPressedForegroundThemeBrush}\" Opacity=\"0\"/>\n                        </Grid>\n                        <Rectangle\n                            x:Name=\"FocusVisualWhite\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualWhiteStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"1.5\"/>\n                        <Rectangle\n                            x:Name=\"FocusVisualBlack\"\n                            IsHitTestVisible=\"False\"\n                            Stroke=\"{StaticResource FocusVisualBlackStrokeThemeBrush}\"\n                            StrokeEndLineCap=\"Square\"\n                            StrokeDashArray=\"1,1\"\n                            Opacity=\"0\"\n                            StrokeDashOffset=\"0.5\"/>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverBackgroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"NormalGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonPointerOverForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundGlyph\" Storyboard.TargetProperty=\"Foreground\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource BackButtonForegroundThemeBrush}\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"ArrowGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"NormalGlyph\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"0\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\" Storyboard.TargetProperty=\"Visibility\">\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\"/>\n                                        </ObjectAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <Storyboard>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualWhite\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                        <DoubleAnimation\n                                            Storyboard.TargetName=\"FocusVisualBlack\"\n                                            Storyboard.TargetProperty=\"Opacity\"\n                                            To=\"1\"\n                                            Duration=\"0\"/>\n                                    </Storyboard>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!-- Item templates -->\n\n    <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage -->\n    <DataTemplate x:Key=\"Standard250x250ItemTemplate\">\n        <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel VerticalAlignment=\"Bottom\" Background=\"{StaticResource ListViewItemOverlayBackgroundThemeBrush}\">\n                <TextBlock Text=\"{Binding Title}\" Foreground=\"{StaticResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage -->\n    <DataTemplate x:Key=\"Standard500x130ItemTemplate\">\n        <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 130 pixel high item template as seen in the SplitPage -->\n    <DataTemplate x:Key=\"Standard130ItemTemplate\">\n        <Grid Height=\"110\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" MaxHeight=\"60\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!--\n        List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and\n        the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage\n    -->\n    <DataTemplate x:Key=\"Standard80ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"60\" Height=\"60\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,0,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource ItemTextStyle}\" MaxHeight=\"40\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextStyle}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage -->\n    <DataTemplate x:Key=\"StandardSmallIcon300x70ItemTemplate\">\n        <Grid Width=\"294\" Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n    <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped -->\n    <DataTemplate x:Key=\"StandardSmallIcon70ItemTemplate\">\n        <Grid Margin=\"6\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Border Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"0,0,0,10\" Width=\"40\" Height=\"40\">\n                <Image Source=\"{Binding Image}\" Stretch=\"UniformToFill\"/>\n            </Border>\n            <StackPanel Grid.Column=\"1\" Margin=\"10,-10,0,0\">\n                <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource BodyTextStyle}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n                <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextStyle}\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" TextWrapping=\"NoWrap\"/>\n            </StackPanel>\n        </Grid>\n    </DataTemplate>\n\n  <!--\n      190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage\n      Includes an elaborate tooltip to display title and description text\n  -->\n  <DataTemplate x:Key=\"StandardFileWithTooltip190x130ItemTemplate\">\n        <Grid>\n            <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                <Image\n                    Source=\"{Binding Image}\"\n                    Width=\"190\"\n                    Height=\"130\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Stretch=\"Uniform\"/>\n            </Grid>\n            <ToolTipService.Placement>Mouse</ToolTipService.Placement>\n            <ToolTipService.ToolTip>\n                <ToolTip>\n                    <ToolTip.Style>\n                        <Style TargetType=\"ToolTip\">\n                            <Setter Property=\"BorderBrush\" Value=\"{StaticResource ToolTipBackgroundThemeBrush}\" />\n                            <Setter Property=\"Padding\" Value=\"0\" />\n                        </Style>\n                    </ToolTip.Style>\n\n                    <Grid Background=\"{StaticResource ApplicationPageBackgroundThemeBrush}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Background=\"{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}\" Margin=\"20\">\n                            <Image\n                                Source=\"{Binding Image}\"\n                                Width=\"160\"\n                                Height=\"160\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                Stretch=\"Uniform\"/>\n                        </Grid>\n                        <StackPanel Width=\"200\" Grid.Column=\"1\" Margin=\"0,20,20,20\">\n                            <TextBlock Text=\"{Binding Title}\" TextWrapping=\"NoWrap\" Style=\"{StaticResource BodyTextStyle}\"/>\n                            <TextBlock Text=\"{Binding Description}\" MaxHeight=\"140\" Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" Style=\"{StaticResource BodyTextStyle}\"/>\n                        </StackPanel>\n                    </Grid>   \n                </ToolTip>                \n            </ToolTipService.ToolTip>\n        </Grid>\n    </DataTemplate>\n\n    <!-- ScrollViewer styles -->\n\n    <Style x:Key=\"HorizontalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <Style x:Key=\"VerticalScrollViewerStyle\" TargetType=\"ScrollViewer\">\n        <Setter Property=\"HorizontalScrollBarVisibility\" Value=\"Disabled\"/>\n        <Setter Property=\"VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Disabled\" />\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Enabled\" />\n        <Setter Property=\"ScrollViewer.ZoomMode\" Value=\"Disabled\" />\n    </Style>\n\n    <!-- Page layout roots typically use entrance animations and a theme-appropriate background color -->\n\n    <Style x:Key=\"LayoutRootStyle\" TargetType=\"Panel\">\n        <Setter Property=\"Background\" Value=\"{StaticResource ApplicationPageBackgroundThemeBrush}\"/>\n        <Setter Property=\"ChildrenTransitions\">\n            <Setter.Value>\n                <TransitionCollection>\n                    <EntranceThemeTransition/>\n                </TransitionCollection>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Common/SuspensionManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Windows.ApplicationModel;\nusing Windows.Storage;\nusing Windows.Storage.Streams;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace MetroOAuthDemo.Common\n{\n    /// <summary>\n    /// SuspensionManager captures global session state to simplify process lifetime management\n    /// for an application.  Note that session state will be automatically cleared under a variety\n    /// of conditions and should only be used to store information that would be convenient to\n    /// carry across sessions, but that should be disacarded when an application crashes or is\n    /// upgraded.\n    /// </summary>\n    internal sealed class SuspensionManager\n    {\n        private static Dictionary<string, object> _sessionState = new Dictionary<string, object>();\n        private static List<Type> _knownTypes = new List<Type>();\n        private const string sessionStateFilename = \"_sessionState.xml\";\n\n        /// <summary>\n        /// Provides access to global session state for the current session.  This state is\n        /// serialized by <see cref=\"SaveAsync\"/> and restored by\n        /// <see cref=\"RestoreAsync\"/>, so values must be serializable by\n        /// <see cref=\"DataContractSerializer\"/> and should be as compact as possible.  Strings\n        /// and other self-contained data types are strongly recommended.\n        /// </summary>\n        public static Dictionary<string, object> SessionState\n        {\n            get { return _sessionState; }\n        }\n\n        /// <summary>\n        /// List of custom types provided to the <see cref=\"DataContractSerializer\"/> when\n        /// reading and writing session state.  Initially empty, additional types may be\n        /// added to customize the serialization process.\n        /// </summary>\n        public static List<Type> KnownTypes\n        {\n            get { return _knownTypes; }\n        }\n\n        /// <summary>\n        /// Save the current <see cref=\"SessionState\"/>.  Any <see cref=\"Frame\"/> instances\n        /// registered with <see cref=\"RegisterFrame\"/> will also preserve their current\n        /// navigation stack, which in turn gives their active <see cref=\"Page\"/> an opportunity\n        /// to save its state.\n        /// </summary>\n        /// <returns>An asynchronous task that reflects when session state has been saved.</returns>\n        public static async Task SaveAsync()\n        {\n            // Save the navigation state for all registered frames\n            foreach (var weakFrameReference in _registeredFrames)\n            {\n                Frame frame;\n                if (weakFrameReference.TryGetTarget(out frame))\n                {\n                    SaveFrameNavigationState(frame);\n                }\n            }\n\n            // Serialize the session state synchronously to avoid asynchronous access to shared\n            // state\n            MemoryStream sessionData = new MemoryStream();\n            DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);\n            serializer.WriteObject(sessionData, _sessionState);\n\n            // Get an output stream for the SessionState file and write the state asynchronously\n            StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename, CreationCollisionOption.ReplaceExisting);\n            using (Stream fileStream = await file.OpenStreamForWriteAsync())\n            {\n                sessionData.Seek(0, SeekOrigin.Begin);\n                await sessionData.CopyToAsync(fileStream);\n                await fileStream.FlushAsync();\n            }\n        }\n\n        /// <summary>\n        /// Restores previously saved <see cref=\"SessionState\"/>.  Any <see cref=\"Frame\"/> instances\n        /// registered with <see cref=\"RegisterFrame\"/> will also restore their prior navigation\n        /// state, which in turn gives their active <see cref=\"Page\"/> an opportunity restore its\n        /// state.\n        /// </summary>\n        /// <returns>An asynchronous task that reflects when session state has been read.  The\n        /// content of <see cref=\"SessionState\"/> should not be relied upon until this task\n        /// completes.</returns>\n        public static async Task RestoreAsync()\n        {\n            _sessionState = new Dictionary<String, Object>();\n\n            // Get the input stream for the SessionState file\n            StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(sessionStateFilename);\n            using (IInputStream inStream = await file.OpenSequentialReadAsync())\n            {\n                // Deserialize the Session State\n                DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);\n                _sessionState = (Dictionary<string, object>)serializer.ReadObject(inStream.AsStreamForRead());\n            }\n\n            // Restore any registered frames to their saved state\n            foreach (var weakFrameReference in _registeredFrames)\n            {\n                Frame frame;\n                if (weakFrameReference.TryGetTarget(out frame))\n                {\n                    frame.ClearValue(FrameSessionStateProperty);\n                    RestoreFrameNavigationState(frame);\n                }\n            }\n        }\n\n        private static DependencyProperty FrameSessionStateKeyProperty =\n            DependencyProperty.RegisterAttached(\"_FrameSessionStateKey\", typeof(String), typeof(SuspensionManager), null);\n        private static DependencyProperty FrameSessionStateProperty =\n            DependencyProperty.RegisterAttached(\"_FrameSessionState\", typeof(Dictionary<String, Object>), typeof(SuspensionManager), null);\n        private static List<WeakReference<Frame>> _registeredFrames = new List<WeakReference<Frame>>();\n\n        /// <summary>\n        /// Registers a <see cref=\"Frame\"/> instance to allow its navigation history to be saved to\n        /// and restored from <see cref=\"SessionState\"/>.  Frames should be registered once\n        /// immediately after creation if they will participate in session state management.  Upon\n        /// registration if state has already been restored for the specified key\n        /// the navigation history will immediately be restored.  Subsequent invocations of\n        /// <see cref=\"RestoreAsync\"/> will also restore navigation history.\n        /// </summary>\n        /// <param name=\"frame\">An instance whose navigation history should be managed by\n        /// <see cref=\"SuspensionManager\"/></param>\n        /// <param name=\"sessionStateKey\">A unique key into <see cref=\"SessionState\"/> used to\n        /// store navigation-related information.</param>\n        public static void RegisterFrame(Frame frame, String sessionStateKey)\n        {\n            if (frame.GetValue(FrameSessionStateKeyProperty) != null)\n            {\n                throw new InvalidOperationException(\"Frames can only be registered to one session state key\");\n            }\n\n            if (frame.GetValue(FrameSessionStateProperty) != null)\n            {\n                throw new InvalidOperationException(\"Frames must be either be registered before accessing frame session state, or not registered at all\");\n            }\n\n            // Use a dependency property to associate the session key with a frame, and keep a list of frames whose\n            // navigation state should be managed\n            frame.SetValue(FrameSessionStateKeyProperty, sessionStateKey);\n            _registeredFrames.Add(new WeakReference<Frame>(frame));\n\n            // Check to see if navigation state can be restored\n            RestoreFrameNavigationState(frame);\n        }\n\n        /// <summary>\n        /// Disassociates a <see cref=\"Frame\"/> previously registered by <see cref=\"RegisterFrame\"/>\n        /// from <see cref=\"SessionState\"/>.  Any navigation state previously captured will be\n        /// removed.\n        /// </summary>\n        /// <param name=\"frame\">An instance whose navigation history should no longer be\n        /// managed.</param>\n        public static void UnregisterFrame(Frame frame)\n        {\n            // Remove session state and remove the frame from the list of frames whose navigation\n            // state will be saved (along with any weak references that are no longer reachable)\n            SessionState.Remove((String)frame.GetValue(FrameSessionStateKeyProperty));\n            _registeredFrames.RemoveAll((weakFrameReference) =>\n            {\n                Frame testFrame;\n                return !weakFrameReference.TryGetTarget(out testFrame) || testFrame == frame;\n            });\n        }\n\n        /// <summary>\n        /// Provides storage for session state associated with the specified <see cref=\"Frame\"/>.\n        /// Frames that have been previously registered with <see cref=\"RegisterFrame\"/> have\n        /// their session state saved and restored automatically as a part of the global\n        /// <see cref=\"SessionState\"/>.  Frames that are not registered have transient state\n        /// that can still be useful when restoring pages that have been discarded from the\n        /// navigation cache.\n        /// </summary>\n        /// <remarks>Apps may choose to rely on <see cref=\"LayoutAwarePage\"/> to manage\n        /// page-specific state instead of working with frame session state directly.</remarks>\n        /// <param name=\"frame\">The instance for which session state is desired.</param>\n        /// <returns>A collection of state subject to the same serialization mechanism as\n        /// <see cref=\"SessionState\"/>.</returns>\n        public static Dictionary<String, Object> SessionStateForFrame(Frame frame)\n        {\n            var frameState = (Dictionary<String, Object>)frame.GetValue(FrameSessionStateProperty);\n\n            if (frameState == null)\n            {\n                var frameSessionKey = (String)frame.GetValue(FrameSessionStateKeyProperty);\n                if (frameSessionKey != null)\n                {\n                    // Registered frames reflect the corresponding session state\n                    if (!_sessionState.ContainsKey(frameSessionKey))\n                    {\n                        _sessionState[frameSessionKey] = new Dictionary<String, Object>();\n                    }\n                    frameState = (Dictionary<String, Object>)_sessionState[frameSessionKey];\n                }\n                else\n                {\n                    // Frames that aren't registered have transient state\n                    frameState = new Dictionary<String, Object>();\n                }\n                frame.SetValue(FrameSessionStateProperty, frameState);\n            }\n            return frameState;\n        }\n\n        private static void RestoreFrameNavigationState(Frame frame)\n        {\n            var frameState = SessionStateForFrame(frame);\n            if (frameState.ContainsKey(\"Navigation\"))\n            {\n                frame.SetNavigationState((String)frameState[\"Navigation\"]);\n            }\n        }\n\n        private static void SaveFrameNavigationState(Frame frame)\n        {\n            var frameState = SessionStateForFrame(frame);\n            frameState[\"Navigation\"] = frame.GetNavigationState();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\">\n  <Identity Name=\"0f36f266-ba86-4988-8181-93a7de099ff3\" Publisher=\"CN=Joe\" Version=\"1.0.0.0\" />\n  <Properties>\n    <DisplayName>MetroOAuthDemo</DisplayName>\n    <PublisherDisplayName>Joe</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Prerequisites>\n    <OSMinVersion>6.2.0</OSMinVersion>\n    <OSMaxVersionTested>6.2.0</OSMaxVersionTested>\n  </Prerequisites>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Win8OAuthDemo.App\">\n      <VisualElements DisplayName=\"Win8OAuthDemo\" Logo=\"Assets\\Logo.png\" SmallLogo=\"Assets\\SmallLogo.png\" Description=\"Demonstrates how to use WinRtAuthorizer for OAuth with LINQ to Twitter.\" ForegroundText=\"light\" BackgroundColor=\"#464646\">\n        <DefaultTile ShowName=\"allLogos\" />\n        <SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Win8OAuthDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Win8OAuthDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/TweetPage.xaml",
    "content": "﻿<common:LayoutAwarePage\n    x:Name=\"pageRoot\"\n    x:Class=\"MetroOAuthDemo.TweetPage\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    IsTabStop=\"false\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:MetroOAuthDemo\"\n    xmlns:common=\"using:MetroOAuthDemo.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n\n        <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->\n        <x:String x:Key=\"AppName\">Windows 8 OAuth Demo</x:String>\n    </Page.Resources>\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Style=\"{StaticResource LayoutRootStyle}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Click=\"GoBack\" IsEnabled=\"{Binding Frame.CanGoBack, ElementName=pageRoot}\" Style=\"{StaticResource BackButtonStyle}\"/>\n            <TextBlock x:Name=\"pageTitle\" Grid.Column=\"1\" Text=\"{StaticResource AppName}\" Style=\"{StaticResource PageHeaderTextStyle}\"/>\n        </Grid>\n        \n        <StackPanel Grid.Row=\"1\">\n            <TextBox Name=\"SearchTextBox\" Margin=\"15\" />\n            <Button Name=\"SearchButton\" Content=\"Search\" Click=\"SearchButton_Click\" Margin=\"15,0\" />\n       </StackPanel>\n\n        <VisualStateManager.VisualStateGroups>\n\n            <!-- Visual states reflect the application's view state -->\n            <VisualStateGroup x:Name=\"ApplicationViewStates\">\n                <VisualState x:Name=\"FullScreenLandscape\"/>\n                <VisualState x:Name=\"Filled\"/>\n\n                <!-- The entire page respects the narrower 100-pixel margin convention for portrait -->\n                <VisualState x:Name=\"FullScreenPortrait\">\n                    <Storyboard>\n                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"backButton\" Storyboard.TargetProperty=\"Style\">\n                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource PortraitBackButtonStyle}\"/>\n                        </ObjectAnimationUsingKeyFrames>\n                    </Storyboard>\n                </VisualState>\n\n                <!-- The back button and title have different styles when snapped -->\n                <VisualState x:Name=\"Snapped\">\n                    <Storyboard>\n                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"backButton\" Storyboard.TargetProperty=\"Style\">\n                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource SnappedBackButtonStyle}\"/>\n                        </ObjectAnimationUsingKeyFrames>\n                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"pageTitle\" Storyboard.TargetProperty=\"Style\">\n                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{StaticResource SnappedPageHeaderTextStyle}\"/>\n                        </ObjectAnimationUsingKeyFrames>\n                    </Storyboard>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n    </Grid>\n</common:LayoutAwarePage>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/TweetPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing LinqToTwitter;\nusing MetroOAuthDemo.Common;\nusing Windows.Storage;\nusing Windows.UI.Core;\nusing Windows.UI.Popups;\nusing Windows.UI.Xaml;\n\nnamespace MetroOAuthDemo\n{\n    public sealed partial class TweetPage : LayoutAwarePage\n    {\n        public TweetPage()\n        {\n            this.InitializeComponent();\n\n            SearchTextBox.Text = \"LINQ to Twitter\";\n        }\n\n        async void SearchButton_Click(object sender, RoutedEventArgs e)\n        {\n            // Linq2TwitterCredentials.txt is the default isolated store file name,\n            // but you can change it and pass as an argument to LocalDataCredentials\n            string fileName = \"Linq2TwitterCredentials.txt\";\n\n            //\n            // The code below demonstrates how to remove credentials from isolated storage\n            //\n\n            //var files = await ApplicationData.Current.LocalFolder.GetFilesAsync();\n            //if (files.Any(storFile => storFile.Name == fileName))\n            //{\n            //    var file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);\n            //    await file.DeleteAsync();\n            //}\n\n            //var credentials = new LocalDataCredentials(fileName);\n            //await credentials.ClearAsync();\n\n            var auth = new WinRtAuthorizer\n            {\n                Credentials = new LocalDataCredentials(fileName)\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                },\n                UseCompression = true,\n                Callback = new Uri(\"http://linqtotwitter.codeplex.com/\")\n            };\n\n            //\n            // Comment above and uncomment below to test WinRtApplicationOnlyAuthorizer\n            //\n\n            //var auth = new WinRtApplicationOnlyAuthorizer\n            //{\n            //    Credentials = new InMemoryCredentials\n            //    {\n            //        ConsumerKey = \"\",\n            //        ConsumerSecret = \"\"\n            //    }\n            //};\n\n            if (auth != null && !auth.IsAuthorized)\n            {\n                await auth.AuthorizeAsync();\n            }\n\n            var twitterCtx = new TwitterContext(auth);\n\n            (from search in twitterCtx.Search\n             where search.Type == SearchType.Search &&\n                   search.Query == SearchTextBox.Text\n             select search)\n            .MaterializedAsyncCallback(\n                async response =>\n                    await Dispatcher.RunAsync(\n                        CoreDispatcherPriority.Normal,\n                        async () =>\n                        {\n                            Search searchResponse = response.State.Single();\n                            string message =\n                                string.Format(\n                                    \"Search returned {0} statuses\",\n                                    searchResponse.Statuses.Count);\n\n                            await new MessageDialog(message, \"Search Complete\").ShowAsync();\n                        }));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo/Win8OAuthDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Win8OAuthDemo</RootNamespace>\n    <AssemblyName>Win8OAuthDemo</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>MetroOAuthDemo_TemporaryKey.pfx</PackageCertificateKeyFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Common\\BindableBase.cs\" />\n    <Compile Include=\"Common\\BooleanNegationConverter.cs\" />\n    <Compile Include=\"Common\\BooleanToVisibilityConverter.cs\" />\n    <Compile Include=\"Common\\LayoutAwarePage.cs\" />\n    <Compile Include=\"Common\\RichTextColumns.cs\" />\n    <Compile Include=\"Common\\SuspensionManager.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TweetPage.xaml.cs\">\n      <DependentUpon>TweetPage.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Logo.png\" />\n    <Content Include=\"Assets\\SmallLogo.png\" />\n    <Content Include=\"Assets\\SplashScreen.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Common\\ReadMe.txt\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"Common\\StandardStyles.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"TweetPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Win8OAuthDemo_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\Libraries\\LinqToTwitterRT\\LinqToTwitterRT.csproj\">\n      <Project>{4c99ec2e-067b-48e9-947e-cf80d9e17b96}</Project>\n      <Name>LinqToTwitterRT</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0' \">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/Win8OAuthDemo/Win8OAuthDemo.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Win8OAuthDemo\", \"Win8OAuthDemo\\Win8OAuthDemo.csproj\", \"{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x64.Build.0 = Debug|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x86.Build.0 = Debug|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|ARM.Build.0 = Release|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x64.ActiveCfg = Release|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x64.Build.0 = Release|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x64.Deploy.0 = Release|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x86.ActiveCfg = Release|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x86.Build.0 = Release|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x86.Deploy.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/App.xaml",
    "content": "﻿<Application \n    x:Class=\"WindowsPhoneDemo.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"       \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\">\n\n    <!--Application Resources-->\n    <Application.Resources>\n    </Application.Resources>\n\n    <Application.ApplicationLifetimeObjects>\n        <!--Required object that handles lifetime events for the application-->\n        <shell:PhoneApplicationService \n            Launching=\"Application_Launching\" Closing=\"Application_Closing\" \n            Activated=\"Application_Activated\" Deactivated=\"Application_Deactivated\"/>\n    </Application.ApplicationLifetimeObjects>\n\n</Application>"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/App.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\n\nnamespace WindowsPhoneDemo\n{\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Provides easy access to the root frame of the Phone Application.\n        /// </summary>\n        /// <returns>The root frame of the Phone Application.</returns>\n        public PhoneApplicationFrame RootFrame { get; private set; }\n\n        /// <summary>\n        /// Constructor for the Application object.\n        /// </summary>\n        public App()\n        {\n            // Global handler for uncaught exceptions. \n            UnhandledException += Application_UnhandledException;\n\n            // Standard Silverlight initialization\n            InitializeComponent();\n\n            // Phone-specific initialization\n            InitializePhoneApplication();\n\n            // Show graphics profiling information while debugging.\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                // Display the current frame rate counters.\n                Application.Current.Host.Settings.EnableFrameRateCounter = true;\n\n                // Show the areas of the app that are being redrawn in each frame.\n                //Application.Current.Host.Settings.EnableRedrawRegions = true;\n\n                // Enable non-production analysis visualization mode, \n                // which shows areas of a page that are handed off to GPU with a colored overlay.\n                //Application.Current.Host.Settings.EnableCacheVisualization = true;\n\n                // Disable the application idle detection by setting the UserIdleDetectionMode property of the\n                // application's PhoneApplicationService object to Disabled.\n                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run\n                // and consume battery power when the user is not using the phone.\n                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;\n            }\n\n        }\n\n        // Code to execute when the application is launching (eg, from Start)\n        // This code will not execute when the application is reactivated\n        private void Application_Launching(object sender, LaunchingEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is activated (brought to foreground)\n        // This code will not execute when the application is first launched\n        private void Application_Activated(object sender, ActivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is deactivated (sent to background)\n        // This code will not execute when the application is closing\n        private void Application_Deactivated(object sender, DeactivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is closing (eg, user hit Back)\n        // This code will not execute when the application is deactivated\n        private void Application_Closing(object sender, ClosingEventArgs e)\n        {\n        }\n\n        // Code to execute if a navigation fails\n        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                // A navigation has failed; break into the debugger\n                System.Diagnostics.Debugger.Break();\n            }\n        }\n\n        // Code to execute on Unhandled Exceptions\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                // An unhandled exception has occurred; break into the debugger\n                System.Diagnostics.Debugger.Break();\n            }\n        }\n\n        // Avoid double-initialization\n        private bool phoneApplicationInitialized = false;\n\n        // Do not add any additional code to this method\n        private void InitializePhoneApplication()\n        {\n            if (phoneApplicationInitialized)\n                return;\n\n            // Create the frame but don't set it as RootVisual yet; this allows the splash\n            // screen to remain active until the application is ready to render.\n            RootFrame = new PhoneApplicationFrame();\n            RootFrame.Navigated += CompleteInitializePhoneApplication;\n\n            // Handle navigation failures\n            RootFrame.NavigationFailed += RootFrame_NavigationFailed;\n\n            // Ensure we don't initialize again\n            phoneApplicationInitialized = true;\n        }\n\n        // Do not add any additional code to this method\n        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)\n        {\n            // Set the root visual to allow the application to render\n            if (RootVisual != RootFrame)\n                RootVisual = RootFrame;\n\n            // Remove this handler since it is no longer needed\n            RootFrame.Navigated -= CompleteInitializePhoneApplication;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/MainPage.xaml",
    "content": "﻿<phone:PhoneApplicationPage \n    x:Class=\"WindowsPhoneDemo.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\" d:DesignWidth=\"480\" d:DesignHeight=\"768\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel x:Name=\"TitlePanel\" Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock x:Name=\"ApplicationTitle\" Text=\"LINQ to Twitter\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock x:Name=\"PageTitle\" Text=\"Twitter Search\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\" FontSize=\"72\" />\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <Button Content=\"Perform Search\" Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"51,175,0,0\" Name=\"SearchButton\" VerticalAlignment=\"Top\" Width=\"365\" Click=\"SearchButton_Click\" />\n            <ListBox Height=\"356\" HorizontalAlignment=\"Left\" Margin=\"5,253,0,0\" Name=\"SearchListBox\" VerticalAlignment=\"Top\" Width=\"451\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\" Height=\"132\">\n                            <Image Source=\"{Binding ImageSource}\" Height=\"73\" Width=\"73\" VerticalAlignment=\"Top\" Margin=\"0,10,8,0\"/>\n                            <StackPanel Width=\"370\">\n                                <TextBlock Text=\"{Binding UserName}\" Foreground=\"#FFC8AB14\" FontSize=\"28\" />\n                                <TextBlock Text=\"{Binding Message}\" TextWrapping=\"Wrap\" FontSize=\"24\" />\n                            </StackPanel>\n                        </StackPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n            <StackPanel HorizontalAlignment=\"Center\" Orientation=\"Horizontal\">\n                <HyperlinkButton Content=\"Status Update\" Height=\"30\" HorizontalAlignment=\"Center\" Name=\"StatusUpdateHyperlink\" VerticalAlignment=\"Top\" Width=\"200\" NavigateUri=\"/StatusUpdate.xaml\" />\n                <HyperlinkButton Content=\"User Stream\" Height=\"30\" HorizontalAlignment=\"Center\" Name=\"UserStreamHyperlink\" VerticalAlignment=\"Top\" Width=\"200\" NavigateUri=\"/UserStream.xaml\" />\n            </StackPanel>\n            <TextBox Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"3,104,0,0\" Name=\"QueryTextBox\" Text=\"LINQ to Twitter\" VerticalAlignment=\"Top\" Width=\"460\" />\n            <TextBlock Height=\"30\" HorizontalAlignment=\"Left\" Margin=\"14,80,0,0\" Name=\"SearchLabel\" Text=\"Enter Search Query:\" VerticalAlignment=\"Top\" />\n        </Grid>\n    </Grid>\n \n    <!--Sample code showing usage of ApplicationBar-->\n    <!--<phone:PhoneApplicationPage.ApplicationBar>\n        <shell:ApplicationBar IsVisible=\"True\" IsMenuEnabled=\"True\">\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button1.png\" Text=\"Button 1\"/>\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button2.png\" Text=\"Button 2\"/>\n            <shell:ApplicationBar.MenuItems>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 1\"/>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 2\"/>\n            </shell:ApplicationBar.MenuItems>\n        </shell:ApplicationBar>\n    </phone:PhoneApplicationPage.ApplicationBar>-->\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/MainPage.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace WindowsPhoneDemo\n{\n    public partial class MainPage : PhoneApplicationPage\n    {\n        // Constructor\n        public MainPage()\n        {\n            InitializeComponent();\n        }\n\n        private void SearchButton_Click(object sender, RoutedEventArgs e)\n        {\n            ITwitterAuthorizer auth = SharedState.Authorizer;\n\n            if (auth == null || !auth.IsAuthorized)\n            {\n                NavigationService.Navigate(new Uri(\"/OAuth.xaml\", UriKind.Relative));\n            }\n            else\n            {\n                var twitterCtx = new TwitterContext(auth, SharpGIS.WebRequestCreator.GZip);\n\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == QueryTextBox.Text\n                 select search)\n                .MaterializedAsyncCallback(asyncResponse =>\n                    Dispatcher.BeginInvoke(() =>\n                    {\n                        if (asyncResponse.Status != TwitterErrorStatus.Success)\n                        {\n                            MessageBox.Show(\"Error during query: \" + asyncResponse.Exception.Message);\n                            return;\n                        }\n\n                        Search search = asyncResponse.State.SingleOrDefault();\n\n                        var tweets =\n                            (from status in search.Statuses\n                             select new Tweet\n                             {\n                                 UserName = status.User.Identifier.ScreenName,\n                                 Message = status.Text,\n                                 ImageSource = status.User.ProfileImageUrl\n                             })\n                            .ToList();\n\n                        SearchListBox.ItemsSource = tweets;\n                    }));\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/OAuth.xaml",
    "content": "﻿<phone:PhoneApplicationPage \n    x:Class=\"WindowsPhoneDemo.OAuth\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\" d:DesignHeight=\"768\" d:DesignWidth=\"480\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel x:Name=\"TitlePanel\" Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock x:Name=\"ApplicationTitle\" Text=\"MY APPLICATION\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock x:Name=\"PageTitle\" Text=\"page name\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <phone:WebBrowser HorizontalAlignment=\"Left\" Margin=\"5,0,0,0\" Name=\"OAuthWebBrowser\" VerticalAlignment=\"Top\" Height=\"450\" Width=\"450\" />\n            <TextBlock Height=\"30\" HorizontalAlignment=\"Left\" Margin=\"23,478,0,0\" Name=\"EnterPinTextBlock\" Text=\"Enter PIN:\" VerticalAlignment=\"Top\" Visibility=\"Collapsed\" />\n            <TextBox Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"117,456,0,0\" Name=\"PinTextBox\" Text=\"\" VerticalAlignment=\"Top\" Width=\"333\" IsEnabled=\"False\" />\n            <Button Content=\"Authenticate\" Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"117,529,0,0\" Name=\"AuthenticateButton\" VerticalAlignment=\"Top\" Width=\"216\" IsEnabled=\"False\" Click=\"AuthenticateButton_Click\" />\n        </Grid>\n    </Grid>\n \n    <!--Sample code showing usage of ApplicationBar-->\n    <!--<phone:PhoneApplicationPage.ApplicationBar>\n        <shell:ApplicationBar IsVisible=\"True\" IsMenuEnabled=\"True\">\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button1.png\" Text=\"Button 1\"/>\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button2.png\" Text=\"Button 2\"/>\n            <shell:ApplicationBar.MenuItems>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 1\"/>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 2\"/>\n            </shell:ApplicationBar.MenuItems>\n        </shell:ApplicationBar>\n    </phone:PhoneApplicationPage.ApplicationBar>-->\n\n</phone:PhoneApplicationPage>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/OAuth.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing System.Windows;\nusing System.Windows.Navigation;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace WindowsPhoneDemo\n{\n    public partial class OAuth : PhoneApplicationPage\n    {\n        PinAuthorizer pinAuth;\n\n        public OAuth()\n        {\n            InitializeComponent();\n            this.Loaded += new RoutedEventHandler(Page_Loaded);\n            OAuthWebBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(OAuthWebBrowser_LoadCompleted);\n        }\n\n        void OAuthWebBrowser_LoadCompleted(object sender, NavigationEventArgs e)\n        {\n            EnterPinTextBlock.Visibility = Visibility.Visible;\n            PinTextBox.IsEnabled = true;\n            AuthenticateButton.IsEnabled = true;\n        }\n\n        void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n            pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials \n                { \n                    ConsumerKey = \"\", \n                    ConsumerSecret = \"\" \n                },\n                UseCompression = true,\n                GoToTwitterAuthorization = pageLink => Dispatcher.BeginInvoke(() => OAuthWebBrowser.Navigate(new Uri(pageLink, UriKind.Absolute)))\n            };\n\n            this.pinAuth.BeginAuthorize(resp =>\n                Dispatcher.BeginInvoke(() =>\n                {\n                    switch (resp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                resp.Exception.ToString(),\n                                resp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n\n            //\n            // comment out the code above and uncomment this code to use SingleUserAuthorizer\n            //\n\n            //var auth = new SingleUserAuthorizer\n            //{\n            //    Credentials = new SingleUserInMemoryCredentials\n            //    {\n            //        ConsumerKey = \"\", // twitter Consumer key\n            //        ConsumerSecret = \"\", // twitter Consumer secret\n            //        TwitterAccessToken = \"\", // twitter Access token\n            //        TwitterAccessTokenSecret = \"\" // twitter Access token secret\n            //    }\n            //};\n\n            //SharedState.Authorizer = auth;\n\n            //NavigationService.GoBack();\n        }\n\n        private void AuthenticateButton_Click(object sender, RoutedEventArgs e)\n        {\n            pinAuth.CompleteAuthorize(\n                PinTextBox.Text,\n                completeResp => Dispatcher.BeginInvoke(() =>\n                {\n                    switch (completeResp.Status)\n                    {\n                        case TwitterErrorStatus.Success:\n                            SharedState.Authorizer = pinAuth;\n                            NavigationService.GoBack();\n                            break;\n                        case TwitterErrorStatus.TwitterApiError:\n                        case TwitterErrorStatus.RequestProcessingException:\n                            MessageBox.Show(\n                                completeResp.Exception.ToString(),\n                                completeResp.Message,\n                                MessageBoxButton.OK);\n                            break;\n                    }\n                }));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n</Deployment>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"WindowsPhoneDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"WindowsPhoneDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2011\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"7d0a714c-ef87-43af-9899-2958148fb0a5\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/Properties/WMAppManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2009/deployment\" AppPlatformVersion=\"7.1\">\n  <App xmlns=\"\" ProductID=\"{0c97cb87-173b-4457-8e69-4dabd377d29c}\" Title=\"WindowsPhoneDemo\" RuntimeType=\"Silverlight\" Version=\"1.0.0.0\" Genre=\"apps.normal\"  Author=\"WindowsPhoneDemo author\" Description=\"Sample description\" Publisher=\"WindowsPhoneDemo\">\n    <IconPath IsRelative=\"true\" IsResource=\"false\">ApplicationIcon.png</IconPath>\n    <Capabilities>\n      <Capability Name=\"ID_CAP_GAMERSERVICES\"/>\n      <Capability Name=\"ID_CAP_IDENTITY_DEVICE\"/>\n      <Capability Name=\"ID_CAP_IDENTITY_USER\"/>\n      <Capability Name=\"ID_CAP_LOCATION\"/>\n      <Capability Name=\"ID_CAP_MEDIALIB\"/>\n      <Capability Name=\"ID_CAP_MICROPHONE\"/>\n      <Capability Name=\"ID_CAP_NETWORKING\"/>\n      <Capability Name=\"ID_CAP_PHONEDIALER\"/>\n      <Capability Name=\"ID_CAP_PUSH_NOTIFICATION\"/>\n      <Capability Name=\"ID_CAP_SENSORS\"/>\n      <Capability Name=\"ID_CAP_WEBBROWSERCOMPONENT\"/>\n      <Capability Name=\"ID_CAP_ISV_CAMERA\"/>\n      <Capability Name=\"ID_CAP_CONTACTS\"/>\n      <Capability Name=\"ID_CAP_APPOINTMENTS\"/>\n    </Capabilities>\n    <Tasks>\n      <DefaultTask  Name =\"_default\" NavigationPage=\"MainPage.xaml\"/>\n    </Tasks>\n    <Tokens>\n      <PrimaryToken TokenID=\"WindowsPhoneDemoToken\" TaskName=\"_default\">\n        <TemplateType5>\n          <BackgroundImageURI IsRelative=\"true\" IsResource=\"false\">Background.png</BackgroundImageURI>\n          <Count>0</Count>\n          <Title>WindowsPhoneDemo</Title>\n        </TemplateType5>\n      </PrimaryToken>\n    </Tokens>\n  </App>\n</Deployment>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/SharedState.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\n\nnamespace WindowsPhoneDemo\n{\n    public static class SharedState\n    {\n        public static ITwitterAuthorizer Authorizer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/StatusUpdate.xaml",
    "content": "﻿<phone:PhoneApplicationPage \n    x:Class=\"WindowsPhoneDemo.StatusUpdate\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\" d:DesignHeight=\"768\" d:DesignWidth=\"480\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel x:Name=\"TitlePanel\" Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock x:Name=\"ApplicationTitle\" Text=\"LINQ to Twitter\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock x:Name=\"PageTitle\" Text=\"Status Update\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <Button Content=\"Tweet\" Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"143,127,0,0\" Name=\"TweetButton\" VerticalAlignment=\"Top\" Width=\"160\" Click=\"TweetButton_Click\" />\n            <TextBox Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"0,49,0,0\" Name=\"TweetTextBox\" Text=\"\" VerticalAlignment=\"Top\" Width=\"467\" />\n            <HyperlinkButton Content=\"Public Timeline\" Height=\"30\" HorizontalAlignment=\"Left\" Margin=\"119,6,0,0\" Name=\"hyperlinkButton1\" VerticalAlignment=\"Top\" Width=\"200\" NavigateUri=\"/MainPage.xaml\" />\n        </Grid>\n    </Grid>\n \n    <!--Sample code showing usage of ApplicationBar-->\n    <!--<phone:PhoneApplicationPage.ApplicationBar>\n        <shell:ApplicationBar IsVisible=\"True\" IsMenuEnabled=\"True\">\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button1.png\" Text=\"Button 1\"/>\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button2.png\" Text=\"Button 2\"/>\n            <shell:ApplicationBar.MenuItems>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 1\"/>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 2\"/>\n            </shell:ApplicationBar.MenuItems>\n        </shell:ApplicationBar>\n    </phone:PhoneApplicationPage.ApplicationBar>-->\n\n</phone:PhoneApplicationPage>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/StatusUpdate.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace WindowsPhoneDemo\n{\n    public partial class StatusUpdate : PhoneApplicationPage\n    {\n        public StatusUpdate()\n        {\n            InitializeComponent();\n\n            TweetTextBox.Text = \"Windows Phone Test, \" + DateTime.Now.ToString() + \" #linq2twitter\";\n        }\n\n        private void TweetButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (string.IsNullOrWhiteSpace(TweetTextBox.Text))\n            {\n                MessageBox.Show(\"Please enter text to tweet.\");\n            }\n\n            ITwitterAuthorizer auth = SharedState.Authorizer;\n\n            if (auth == null || !auth.IsAuthorized)\n            {\n                NavigationService.Navigate(new Uri(\"/OAuth.xaml\", UriKind.Relative));\n            }\n            else\n            {\n                var twitterCtx = new TwitterContext(auth);\n\n                twitterCtx.UpdateStatus(TweetTextBox.Text,\n                    updateResp => Dispatcher.BeginInvoke(() =>\n                    {\n                        switch (updateResp.Status)\n                        {\n                            case TwitterErrorStatus.Success:\n                                Status tweet = updateResp.State;\n                                User user = tweet.User;\n                                UserIdentifier id = user.Identifier;\n                                MessageBox.Show(\n                                    \"User: \" + id.ScreenName +\n                                    \", Posted Status: \" + tweet.Text,\n                                    \"Update Successfully Posted.\",\n                                    MessageBoxButton.OK);\n                                break;\n                            case TwitterErrorStatus.TwitterApiError:\n                            case TwitterErrorStatus.RequestProcessingException:\n                                MessageBox.Show(\n                                    updateResp.Exception.ToString(),\n                                    updateResp.Message,\n                                    MessageBoxButton.OK);\n                                break;\n                        }\n                    }));\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/StreamItem.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Ink;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing System.Windows.Shapes;\n\nnamespace WindowsPhoneDemo\n{\n    public class StreamItem\n    {\n        public string Message { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/Tweet.cs",
    "content": "﻿using System;\n\nnamespace WindowsPhoneDemo\n{\n    public class Tweet\n    {\n        public string UserName { get; set; }\n\n        public string Message { get; set; }\n\n        public string ImageSource { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/UserStream.xaml",
    "content": "﻿<phone:PhoneApplicationPage \n    x:Class=\"WindowsPhoneDemo.UserStream\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\" d:DesignHeight=\"768\" d:DesignWidth=\"480\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel x:Name=\"TitlePanel\" Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock x:Name=\"ApplicationTitle\" Text=\"MY APPLICATION\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock x:Name=\"PageTitle\" Text=\"page name\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Margin=\"12,0,12,0\">\n            <Button Content=\"Start Stream\" Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"51,175,0,0\" Name=\"StartButton\" VerticalAlignment=\"Top\" Width=\"365\" Click=\"StartButton_Click\" />\n            <ListBox Height=\"474\" HorizontalAlignment=\"Left\" Margin=\"5,253,0,0\" Name=\"StreamListBox\" VerticalAlignment=\"Top\" Width=\"451\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\" Height=\"132\">\n                            <StackPanel Width=\"370\">\n                                <TextBlock Text=\"{Binding Message}\" TextWrapping=\"Wrap\" FontSize=\"24\" />\n                            </StackPanel>\n                        </StackPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </Grid>\n    </Grid>\n \n    <!--Sample code showing usage of ApplicationBar-->\n    <!--<phone:PhoneApplicationPage.ApplicationBar>\n        <shell:ApplicationBar IsVisible=\"True\" IsMenuEnabled=\"True\">\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button1.png\" Text=\"Button 1\"/>\n            <shell:ApplicationBarIconButton IconUri=\"/Images/appbar_button2.png\" Text=\"Button 2\"/>\n            <shell:ApplicationBar.MenuItems>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 1\"/>\n                <shell:ApplicationBarMenuItem Text=\"MenuItem 2\"/>\n            </shell:ApplicationBar.MenuItems>\n        </shell:ApplicationBar>\n    </phone:PhoneApplicationPage.ApplicationBar>-->\n\n</phone:PhoneApplicationPage>\n"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/UserStream.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Net;\nusing System.Windows;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace WindowsPhoneDemo\n{\n    public partial class UserStream : PhoneApplicationPage\n    {\n        public UserStream()\n        {\n            InitializeComponent();\n        }\n\n        private void StartButton_Click(object sender, RoutedEventArgs e)\n        {\n            ITwitterAuthorizer auth = SharedState.Authorizer;\n\n            if (auth == null || !auth.IsAuthorized)\n            {\n                NavigationService.Navigate(new Uri(\"/OAuth.xaml\", UriKind.Relative));\n            }\n            else\n            {\n                int count = 0;\n                var twitterCtx = new TwitterContext(auth);\n                var collection = new ObservableCollection<StreamItem>();\n                StreamListBox.ItemsSource = collection;\n\n                (from strm in twitterCtx.UserStream\n                 where strm.Type == UserStreamType.User\n                 select strm)\n                .StreamingCallback(strm => Dispatcher.BeginInvoke(() =>\n                {\n                    if (strm.Status == TwitterErrorStatus.RequestProcessingException)\n                    {\n                        WebException wex = strm.Error as WebException;\n                        if (wex != null && wex.Status == WebExceptionStatus.ConnectFailure)\n                        {\n                            MessageBox.Show(wex.Message + \" You might want to reconnect.\");\n                        }\n\n                        MessageBox.Show(strm.Error.ToString());\n                        return;\n                    }\n\n                    string message = \n                        string.IsNullOrWhiteSpace(strm.Content) ? \"Keep-Alive\" : strm.Content;\n                    collection.Add(\n                        new StreamItem\n                        {\n                            Message = DateTime.Now.ToString() + \": \" + message\n                        });\n\n                    if (count++ >= 25)\n                    {\n                        strm.CloseStream();\n                        MessageBox.Show(\"Stream for this demo is closing...\");\n                    }\n                }))\n                .SingleOrDefault();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/WindowsPhoneDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{33673588-8F27-4B06-93F4-6034CEF9E366}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WindowsPhoneDemo</RootNamespace>\n    <AssemblyName>WindowsPhoneDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <TargetFrameworkProfile>WindowsPhone71</TargetFrameworkProfile>\n    <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>WindowsPhoneDemo.xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>WindowsPhoneDemo.App</SilverlightAppEntry>\n    <ValidateXaml>true</ValidateXaml>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Phone\" />\n    <Reference Include=\"Microsoft.Phone.Interop\" />\n    <Reference Include=\"SharpGIS.GZipWebClient\">\n      <HintPath>..\\packages\\SharpGIS.GZipWebClient.1.4.0.0\\lib\\wp71\\SharpGIS.GZipWebClient.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Windows\" />\n    <Reference Include=\"system\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"mscorlib.extensions\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"OAuth.xaml.cs\">\n      <DependentUpon>OAuth.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"StreamItem.cs\" />\n    <Compile Include=\"Tweet.cs\" />\n    <Compile Include=\"SharedState.cs\" />\n    <Compile Include=\"StatusUpdate.xaml.cs\">\n      <DependentUpon>StatusUpdate.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"UserStream.xaml.cs\">\n      <DependentUpon>UserStream.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"OAuth.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StatusUpdate.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"UserStream.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\AppManifest.xml\" />\n    <None Include=\"Properties\\WMAppManifest.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"ApplicationIcon.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Background.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"SplashScreenImage.jpg\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitterWP\\LinqToTwitterWP.csproj\">\n      <Project>{C6E6BF25-5DED-4349-A5EC-E61DCC598F10}</Project>\n      <Name>LinqToTwitterWP</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <WCFMetadata Include=\"Service References\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\Silverlight for Phone\\$(TargetFrameworkVersion)\\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\Silverlight for Phone\\$(TargetFrameworkVersion)\\Microsoft.Silverlight.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions />\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter3/WindowsPhoneDemo/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"SharpGIS.GZipWebClient\" version=\"1.4.0.0\" targetFramework=\"wp71\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/AccountDemos.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class AccountDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tVerifying Credentials...\\n\");\n                        await VerifyCredentialsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tRequesting settings....\\n\");\n                        await AccountSettingsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tUpdating colors...\\n\");\n                        await UpdateAccountColorsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUpdating image...\\n\");\n                        await UpdateAccountImageAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tUpdating image...\\n\");\n                        await UpdateAccountBackgroundImageAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tUpdating account...\\n\");\n                        await UpdateAccountProfileAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tUpdating account...\\n\");\n                        await UpdateAccountSettingsAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tUpdating device...\\n\");\n                        await UpdateDeliveryDeviceAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tUpdating banner...\\n\");\n                        await UpdateProfileBannerAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tRemoving banner...\\n\");\n                        await RemoveProfileBannerAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nAccount Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Verify Credentials\");\n            Console.WriteLine(\"\\t 1. Get Account Settings\");\n            Console.WriteLine(\"\\t 2. Update Account Colors\");\n            Console.WriteLine(\"\\t 3. Update Account Image\");\n            Console.WriteLine(\"\\t 4. Update Account Background Image\");\n            Console.WriteLine(\"\\t 5. Update Account Profile\");\n            Console.WriteLine(\"\\t 6. Update Account Settings\");\n            Console.WriteLine(\"\\t 7. Update Delivery Device\");\n            Console.WriteLine(\"\\t 8. Update Profile Banner\");\n            Console.WriteLine(\"\\t 9. Remove Profile Banner\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task VerifyCredentialsAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var verifyResponse =\n                    await\n                        (from acct in twitterCtx.Account\n                         where acct.Type == AccountType.VerifyCredentials\n                         select acct)\n                        .SingleOrDefaultAsync();\n\n                if (verifyResponse != null && verifyResponse.User != null)\n                {\n                    User user = verifyResponse.User;\n\n                    Console.WriteLine(\n                        \"Credentials are good for {0}.\",\n                        user.ScreenNameResponse); \n                }\n            }\n            catch (TwitterQueryException tqe)\n            {\n                Console.WriteLine(tqe.Message);\n            }\n        }\n\n        static async Task AccountSettingsAsync(TwitterContext twitterCtx)\n        {\n            var settingsResponse =\n                await\n                (from acct in twitterCtx.Account\n                 where acct.Type == AccountType.Settings\n                 select acct)\n                .SingleOrDefaultAsync();\n\n            if (settingsResponse != null && \n                settingsResponse.Settings != null &&\n                settingsResponse.Settings.TrendLocation != null &&\n                settingsResponse.Settings.SleepTime != null)\n            {\n                var settings = settingsResponse.Settings;\n\n                Console.WriteLine(\n                    \"Trend Location: {0}\\nGeo Enabled: {1}\\nSleep Enabled: {2}\",\n                    settings.TrendLocation.Name,\n                    settings.GeoEnabled,\n                    settings.SleepTime.Enabled); \n            }\n        }\n\n        static async Task UpdateAccountColorsAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.UpdateAccountColorsAsync(\n                background: null, text: \"#000000\", link: \"#0000ff\", \n                sidebarFill: \"#e0ff92\", sidebarBorder: \"#87bc44\", \n                includeEntities: true, skipStatus: true);\n\n            if (user != null)\n            {\n                Console.WriteLine(\"\\nAccount Colors:\\n\");\n\n                Console.WriteLine(\"Background:     \" + user.ProfileBackgroundColor);\n                Console.WriteLine(\"Text:           \" + user.ProfileTextColor);\n                Console.WriteLine(\"Link:           \" + user.ProfileLinkColor);\n                Console.WriteLine(\"Sidebar Fill:   \" + user.ProfileSidebarFillColor);\n                Console.WriteLine(\"Sidebar Border: \" + user.ProfileSidebarBorderColor); \n            }\n        }\n\n        static async Task UpdateAccountImageAsync(TwitterContext twitterCtx)\n        {\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\Images\\200xColor_2.png\");\n\n            var user = await twitterCtx.UpdateAccountImageAsync(\n                imageBytes, \"200xColor_2.png\", \"png\", false);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileImageUrl); \n        }\n\n        static async Task UpdateAccountBackgroundImageAsync(TwitterContext twitterCtx)\n        {\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\Images\\200xColor_2.png\");\n\n            var user = \n                await twitterCtx.UpdateAccountBackgroundImageAsync(\n                    image: imageBytes, \n                    fileName: \"200xColor_2.png\",\n                    imageType: \"png\", \n                    tile: false, \n                    use: true, \n                    skipStatus: true);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileImageUrl); \n        }\n\n        static async Task UpdateAccountProfileAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.UpdateAccountProfileAsync(\n                \"Joe Mayo\",\n                \"http://linqtotwitter.codeplex.com\",\n                \"Las Vegas, NV\",\n                \"Testing the Account Profile Update with LINQ to Twitter.\",\n                true,\n                true);\n\n            if (user != null)\n                Console.WriteLine(\n                    \"Name: {0}\\nURL: {1}\\nLocation: {2}\\nDescription: {3}\",\n                    user.Name, user.Url, user.Location, user.Description); \n        }\n\n        static async Task UpdateAccountSettingsAsync(TwitterContext twitterCtx)\n        {\n            Account acct = \n                await twitterCtx.UpdateAccountSettingsAsync(\n                    null, true, 20, 6, null, null);\n\n            if (acct != null && \n                acct.Settings != null && \n                acct.Settings.SleepTime != null)\n            {\n                SleepTime sleep = acct.Settings.SleepTime;\n                Console.WriteLine(\n                    \"Enabled: {0}, Start: {1}, End: {2}\",\n                    sleep.Enabled, sleep.StartHour, sleep.EndHour); \n            }\n        }\n\n        static async Task UpdateDeliveryDeviceAsync(TwitterContext twitterCtx)\n        {\n            Account acct = \n                await twitterCtx.UpdateDeliveryDeviceAsync(\n                    DeviceType.None, null);\n\n            if (acct != null && acct.User != null)\n                Console.WriteLine(\"Update for: \", acct.User.ScreenNameResponse); \n        }\n        \n        static async Task UpdateProfileBannerAsync(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = File.ReadAllBytes(@\"..\\..\\images\\13903749474_86bd1290de_o.jpg\");\n\n            var user = \n                await twitterCtx.UpdateProfileBannerAsync(\n                    fileBytes, \"13903749474_86bd1290de_o.jpg\", \"jpg\", 1500, 500, 0, 0);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileBannerUrl); \n        }\n\n        static async Task RemoveProfileBannerAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.RemoveProfileBannerAsync();\n\n            if (user != null)\n                Console.WriteLine(\"Profile Banner: \" + user.ProfileBannerUrl ?? \"None\"); \n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\"/>\n    <add key=\"consumerSecret\" value=\"\"/>\n    <add key=\"oauthToken\" value=\"\"/>\n    <add key=\"oauthTokenSecret\" value=\"\"/>\n    <add key=\"accessToken\" value=\"\"/>\n    <add key=\"accessTokenSecret\" value=\"\"/>\n  </appSettings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/BlockDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class BlockDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tListing blocked Users...\\n\");\n                        await ListBlockedUsersAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing blocked IDs...\\n\");\n                        await ListBlockIDsAsyc(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tBlocking user...\\n\");\n                        await CreateBlockAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUnblocking user...\\n\");\n                        await DestroyBlockAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nBlock Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. List Blocked Users\");\n            Console.WriteLine(\"\\t 1. List Blocked IDs\");\n            Console.WriteLine(\"\\t 2. Block a User\");\n            Console.WriteLine(\"\\t 3. Unblock a User\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ListBlockedUsersAsync(TwitterContext twitterCtx)\n        {\n            var blockResponse =\n                await\n                    (from block in twitterCtx.Blocks\n                     where block.Type == BlockingType.List\n                     select block)\n                    .SingleOrDefaultAsync();\n\n            if (blockResponse != null && blockResponse.Users != null)\n                blockResponse.Users.ForEach(user =>\n                        Console.WriteLine(user.ScreenNameResponse)); \n        }\n        \n        static async Task ListBlockIDsAsyc(TwitterContext twitterCtx)\n        {\n            var result =\n                await\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.Ids\n                 select blockItem)\n                .SingleOrDefaultAsync();\n\n            if (result != null && result.IDs != null)\n                result.IDs.ForEach(block => Console.WriteLine(\"ID: {0}\", block)); \n        }\n\n        static async Task CreateBlockAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Block: \");\n            string userName = Console.ReadLine();\n\n            var user = await twitterCtx.CreateBlockAsync(0, userName, true);\n\n            if (user != null)\n                Console.WriteLine(\"User Name: \" + user.Name);\n        }\n\n        static async Task DestroyBlockAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Unblock: \");\n            string userName = Console.ReadLine();\n\n            var user = await twitterCtx.DestroyBlockAsync(0, userName, true);\n\n            if (user != null) \n                Console.WriteLine(\"User Name: \" + user.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/DirectMessageDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class DirectMessageDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing sent DMs...\\n\");\n                        await ShowSentDMsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing received DMs...\\n\");\n                        await ShowReceivedDMsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tShowing DM...\\n\");\n                        await ShowSpecificDMAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tSending DM...\\n\");\n                        await NewDirectMessageAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tShowing DM...\\n\");\n                        await DestroyDirectMessageAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nDirect Message Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Sent DMs\");\n            Console.WriteLine(\"\\t 1. Received DMs\");\n            Console.WriteLine(\"\\t 2. Show DM\");\n            Console.WriteLine(\"\\t 3. Send DM\");\n            Console.WriteLine(\"\\t 4. Delete DM\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowSentDMsAsync(TwitterContext twitterCtx)\n        {\n            var dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessage\n                     where dm.Type == DirectMessageType.SentBy\n                     select dm)\n                    .ToListAsync();\n\n            if (dmResponse != null)\n                dmResponse.ForEach(dm => \n                {\n                    if (dm != null && dm.Recipient != null)\n                        Console.WriteLine(\n                            \"Name: {0}, Tweet: {1}\",\n                            dm.Recipient.ScreenNameResponse, dm.Text);\n                });\n        }\n\n        static async Task ShowReceivedDMsAsync(TwitterContext twitterCtx)\n        {\n            var dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessage\n                     where dm.Type == DirectMessageType.SentTo\n                     select dm)\n                    .ToListAsync();\n\n            if (dmResponse != null)\n                dmResponse.ForEach(dm => \n                {\n                    if (dm != null && dm.Recipient != null)\n                        Console.WriteLine(\n                            \"Name: {0}, Tweet: {1}\",\n                            dm.Recipient.ScreenNameResponse, dm.Text);\n                });\n        }\n\n        static async Task ShowSpecificDMAsync(TwitterContext twitterCtx)\n        {\n            var dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessage\n                     where dm.Type == DirectMessageType.Show &&\n                           dm.ID == 2078013265\n                     select dm)\n                    .SingleOrDefaultAsync();\n\n            if (dmResponse != null &&\n                dmResponse.Recipient != null &&\n                dmResponse.Sender != null)\n            {\n                Console.WriteLine(\n                    \"From: {0}\\nTo:  {1}\\nMessage: {2}\",\n                    dmResponse.Sender.Name,\n                    dmResponse.Recipient.Name,\n                    dmResponse.Text);\n            }\n        }\n\n        static async Task DestroyDirectMessageAsync(TwitterContext twitterCtx)\n        {\n            var message = \n                await twitterCtx.DestroyDirectMessageAsync(\n                    243563161037455360ul, true);\n\n            if (message != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}\",\n                    message.RecipientScreenName,\n                    message.Text);\n        }\n\n        static async Task NewDirectMessageAsync(TwitterContext twitterCtx)\n        {\n            var message = await twitterCtx.NewDirectMessageAsync(\n                \"Linq2Twitr\", \"Direct Message Test - \" + DateTime.Now + \"!'\");\n\n            if (message != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    message.RecipientScreenName,\n                    message.Text,\n                    message.CreatedAt);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/FavoriteDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class FavoriteDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing favorites...\\n\");\n                        await ShowFavoritesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tFavoriting...\\n\");\n                        await CreateFavoriteAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tUnfavoriting...\\n\");\n                        await DestroyFavoriteAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nFavorite Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Favorites\");\n            Console.WriteLine(\"\\t 1. Favorite a tweet\");\n            Console.WriteLine(\"\\t 2. Unfavorite a tweet\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowFavoritesAsync(TwitterContext twitterCtx)\n        {\n            const int PerQueryFavCount = 200;\n\n            // set from a value that you previously saved\n            ulong sinceID = 1; \n\n            var favsResponse =\n                await\n                    (from fav in twitterCtx.Favorites\n                     where fav.Type == FavoritesType.Favorites &&\n                           fav.Count == PerQueryFavCount\n                     select fav)\n                    .ToListAsync();\n\n            if (favsResponse == null)\n            {\n                Console.WriteLine(\"No favorites returned from Twitter.\");\n                return;\n            }\n\n            var favList = new List<Favorites>(favsResponse);\n\n            // first tweet processed on current query\n            ulong maxID = favList.Min(fav => fav.StatusID) - 1;\n\n            do\n            {\n                favsResponse =\n                    await\n                        (from fav in twitterCtx.Favorites\n                         where fav.Type == FavoritesType.Favorites &&\n                               fav.Count == PerQueryFavCount &&\n                               fav.SinceID == sinceID &&\n                               fav.MaxID == maxID\n                         select fav)\n                        .ToListAsync();\n\n                if (favsResponse == null || favsResponse.Count == 0) break;\n\n                // reset first tweet to avoid re-querying the\n                // same list you just received\n                maxID = favsResponse.Min(fav => fav.StatusID) - 1;\n                favList.AddRange(favsResponse);\n\n            } while (favsResponse.Count > 0);\n\n            favList.ForEach(fav => \n            {\n                if (fav != null && fav.User != null)\n                    Console.WriteLine(\n                        \"Name: {0}, Tweet: {1}\",\n                        fav.User.ScreenNameResponse, fav.Text);\n            });\n\n            // save this in your db for this user so you can set\n            // sinceID accurately the next time you do a query\n            // and avoid querying the same tweets again.\n            ulong newSinceID = favList.Max(fav => fav.SinceID);\n        }\n\n        static async Task DestroyFavoriteAsync(TwitterContext twitterCtx)\n        {\n            var status = \n                await twitterCtx.DestroyFavoriteAsync(\n                    401033367283453953ul, true);\n\n            if (status != null)\n                Console.WriteLine(\n                    \"User: {0}, Tweet: {1}\", status.User.Name, status.Text);\n        }\n\n        static async Task CreateFavoriteAsync(TwitterContext twitterCtx)\n        {\n            var status = await twitterCtx.CreateFavoriteAsync(401033367283453953ul);\n\n            if (status != null)\n                Console.WriteLine(\n                    \"User: {0}, Tweet: {1}\", status.User.Name, status.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/FriendshipDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class FriendshipDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing friends...\\n\");\n                        await ShowFriendsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking up user ids...\\n\");\n                        await LookupUserIDsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting incoming...\\n\");\n                        await IncomingFriendshipsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting Outgoing...\\n\");\n                        await OutgoingFriendshipsAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tShowing no retweet IDs...\\n\");\n                        await NoRetweetIDsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting friends list...\\n\");\n                        await FriendsListAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting followers list...\\n\");\n                        await FollowersListAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tShowing followers ids...\\n\");\n                        await ShowFollowerIDsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tShowing friend ids...\\n\");\n                        await ShowFriendIDsAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tCreating friendship...\\n\");\n                        await CreateFriendshipAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tUnfollowing...\\n\");\n                        await DestroyFriendshipAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tUpdating friend settings...\\n\");\n                        await UpdateFreindshipSettingsAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nFriendship Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Friends\");\n            Console.WriteLine(\"\\t 1. Lookup Friendships\");\n            Console.WriteLine(\"\\t 2. Incoming Friendships\");\n            Console.WriteLine(\"\\t 3. Outgoing Friendships\");\n            Console.WriteLine(\"\\t 4. No Retweet IDs\");\n            Console.WriteLine(\"\\t 5. Friends List\");\n            Console.WriteLine(\"\\t 6. Followers List\");\n            Console.WriteLine(\"\\t 7. Follower IDs\");\n            Console.WriteLine(\"\\t 8. Friend IDs\");\n            Console.WriteLine(\"\\t 9. Create Friendship\");\n            Console.WriteLine(\"\\t A. Delete Friendship\");\n            Console.WriteLine(\"\\t B. Update Friendship Settings\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowFriendsAsync(TwitterContext twitterCtx)\n        {\n            var friendship =\n                await\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.Show &&\n                       friend.SourceScreenName == \"Linq2Twitr\" &&\n                       friend.TargetScreenName == \"JoeMayo\"\n                 select friend)\n                .SingleOrDefaultAsync();\n\n            if (friendship != null && \n                friendship.SourceRelationship != null && \n                friendship.TargetRelationship != null)\n            {\n                Console.WriteLine(\n                        \"\\nJoeMayo follows LinqToTweeter: \" +\n                        friendship.SourceRelationship.FollowedBy +\n                        \"\\nLinqToTweeter follows JoeMayo: \" +\n                        friendship.TargetRelationship.FollowedBy); \n            }\n        }\n\n        static async Task LookupUserIDsAsync(TwitterContext twitterCtx)\n        {\n            var relationships =\n                await\n                (from look in twitterCtx.Friendship\n                 where look.Type == FriendshipType.Lookup &&\n                       look.UserID == \"15411837,16761255\"\n                 select look.Relationships)\n                .SingleOrDefaultAsync();\n\n            if (relationships != null)\n                relationships.ForEach(rel => \n                    Console.WriteLine(\n                        \"Relationship to \" + rel.ScreenName + \n                        \", is Following: \" + rel.Following + \n                        \", Followed By: \" + rel.FollowedBy));\n        }\n\n        static async Task IncomingFriendshipsAsync(TwitterContext twitterCtx)\n        {\n            var request =\n                await\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Incoming\n                 select req)\n                .SingleOrDefaultAsync();\n\n            if (request != null && \n                request.IDInfo != null && \n                request.IDInfo.IDs != null)\n            {\n                request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n            }\n        }\n\n        static async Task OutgoingFriendshipsAsync(TwitterContext twitterCtx)\n        {\n            var request =\n                await\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Outgoing\n                 select req)\n                .SingleOrDefaultAsync();\n\n            if (request != null &&\n                request.IDInfo != null &&\n                request.IDInfo.IDs != null)\n            {\n                request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n            }\n        }\n\n        static async Task NoRetweetIDsAsync(TwitterContext twitterCtx)\n        {\n            var friendship =\n                await\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.NoRetweetIDs\n                 select friend)\n                .SingleOrDefaultAsync();\n\n            if (friendship != null && \n                friendship.IDInfo != null && \n                friendship.IDInfo.IDs != null)\n            {\n                var ids =\n                    (from id in friendship.IDInfo.IDs\n                     select id.ToString())\n                    .ToArray();\n\n                Console.WriteLine(\"\\nIDs: \" + string.Join(\",\", ids)); \n            }\n        }\n\n        static async Task FriendsListAsync(TwitterContext twitterCtx)\n        {\n            Friendship friendship;\n            long cursor = -1;\n            do\n            {\n                friendship =\n                    await\n                    (from friend in twitterCtx.Friendship\n                     where friend.Type == FriendshipType.FriendsList &&\n                           friend.ScreenName == \"JoeMayo\" &&\n                           friend.Cursor == cursor\n                     select friend)\n                    .SingleOrDefaultAsync();\n\n                if (friendship != null && \n                    friendship.Users != null && \n                    friendship.CursorMovement != null)\n                {\n                    cursor = friendship.CursorMovement.Next;\n\n                    friendship.Users.ForEach(friend =>\n                        Console.WriteLine(\n                            \"ID: {0} Name: {1}\",\n                            friend.UserIDResponse, friend.ScreenNameResponse)); \n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task FollowersListAsync(TwitterContext twitterCtx)\n        {\n            Friendship friendship;\n            long cursor = -1;\n            do\n            {\n                try\n                {\n                    friendship =\n                        await\n                        (from friend in twitterCtx.Friendship\n                         where friend.Type == FriendshipType.FollowersList &&\n                               friend.ScreenName == \"JoeMayo\" &&\n                               friend.Cursor == cursor\n                         select friend)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (friendship != null && friendship.Users != null)\n                {\n                    cursor = friendship.CursorMovement.Next;\n\n                    friendship.Users.ForEach(friend =>\n                        Console.WriteLine(\n                            \"ID: {0} Name: {1}\",\n                            friend.UserIDResponse, friend.ScreenNameResponse));\n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task ShowFollowerIDsAsync(TwitterContext twitterCtx)\n        {\n            Friendship followers;\n            long cursor = -1;\n            do\n            {\n                try\n                {\n                    followers =\n                        await\n                        (from follower in twitterCtx.Friendship\n                         where follower.Type == FriendshipType.FollowerIDs &&\n                               follower.UserID == \"15411837\" &&\n                               follower.Cursor == cursor &&\n                               follower.Count == 500\n                         select follower)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (followers != null && \n                    followers.IDInfo != null && \n                    followers.IDInfo.IDs != null)\n                {\n                    cursor = followers.CursorMovement.Next;\n\n                    followers.IDInfo.IDs.ForEach(id =>\n                        Console.WriteLine(\"Follower ID: \" + id)); \n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task ShowFriendIDsAsync(TwitterContext twitterCtx)\n        {\n            Friendship friendList;\n            long cursor = -1;\n            do\n            {\n                try\n                {\n                    friendList =\n                        await\n                        (from friend in twitterCtx.Friendship\n                         where friend.Type == FriendshipType.FriendIDs &&\n                               friend.ScreenName == \"JoeMayo\" &&\n                               friend.Cursor == cursor\n                         select friend)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (friendList != null &&\n                    friendList.IDInfo != null &&\n                    friendList.IDInfo.IDs != null)\n                {\n                    cursor = friendList.CursorMovement.Next;\n\n                    friendList.IDInfo.IDs.ForEach(id =>\n                        Console.WriteLine(\"Follower ID: \" + id));\n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task CreateFriendshipAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.CreateFriendshipAsync(\"JoeMayo\", true);\n\n            if (user != null && user.Status != null)\n                Console.WriteLine(\n                    \"User Name: {0}, Status: {1}\",\n                    user.Name,\n                    user.Status.Text);\n        }\n\n        static async Task DestroyFriendshipAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.DestroyFriendshipAsync(\"Linq2Twitr\");\n\n            if (user != null && user.Status != null)\n                Console.WriteLine(\n                    \"User Name: {0}, Status: {1}\",\n                    user.Name,\n                    user.Status.Text);\n        }\n\n        static async Task UpdateFreindshipSettingsAsync(TwitterContext twitterCtx)\n        {\n            Friendship friend = \n                await twitterCtx.UpdateFriendshipSettingsAsync(\n                    \"Linq2Twitr\", true, true);\n\n            if (friend != null && friend.SourceRelationship != null)\n                Console.WriteLine(\n                    \"Settings for {0} are: Can Retweet is {1} \" +\n                    \"and Can Send Device Notifications is {2}\",\n                    friend.SourceRelationship.ScreenName,\n                    friend.SourceRelationship.RetweetsWanted,\n                    friend.SourceRelationship.NotificationsEnabled);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/GeoDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class GeoDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching by IP...\\n\");\n                        await SearchByIPAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking for geo...\\n\");\n                        await LookupGeoIDAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tFinding reverse geocode...\\n\");\n                        await LookupReverseGeocodeAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tFinding similar places...\\n\");\n                        await FindSimilarPlacesAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nGeo Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search by IP\");\n            Console.WriteLine(\"\\t 1. Lookup Geo by ID\");\n            Console.WriteLine(\"\\t 2. Lookup Reverse Geocode\");\n            Console.WriteLine(\"\\t 3. Find Similar Places\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task SearchByIPAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                    (from geo in twitterCtx.Geo\n                     where geo.Type == GeoType.Search &&\n                           geo.IP == \"74.125.19.104\"\n                     select geo)\n                    .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n            {\n                Place place = geoResponse.Places.First();\n\n                Console.WriteLine(\n                    \"Name: {0}, Country: {1}, Type: {2}\",\n                    place.Name, place.Country, place.PlaceType); \n            }\n        }\n\n        static async Task LookupGeoIDAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.ID &&\n                       g.ID == \"5a110d312052166f\"\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n            {\n                Place place = geoResponse.Places.First();\n\n                Console.WriteLine(\n                    \"Name: {0}, Country: {1}, Type: {2}\",\n                    place.Name, place.Country, place.PlaceType);\n            }\n        }\n\n        static async Task LookupReverseGeocodeAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.Reverse &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n                geoResponse.Places.ForEach(place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n\n        static async Task FindSimilarPlacesAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.SimilarPlaces &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060 &&\n                       g.PlaceName == \"Twitter HQ\"\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n                geoResponse.Places.ForEach(place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/HelpDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class HelpDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting Rate Limits...\\n\");\n                        await GettingRateLimitsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting configuration...\\n\");\n                        await GetHelpConfigurationAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting languages...\\n\");\n                        await GetHelpLanguagesAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting privacy...\\n\");\n                        await GetPrivacyAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tGetting tos...\\n\");\n                        await GetTosAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nHelp Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Rate Limits\");\n            Console.WriteLine(\"\\t 1. Get Configuration\");\n            Console.WriteLine(\"\\t 2. Get Languages\");\n            Console.WriteLine(\"\\t 3. Get Privacy Policy\");\n            Console.WriteLine(\"\\t 4. Get Terms of Service\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GettingRateLimitsAsync(TwitterContext twitterCtx)\n        {\n            var helpResponse =\n                await\n                    (from help in twitterCtx.Help\n                     where help.Type == HelpType.RateLimits\n                     select help)\n                    .SingleOrDefaultAsync();\n\n            if (helpResponse != null && helpResponse.RateLimits != null)\n                foreach (var category in helpResponse.RateLimits)\n                {\n                    Console.WriteLine(\"\\nCategory: {0}\", category.Key);\n\n                    foreach (var limit in category.Value)\n                    {\n                        Console.WriteLine(\n                            \"\\n  Resource: {0}\\n    Remaining: {1}\\n    Reset: {2}\\n    Limit: {3}\",\n                            limit.Resource, limit.Remaining, limit.Reset, limit.Limit);\n                    }\n                }\n        }\n\n        static async Task GetHelpConfigurationAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Configuration\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null && \n                helpResult.Configuration != null && \n                helpResult.Configuration.NonUserNamePaths != null && \n                helpResult.Configuration.PhotoSizes != null)\n            {\n                Configuration cfg = helpResult.Configuration;\n\n                Console.WriteLine(\"Short URL Length: \" + cfg.ShortUrlLength);\n                Console.WriteLine(\"Short URL HTTPS Length: \" + cfg.ShortUrlLengthHttps);\n                Console.WriteLine(\"Non-UserName Paths: \");\n                foreach (var name in cfg.NonUserNamePaths)\n                {\n                    Console.WriteLine(\"\\t\" + name);\n                }\n                Console.WriteLine(\"Photo Size Limit: \" + cfg.PhotoSizeLimit);\n                Console.WriteLine(\"Max Media Per Upload: \" + cfg.MaxMediaPerUpload);\n                Console.WriteLine(\n                    \"Characters Reserved Per Media: \" + cfg.CharactersReservedPerMedia);\n                Console.WriteLine(\"Photo Sizes\");\n                foreach (var photo in cfg.PhotoSizes)\n                {\n                    Console.WriteLine(\"\\t\" + photo.Type);\n                    Console.WriteLine(\"\\t\\t\" + photo.Width);\n                    Console.WriteLine(\"\\t\\t\" + photo.Height);\n                    Console.WriteLine(\"\\t\\t\" + photo.Resize);\n                } \n            }\n        }\n\n        static async Task GetHelpLanguagesAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Languages\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null && helpResult.Languages != null)\n                helpResult.Languages.ForEach(lang => \n                    Console.WriteLine(\"{0}({1}): {2}\", lang.Name, lang.Code, lang.Status));\n        }\n\n        static async Task GetPrivacyAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Privacy\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null)\n                Console.WriteLine(helpResult.Policies);\n        }\n\n        static async Task GetTosAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Tos\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null)\n                Console.WriteLine(helpResult.Policies);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/Linq2TwitterDemos_Console.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{734E827E-3635-4840-A060-7F30966ABFDD}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_Console</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_Console</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>15d20e64</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\..\\packages\\Rx-Core.2.2.5\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\..\\packages\\Rx-Interfaces.2.2.5\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\..\\packages\\Rx-Linq.2.2.5\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\..\\packages\\Rx-PlatformServices.2.2.5\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"VineDemos.cs\" />\n    <Compile Include=\"MutesDemos.cs\" />\n    <Compile Include=\"UserDemos.cs\" />\n    <Compile Include=\"TrendDemos.cs\" />\n    <Compile Include=\"SavedSearchDemos.cs\" />\n    <Compile Include=\"RawDemos.cs\" />\n    <Compile Include=\"ListDemos.cs\" />\n    <Compile Include=\"HelpDemos.cs\" />\n    <Compile Include=\"GeoDemos.cs\" />\n    <Compile Include=\"FriendshipDemos.cs\" />\n    <Compile Include=\"FavoriteDemos.cs\" />\n    <Compile Include=\"DirectMessageDemos.cs\" />\n    <Compile Include=\"BlockDemos.cs\" />\n    <Compile Include=\"AccountDemos.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SearchDemos.cs\" />\n    <Compile Include=\"StatusDemos.cs\" />\n    <Compile Include=\"StreamDemos.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Images\\13903749474_86bd1290de_o.jpg\" />\n    <Content Include=\"Images\\200xColor_2.png\" />\n    <Content Include=\"Images\\WP_000003.jpg\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/ListDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class ListDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting Lists...\\n\");\n                        await GetListsForUserAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting statuses...\\n\");\n                        await GetListStatusesAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting members...\\n\");\n                        await GetListMembershipsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting subscribers...\\n\");\n                        await GetListSubscribersAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tChecking user subscription...\\n\");\n                        await ShowIsListSubscriberAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tChecing user membership...\\n\");\n                        await ShowIsListMemberAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting members...\\n\");\n                        await GetListMembersAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tShowing details...\\n\");\n                        await ShowListDetailsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tGetting subscriptions...\\n\");\n                        await GetListSubscriptionsAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tGetting ownership...\\n\");\n                        await GetOwnershipsAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tDeleting membership...\\n\");\n                        await DeleteMemberFromListAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tSubscribing...\\n\");\n                        await SubscribeToListAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tUnsubscribing...\\n\");\n                        await UnsubscribeFromListAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tAdding members...\\n\");\n                        await AddMemberRangeToListAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tAdding member...\\n\");\n                        await AddMemberToListAsync(twitterCtx);\n                        break;\n                    case 'f':\n                    case 'F':\n                        Console.WriteLine(\"\\n\\tDeleting list...\\n\");\n                        await DeleteListAsync(twitterCtx);\n                        break;\n                    case 'g':\n                    case 'G':\n                        Console.WriteLine(\"\\n\\tUpdating list...\\n\");\n                        await UpdateListAsync(twitterCtx);\n                        break;\n                    case 'h':\n                    case 'H':\n                        Console.WriteLine(\"\\n\\tCreating list...\\n\");\n                        await CreateListAsync(twitterCtx);\n                        break;\n                    case 'i':\n                    case 'I':\n                        Console.WriteLine(\"\\n\\tRemoving memberships...\\n\");\n                        await DeleteMemberRangeFromListAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nList Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Lists for User\");\n            Console.WriteLine(\"\\t 1. Get List Statuses\");\n            Console.WriteLine(\"\\t 2. Get List Memberships\");\n            Console.WriteLine(\"\\t 3. Get List Subscribers\");\n            Console.WriteLine(\"\\t 4. Check User Subscription\");\n            Console.WriteLine(\"\\t 5. Check User Membership\");\n            Console.WriteLine(\"\\t 6. Get List Members\");\n            Console.WriteLine(\"\\t 7. Show List Details.\");\n            Console.WriteLine(\"\\t 8. Get List Subscriptions\");\n            Console.WriteLine(\"\\t 9. Get List Ownership\");\n            Console.WriteLine(\"\\t A. Delete List Membership\");\n            Console.WriteLine(\"\\t B. Subscribe to List\");\n            Console.WriteLine(\"\\t C. Unsubscribe from List\");\n            Console.WriteLine(\"\\t D. Add Members to List\");\n            Console.WriteLine(\"\\t E. Add Member to List\");\n            Console.WriteLine(\"\\t F. Delete List\");\n            Console.WriteLine(\"\\t G. Update List\");\n            Console.WriteLine(\"\\t H. Create List\");\n            Console.WriteLine(\"\\t I. Remove Members from List\");\n\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetListsForUserAsync(TwitterContext twitterCtx)\n        {\n            string screenName = \"Linq2Twitr\";\n\n            var lists =\n                await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.List &&\n                           list.ScreenName == screenName\n                     select list)\n                    .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list => Console.WriteLine(\"Slug: \" + list.SlugResponse));\n        }\n\n        static async Task GetListStatusesAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            string slug = \"linq\";\n            int maxStatuses = 30;\n            int lastStatusCount = 0;\n            // last tweet processed on previous query\n            ulong sinceID = 204251866668871681; \n            ulong maxID;\n            int count = 10;\n            var statusList = new List<Status>();\n\n            // only count\n            var listResponse =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Statuses &&\n                       list.OwnerScreenName == ownerScreenName &&\n                       list.Slug == slug &&\n                       list.Count == count\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (listResponse != null && listResponse.Statuses != null)\n            {\n                List<Status> newStatuses = listResponse.Statuses;\n                // first tweet processed on current query\n                maxID = newStatuses.Min(status => status.StatusID) - 1; \n                statusList.AddRange(newStatuses);\n\n                do\n                {\n                    // now add sinceID and maxID\n                    listResponse =\n                        await\n                        (from list in twitterCtx.List\n                         where list.Type == ListType.Statuses &&\n                               list.OwnerScreenName == ownerScreenName &&\n                               list.Slug == slug &&\n                               list.Count == count &&\n                               list.SinceID == sinceID &&\n                               list.MaxID == maxID\n                         select list)\n                        .SingleOrDefaultAsync();\n\n                    if (listResponse == null)\n                        break;\n\n                    newStatuses = listResponse.Statuses;\n                    // first tweet processed on current query\n                    maxID = newStatuses.Min(status => status.StatusID) - 1; \n                    statusList.AddRange(newStatuses);\n\n                    lastStatusCount = newStatuses.Count;\n                }\n                while (lastStatusCount != 0 && statusList.Count < maxStatuses);\n\n                for (int i = 0; i < statusList.Count; i++)\n                {\n                    Status status = statusList[i];\n\n                    Console.WriteLine(\"{0, 4}. [{1}] User: {2}\\nStatus: {3}\",\n                        i + 1, status.StatusID, status.User.Name, status.Text);\n                }\n            }\n        }\n\n        static async Task GetListMembershipsAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Memberships &&\n                       list.ScreenName == \"JoeMayo\" // user to get memberships for\n                 select list)\n                .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"List Name: {0}, Description: {1}\",\n                        list.Name, list.Description));\n        }\n\n        static async Task GetListSubscribersAsync(TwitterContext twitterCtx)\n        {\n            var subscriberList =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Subscribers &&\n                       list.Slug == \"linq\" &&\n                       list.OwnerScreenName == \"Linq2Twitr\"\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (subscriberList != null && subscriberList.Users != null)\n                subscriberList.Users.ForEach(user =>\n                    Console.WriteLine(\"Subscriber: \" + user.Name));\n        }\n\n        static async Task ShowIsListSubscriberAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var subscribedList =\n                    await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.IsSubscriber &&\n                           list.ScreenName == \"JoeMayo\" &&\n                           list.Slug == \"linq\" &&\n                           list.OwnerScreenName == \"Linq2Twitr\"\n                     select list)\n                    .SingleOrDefaultAsync();\n\n                if (subscribedList != null && subscribedList.Users != null)\n                {\n                    // list will have only one user matching ID in query\n                    var user = subscribedList.Users.First();\n\n                    Console.WriteLine(\"User: {0} is subscribed to List: {1}\",\n                        user.Name, subscribedList.ListID); \n                }\n            }\n            // whenever user is not subscribed to the specified list, Twitter\n            // returns an HTTP 404, Not Found, response.  LINQ to Twitter \n            // intercepts the HTTP response and wraps it in a TwitterQueryException \n            // where you can read the error message from Twitter via the Message property.\n            catch (TwitterQueryException ex)\n            {\n                if (ex.StatusCode == HttpStatusCode.NotFound)\n                {\n                    Console.WriteLine(\n                        \"HTTP Status Code: {0}. Twitter Error Code: {1}, Twitter Message: {2}\",\n                        ex.StatusCode.ToString(),\n                        ex.ErrorCode,\n                        ex.Message);\n                }\n                else\n                {\n                    throw ex;\n                }\n            }\n        }\n\n        static async Task ShowIsListMemberAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var subscribedList =\n                    await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.IsMember &&\n                           list.ScreenName == \"JoeMayo\" &&\n                           list.OwnerScreenName == \"Linq2Twitr\" &&\n                           list.Slug == \"linq\"\n                     select list)\n                    .SingleOrDefaultAsync();\n\n                if (subscribedList != null && subscribedList.Users != null)\n                {\n                    // list will have only one user matching ID in query\n                    var user = subscribedList.Users.First();\n\n                    Console.WriteLine(\"User: {0} is a member of List: {1}\",\n                        user.Name, subscribedList.ListID); \n                }\n            }\n            // whenever user is not a member of the specified list, Twitter\n            // returns an HTTP 404, Not Found, response.  LINQ to Twitter \n            // intercepts the HTTP response and wraps it in a TwitterQueryException \n            // where you can read the error message from Twitter via the Message property.\n            catch (TwitterQueryException ex)\n            {\n                if (ex.StatusCode == HttpStatusCode.NotFound)\n                {\n                    Console.WriteLine(\n                        \"HTTP Status Code: {0}. Twitter Error Code: {1}, Twitter Message: {2}\",\n                        ex.StatusCode.ToString(),\n                        ex.ErrorCode,\n                        ex.Message);\n                }\n                else\n                {\n                    throw ex;\n                }\n            }\n        }\n\n        static async Task GetListMembersAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Members &&\n                       list.OwnerScreenName == \"Linq2Twitr\" &&\n                       list.Slug == \"linq\" &&\n                       list.SkipStatus == true\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (lists != null && lists.Users != null)\n                lists.Users.ForEach(user =>\n                    Console.WriteLine(\"Member: \" + user.Name));\n        }\n\n        static async Task ShowListDetailsAsync(TwitterContext twitterCtx)\n        {\n            var requestedList =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Show &&\n                       list.OwnerScreenName == \"Linq2Twitr\" &&\n                       list.Slug == \"linq\"\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (requestedList != null)\n                Console.WriteLine(\n                    \"List Name: {0}, Description: {1}, # Users: {2}\",\n                    requestedList.Name, \n                    requestedList.Description, \n                    requestedList.Users.Count());\n        }\n\n        static async Task GetListSubscriptionsAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Subscriptions &&\n                       list.ScreenName == \"Linq2Twitr\"\n                 select list)\n                .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"List Name: {0}, Description: {1}\",\n                        list.Name, list.Description));\n        }\n\n        static async Task GetOwnershipsAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Ownerships &&\n                       list.ScreenName == \"Linq2Twitr\"\n                 select list)\n                .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"ID: {0}  Slug: {1} Description: {2}\",\n                        list.ListIDResponse, \n                        list.SlugResponse, \n                        list.Description));\n        }\n\n        static async Task DeleteMemberFromListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.DeleteMemberFromListAsync(\n                    0, \"Linq2Twitr\", 0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task SubscribeToListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.SubscribeToListAsync(\n                    0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task UnsubscribeFromListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.UnsubscribeFromListAsync(\n                    0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task AddMemberRangeToListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            var screenNames = new List<string>\n            {\n                \"JoeMayo\",\n                \"Linq2Twitr\"\n            };\n\n            List list = \n                await twitterCtx.AddMemberRangeToListAsync(\n                    0, \"testDemo\", 0, ownerScreenName, screenNames);\n\n            if (list != null && list.Users != null)\n                list.Users.ForEach(user => Console.WriteLine(user.Name));\n        }\n\n        static async Task AddMemberToListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.AddMemberToListAsync(\n                    \"Linq2Twitr\", 0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task DeleteListAsync(TwitterContext twitterCtx)\n        {\n            ulong listID = 0;\n\n            List list = \n                await twitterCtx.DeleteListAsync(\n                    listID, \"testDemo\", 0, \"Linq2Twitr\");\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task UpdateListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            ulong listID = 0;\n\n            List list = \n                await twitterCtx.UpdateListAsync(\n                    listID, \"testDemo\", \"Test List\", 0, \n                    ownerScreenName, \"public\", \"This is a test2\");\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task CreateListAsync(TwitterContext twitterCtx)\n        {\n            List list = \n                await twitterCtx.CreateListAsync(\n                    \"testDemo\", \"public\", \"This is a test\");\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task DeleteMemberRangeFromListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            var screenNames = new List<string> { \"JoeMayo\", \"mp2kmag\" };\n\n            List list = \n                await twitterCtx.DeleteMemberRangeFromListAsync(\n                    0, \"testDemo\", screenNames, 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/MutesDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class MuteDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking for IDs...\\n\");\n                        await LookupIDsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking for Users...\\n\");\n                        await LookupUsersAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tMuting...\\n\");\n                        await MuteUserAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await UnmuteUserAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n \n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup Muted User IDs\");\n            Console.WriteLine(\"\\t 1. Lookup Muted Users\");\n            Console.WriteLine(\"\\t 2. Mute User\");\n            Console.WriteLine(\"\\t 3. Unmute User\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupIDsAsync(TwitterContext twitterCtx)\n        {\n            var muteResponse =\n                await\n                (from mute in twitterCtx.Mute\n                 where mute.Type == MuteType.IDs\n                 select mute)\n                .SingleOrDefaultAsync();\n\n            muteResponse.IDList.ForEach(id => Console.WriteLine(id));\n        }\n\n        static async Task LookupUsersAsync(TwitterContext twitterCtx)\n        {\n            var muteResponse =\n                await\n                (from mute in twitterCtx.Mute\n                 where mute.Type == MuteType.List\n                 select mute)\n                .SingleOrDefaultAsync();\n\n            muteResponse.Users.ForEach(user => Console.WriteLine(user.ScreenNameResponse));\n        }\n\n        static async Task MuteUserAsync(TwitterContext twitterCtx)\n        {\n            const string ScreenName = \"justinbieber\";\n\n            User mutedUser = await twitterCtx.MuteAsync(ScreenName);\n\n            Console.WriteLine(\"You muted {0}\", mutedUser.ScreenNameResponse);\n        }\n\n        static async Task UnmuteUserAsync(TwitterContext twitterCtx)\n        {\n            const string ScreenName = \"JoeMayo\";\n\n            User unmutedUser = await twitterCtx.UnMuteAsync(ScreenName);\n\n            Console.WriteLine(\"You un-muted {0}\", unmutedUser.ScreenNameResponse);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/Program.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class Program\n    {\n        static void Main()\n        {\n            try\n            {\n                Task demoTask = DoDemosAsync();\n                demoTask.Wait();\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(ex.ToString());\n            }\n\n            Console.Write(\"\\nPress any key to close console window...\");\n            Console.ReadKey(true);\n        }\n  \n        static async Task DoDemosAsync()\n        {\n            var auth = ChooseAuthenticationStrategy();\n\n            await auth.AuthorizeAsync();\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n            //\n            //var credentials = auth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            var twitterCtx = new TwitterContext(auth);\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tRunning Account Demos...\\n\");\n                        await AccountDemos.RunAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tRunning Block Demos...\\n\");\n                        await BlockDemos.RunAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tRunning Direct Message Demos...\\n\");\n                        await DirectMessageDemos.RunAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tRunning Favorite Demos...\\n\");\n                        await FavoriteDemos.RunAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tRunning Friendship Demos...\\n\");\n                        await FriendshipDemos.RunAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tRunning Geo Demos...\\n\");\n                        await GeoDemos.RunAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tRunning Help Demos...\\n\");\n                        await HelpDemos.RunAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tRunning List Demos...\\n\");\n                        await ListDemos.RunAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tRunning Raw Demos...\\n\");\n                        await RawDemos.RunAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tRunning Saved Search Demos...\\n\");\n                        await SavedSearchDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tRunning Search Demos...\\n\");\n                        await SearchDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tRunning Status Demos...\\n\");\n                        await StatusDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tRunning Stream Demos...\\n\");\n                        await StreamDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tRunning Trend Demos...\\n\");\n                        await TrendDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tRunning User Demos...\\n\");\n                        await UserDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'f':\n                    case 'F':\n                        Console.WriteLine(\"\\n\\tRunning Mutes Demos...\\n\");\n                        await MuteDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'g':\n                    case 'G':\n                        Console.WriteLine(\"\\n\\tRunning Vine Demos...\\n\");\n                        await VineDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nQuitting...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nPlease select category:\\n\");\n\n            Console.WriteLine(\"\\t 0. Account Demos\");\n            Console.WriteLine(\"\\t 1. Block Demos\");\n            Console.WriteLine(\"\\t 2. Direct Message Demos\");\n            Console.WriteLine(\"\\t 3. Favorite Demos\");\n            Console.WriteLine(\"\\t 4. Friendship Demos\");\n            Console.WriteLine(\"\\t 5. Geo Demos\");\n            Console.WriteLine(\"\\t 6. Help Demos\");\n            Console.WriteLine(\"\\t 7. List Demos\");\n            Console.WriteLine(\"\\t 8. Raw Demos\");\n            Console.WriteLine(\"\\t 9. Saved Search Demos\");\n            Console.WriteLine(\"\\t A. Search Demos\");\n            Console.WriteLine(\"\\t B. Status Demos\");\n            Console.WriteLine(\"\\t C. Stream Demos\");\n            Console.WriteLine(\"\\t D. Trend Demos\");\n            Console.WriteLine(\"\\t E. User Demos\");\n            Console.WriteLine(\"\\t F. Mutes Demos\");\n            Console.WriteLine(\"\\t G. Vine Demos\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. End Program\");\n        }\n\n\n        static IAuthorizer ChooseAuthenticationStrategy()\n        {\n            Console.WriteLine(\"Authentication Strategy:\\n\\n\");\n\n            Console.WriteLine(\"  1 - Pin (default)\");\n            Console.WriteLine(\"  2 - Application-Only\");\n            Console.WriteLine(\"  3 - Single User\");\n            Console.WriteLine(\"  4 - XAuth\");\n\n            Console.Write(\"\\nPlease choose (1, 2, 3, or 4): \");\n            ConsoleKeyInfo input = Console.ReadKey();\n            Console.WriteLine(\"\");\n\n            IAuthorizer auth = null;\n\n            switch (input.Key)\n            {\n\n                case ConsoleKey.D1:\n                    auth = DoPinOAuth();\n                    break;\n                case ConsoleKey.D2:\n                    auth = DoApplicationOnlyAuth();\n                    break;\n                case ConsoleKey.D3:\n                    auth = DoSingleUserAuth();\n                    break;\n                case ConsoleKey.D4:\n                    auth = DoXAuth();\n                    break;\n                default:\n                    auth = DoPinOAuth();\n                    break;\n            }\n\n            return auth;\n        }\n\n        static IAuthorizer DoPinOAuth()\n        {\n            var auth = new PinAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                },\n                GoToTwitterAuthorization = pageLink => Process.Start(pageLink),\n                GetPin = () =>\n                {\n                    Console.WriteLine(\n                        \"\\nAfter authorizing this application, Twitter \" +\n                        \"will give you a 7-digit PIN Number.\\n\");\n                    Console.Write(\"Enter the PIN number here: \");\n                    return Console.ReadLine();\n                }\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoApplicationOnlyAuth()\n        {\n            var auth = new ApplicationOnlyAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                },\n            };\n\n            return auth;\n        }\n        static IAuthorizer DoSingleUserAuth()\n        {\n            var auth = new SingleUserAuthorizer\n            {\n                CredentialStore = new SingleUserInMemoryCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"],\n                    AccessToken = ConfigurationManager.AppSettings[\"accessToken\"],\n                    AccessTokenSecret = ConfigurationManager.AppSettings[\"accessTokenSecret\"]\n                }\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoXAuth()\n        {\n            var auth = new XAuthAuthorizer\n            {\n                CredentialStore = new XAuthCredentials\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"],\n                    UserName = \"YourUserName\",\n                    Password = \"YourPassword\"\n                }\n            };\n\n            return auth;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_Console\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_Console\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"02331449-b8dd-4a01-ba94-1b5b0206e4b0\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/RawDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class RawDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await PerformSearchRawAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tTweeting...\");\n                        await TweetRawAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nRaw Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Perform Search (Query)\");\n            Console.WriteLine(\"\\t 1. Update Status (Command)\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task PerformSearchRawAsync(TwitterContext twitterCtx)\n        {\n            string unencodedStatus = \"LINQ to Twitter\";\n            string encodedStatus = Uri.EscapeDataString(unencodedStatus);\n            string queryString = \"search/tweets.json?q=\" + encodedStatus;\n\n            var rawResult =\n                await\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == queryString\n                 select raw)\n                .SingleOrDefaultAsync();\n\n            if (rawResult != null)\n                Console.WriteLine(\n                    \"Response from Twitter: \\n\\n\" + rawResult.Response);\n        }\n\n        static async Task TweetRawAsync(TwitterContext twitterCtx)\n        {\n            string status = \n                \"Testing LINQ to Twitter Raw Interface - \" + \n                DateTime.Now.ToString() + \" #Linq2Twitter\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", status }\n            };\n\n            string queryString = \"/statuses/update.json\";\n\n            string result = \n                await twitterCtx.ExecuteRawAsync(\n                    queryString, parameters);\n\n            if (result != null)\n                Console.WriteLine(\n                    \"\\nResponse from update status: \\n\\n\\t\" + result);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/SavedSearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class SavedSearchDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing saved searches...\\n\");\n                        await ShowSavedSearchesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing saved search...\\n\");\n                        await ShowSavedSearchAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tCreating...\\n\");\n                        await CreateSavedSearchAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tDeleting...\\n\");\n                        await DestroySavedSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSaved Search Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Saved Searches\");\n            Console.WriteLine(\"\\t 1. Show Saved Search\");\n            Console.WriteLine(\"\\t 2. Create Saved Search\");\n            Console.WriteLine(\"\\t 3. Destroy Saved Search\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowSavedSearchesAsync(TwitterContext twitterCtx)\n        {\n            var savedSearches =\n                await\n                    (from search in twitterCtx.SavedSearch\n                     where search.Type == SavedSearchType.Searches\n                     select search)\n                    .ToListAsync();\n\n            if (savedSearches != null)\n                savedSearches.ForEach(\n                    search => Console.WriteLine(\"Search: \" + search.Query));\n        }\n\n        static async Task ShowSavedSearchAsync(TwitterContext twitterCtx)\n        {\n            ulong savedSearchID = 306668698;\n\n            var savedSearch =\n                await\n                (from search in twitterCtx.SavedSearch\n                 where search.Type == SavedSearchType.Show &&\n                       search.ID == savedSearchID\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.ID, savedSearch.Name);\n        }\n\n        static async Task CreateSavedSearchAsync(TwitterContext twitterCtx)\n        {\n            SavedSearch savedSearch = \n                await twitterCtx.CreateSavedSearchAsync(\"linq\");\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.IDResponse, savedSearch.Query);\n        }\n\n        static async Task DestroySavedSearchAsync(TwitterContext twitterCtx)\n        {\n            ulong savedSearchID = 0;\n\n            SavedSearch savedSearch = \n                await twitterCtx.DestroySavedSearchAsync(savedSearchID);\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.ID, savedSearch.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/SearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class SearchDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSearch Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n  \n        static async Task DoSearchAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter\";\n            //string searchTerm = \"#ömer -RT -instagram news source%3Afoursquare\";\n\n            var searchResponse =\n                await\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == searchTerm\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse != null && searchResponse.Statuses != null)\n                searchResponse.Statuses.ForEach(tweet =>\n                    Console.WriteLine(\n                        \"\\n  User: {0} ({1})\\n  Tweet: {2}\", \n                        tweet.User.ScreenNameResponse,\n                        tweet.User.UserIDResponse,\n                        tweet.Text));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/StatusDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class StatusDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n            \n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing mentions timeline...\");\n                        await ShowMentionsTimelineAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing user timeline...\\n\");\n                        await RunUserTimelineQueryAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tShowing home timeline...\\n\");\n                        await RunHomeTimelineQueryAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing retweets...\\n\");\n                        await RetweetsOfMeStatusQueryAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tShowing retweets...\\n\");\n                        await RetweetsQueryAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tShowing tweet...\\n\");\n                        await SingleStatusQueryAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tDeleting tweet...\\n\");\n                        await DeleteTweetAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tTweeting...\\n\");\n                        await TweetAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tReplying...\\n\");\n                        await ReplyAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tRetweeting...\\n\");\n                        await RetweetAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tTweeting images...\\n\");\n                        await UploadMultipleImagesAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tGetting oembed...\\n\");\n                        await OEmbedStatusAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tGetting retweeters...\\n\");\n                        await RetweetersAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tFollowing conversation...\\n\");\n                        await GetConversationAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tLooking up tweets...\\n\");\n                        await LookupTweetsAsyc(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nStatus Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Mentions Timeline\");\n            Console.WriteLine(\"\\t 1. User Timeline\");\n            Console.WriteLine(\"\\t 2. Home Timeline\");\n            Console.WriteLine(\"\\t 3. Retweets of Me Timeline\");\n            Console.WriteLine(\"\\t 4. Retweets of a Tweet\");\n            Console.WriteLine(\"\\t 5. Show Specific Tweet\");\n            Console.WriteLine(\"\\t 6. Delete a Tweet\");\n            Console.WriteLine(\"\\t 7. Update Status\");\n            Console.WriteLine(\"\\t 8. Reply to a Tweet\");\n            Console.WriteLine(\"\\t 9. Retweet a Tweet\");\n            Console.WriteLine(\"\\t A. Tweet Multiple Images\");\n            Console.WriteLine(\"\\t B. Get Oembed Tweet\");\n            Console.WriteLine(\"\\t C. Get Retweeters\");\n            Console.WriteLine(\"\\t D. Follow Conversation\");\n            Console.WriteLine(\"\\t E. Lookup Tweets\");\n\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static void PrintTweetsResults(List<Status> tweets)\n        {\n            if (tweets != null)\n                tweets.ForEach(tweet => \n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"Name: {0}, Tweet: {1}\",\n                            tweet.User.ScreenNameResponse, tweet.Text);\n                });\n        }\n  \n        static async Task ShowMentionsTimelineAsync(TwitterContext twitterCtx)\n        {\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Mentions &&\n                       tweet.ScreenName == \"JoeMayo\"\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task RunUserTimelineQueryAsync(TwitterContext twitterCtx)\n        {\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.User &&\n                       tweet.ScreenName == \"JoeMayo\"\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task RunHomeTimelineQueryAsync(TwitterContext twitterCtx)\n        {\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task RetweetsOfMeStatusQueryAsync(TwitterContext twitterCtx)\n        {\n            var myRetweets =\n                await\n                (from retweet in twitterCtx.Status\n                 where retweet.Type == StatusType.RetweetsOfMe &&\n                       retweet.Count == 100\n                 select retweet)\n                .ToListAsync();\n\n            PrintTweetsResults(myRetweets);\n        }\n\n        static async Task RetweetsQueryAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 196991337554378752;\n\n            var publicTweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweets &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .ToListAsync();\n\n            if (publicTweets != null)\n                publicTweets.ForEach(tweet =>\n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"@{0} {1} ({2})\",\n                            tweet.User.ScreenNameResponse,\n                            tweet.Text,\n                            tweet.RetweetCount);\n                });\n        }\n\n        static async Task SingleStatusQueryAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 449660889793581056;\n\n            var friendTweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Show &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .ToListAsync();\n\n            if (friendTweets != null)\n            {\n                Console.WriteLine(\"\\nTweets: \\n\");\n                friendTweets.ForEach(tweet =>\n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"User: \" + tweet.User.Name +\n                            \"\\nTweet: \" + tweet.Text +\n                            \"\\nTweet ID: \" + tweet.ID + \"\\n\");\n                }); \n            }\n        }\n\n        static async Task DeleteTweetAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 280433519057068033;\n\n            Status status = \n                await twitterCtx.DeleteTweetAsync(tweetID);\n\n            if (status != null && status.User != null)\n                Console.WriteLine(\n                    \"(\" + status.StatusID + \")\" +\n                    \"[\" + status.User.UserID + \"]\" +\n                    status.User.ScreenNameResponse + \", \" +\n                    status.Text + \", \" +\n                    status.CreatedAt);\n        }\n\n        static async Task TweetAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Enter your status update: \");\n            string status = Console.ReadLine();\n\n            Console.WriteLine(\"\\nStatus being sent: \\n\\n\\\"{0}\\\"\", status);\n            Console.Write(\"\\nDo you want to update your status? (y or n): \");\n            string confirm = Console.ReadLine();\n\n            if (confirm.ToUpper() == \"N\")\n            {\n                Console.WriteLine(\"\\nThis status is *not* being sent.\");\n            }\n            else if (confirm.ToUpper() == \"Y\")\n            {\n                Console.WriteLine(\"\\nPress any key to post tweet...\\n\");\n                Console.ReadKey(true);\n\n                Status tweet = await twitterCtx.TweetAsync(status);\n\n                if (tweet != null)\n                    Console.WriteLine(\n                        \"Status returned: \" +\n                        \"(\" + tweet.StatusID + \")\" +\n                        tweet.User.Name + \", \" +\n                        tweet.Text + \"\\n\");\n            }\n            else\n            {\n                Console.WriteLine(\"Not a valid entry.\");\n            }\n        }\n\n        static async Task ReplyAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 401033367283453953;\n            string status = \"@JoeMayo Testing ReplyAsync #Linq2Twitter £ \";\n\n                Status tweet = await twitterCtx.ReplyAsync(tweetID, status);\n\n                if (tweet != null)\n                    Console.WriteLine(\n                        \"Status returned: \" +\n                        \"(\" + tweet.StatusID + \")\" +\n                        tweet.User.Name + \", \" +\n                        tweet.Text + \"\\n\");\n        }\n\n        static async Task RetweetAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 401033367283453953;\n\n            Status retweet = await twitterCtx.RetweetAsync(tweetID);\n\n            if (retweet != null && \n                retweet.RetweetedStatus != null && \n                retweet.RetweetedStatus.User != null)\n            {\n                Console.WriteLine(\"Retweeted Tweet: \");\n                Console.WriteLine(\n                    \"\\nUser: \" + retweet.RetweetedStatus.User.ScreenNameResponse +\n                    \"\\nTweet: \" + retweet.RetweetedStatus.Text +\n                    \"\\nTweet ID: \" + retweet.RetweetedStatus.ID + \"\\n\"); \n            }\n        }\n\n        static async Task UploadMultipleImagesAsync(TwitterContext twitterCtx)\n        {\n            string status = \n                \"Testing multi-image tweet #Linq2Twitter £ \" + \n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n\n            var imageUploadTasks = \n                new List<Task<Media>> \n                {\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\images\\200xColor_2.png\")),\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\images\\WP_000003.jpg\")),\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\images\\13903749474_86bd1290de_o.jpg\")),\n                };\n\n            await Task.WhenAll(imageUploadTasks);\n\n            var mediaIds =\n                (from tsk in imageUploadTasks\n                 select tsk.Result.MediaID)\n                .ToList();\n\n            Status tweet = await twitterCtx.TweetAsync(status, mediaIds);\n\n            if (tweet != null)\n                Console.WriteLine(\"Tweet sent: \" + tweet.Text);\n        }\n\n        static async Task OEmbedStatusAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 305050067973312514;\n\n            var embeddedStatus =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Oembed &&\n                       tweet.ID == tweetID\n                 select tweet.EmbeddedStatus)\n                .SingleOrDefaultAsync();\n\n            if (embeddedStatus != null)\n                Console.WriteLine(\n                    \"Embedded Status Html: \\n\\n\" + embeddedStatus.Html);\n        }\n\n        static async Task RetweetersAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 210591841312190464;\n\n            Status status =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweeters &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (status != null && status.User != null)\n                status.Users.ForEach(\n                    userID => Console.WriteLine(\"User ID: \" + userID));\n        }\n\n        static async Task GetConversationAsync(TwitterContext twitterCtx)\n        {\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Conversation &&\n                       tweet.ID == 420611683317342208ul\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task LookupTweetsAsyc(TwitterContext twitterCtx)\n        {\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Lookup &&\n                       tweet.TweetIDs == \"460788892723978241,462758132448362496,460060836967768064\"\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/StreamDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LitJson;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class StreamDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing Filter Stream...\\n\");\n                        await DoFilterStreamAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing Sample Stream...\\n\");\n                        await DoSampleStreamAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tShowing User Stream...\\n\");\n                        await DoUserStreamAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing Site Stream...\\n\");\n                        await DoSiteStreamAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tUsing Control Stream...\\n\");\n                        await DoControlStreamAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tReading Rx Stream...\\n\");\n                        await DoRxObservableStreamAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nStreaming Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Filter Stream\");\n            Console.WriteLine(\"\\t 1. Sample Stream\");\n            Console.WriteLine(\"\\t 2. User Stream\");\n            Console.WriteLine(\"\\t 3. Site Stream\");\n            Console.WriteLine(\"\\t 4. Control Stream\");\n            Console.WriteLine(\"\\t 5. Reactive Stream\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoFilterStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                await\n                    (from strm in twitterCtx.Streaming\n                                            .WithCancellation(cancelTokenSrc.Token)\n                     where strm.Type == StreamingType.Filter &&\n                           strm.Track == \"twitter\"\n                     select strm)\n                    .StartAsync(async strm =>\n                    {\n                        HandleStreamResponse(strm);\n\n                        if (count++ >= 5)\n                            cancelTokenSrc.Cancel();\n                    });\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n  \n        static async Task DoSampleStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                await\n                    (from strm in twitterCtx.Streaming.WithCancellation(cancelTokenSrc.Token)\n                     where strm.Type == StreamingType.Sample\n                     select strm)\n                    .StartAsync(async strm =>\n                    {\n                        HandleStreamResponse(strm);\n\n                        if (count++ >= 5)\n                            cancelTokenSrc.Cancel();\n                    });\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n  \n        static async Task DoUserStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                await\n                    (from strm in twitterCtx.Streaming\n                     where strm.Type == StreamingType.User\n                     select strm)\n                    .WithCancellation(cancelTokenSrc.Token)\n                    .StartAsync(async strm =>\n                    {\n                        if (string.IsNullOrEmpty(strm.Content))\n                            Console.WriteLine(\"Keep-Alive\");\n                        else\n                            HandleStreamResponse(strm);\n\n                        if (count++ == 25)\n                            cancelTokenSrc.Cancel();\n                    });\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n  \n        static async Task DoSiteStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                await\n                    (from strm in twitterCtx.Streaming.WithCancellation(cancelTokenSrc.Token)\n                     where strm.Type == StreamingType.Site &&\n                           strm.Follow == \"15411837,16761255\"\n                     select strm)\n                    .StartAsync(async strm =>\n                    {\n                        if (string.IsNullOrEmpty(strm.Content))\n                            Console.WriteLine(\"Keep-Alive\");\n                        else\n                            HandleStreamResponse(strm);\n\n                        if (count++ == 25)\n                            cancelTokenSrc.Cancel();\n                    });\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n  \n        static async Task DoControlStreamAsync(TwitterContext twitterCtx)\n        {\n            var evt = new ManualResetEventSlim(false);\n            string streamID = string.Empty;\n\n            Task.Run(async () =>\n            {\n                Console.WriteLine(\"\\nStreamed Content: \\n\");\n                int count = 0;\n                var cancelTokenSrc = new CancellationTokenSource();\n\n                try\n                {\n                    await\n                        (from strm in twitterCtx.Streaming\n                         where strm.Type == StreamingType.Site &&\n                               strm.Follow == \"15411837,16761255\"\n                         select strm)\n                        .WithCancellation(cancelTokenSrc.Token)\n                        .StartAsync(async strm =>\n                        {\n                            if (string.IsNullOrEmpty(strm.Content))\n                                Console.WriteLine(\"Keep-Alive\");\n                            else\n                                HandleStreamResponse(strm);\n\n                            if (strm.EntityType == StreamEntityType.Control)\n                            {\n                                var control = strm.Entity as Control;\n                                streamID = control.URL.Replace(\"/1.1/site/c/\", \"\");\n                                evt.Set();\n                            }\n\n                            if (count++ == 25)\n                                cancelTokenSrc.Cancel();\n                        });\n                }\n                catch (OperationCanceledException)\n                {\n                    Console.WriteLine(\"Stream cancelled.\");\n                }\n            });\n\n            evt.Wait();\n\n            Console.WriteLine(\"Follower Details:\\n\");\n\n            var ctrlStrmFollowers =\n                await\n                (from strm in twitterCtx.ControlStream\n                    where strm.Type == ControlStreamType.Followers &&\n                        strm.UserID == 15411837 &&\n                        strm.StreamID == streamID\n                    select strm)\n                .SingleOrDefaultAsync();\n\n            if (ctrlStrmFollowers != null)\n            {\n                ControlStreamFollow follow = ctrlStrmFollowers.Follow;\n                ControlStreamUser followUser = follow.User;\n                List<ulong> friends = follow.Friends;\n                Cursors cursors = follow.Cursors;\n\n                Console.WriteLine(\"User ID: \" + followUser.UserID);\n                Console.WriteLine(\"User Name: \" + followUser.Name);\n                Console.WriteLine(\"Can DM: \" + followUser.DM);\n                friends.ForEach(friend => Console.WriteLine(friend));\n                Console.WriteLine(\"Prev Cursor: \" + cursors.Previous);\n                Console.WriteLine(\"Next Cursor: \" + cursors.Next);\n\n                Console.WriteLine(\"Info Details:\\n\");\n            } \n            \n            var ctrlStrmInfo =\n                (from strm in twitterCtx.ControlStream\n                    where strm.Type == ControlStreamType.Info &&\n                        strm.StreamID == streamID\n                    select strm)\n                .SingleOrDefault();\n\n            if (ctrlStrmInfo != null)\n            {\n                ControlStreamInfo infoUser = ctrlStrmInfo.Info;\n                ControlStreamUser user = infoUser.Users.First();\n                Console.WriteLine(\"User ID: \" + user.UserID);\n                Console.WriteLine(\"User Name: \" + user.Name);\n                Console.WriteLine(\"Can DM: \" + user.DM);\n                Console.WriteLine(\"Delimited: \" + infoUser.Delimited);\n                Console.WriteLine(\"Include Followings Acitity: \" + infoUser.IncludeFollowingsActivity);\n                Console.WriteLine(\"Include User Changes: \" + infoUser.IncludeUserChanges);\n                Console.WriteLine(\"Replies: \" + infoUser.Replies);\n                Console.WriteLine(\"With: \" + infoUser.With);\n\n                Console.WriteLine(\"\\nInitial Stream Users: \");\n\n                await PrintUserInfoAsync(twitterCtx, streamID);\n\n                ControlStream csAdd = await twitterCtx.AddSiteStreamUserAsync(new List<ulong> { 16761255 }, streamID);\n                Console.WriteLine(\"Command Response: \" + csAdd.CommandResponse);\n                Console.WriteLine(\"\\nAfter Adding a User: \");\n                await PrintUserInfoAsync(twitterCtx, streamID);\n\n                ControlStream csRemove = await twitterCtx.RemoveSiteStreamUserAsync(new List<ulong> { 16761255 }, streamID);\n                Console.WriteLine(\"Command Response: \" + csRemove.CommandResponse);\n                Console.WriteLine(\"\\nAfter Removing a User: \");\n                await PrintUserInfoAsync(twitterCtx, streamID);\n            }\n        }\n\n        static async Task DoRxObservableStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                var observable =\n                    await\n                        (from strm in twitterCtx.Streaming\n                                                .WithCancellation(cancelTokenSrc.Token)\n                         where strm.Type == StreamingType.Filter &&\n                               strm.Track == \"twitter\"\n                         select strm)\n                        .ToObservableAsync();\n\n                observable.Subscribe(\n                    strm =>\n                    {\n                        HandleStreamResponse(strm);\n\n                        if (count++ >= 5)\n                            cancelTokenSrc.Cancel();\n                    },\n                    ex => Console.WriteLine(ex.ToString()),\n                    () => Console.WriteLine(\"Completed\"));\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n\n        static async Task PrintUserInfoAsync(TwitterContext twitterCtx, string streamID)\n        {\n            var ctrlStrm =\n                await\n                (from strm in twitterCtx.ControlStream\n                 where strm.Type == ControlStreamType.Info &&\n                       strm.StreamID == streamID\n                 select strm)\n                .SingleOrDefaultAsync();\n\n            if (ctrlStrm != null && \n                ctrlStrm.Info != null && \n                ctrlStrm.Info.Users != null)\n            {\n                Console.WriteLine(\"\\nInfo Details:\\n\");\n\n                ControlStreamInfo info = ctrlStrm.Info;\n                foreach (var user in info.Users)\n                    Console.WriteLine(\"User ID: {0}, Name: {1}\", user.UserID, user.Name);\n\n                Console.WriteLine();\n            } \n        }\n\n        static void HandleStreamResponse(StreamContent strm)\n        {\n            switch (strm.EntityType)\n            {\n                case StreamEntityType.Control:\n                    var control = strm.Entity as Control;\n                    Console.WriteLine(\"Control URI: {0}\", control.URL);\n                    break;\n                case StreamEntityType.Delete:\n                    var delete = strm.Entity as Delete;\n                    Console.WriteLine(\"Delete - User ID: {0}, Status ID: {1}\", delete.UserID, delete.StatusID);\n                    break;\n                case StreamEntityType.DirectMessage:\n                    var dm = strm.Entity as DirectMessage;\n                    Console.WriteLine(\"Direct Message - Sender: {0}, Text: {1}\", dm.Sender, dm.Text);\n                    break;\n                case StreamEntityType.Disconnect:\n                    var disconnect = strm.Entity as Disconnect;\n                    Console.WriteLine(\"Disconnect - {0}\", disconnect.Reason);\n                    break;\n                case StreamEntityType.Event:\n                    var evt = strm.Entity as Event;\n                    Console.WriteLine(\"Event - Event Name: {0}\", evt.EventName);\n                    break;\n                case StreamEntityType.ForUser:\n                    var user = strm.Entity as ForUser;\n                    Console.WriteLine(\"For User - User ID: {0}, # Friends: {1}\", user.UserID, user.Friends.Count);\n                    break;\n                case StreamEntityType.FriendsList:\n                    var friends = strm.Entity as FriendsList;\n                    Console.WriteLine(\"Friends List - # Friends: {0}\", friends.Friends.Count);\n                    break;\n                case StreamEntityType.GeoScrub:\n                    var scrub = strm.Entity as GeoScrub;\n                    Console.WriteLine(\"GeoScrub - User ID: {0}, Up to Status ID: {1}\", scrub.UserID, scrub.UpToStatusID);\n                    break;\n                case StreamEntityType.Limit:\n                    var limit = strm.Entity as Limit;\n                    Console.WriteLine(\"Limit - Track: {0}\", limit.Track);\n                    break;\n                case StreamEntityType.Stall:\n                    var stall = strm.Entity as Stall;\n                    Console.WriteLine(\"Stall - Code: {0}, Message: {1}, % Full: {2}\", stall.Code, stall.Message, stall.PercentFull);\n                    break;\n                case StreamEntityType.Status:\n                    var status = strm.Entity as Status;\n                    Console.WriteLine(\"Status - @{0}: {1}\", status.User.ScreenNameResponse, status.Text);\n                    break;\n                case StreamEntityType.StatusWithheld:\n                    var statusWithheld = strm.Entity as StatusWithheld;\n                    Console.WriteLine(\"Status Withheld - Status ID: {0}, # Countries: {1}\", statusWithheld.StatusID, statusWithheld.WithheldInCountries.Count);\n                    break;\n                case StreamEntityType.TooManyFollows:\n                    var follows = strm.Entity as TooManyFollows;\n                    Console.WriteLine(\"Too Many Follows - Message: {0}\", follows.Message);\n                    break;\n                case StreamEntityType.UserWithheld:\n                    var userWithheld = strm.Entity as UserWithheld;\n                    Console.WriteLine(\"User Withheld - User ID: {0}, # Countries: {1}\", userWithheld.UserID, userWithheld.WithheldInCountries.Count);\n                    break;\n                case StreamEntityType.ParseError:\n                    var unparsedJson = strm.Entity as string;\n                    Console.WriteLine(\"Parse Error - {0}\", unparsedJson);\n                    break;\n                case StreamEntityType.Unknown:\n                default:\n                    Console.WriteLine(\"Unknown - \" + strm.Content + \"\\n\");\n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/TrendDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class TrendDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting trends...\\n\");\n                        await GetTrendsForPlaceAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting available trend locations...\\n\");\n                        await GetAvailableTrendLocationsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting trends...\\n\");\n                        await GetClosestTrendsAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nTrend Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Trends for a Place\");\n            Console.WriteLine(\"\\t 1. Get Available Trend Locations\");\n            Console.WriteLine(\"\\t 2. Get Trends Closest to a Location\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetTrendsForPlaceAsync(TwitterContext twitterCtx)\n        {\n            var trends =\n                await\n                (from trend in twitterCtx.Trends\n                 where trend.Type == TrendType.Place &&\n                       trend.WoeID == 2486982\n                 select trend)\n                .ToListAsync();\n\n            if (trends != null && \n                trends.Any() && \n                trends.First().Locations != null)\n            {\n                Console.WriteLine(\n                    \"Location: {0}\\n\",\n                    trends.First().Locations.First().Name);\n\n                trends.ForEach(trnd =>\n                    Console.WriteLine(\n                        \"Name: {0}, Date: {1}, Query: {2}\\nSearchUrl: {3}\",\n                        trnd.Name, trnd.CreatedAt, trnd.Query, trnd.SearchUrl)); \n            }\n        }\n\n        static async Task GetAvailableTrendLocationsAsync(TwitterContext twitterCtx)\n        {\n            var trendsResponse =\n                await\n                (from trend in twitterCtx.Trends\n                 where trend.Type == TrendType.Available\n                 select trend)\n                .SingleOrDefaultAsync();\n\n            if (trendsResponse != null && trendsResponse.Locations != null)\n                trendsResponse.Locations.ForEach(\n                    loc => Console.WriteLine(\"Location: \" + loc.Name));\n        }\n\n        static async Task GetClosestTrendsAsync(TwitterContext twitterCtx)\n        {\n            var trend =\n                await\n                (from trnd in twitterCtx.Trends\n                 where trnd.Type == TrendType.Closest &&\n                       trnd.Latitude == 37.78215 &&\n                       trnd.Longitude == -122.40060\n                 select trnd)\n                .SingleOrDefaultAsync();\n\n            if (trend != null && trend.Locations != null)\n                trend.Locations.ForEach(\n                    loc => Console.WriteLine(\n                        \"Name: {0}, Country: {1}, WoeID: {2}\",\n                        loc.Name, loc.Country, loc.WoeID));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/UserDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class UserDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking...\\n\");\n                        await LookupUsersAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await ShowUserDetailsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await FindUsersAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await GetContributeesAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await GetContributorsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await GetBannerSizesAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await GetUsersInSuggestedCategoriesAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tGetting  ...\\n\");\n                        await GetSuggestedCategoryListQueryAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await ShowUsersInCategoryAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tReport spammer...\\n\");\n                        await ReportSpammerAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n \n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup Users\");\n            Console.WriteLine(\"\\t 1. Show User Info\");\n            Console.WriteLine(\"\\t 2. Search for Users\");\n            Console.WriteLine(\"\\t 3. Contributee Accounts\");\n            Console.WriteLine(\"\\t 4. Account Contributors\");\n            Console.WriteLine(\"\\t 5. Get Profile Banner Sizes\");\n            Console.WriteLine(\"\\t 6. Get Suggested Users\");\n            Console.WriteLine(\"\\t 7. Get Suggestion Categories\");\n            Console.WriteLine(\"\\t 8. Get Suggested User Tweets\");\n            Console.WriteLine(\"\\t 9. Report Spammer\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupUsersAsync(TwitterContext twitterCtx)\n        {\n            var userResponse =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Lookup &&\n                       user.ScreenNameList == \"JoeMayo,Linq2Twitr\"\n                 select user)\n                .ToListAsync();\n\n            if (userResponse != null)\n                userResponse.ForEach(user => \n                    Console.WriteLine(\"Name: \" + user.ScreenNameResponse));\n        }\n\n        static async Task ShowUserDetailsAsync(TwitterContext twitterCtx)\n        {\n            var user =\n                await\n                (from tweet in twitterCtx.User\n                 where tweet.Type == UserType.Show &&\n                       tweet.ScreenName == \"JoeMayo\"\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (user != null)\n            {\n                var name = user.ScreenNameResponse;\n                var lastStatus =\n                    user.Status == null ? \"No Status\" : user.Status.Text;\n\n                Console.WriteLine();\n                Console.WriteLine(\n                    \"Name: {0}, Last Tweet: {1}\\n\", name, lastStatus); \n            }\n        }\n \n        static async Task FindUsersAsync(TwitterContext twitterCtx)\n        {\n            var foundUsers =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Search &&\n                       user.Query == \"JoeMayo\"\n                 select user)\n                .ToListAsync();\n\n            if (foundUsers != null)\n                foundUsers.ForEach(user => \n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n        }\n\n        static async Task GetContributeesAsync(TwitterContext twitterCtx)\n        {\n            var users =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Contributees &&\n                       user.ScreenName == \"biz\"\n                 select user)\n                .ToListAsync();\n\n            if (users != null)\n                users.ForEach(user => \n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n        }\n\n        static async Task GetContributorsAsync(TwitterContext twitterCtx)\n        {\n            var users =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Contributors &&\n                       user.ScreenName == \"twitter\"\n                 select user)\n                .ToListAsync();\n\n            if (users != null)\n                users.ForEach(user => \n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n        }\n\n        static async Task GetBannerSizesAsync(TwitterContext twitterCtx)\n        {\n            var user =\n                await\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.BannerSizes &&\n                       usr.ScreenName == \"JoeMayo\"\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            if (user != null && user.BannerSizes != null)\n                user.BannerSizes.ForEach(size =>\n                    Console.WriteLine(\n                        \"Label: {0}, W: {1} H: {2} URL: {3}\",\n                        size.Label, size.Width, size.Height, size.Url));\n        }\n\n        static async Task GetUsersInSuggestedCategoriesAsync(TwitterContext twitterCtx)\n        {\n            var userResponse =\n                await\n                (from tweet in twitterCtx.User\n                 where tweet.Type == UserType.Category &&\n                       tweet.Slug == \"Funny\"\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (userResponse != null && \n                userResponse.Categories != null && \n                userResponse.Categories.Any() && \n                userResponse.Categories.First().Users != null)\n            {\n                List<User> users = userResponse.Categories.First().Users;\n\n                users.ForEach(user =>\n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse)); \n            }\n        }\n\n        static async Task GetSuggestedCategoryListQueryAsync(TwitterContext twitterCtx)\n        {\n            var user =\n                await\n                (from tweet in twitterCtx.User\n                 where tweet.Type == UserType.Categories\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (user != null && user.Categories != null)\n                user.Categories.ForEach(cat => \n                    Console.WriteLine(\"Category: \" + cat.Name));\n        }\n\n        static async Task ShowUsersInCategoryAsync(TwitterContext twitterCtx)\n        {\n            var catUsers =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.CategoryStatus &&\n                       user.Slug == \"Technology\"\n                 select user)\n                .ToListAsync();\n\n            if (catUsers != null)\n            {\n                Console.WriteLine(\"Tweets: \\n\");\n\n                catUsers.ForEach(user =>\n                {\n                    if (user != null && user.Status != null)\n                        Console.WriteLine(\n                            \"User: {0}\\nTweet: {1}\\n\",\n                            user.ScreenNameResponse,\n                            user.Status == null ?\n                                \"<Tweet not available.>\" :\n                                user.Status.Text);\n                }); \n            }\n        }\n\n        static async Task ReportSpammerAsync(TwitterContext twitterCtx)\n        {\n            const string SpammerScreenName = \"justinbieber\";\n\n            User spammer = await twitterCtx.ReportSpamAsync(SpammerScreenName);\n\n            Console.WriteLine(\"You just reported {0} as a spammer.\", spammer.ScreenNameResponse);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/VineDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class VineDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting HTML...\\n\");\n                        await GetEmbeddedHtml(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n \n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Embedded HTML\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetEmbeddedHtml(TwitterContext twitterCtx)\n        {\n            var vineResponse =\n                await\n                (from vine in twitterCtx.Vine\n                 where vine.Type == VineType.Oembed &&\n                       vine.Url == \"https://vine.co/v/Ml16lZVTTxe\"\n                 select vine)\n                .SingleOrDefaultAsync();\n\n            Console.WriteLine(\"\\nOembed HTML:\\n\\n\" + vineResponse.Html);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Console/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/App_Start/BundleConfig.cs",
    "content": "﻿using System.Web.Optimization;\n\nnamespace Linq2TwitterDemos_MVC\n{\n    public class BundleConfig\n    {\n        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/jquery\").Include(\n                        \"~/Scripts/jquery-{version}.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/jqueryval\").Include(\n                        \"~/Scripts/jquery.validate*\"));\n\n            // Use the development version of Modernizr to develop with and learn from. Then, when you're\n            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                        \"~/Scripts/modernizr-*\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/bootstrap\").Include(\n                      \"~/Scripts/bootstrap.js\",\n                      \"~/Scripts/respond.js\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/css\").Include(\n                      \"~/Content/bootstrap.css\",\n                      \"~/Content/site.css\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/App_Start/FilterConfig.cs",
    "content": "﻿using System.Web.Mvc;\n\nnamespace Linq2TwitterDemos_MVC\n{\n    public class FilterConfig\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters)\n        {\n            filters.Add(new HandleErrorAttribute());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/App_Start/RouteConfig.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web.Mvc;\nusing System.Web.Routing;\n\nnamespace Linq2TwitterDemos_MVC\n{\n    public class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            routes.MapRoute(\n                name: \"Default\",\n                url: \"{controller}/{action}/{id}\",\n                defaults: new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/App_Start/Startup.Auth.cs",
    "content": "﻿using System.Configuration;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.Twitter;\nusing Owin;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_MVC\n{\n    public partial class Startup\n    {\n        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864\n        public void ConfigureAuth(IAppBuilder app)\n        {\n            // Enable the application to use a cookie to store information for the signed in user\n            app.UseCookieAuthentication(new CookieAuthenticationOptions\n            {\n                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,\n                LoginPath = new PathString(\"/Account/Login\")\n            });\n            // Use a cookie to temporarily store information about a user logging in with a third party login provider\n            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);\n\n            // Uncomment the following lines to enable logging in with third party login providers\n            //app.UseMicrosoftAccountAuthentication(\n            //    clientId: \"\",\n            //    clientSecret: \"\");\n\n            app.UseTwitterAuthentication(\n                new TwitterAuthenticationOptions\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"],\n                    Provider = new LinqToTwitterAuthenticationProvider()\n                });\n\n            //app.UseTwitterAuthentication(\n            //   consumerKey: ConfigurationManager.AppSettings[\"consumerKey\"],\n            //   consumerSecret: ConfigurationManager.AppSettings[\"consumerSecret\"]);\n\n            //app.UseFacebookAuthentication(\n            //   appId: \"\",\n            //   appSecret: \"\");\n\n            //app.UseGoogleAuthentication();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Content/Site.css",
    "content": "﻿body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Set padding to keep content from hitting the edges */\n.body-content {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n/* Set width on the form input elements since they're 100% wide by default */\ninput,\nselect,\ntextarea {\n    max-width: 280px;\n}\n\n/* styles for validation helpers */\n.field-validation-error {\n    color: #b94a48;\n}\n\n.field-validation-valid {\n    display: none;\n}\n\ninput.input-validation-error {\n    border: 1px solid #b94a48;\n}\n\ninput[type=\"checkbox\"].input-validation-error {\n    border: 0 none;\n}\n\n.validation-summary-errors {\n    color: #b94a48;\n}\n\n.validation-summary-valid {\n    display: none;\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Content/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default:disabled,\n.btn-default[disabled] {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary:disabled,\n.btn-primary[disabled] {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success:disabled,\n.btn-success[disabled] {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info:disabled,\n.btn-info[disabled] {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning:disabled,\n.btn-warning[disabled] {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger:disabled,\n.btn-danger[disabled] {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Content/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n  height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n  visibility: hidden;\n}\n.collapse.in {\n  display: block;\n  visibility: visible;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n  visibility: hidden;\n}\n.tab-content > .active {\n  display: block;\n  visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n    visibility: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px 15px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding: 48px 0;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-weight: normal;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000;\n            perspective: 1000;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Controllers/AccountController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing System.Web;\nusing System.Web.Mvc;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.Owin.Security;\nusing Linq2TwitterDemos_MVC.Models;\nusing LinqToTwitter;\nusing System.Configuration;\n\nnamespace Linq2TwitterDemos_MVC.Controllers\n{\n    [Authorize]\n    public class AccountController : Controller\n    {\n        public AccountController()\n            : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))\n        {\n        }\n\n        public AccountController(UserManager<ApplicationUser> userManager)\n        {\n            UserManager = userManager;\n        }\n\n        public UserManager<ApplicationUser> UserManager { get; private set; }\n\n        //\n        // GET: /Account/Login\n        [AllowAnonymous]\n        public ActionResult Login(string returnUrl)\n        {\n            ViewBag.ReturnUrl = returnUrl;\n            return View();\n        }\n\n        //\n        // POST: /Account/Login\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)\n        {\n            if (ModelState.IsValid)\n            {\n                var user = await UserManager.FindAsync(model.UserName, model.Password);\n                if (user != null)\n                {\n                    await SignInAsync(user, model.RememberMe);\n                    return RedirectToLocal(returnUrl);\n                }\n                else\n                {\n                    ModelState.AddModelError(\"\", \"Invalid username or password.\");\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // GET: /Account/Register\n        [AllowAnonymous]\n        public ActionResult Register()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Account/Register\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Register(RegisterViewModel model)\n        {\n            if (ModelState.IsValid)\n            {\n                var user = new ApplicationUser() { UserName = model.UserName };\n                var result = await UserManager.CreateAsync(user, model.Password);\n                if (result.Succeeded)\n                {\n                    await SignInAsync(user, isPersistent: false);\n                    return RedirectToAction(\"Index\", \"Home\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // POST: /Account/Disassociate\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Disassociate(string loginProvider, string providerKey)\n        {\n            ManageMessageId? message = null;\n            IdentityResult result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));\n            if (result.Succeeded)\n            {\n                message = ManageMessageId.RemoveLoginSuccess;\n            }\n            else\n            {\n                message = ManageMessageId.Error;\n            }\n            return RedirectToAction(\"Manage\", new { Message = message });\n        }\n\n        //\n        // GET: /Account/Manage\n        public ActionResult Manage(ManageMessageId? message)\n        {\n            ViewBag.StatusMessage =\n                message == ManageMessageId.ChangePasswordSuccess ? \"Your password has been changed.\"\n                : message == ManageMessageId.SetPasswordSuccess ? \"Your password has been set.\"\n                : message == ManageMessageId.RemoveLoginSuccess ? \"The external login was removed.\"\n                : message == ManageMessageId.Error ? \"An error has occurred.\"\n                : \"\";\n            ViewBag.HasLocalPassword = HasPassword();\n            ViewBag.ReturnUrl = Url.Action(\"Manage\");\n            return View();\n        }\n\n        //\n        // POST: /Account/Manage\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Manage(ManageUserViewModel model)\n        {\n            bool hasPassword = HasPassword();\n            ViewBag.HasLocalPassword = hasPassword;\n            ViewBag.ReturnUrl = Url.Action(\"Manage\");\n            if (hasPassword)\n            {\n                if (ModelState.IsValid)\n                {\n                    IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);\n                    if (result.Succeeded)\n                    {\n                        return RedirectToAction(\"Manage\", new { Message = ManageMessageId.ChangePasswordSuccess });\n                    }\n                    else\n                    {\n                        AddErrors(result);\n                    }\n                }\n            }\n            else\n            {\n                // User does not have a password so remove any validation errors caused by a missing OldPassword field\n                ModelState state = ModelState[\"OldPassword\"];\n                if (state != null)\n                {\n                    state.Errors.Clear();\n                }\n\n                if (ModelState.IsValid)\n                {\n                    IdentityResult result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);\n                    if (result.Succeeded)\n                    {\n                        return RedirectToAction(\"Manage\", new { Message = ManageMessageId.SetPasswordSuccess });\n                    }\n                    else\n                    {\n                        AddErrors(result);\n                    }\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        async Task StoreTwitterCredentials(ApplicationUser user)\n        {\n            var claimsIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);\n            if (claimsIdentity == null) return;\n\n            IList<Claim> currentClaims = await UserManager.GetClaimsAsync(user.Id);\n            Claim accessToken = claimsIdentity.FindFirst(LinqToTwitterAuthenticationProvider.AccessToken);\n            Claim accessTokenSecret = claimsIdentity.FindFirst(LinqToTwitterAuthenticationProvider.AccessTokenSecret);\n\n            var claimKeys =\n                (from claim in currentClaims\n                 select claim.Type)\n                .ToList();\n\n            if (!claimKeys.Contains(accessToken.Type))\n                await UserManager.AddClaimAsync(user.Id, accessToken);\n\n            if (!claimKeys.Contains(accessTokenSecret.Type))\n                await UserManager.AddClaimAsync(user.Id, accessTokenSecret);\n\n            var auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"],\n                    OAuthToken = accessToken.Value,\n                    OAuthTokenSecret = accessTokenSecret.Value\n                }\n            };\n\n            using (var ctx = new TwitterContext(auth))\n            {\n                var twitterUser =\n                    await\n                    (from acct in ctx.Account\n                     where acct.Type == AccountType.VerifyCredentials\n                     select acct.User)\n                    .SingleOrDefaultAsync();\n\n                string name = twitterUser.Name;\n                // you can do something with Twitter User data here too\n            }\n        }\n\n        //\n        // POST: /Account/ExternalLogin\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult ExternalLogin(string provider, string returnUrl)\n        {\n            // Request a redirect to the external login provider\n            return new ChallengeResult(provider, Url.Action(\"ExternalLoginCallback\", \"Account\", new { ReturnUrl = returnUrl }));\n        }\n\n        //\n        // GET: /Account/ExternalLoginCallback\n        [AllowAnonymous]\n        public async Task<ActionResult> ExternalLoginCallback(string returnUrl)\n        {\n            Session.Clear();\n            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();\n            if (loginInfo == null)\n            {\n                return RedirectToAction(\"Login\");\n            }\n\n            // Sign in the user with this external login provider if the user already has a login\n            var user = await UserManager.FindAsync(loginInfo.Login);\n            if (user != null)\n            {\n                await StoreTwitterCredentials(user);\n                await SignInAsync(user, isPersistent: false);\n                return RedirectToLocal(returnUrl);\n            }\n            else\n            {\n                // If the user does not have an account, then prompt the user to create an account\n                ViewBag.ReturnUrl = returnUrl;\n                ViewBag.LoginProvider = loginInfo.Login.LoginProvider;\n                return View(\"ExternalLoginConfirmation\", new ExternalLoginConfirmationViewModel { UserName = loginInfo.DefaultUserName });\n            }\n        }\n\n        //\n        // POST: /Account/LinkLogin\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LinkLogin(string provider)\n        {\n            // Request a redirect to the external login provider to link a login for the current user\n            return new ChallengeResult(provider, Url.Action(\"LinkLoginCallback\", \"Account\"), User.Identity.GetUserId());\n        }\n\n        //\n        // GET: /Account/LinkLoginCallback\n        public async Task<ActionResult> LinkLoginCallback()\n        {\n            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId());\n            if (loginInfo == null)\n            {\n                return RedirectToAction(\"Manage\", new { Message = ManageMessageId.Error });\n            }\n            var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login);\n            if (result.Succeeded)\n            {\n                var currentUser = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n                await StoreTwitterCredentials(currentUser);\n                return RedirectToAction(\"Manage\");\n            }\n            return RedirectToAction(\"Manage\", new { Message = ManageMessageId.Error });\n        }\n\n        //\n        // POST: /Account/ExternalLoginConfirmation\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)\n        {\n            if (User.Identity.IsAuthenticated)\n            {\n                return RedirectToAction(\"Manage\");\n            }\n\n            if (ModelState.IsValid)\n            {\n                // Get the information about the user from the external login provider\n                var info = await AuthenticationManager.GetExternalLoginInfoAsync();\n                if (info == null)\n                {\n                    return View(\"ExternalLoginFailure\");\n                }\n                var user = new ApplicationUser() { UserName = model.UserName };\n                var result = await UserManager.CreateAsync(user);\n                if (result.Succeeded)\n                {\n                    result = await UserManager.AddLoginAsync(user.Id, info.Login);\n                    if (result.Succeeded)\n                    {\n                        await StoreTwitterCredentials(user);\n                        await SignInAsync(user, isPersistent: false);\n                        return RedirectToLocal(returnUrl);\n                    }\n                }\n                AddErrors(result);\n            }\n\n            ViewBag.ReturnUrl = returnUrl;\n            return View(model);\n        }\n\n        //\n        // POST: /Account/LogOff\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LogOff()\n        {\n            AuthenticationManager.SignOut();\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n\n        //\n        // GET: /Account/ExternalLoginFailure\n        [AllowAnonymous]\n        public ActionResult ExternalLoginFailure()\n        {\n            return View();\n        }\n\n        [ChildActionOnly]\n        public ActionResult RemoveAccountList()\n        {\n            var linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId());\n            ViewBag.ShowRemoveButton = HasPassword() || linkedAccounts.Count > 1;\n            return (ActionResult)PartialView(\"_RemoveAccountPartial\", linkedAccounts);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && UserManager != null)\n            {\n                UserManager.Dispose();\n                UserManager = null;\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Helpers\n        // Used for XSRF protection when adding external logins\n        private const string XsrfKey = \"XsrfId\";\n\n        private IAuthenticationManager AuthenticationManager\n        {\n            get\n            {\n                return HttpContext.GetOwinContext().Authentication;\n            }\n        }\n\n        private async Task SignInAsync(ApplicationUser user, bool isPersistent)\n        {\n            AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);\n            var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);\n            AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n\n        private bool HasPassword()\n        {\n            var user = UserManager.FindById(User.Identity.GetUserId());\n            if (user != null)\n            {\n                return user.PasswordHash != null;\n            }\n            return false;\n        }\n\n        public enum ManageMessageId\n        {\n            ChangePasswordSuccess,\n            SetPasswordSuccess,\n            RemoveLoginSuccess,\n            Error\n        }\n\n        private ActionResult RedirectToLocal(string returnUrl)\n        {\n            if (Url.IsLocalUrl(returnUrl))\n            {\n                return Redirect(returnUrl);\n            }\n            else\n            {\n                return RedirectToAction(\"Index\", \"Home\");\n            }\n        }\n\n        private class ChallengeResult : HttpUnauthorizedResult\n        {\n            public ChallengeResult(string provider, string redirectUri) : this(provider, redirectUri, null)\n            {\n            }\n\n            public ChallengeResult(string provider, string redirectUri, string userId)\n            {\n                LoginProvider = provider;\n                RedirectUri = redirectUri;\n                UserId = userId;\n            }\n\n            public string LoginProvider { get; set; }\n            public string RedirectUri { get; set; }\n            public string UserId { get; set; }\n\n            public override void ExecuteResult(ControllerContext context)\n            {\n                var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };\n                if (UserId != null)\n                {\n                    properties.Dictionary[XsrfKey] = UserId;\n                }\n                context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);\n            }\n        }\n        #endregion\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web.Mvc;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_MVC.Controllers\n{\n    public class HomeController : Controller\n    {\n        public ActionResult Index()\n        {\n            if (!new SessionStateCredentialStore().HasAllCredentials())\n                return RedirectToAction(\"Index\", \"OAuth\");\n\n            return View();\n        }\n\n        public ActionResult About()\n        {\n            ViewBag.Message = \"Your application description page.\";\n\n            return View();\n        }\n\n        public ActionResult Contact()\n        {\n            ViewBag.Message = \"Your contact page.\";\n\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Controllers/OAuthController.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Mvc;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_MVC.Controllers\n{\n    public class OAuthController : AsyncController\n    {\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public async Task<ActionResult> BeginAsync()\n        {\n            //var auth = new MvcSignInAuthorizer\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                }\n            };\n\n            string twitterCallbackUrl = Request.Url.ToString().Replace(\"Begin\", \"Complete\");\n            return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl));\n        }\n\n        public async Task<ActionResult> CompleteAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore()\n            };\n\n            await auth.CompleteAuthorizeAsync(Request.Url);\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, \n            //   isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent \n            //   queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let \n            //   you make queries without re-authorizing.\n            //\n            //var credentials = auth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Controllers/StatusDemosController.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Mvc;\nusing Linq2TwitterDemos_MVC.Models;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_MVC.Controllers\n{\n    public class StatusDemosController : Controller\n    {\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public ActionResult Tweet()\n        {\n            var sendTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing async LINQ to Twitter in MVC - \" + DateTime.Now.ToString()\n            };\n\n            return View(sendTweetVM);\n        }\n\n        [HttpPost]\n        [ActionName(\"Tweet\")]\n        public async Task<ActionResult> TweetAsync(SendTweetViewModel tweet)\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore()\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            Status responseTweet = await ctx.TweetAsync(tweet.Text);\n\n            var responseTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing async LINQ to Twitter in MVC - \" + DateTime.Now.ToString(),\n                Response = \"Tweet successful! Response from Twitter: \" + responseTweet.Text\n            };\n\n            return View(responseTweetVM);\n        }\n\n        [ActionName(\"HomeTimeline\")]\n        public async Task<ActionResult> HomeTimelineAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore()\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            var tweets =\n                await\n                (from tweet in ctx.Status\n                 where tweet.Type == StatusType.Home\n                 select new TweetViewModel\n                 {\n                     ImageUrl = tweet.User.ProfileImageUrl,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     Text = tweet.Text\n                 })\n                .ToListAsync();\n\n            return View(tweets);\n        }\n\t}\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Global.asax.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web.Mvc;\nusing System.Web.Optimization;\nusing System.Web.Routing;\n\nnamespace Linq2TwitterDemos_MVC\n{\n    public class MvcApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start()\n        {\n            AreaRegistration.RegisterAllAreas();\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Linq2TwitterDemos_MVC.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{66D527FE-E2F4-43E3-8A7C-BAE342617668}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_MVC</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_MVC</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <NuGetPackageImportStamp>784b8016</NuGetPackageImportStamp>\n    <WebGreaseLibPath>..\\..\\packages\\WebGrease.1.5.2\\lib</WebGreaseLibPath>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.2-beta2\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.2-beta2\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.2.2.0-alpha1\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.EntityFramework.2.2.0-alpha1\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Owin.2.2.0-alpha1\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Microsoft.Owin, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Owin.3.0.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Host.SystemWeb\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Host.SystemWeb.3.0.0\\lib\\net45\\Microsoft.Owin.Host.SystemWeb.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.3.0.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Cookies\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Cookies.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.OAuth\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.OAuth.3.0.0\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Twitter.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Newtonsoft.Json.6.0.5\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.2\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Core.5.2.2\\lib\\net45\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.WebHost, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.WebHost.5.2.2\\lib\\net45\\System.Web.Http.WebHost.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.Mvc.5.2.2\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.Razor.3.2.2\\lib\\net45\\System.Web.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n    </Reference>\n    <Reference Include=\"WebGrease\">\n      <HintPath>..\\..\\packages\\WebGrease.1.5.2\\lib\\WebGrease.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"App_Start\\FilterConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\Startup.Auth.cs\" />\n    <Compile Include=\"Controllers\\AccountController.cs\" />\n    <Compile Include=\"Controllers\\HomeController.cs\" />\n    <Compile Include=\"Controllers\\OAuthController.cs\" />\n    <Compile Include=\"Controllers\\StatusDemosController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Models\\AccountViewModels.cs\" />\n    <Compile Include=\"Models\\IdentityModels.cs\" />\n    <Compile Include=\"Models\\SendTweetViewModel.cs\" />\n    <Compile Include=\"Models\\TweetViewModel.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Startup.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\bootstrap-theme.css\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css\" />\n    <Content Include=\"Content\\bootstrap.css\" />\n    <Content Include=\"Content\\bootstrap.min.css\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.svg\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"Scripts\\bootstrap.js\" />\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\n    <Content Include=\"Scripts\\jquery-2.0.3.min.js\" />\n    <Content Include=\"Scripts\\jquery-2.0.3.min.map\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.ttf\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.eot\" />\n    <Content Include=\"Content\\bootstrap-theme.css.map\" />\n    <Content Include=\"Content\\bootstrap.css.map\" />\n    <None Include=\"Scripts\\jquery-2.1.1.intellisense.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.min.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.min.map\" />\n    <None Include=\"Scripts\\jquery.validate-vsdoc.js\" />\n    <Content Include=\"Scripts\\jquery.validate.js\" />\n    <Content Include=\"Scripts\\jquery.validate.min.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.min.js\" />\n    <Content Include=\"Scripts\\modernizr-2.8.3.js\" />\n    <Content Include=\"Scripts\\npm.js\" />\n    <Content Include=\"Scripts\\respond.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.min.js\" />\n    <Content Include=\"Scripts\\respond.min.js\" />\n    <Content Include=\"Scripts\\_references.js\" />\n    <Content Include=\"Web.config\">\n      <SubType>Designer</SubType>\n    </Content>\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Views\\Web.config\" />\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Views\\Home\\About.cshtml\" />\n    <Content Include=\"Views\\Home\\Contact.cshtml\" />\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\n    <Content Include=\"Views\\Account\\_ChangePasswordPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\_ExternalLoginsListPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\_RemoveAccountPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\_SetPasswordPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\ExternalLoginConfirmation.cshtml\" />\n    <Content Include=\"Views\\Account\\ExternalLoginFailure.cshtml\" />\n    <Content Include=\"Views\\Account\\Login.cshtml\" />\n    <Content Include=\"Views\\Account\\Manage.cshtml\" />\n    <Content Include=\"Views\\Account\\Register.cshtml\" />\n    <Content Include=\"Views\\Shared\\_LoginPartial.cshtml\" />\n    <Content Include=\"Views\\OAuth\\Index.cshtml\" />\n    <Content Include=\"Views\\StatusDemos\\Tweet.cshtml\" />\n    <Content Include=\"Views\\StatusDemos\\Index.cshtml\" />\n    <Content Include=\"Views\\StatusDemos\\HomeTimeline.cshtml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"packages.config\" />\n    <None Include=\"Project_Readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitter.AspNet\\LinqToTwitter.AspNet.csproj\">\n      <Project>{946A0061-58F9-467D-9907-3046CEFB4524}</Project>\n      <Name>LinqToTwitter.AspNet</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>19607</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:19607/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Models/AccountViewModels.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace Linq2TwitterDemos_MVC.Models\n{\n    public class ExternalLoginConfirmationViewModel\n    {\n        [Required]\n        [Display(Name = \"User name\")]\n        public string UserName { get; set; }\n    }\n\n    public class ManageUserViewModel\n    {\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Current password\")]\n        public string OldPassword { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class LoginViewModel\n    {\n        [Required]\n        [Display(Name = \"User name\")]\n        public string UserName { get; set; }\n\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [Display(Name = \"Remember me?\")]\n        public bool RememberMe { get; set; }\n    }\n\n    public class RegisterViewModel\n    {\n        [Required]\n        [Display(Name = \"User name\")]\n        public string UserName { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Models/IdentityModels.cs",
    "content": "﻿using Microsoft.AspNet.Identity.EntityFramework;\n\nnamespace Linq2TwitterDemos_MVC.Models\n{\n    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.\n    public class ApplicationUser : IdentityUser\n    {\n    }\n\n    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>\n    {\n        public ApplicationDbContext()\n            : base(\"DefaultConnection\")\n        {\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Models/SendTweetViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_MVC.Models\n{\n    public class SendTweetViewModel\n    {\n        [DisplayName(\"Tweet Text:\")]\n        [Required]\n        [DataType(DataType.MultilineText)]\n        public string Text { get; set; }\n\n        \n        public string Response { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Models/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_MVC.Models\n{\n    public class TweetViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string ImageUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string ScreenName { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Project_Readme.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <style>\n        body {\n            background: #fff;\n            color: #505050;\n            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;\n            margin: 20px;\n            padding: 0;\n        }\n\n        #header {\n            background: #efefef;\n            padding: 0;\n        }\n\n        h1 {\n            font-size: 48px;\n            font-weight: normal;\n            margin: 0;\n            padding: 0 30px;\n            line-height: 150px;\n        }\n\n        p {\n            font-size: 20px;\n            color: #fff;\n            background: #969696;\n            padding: 0 30px;\n            line-height: 50px;\n        }\n\n        #main {\n            padding: 5px 30px;\n        }\n\n        .section {\n            width: 21.7%;\n            float: left;\n            margin: 0 0 0 4%;\n        }\n\n            .section h2 {\n                font-size: 13px;\n                text-transform: uppercase;\n                margin: 0;\n                border-bottom: 1px solid silver;\n                padding-bottom: 12px;\n                margin-bottom: 8px;\n            }\n\n            .section.first {\n                margin-left: 0;\n            }\n\n                .section.first h2 {\n                    font-size: 24px;\n                    text-transform: none;\n                    margin-bottom: 25px;\n                    border: none;\n                }\n\n                .section.first li {\n                    border-top: 1px solid silver;\n                    padding: 8px 0;\n                }\n\n            .section.last {\n                margin-right: 0;\n            }\n\n        ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n            line-height: 20px;\n        }\n\n        li {\n            padding: 4px 0;\n        }\n\n        a {\n            color: #267cb2;\n            text-decoration: none;\n        }\n\n            a:hover {\n                text-decoration: underline;\n            }\n    </style>\n</head>\n<body>\n\n    <div id=\"header\">\n        <h1>Your ASP.NET application</h1>\n        <p>Congratulations! You've created a project</p>\n    </div>\n\n    <div id=\"main\">\n        <div class=\"section first\">\n            <h2>This application consists of:</h2>\n            <ul>\n                <li>Sample pages showing basic nav between Home, About, and Contact</li>\n                <li>Theming using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320754\">Bootstrap</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320755\">Authentication</a>, if selected, shows how to register and sign in</li>\n                <li>ASP.NET features managed using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320756\">NuGet</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Customize app</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320757\">Get started with ASP.NET MVC</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320758\">Change the site's theme</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320759\">Add more libraries using NuGet</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320760\">Configure authentication</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320761\">Customize information about the website users</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320762\">Get information from social providers</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320763\">Add HTTP services using ASP.NET Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320764\">Secure your web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320765\">Add real-time web with ASP.NET SignalR</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320766\">Add components using Scaffolding</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320767\">Test your app with Browser Link</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320768\">Share your project</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Deploy</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320769\">Ensure your app is ready for production</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320770\">Windows Azure</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320771\">Hosting providers</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section last\">\n            <h2>Get help</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320772\">Get help</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320773\">Get more templates</a></li>\n            </ul>\n        </div>\n    </div>\n\n</body>\n</html>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_MVC\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_MVC\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"7588364f-bbba-4224-a430-d50498cbf661\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/_references.js",
    "content": "﻿/// <autosync enabled=\"true\" />\n/// <reference path=\"modernizr-2.8.3.js\" />\n/// <reference path=\"jquery-2.0.3.min.js\" />\n/// <reference path=\"jquery-2.1.1.js\" />\n/// <reference path=\"jquery.validate.unobtrusive.js\" />\n/// <reference path=\"respond.js\" />\n/// <reference path=\"respond.matchmedia.addlistener.js\" />\n/// <reference path=\"npm.js\" />\n/// <reference path=\"bootstrap.min.js\" />\n/// <reference path=\"jquery.validate.js\" />\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.1\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.1\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.1\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n    }\n\n    if (changed) this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.1\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var delta = direction == 'prev' ? -1 : 1\n    var activeIndex = this.getItemIndex(active)\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.1\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true,\n    trigger: '[data-toggle=\"collapse\"]'\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && option == 'show') options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.1'\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--                        // up\n    if (e.which == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.1\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options        = options\n    this.$body          = $(document.body)\n    this.$element       = $(element)\n    this.$backdrop      =\n    this.isShown        = null\n    this.scrollbarWidth = 0\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      if (that.options.backdrop) that.adjustBackdrop()\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .prependTo(this.$element)\n        .on('click.dismiss.bs.modal', $.proxy(function (e) {\n          if (e.target !== e.currentTarget) return\n          this.options.backdrop == 'static'\n            ? this.$element[0].focus.call(this.$element[0])\n            : this.hide.call(this)\n        }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    if (this.options.backdrop) this.adjustBackdrop()\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustBackdrop = function () {\n    this.$backdrop\n      .css('height', 0)\n      .css('height', this.$element[0].scrollHeight)\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', '')\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.1\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (self && self.$tip && self.$tip.is(':visible')) {\n      self.hoverState = 'in'\n      return\n    }\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var $container   = this.options.container ? $(this.options.container) : this.$element.parent()\n        var containerDim = this.getPosition($container)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < containerDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > containerDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < containerDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {\n    this.arrow()\n      .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isHorizontal ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    return (this.$tip = this.$tip || $(this.options.template))\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.tooltip')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.tooltip', (data = {}))\n        if (!data[selector]) data[selector] = new Tooltip(this, options)\n      } else {\n        if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.1\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.popover')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.popover', (data = {}))\n        if (!data[selector]) data[selector] = new Popover(this, options)\n      } else {\n        if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.1\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var process  = $.proxy(this.process, this)\n\n    this.$body          = $('body')\n    this.$scrollElement = $(element).is('body') ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', process)\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = 'offset'\n    var offsetBase   = 0\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.offsets = []\n    this.targets = []\n    this.scrollHeight = this.getScrollHeight()\n\n    var self     = this\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n        '[data-target=\"' + target + '\"],' +\n        this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.1\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.VERSION = '3.3.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.1\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      =\n    this.unpin        =\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && colliderTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = $('body').height()\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/jquery-2.1.1.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to return the new transport object to use with the data type provided in the first argument.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead.</summary>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'fn.extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>\n    ///   <param name=\"object\" type=\"Object\">An object to merge onto the jQuery prototype.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">Document element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"\">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"htmlString\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked or selected.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"htmlString\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the           index position of the element in the set and the old HTML value as arguments.           jQuery empties the element before calling the function;           use the oldhtml argument to reference the previous content.           Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"PlainObject\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"\">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"newContent\" type=\"\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <summary>Selects the element that is the root of the document.</summary>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/jquery-2.1.1.js",
    "content": "/*!\n * jQuery JavaScript Library v2.1.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-05-01T17:11Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\t\t// execute the factory and get jQuery\n\t\t// For environments that do not inherently posses a window with a document\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\t\t// This accentuates the need for the creation of a real window\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android < 4.0, iOS < 6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v1.10.19\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-04-18\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t}, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t});\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select msallowclip=''><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android < 4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Math.random();\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android < 4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n/*\n\tImplementation Summary\n\n\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t2. Improve the module's maintainability by reducing the storage\n\t\tpaths to a single mechanism.\n\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n*/\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` need .setAttribute for WWA\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE9-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome < 28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Create \"bubbling\" focus and blur events\n// Support: Firefox, Chrome, Safari\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE 9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE 9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Support: IE >= 9\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Support: IE >= 9\n\t\t// Fix Cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Fixes #12346\n\t\t\t\t\t// Support: Webkit, IE\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\n\t\t\t\t// remove it.\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS 5.1, Android 4.x, Android 2.3\n\t// Check the default checkbox/radio value (\"\" on old WebKit; \"on\" elsewhere)\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Must access the parent to make an option select properly\n\t// Support: IE9, IE10\n\tsupport.optSelected = opt.selected;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Check if an input maintains its value after becoming a radio\n\t// Support: IE9, IE10\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Support: IE9+\n// Selectedness for an option in an optgroup can be inaccurate\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\nif ( window.ActiveXObject ) {\n\tjQuery( window ).on( \"unload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// We assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/jquery.validate-vsdoc.js",
    "content": "﻿/*\n* This file has been commented to support Visual Studio Intellisense.\n* You should not use this file at runtime inside the browser--it is only\n* intended to be used only for design-time IntelliSense.  Please use the\n* standard jQuery library for all production use.\n*\n* Comment version: 1.13.1\n*/\n\n/*\n* Note: While Microsoft is not the author of this file, Microsoft is\n* offering you a license subject to the terms of the Microsoft Software\n* License Terms for Microsoft ASP.NET Model View Controller 3.\n* Microsoft reserves all other rights. The notices below are provided\n* for informational purposes only and are not the license terms under\n* which Microsoft distributed this file.\n*\n* jQuery Validation Plugin - v1.13.1 - 2/4/2013\n* https://github.com/jzaefferer/jquery-validation\n* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT\n*\n*/\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\t\t/// <summary>\n\t\t/// Validates the selected form. This method sets up event handlers for submit, focus,\n\t\t/// keyup, blur and click to trigger validation of the entire form or individual\n\t\t/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,\n\t\t/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.\n\t\t/// </summary>\n\t\t/// <param name=\"options\" type=\"Object\">\n\t\t/// A set of key/value pairs that configure the validate. All options are optional.\n\t\t/// </param>\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif (!this.length) {\n\t\t\toptions && options.debug && window.console && console.warn( \"nothing selected, can't validate, returning nothing\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data(this[0], 'validator');\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\t\t\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data(this[0], 'validator', validator); \n\t\t\n\t\tif ( validator.settings.onsubmit ) {\n\t\t\n\t\t\t// allow suppresing validation by adding a cancel class to the submit button\n\t\t\tthis.find(\"input, button\").filter(\".cancel\").click(function() {\n\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t});\n\t\t\t\n\t\t\t// when a submitHandler is used, capture the submitting button\n\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\tthis.find(\"input, button\").filter(\":submit\").click(function() {\n\t\t\t\t\tvalidator.submitButton = this;\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug )\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\n\t\t\t\tfunction handle() {\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\tvar hidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm );\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\t/// <summary>\n\t\t/// Checks if the selected form is valid or if all selected elements are valid.\n\t\t/// validate() needs to be called on the form before checking it using this method.\n\t\t/// </summary>\n\t\t/// <returns type=\"Boolean\" />\n\n        if ( $(this[0]).is('form')) {\n            return this.validate().form();\n        } else {\n            var valid = true;\n            var validator = $(this[0].form).validate();\n            this.each(function() {\n\t\t\t\tvalid &= validator.element(this);\n            });\n            return valid;\n        }\n    },\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function(attributes) {\n\t\t/// <summary>\n\t\t/// Remove the specified attributes from the first matched element and return them.\n\t\t/// </summary>\n\t\t/// <param name=\"attributes\" type=\"String\">\n\t\t/// A space-seperated list of attribute names to remove.\n\t\t/// </param>\n\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function(command, argument) {\n\t\t/// <summary>\n\t\t/// Return the validations rules for the first selected element.\n\t\t/// </summary>\n\t\t/// <param name=\"command\" type=\"String\">\n\t\t/// Can be either \"add\" or \"remove\".\n\t\t/// </param>\n\t\t/// <param name=\"argument\" type=\"\">\n\t\t/// A list of rules to add or remove.\n\t\t/// </param>\n\n\t\tvar element = this[0];\n\t\t\n\t\tif (command) {\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif (argument.messages)\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif (!argument) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.metadataRules(element),\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\t\t\n\t\t// make sure required is at front\n\t\tif (data.required) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function(a) {return !a.checked;}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function(source, params) {\n\t/// <summary>\n\t/// Replaces {n} placeholders with arguments.\n\t/// One or more arguments can be passed, in addition to the string template itself, to insert\n\t/// into the string.\n\t/// </summary>\n\t/// <param name=\"source\" type=\"String\">\n\t/// The string to format.\n\t/// </param>\n\t/// <param name=\"params\" type=\"String\">\n\t/// The first argument to insert, or an array of Strings to insert\n\t/// </param>\n\t/// <returns type=\"String\" />\n\n\tif ( arguments.length == 1 ) \n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\tif ( arguments.length > 2 && params.constructor != Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor != Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function(i, n) {\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\t\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: [],\n\t\tignoreTitle: false,\n\t\tonfocusin: function(element) {\n\t\t\tthis.lastActive = element;\n\t\t\t\t\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tthis.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function(element) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function(element) {\n\t\t\tif ( element.name in this.submitted || element == this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function(element) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted )\n\t\t\t\tthis.element(element);\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if (element.parentNode.name in this.submitted)\n\t\t\t\tthis.element(element.parentNode);\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function(settings) {\n\t\t/// <summary>\n\t\t/// Modify default settings for validation.\n\t\t/// Accepts everything that Plugins/Validation/validate accepts.\n\t\t/// </summary>\n\t\t/// <param name=\"settings\" type=\"Options\">\n\t\t/// Options to set as default.\n\t\t/// </param>\n\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\taccept: \"Please enter a value with a valid extension.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\t\n\tautoCreateRanges: false,\n\t\n\tprototype: {\n\t\t\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\t\t\t\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function(key, value) {\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function(key, value) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\t\t\t\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tvalidator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, :password, :file, select, textarea\", \"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\":radio, :checkbox, select, option\", \"click\", delegate);\n\n\t\t\tif (this.settings.invalidHandler)\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\t/// <summary>\n\t\t\t/// Validates the form, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as a normal submit event, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif (!this.valid())\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\t\t\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid(); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\t/// <summary>\n\t\t\t/// Validates a single element, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as validation on blur or keyup, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"element\" type=\"Selector\">\n\t\t\t/// An element to validate, must be inside the validated form.\n\t\t\t/// </param>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\telement = this.clean( element );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element );\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function(errors) {\n\t\t\t/// <summary>\n\t\t\t/// Show the specified messages.\n\t\t\t/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"errors\" type=\"Object\">\n\t\t\t/// One or more key/value pairs of input names and messages.\n\t\t\t/// </param>\n\n\t\t\tif(errors) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.settings.showErrors\n\t\t\t\t? this.settings.showErrors.call( this, this.errorMap, this.errorList )\n\t\t\t\t: this.defaultShowErrors();\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\t/// <summary>\n\t\t\t/// Resets the controlled form.\n\t\t\t/// Resets input fields to their original value (requires form plugin), removes classes\n\t\t\t/// indicating invalid elements and hides error messages.\n\t\t\t/// </summary>\n\n\t\t\tif ( $.fn.resetForm )\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass );\n\t\t},\n\t\t\n\t\tnumberOfInvalids: function() {\n\t\t\t/// <summary>\n\t\t\t/// Returns the number of invalid fields.\n\t\t\t/// This depends on the internal validator state. It covers all fields only after\n\t\t\t/// validating the complete form (on submit or via $(\"form\").valid()). After validating\n\t\t\t/// a single element, only that element is counted. Most useful in combination with the\n\t\t\t/// invalidHandler-option.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Number\" />\n\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\t\t\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj )\n\t\t\t\tcount++;\n\t\t\treturn count;\n\t\t},\n\t\t\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\t\t\n\t\tvalid: function() {\n\t\t\treturn this.size() == 0;\n\t\t},\n\t\t\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\t\t\n\t\tfocusInvalid: function() {\n\t\t\tif( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\n\t\t\t\treturn n.element.name == lastActive.name;\n\t\t\t}).length == 1 && lastActive;\n\t\t},\n\t\t\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\t\t\t\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\t// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved\n\t\t\treturn $([]).add(this.currentForm.elements)\n\t\t\t.filter(\":input\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\t!this.name && validator.settings.debug && window.console && console.error( \"%o has no name assigned\", this);\n\t\t\t\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) )\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\t\t\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[0];\n\t\t},\n\t\t\n\t\terrors: function() {\n\t\t\treturn $( this.settings.errorElement + \".\" + this.settings.errorClass, this.errorContext );\n\t\t},\n\t\t\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\t\t\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\t\t\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\t\n\t\tcheck: function( element ) {\n\t\t\telement = this.clean( element );\n\t\t\t\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif (this.checkable(element)) {\n\t\t\t    element = this.findByName(element.name).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\t\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tfor (var method in rules) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\t\t\t\t\tvar result = $.validator.methods[method].call( this, element.value.replace(/\\r/g, \"\"), element, rule.parameters );\n\t\t\t\t\t\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result == \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\t\t\t\t\t\n\t\t\t\t\tif ( result == \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tthis.settings.debug && window.console && console.log(\"exception occured when checking element \" + element.id\n\t\t\t\t\t\t + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dependencyMismatch)\n\t\t\t\treturn;\n\t\t\tif ( this.objectLength(rules) )\n\t\t\t\tthis.successList.push(element);\n\t\t\treturn true;\n\t\t},\n\t\t\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's \"messages\" metadata\n\t\tcustomMetaMessage: function(element, method) {\n\t\t\tif (!$.metadata)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tvar meta = this.settings.meta\n\t\t\t\t? $(element).metadata()[this.settings.meta]\n\t\t\t\t: $(element).metadata();\n\t\t\t\n\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t},\n\t\t\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor == String\n\t\t\t\t? m\n\t\t\t\t: m[method]);\n\t\t},\n\t\t\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif (arguments[i] !== undefined)\n\t\t\t\t\treturn arguments[i];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t\n\t\tdefaultMessage: function( element, method) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customMetaMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\t\t\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message == \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t}\t\t\t\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\t\t\t\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\t\t\n\t\taddWrapper: function(toToggle) {\n\t\t\tif ( this.settings.wrapper )\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\treturn toToggle;\n\t\t},\n\t\t\n\t\tdefaultShowErrors: function() {\n\t\t\tfor ( var i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tthis.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif (this.settings.success) {\n\t\t\t\tfor ( var i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.settings.unhighlight) {\n\t\t\t\tfor ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\t\t\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\t\t\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\t\t\n\t\tshowLabel: function(element, message) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass().addClass( this.settings.errorClass );\n\t\t\t\n\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\tlabel.attr(\"generated\") && label.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length )\n\t\t\t\t\tthis.settings.errorPlacement\n\t\t\t\t\t\t? this.settings.errorPlacement(label, $(element) )\n\t\t\t\t\t\t: label.insertAfter(element);\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\ttypeof this.settings.success == \"string\"\n\t\t\t\t\t? label.addClass( this.settings.success )\n\t\t\t\t\t: this.settings.success( label );\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\t\t\n\t\terrorsFor: function(element) {\n\t\t\tvar name = this.idOrName(element);\n    \t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr('for') == name;\n\t\t\t});\n\t\t},\n\t\t\n\t\tidOrName: function(element) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn /radio|checkbox/i.test(element.type);\n\t\t},\n\t\t\n\t\tfindByName: function( name ) {\n\t\t\t// select by name and filter by form for performance over form.find(\"[name=...]\")\n\t\t\tvar form = this.currentForm;\n\t\t\treturn $(document.getElementsByName(name)).map(function(index, element) {\n\t\t\t\treturn element.form == form && element.name == name && element  || null;\n\t\t\t});\n\t\t},\n\t\t\n\t\tgetLength: function(value, element) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase 'input':\n\t\t\t\tif( this.checkable( element) )\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\t\n\t\tdepend: function(param, element) {\n\t\t\treturn this.dependTypes[typeof param]\n\t\t\t\t? this.dependTypes[typeof param](param, element)\n\t\t\t\t: true;\n\t\t},\n\t\n\t\tdependTypes: {\n\t\t\t\"boolean\": function(param, element) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function(param, element) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function(param, element) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\t\t\n\t\toptional: function(element) {\n\t\t\treturn !$.validator.methods.required.call(this, $.trim(element.value), element) && \"dependency-mismatch\";\n\t\t},\n\t\t\n\t\tstartRequest: function(element) {\n\t\t\tif (!this.pending[element.name]) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\t\t\n\t\tstopRequest: function(element, valid) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif (this.pendingRequest < 0)\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\tpreviousValue: function(element) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\t\t\n\t},\n\t\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tdateDE: {dateDE: true},\n\t\tnumber: {number: true},\n\t\tnumberDE: {numberDE: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\t\n\taddClassRules: function(className, rules) {\n\t\t/// <summary>\n\t\t/// Add a compound class method - useful to refactor common combinations of rules into a single\n\t\t/// class.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the class rule to add\n\t\t/// </param>\n\t\t/// <param name=\"rules\" type=\"Options\">\n\t\t/// The compound rules\n\t\t/// </param>\n\n\t\tclassName.constructor == String ?\n\t\t\tthis.classRuleSettings[className] = rules :\n\t\t\t$.extend(this.classRuleSettings, className);\n\t},\n\t\n\tclassRules: function(element) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr('class');\n\t\tclasses && $.each(classes.split(' '), function() {\n\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t}\n\t\t});\n\t\treturn rules;\n\t},\n\t\n\tattributeRules: function(element) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value = $element.attr(method);\n\t\t\tif (value) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\tmetadataRules: function(element) {\n\t\tif (!$.metadata) return {};\n\t\t\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\treturn meta ?\n\t\t\t$(element).metadata()[meta] :\n\t\t\t$(element).metadata();\n\t},\n\t\n\tstaticRules: function(element) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, 'validator');\n\t\tif (validator.settings.rules) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\t\n\tnormalizeRules: function(rules, element) {\n\t\t// handle dependency check\n\t\t$.each(rules, function(prop, val) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif (val === false) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (val.param || val.depends) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (keepRule) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// evaluate parameters\n\t\t$.each(rules, function(rule, parameter) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\t\t\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t}\n\t\t});\n\t\t\n\t\tif ($.validator.autoCreateRanges) {\n\t\t\t// auto-create ranges\n\t\t\tif (rules.min && rules.max) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\tif (rules.messages) {\n\t\t\tdelete rules.messages;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function(data) {\n\t\tif( typeof data == \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\t\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function(name, method, message) {\n\t\t/// <summary>\n\t\t/// Add a custom validation method. It must consist of a name (must be a legal javascript \n\t\t/// identifier), a javascript based function and a default string message.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the method, used to identify and referencing it, must be a valid javascript\n\t\t/// identifier\n\t\t/// </param>\n\t\t/// <param name=\"method\" type=\"Function\">\n\t\t/// The actual method implementation, returning true if an element is valid\n\t\t/// </param>\n\t\t/// <param name=\"message\" type=\"String\" optional=\"true\">\n\t\t/// (Optional) The default message to display for this method. Can be a function created by \n\t\t/// jQuery.validator.format(value). When undefined, an already existing message is used \n\t\t/// (handy for localization), otherwise the field-specific messages have to be defined.\n\t\t/// </param>\n\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];\n\t\tif (method.length < 3) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function(value, element, param) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\tcase 'input':\n\t\t\t\tif ( this.checkable(element) )\n\t\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\tdefault:\n\t\t\t\treturn $.trim(value).length > 0;\n\t\t\t}\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function(value, element, param) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] )\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\t\t\t\n\t\t\tparam = typeof param == \"string\" && {url:param} || param; \n\t\t\t\n\t\t\tif ( this.pending[element.name] ) {\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage(element, \"remote\");\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function(value, element, param) {\n\t\t\tvar length = this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n        \n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function(value, element) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function(value, element) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function(value, element) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t// accept only digits and dashes\n\t\t\tif (/[^0-9-]+/.test(value))\n\t\t\t\treturn false;\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tvar nDigit = parseInt(cDigit, 10);\n\t\t\t\tif (bEven) {\n\t\t\t\t\tif ((nDigit *= 2) > 9)\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) == 0;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/accept\n\t\taccept: function(value, element, param) {\n\t\t\tparam = typeof param == \"string\" ? param.replace(/,/g, '|') : \"png|jpe?g|gif\";\n\t\t\treturn this.optional(element) || value.match(new RegExp(\".(\" + param + \")$\", \"i\")); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function(value, element, param) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param).unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t$(element).valid();\n\t\t\t});\n\t\t\treturn value == target.val();\n\t\t}\n\t\t\n\t}\n\t\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n})(jQuery);\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() \n;(function($) {\n\tvar pendingRequests = {};\n\t\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\n\t\t    var port = settings.port;\n\t\t    if (settings.mode == \"abort\") {\n\t\t\t    if ( pendingRequests[port] ) {\n\t\t\t\t    pendingRequests[port].abort();\n\t\t\t    }\t\t\t\tpendingRequests[port] = xhr;\n\t\t    }\n\t    });\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function(settings) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif (mode == \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\n\t\t\t    return (pendingRequests[port] = ajax.apply(this, arguments));\n\t\t    }\n\t\t    return ajax.apply(this, arguments);\n\t    };\n    }\n})(jQuery);\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target \n;(function($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\t\n\t\t}, function( original, fix ){\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup:function() {\n\t\t\t\t\tthis.addEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\tteardown:function() {\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\thandler: function(e) {\n\t\t\t\t\targuments[0] = $.event.fix(e);\n\t\t\t\t\targuments[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t};\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function(delegate, type, handler) {\n\t\t\treturn this.bind(type, function(event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.13.1\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2014 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend($.fn, {\n\t// http://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.validateDelegate( \":submit\", \"click\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( event.target ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( event.target ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t});\n\t\t}\n\t\treturn valid;\n\t},\n\t// attributes: space separated list of attributes to retrieve and remove\n\tremoveAttrs: function( attributes ) {\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each( attributes.split( /\\s/ ), function( index, value ) {\n\t\t\tresult[ value ] = $element.attr( value );\n\t\t\t$element.removeAttr( value );\n\t\t});\n\t\treturn result;\n\t},\n\t// http://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\t\t\t\t// remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t\tif ( method === \"required\" ) {\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\n\t\t}\n\n\t\t// make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param });\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend( $.expr[ \":\" ], {\n\t// http://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\treturn !!$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// http://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t});\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar validator = $.data( this[ 0 ].form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !this.is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this[ 0 ], event );\n\t\t\t\t}\n\t\t\t}\n\t\t\t$( this.currentForm )\n\t\t\t\t.validateDelegate( \":text, [type='password'], [type='file'], select, textarea, \" +\n\t\t\t\t\t\"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" +\n\t\t\t\t\t\"[type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], \" +\n\t\t\t\t\t\"[type='range'], [type='color'], [type='radio'], [type='checkbox']\",\n\t\t\t\t\t\"focusin focusout keyup\", delegate)\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.validateDelegate(\"select, option, [type='radio'], [type='checkbox']\", \"click\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).bind( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend({}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tresult = true;\n\n\t\t\tthis.lastElement = checkElement;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\tresult = this.check( checkElement ) !== false;\n\t\t\t\tif ( result ) {\n\t\t\t\t\tdelete this.invalid[ checkElement.name ];\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add aria-invalid status for screen readers\n\t\t\t$( element ).attr( \"aria-invalid\", !result );\n\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[ name ],\n\t\t\t\t\t\telement: this.findByName( name )[ 0 ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements()\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t\t.removeAttr( \"aria-invalid\" );\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea\" )\n\t\t\t.not( \":submit, :reset, :image, [disabled], [readonly]\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ this.name ] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar val,\n\t\t\t\t$element = $( element ),\n\t\t\t\ttype = element.type;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn $( \"input[name='\" + element.name + \"']:checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? false : $element.val();\n\t\t\t}\n\n\t\t\tval = $element.val();\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule;\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[ method ],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t});\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\t\t\tif ( error.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\t\t\t\t// create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\t\t\t\t} else if ( error.parents( \"label[for='\" + elementID + \"']\" ).length === 0 ) {\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\n\t\t\t\t\terrorID = error.attr( \"id\" ).replace( /(:|\\.|\\[|\\])/g, \"\\\\$1\");\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + errorID + \"\\\\b\" ) ) ) {\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + name + \"']\", this.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName( element ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// aria-describedby should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + describer.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + name + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t\t// allows type=\"date\" and others to be compared as strings\n\t\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\t\tvalue = Number( value );\n\t\t\t}\n\n\t\t\tif ( value || value === 0 ) {\n\t\t\t\trules[ method ] = value;\n\t\t\t} else if ( type === method && type !== \"range\" ) {\n\t\t\t\t// exception: the jquery validate 'range' method\n\t\t\t\t// does not test for the html5 'range' type\n\t\t\t\trules[ method ] = true;\n\t\t\t}\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar method, value,\n\t\t\trules = {}, $element = $( element );\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tif ( value !== undefined ) {\n\t\t\t\trules[ method ] = value;\n\t\t\t}\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each([ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t});\n\t\t$.each([ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace(/[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn $.trim( value ).length > 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\t\t\t// From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional( element ) || /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/creditcard-method/\n\t\t// based on http://en.wikipedia.org/wiki/Luhn/\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false,\n\t\t\t\tn, cDigit;\n\n\t\t\tvalue = value.replace( /\\D/g, \"\" );\n\n\t\t\t// Basing min and max length on\n\t\t\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\n\t\t\tif ( value.length < 13 || value.length > 19 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( n = value.length - 1; n >= 0; n--) {\n\t\t\t\tcDigit = value.charAt( n );\n\t\t\t\tnDigit = parseInt( cDigit, 10 );\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn ( nCheck % 10 ) === 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.unbind( \".validate-equalTo\" ).bind( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue( element ),\n\t\t\t\tvalidator, data;\n\n\t\t\tif (!this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[ element.name ].remote;\n\t\t\tthis.settings.messages[ element.name ].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ].remote = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tdelete validator.invalid[ element.name ];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\n\t}\n\n});\n\n$.format = function deprecated() {\n\tthrow \"$.format has been deprecated. Please use $.validator.format instead.\";\n};\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = xhr;\n\t\t}\n\t});\n} else {\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\treturn pendingRequests[port];\n\t\t}\n\t\treturn ajax.apply(this, arguments);\n\t};\n}\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\n\n$.extend($.fn, {\n\tvalidateDelegate: function( delegate, type, handler ) {\n\t\treturn this.bind(type, function( event ) {\n\t\t\tvar target = $(event.target);\n\t\t\tif ( target.is(delegate) ) {\n\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t}\n\t\t});\n\t}\n});\n\n}));"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/jquery.validate.unobtrusive.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n** Unobtrusive validation support library for jQuery and jQuery Validate\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n        if (container) {\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this);\n        $form.data(\"validator\").resetForm();\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n                .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            }\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                                  .addBack()\n                                  .filter(\"form\")\n                                  .add($selector.find(\"form\"))\n                                  .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                return $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\").val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n}(jQuery));"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/modernizr-2.8.3.js",
    "content": "/*!\n * Modernizr v2.8.3\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.8.3',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq) && matchMedia(mq).matches || false;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   goo.gl/v3V4Gp\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /**\n     * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n     */\n    ;(function(window, document) {\n        /*jshint evil:true */\n        /** version */\n        var version = '3.7.0';\n\n        /** Preset options */\n        var options = window.html5 || {};\n\n        /** Used to skip problem elements */\n        var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n        /** Not all elements can be cloned in IE **/\n        var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n        /** Detect whether the browser supports default html5 styles */\n        var supportsHtml5Styles;\n\n        /** Name of the expando, to work with multiple documents or to re-shiv one document */\n        var expando = '_html5shiv';\n\n        /** The id for the the documents expando */\n        var expanID = 0;\n\n        /** Cached data for each document */\n        var expandoData = {};\n\n        /** Detect whether the browser supports unknown elements */\n        var supportsUnknownElements;\n\n        (function() {\n          try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n          } catch(e) {\n            // assign a false positive if detection fails => unable to shiv\n            supportsHtml5Styles = true;\n            supportsUnknownElements = true;\n          }\n\n        }());\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Creates a style sheet with the given CSS text and adds it to the document.\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @param {String} cssText The CSS text.\n         * @returns {StyleSheet} The style element.\n         */\n        function addStyleSheet(ownerDocument, cssText) {\n          var p = ownerDocument.createElement('p'),\n          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n          p.innerHTML = 'x<style>' + cssText + '</style>';\n          return parent.insertBefore(p.lastChild, parent.firstChild);\n        }\n\n        /**\n         * Returns the value of `html5.elements` as an array.\n         * @private\n         * @returns {Array} An array of shived element node names.\n         */\n        function getElements() {\n          var elements = html5.elements;\n          return typeof elements == 'string' ? elements.split(' ') : elements;\n        }\n\n        /**\n         * Returns the data associated to the given document\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @returns {Object} An object of data.\n         */\n        function getExpandoData(ownerDocument) {\n          var data = expandoData[ownerDocument[expando]];\n          if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n          }\n          return data;\n        }\n\n        /**\n         * returns a shived element for the given nodeName and document\n         * @memberOf html5\n         * @param {String} nodeName name of the element\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived element.\n         */\n        function createElement(nodeName, ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n          }\n          if (!data) {\n            data = getExpandoData(ownerDocument);\n          }\n          var node;\n\n          if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n          } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n          } else {\n            node = data.createElem(nodeName);\n          }\n\n          // Avoid adding some elements to fragments in IE < 9 because\n          // * Attributes like `name` or `type` cannot be set/changed once an element\n          //   is inserted into a document/fragment\n          // * Link elements with `src` attributes that are inaccessible, as with\n          //   a 403 response, will cause the tab/window to crash\n          // * Script elements appended to fragments will execute when their `src`\n          //   or `text` property is set\n          return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n        }\n\n        /**\n         * returns a shived DocumentFragment for the given document\n         * @memberOf html5\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived DocumentFragment.\n         */\n        function createDocumentFragment(ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n          }\n          data = data || getExpandoData(ownerDocument);\n          var clone = data.frag.cloneNode(),\n          i = 0,\n          elems = getElements(),\n          l = elems.length;\n          for(;i<l;i++){\n            clone.createElement(elems[i]);\n          }\n          return clone;\n        }\n\n        /**\n         * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n         * @private\n         * @param {Document|DocumentFragment} ownerDocument The document.\n         * @param {Object} data of the document.\n         */\n        function shivMethods(ownerDocument, data) {\n          if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n          }\n\n\n          ownerDocument.createElement = function(nodeName) {\n            //abort shiv\n            if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n            }\n            return createElement(nodeName, ownerDocument, data);\n          };\n\n          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n                                                          'var n=f.cloneNode(),c=n.createElement;' +\n                                                          'h.shivMethods&&(' +\n                                                          // unroll the `createElement` calls\n                                                          getElements().join().replace(/[\\w\\-]+/g, function(nodeName) {\n            data.createElem(nodeName);\n            data.frag.createElement(nodeName);\n            return 'c(\"' + nodeName + '\")';\n          }) +\n            ');return n}'\n                                                         )(html5, data.frag);\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Shivs the given document.\n         * @memberOf html5\n         * @param {Document} ownerDocument The document to shiv.\n         * @returns {Document} The shived document.\n         */\n        function shivDocument(ownerDocument) {\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          var data = getExpandoData(ownerDocument);\n\n          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n            data.hasCSS = !!addStyleSheet(ownerDocument,\n                                          // corrects block display not defined in IE6/7/8/9\n                                          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +\n                                            // adds styling not present in IE6/7/8/9\n                                            'mark{background:#FF0;color:#000}' +\n                                            // hides non-rendered elements\n                                            'template{display:none}'\n                                         );\n          }\n          if (!supportsUnknownElements) {\n            shivMethods(ownerDocument, data);\n          }\n          return ownerDocument;\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * The `html5` object is exposed so that more elements can be shived and\n         * existing shiving can be detected on iframes.\n         * @type Object\n         * @example\n         *\n         * // options can be changed before the script is included\n         * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n         */\n        var html5 = {\n\n          /**\n           * An array or space separated string of node names of the elements to shiv.\n           * @memberOf html5\n           * @type Array|String\n           */\n          'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',\n\n          /**\n           * current version of html5shiv\n           */\n          'version': version,\n\n          /**\n           * A flag to indicate that the HTML5 style sheet should be inserted.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivCSS': (options.shivCSS !== false),\n\n          /**\n           * Is equal to true if a browser supports creating unknown/HTML5 elements\n           * @memberOf html5\n           * @type boolean\n           */\n          'supportsUnknownElements': supportsUnknownElements,\n\n          /**\n           * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n           * methods should be overwritten.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivMethods': (options.shivMethods !== false),\n\n          /**\n           * A string to describe the type of `html5` object (\"default\" or \"default print\").\n           * @memberOf html5\n           * @type String\n           */\n          'type': 'default',\n\n          // shivs the document according to the specified `html5` object options\n          'shivDocument': shivDocument,\n\n          //creates a shived element\n          createElement: createElement,\n\n          //creates a shived documentFragment\n          createDocumentFragment: createDocumentFragment\n        };\n\n        /*--------------------------------------------------------------------------*/\n\n        // expose html5\n        window.html5 = html5;\n\n        // shiv the document\n        shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/respond.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Scripts/respond.matchmedia.addListener.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n(function(w) {\n  \"use strict\";\n  if (w.matchMedia && w.matchMedia(\"all\").addListener) {\n    return false;\n  }\n  var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia(\"only all\").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) {\n    w.clearTimeout(timeoutID);\n    timeoutID = w.setTimeout(function() {\n      for (var i = 0, il = queries.length; i < il; i++) {\n        var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches;\n        if (matches !== mql.matches) {\n          mql.matches = matches;\n          for (var j = 0, jl = listeners.length; j < jl; j++) {\n            listeners[j].call(w, mql);\n          }\n        }\n      }\n    }, 30);\n  };\n  w.matchMedia = function(media) {\n    var mql = localMatchMedia(media), listeners = [], index = 0;\n    mql.addListener = function(listener) {\n      if (!hasMediaQueries) {\n        return;\n      }\n      if (!isListening) {\n        isListening = true;\n        w.addEventListener(\"resize\", handleChange, true);\n      }\n      if (index === 0) {\n        index = queries.push({\n          mql: mql,\n          listeners: listeners\n        });\n      }\n      listeners.push(listener);\n    };\n    mql.removeListener = function(listener) {\n      for (var i = 0, il = listeners.length; i < il; i++) {\n        if (listeners[i] === listener) {\n          listeners.splice(i, 1);\n        }\n      }\n    };\n    return mql;\n  };\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Startup.cs",
    "content": "﻿using Microsoft.Owin;\nusing Owin;\n\n[assembly: OwinStartupAttribute(typeof(Linq2TwitterDemos_MVC.Startup))]\nnamespace Linq2TwitterDemos_MVC\n{\n    public partial class Startup\n    {\n        public void Configuration(IAppBuilder app)\n        {\n            ConfigureAuth(app);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/ExternalLoginConfirmation.cshtml",
    "content": "﻿@model Linq2TwitterDemos_MVC.Models.ExternalLoginConfirmationViewModel\n@{\n    ViewBag.Title = \"Register\";\n}\n<h2>@ViewBag.Title.</h2>\n<h3>Associate your @ViewBag.LoginProvider account.</h3>\n\n@using (Html.BeginForm(\"ExternalLoginConfirmation\", \"Account\", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n\n    <h4>Association Form</h4>\n    <hr />\n    @Html.ValidationSummary(true)\n    <p class=\"text-info\">\n        You've successfully authenticated with <strong>@ViewBag.LoginProvider</strong>.\n            Please enter a user name for this site below and click the Register button to finish\n            logging in.\n    </p>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.UserName, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.UserName, new { @class = \"form-control\" })\n            @Html.ValidationMessageFor(m => m.UserName)\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Register\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/ExternalLoginFailure.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Login Failure\";\n}\n\n<h2>@ViewBag.Title.</h2>\n<h3 class=\"text-error\">Unsuccessful login with service.</h3>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/Login.cshtml",
    "content": "﻿@model Linq2TwitterDemos_MVC.Models.LoginViewModel\n\n@{\n    ViewBag.Title = \"Log in\";\n}\n\n<h2>@ViewBag.Title.</h2>\n<div class=\"row\">\n    <div class=\"col-md-8\">\n        <section id=\"loginForm\">\n            @using (Html.BeginForm(\"Login\", \"Account\", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n            {\n                @Html.AntiForgeryToken()\n                <h4>Use a local account to log in.</h4>\n                <hr />\n                @Html.ValidationSummary(true)\n                <div class=\"form-group\">\n                    @Html.LabelFor(m => m.UserName, new { @class = \"col-md-2 control-label\" })\n                    <div class=\"col-md-10\">\n                        @Html.TextBoxFor(m => m.UserName, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(m => m.UserName)\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n                    <div class=\"col-md-10\">\n                        @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(m => m.Password)\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <div class=\"col-md-offset-2 col-md-10\">\n                        <div class=\"checkbox\">\n                            @Html.CheckBoxFor(m => m.RememberMe)\n                            @Html.LabelFor(m => m.RememberMe)\n                        </div>\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <div class=\"col-md-offset-2 col-md-10\">\n                        <input type=\"submit\" value=\"Log in\" class=\"btn btn-default\" />\n                    </div>\n                </div>\n                <p>\n                    @Html.ActionLink(\"Register\", \"Register\") if you don't have a local account.\n                </p>\n            }\n        </section>\n    </div>\n    <div class=\"col-md-4\">\n        <section id=\"socialLoginForm\">\n            @Html.Partial(\"_ExternalLoginsListPartial\", new { Action = \"ExternalLogin\", ReturnUrl = ViewBag.ReturnUrl })\n        </section>\n    </div>\n</div>\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/Manage.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Manage Account\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n<p class=\"text-success\">@ViewBag.StatusMessage</p>\n<div class=\"row\">\n    <div class=\"col-md-12\">\n        @if (ViewBag.HasLocalPassword)\n        {\n            @Html.Partial(\"_ChangePasswordPartial\")\n        }\n        else\n        {\n            @Html.Partial(\"_SetPasswordPartial\")\n        }\n\n        <section id=\"externalLogins\">\n            @Html.Action(\"RemoveAccountList\")\n            @Html.Partial(\"_ExternalLoginsListPartial\", new { Action = \"LinkLogin\", ReturnUrl = ViewBag.ReturnUrl })\n        </section>\n    </div>\n</div>\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/Register.cshtml",
    "content": "﻿@model Linq2TwitterDemos_MVC.Models.RegisterViewModel\n@{\n    ViewBag.Title = \"Register\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"Register\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Create a new account.</h4>\n    <hr />\n    @Html.ValidationSummary()\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.UserName, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.UserName, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Register\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/_ChangePasswordPartial.cshtml",
    "content": "﻿@using Microsoft.AspNet.Identity\n@model Linq2TwitterDemos_MVC.Models.ManageUserViewModel\n\n<p>You're logged in as <strong>@User.Identity.GetUserName()</strong>.</p>\n\n@using (Html.BeginForm(\"Manage\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Change Password Form</h4>\n    <hr />\n    @Html.ValidationSummary()\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.OldPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.OldPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.NewPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.NewPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" value=\"Change password\" class=\"btn btn-default\" />\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/_ExternalLoginsListPartial.cshtml",
    "content": "﻿@using Microsoft.Owin.Security\n\n<h4>Use another service to log in.</h4>\n<hr />\n@{\n    var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes();\n    if (loginProviders.Count() == 0)\n    {\n        <div>\n            <p>There are no external authentication services configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=313242\">this article</a>\n            for details on setting up this ASP.NET application to support logging in via external services.</p>\n        </div>\n    }\n    else\n    {\n        string action = Model.Action;\n        string returnUrl = Model.ReturnUrl;\n        using (Html.BeginForm(action, \"Account\", new { ReturnUrl = returnUrl }))\n        {\n            @Html.AntiForgeryToken()\n            <div id=\"socialLoginList\">\n                <p>\n                @foreach (AuthenticationDescription p in loginProviders)\n                {\n                    <button type=\"submit\" class=\"btn btn-default\" id=\"@p.AuthenticationType\" name=\"provider\" value=\"@p.AuthenticationType\" title=\"Log in using your @p.Caption account\">@p.AuthenticationType</button>\n                }\n                </p>\n            </div>\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/_RemoveAccountPartial.cshtml",
    "content": "﻿@model ICollection<Microsoft.AspNet.Identity.UserLoginInfo>\n\n@if (Model.Count > 0)\n{\n    <h4>Registered Logins</h4>\n    <table class=\"table\">\n        <tbody>\n            @foreach (var account in Model)\n            {\n                <tr>\n                    <td>@account.LoginProvider</td>\n                    <td>\n                        @if (ViewBag.ShowRemoveButton)\n                        {\n                            using (Html.BeginForm(\"Disassociate\", \"Account\"))\n                            {\n                            @Html.AntiForgeryToken()\n                            <div>\n                                @Html.Hidden(\"loginProvider\", account.LoginProvider)\n                                @Html.Hidden(\"providerKey\", account.ProviderKey)\n                                <input type=\"submit\" class=\"btn btn-default\" value=\"Remove\" title=\"Remove this @account.LoginProvider login from your account\" />\n                            </div>\n                            }\n                        }\n                        else\n                        {\n                            @: &nbsp;\n                        }\n                    </td>\n                </tr>\n            }\n        </tbody>\n    </table>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Account/_SetPasswordPartial.cshtml",
    "content": "﻿@model Linq2TwitterDemos_MVC.Models.ManageUserViewModel\n\n<p class=\"text-info\">\n    You do not have a local username/password for this site. Add a local\n    account so you can log in without an external login.\n</p>\n\n@using (Html.BeginForm(\"Manage\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n\n    <h4>Create Local Login</h4>\n    <hr />\n    @Html.ValidationSummary()\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.NewPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.NewPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" value=\"Set password\" class=\"btn btn-default\" />\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Home/About.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"About\";\n}\n<h2>@ViewBag.Title.</h2>\n<h3>@ViewBag.Message</h3>\n\n<p>Use this area to provide additional information.</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Home/Contact.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Contact\";\n}\n<h2>@ViewBag.Title.</h2>\n<h3>@ViewBag.Message</h3>\n\n<address>\n    One Microsoft Way<br />\n    Redmond, WA 98052-6399<br />\n    <abbr title=\"Phone\">P:</abbr>\n    425.555.0100\n</address>\n\n<address>\n    <strong>Support:</strong>   <a href=\"mailto:Support@example.com\">Support@example.com</a><br />\n    <strong>Marketing:</strong> <a href=\"mailto:Marketing@example.com\">Marketing@example.com</a>\n</address>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Home/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Home Page\";\n}\n\n<div class=\"jumbotron\">\n    <h1>LINQ to Twitter</h1>\n    <p class=\"lead\">LINQ to Twitter is an open-source 3rd party library for working with the Twitter API. Please select a menu item to view demos for how LINQ to Twitter supports each category of the Twitter API.</p>\n    <p><a href=\"http://linqtotwitter.codeplex.com\" class=\"btn btn-primary btn-large\">Learn more &raquo;</a></p>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>Getting started</h2>\n        <p>\n            LINQ to Twitter has extensive documentation. You can get basic guidance, security info, and specifications for each API. Be sure to check out the FAQ too.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/documentation\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get help</h2>\n        <p>\n            When these demos don't have the info you need, you can still get help through the discussion forums. Tip: the Search box is often helpful in finding answers.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/discussions\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get the code</h2>\n        <p>\n            You can download the code from the LINQ to Twitter site on CodePlex.com, but the most convenient way to use LINQ to Twitter is via NuGet.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"http://www.nuget.org/packages/linqtotwitter\">Learn more &raquo;</a>\n        </p>\n    </div>\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/OAuth/Index.cshtml",
    "content": "﻿\n@{\n    ViewBag.Title = \"Authorizing Application\";\n}\n\n<h2>Authorize with OAuth</h2>\n@Html.ActionLink(\"Begin the Authorization Process\", \"Begin\")\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Shared/Error.cshtml",
    "content": "﻿@model System.Web.Mvc.HandleErrorInfo\n\n@{\n    ViewBag.Title = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>@ViewBag.Title - LINQ to Twitter Demos</title>\n    @Styles.Render(\"~/Content/css\")\n    @Scripts.Render(\"~/bundles/modernizr\")\n\n</head>\n<body>\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n        <div class=\"container\">\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                </button>\n                @Html.ActionLink(\"Application name\", \"Index\", \"Home\", null, new { @class = \"navbar-brand\" })\n            </div>\n            <div class=\"navbar-collapse collapse\">\n                <ul class=\"nav navbar-nav\">\n                    <li>@Html.ActionLink(\"Home\", \"Index\", \"Home\")</li>\n                    <li>@Html.ActionLink(\"Status\", \"Index\", \"StatusDemos\")</li>\n                </ul>\n                @Html.Partial(\"_LoginPartial\")\n            </div>\n        </div>\n    </div>\n    <div class=\"container body-content\">\n        @RenderBody()\n        <hr />\n        <footer>\n            <p>&copy; @DateTime.Now.Year - LINQ to Twitter Demos</p>\n        </footer>\n    </div>\n\n    @Scripts.Render(\"~/bundles/jquery\")\n    @Scripts.Render(\"~/bundles/bootstrap\")\n    @RenderSection(\"scripts\", required: false)\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Shared/_LoginPartial.cshtml",
    "content": "﻿@using Microsoft.AspNet.Identity\n@if (Request.IsAuthenticated)\n{\n    using (Html.BeginForm(\"LogOff\", \"Account\", FormMethod.Post, new { id = \"logoutForm\", @class = \"navbar-right\" }))\n    {\n    @Html.AntiForgeryToken()\n\n    <ul class=\"nav navbar-nav navbar-right\">\n        <li>\n            @Html.ActionLink(\"Hello \" + User.Identity.GetUserName() + \"!\", \"Manage\", \"Account\", routeValues: null, htmlAttributes: new { title = \"Manage\" })\n        </li>\n        <li><a href=\"javascript:document.getElementById('logoutForm').submit()\">Log off</a></li>\n    </ul>\n    }\n}\nelse\n{\n    <ul class=\"nav navbar-nav navbar-right\">\n        <li>@Html.ActionLink(\"Register\", \"Register\", \"Account\", routeValues: null, htmlAttributes: new { id = \"registerLink\" })</li>\n        <li>@Html.ActionLink(\"Log in\", \"Login\", \"Account\", routeValues: null, htmlAttributes: new { id = \"loginLink\" })</li>\n    </ul>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/StatusDemos/HomeTimeline.cshtml",
    "content": "﻿@model IEnumerable<Linq2TwitterDemos_MVC.Models.TweetViewModel>\n\n@{\n    ViewBag.Title = \"Home Timeline\";\n}\n\n<h2>Home Timeline Demo</h2>\n\n<table class=\"table\">\n    <tr>\n        <th>\n            @Html.DisplayNameFor(model => model.ImageUrl)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.ScreenName)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.Text)\n        </th>\n        <th></th>\n    </tr>\n\n@foreach (var item in Model) {\n    <tr>\n        <td>\n            <img src=\"@item.ImageUrl\" alt=\"@item.ScreenName\" />\n        </td>\n        <td>\n            @Html.DisplayFor(modelItem => item.ScreenName)\n        </td>\n        <td>\n            @Html.DisplayFor(modelItem => item.Text)\n        </td>\n    </tr>\n}\n\n</table>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/StatusDemos/Index.cshtml",
    "content": "﻿\n@{\n    ViewBag.Title = \"Status Demos\";\n}\n\n<h2>Status Demos</h2>\n\n<p>@Html.ActionLink(\"Tweet Demo\", \"Tweet\")</p>\n\n<p>@Html.ActionLink(\"Home Timeline Demo\", \"HomeTimeline\")</p>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/StatusDemos/Tweet.cshtml",
    "content": "﻿@model Linq2TwitterDemos_MVC.Models.SendTweetViewModel\n\n@{\n    ViewBag.Title = \"Tweet\";\n}\n\n<h2>Tweet</h2>\n\n@using (Html.BeginForm())\n{\n    @Html.AntiForgeryToken()\n    \n    <div class=\"form-horizontal\">\n        <h4>Tweet Demo</h4>\n        <hr />\n        @Html.ValidationSummary(true)\n        <div class=\"form-group\">\n            @Html.LabelFor(model => model.Text, new { @class = \"control-label col-md-2\" })\n            <div class=\"col-md-10\">\n                @Html.TextAreaFor(model => model.Text, new { @class = \"form-control\", rows = \"3\" })\n                @Html.ValidationMessageFor(model => model.Text)\n            </div>\n        </div>\n\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <input type=\"submit\" value=\"Send\" class=\"btn btn-default\" />\n            </div>\n        </div>\n        <div class=\"col-md-offset-2 col-md-10\">\n            @Html.DisplayFor(model => model.Response)\n        </div>\n    </div>\n}\n\n<div>\n    @Html.ActionLink(\"Back to List\", \"Index\")\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"Linq2TwitterDemos_MVC\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.webServer>\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an atrribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an atrribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=301880\n  -->\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=(LocalDb)\\v11.0;AttachDbFilename=|DataDirectory|\\aspnet-Linq2TwitterDemos_MVC-20131030074232.mdf;Initial Catalog=aspnet-Linq2TwitterDemos_MVC-20131030074232;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <add key=\"webpages:Version\" value=\"3.0.0.0\" />\n    <add key=\"webpages:Enabled\" value=\"false\" />\n    <add key=\"ClientValidationEnabled\" value=\"true\" />\n    <add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />\n    \n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"hDnnFfU8eQ7PQ06TxQdNA\" />\n    <add key=\"consumerSecret\" value=\"ML1fIlZUuEsMr5BU9Q3zNI3RF6NHWhUCOrFlMr4dLM\" />\n    <add key=\"oauthToken\" value=\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\" />\n    <add key=\"oauthTokenSecret\" value=\"SAAyHEC0osRcZkvrGhzsU9TCMb4klIf9K3abZ294o8\" />\n    <add key=\"accessToken\" value=\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\" />\n    <add key=\"accessTokenSecret\" value=\"SAAyHEC0osRcZkvrGhzsU9TCMb4klIf9K3abZ294o8\" />\n  </appSettings>\n  <system.web>\n    <!-- Remember to use StateServer or SQLServer state management \n         if you're using SessionStateCredentialStore -->\n    <sessionState mode=\"StateServer\" />\n    \n    <authentication mode=\"None\" />\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <httpRuntime targetFramework=\"4.5\" />\n  </system.web>\n  <system.webServer>\n    <modules>\n      <remove name=\"FormsAuthenticationModule\" />\n    </modules>\n  <handlers>\n      <remove name=\"ExtensionlessUrlHandler-Integrated-4.0\" />\n      <remove name=\"OPTIONSVerbHandler\" />\n      <remove name=\"TRACEVerbHandler\" />\n      <add name=\"ExtensionlessUrlHandler-Integrated-4.0\" path=\"*.\" verb=\"*\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n    </handlers></system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.5.2.14234\" newVersion=\"1.5.2.14234\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.5.0.0\" newVersion=\"4.5.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Formatting\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.2.0\" newVersion=\"5.2.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Http\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.2.0\" newVersion=\"5.2.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.AspNet.Identity.Core\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.0.0.0\" newVersion=\"2.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-5.2.2.0\" newVersion=\"5.2.2.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework\" />\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_MVCOld/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net45\" />\n  <package id=\"bootstrap\" version=\"4.3.1\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework\" version=\"6.1.2-beta2\" targetFramework=\"net45\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net45\" />\n  <package id=\"jQuery.Validation\" version=\"1.19.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"2.2.0-alpha1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"2.2.0-alpha1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.2.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi\" version=\"5.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost\" version=\"5.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Validation\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Host.SystemWeb\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" />\n  <package id=\"Modernizr\" version=\"2.8.3\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" />\n  <package id=\"Respond\" version=\"1.4.2\" targetFramework=\"net45\" />\n  <package id=\"WebGrease\" version=\"1.5.2\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/App_Start/BundleConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Optimization;\n\nnamespace Linq2TwitterDemos_Mvc\n{\n    public class BundleConfig\n    {\n        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/jquery\").Include(\n                        \"~/Scripts/jquery-{version}.js\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/jqueryval\").Include(\n                        \"~/Scripts/jquery.validate*\"));\n\n            // Use the development version of Modernizr to develop with and learn from. Then, when you're\n            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                        \"~/Scripts/modernizr-*\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/bootstrap\").Include(\n                      \"~/Scripts/bootstrap.js\",\n                      \"~/Scripts/respond.js\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/css\").Include(\n                      \"~/Content/bootstrap.css\",\n                      \"~/Content/site.css\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/App_Start/FilterConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Mvc;\n\nnamespace Linq2TwitterDemos_Mvc\n{\n    public class FilterConfig\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters)\n        {\n            filters.Add(new HandleErrorAttribute());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/App_Start/IdentityConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data.Entity;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security;\nusing Linq2TwitterDemos_Mvc.Models;\n\nnamespace Linq2TwitterDemos_Mvc\n{\n    public class EmailService : IIdentityMessageService\n    {\n        public Task SendAsync(IdentityMessage message)\n        {\n            // Plug in your email service here to send an email.\n            return Task.FromResult(0);\n        }\n    }\n\n    public class SmsService : IIdentityMessageService\n    {\n        public Task SendAsync(IdentityMessage message)\n        {\n            // Plug in your SMS service here to send a text message.\n            return Task.FromResult(0);\n        }\n    }\n\n    // Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.\n    public class ApplicationUserManager : UserManager<ApplicationUser>\n    {\n        public ApplicationUserManager(IUserStore<ApplicationUser> store)\n            : base(store)\n        {\n        }\n\n        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) \n        {\n            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));\n            // Configure validation logic for usernames\n            manager.UserValidator = new UserValidator<ApplicationUser>(manager)\n            {\n                AllowOnlyAlphanumericUserNames = false,\n                RequireUniqueEmail = true\n            };\n\n            // Configure validation logic for passwords\n            manager.PasswordValidator = new PasswordValidator\n            {\n                RequiredLength = 6,\n                RequireNonLetterOrDigit = true,\n                RequireDigit = true,\n                RequireLowercase = true,\n                RequireUppercase = true,\n            };\n\n            // Configure user lockout defaults\n            manager.UserLockoutEnabledByDefault = true;\n            manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);\n            manager.MaxFailedAccessAttemptsBeforeLockout = 5;\n\n            // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user\n            // You can write your own provider and plug it in here.\n            manager.RegisterTwoFactorProvider(\"Phone Code\", new PhoneNumberTokenProvider<ApplicationUser>\n            {\n                MessageFormat = \"Your security code is {0}\"\n            });\n            manager.RegisterTwoFactorProvider(\"Email Code\", new EmailTokenProvider<ApplicationUser>\n            {\n                Subject = \"Security Code\",\n                BodyFormat = \"Your security code is {0}\"\n            });\n            manager.EmailService = new EmailService();\n            manager.SmsService = new SmsService();\n            var dataProtectionProvider = options.DataProtectionProvider;\n            if (dataProtectionProvider != null)\n            {\n                manager.UserTokenProvider = \n                    new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create(\"ASP.NET Identity\"));\n            }\n            return manager;\n        }\n    }\n\n    // Configure the application sign-in manager which is used in this application.\n    public class ApplicationSignInManager : SignInManager<ApplicationUser, string>\n    {\n        public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager)\n            : base(userManager, authenticationManager)\n        {\n        }\n\n        public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)\n        {\n            return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager);\n        }\n\n        public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context)\n        {\n            return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/App_Start/RouteConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Web.Routing;\n\nnamespace Linq2TwitterDemos_Mvc\n{\n    public class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            routes.MapRoute(\n                name: \"Default\",\n                url: \"{controller}/{action}/{id}\",\n                defaults: new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/App_Start/Startup.Auth.cs",
    "content": "﻿using System;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.Google;\nusing Owin;\nusing Linq2TwitterDemos_Mvc.Models;\n\nnamespace Linq2TwitterDemos_Mvc\n{\n    public partial class Startup\n    {\n        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864\n        public void ConfigureAuth(IAppBuilder app)\n        {\n            // Configure the db context, user manager and signin manager to use a single instance per request\n            app.CreatePerOwinContext(ApplicationDbContext.Create);\n            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);\n            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);\n\n            // Enable the application to use a cookie to store information for the signed in user\n            // and to use a cookie to temporarily store information about a user logging in with a third party login provider\n            // Configure the sign in cookie\n            app.UseCookieAuthentication(new CookieAuthenticationOptions\n            {\n                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,\n                LoginPath = new PathString(\"/Account/Login\"),\n                Provider = new CookieAuthenticationProvider\n                {\n                    // Enables the application to validate the security stamp when the user logs in.\n                    // This is a security feature which is used when you change a password or add an external login to your account.  \n                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(\n                        validateInterval: TimeSpan.FromMinutes(30),\n                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))\n                }\n            });            \n            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);\n\n            // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.\n            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));\n\n            // Enables the application to remember the second login verification factor such as phone or email.\n            // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.\n            // This is similar to the RememberMe option when you log in.\n            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);\n\n            // Uncomment the following lines to enable logging in with third party login providers\n            //app.UseMicrosoftAccountAuthentication(\n            //    clientId: \"\",\n            //    clientSecret: \"\");\n\n            //app.UseTwitterAuthentication(\n            //   consumerKey: \"\",\n            //   consumerSecret: \"\");\n\n            //app.UseFacebookAuthentication(\n            //   appId: \"\",\n            //   appSecret: \"\");\n\n            //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()\n            //{\n            //    ClientId = \"\",\n            //    ClientSecret = \"\"\n            //});\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Content/Site.css",
    "content": "﻿body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Set padding to keep content from hitting the edges */\n.body-content {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n/* Override the default bootstrap behavior where horizontal description lists \n   will truncate terms that are too long to fit in the left column \n*/\n.dl-horizontal dt {\n    white-space: normal;\n}\n\n/* Set width on the form input elements since they're 100% wide by default */\ninput,\nselect,\ntextarea {\n    max-width: 280px;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Content/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default:disabled,\n.btn-default[disabled] {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary:disabled,\n.btn-primary[disabled] {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success:disabled,\n.btn-success[disabled] {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info:disabled,\n.btn-info[disabled] {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning:disabled,\n.btn-warning[disabled] {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger:disabled,\n.btn-danger[disabled] {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Content/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n  height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n  visibility: hidden;\n}\n.collapse.in {\n  display: block;\n  visibility: visible;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n  visibility: hidden;\n}\n.tab-content > .active {\n  display: block;\n  visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n    visibility: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px 15px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding: 48px 0;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-weight: normal;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000;\n            perspective: 1000;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Controllers/AccountController.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing System.Web;\nusing System.Web.Mvc;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Linq2TwitterDemos_Mvc.Models;\n\nnamespace Linq2TwitterDemos_Mvc.Controllers\n{\n    [Authorize]\n    public class AccountController : Controller\n    {\n        private ApplicationSignInManager _signInManager;\n        private ApplicationUserManager _userManager;\n\n        public AccountController()\n        {\n        }\n\n        public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )\n        {\n            UserManager = userManager;\n            SignInManager = signInManager;\n        }\n\n        public ApplicationSignInManager SignInManager\n        {\n            get\n            {\n                return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();\n            }\n            private set \n            { \n                _signInManager = value; \n            }\n        }\n\n        public ApplicationUserManager UserManager\n        {\n            get\n            {\n                return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            }\n            private set\n            {\n                _userManager = value;\n            }\n        }\n\n        //\n        // GET: /Account/Login\n        [AllowAnonymous]\n        public ActionResult Login(string returnUrl)\n        {\n            ViewBag.ReturnUrl = returnUrl;\n            return View();\n        }\n\n        //\n        // POST: /Account/Login\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n\n            // This doesn't count login failures towards account lockout\n            // To enable password failures to trigger account lockout, change to shouldLockout: true\n            var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);\n            switch (result)\n            {\n                case SignInStatus.Success:\n                    return RedirectToLocal(returnUrl);\n                case SignInStatus.LockedOut:\n                    return View(\"Lockout\");\n                case SignInStatus.RequiresVerification:\n                    return RedirectToAction(\"SendCode\", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });\n                case SignInStatus.Failure:\n                default:\n                    ModelState.AddModelError(\"\", \"Invalid login attempt.\");\n                    return View(model);\n            }\n        }\n\n        //\n        // GET: /Account/VerifyCode\n        [AllowAnonymous]\n        public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe)\n        {\n            // Require that the user has already logged in via username/password or external login\n            if (!await SignInManager.HasBeenVerifiedAsync())\n            {\n                return View(\"Error\");\n            }\n            return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe });\n        }\n\n        //\n        // POST: /Account/VerifyCode\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> VerifyCode(VerifyCodeViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n\n            // The following code protects for brute force attacks against the two factor codes. \n            // If a user enters incorrect codes for a specified amount of time then the user account \n            // will be locked out for a specified amount of time. \n            // You can configure the account lockout settings in IdentityConfig\n            var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent:  model.RememberMe, rememberBrowser: model.RememberBrowser);\n            switch (result)\n            {\n                case SignInStatus.Success:\n                    return RedirectToLocal(model.ReturnUrl);\n                case SignInStatus.LockedOut:\n                    return View(\"Lockout\");\n                case SignInStatus.Failure:\n                default:\n                    ModelState.AddModelError(\"\", \"Invalid code.\");\n                    return View(model);\n            }\n        }\n\n        //\n        // GET: /Account/Register\n        [AllowAnonymous]\n        public ActionResult Register()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Account/Register\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> Register(RegisterViewModel model)\n        {\n            if (ModelState.IsValid)\n            {\n                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };\n                var result = await UserManager.CreateAsync(user, model.Password);\n                if (result.Succeeded)\n                {\n                    await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);\n                    \n                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                    // Send an email with this link\n                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);\n                    // var callbackUrl = Url.Action(\"ConfirmEmail\", \"Account\", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);\n                    // await UserManager.SendEmailAsync(user.Id, \"Confirm your account\", \"Please confirm your account by clicking <a href=\\\"\" + callbackUrl + \"\\\">here</a>\");\n\n                    return RedirectToAction(\"Index\", \"Home\");\n                }\n                AddErrors(result);\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // GET: /Account/ConfirmEmail\n        [AllowAnonymous]\n        public async Task<ActionResult> ConfirmEmail(string userId, string code)\n        {\n            if (userId == null || code == null)\n            {\n                return View(\"Error\");\n            }\n            var result = await UserManager.ConfirmEmailAsync(userId, code);\n            return View(result.Succeeded ? \"ConfirmEmail\" : \"Error\");\n        }\n\n        //\n        // GET: /Account/ForgotPassword\n        [AllowAnonymous]\n        public ActionResult ForgotPassword()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Account/ForgotPassword\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)\n        {\n            if (ModelState.IsValid)\n            {\n                var user = await UserManager.FindByNameAsync(model.Email);\n                if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))\n                {\n                    // Don't reveal that the user does not exist or is not confirmed\n                    return View(\"ForgotPasswordConfirmation\");\n                }\n\n                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                // Send an email with this link\n                // string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);\n                // var callbackUrl = Url.Action(\"ResetPassword\", \"Account\", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);\t\t\n                // await UserManager.SendEmailAsync(user.Id, \"Reset Password\", \"Please reset your password by clicking <a href=\\\"\" + callbackUrl + \"\\\">here</a>\");\n                // return RedirectToAction(\"ForgotPasswordConfirmation\", \"Account\");\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // GET: /Account/ForgotPasswordConfirmation\n        [AllowAnonymous]\n        public ActionResult ForgotPasswordConfirmation()\n        {\n            return View();\n        }\n\n        //\n        // GET: /Account/ResetPassword\n        [AllowAnonymous]\n        public ActionResult ResetPassword(string code)\n        {\n            return code == null ? View(\"Error\") : View();\n        }\n\n        //\n        // POST: /Account/ResetPassword\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            var user = await UserManager.FindByNameAsync(model.Email);\n            if (user == null)\n            {\n                // Don't reveal that the user does not exist\n                return RedirectToAction(\"ResetPasswordConfirmation\", \"Account\");\n            }\n            var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);\n            if (result.Succeeded)\n            {\n                return RedirectToAction(\"ResetPasswordConfirmation\", \"Account\");\n            }\n            AddErrors(result);\n            return View();\n        }\n\n        //\n        // GET: /Account/ResetPasswordConfirmation\n        [AllowAnonymous]\n        public ActionResult ResetPasswordConfirmation()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Account/ExternalLogin\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public ActionResult ExternalLogin(string provider, string returnUrl)\n        {\n            // Request a redirect to the external login provider\n            return new ChallengeResult(provider, Url.Action(\"ExternalLoginCallback\", \"Account\", new { ReturnUrl = returnUrl }));\n        }\n\n        //\n        // GET: /Account/SendCode\n        [AllowAnonymous]\n        public async Task<ActionResult> SendCode(string returnUrl, bool rememberMe)\n        {\n            var userId = await SignInManager.GetVerifiedUserIdAsync();\n            if (userId == null)\n            {\n                return View(\"Error\");\n            }\n            var userFactors = await UserManager.GetValidTwoFactorProvidersAsync(userId);\n            var factorOptions = userFactors.Select(purpose => new SelectListItem { Text = purpose, Value = purpose }).ToList();\n            return View(new SendCodeViewModel { Providers = factorOptions, ReturnUrl = returnUrl, RememberMe = rememberMe });\n        }\n\n        //\n        // POST: /Account/SendCode\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> SendCode(SendCodeViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View();\n            }\n\n            // Generate the token and send it\n            if (!await SignInManager.SendTwoFactorCodeAsync(model.SelectedProvider))\n            {\n                return View(\"Error\");\n            }\n            return RedirectToAction(\"VerifyCode\", new { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe });\n        }\n\n        //\n        // GET: /Account/ExternalLoginCallback\n        [AllowAnonymous]\n        public async Task<ActionResult> ExternalLoginCallback(string returnUrl)\n        {\n            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();\n            if (loginInfo == null)\n            {\n                return RedirectToAction(\"Login\");\n            }\n\n            // Sign in the user with this external login provider if the user already has a login\n            var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);\n            switch (result)\n            {\n                case SignInStatus.Success:\n                    return RedirectToLocal(returnUrl);\n                case SignInStatus.LockedOut:\n                    return View(\"Lockout\");\n                case SignInStatus.RequiresVerification:\n                    return RedirectToAction(\"SendCode\", new { ReturnUrl = returnUrl, RememberMe = false });\n                case SignInStatus.Failure:\n                default:\n                    // If the user does not have an account, then prompt the user to create an account\n                    ViewBag.ReturnUrl = returnUrl;\n                    ViewBag.LoginProvider = loginInfo.Login.LoginProvider;\n                    return View(\"ExternalLoginConfirmation\", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email });\n            }\n        }\n\n        //\n        // POST: /Account/ExternalLoginConfirmation\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)\n        {\n            if (User.Identity.IsAuthenticated)\n            {\n                return RedirectToAction(\"Index\", \"Manage\");\n            }\n\n            if (ModelState.IsValid)\n            {\n                // Get the information about the user from the external login provider\n                var info = await AuthenticationManager.GetExternalLoginInfoAsync();\n                if (info == null)\n                {\n                    return View(\"ExternalLoginFailure\");\n                }\n                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };\n                var result = await UserManager.CreateAsync(user);\n                if (result.Succeeded)\n                {\n                    result = await UserManager.AddLoginAsync(user.Id, info.Login);\n                    if (result.Succeeded)\n                    {\n                        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n                        return RedirectToLocal(returnUrl);\n                    }\n                }\n                AddErrors(result);\n            }\n\n            ViewBag.ReturnUrl = returnUrl;\n            return View(model);\n        }\n\n        //\n        // POST: /Account/LogOff\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LogOff()\n        {\n            AuthenticationManager.SignOut();\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n\n        //\n        // GET: /Account/ExternalLoginFailure\n        [AllowAnonymous]\n        public ActionResult ExternalLoginFailure()\n        {\n            return View();\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (_userManager != null)\n                {\n                    _userManager.Dispose();\n                    _userManager = null;\n                }\n\n                if (_signInManager != null)\n                {\n                    _signInManager.Dispose();\n                    _signInManager = null;\n                }\n            }\n\n            base.Dispose(disposing);\n        }\n\n        #region Helpers\n        // Used for XSRF protection when adding external logins\n        private const string XsrfKey = \"XsrfId\";\n\n        private IAuthenticationManager AuthenticationManager\n        {\n            get\n            {\n                return HttpContext.GetOwinContext().Authentication;\n            }\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n\n        private ActionResult RedirectToLocal(string returnUrl)\n        {\n            if (Url.IsLocalUrl(returnUrl))\n            {\n                return Redirect(returnUrl);\n            }\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n\n        internal class ChallengeResult : HttpUnauthorizedResult\n        {\n            public ChallengeResult(string provider, string redirectUri)\n                : this(provider, redirectUri, null)\n            {\n            }\n\n            public ChallengeResult(string provider, string redirectUri, string userId)\n            {\n                LoginProvider = provider;\n                RedirectUri = redirectUri;\n                UserId = userId;\n            }\n\n            public string LoginProvider { get; set; }\n            public string RedirectUri { get; set; }\n            public string UserId { get; set; }\n\n            public override void ExecuteResult(ControllerContext context)\n            {\n                var properties = new AuthenticationProperties { RedirectUri = RedirectUri };\n                if (UserId != null)\n                {\n                    properties.Dictionary[XsrfKey] = UserId;\n                }\n                context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);\n            }\n        }\n        #endregion\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web.Mvc;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Mvc.Controllers\n{\n    public class HomeController : Controller\n    {\n        public ActionResult Index()\n        {\n            if (!new SessionStateCredentialStore().HasAllCredentials())\n                return RedirectToAction(\"Index\", \"OAuth\");\n\n            return View();\n        }\n\n        public ActionResult About()\n        {\n            ViewBag.Message = \"Your application description page.\";\n\n            return View();\n        }\n\n        public ActionResult Contact()\n        {\n            ViewBag.Message = \"Your contact page.\";\n\n            return View();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Controllers/ManageController.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web;\nusing System.Web.Mvc;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Linq2TwitterDemos_Mvc.Models;\n\nnamespace Linq2TwitterDemos_Mvc.Controllers\n{\n    [Authorize]\n    public class ManageController : Controller\n    {\n        private ApplicationSignInManager _signInManager;\n        private ApplicationUserManager _userManager;\n\n        public ManageController()\n        {\n        }\n\n        public ManageController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)\n        {\n            UserManager = userManager;\n            SignInManager = signInManager;\n        }\n\n        public ApplicationSignInManager SignInManager\n        {\n            get\n            {\n                return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();\n            }\n            private set \n            { \n                _signInManager = value; \n            }\n        }\n\n        public ApplicationUserManager UserManager\n        {\n            get\n            {\n                return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            }\n            private set\n            {\n                _userManager = value;\n            }\n        }\n\n        //\n        // GET: /Manage/Index\n        public async Task<ActionResult> Index(ManageMessageId? message)\n        {\n            ViewBag.StatusMessage =\n                message == ManageMessageId.ChangePasswordSuccess ? \"Your password has been changed.\"\n                : message == ManageMessageId.SetPasswordSuccess ? \"Your password has been set.\"\n                : message == ManageMessageId.SetTwoFactorSuccess ? \"Your two-factor authentication provider has been set.\"\n                : message == ManageMessageId.Error ? \"An error has occurred.\"\n                : message == ManageMessageId.AddPhoneSuccess ? \"Your phone number was added.\"\n                : message == ManageMessageId.RemovePhoneSuccess ? \"Your phone number was removed.\"\n                : \"\";\n\n            var userId = User.Identity.GetUserId();\n            var model = new IndexViewModel\n            {\n                HasPassword = HasPassword(),\n                PhoneNumber = await UserManager.GetPhoneNumberAsync(userId),\n                TwoFactor = await UserManager.GetTwoFactorEnabledAsync(userId),\n                Logins = await UserManager.GetLoginsAsync(userId),\n                BrowserRemembered = await AuthenticationManager.TwoFactorBrowserRememberedAsync(userId)\n            };\n            return View(model);\n        }\n\n        //\n        // POST: /Manage/RemoveLogin\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> RemoveLogin(string loginProvider, string providerKey)\n        {\n            ManageMessageId? message;\n            var result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));\n            if (result.Succeeded)\n            {\n                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n                if (user != null)\n                {\n                    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n                }\n                message = ManageMessageId.RemoveLoginSuccess;\n            }\n            else\n            {\n                message = ManageMessageId.Error;\n            }\n            return RedirectToAction(\"ManageLogins\", new { Message = message });\n        }\n\n        //\n        // GET: /Manage/AddPhoneNumber\n        public ActionResult AddPhoneNumber()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Manage/AddPhoneNumber\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> AddPhoneNumber(AddPhoneNumberViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            // Generate the token and send it\n            var code = await UserManager.GenerateChangePhoneNumberTokenAsync(User.Identity.GetUserId(), model.Number);\n            if (UserManager.SmsService != null)\n            {\n                var message = new IdentityMessage\n                {\n                    Destination = model.Number,\n                    Body = \"Your security code is: \" + code\n                };\n                await UserManager.SmsService.SendAsync(message);\n            }\n            return RedirectToAction(\"VerifyPhoneNumber\", new { PhoneNumber = model.Number });\n        }\n\n        //\n        // POST: /Manage/EnableTwoFactorAuthentication\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> EnableTwoFactorAuthentication()\n        {\n            await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), true);\n            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n            if (user != null)\n            {\n                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n            }\n            return RedirectToAction(\"Index\", \"Manage\");\n        }\n\n        //\n        // POST: /Manage/DisableTwoFactorAuthentication\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> DisableTwoFactorAuthentication()\n        {\n            await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), false);\n            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n            if (user != null)\n            {\n                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n            }\n            return RedirectToAction(\"Index\", \"Manage\");\n        }\n\n        //\n        // GET: /Manage/VerifyPhoneNumber\n        public async Task<ActionResult> VerifyPhoneNumber(string phoneNumber)\n        {\n            var code = await UserManager.GenerateChangePhoneNumberTokenAsync(User.Identity.GetUserId(), phoneNumber);\n            // Send an SMS through the SMS provider to verify the phone number\n            return phoneNumber == null ? View(\"Error\") : View(new VerifyPhoneNumberViewModel { PhoneNumber = phoneNumber });\n        }\n\n        //\n        // POST: /Manage/VerifyPhoneNumber\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);\n            if (result.Succeeded)\n            {\n                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n                if (user != null)\n                {\n                    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n                }\n                return RedirectToAction(\"Index\", new { Message = ManageMessageId.AddPhoneSuccess });\n            }\n            // If we got this far, something failed, redisplay form\n            ModelState.AddModelError(\"\", \"Failed to verify phone\");\n            return View(model);\n        }\n\n        //\n        // GET: /Manage/RemovePhoneNumber\n        public async Task<ActionResult> RemovePhoneNumber()\n        {\n            var result = await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), null);\n            if (!result.Succeeded)\n            {\n                return RedirectToAction(\"Index\", new { Message = ManageMessageId.Error });\n            }\n            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n            if (user != null)\n            {\n                await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n            }\n            return RedirectToAction(\"Index\", new { Message = ManageMessageId.RemovePhoneSuccess });\n        }\n\n        //\n        // GET: /Manage/ChangePassword\n        public ActionResult ChangePassword()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Manage/ChangePassword\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);\n            if (result.Succeeded)\n            {\n                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n                if (user != null)\n                {\n                    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n                }\n                return RedirectToAction(\"Index\", new { Message = ManageMessageId.ChangePasswordSuccess });\n            }\n            AddErrors(result);\n            return View(model);\n        }\n\n        //\n        // GET: /Manage/SetPassword\n        public ActionResult SetPassword()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Manage/SetPassword\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<ActionResult> SetPassword(SetPasswordViewModel model)\n        {\n            if (ModelState.IsValid)\n            {\n                var result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);\n                if (result.Succeeded)\n                {\n                    var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n                    if (user != null)\n                    {\n                        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);\n                    }\n                    return RedirectToAction(\"Index\", new { Message = ManageMessageId.SetPasswordSuccess });\n                }\n                AddErrors(result);\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // GET: /Manage/ManageLogins\n        public async Task<ActionResult> ManageLogins(ManageMessageId? message)\n        {\n            ViewBag.StatusMessage =\n                message == ManageMessageId.RemoveLoginSuccess ? \"The external login was removed.\"\n                : message == ManageMessageId.Error ? \"An error has occurred.\"\n                : \"\";\n            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var userLogins = await UserManager.GetLoginsAsync(User.Identity.GetUserId());\n            var otherLogins = AuthenticationManager.GetExternalAuthenticationTypes().Where(auth => userLogins.All(ul => auth.AuthenticationType != ul.LoginProvider)).ToList();\n            ViewBag.ShowRemoveButton = user.PasswordHash != null || userLogins.Count > 1;\n            return View(new ManageLoginsViewModel\n            {\n                CurrentLogins = userLogins,\n                OtherLogins = otherLogins\n            });\n        }\n\n        //\n        // POST: /Manage/LinkLogin\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public ActionResult LinkLogin(string provider)\n        {\n            // Request a redirect to the external login provider to link a login for the current user\n            return new AccountController.ChallengeResult(provider, Url.Action(\"LinkLoginCallback\", \"Manage\"), User.Identity.GetUserId());\n        }\n\n        //\n        // GET: /Manage/LinkLoginCallback\n        public async Task<ActionResult> LinkLoginCallback()\n        {\n            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId());\n            if (loginInfo == null)\n            {\n                return RedirectToAction(\"ManageLogins\", new { Message = ManageMessageId.Error });\n            }\n            var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login);\n            return result.Succeeded ? RedirectToAction(\"ManageLogins\") : RedirectToAction(\"ManageLogins\", new { Message = ManageMessageId.Error });\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && _userManager != null)\n            {\n                _userManager.Dispose();\n                _userManager = null;\n            }\n\n            base.Dispose(disposing);\n        }\n\n#region Helpers\n        // Used for XSRF protection when adding external logins\n        private const string XsrfKey = \"XsrfId\";\n\n        private IAuthenticationManager AuthenticationManager\n        {\n            get\n            {\n                return HttpContext.GetOwinContext().Authentication;\n            }\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n\n        private bool HasPassword()\n        {\n            var user = UserManager.FindById(User.Identity.GetUserId());\n            if (user != null)\n            {\n                return user.PasswordHash != null;\n            }\n            return false;\n        }\n\n        private bool HasPhoneNumber()\n        {\n            var user = UserManager.FindById(User.Identity.GetUserId());\n            if (user != null)\n            {\n                return user.PhoneNumber != null;\n            }\n            return false;\n        }\n\n        public enum ManageMessageId\n        {\n            AddPhoneSuccess,\n            ChangePasswordSuccess,\n            SetTwoFactorSuccess,\n            SetPasswordSuccess,\n            RemoveLoginSuccess,\n            RemovePhoneSuccess,\n            Error\n        }\n\n#endregion\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Controllers/OAuthController.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Mvc;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Mvc.Controllers\n{\n    public class OAuthController : AsyncController\n    {\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public async Task<ActionResult> BeginAsync()\n        {\n            //var auth = new MvcSignInAuthorizer\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                }\n            };\n\n            string twitterCallbackUrl = Request.Url.ToString().Replace(\"Begin\", \"Complete\");\n            return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl));\n        }\n\n        public async Task<ActionResult> CompleteAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore()\n            };\n\n            await auth.CompleteAuthorizeAsync(Request.Url);\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, \n            //   isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent \n            //   queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let \n            //   you make queries without re-authorizing.\n            //\n            //var credentials = auth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Controllers/StatusDemosController.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.Mvc;\nusing Linq2TwitterDemos_Mvc.Models;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Mvc.Controllers\n{\n    public class StatusDemosController : Controller\n    {\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public ActionResult Tweet()\n        {\n            var sendTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing async LINQ to Twitter in MVC - \" + DateTime.Now.ToString()\n            };\n\n            return View(sendTweetVM);\n        }\n\n        [HttpPost]\n        [ActionName(\"Tweet\")]\n        public async Task<ActionResult> TweetAsync(SendTweetViewModel tweet)\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore()\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            Status responseTweet = await ctx.TweetAsync(tweet.Text);\n\n            var responseTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing async LINQ to Twitter in MVC - \" + DateTime.Now.ToString(),\n                Response = \"Tweet successful! Response from Twitter: \" + responseTweet.Text\n            };\n\n            return View(responseTweetVM);\n        }\n\n        [ActionName(\"HomeTimeline\")]\n        public async Task<ActionResult> HomeTimelineAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore()\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            var tweets =\n                await\n                (from tweet in ctx.Status\n                 where tweet.Type == StatusType.Home\n                 select new TweetViewModel\n                 {\n                     ImageUrl = tweet.User.ProfileImageUrl,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     Text = tweet.Text\n                 })\n                .ToListAsync();\n\n            return View(tweets);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"Linq2TwitterDemos_Mvc.MvcApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Web.Optimization;\nusing System.Web.Routing;\n\nnamespace Linq2TwitterDemos_Mvc\n{\n    public class MvcApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start()\n        {\n            AreaRegistration.RegisterAllAreas();\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Linq2TwitterDemos_Mvc.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_Mvc</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_Mvc</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <NuGetPackageImportStamp>1b7e92a8</NuGetPackageImportStamp>\n    <UseGlobalApplicationHostFile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\EntityFramework.6.1.2\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\EntityFramework.6.1.2\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.Core.2.2.0-alpha1\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.EntityFramework.2.2.0-alpha1\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.Owin.2.2.0-alpha1\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Newtonsoft.Json.6.0.7\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\packages\\Rx-Core.2.2.5\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\packages\\Rx-Interfaces.2.2.5\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\packages\\Rx-Linq.2.2.5\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\packages\\Rx-PlatformServices.2.2.5\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\">\n    </Reference>\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=__MvcPagesVersion__, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.Mvc.5.2.2\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.Razor.3.2.2\\lib\\net45\\System.Web.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.2\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Owin\">\n      <HintPath>..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin\">\n      <HintPath>..\\packages\\Microsoft.Owin.3.0.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Host.SystemWeb\">\n      <HintPath>..\\packages\\Microsoft.Owin.Host.SystemWeb.3.0.0\\lib\\net45\\Microsoft.Owin.Host.SystemWeb.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.3.0.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Facebook\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Facebook.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Facebook.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Cookies\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Cookies.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.OAuth\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.OAuth.3.0.0\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Google\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Google.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Google.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Twitter.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.MicrosoftAccount\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.MicrosoftAccount.3.0.0\\lib\\net45\\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"App_Start\\FilterConfig.cs\" />\n    <Compile Include=\"App_Start\\IdentityConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\Startup.Auth.cs\" />\n    <Compile Include=\"Controllers\\AccountController.cs\" />\n    <Compile Include=\"Controllers\\HomeController.cs\" />\n    <Compile Include=\"Controllers\\ManageController.cs\" />\n    <Compile Include=\"Controllers\\OAuthController.cs\" />\n    <Compile Include=\"Controllers\\StatusDemosController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Models\\AccountViewModels.cs\" />\n    <Compile Include=\"Models\\IdentityModels.cs\" />\n    <Compile Include=\"Models\\ManageViewModels.cs\" />\n    <Compile Include=\"Models\\SendTweetViewModel.cs\" />\n    <Compile Include=\"Models\\TweetViewModel.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Startup.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Content\\bootstrap-theme.css\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css\" />\n    <Content Include=\"Content\\bootstrap.css\" />\n    <Content Include=\"Content\\bootstrap.min.css\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.svg\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.ttf\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.eot\" />\n    <Content Include=\"Content\\bootstrap-theme.css.map\" />\n    <Content Include=\"Content\\bootstrap.css.map\" />\n    <None Include=\"Scripts\\jquery-2.1.1.intellisense.js\" />\n    <Content Include=\"Scripts\\bootstrap.js\" />\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.min.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.min.map\" />\n    <None Include=\"Scripts\\jquery.validate-vsdoc.js\" />\n    <Content Include=\"Scripts\\jquery.validate.js\" />\n    <Content Include=\"Scripts\\jquery.validate.min.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.js\" />\n    <Content Include=\"Scripts\\jquery.validate.unobtrusive.min.js\" />\n    <Content Include=\"Scripts\\modernizr-2.8.3.js\" />\n    <Content Include=\"Scripts\\npm.js\" />\n    <Content Include=\"Scripts\\respond.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.min.js\" />\n    <Content Include=\"Scripts\\respond.min.js\" />\n    <Content Include=\"Scripts\\_references.js\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Views\\Web.config\" />\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Views\\Home\\About.cshtml\" />\n    <Content Include=\"Views\\Home\\Contact.cshtml\" />\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\n    <Content Include=\"Views\\Account\\_ExternalLoginsListPartial.cshtml\" />\n    <Content Include=\"Views\\Account\\ConfirmEmail.cshtml\" />\n    <Content Include=\"Views\\Account\\ExternalLoginConfirmation.cshtml\" />\n    <Content Include=\"Views\\Account\\ExternalLoginFailure.cshtml\" />\n    <Content Include=\"Views\\Account\\ForgotPassword.cshtml\" />\n    <Content Include=\"Views\\Account\\ForgotPasswordConfirmation.cshtml\" />\n    <Content Include=\"Views\\Account\\Login.cshtml\" />\n    <Content Include=\"Views\\Account\\Register.cshtml\" />\n    <Content Include=\"Views\\Account\\ResetPassword.cshtml\" />\n    <Content Include=\"Views\\Account\\ResetPasswordConfirmation.cshtml\" />\n    <Content Include=\"Views\\Account\\SendCode.cshtml\" />\n    <Content Include=\"Views\\Account\\VerifyCode.cshtml\" />\n    <Content Include=\"Views\\Manage\\AddPhoneNumber.cshtml\" />\n    <Content Include=\"Views\\Manage\\ChangePassword.cshtml\" />\n    <Content Include=\"Views\\Manage\\Index.cshtml\" />\n    <Content Include=\"Views\\Manage\\ManageLogins.cshtml\" />\n    <Content Include=\"Views\\Manage\\SetPassword.cshtml\" />\n    <Content Include=\"Views\\Manage\\VerifyPhoneNumber.cshtml\" />\n    <Content Include=\"Views\\Shared\\Lockout.cshtml\" />\n    <Content Include=\"Views\\Shared\\_LoginPartial.cshtml\" />\n    <Content Include=\"Views\\StatusDemos\\Index.cshtml\" />\n    <Content Include=\"Views\\StatusDemos\\Tweet.cshtml\" />\n    <Content Include=\"Views\\StatusDemos\\HomeTimeline.cshtml\" />\n    <Content Include=\"Views\\OAuth\\Index.cshtml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"packages.config\" />\n    <None Include=\"Project_Readme.html\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Libraries\\LinqToTwitter.AspNet\\LinqToTwitter.AspNet.csproj\">\n      <Project>{946a0061-58f9-467d-9907-3046cefb4524}</Project>\n      <Name>LinqToTwitter.AspNet</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>33851</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:33851/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Models/AccountViewModels.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Linq2TwitterDemos_Mvc.Models\n{\n    public class ExternalLoginConfirmationViewModel\n    {\n        [Required]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n    }\n\n    public class ExternalLoginListViewModel\n    {\n        public string ReturnUrl { get; set; }\n    }\n\n    public class SendCodeViewModel\n    {\n        public string SelectedProvider { get; set; }\n        public ICollection<System.Web.Mvc.SelectListItem> Providers { get; set; }\n        public string ReturnUrl { get; set; }\n        public bool RememberMe { get; set; }\n    }\n\n    public class VerifyCodeViewModel\n    {\n        [Required]\n        public string Provider { get; set; }\n\n        [Required]\n        [Display(Name = \"Code\")]\n        public string Code { get; set; }\n        public string ReturnUrl { get; set; }\n\n        [Display(Name = \"Remember this browser?\")]\n        public bool RememberBrowser { get; set; }\n\n        public bool RememberMe { get; set; }\n    }\n\n    public class ForgotViewModel\n    {\n        [Required]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n    }\n\n    public class LoginViewModel\n    {\n        [Required]\n        [Display(Name = \"Email\")]\n        [EmailAddress]\n        public string Email { get; set; }\n\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [Display(Name = \"Remember me?\")]\n        public bool RememberMe { get; set; }\n    }\n\n    public class RegisterViewModel\n    {\n        [Required]\n        [EmailAddress]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class ResetPasswordViewModel\n    {\n        [Required]\n        [EmailAddress]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n\n        public string Code { get; set; }\n    }\n\n    public class ForgotPasswordViewModel\n    {\n        [Required]\n        [EmailAddress]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Models/IdentityModels.cs",
    "content": "﻿using System.Data.Entity;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\n\nnamespace Linq2TwitterDemos_Mvc.Models\n{\n    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.\n    public class ApplicationUser : IdentityUser\n    {\n        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)\n        {\n            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType\n            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);\n            // Add custom user claims here\n            return userIdentity;\n        }\n    }\n\n    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>\n    {\n        public ApplicationDbContext()\n            : base(\"DefaultConnection\", throwIfV1Schema: false)\n        {\n        }\n\n        public static ApplicationDbContext Create()\n        {\n            return new ApplicationDbContext();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Models/ManageViewModels.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.Owin.Security;\n\nnamespace Linq2TwitterDemos_Mvc.Models\n{\n    public class IndexViewModel\n    {\n        public bool HasPassword { get; set; }\n        public IList<UserLoginInfo> Logins { get; set; }\n        public string PhoneNumber { get; set; }\n        public bool TwoFactor { get; set; }\n        public bool BrowserRemembered { get; set; }\n    }\n\n    public class ManageLoginsViewModel\n    {\n        public IList<UserLoginInfo> CurrentLogins { get; set; }\n        public IList<AuthenticationDescription> OtherLogins { get; set; }\n    }\n\n    public class FactorViewModel\n    {\n        public string Purpose { get; set; }\n    }\n\n    public class SetPasswordViewModel\n    {\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class ChangePasswordViewModel\n    {\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Current password\")]\n        public string OldPassword { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n\n    public class AddPhoneNumberViewModel\n    {\n        [Required]\n        [Phone]\n        [Display(Name = \"Phone Number\")]\n        public string Number { get; set; }\n    }\n\n    public class VerifyPhoneNumberViewModel\n    {\n        [Required]\n        [Display(Name = \"Code\")]\n        public string Code { get; set; }\n\n        [Required]\n        [Phone]\n        [Display(Name = \"Phone Number\")]\n        public string PhoneNumber { get; set; }\n    }\n\n    public class ConfigureTwoFactorViewModel\n    {\n        public string SelectedProvider { get; set; }\n        public ICollection<System.Web.Mvc.SelectListItem> Providers { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Models/SendTweetViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_Mvc.Models\n{\n    public class SendTweetViewModel\n    {\n        [DisplayName(\"Tweet Text:\")]\n        [Required]\n        [DataType(DataType.MultilineText)]\n        public string Text { get; set; }\n\n\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Models/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_Mvc.Models\n{\n    public class TweetViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string ImageUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string ScreenName { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Project_Readme.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <style>\n        body {\n            background: #fff;\n            color: #505050;\n            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;\n            margin: 20px;\n            padding: 0;\n        }\n\n        #header {\n            background: #efefef;\n            padding: 0;\n        }\n\n        h1 {\n            font-size: 48px;\n            font-weight: normal;\n            margin: 0;\n            padding: 0 30px;\n            line-height: 150px;\n        }\n\n        p {\n            font-size: 20px;\n            color: #fff;\n            background: #969696;\n            padding: 0 30px;\n            line-height: 50px;\n        }\n\n        #main {\n            padding: 5px 30px;\n        }\n\n        .section {\n            width: 21.7%;\n            float: left;\n            margin: 0 0 0 4%;\n        }\n\n            .section h2 {\n                font-size: 13px;\n                text-transform: uppercase;\n                margin: 0;\n                border-bottom: 1px solid silver;\n                padding-bottom: 12px;\n                margin-bottom: 8px;\n            }\n\n            .section.first {\n                margin-left: 0;\n            }\n\n                .section.first h2 {\n                    font-size: 24px;\n                    text-transform: none;\n                    margin-bottom: 25px;\n                    border: none;\n                }\n\n                .section.first li {\n                    border-top: 1px solid silver;\n                    padding: 8px 0;\n                }\n\n            .section.last {\n                margin-right: 0;\n            }\n\n        ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n            line-height: 20px;\n        }\n\n        li {\n            padding: 4px 0;\n        }\n\n        a {\n            color: #267cb2;\n            text-decoration: none;\n        }\n\n            a:hover {\n                text-decoration: underline;\n            }\n    </style>\n</head>\n<body>\n\n    <div id=\"header\">\n        <h1>Your ASP.NET application</h1>\n        <p>Congratulations! You've created a project</p>\n    </div>\n\n    <div id=\"main\">\n        <div class=\"section first\">\n            <h2>This application consists of:</h2>\n            <ul>\n                <li>Sample pages showing basic nav between Home, About, and Contact</li>\n                <li>Theming using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320754\">Bootstrap</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320755\">Authentication</a>, if selected, shows how to register and sign in</li>\n                <li>ASP.NET features managed using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320756\">NuGet</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Customize app</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320757\">Get started with ASP.NET MVC</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320758\">Change the site's theme</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320759\">Add more libraries using NuGet</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320760\">Configure authentication</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320761\">Customize information about the website users</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320762\">Get information from social providers</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320763\">Add HTTP services using ASP.NET Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320764\">Secure your web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320765\">Add real-time web with ASP.NET SignalR</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320766\">Add components using Scaffolding</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320767\">Test your app with Browser Link</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320768\">Share your project</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Deploy</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320769\">Ensure your app is ready for production</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320770\">Microsoft Azure</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320771\">Hosting providers</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section last\">\n            <h2>Get help</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320772\">Get help</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320773\">Get more templates</a></li>\n            </ul>\n        </div>\n    </div>\n\n</body>\n</html>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_Mvc\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_Mvc\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"fd86c3e0-56a9-44e1-b889-6eb3da7f82e8\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.1\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.1\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.1\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n    }\n\n    if (changed) this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.1\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var delta = direction == 'prev' ? -1 : 1\n    var activeIndex = this.getItemIndex(active)\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.1\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true,\n    trigger: '[data-toggle=\"collapse\"]'\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && option == 'show') options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.1'\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--                        // up\n    if (e.which == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.1\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options        = options\n    this.$body          = $(document.body)\n    this.$element       = $(element)\n    this.$backdrop      =\n    this.isShown        = null\n    this.scrollbarWidth = 0\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      if (that.options.backdrop) that.adjustBackdrop()\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .prependTo(this.$element)\n        .on('click.dismiss.bs.modal', $.proxy(function (e) {\n          if (e.target !== e.currentTarget) return\n          this.options.backdrop == 'static'\n            ? this.$element[0].focus.call(this.$element[0])\n            : this.hide.call(this)\n        }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    if (this.options.backdrop) this.adjustBackdrop()\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustBackdrop = function () {\n    this.$backdrop\n      .css('height', 0)\n      .css('height', this.$element[0].scrollHeight)\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', '')\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.1\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (self && self.$tip && self.$tip.is(':visible')) {\n      self.hoverState = 'in'\n      return\n    }\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var $container   = this.options.container ? $(this.options.container) : this.$element.parent()\n        var containerDim = this.getPosition($container)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < containerDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > containerDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < containerDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {\n    this.arrow()\n      .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isHorizontal ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    return (this.$tip = this.$tip || $(this.options.template))\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.tooltip')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.tooltip', (data = {}))\n        if (!data[selector]) data[selector] = new Tooltip(this, options)\n      } else {\n        if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.1\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.popover')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.popover', (data = {}))\n        if (!data[selector]) data[selector] = new Popover(this, options)\n      } else {\n        if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.1\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var process  = $.proxy(this.process, this)\n\n    this.$body          = $('body')\n    this.$scrollElement = $(element).is('body') ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', process)\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = 'offset'\n    var offsetBase   = 0\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.offsets = []\n    this.targets = []\n    this.scrollHeight = this.getScrollHeight()\n\n    var self     = this\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n        '[data-target=\"' + target + '\"],' +\n        this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.1\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.VERSION = '3.3.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.1\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      =\n    this.unpin        =\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && colliderTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = $('body').height()\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/jquery-2.1.1.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to return the new transport object to use with the data type provided in the first argument.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead.</summary>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'fn.extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>\n    ///   <param name=\"object\" type=\"Object\">An object to merge onto the jQuery prototype.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">Document element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"\">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"htmlString\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked or selected.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"htmlString\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the           index position of the element in the set and the old HTML value as arguments.           jQuery empties the element before calling the function;           use the oldhtml argument to reference the previous content.           Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"PlainObject\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"\">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"newContent\" type=\"\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <summary>Selects the element that is the root of the document.</summary>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/jquery-2.1.1.js",
    "content": "/*!\n * jQuery JavaScript Library v2.1.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-05-01T17:11Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\t\t// execute the factory and get jQuery\n\t\t// For environments that do not inherently posses a window with a document\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\t\t// This accentuates the need for the creation of a real window\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android < 4.0, iOS < 6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v1.10.19\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-04-18\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t}, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t});\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select msallowclip=''><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android < 4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Math.random();\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android < 4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n/*\n\tImplementation Summary\n\n\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t2. Improve the module's maintainability by reducing the storage\n\t\tpaths to a single mechanism.\n\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n*/\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` need .setAttribute for WWA\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE9-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome < 28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Create \"bubbling\" focus and blur events\n// Support: Firefox, Chrome, Safari\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE 9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE 9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Support: IE >= 9\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Support: IE >= 9\n\t\t// Fix Cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Fixes #12346\n\t\t\t\t\t// Support: Webkit, IE\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\n\t\t\t\t// remove it.\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS 5.1, Android 4.x, Android 2.3\n\t// Check the default checkbox/radio value (\"\" on old WebKit; \"on\" elsewhere)\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Must access the parent to make an option select properly\n\t// Support: IE9, IE10\n\tsupport.optSelected = opt.selected;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Check if an input maintains its value after becoming a radio\n\t// Support: IE9, IE10\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Support: IE9+\n// Selectedness for an option in an optgroup can be inaccurate\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\nif ( window.ActiveXObject ) {\n\tjQuery( window ).on( \"unload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// We assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/jquery.validate-vsdoc.js",
    "content": "﻿/*\n* This file has been commented to support Visual Studio Intellisense.\n* You should not use this file at runtime inside the browser--it is only\n* intended to be used only for design-time IntelliSense.  Please use the\n* standard jQuery library for all production use.\n*\n* Comment version: 1.13.1\n*/\n\n/*\n* Note: While Microsoft is not the author of this file, Microsoft is\n* offering you a license subject to the terms of the Microsoft Software\n* License Terms for Microsoft ASP.NET Model View Controller 3.\n* Microsoft reserves all other rights. The notices below are provided\n* for informational purposes only and are not the license terms under\n* which Microsoft distributed this file.\n*\n* jQuery Validation Plugin - v1.13.1 - 2/4/2013\n* https://github.com/jzaefferer/jquery-validation\n* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT\n*\n*/\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\t\t/// <summary>\n\t\t/// Validates the selected form. This method sets up event handlers for submit, focus,\n\t\t/// keyup, blur and click to trigger validation of the entire form or individual\n\t\t/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,\n\t\t/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.\n\t\t/// </summary>\n\t\t/// <param name=\"options\" type=\"Object\">\n\t\t/// A set of key/value pairs that configure the validate. All options are optional.\n\t\t/// </param>\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif (!this.length) {\n\t\t\toptions && options.debug && window.console && console.warn( \"nothing selected, can't validate, returning nothing\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data(this[0], 'validator');\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\t\t\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data(this[0], 'validator', validator); \n\t\t\n\t\tif ( validator.settings.onsubmit ) {\n\t\t\n\t\t\t// allow suppresing validation by adding a cancel class to the submit button\n\t\t\tthis.find(\"input, button\").filter(\".cancel\").click(function() {\n\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t});\n\t\t\t\n\t\t\t// when a submitHandler is used, capture the submitting button\n\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\tthis.find(\"input, button\").filter(\":submit\").click(function() {\n\t\t\t\t\tvalidator.submitButton = this;\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug )\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\n\t\t\t\tfunction handle() {\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\tvar hidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm );\n\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\t/// <summary>\n\t\t/// Checks if the selected form is valid or if all selected elements are valid.\n\t\t/// validate() needs to be called on the form before checking it using this method.\n\t\t/// </summary>\n\t\t/// <returns type=\"Boolean\" />\n\n        if ( $(this[0]).is('form')) {\n            return this.validate().form();\n        } else {\n            var valid = true;\n            var validator = $(this[0].form).validate();\n            this.each(function() {\n\t\t\t\tvalid &= validator.element(this);\n            });\n            return valid;\n        }\n    },\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function(attributes) {\n\t\t/// <summary>\n\t\t/// Remove the specified attributes from the first matched element and return them.\n\t\t/// </summary>\n\t\t/// <param name=\"attributes\" type=\"String\">\n\t\t/// A space-seperated list of attribute names to remove.\n\t\t/// </param>\n\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function(command, argument) {\n\t\t/// <summary>\n\t\t/// Return the validations rules for the first selected element.\n\t\t/// </summary>\n\t\t/// <param name=\"command\" type=\"String\">\n\t\t/// Can be either \"add\" or \"remove\".\n\t\t/// </param>\n\t\t/// <param name=\"argument\" type=\"\">\n\t\t/// A list of rules to add or remove.\n\t\t/// </param>\n\n\t\tvar element = this[0];\n\t\t\n\t\tif (command) {\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif (argument.messages)\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif (!argument) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.metadataRules(element),\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\t\t\n\t\t// make sure required is at front\n\t\tif (data.required) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function(a) {return !a.checked;}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function(source, params) {\n\t/// <summary>\n\t/// Replaces {n} placeholders with arguments.\n\t/// One or more arguments can be passed, in addition to the string template itself, to insert\n\t/// into the string.\n\t/// </summary>\n\t/// <param name=\"source\" type=\"String\">\n\t/// The string to format.\n\t/// </param>\n\t/// <param name=\"params\" type=\"String\">\n\t/// The first argument to insert, or an array of Strings to insert\n\t/// </param>\n\t/// <returns type=\"String\" />\n\n\tif ( arguments.length == 1 ) \n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\tif ( arguments.length > 2 && params.constructor != Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor != Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function(i, n) {\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\t\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: [],\n\t\tignoreTitle: false,\n\t\tonfocusin: function(element) {\n\t\t\tthis.lastActive = element;\n\t\t\t\t\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tthis.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function(element) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function(element) {\n\t\t\tif ( element.name in this.submitted || element == this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function(element) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted )\n\t\t\t\tthis.element(element);\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if (element.parentNode.name in this.submitted)\n\t\t\t\tthis.element(element.parentNode);\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function(settings) {\n\t\t/// <summary>\n\t\t/// Modify default settings for validation.\n\t\t/// Accepts everything that Plugins/Validation/validate accepts.\n\t\t/// </summary>\n\t\t/// <param name=\"settings\" type=\"Options\">\n\t\t/// Options to set as default.\n\t\t/// </param>\n\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\taccept: \"Please enter a value with a valid extension.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\t\n\tautoCreateRanges: false,\n\t\n\tprototype: {\n\t\t\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\t\t\t\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function(key, value) {\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function(key, value) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\t\t\t\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tvalidator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, :password, :file, select, textarea\", \"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\":radio, :checkbox, select, option\", \"click\", delegate);\n\n\t\t\tif (this.settings.invalidHandler)\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\t/// <summary>\n\t\t\t/// Validates the form, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as a normal submit event, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif (!this.valid())\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\t\t\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid(); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\t/// <summary>\n\t\t\t/// Validates a single element, returns true if it is valid, false otherwise.\n\t\t\t/// This behaves as validation on blur or keyup, but returns the result.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"element\" type=\"Selector\">\n\t\t\t/// An element to validate, must be inside the validated form.\n\t\t\t/// </param>\n\t\t\t/// <returns type=\"Boolean\" />\n\n\t\t\telement = this.clean( element );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element );\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function(errors) {\n\t\t\t/// <summary>\n\t\t\t/// Show the specified messages.\n\t\t\t/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"errors\" type=\"Object\">\n\t\t\t/// One or more key/value pairs of input names and messages.\n\t\t\t/// </param>\n\n\t\t\tif(errors) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.settings.showErrors\n\t\t\t\t? this.settings.showErrors.call( this, this.errorMap, this.errorList )\n\t\t\t\t: this.defaultShowErrors();\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\t/// <summary>\n\t\t\t/// Resets the controlled form.\n\t\t\t/// Resets input fields to their original value (requires form plugin), removes classes\n\t\t\t/// indicating invalid elements and hides error messages.\n\t\t\t/// </summary>\n\n\t\t\tif ( $.fn.resetForm )\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass );\n\t\t},\n\t\t\n\t\tnumberOfInvalids: function() {\n\t\t\t/// <summary>\n\t\t\t/// Returns the number of invalid fields.\n\t\t\t/// This depends on the internal validator state. It covers all fields only after\n\t\t\t/// validating the complete form (on submit or via $(\"form\").valid()). After validating\n\t\t\t/// a single element, only that element is counted. Most useful in combination with the\n\t\t\t/// invalidHandler-option.\n\t\t\t/// </summary>\n\t\t\t/// <returns type=\"Number\" />\n\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\t\t\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj )\n\t\t\t\tcount++;\n\t\t\treturn count;\n\t\t},\n\t\t\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\t\t\n\t\tvalid: function() {\n\t\t\treturn this.size() == 0;\n\t\t},\n\t\t\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\t\t\n\t\tfocusInvalid: function() {\n\t\t\tif( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\n\t\t\t\treturn n.element.name == lastActive.name;\n\t\t\t}).length == 1 && lastActive;\n\t\t},\n\t\t\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\t\t\t\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\t// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved\n\t\t\treturn $([]).add(this.currentForm.elements)\n\t\t\t.filter(\":input\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\t!this.name && validator.settings.debug && window.console && console.error( \"%o has no name assigned\", this);\n\t\t\t\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) )\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\t\t\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[0];\n\t\t},\n\t\t\n\t\terrors: function() {\n\t\t\treturn $( this.settings.errorElement + \".\" + this.settings.errorClass, this.errorContext );\n\t\t},\n\t\t\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\t\t\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\t\t\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\t\n\t\tcheck: function( element ) {\n\t\t\telement = this.clean( element );\n\t\t\t\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif (this.checkable(element)) {\n\t\t\t    element = this.findByName(element.name).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\t\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tfor (var method in rules) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\t\t\t\t\tvar result = $.validator.methods[method].call( this, element.value.replace(/\\r/g, \"\"), element, rule.parameters );\n\t\t\t\t\t\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result == \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\t\t\t\t\t\n\t\t\t\t\tif ( result == \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tthis.settings.debug && window.console && console.log(\"exception occured when checking element \" + element.id\n\t\t\t\t\t\t + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dependencyMismatch)\n\t\t\t\treturn;\n\t\t\tif ( this.objectLength(rules) )\n\t\t\t\tthis.successList.push(element);\n\t\t\treturn true;\n\t\t},\n\t\t\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's \"messages\" metadata\n\t\tcustomMetaMessage: function(element, method) {\n\t\t\tif (!$.metadata)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tvar meta = this.settings.meta\n\t\t\t\t? $(element).metadata()[this.settings.meta]\n\t\t\t\t: $(element).metadata();\n\t\t\t\n\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t},\n\t\t\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor == String\n\t\t\t\t? m\n\t\t\t\t: m[method]);\n\t\t},\n\t\t\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif (arguments[i] !== undefined)\n\t\t\t\t\treturn arguments[i];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t\n\t\tdefaultMessage: function( element, method) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customMetaMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\t\t\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message == \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t}\t\t\t\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\t\t\t\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\t\t\n\t\taddWrapper: function(toToggle) {\n\t\t\tif ( this.settings.wrapper )\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\treturn toToggle;\n\t\t},\n\t\t\n\t\tdefaultShowErrors: function() {\n\t\t\tfor ( var i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tthis.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif (this.settings.success) {\n\t\t\t\tfor ( var i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.settings.unhighlight) {\n\t\t\t\tfor ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\t\t\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\t\t\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\t\t\n\t\tshowLabel: function(element, message) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass().addClass( this.settings.errorClass );\n\t\t\t\n\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\tlabel.attr(\"generated\") && label.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length )\n\t\t\t\t\tthis.settings.errorPlacement\n\t\t\t\t\t\t? this.settings.errorPlacement(label, $(element) )\n\t\t\t\t\t\t: label.insertAfter(element);\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\ttypeof this.settings.success == \"string\"\n\t\t\t\t\t? label.addClass( this.settings.success )\n\t\t\t\t\t: this.settings.success( label );\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\t\t\n\t\terrorsFor: function(element) {\n\t\t\tvar name = this.idOrName(element);\n    \t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr('for') == name;\n\t\t\t});\n\t\t},\n\t\t\n\t\tidOrName: function(element) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn /radio|checkbox/i.test(element.type);\n\t\t},\n\t\t\n\t\tfindByName: function( name ) {\n\t\t\t// select by name and filter by form for performance over form.find(\"[name=...]\")\n\t\t\tvar form = this.currentForm;\n\t\t\treturn $(document.getElementsByName(name)).map(function(index, element) {\n\t\t\t\treturn element.form == form && element.name == name && element  || null;\n\t\t\t});\n\t\t},\n\t\t\n\t\tgetLength: function(value, element) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase 'input':\n\t\t\t\tif( this.checkable( element) )\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\t\n\t\tdepend: function(param, element) {\n\t\t\treturn this.dependTypes[typeof param]\n\t\t\t\t? this.dependTypes[typeof param](param, element)\n\t\t\t\t: true;\n\t\t},\n\t\n\t\tdependTypes: {\n\t\t\t\"boolean\": function(param, element) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function(param, element) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function(param, element) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\t\t\n\t\toptional: function(element) {\n\t\t\treturn !$.validator.methods.required.call(this, $.trim(element.value), element) && \"dependency-mismatch\";\n\t\t},\n\t\t\n\t\tstartRequest: function(element) {\n\t\t\tif (!this.pending[element.name]) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\t\t\n\t\tstopRequest: function(element, valid) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif (this.pendingRequest < 0)\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\tpreviousValue: function(element) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\t\t\n\t},\n\t\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tdateDE: {dateDE: true},\n\t\tnumber: {number: true},\n\t\tnumberDE: {numberDE: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\t\n\taddClassRules: function(className, rules) {\n\t\t/// <summary>\n\t\t/// Add a compound class method - useful to refactor common combinations of rules into a single\n\t\t/// class.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the class rule to add\n\t\t/// </param>\n\t\t/// <param name=\"rules\" type=\"Options\">\n\t\t/// The compound rules\n\t\t/// </param>\n\n\t\tclassName.constructor == String ?\n\t\t\tthis.classRuleSettings[className] = rules :\n\t\t\t$.extend(this.classRuleSettings, className);\n\t},\n\t\n\tclassRules: function(element) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr('class');\n\t\tclasses && $.each(classes.split(' '), function() {\n\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t}\n\t\t});\n\t\treturn rules;\n\t},\n\t\n\tattributeRules: function(element) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value = $element.attr(method);\n\t\t\tif (value) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\tmetadataRules: function(element) {\n\t\tif (!$.metadata) return {};\n\t\t\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\treturn meta ?\n\t\t\t$(element).metadata()[meta] :\n\t\t\t$(element).metadata();\n\t},\n\t\n\tstaticRules: function(element) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, 'validator');\n\t\tif (validator.settings.rules) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\t\n\tnormalizeRules: function(rules, element) {\n\t\t// handle dependency check\n\t\t$.each(rules, function(prop, val) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif (val === false) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (val.param || val.depends) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (keepRule) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\t// evaluate parameters\n\t\t$.each(rules, function(rule, parameter) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\t\t\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tif (rules[this]) {\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t}\n\t\t});\n\t\t\n\t\tif ($.validator.autoCreateRanges) {\n\t\t\t// auto-create ranges\n\t\t\tif (rules.min && rules.max) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\t\t\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\tif (rules.messages) {\n\t\t\tdelete rules.messages;\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function(data) {\n\t\tif( typeof data == \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\t\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function(name, method, message) {\n\t\t/// <summary>\n\t\t/// Add a custom validation method. It must consist of a name (must be a legal javascript \n\t\t/// identifier), a javascript based function and a default string message.\n\t\t/// </summary>\n\t\t/// <param name=\"name\" type=\"String\">\n\t\t/// The name of the method, used to identify and referencing it, must be a valid javascript\n\t\t/// identifier\n\t\t/// </param>\n\t\t/// <param name=\"method\" type=\"Function\">\n\t\t/// The actual method implementation, returning true if an element is valid\n\t\t/// </param>\n\t\t/// <param name=\"message\" type=\"String\" optional=\"true\">\n\t\t/// (Optional) The default message to display for this method. Can be a function created by \n\t\t/// jQuery.validator.format(value). When undefined, an already existing message is used \n\t\t/// (handy for localization), otherwise the field-specific messages have to be defined.\n\t\t/// </param>\n\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];\n\t\tif (method.length < 3) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function(value, element, param) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase 'select':\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\tcase 'input':\n\t\t\t\tif ( this.checkable(element) )\n\t\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\tdefault:\n\t\t\t\treturn $.trim(value).length > 0;\n\t\t\t}\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function(value, element, param) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] )\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\t\t\t\n\t\t\tparam = typeof param == \"string\" && {url:param} || param; \n\t\t\t\n\t\t\tif ( this.pending[element.name] ) {\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage(element, \"remote\");\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function(value, element, param) {\n\t\t\treturn this.optional(element) || this.getLength($.trim(value), element) <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function(value, element, param) {\n\t\t\tvar length = this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function(value, element) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n        \n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function(value, element) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function(value, element) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.test(value);\n\t\t},\n\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function(value, element) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function(value, element) {\n\t\t\tif ( this.optional(element) )\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t// accept only digits and dashes\n\t\t\tif (/[^0-9-]+/.test(value))\n\t\t\t\treturn false;\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tvar nDigit = parseInt(cDigit, 10);\n\t\t\t\tif (bEven) {\n\t\t\t\t\tif ((nDigit *= 2) > 9)\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) == 0;\n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/accept\n\t\taccept: function(value, element, param) {\n\t\t\tparam = typeof param == \"string\" ? param.replace(/,/g, '|') : \"png|jpe?g|gif\";\n\t\t\treturn this.optional(element) || value.match(new RegExp(\".(\" + param + \")$\", \"i\")); \n\t\t},\n\t\t\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function(value, element, param) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param).unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t$(element).valid();\n\t\t\t});\n\t\t\treturn value == target.val();\n\t\t}\n\t\t\n\t}\n\t\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n})(jQuery);\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() \n;(function($) {\n\tvar pendingRequests = {};\n\t\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\n\t\t    var port = settings.port;\n\t\t    if (settings.mode == \"abort\") {\n\t\t\t    if ( pendingRequests[port] ) {\n\t\t\t\t    pendingRequests[port].abort();\n\t\t\t    }\t\t\t\tpendingRequests[port] = xhr;\n\t\t    }\n\t    });\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function(settings) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif (mode == \"abort\") {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\n\t\t\t    return (pendingRequests[port] = ajax.apply(this, arguments));\n\t\t    }\n\t\t    return ajax.apply(this, arguments);\n\t    };\n    }\n})(jQuery);\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target \n;(function($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\t\n\t\t}, function( original, fix ){\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup:function() {\n\t\t\t\t\tthis.addEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\tteardown:function() {\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\n\t\t\t\t},\n\t\t\t\thandler: function(e) {\n\t\t\t\t\targuments[0] = $.event.fix(e);\n\t\t\t\t\targuments[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, arguments);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t};\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function(delegate, type, handler) {\n\t\t\treturn this.bind(type, function(event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.13.1\n *\n * http://jqueryvalidation.org/\n *\n * Copyright (c) 2014 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend($.fn, {\n\t// http://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.validateDelegate( \":submit\", \"click\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( event.target ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( event.target ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t});\n\t\t}\n\t\treturn valid;\n\t},\n\t// attributes: space separated list of attributes to retrieve and remove\n\tremoveAttrs: function( attributes ) {\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each( attributes.split( /\\s/ ), function( index, value ) {\n\t\t\tresult[ value ] = $element.attr( value );\n\t\t\t$element.removeAttr( value );\n\t\t});\n\t\treturn result;\n\t},\n\t// http://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\t\t\t\t// remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t\tif ( method === \"required\" ) {\n\t\t\t\t\t\t$( element ).removeAttr( \"aria-required\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t\t$( element ).attr( \"aria-required\", \"true\" );\n\t\t}\n\n\t\t// make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param });\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend( $.expr[ \":\" ], {\n\t// http://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\treturn !!$.trim( \"\" + $( a ).val() );\n\t},\n\t// http://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// http://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date ( ISO ).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t});\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar validator = $.data( this[ 0 ].form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !this.is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this[ 0 ], event );\n\t\t\t\t}\n\t\t\t}\n\t\t\t$( this.currentForm )\n\t\t\t\t.validateDelegate( \":text, [type='password'], [type='file'], select, textarea, \" +\n\t\t\t\t\t\"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" +\n\t\t\t\t\t\"[type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], \" +\n\t\t\t\t\t\"[type='range'], [type='color'], [type='radio'], [type='checkbox']\",\n\t\t\t\t\t\"focusin focusout keyup\", delegate)\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.validateDelegate(\"select, option, [type='radio'], [type='checkbox']\", \"click\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).bind( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\n\t\t\t// Add aria-required to any Static/Data/Class required fields before first validation\n\t\t\t// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html\n\t\t\t$( this.currentForm ).find( \"[required], [data-rule-required], .required\" ).attr( \"aria-required\", \"true\" );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend({}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tresult = true;\n\n\t\t\tthis.lastElement = checkElement;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\tresult = this.check( checkElement ) !== false;\n\t\t\t\tif ( result ) {\n\t\t\t\t\tdelete this.invalid[ checkElement.name ];\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add aria-invalid status for screen readers\n\t\t\t$( element ).attr( \"aria-invalid\", !result );\n\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[ name ],\n\t\t\t\t\t\telement: this.findByName( name )[ 0 ]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements()\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t\t.removeAttr( \"aria-invalid\" );\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea\" )\n\t\t\t.not( \":submit, :reset, :image, [disabled], [readonly]\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ this.name ] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar val,\n\t\t\t\t$element = $( element ),\n\t\t\t\ttype = element.type;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn $( \"input[name='\" + element.name + \"']:checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? false : $element.val();\n\t\t\t}\n\n\t\t\tval = $element.val();\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule;\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[ method ],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t});\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\t\t\tif ( error.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\t\t\t\t// create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement( place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\t\t\t\t} else if ( error.parents( \"label[for='\" + elementID + \"']\" ).length === 0 ) {\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\n\t\t\t\t\terrorID = error.attr( \"id\" ).replace( /(:|\\.|\\[|\\])/g, \"\\\\$1\");\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + errorID + \"\\\\b\" ) ) ) {\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + name + \"']\", this.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName( element ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// aria-describedby should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + describer.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + name + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t\t// allows type=\"date\" and others to be compared as strings\n\t\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\t\tvalue = Number( value );\n\t\t\t}\n\n\t\t\tif ( value || value === 0 ) {\n\t\t\t\trules[ method ] = value;\n\t\t\t} else if ( type === method && type !== \"range\" ) {\n\t\t\t\t// exception: the jquery validate 'range' method\n\t\t\t\t// does not test for the html5 'range' type\n\t\t\t\trules[ method ] = true;\n\t\t\t}\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar method, value,\n\t\t\trules = {}, $element = $( element );\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tif ( value !== undefined ) {\n\t\t\t\trules[ method ] = value;\n\t\t\t}\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each([ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t});\n\t\t$.each([ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace(/[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn $.trim( value ).length > 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\t\t\t// From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional( element ) || /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/creditcard-method/\n\t\t// based on http://en.wikipedia.org/wiki/Luhn/\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false,\n\t\t\t\tn, cDigit;\n\n\t\t\tvalue = value.replace( /\\D/g, \"\" );\n\n\t\t\t// Basing min and max length on\n\t\t\t// http://developer.ean.com/general_info/Valid_Credit_Card_Types\n\t\t\tif ( value.length < 13 || value.length > 19 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor ( n = value.length - 1; n >= 0; n--) {\n\t\t\t\tcDigit = value.charAt( n );\n\t\t\t\tnDigit = parseInt( cDigit, 10 );\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn ( nCheck % 10 ) === 0;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// http://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// http://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.unbind( \".validate-equalTo\" ).bind( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue( element ),\n\t\t\t\tvalidator, data;\n\n\t\t\tif (!this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[ element.name ].remote;\n\t\t\tthis.settings.messages[ element.name ].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ].remote = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tdelete validator.invalid[ element.name ];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\n\t}\n\n});\n\n$.format = function deprecated() {\n\tthrow \"$.format has been deprecated. Please use $.validator.format instead.\";\n};\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = xhr;\n\t\t}\n\t});\n} else {\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\tpendingRequests[port].abort();\n\t\t\t}\n\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\treturn pendingRequests[port];\n\t\t}\n\t\treturn ajax.apply(this, arguments);\n\t};\n}\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\n\n$.extend($.fn, {\n\tvalidateDelegate: function( delegate, type, handler ) {\n\t\treturn this.bind(type, function( event ) {\n\t\t\tvar target = $(event.target);\n\t\t\tif ( target.is(delegate) ) {\n\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t}\n\t\t});\n\t}\n});\n\n}));"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/jquery.validate.unobtrusive.js",
    "content": "/* NUGET: BEGIN LICENSE TEXT\n *\n * Microsoft grants you the right to use these script files for the sole\n * purpose of either: (i) interacting through your browser with the Microsoft\n * website or online service, subject to the applicable licensing or use\n * terms; or (ii) using the files as included with a Microsoft product subject\n * to that product's license terms. Microsoft reserves all other rights to the\n * files not expressly granted by Microsoft, whether by implication, estoppel\n * or otherwise. Insofar as a script file is dual licensed under GPL,\n * Microsoft neither took the code under GPL nor distributes it thereunder but\n * under the terms set out in this paragraph. All notices and licenses\n * below are for informational purposes only.\n *\n * NUGET: END LICENSE TEXT */\n/*!\n** Unobtrusive validation support library for jQuery and jQuery Validate\n** Copyright (C) Microsoft Corporation. All rights reserved.\n*/\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n        if (container) {\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this);\n        $form.data(\"validator\").resetForm();\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n                .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            }\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                                  .addBack()\n                                  .filter(\"form\")\n                                  .add($selector.find(\"form\"))\n                                  .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                return $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\").val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n}(jQuery));"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/modernizr-2.8.3.js",
    "content": "/*!\n * Modernizr v2.8.3\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.8.3',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq) && matchMedia(mq).matches || false;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   goo.gl/v3V4Gp\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /**\n     * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n     */\n    ;(function(window, document) {\n        /*jshint evil:true */\n        /** version */\n        var version = '3.7.0';\n\n        /** Preset options */\n        var options = window.html5 || {};\n\n        /** Used to skip problem elements */\n        var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n        /** Not all elements can be cloned in IE **/\n        var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n        /** Detect whether the browser supports default html5 styles */\n        var supportsHtml5Styles;\n\n        /** Name of the expando, to work with multiple documents or to re-shiv one document */\n        var expando = '_html5shiv';\n\n        /** The id for the the documents expando */\n        var expanID = 0;\n\n        /** Cached data for each document */\n        var expandoData = {};\n\n        /** Detect whether the browser supports unknown elements */\n        var supportsUnknownElements;\n\n        (function() {\n          try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n          } catch(e) {\n            // assign a false positive if detection fails => unable to shiv\n            supportsHtml5Styles = true;\n            supportsUnknownElements = true;\n          }\n\n        }());\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Creates a style sheet with the given CSS text and adds it to the document.\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @param {String} cssText The CSS text.\n         * @returns {StyleSheet} The style element.\n         */\n        function addStyleSheet(ownerDocument, cssText) {\n          var p = ownerDocument.createElement('p'),\n          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n          p.innerHTML = 'x<style>' + cssText + '</style>';\n          return parent.insertBefore(p.lastChild, parent.firstChild);\n        }\n\n        /**\n         * Returns the value of `html5.elements` as an array.\n         * @private\n         * @returns {Array} An array of shived element node names.\n         */\n        function getElements() {\n          var elements = html5.elements;\n          return typeof elements == 'string' ? elements.split(' ') : elements;\n        }\n\n        /**\n         * Returns the data associated to the given document\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @returns {Object} An object of data.\n         */\n        function getExpandoData(ownerDocument) {\n          var data = expandoData[ownerDocument[expando]];\n          if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n          }\n          return data;\n        }\n\n        /**\n         * returns a shived element for the given nodeName and document\n         * @memberOf html5\n         * @param {String} nodeName name of the element\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived element.\n         */\n        function createElement(nodeName, ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n          }\n          if (!data) {\n            data = getExpandoData(ownerDocument);\n          }\n          var node;\n\n          if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n          } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n          } else {\n            node = data.createElem(nodeName);\n          }\n\n          // Avoid adding some elements to fragments in IE < 9 because\n          // * Attributes like `name` or `type` cannot be set/changed once an element\n          //   is inserted into a document/fragment\n          // * Link elements with `src` attributes that are inaccessible, as with\n          //   a 403 response, will cause the tab/window to crash\n          // * Script elements appended to fragments will execute when their `src`\n          //   or `text` property is set\n          return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n        }\n\n        /**\n         * returns a shived DocumentFragment for the given document\n         * @memberOf html5\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived DocumentFragment.\n         */\n        function createDocumentFragment(ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n          }\n          data = data || getExpandoData(ownerDocument);\n          var clone = data.frag.cloneNode(),\n          i = 0,\n          elems = getElements(),\n          l = elems.length;\n          for(;i<l;i++){\n            clone.createElement(elems[i]);\n          }\n          return clone;\n        }\n\n        /**\n         * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n         * @private\n         * @param {Document|DocumentFragment} ownerDocument The document.\n         * @param {Object} data of the document.\n         */\n        function shivMethods(ownerDocument, data) {\n          if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n          }\n\n\n          ownerDocument.createElement = function(nodeName) {\n            //abort shiv\n            if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n            }\n            return createElement(nodeName, ownerDocument, data);\n          };\n\n          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n                                                          'var n=f.cloneNode(),c=n.createElement;' +\n                                                          'h.shivMethods&&(' +\n                                                          // unroll the `createElement` calls\n                                                          getElements().join().replace(/[\\w\\-]+/g, function(nodeName) {\n            data.createElem(nodeName);\n            data.frag.createElement(nodeName);\n            return 'c(\"' + nodeName + '\")';\n          }) +\n            ');return n}'\n                                                         )(html5, data.frag);\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Shivs the given document.\n         * @memberOf html5\n         * @param {Document} ownerDocument The document to shiv.\n         * @returns {Document} The shived document.\n         */\n        function shivDocument(ownerDocument) {\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          var data = getExpandoData(ownerDocument);\n\n          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n            data.hasCSS = !!addStyleSheet(ownerDocument,\n                                          // corrects block display not defined in IE6/7/8/9\n                                          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +\n                                            // adds styling not present in IE6/7/8/9\n                                            'mark{background:#FF0;color:#000}' +\n                                            // hides non-rendered elements\n                                            'template{display:none}'\n                                         );\n          }\n          if (!supportsUnknownElements) {\n            shivMethods(ownerDocument, data);\n          }\n          return ownerDocument;\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * The `html5` object is exposed so that more elements can be shived and\n         * existing shiving can be detected on iframes.\n         * @type Object\n         * @example\n         *\n         * // options can be changed before the script is included\n         * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n         */\n        var html5 = {\n\n          /**\n           * An array or space separated string of node names of the elements to shiv.\n           * @memberOf html5\n           * @type Array|String\n           */\n          'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',\n\n          /**\n           * current version of html5shiv\n           */\n          'version': version,\n\n          /**\n           * A flag to indicate that the HTML5 style sheet should be inserted.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivCSS': (options.shivCSS !== false),\n\n          /**\n           * Is equal to true if a browser supports creating unknown/HTML5 elements\n           * @memberOf html5\n           * @type boolean\n           */\n          'supportsUnknownElements': supportsUnknownElements,\n\n          /**\n           * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n           * methods should be overwritten.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivMethods': (options.shivMethods !== false),\n\n          /**\n           * A string to describe the type of `html5` object (\"default\" or \"default print\").\n           * @memberOf html5\n           * @type String\n           */\n          'type': 'default',\n\n          // shivs the document according to the specified `html5` object options\n          'shivDocument': shivDocument,\n\n          //creates a shived element\n          createElement: createElement,\n\n          //creates a shived documentFragment\n          createDocumentFragment: createDocumentFragment\n        };\n\n        /*--------------------------------------------------------------------------*/\n\n        // expose html5\n        window.html5 = html5;\n\n        // shiv the document\n        shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/respond.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Scripts/respond.matchmedia.addListener.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n(function(w) {\n  \"use strict\";\n  if (w.matchMedia && w.matchMedia(\"all\").addListener) {\n    return false;\n  }\n  var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia(\"only all\").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) {\n    w.clearTimeout(timeoutID);\n    timeoutID = w.setTimeout(function() {\n      for (var i = 0, il = queries.length; i < il; i++) {\n        var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches;\n        if (matches !== mql.matches) {\n          mql.matches = matches;\n          for (var j = 0, jl = listeners.length; j < jl; j++) {\n            listeners[j].call(w, mql);\n          }\n        }\n      }\n    }, 30);\n  };\n  w.matchMedia = function(media) {\n    var mql = localMatchMedia(media), listeners = [], index = 0;\n    mql.addListener = function(listener) {\n      if (!hasMediaQueries) {\n        return;\n      }\n      if (!isListening) {\n        isListening = true;\n        w.addEventListener(\"resize\", handleChange, true);\n      }\n      if (index === 0) {\n        index = queries.push({\n          mql: mql,\n          listeners: listeners\n        });\n      }\n      listeners.push(listener);\n    };\n    mql.removeListener = function(listener) {\n      for (var i = 0, il = listeners.length; i < il; i++) {\n        if (listeners[i] === listener) {\n          listeners.splice(i, 1);\n        }\n      }\n    };\n    return mql;\n  };\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Startup.cs",
    "content": "﻿using Microsoft.Owin;\nusing Owin;\n\n[assembly: OwinStartupAttribute(typeof(Linq2TwitterDemos_Mvc.Startup))]\nnamespace Linq2TwitterDemos_Mvc\n{\n    public partial class Startup\n    {\n        public void Configuration(IAppBuilder app)\n        {\n            ConfigureAuth(app);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ConfirmEmail.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Confirm Email\";\n}\n\n<h2>@ViewBag.Title.</h2>\n<div>\n    <p>\n        Thank you for confirming your email. Please @Html.ActionLink(\"Click here to Log in\", \"Login\", \"Account\", routeValues: null, htmlAttributes: new { id = \"loginLink\" })\n    </p>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ExternalLoginConfirmation.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.ExternalLoginConfirmationViewModel\n@{\n    ViewBag.Title = \"Register\";\n}\n<h2>@ViewBag.Title.</h2>\n<h3>Associate your @ViewBag.LoginProvider account.</h3>\n\n@using (Html.BeginForm(\"ExternalLoginConfirmation\", \"Account\", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n\n    <h4>Association Form</h4>\n    <hr />\n    @Html.ValidationSummary(true, \"\", new { @class = \"text-danger\" })\n    <p class=\"text-info\">\n        You've successfully authenticated with <strong>@ViewBag.LoginProvider</strong>.\n        Please enter a user name for this site below and click the Register button to finish\n        logging in.\n    </p>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Email, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Email, new { @class = \"form-control\" })\n            @Html.ValidationMessageFor(m => m.Email, \"\", new { @class = \"text-danger\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Register\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ExternalLoginFailure.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Login Failure\";\n}\n\n<hgroup>\n    <h2>@ViewBag.Title.</h2>\n    <h3 class=\"text-danger\">Unsuccessful login with service.</h3>\n</hgroup>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ForgotPassword.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.ForgotPasswordViewModel\n@{\n    ViewBag.Title = \"Forgot your password?\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"ForgotPassword\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Enter your email.</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Email, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Email, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Email Link\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ForgotPasswordConfirmation.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Forgot Password Confirmation\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n</hgroup>\n<div>\n    <p>\n        Please check your email to reset your password.\n    </p>\n</div>\n\t\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/Login.cshtml",
    "content": "﻿@using Linq2TwitterDemos_Mvc.Models\n@model LoginViewModel\n@{\n    ViewBag.Title = \"Log in\";\n}\n\n<h2>@ViewBag.Title.</h2>\n<div class=\"row\">\n    <div class=\"col-md-8\">\n        <section id=\"loginForm\">\n            @using (Html.BeginForm(\"Login\", \"Account\", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n            {\n                @Html.AntiForgeryToken()\n                <h4>Use a local account to log in.</h4>\n                <hr />\n                @Html.ValidationSummary(true, \"\", new { @class = \"text-danger\" })\n                <div class=\"form-group\">\n                    @Html.LabelFor(m => m.Email, new { @class = \"col-md-2 control-label\" })\n                    <div class=\"col-md-10\">\n                        @Html.TextBoxFor(m => m.Email, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(m => m.Email, \"\", new { @class = \"text-danger\" })\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n                    <div class=\"col-md-10\">\n                        @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n                        @Html.ValidationMessageFor(m => m.Password, \"\", new { @class = \"text-danger\" })\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <div class=\"col-md-offset-2 col-md-10\">\n                        <div class=\"checkbox\">\n                            @Html.CheckBoxFor(m => m.RememberMe)\n                            @Html.LabelFor(m => m.RememberMe)\n                        </div>\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <div class=\"col-md-offset-2 col-md-10\">\n                        <input type=\"submit\" value=\"Log in\" class=\"btn btn-default\" />\n                    </div>\n                </div>\n                <p>\n                    @Html.ActionLink(\"Register as a new user\", \"Register\")\n                </p>\n                @* Enable this once you have account confirmation enabled for password reset functionality\n                    <p>\n                        @Html.ActionLink(\"Forgot your password?\", \"ForgotPassword\")\n                    </p>*@\n            }\n        </section>\n    </div>\n    <div class=\"col-md-4\">\n        <section id=\"socialLoginForm\">\n            @Html.Partial(\"_ExternalLoginsListPartial\", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl })\n        </section>\n    </div>\n</div>\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/Register.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.RegisterViewModel\n@{\n    ViewBag.Title = \"Register\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"Register\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Create a new account.</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Email, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Email, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Register\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ResetPassword.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.ResetPasswordViewModel\n@{\n    ViewBag.Title = \"Reset password\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"ResetPassword\", \"Account\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Reset your password.</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    @Html.HiddenFor(model => model.Code)\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Email, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Email, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Password, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.Password, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Reset\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/ResetPasswordConfirmation.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Reset password confirmation\";\n}\n\n<hgroup class=\"title\">\n    <h1>@ViewBag.Title.</h1>\n</hgroup>\n<div>\n    <p>\n        Your password has been reset. Please @Html.ActionLink(\"click here to log in\", \"Login\", \"Account\", routeValues: null, htmlAttributes: new { id = \"loginLink\" })\n    </p>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/SendCode.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.SendCodeViewModel\n@{\n    ViewBag.Title = \"Send\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"SendCode\", \"Account\", new { ReturnUrl = Model.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" })) {\n    @Html.AntiForgeryToken()\n    @Html.Hidden(\"rememberMe\", @Model.RememberMe)\n    <h4>Send verification code</h4>\n    <hr />\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            Select Two-Factor Authentication Provider:\n            @Html.DropDownListFor(model => model.SelectedProvider, Model.Providers)\n            <input type=\"submit\" value=\"Submit\" class=\"btn btn-default\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/VerifyCode.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.VerifyCodeViewModel\n@{\n    ViewBag.Title = \"Verify\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"VerifyCode\", \"Account\", new { ReturnUrl = Model.ReturnUrl }, FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" })) {\n    @Html.AntiForgeryToken()\n    @Html.Hidden(\"provider\", @Model.Provider)\n    @Html.Hidden(\"rememberMe\", @Model.RememberMe)\n    <h4>Enter verification code</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Code, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Code, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <div class=\"checkbox\">\n                @Html.CheckBoxFor(m => m.RememberBrowser)\n                @Html.LabelFor(m => m.RememberBrowser)\n            </div>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Submit\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Account/_ExternalLoginsListPartial.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.ExternalLoginListViewModel\n@using Microsoft.Owin.Security\n\n<h4>Use another service to log in.</h4>\n<hr />\n@{\n    var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes();\n    if (loginProviders.Count() == 0) {\n        <div>\n            <p>\n                There are no external authentication services configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                for details on setting up this ASP.NET application to support logging in via external services.\n            </p>\n        </div>\n    }\n    else {\n        using (Html.BeginForm(\"ExternalLogin\", \"Account\", new { ReturnUrl = Model.ReturnUrl })) {\n            @Html.AntiForgeryToken()\n            <div id=\"socialLoginList\">\n                <p>\n                    @foreach (AuthenticationDescription p in loginProviders) {\n                        <button type=\"submit\" class=\"btn btn-default\" id=\"@p.AuthenticationType\" name=\"provider\" value=\"@p.AuthenticationType\" title=\"Log in using your @p.Caption account\">@p.AuthenticationType</button>\n                    }\n                </p>\n            </div>\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Home/About.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"About\";\n}\n<h2>@ViewBag.Title.</h2>\n<h3>@ViewBag.Message</h3>\n\n<p>Use this area to provide additional information.</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Home/Contact.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Contact\";\n}\n<h2>@ViewBag.Title.</h2>\n<h3>@ViewBag.Message</h3>\n\n<address>\n    One Microsoft Way<br />\n    Redmond, WA 98052-6399<br />\n    <abbr title=\"Phone\">P:</abbr>\n    425.555.0100\n</address>\n\n<address>\n    <strong>Support:</strong>   <a href=\"mailto:Support@example.com\">Support@example.com</a><br />\n    <strong>Marketing:</strong> <a href=\"mailto:Marketing@example.com\">Marketing@example.com</a>\n</address>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Home/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Home Page\";\n}\n\n<div class=\"jumbotron\">\n    <h1>LINQ to Twitter</h1>\n    <p class=\"lead\">LINQ to Twitter is an open-source 3rd party library for working with the Twitter API. Please select a menu item to view demos for how LINQ to Twitter supports each category of the Twitter API.</p>\n    <p><a href=\"http://linqtotwitter.codeplex.com\" class=\"btn btn-primary btn-large\">Learn more &raquo;</a></p>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>Getting started</h2>\n        <p>\n            LINQ to Twitter has extensive documentation. You can get basic guidance, security info, and specifications for each API. Be sure to check out the FAQ too.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/documentation\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get help</h2>\n        <p>\n            When these demos don't have the info you need, you can still get help through the discussion forums. Tip: the Search box is often helpful in finding answers.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/discussions\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get the code</h2>\n        <p>\n            You can download the code from the LINQ to Twitter site on CodePlex.com, but the most convenient way to use LINQ to Twitter is via NuGet.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"http://www.nuget.org/packages/linqtotwitter\">Learn more &raquo;</a>\n        </p>\n    </div>\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Manage/AddPhoneNumber.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.AddPhoneNumberViewModel\n@{\n    ViewBag.Title = \"Phone Number\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"AddPhoneNumber\", \"Manage\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Add a phone number</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Number, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Number, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Submit\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Manage/ChangePassword.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.ChangePasswordViewModel\n@{\n    ViewBag.Title = \"Change Password\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"ChangePassword\", \"Manage\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    <h4>Change Password Form</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.OldPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.OldPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.NewPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.NewPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" value=\"Change password\" class=\"btn btn-default\" />\n        </div>\n    </div>\n}\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Manage/Index.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.IndexViewModel\n@{\n    ViewBag.Title = \"Manage\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n<p class=\"text-success\">@ViewBag.StatusMessage</p>\n<div>\n    <h4>Change your account settings</h4>\n    <hr />\n    <dl class=\"dl-horizontal\">\n        <dt>Password:</dt>\n        <dd>\n            [\n            @if (Model.HasPassword)\n            {\n                @Html.ActionLink(\"Change your password\", \"ChangePassword\")\n            }\n            else\n            {\n                @Html.ActionLink(\"Create\", \"SetPassword\")\n            }\n            ]\n        </dd>\n        <dt>External Logins:</dt>\n        <dd>\n            @Model.Logins.Count [\n            @Html.ActionLink(\"Manage\", \"ManageLogins\") ]\n        </dd>\n        @*\n            Phone Numbers can used as a second factor of verification in a two-factor authentication system.\n             \n             See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                for details on setting up this ASP.NET application to support two-factor authentication using SMS.\n             \n             Uncomment the following block after you have set up two-factor authentication\n        *@\n        @*  \n            <dt>Phone Number:</dt>\n            <dd>\n                @(Model.PhoneNumber ?? \"None\") [\n                @if (Model.PhoneNumber != null)\n                {\n                    @Html.ActionLink(\"Change\", \"AddPhoneNumber\")\n                    @: &nbsp;|&nbsp;\n                    @Html.ActionLink(\"Remove\", \"RemovePhoneNumber\")\n                }\n                else\n                {\n                    @Html.ActionLink(\"Add\", \"AddPhoneNumber\")\n                }\n                ]\n            </dd>\n        *@\n        <dt>Two-Factor Authentication:</dt>\n        <dd>\n            <p>\n                There are no two-factor authentication providers configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                for details on setting up this ASP.NET application to support two-factor authentication.\n            </p>\n            @*@if (Model.TwoFactor)\n                {\n                    using (Html.BeginForm(\"DisableTwoFactorAuthentication\", \"Manage\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n                    {\n                        @Html.AntiForgeryToken()\n                        <text>Enabled\n                        <input type=\"submit\" value=\"Disable\" class=\"btn btn-link\" />\n                        </text>\n                    }\n                }\n                else\n                {\n                    using (Html.BeginForm(\"EnableTwoFactorAuthentication\", \"Manage\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n                    {\n                        @Html.AntiForgeryToken()\n                        <text>Disabled\n                        <input type=\"submit\" value=\"Enable\" class=\"btn btn-link\" />\n                        </text>\n                    }\n                }*@\n        </dd>\n    </dl>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Manage/ManageLogins.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.ManageLoginsViewModel\n@using Microsoft.Owin.Security\n@{\n    ViewBag.Title = \"Manage your external logins\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n<p class=\"text-success\">@ViewBag.StatusMessage</p>\n@{\n    var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes();\n    if (loginProviders.Count() == 0) {\n        <div>\n            <p>\n                There are no external authentication services configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=313242\">this article</a>\n                for details on setting up this ASP.NET application to support logging in via external services.\n            </p>\n        </div>\n    }\n    else\n    {\n        if (Model.CurrentLogins.Count > 0)\n        {\n            <h4>Registered Logins</h4>\n            <table class=\"table\">\n                <tbody>\n                    @foreach (var account in Model.CurrentLogins)\n                    {\n                        <tr>\n                            <td>@account.LoginProvider</td>\n                            <td>\n                                @if (ViewBag.ShowRemoveButton)\n                                {\n                                    using (Html.BeginForm(\"RemoveLogin\", \"Manage\"))\n                                    {\n                                        @Html.AntiForgeryToken()\n                                        <div>\n                                            @Html.Hidden(\"loginProvider\", account.LoginProvider)\n                                            @Html.Hidden(\"providerKey\", account.ProviderKey)\n                                            <input type=\"submit\" class=\"btn btn-default\" value=\"Remove\" title=\"Remove this @account.LoginProvider login from your account\" />\n                                        </div>\n                                    }\n                                }\n                                else\n                                {\n                                    @: &nbsp;\n                                }\n                            </td>\n                        </tr>\n                    }\n                </tbody>\n            </table>\n        }\n        if (Model.OtherLogins.Count > 0)\n        {\n            using (Html.BeginForm(\"LinkLogin\", \"Manage\"))\n            {\n                @Html.AntiForgeryToken()\n                <div id=\"socialLoginList\">\n                <p>\n                    @foreach (AuthenticationDescription p in Model.OtherLogins)\n                    {\n                        <button type=\"submit\" class=\"btn btn-default\" id=\"@p.AuthenticationType\" name=\"provider\" value=\"@p.AuthenticationType\" title=\"Log in using your @p.Caption account\">@p.AuthenticationType</button>\n                    }\n                </p>\n                </div>\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Manage/SetPassword.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.SetPasswordViewModel\n@{\n    ViewBag.Title = \"Create Password\";\n}\n\n<h2>@ViewBag.Title.</h2>\n<p class=\"text-info\">\n    You do not have a local username/password for this site. Add a local\n    account so you can log in without an external login.\n</p>\n\n@using (Html.BeginForm(\"SetPassword\", \"Manage\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n\n    <h4>Create Local Login</h4>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.NewPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.NewPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.ConfirmPassword, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" value=\"Set password\" class=\"btn btn-default\" />\n        </div>\n    </div>\n}\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Manage/VerifyPhoneNumber.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.VerifyPhoneNumberViewModel\n@{\n    ViewBag.Title = \"Verify Phone Number\";\n}\n\n<h2>@ViewBag.Title.</h2>\n\n@using (Html.BeginForm(\"VerifyPhoneNumber\", \"Manage\", FormMethod.Post, new { @class = \"form-horizontal\", role = \"form\" }))\n{\n    @Html.AntiForgeryToken()\n    @Html.Hidden(\"phoneNumber\", @Model.PhoneNumber)\n    <h4>Enter verification code</h4>\n    <h5>@ViewBag.Status</h5>\n    <hr />\n    @Html.ValidationSummary(\"\", new { @class = \"text-danger\" })\n    <div class=\"form-group\">\n        @Html.LabelFor(m => m.Code, new { @class = \"col-md-2 control-label\" })\n        <div class=\"col-md-10\">\n            @Html.TextBoxFor(m => m.Code, new { @class = \"form-control\" })\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <input type=\"submit\" class=\"btn btn-default\" value=\"Submit\" />\n        </div>\n    </div>\n}\n\n@section Scripts {\n    @Scripts.Render(\"~/bundles/jqueryval\")\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/OAuth/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Authorizing Application\";\n}\n\n<h2>Authorize with OAuth</h2>\n@Html.ActionLink(\"Begin the Authorization Process\", \"Begin\")\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Shared/Error.cshtml",
    "content": "﻿@model System.Web.Mvc.HandleErrorInfo\n\n@{\n    ViewBag.Title = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Shared/Lockout.cshtml",
    "content": "﻿@model System.Web.Mvc.HandleErrorInfo\n\n@{\n    ViewBag.Title = \"Locked Out\";\n}\n\n<hgroup>\n    <h1 class=\"text-danger\">Locked out.</h1>\n    <h2 class=\"text-danger\">This account has been locked out, please try again later.</h2>\n</hgroup>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>@ViewBag.Title - My ASP.NET Application</title>\n    @Styles.Render(\"~/Content/css\")\n    @Scripts.Render(\"~/bundles/modernizr\")\n\n</head>\n<body>\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n        <div class=\"container\">\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                </button>\n                @Html.ActionLink(\"Application name\", \"Index\", \"Home\", new { area = \"\" }, new { @class = \"navbar-brand\" })\n            </div>\n            <div class=\"navbar-collapse collapse\">\n                <ul class=\"nav navbar-nav\">\n                    <li>@Html.ActionLink(\"Home\", \"Index\", \"Home\")</li>\n                    <li>@Html.ActionLink(\"Status\", \"Index\", \"StatusDemos\")</li>\n                </ul>\n                @Html.Partial(\"_LoginPartial\")\n            </div>\n        </div>\n    </div>\n    <div class=\"container body-content\">\n        @RenderBody()\n        <hr />\n        <footer>\n            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>\n        </footer>\n    </div>\n\n    @Scripts.Render(\"~/bundles/jquery\")\n    @Scripts.Render(\"~/bundles/bootstrap\")\n    @RenderSection(\"scripts\", required: false)\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Shared/_LoginPartial.cshtml",
    "content": "﻿@using Microsoft.AspNet.Identity\n@if (Request.IsAuthenticated)\n{\n    using (Html.BeginForm(\"LogOff\", \"Account\", FormMethod.Post, new { id = \"logoutForm\", @class = \"navbar-right\" }))\n    {\n    @Html.AntiForgeryToken()\n\n    <ul class=\"nav navbar-nav navbar-right\">\n        <li>\n            @Html.ActionLink(\"Hello \" + User.Identity.GetUserName() + \"!\", \"Index\", \"Manage\", routeValues: null, htmlAttributes: new { title = \"Manage\" })\n        </li>\n        <li><a href=\"javascript:document.getElementById('logoutForm').submit()\">Log off</a></li>\n    </ul>\n    }\n}\nelse\n{\n    <ul class=\"nav navbar-nav navbar-right\">\n        <li>@Html.ActionLink(\"Register\", \"Register\", \"Account\", routeValues: null, htmlAttributes: new { id = \"registerLink\" })</li>\n        <li>@Html.ActionLink(\"Log in\", \"Login\", \"Account\", routeValues: null, htmlAttributes: new { id = \"loginLink\" })</li>\n    </ul>\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/StatusDemos/HomeTimeline.cshtml",
    "content": "﻿@model IEnumerable<Linq2TwitterDemos_Mvc.Models.TweetViewModel>\n\n@{\n    ViewBag.Title = \"Home Timeline\";\n}\n\n<h2>Home Timeline Demo</h2>\n\n<table class=\"table\">\n    <tr>\n        <th>\n            @Html.DisplayNameFor(model => model.ImageUrl)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.ScreenName)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.Text)\n        </th>\n        <th></th>\n    </tr>\n\n    @foreach (var item in Model)\n    {\n        <tr>\n            <td>\n                <img src=\"@item.ImageUrl\" alt=\"@item.ScreenName\" />\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.ScreenName)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.Text)\n            </td>\n        </tr>\n    }\n\n</table>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/StatusDemos/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Status Demos\";\n}\n\n<h2>Status Demos</h2>\n\n<p>@Html.ActionLink(\"Tweet Demo\", \"Tweet\")</p>\n\n<p>@Html.ActionLink(\"Home Timeline Demo\", \"HomeTimeline\")</p>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/StatusDemos/Tweet.cshtml",
    "content": "﻿@model Linq2TwitterDemos_Mvc.Models.SendTweetViewModel\n\n@{\n    ViewBag.Title = \"Tweet\";\n}\n\n<h2>Tweet</h2>\n\n@using (Html.BeginForm())\n{\n    @Html.AntiForgeryToken()\n\n    <div class=\"form-horizontal\">\n        <h4>Tweet Demo</h4>\n        <hr />\n        @Html.ValidationSummary(true)\n        <div class=\"form-group\">\n            @Html.LabelFor(model => model.Text, new { @class = \"control-label col-md-2\" })\n            <div class=\"col-md-10\">\n                @Html.TextAreaFor(model => model.Text, new { @class = \"form-control\", rows = \"3\" })\n                @Html.ValidationMessageFor(model => model.Text)\n            </div>\n        </div>\n\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <input type=\"submit\" value=\"Send\" class=\"btn btn-default\" />\n            </div>\n        </div>\n        <div class=\"col-md-offset-2 col-md-10\">\n            @Html.DisplayFor(model => model.Response)\n        </div>\n    </div>\n}\n\n<div>\n    @Html.ActionLink(\"Back to List\", \"Index\")\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"Linq2TwitterDemos_Mvc\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.webServer>\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an attribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an attribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=301880\n  -->\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=(LocalDb)\\v11.0;AttachDbFilename=|DataDirectory|\\aspnet-Linq2TwitterDemos_Mvc-20141129041544.mdf;Initial Catalog=aspnet-Linq2TwitterDemos_Mvc-20141129041544;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <add key=\"webpages:Version\" value=\"3.0.0.0\" />\n    <add key=\"webpages:Enabled\" value=\"false\" />\n    <add key=\"ClientValidationEnabled\" value=\"true\" />\n    <add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />\n    \n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n  </appSettings>\n  <system.web>\n    <authentication mode=\"None\" />\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <httpRuntime targetFramework=\"4.5\" />\n  </system.web>\n  <system.webServer>\n    <modules>\n      <remove name=\"FormsAuthentication\" />\n    </modules>\n  </system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" culture=\"neutral\" publicKeyToken=\"30ad4fe6b2a6aeed\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.2.0\" newVersion=\"5.2.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Optimization\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-1.1.0.0\" newVersion=\"1.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_Mvc/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net45\" />\n  <package id=\"bootstrap\" version=\"3.4.1\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework\" version=\"6.1.2\" targetFramework=\"net45\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net45\" />\n  <package id=\"jQuery.Validation\" version=\"1.19.4\" targetFramework=\"net45\" />\n  <package id=\"LinqToTwitter\" version=\"3.1.1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"2.2.0-alpha1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"2.2.0-alpha1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.2.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.jQuery.Unobtrusive.Validation\" version=\"3.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Host.SystemWeb\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Facebook\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Google\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.MicrosoftAccount\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" />\n  <package id=\"Modernizr\" version=\"2.8.3\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" />\n  <package id=\"Respond\" version=\"1.4.2\" targetFramework=\"net45\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n  </appSettings>\n  <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/App.xaml",
    "content": "﻿<Application x:Class=\"Linq2TwitterDemos_WPF.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n         \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/App.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\n\nnamespace Linq2TwitterDemos_WPF\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/Linq2TwitterDemos_WPF.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{6F72EB65-5A86-4935-B8F5-350B4524C89D}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_WPF</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_WPF</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <NuGetPackageImportStamp>a6f240da</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.28.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Compile Include=\"SharedState.cs\" />\n    <Compile Include=\"StatusDemos\\HomeTimelineWindow.xaml.cs\">\n      <DependentUpon>HomeTimelineWindow.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"ViewModels\\Tweet.cs\" />\n    <Compile Include=\"ViewModels\\TweetViewModel.cs\" />\n    <Page Include=\"MainWindow.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"MainWindow.xaml.cs\">\n      <DependentUpon>MainWindow.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Page Include=\"OAuth.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StatusDemos\\HomeTimelineWindow.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"OAuth.xaml.cs\">\n      <DependentUpon>OAuth.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{CAAFF164-A681-4183-BB83-A07B668F7FFC}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"Linq2TwitterDemos_WPF.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"MainWindow\" Height=\"350\" Width=\"525\" Loaded=\"Window_Loaded\">\n    <Grid>\n        <DockPanel LastChildFill=\"False\" >\n            <Menu DockPanel.Dock=\"Top\">\n                <MenuItem BorderThickness=\"5\" Header=\"Status\">\n                    <MenuItem BorderThickness=\"5\" Header=\"Home Timeline\" Tag=\"Linq2TwitterDemos_WPF.StatusDemos.HomeTimelineWindow\" Click=\"MenuItem_Click\"/>\n                </MenuItem>\n            </Menu>\n        </DockPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/MainWindow.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace Linq2TwitterDemos_WPF\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n\n        void Window_Loaded(object sender, RoutedEventArgs e)\n        {\n            if (SharedState.Authorizer == null)\n                new OAuth().Show();\n        }\n\n        private void MenuItem_Click(object sender, RoutedEventArgs e)\n        {\n            var type = Type.GetType((sender as MenuItem).Tag as string);\n            Window formInst = (Window)Activator.CreateInstance(type);\n\n            formInst.Show();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/OAuth.xaml",
    "content": "﻿<Window x:Class=\"Linq2TwitterDemos_WPF.OAuth\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"OAuth\" Height=\"350\" Width=\"525\" Loaded=\"Window_Loaded\">\n    <Grid>\n        <DockPanel HorizontalAlignment=\"Stretch\" LastChildFill=\"False\" VerticalAlignment=\"Stretch\" Grid.ColumnSpan=\"2\">\n            <WebBrowser x:Name=\"OAuthWebBrowser\" DockPanel.Dock=\"Top\" Height=\"275\"/>\n            <StackPanel VerticalAlignment=\"Center\" DockPanel.Dock=\"Bottom\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\">\n                <Label Content=\"PIN:\" Margin=\"5\" VerticalAlignment=\"Center\"/>\n                <TextBox x:Name=\"PinTextBox\" TextWrapping=\"Wrap\" Width=\"120\" Margin=\"5\" VerticalAlignment=\"Center\"/>\n                <Button x:Name=\"SubmitPinButton\" Content=\"Submit Pin\" Width=\"75\" Margin=\"5\" VerticalAlignment=\"Center\" Click=\"SubmitPinButton_Click\"/>\n            </StackPanel>\n        </DockPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/OAuth.xaml.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Linq;\nusing System.Windows;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WPF\n{\n    /// <summary>\n    /// Interaction logic for OAuth.xaml\n    /// </summary>\n    public partial class OAuth : Window\n    {\n        PinAuthorizer pinAuth = new PinAuthorizer();\n\n        public OAuth()\n        {\n            InitializeComponent();\n        }\n\n        async void Window_Loaded(object sender, RoutedEventArgs e)\n        {\n            pinAuth = new PinAuthorizer\n            {\n                // Get the ConsumerKey and ConsumerSecret for your app and load them here.\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                },\n                // Note: GetPin isn't used here because we've broken the authorization\n                // process into two parts: begin and complete\n                GoToTwitterAuthorization = pageLink => Dispatcher.BeginInvoke((Action)\n                    (() => OAuthWebBrowser.Navigate(new Uri(pageLink, UriKind.Absolute))))\n            };\n\n            await pinAuth.BeginAuthorizeAsync();\n        }\n\n        async void SubmitPinButton_Click(object sender, RoutedEventArgs e)\n        {\n            await pinAuth.CompleteAuthorizeAsync(PinTextBox.Text);\n            SharedState.Authorizer = pinAuth;\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n            //\n            //var credentials = pinAuth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            Close();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_WPF\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_WPF\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n    //(used if a resource is not found in the page, \n    // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n    //(used if a resource is not found in the page, \n    // app, or any theme specific resource dictionaries)\n)]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34003\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WPF.Properties\n{\n\n\n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources\n    {\n\n        private static global::System.Resources.ResourceManager resourceMan;\n\n        private static global::System.Globalization.CultureInfo resourceCulture;\n\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources()\n        {\n        }\n\n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager\n        {\n            get\n            {\n                if ((resourceMan == null))\n                {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Linq2TwitterDemos_WPF.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n\n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture\n        {\n            get\n            {\n                return resourceCulture;\n            }\n            set\n            {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34003\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WPF.Properties\n{\n\n\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"11.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase\n    {\n\n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n\n        public static Settings Default\n        {\n            get\n            {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/SharedState.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WPF\n{\n    class SharedState\n    {\n        public static IAuthorizer Authorizer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/StatusDemos/HomeTimelineWindow.xaml",
    "content": "﻿<Window x:Class=\"Linq2TwitterDemos_WPF.StatusDemos.HomeTimelineWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"HomeTimelineWindow\" Height=\"350\" Width=\"525\" Loaded=\"Window_Loaded\">\n    <Grid>\n        <DataGrid HorizontalAlignment=\"Stretch\" Margin=\"5\" VerticalAlignment=\"Stretch\" ItemsSource=\"{Binding Tweets}\"/>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/StatusDemos/HomeTimelineWindow.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing Linq2TwitterDemos_WPF.ViewModels;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WPF.StatusDemos\n{\n    /// <summary>\n    /// Interaction logic for HomeTimelineWindow.xaml\n    /// </summary>\n    public partial class HomeTimelineWindow : Window\n    {\n        public HomeTimelineWindow()\n        {\n            InitializeComponent();\n\n            DataContext = new TweetViewModel();\n        }\n\n        async void Window_Loaded(object sender, RoutedEventArgs e)\n        {\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home\n                 select new Tweet\n                 {\n                     ImageSource = tweet.User.ProfileImageUrl,\n                     UserName = tweet.User.ScreenNameResponse,\n                     Message = tweet.Text\n                 })\n                .ToListAsync();\n\n            var tweetCollection = (DataContext as TweetViewModel).Tweets;\n            tweetCollection.Clear();\n            tweets.ForEach(tweet => tweetCollection.Add(tweet));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/ViewModels/Tweet.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WPF.ViewModels\n{\n    public class Tweet\n    {\n        public string UserName { get; set; }\n\n        public string Message { get; set; }\n\n        public string ImageSource { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/ViewModels/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WPF.ViewModels\n{\n    public class TweetViewModel\n    {\n        public TweetViewModel()\n        {\n            Tweets = new ObservableCollection<Tweet>();\n        }\n\n        public ObservableCollection<Tweet> Tweets { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WPF/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/About.aspx",
    "content": "﻿<%@ Page Title=\"About\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"About.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.About\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n    <h3>Your application description page.</h3>\n    <p>Use this area to provide additional information.</p>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/About.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class About : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/About.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms\n{\n\n\n    public partial class About\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/AddPhoneNumber.aspx",
    "content": "﻿<%@ Page Title=\"Phone Number\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"AddPhoneNumber.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.AddPhoneNumber\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n\n    <div class=\"form-horizontal\">\n        <h4>Add a phone number</h4>\n        <hr />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <p class=\"text-danger\">\n            <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n        </p>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"PhoneNumber\" CssClass=\"col-md-2 control-label\">Phone Number</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"PhoneNumber\" CssClass=\"form-control\" TextMode=\"Phone\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"PhoneNumber\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The PhoneNumber field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"PhoneNumber_Click\"\n                    Text=\"Submit\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/AddPhoneNumber.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing System.Threading.Tasks;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class AddPhoneNumber : System.Web.UI.Page\n    {\n        protected void PhoneNumber_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var code = manager.GenerateChangePhoneNumberToken(User.Identity.GetUserId(), PhoneNumber.Text);\n            if (manager.SmsService != null)\n            {\n                var message = new IdentityMessage\n                {\n                    Destination = PhoneNumber.Text,\n                    Body = \"Your security code is \" + code\n                };\n\n                manager.SmsService.Send(message);\n            }\n\n            Response.Redirect(\"/Account/VerifyPhoneNumber?PhoneNumber=\" + HttpUtility.UrlEncode(PhoneNumber.Text));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/AddPhoneNumber.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class AddPhoneNumber {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// PhoneNumber control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox PhoneNumber;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Confirm.aspx",
    "content": "﻿<%@ Page Title=\"Account Confirmation\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Confirm.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.Confirm\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n\n    <div>\n        <asp:PlaceHolder runat=\"server\" ID=\"successPanel\" ViewStateMode=\"Disabled\" Visible=\"true\">\n            <p>\n                Thank you for confirming your account. Click <asp:HyperLink ID=\"login\" runat=\"server\" NavigateUrl=\"~/Account/Login\">here</asp:HyperLink>  to login             \n            </p>\n        </asp:PlaceHolder>\n        <asp:PlaceHolder runat=\"server\" ID=\"errorPanel\" ViewStateMode=\"Disabled\" Visible=\"false\">\n            <p class=\"text-danger\">\n                An error has occurred.\n            </p>\n        </asp:PlaceHolder>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Confirm.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class Confirm : Page\n    {\n        protected string StatusMessage\n        {\n            get;\n            private set;\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            string code = IdentityHelper.GetCodeFromRequest(Request);\n            string userId = IdentityHelper.GetUserIdFromRequest(Request);\n            if (code != null && userId != null)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var result = manager.ConfirmEmail(userId, code);\n                if (result.Succeeded)\n                {\n                    successPanel.Visible = true;\n                    return;\n                }\n            }\n            successPanel.Visible = false;\n            errorPanel.Visible = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Confirm.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class Confirm {\n        \n        /// <summary>\n        /// successPanel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder successPanel;\n        \n        /// <summary>\n        /// login control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink login;\n        \n        /// <summary>\n        /// errorPanel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder errorPanel;\n\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Forgot.aspx",
    "content": "﻿<%@ Page Title=\"Forgot password\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Forgot.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.ForgotPassword\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            <asp:PlaceHolder id=\"loginForm\" runat=\"server\">\n                <div class=\"form-horizontal\">\n                    <h4>Forgot your password?</h4>\n                    <hr />\n                    <asp:PlaceHolder runat=\"server\" ID=\"ErrorMessage\" Visible=\"false\">\n                        <p class=\"text-danger\">\n                            <asp:Literal runat=\"server\" ID=\"FailureText\" />\n                        </p>\n                    </asp:PlaceHolder>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" OnClick=\"Forgot\" Text=\"Email Link\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n            </asp:PlaceHolder>\n            <asp:PlaceHolder runat=\"server\" ID=\"DisplayEmail\" Visible=\"false\">\n                <p class=\"text-info\">\n                    Please check your email to reset your password.\n                </p>\n            </asp:PlaceHolder>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Forgot.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class ForgotPassword : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n        }\n\n        protected void Forgot(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                // Validate the user's email address\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                ApplicationUser user = manager.FindByName(Email.Text);\n                if (user == null || !manager.IsEmailConfirmed(user.Id))\n                {\n                    FailureText.Text = \"The user either does not exist or is not confirmed.\";\n                    ErrorMessage.Visible = true;\n                    return;\n                }\n                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                // Send email with the code and the redirect to reset password page\n                //string code = manager.GeneratePasswordResetToken(user.Id);\n                //string callbackUrl = IdentityHelper.GetResetPasswordRedirectUrl(code, Request);\n                //manager.SendEmail(user.Id, \"Reset Password\", \"Please reset your password by clicking <a href=\\\"\" + callbackUrl + \"\\\">here</a>.\");\n                loginForm.Visible = false;\n                DisplayEmail.Visible = true;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Forgot.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class ForgotPassword {\n        \n        /// <summary>\n        /// loginForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder loginForm;\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;\n        \n        /// <summary>\n        /// FailureText control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal FailureText;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// DisplayEmail control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder DisplayEmail;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Lockout.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Lockout.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.Lockout\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <hgroup>\n        <h1>Locked out.</h1>\n        <h2 class=\"text-danger\">This account has been locked out, please try again later.</h2>\n    </hgroup>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Lockout.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class Lockout : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Lockout.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n\n\n    public partial class Lockout\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Login.aspx",
    "content": "﻿<%@ Page Title=\"Log in\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Login.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.Login\" Async=\"true\" %>\n\n<%@ Register Src=\"~/Account/OpenAuthProviders.ascx\" TagPrefix=\"uc\" TagName=\"OpenAuthProviders\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            <section id=\"loginForm\">\n                <div class=\"form-horizontal\">\n                    <h4>Use a local account to log in.</h4>\n                    <hr />\n                    <asp:PlaceHolder runat=\"server\" ID=\"ErrorMessage\" Visible=\"false\">\n                        <p class=\"text-danger\">\n                            <asp:Literal runat=\"server\" ID=\"FailureText\" />\n                        </p>\n                    </asp:PlaceHolder>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"Password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"Password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Password\" CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <div class=\"checkbox\">\n                                <asp:CheckBox runat=\"server\" ID=\"RememberMe\" />\n                                <asp:Label runat=\"server\" AssociatedControlID=\"RememberMe\">Remember me?</asp:Label>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" OnClick=\"LogIn\" Text=\"Log in\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n                <p>\n                    <asp:HyperLink runat=\"server\" ID=\"RegisterHyperLink\" ViewStateMode=\"Disabled\">Register as a new user</asp:HyperLink>\n                </p>\n                <p>\n                    <%-- Enable this once you have account confirmation enabled for password reset functionality\n                    <asp:HyperLink runat=\"server\" ID=\"ForgotPasswordHyperLink\" ViewStateMode=\"Disabled\">Forgot your password?</asp:HyperLink>\n                    --%>\n                </p>\n            </section>\n        </div>\n\n        <div class=\"col-md-4\">\n            <section id=\"socialLoginForm\">\n                <uc:OpenAuthProviders runat=\"server\" ID=\"OpenAuthLogin\" />\n            </section>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Login.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class Login : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            RegisterHyperLink.NavigateUrl = \"Register\";\n            // Enable this once you have account confirmation enabled for password reset functionality\n            //ForgotPasswordHyperLink.NavigateUrl = \"Forgot\";\n            OpenAuthLogin.ReturnUrl = Request.QueryString[\"ReturnUrl\"];\n            var returnUrl = HttpUtility.UrlEncode(Request.QueryString[\"ReturnUrl\"]);\n            if (!String.IsNullOrEmpty(returnUrl))\n            {\n                RegisterHyperLink.NavigateUrl += \"?ReturnUrl=\" + returnUrl;\n            }\n        }\n\n        protected void LogIn(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                // Validate the user password\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();\n\n                // This doen't count login failures towards account lockout\n                // To enable password failures to trigger lockout, change to shouldLockout: true\n                var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: false);\n\n                switch (result)\n                {\n                    case SignInStatus.Success:\n                        IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                        break;\n                    case SignInStatus.LockedOut:\n                        Response.Redirect(\"/Account/Lockout\");\n                        break;\n                    case SignInStatus.RequiresVerification:\n                        Response.Redirect(String.Format(\"/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}\", \n                                                        Request.QueryString[\"ReturnUrl\"],\n                                                        RememberMe.Checked),\n                                          true);\n                        break;\n                    case SignInStatus.Failure:\n                    default:\n                        FailureText.Text = \"Invalid login attempt\";\n                        ErrorMessage.Visible = true;\n                        break;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Login.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class Login {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;\n        \n        /// <summary>\n        /// FailureText control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal FailureText;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// Password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Password;\n        \n        /// <summary>\n        /// RememberMe control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.CheckBox RememberMe;\n        \n        /// <summary>\n        /// RegisterHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink RegisterHyperLink;\n        \n        /// <summary>\n        /// OpenAuthLogin control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::Linq2TwitterDemos_WebForms.Account.OpenAuthProviders OpenAuthLogin;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Manage.aspx",
    "content": "﻿<%@ Page Title=\"Manage Account\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Manage.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.Manage\" %>\n\n<%@ Register Src=\"~/Account/OpenAuthProviders.ascx\" TagPrefix=\"uc\" TagName=\"OpenAuthProviders\" %>\n\n<asp:Content ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n\n    <div>\n        <asp:PlaceHolder runat=\"server\" ID=\"successMessage\" Visible=\"false\" ViewStateMode=\"Disabled\">\n            <p class=\"text-success\"><%: SuccessMessage %></p>\n        </asp:PlaceHolder>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"form-horizontal\">\n                <h4>Change your account settings</h4>\n                <hr />\n                <dl class=\"dl-horizontal\">\n                    <dt>Password:</dt>\n                    <dd>\n                        <asp:HyperLink NavigateUrl=\"/Account/ManagePassword\" Text=\"[Change]\" Visible=\"false\" ID=\"ChangePassword\" runat=\"server\" />\n                        <asp:HyperLink NavigateUrl=\"/Account/ManagePassword\" Text=\"[Create]\" Visible=\"false\" ID=\"CreatePassword\" runat=\"server\" />\n                    </dd>\n                    <dt>External Logins:</dt>\n                    <dd><%: LoginsCount %>\n                        <asp:HyperLink NavigateUrl=\"/Account/ManageLogins\" Text=\"[Manage]\" runat=\"server\" />\n\n                    </dd>\n                    <%--\n                        Phone Numbers can used as a second factor of verification in a two-factor authentication system.\n                        See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                        for details on setting up this ASP.NET application to support two-factor authentication using SMS.\n                        Uncomment the following blocks after you have set up two-factor authentication\n                    --%>\n                    <%--\n                    <dt>Phone Number:</dt>\n                    <% if (HasPhoneNumber)\n                       { %>\n                    <dd>\n                        <asp:HyperLink NavigateUrl=\"/Account/AddPhoneNumber\" runat=\"server\" Text=\"[Add]\" />\n                    </dd>\n                    <% }\n                       else\n                       { %>\n                    <dd>\n                        <asp:Label Text=\"\" ID=\"PhoneNumber\" runat=\"server\" />\n                        <asp:HyperLink NavigateUrl=\"/Account/AddPhoneNumber\" runat=\"server\" Text=\"[Change]\" /> &nbsp;|&nbsp;\n                        <asp:LinkButton Text=\"[Remove]\" OnClick=\"RemovePhone_Click\" runat=\"server\" />\n                    </dd>\n                    <% } %>\n                    --%>\n\n                    <dt>Two-Factor Authentication:</dt>\n                    <dd>\n                        <p>\n                            There are no two-factor authentication providers configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                            for details on setting up this ASP.NET application to support two-factor authentication.\n                        </p>\n                        <% if (TwoFactorEnabled)\n                          { %> \n                        <%--\n                        Enabled\n                        <asp:LinkButton Text=\"[Disable]\" runat=\"server\" CommandArgument=\"false\" OnClick=\"TwoFactorDisable_Click\" />\n                        --%>\n                        <% }\n                          else\n                          { %> \n                        <%--\n                        Disabled\n                        <asp:LinkButton Text=\"[Enable]\" CommandArgument=\"true\" OnClick=\"TwoFactorEnable_Click\" runat=\"server\" />\n                        --%>\n                        <% } %>\n                    </dd>\n                </dl>\n            </div>\n        </div>\n    </div>\n\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Manage.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class Manage : System.Web.UI.Page\n    {\n        protected string SuccessMessage\n        {\n            get;\n            private set;\n        }\n\n        private bool HasPassword(ApplicationUserManager manager)\n        {\n            return manager.HasPassword(User.Identity.GetUserId());\n        }\n\n        public bool HasPhoneNumber { get; private set; }\n\n        public bool TwoFactorEnabled { get; private set; }\n\n        public bool TwoFactorBrowserRemembered { get; private set; }\n\n        public int LoginsCount { get; set; }\n\n        protected void Page_Load()\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n\n            HasPhoneNumber = String.IsNullOrEmpty(manager.GetPhoneNumber(User.Identity.GetUserId()));\n\n            // Enable this after setting up two-factor authentientication\n            //PhoneNumber.Text = manager.GetPhoneNumber(User.Identity.GetUserId()) ?? String.Empty;\n\n            TwoFactorEnabled = manager.GetTwoFactorEnabled(User.Identity.GetUserId());\n\n            LoginsCount = manager.GetLogins(User.Identity.GetUserId()).Count;\n\n            var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;\n\n            if (!IsPostBack)\n            {\n                // Determine the sections to render\n                if (HasPassword(manager))\n                {\n                    ChangePassword.Visible = true;\n                }\n                else\n                {\n                    CreatePassword.Visible = true;\n                    ChangePassword.Visible = false;\n                }\n\n                // Render success message\n                var message = Request.QueryString[\"m\"];\n                if (message != null)\n                {\n                    // Strip the query string from action\n                    Form.Action = ResolveUrl(\"~/Account/Manage\");\n\n                    SuccessMessage =\n                        message == \"ChangePwdSuccess\" ? \"Your password has been changed.\"\n                        : message == \"SetPwdSuccess\" ? \"Your password has been set.\"\n                        : message == \"RemoveLoginSuccess\" ? \"The account was removed.\"\n                        : message == \"AddPhoneNumberSuccess\" ? \"Phone number has been added\"\n                        : message == \"RemovePhoneNumberSuccess\" ? \"Phone number was removed\"\n                        : String.Empty;\n                    successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);\n                }\n            }\n        }\n\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n\n        // Remove phonenumber from user\n        protected void RemovePhone_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n            var result = manager.SetPhoneNumber(User.Identity.GetUserId(), null);\n            if (!result.Succeeded)\n            {\n                return;\n            }\n            var user = manager.FindById(User.Identity.GetUserId());\n            if (user != null)\n            {\n                signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                Response.Redirect(\"/Account/Manage?m=RemovePhoneNumberSuccess\");\n            }\n        }\n\n        // DisableTwoFactorAuthentication\n        protected void TwoFactorDisable_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            manager.SetTwoFactorEnabled(User.Identity.GetUserId(), false);\n\n            Response.Redirect(\"/Account/Manage\");\n        }\n\n        //EnableTwoFactorAuthentication \n        protected void TwoFactorEnable_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            manager.SetTwoFactorEnabled(User.Identity.GetUserId(), true);\n\n            Response.Redirect(\"/Account/Manage\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Manage.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class Manage {\n        \n        /// <summary>\n        /// successMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder successMessage;\n        \n        /// <summary>\n        /// ChangePassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink ChangePassword;\n        \n        /// <summary>\n        /// CreatePassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink CreatePassword;\n        \n        /// <summary>\n        /// PhoneNumber control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label PhoneNumber;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ManageLogins.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ManageLogins.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.ManageLogins\" %>\n<%@ Register Src=\"~/Account/OpenAuthProviders.ascx\" TagPrefix=\"uc\" TagName=\"OpenAuthProviders\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2>Manage your external logins.</h2>\n    <asp:PlaceHolder runat=\"server\" ID=\"successMessage\" Visible=\"false\" ViewStateMode=\"Disabled\">\n            <p class=\"text-success\"><%: SuccessMessage %></p>\n        </asp:PlaceHolder>\n    <div>\n        <section id=\"externalLoginsForm\">\n\n            <asp:ListView runat=\"server\"\n                ItemType=\"Microsoft.AspNet.Identity.UserLoginInfo\"\n                SelectMethod=\"GetLogins\" DeleteMethod=\"RemoveLogin\" DataKeyNames=\"LoginProvider,ProviderKey\">\n\n                <LayoutTemplate>\n                    <h4>Registered Logins</h4>\n                    <table class=\"table\">\n                        <tbody>\n                            <tr runat=\"server\" id=\"itemPlaceholder\"></tr>\n                        </tbody>\n                    </table>\n\n                </LayoutTemplate>\n                <ItemTemplate>\n                    <tr>\n                        <td><%#: Item.LoginProvider %></td>\n                        <td>\n                            <asp:Button runat=\"server\" Text=\"Remove\" CommandName=\"Delete\" CausesValidation=\"false\"\n                                ToolTip='<%# \"Remove this \" + Item.LoginProvider + \" login from your account\" %>'\n                                Visible=\"<%# CanRemoveExternalLogins %>\" CssClass=\"btn btn-default\" />\n                        </td>\n                    </tr>\n                </ItemTemplate>\n            </asp:ListView>\n\n        </section>\n    </div>\n    <div>\n        <uc:OpenAuthProviders runat=\"server\" ReturnUrl=\"~/Account/ManageLogins\" />\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ManageLogins.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class ManageLogins : System.Web.UI.Page\n    {\n        protected string SuccessMessage\n        {\n            get;\n            private set;\n        }\n        protected bool CanRemoveExternalLogins\n        {\n            get;\n            private set;\n        }\n\n        private bool HasPassword(ApplicationUserManager manager)\n        {\n            return manager.HasPassword(User.Identity.GetUserId());\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            CanRemoveExternalLogins = manager.GetLogins(User.Identity.GetUserId()).Count() > 1;\n\n            SuccessMessage = String.Empty;\n            successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);\n        }\n\n        public IEnumerable<UserLoginInfo> GetLogins()\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var accounts = manager.GetLogins(User.Identity.GetUserId());\n            CanRemoveExternalLogins = accounts.Count() > 1 || HasPassword(manager);\n            return accounts;\n        }\n\n        public void RemoveLogin(string loginProvider, string providerKey)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n            var result = manager.RemoveLogin(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));\n            string msg = String.Empty;\n            if (result.Succeeded)\n            {\n                var user = manager.FindById(User.Identity.GetUserId());\n                signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                msg = \"?m=RemoveLoginSuccess\";\n            }\n            Response.Redirect(\"~/Account/ManageLogins\" + msg);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ManageLogins.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class ManageLogins {\n        \n        /// <summary>\n        /// successMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder successMessage;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ManagePassword.aspx",
    "content": "﻿<%@ Page Title=\"Manage Password\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ManagePassword.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.ManagePassword\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n    <div class=\"form-horizontal\">\n        <section id=\"passwordForm\">\n            <asp:PlaceHolder runat=\"server\" ID=\"setPassword\" Visible=\"false\">\n                <p>\n                    You do not have a local password for this site. Add a local\n                        password so you can log in without an external login.\n                </p>\n                <div class=\"form-horizontal\">\n                    <h4>Set Password Form</h4>\n                    <asp:ValidationSummary runat=\"server\" ShowModelStateErrors=\"true\" CssClass=\"text-danger\" />\n                    <hr />\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"password\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\"\n                                Display=\"Dynamic\" ValidationGroup=\"SetPassword\" />\n                            <asp:ModelErrorMessage runat=\"server\" ModelStateKey=\"NewPassword\" AssociatedControlID=\"password\"\n                                CssClass=\"text-danger\" SetFocusOnError=\"true\" />\n                        </div>\n                    </div>\n\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"confirmPassword\" CssClass=\"col-md-2 control-label\">Confirm password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"confirmPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"confirmPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The confirm password field is required.\"\n                                ValidationGroup=\"SetPassword\" />\n                            <asp:CompareValidator runat=\"server\" ControlToCompare=\"Password\" ControlToValidate=\"confirmPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The password and confirmation password do not match.\"\n                                ValidationGroup=\"SetPassword\" />\n\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" Text=\"Set Password\" ValidationGroup=\"SetPassword\" OnClick=\"SetPassword_Click\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n            </asp:PlaceHolder>\n\n            <asp:PlaceHolder runat=\"server\" ID=\"changePasswordHolder\" Visible=\"false\">\n                <div class=\"form-horizontal\">\n                    <h4>Change Password Form</h4>\n                    <hr />\n                    <asp:ValidationSummary runat=\"server\" ShowModelStateErrors=\"true\" CssClass=\"text-danger\" />\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" ID=\"CurrentPasswordLabel\" AssociatedControlID=\"CurrentPassword\" CssClass=\"col-md-2 control-label\">Current password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"CurrentPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"CurrentPassword\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The current password field is required.\"\n                                ValidationGroup=\"ChangePassword\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" ID=\"NewPasswordLabel\" AssociatedControlID=\"NewPassword\" CssClass=\"col-md-2 control-label\">New password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"NewPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"NewPassword\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The new password is required.\"\n                                ValidationGroup=\"ChangePassword\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" ID=\"ConfirmNewPasswordLabel\" AssociatedControlID=\"ConfirmNewPassword\" CssClass=\"col-md-2 control-label\">Confirm new password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"ConfirmNewPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"ConfirmNewPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"Confirm new password is required.\"\n                                ValidationGroup=\"ChangePassword\" />\n                            <asp:CompareValidator runat=\"server\" ControlToCompare=\"NewPassword\" ControlToValidate=\"ConfirmNewPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The new password and confirmation password do not match.\"\n                                ValidationGroup=\"ChangePassword\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" Text=\"Change Password\" ValidationGroup=\"ChangePassword\" OnClick=\"ChangePassword_Click\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n            </asp:PlaceHolder>\n        </section>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ManagePassword.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class ManagePassword : System.Web.UI.Page\n    {\n        protected string SuccessMessage\n        {\n            get;\n            private set;\n        }\n\n        private bool HasPassword(ApplicationUserManager manager)\n        {\n            return manager.HasPassword(User.Identity.GetUserId());\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n\n            if (!IsPostBack)\n            {\n                // Determine the sections to render\n                if (HasPassword(manager))\n                {\n                    changePasswordHolder.Visible = true;\n                }\n                else\n                {\n                    setPassword.Visible = true;\n                    changePasswordHolder.Visible = false;\n                }\n\n                // Render success message\n                var message = Request.QueryString[\"m\"];\n                if (message != null)\n                {\n                    // Strip the query string from action\n                    Form.Action = ResolveUrl(\"~/Account/Manage\");\n                }\n            }\n        }\n\n        protected void ChangePassword_Click(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n                IdentityResult result = manager.ChangePassword(User.Identity.GetUserId(), CurrentPassword.Text, NewPassword.Text);\n                if (result.Succeeded)\n                {\n                    var user = manager.FindById(User.Identity.GetUserId());\n                    signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);\n                    Response.Redirect(\"~/Account/Manage?m=ChangePwdSuccess\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n        }\n\n        protected void SetPassword_Click(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                // Create the local login info and link the local account to the user\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                IdentityResult result = manager.AddPassword(User.Identity.GetUserId(), password.Text);\n                if (result.Succeeded)\n                {\n                    Response.Redirect(\"~/Account/Manage?m=SetPwdSuccess\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ManagePassword.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class ManagePassword {\n        \n        /// <summary>\n        /// setPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder setPassword;\n        \n        /// <summary>\n        /// password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox password;\n        \n        /// <summary>\n        /// confirmPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox confirmPassword;\n        \n        /// <summary>\n        /// changePasswordHolder control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder changePasswordHolder;\n        \n        /// <summary>\n        /// CurrentPasswordLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label CurrentPasswordLabel;\n        \n        /// <summary>\n        /// CurrentPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox CurrentPassword;\n        \n        /// <summary>\n        /// NewPasswordLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label NewPasswordLabel;\n        \n        /// <summary>\n        /// NewPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox NewPassword;\n        \n        /// <summary>\n        /// ConfirmNewPasswordLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label ConfirmNewPasswordLabel;\n        \n        /// <summary>\n        /// ConfirmNewPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox ConfirmNewPassword;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/OpenAuthProviders.ascx",
    "content": "﻿<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"OpenAuthProviders.ascx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.OpenAuthProviders\" %>\n\n<div id=\"socialLoginList\">\n    <h4>Use another service to log in.</h4>\n    <hr />\n    <asp:ListView runat=\"server\" ID=\"providerDetails\" ItemType=\"System.String\"\n        SelectMethod=\"GetProviderNames\" ViewStateMode=\"Disabled\">\n        <ItemTemplate>\n            <p>\n                <button type=\"submit\" class=\"btn btn-default\" name=\"provider\" value=\"<%#: Item %>\"\n                    title=\"Log in using your <%#: Item %> account.\">\n                    <%#: Item %>\n                </button>\n            </p>\n        </ItemTemplate>\n        <EmptyDataTemplate>\n            <div>\n                <p>There are no external authentication services configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=252803\">this article</a> for details on setting up this ASP.NET application to support logging in via external services.</p>\n            </div>\n        </EmptyDataTemplate>\n    </asp:ListView>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/OpenAuthProviders.ascx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.Owin.Security;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class OpenAuthProviders : System.Web.UI.UserControl\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            if (IsPostBack)\n            {\n                var provider = Request.Form[\"provider\"];\n                if (provider == null)\n                {\n                    return;\n                }\n                // Request a redirect to the external login provider\n                string redirectUrl = ResolveUrl(String.Format(CultureInfo.InvariantCulture, \"~/Account/RegisterExternalLogin?{0}={1}&returnUrl={2}\", IdentityHelper.ProviderNameKey, provider, ReturnUrl));\n                var properties = new AuthenticationProperties() { RedirectUri = redirectUrl };\n                // Add xsrf verification when linking accounts\n                if (Context.User.Identity.IsAuthenticated)\n                {\n                    properties.Dictionary[IdentityHelper.XsrfKey] = Context.User.Identity.GetUserId();\n                }\n                Context.GetOwinContext().Authentication.Challenge(properties, provider);\n                Response.StatusCode = 401;\n                Response.End();\n            }\n        }\n\n        public string ReturnUrl { get; set; }\n\n        public IEnumerable<string> GetProviderNames()\n        {\n            return Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes().Select(t => t.AuthenticationType);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/OpenAuthProviders.ascx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class OpenAuthProviders {\n        \n        /// <summary>\n        /// providerDetails control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ListView providerDetails;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Register.aspx",
    "content": "﻿<%@ Page Title=\"Register\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Register.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.Register\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n    <p class=\"text-danger\">\n        <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n    </p>\n\n    <div class=\"form-horizontal\">\n        <h4>Create a new account</h4>\n        <hr />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Password\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"ConfirmPassword\" CssClass=\"col-md-2 control-label\">Confirm password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"ConfirmPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The confirm password field is required.\" />\n                <asp:CompareValidator runat=\"server\" ControlToCompare=\"Password\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The password and confirmation password do not match.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"CreateUser_Click\" Text=\"Register\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Register.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class Register : Page\n    {\n        protected void CreateUser_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n            var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };\n            IdentityResult result = manager.Create(user, Password.Text);\n            if (result.Succeeded)\n            {\n                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                //string code = manager.GenerateEmailConfirmationToken(user.Id);\n                //string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);\n                //manager.SendEmail(user.Id, \"Confirm your account\", \"Please confirm your account by clicking <a href=\\\"\" + callbackUrl + \"\\\">here</a>.\");\n\n                signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);\n                IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n            }\n            else \n            {\n                ErrorMessage.Text = result.Errors.FirstOrDefault();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Register.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class Register {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// Password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Password;\n        \n        /// <summary>\n        /// ConfirmPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox ConfirmPassword;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/RegisterExternalLogin.aspx",
    "content": "﻿<%@ Page Title=\"Register an external login\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"RegisterExternalLogin.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.RegisterExternalLogin\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n<h3>Register with your <%: ProviderName %> account</h3>\n\n    <asp:PlaceHolder runat=\"server\">\n        <div class=\"form-horizontal\">\n            <h4>Association Form</h4>\n            <hr />\n            <asp:ValidationSummary runat=\"server\" ShowModelStateErrors=\"true\" CssClass=\"text-danger\" />\n            <p class=\"text-info\">\n                You've authenticated with <strong><%: ProviderName %></strong>. Please enter an email below for the current site\n                and click the Log in button.\n            </p>\n\n            <div class=\"form-group\">\n                <asp:Label runat=\"server\" AssociatedControlID=\"email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n                <div class=\"col-md-10\">\n                    <asp:TextBox runat=\"server\" ID=\"email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                    <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"email\"\n                        Display=\"Dynamic\" CssClass=\"text-danger\" ErrorMessage=\"Email is required\" />\n                    <asp:ModelErrorMessage runat=\"server\" ModelStateKey=\"email\" CssClass=\"text-error\" />\n                </div>\n            </div>\n\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <asp:Button runat=\"server\" Text=\"Log in\" CssClass=\"btn btn-default\" OnClick=\"LogIn_Click\" />\n                </div>\n            </div>\n        </div>\n    </asp:PlaceHolder>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/RegisterExternalLogin.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class RegisterExternalLogin : System.Web.UI.Page\n    {\n        protected string ProviderName\n        {\n            get { return (string)ViewState[\"ProviderName\"] ?? String.Empty; }\n            private set { ViewState[\"ProviderName\"] = value; }\n        }\n\n        protected string ProviderAccountKey\n        {\n            get { return (string)ViewState[\"ProviderAccountKey\"] ?? String.Empty; }\n            private set { ViewState[\"ProviderAccountKey\"] = value; }\n        }\n\n        private void RedirectOnFail()\n        {\n            Response.Redirect((User.Identity.IsAuthenticated) ? \"~/Account/Manage\" : \"~/Account/Login\");\n        }\n\n        protected void Page_Load()\n        {\n            // Process the result from an auth provider in the request\n            ProviderName = IdentityHelper.GetProviderNameFromRequest(Request);\n            if (String.IsNullOrEmpty(ProviderName))\n            {\n                RedirectOnFail();\n                return;\n            }\n            if (!IsPostBack)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n                var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();\n                if (loginInfo == null)\n                {\n                    RedirectOnFail();\n                    return;\n                }\n                var user = manager.Find(loginInfo.Login);\n                if (user != null)\n                {\n                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                    IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                }\n                else if (User.Identity.IsAuthenticated)\n                {\n                    // Apply Xsrf check when linking\n                    var verifiedloginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo(IdentityHelper.XsrfKey, User.Identity.GetUserId());\n                    if (verifiedloginInfo == null)\n                    {\n                        RedirectOnFail();\n                        return;\n                    }\n\n                    var result = manager.AddLogin(User.Identity.GetUserId(), verifiedloginInfo.Login);\n                    if (result.Succeeded)\n                    {\n                        IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                    }\n                    else\n                    {\n                        AddErrors(result);\n                        return;\n                    }\n                }\n                else\n                {\n                    email.Text = loginInfo.Email;\n                }\n            }\n        }        \n        \n        protected void LogIn_Click(object sender, EventArgs e)\n        {\n            CreateAndLoginUser();\n        }\n\n        private void CreateAndLoginUser()\n        {\n            if (!IsValid)\n            {\n                return;\n            }\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();\n            var user = new ApplicationUser() { UserName = email.Text, Email = email.Text };\n            IdentityResult result = manager.Create(user);\n            if (result.Succeeded)\n            {\n                var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();\n                if (loginInfo == null)\n                {\n                    RedirectOnFail();\n                    return;\n                }\n                result = manager.AddLogin(user.Id, loginInfo.Login);\n                if (result.Succeeded)\n                {\n                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n\n                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                    // var code = manager.GenerateEmailConfirmationToken(user.Id);\n                    // Send this link via email: IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id)\n\n                    IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                    return;\n                }\n            }\n            AddErrors(result);\n        }\n\n        private void AddErrors(IdentityResult result) \n        {\n            foreach (var error in result.Errors) \n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/RegisterExternalLogin.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class RegisterExternalLogin {\n        \n        /// <summary>\n        /// email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox email;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ResetPassword.aspx",
    "content": "﻿<%@ Page Title=\"Reset Password\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ResetPassword.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.ResetPassword\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n    <p class=\"text-danger\">\n        <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n    </p>\n\n    <div class=\"form-horizontal\">\n        <h4>Enter your new password</h4>\n        <hr />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Password\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"ConfirmPassword\" CssClass=\"col-md-2 control-label\">Confirm password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"ConfirmPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The confirm password field is required.\" />\n                <asp:CompareValidator runat=\"server\" ControlToCompare=\"Password\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The password and confirmation password do not match.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"Reset_Click\" Text=\"Reset\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ResetPassword.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class ResetPassword : Page\n    {\n        protected string StatusMessage\n        {\n            get;\n            private set;\n        }\n\n        protected void Reset_Click(object sender, EventArgs e)\n        {\n            string code = IdentityHelper.GetCodeFromRequest(Request);\n            if (code != null)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n\n                var user = manager.FindByName(Email.Text);\n                if (user == null)\n                {\n                    ErrorMessage.Text = \"No user found\";\n                    return;\n                }\n                var result = manager.ResetPassword(user.Id, code, Password.Text);\n                if (result.Succeeded)\n                {\n                    Response.Redirect(\"~/Account/ResetPasswordConfirmation\");\n                    return;\n                }\n                ErrorMessage.Text = result.Errors.FirstOrDefault();\n                return;\n            }\n\n            ErrorMessage.Text = \"An error has occurred\";\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ResetPassword.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class ResetPassword {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// Password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Password;\n        \n        /// <summary>\n        /// ConfirmPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox ConfirmPassword;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ResetPasswordConfirmation.aspx",
    "content": "﻿<%@ Page Title=\"Password Changed\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ResetPasswordConfirmation.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.ResetPasswordConfirmation\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n    <div>\n        <p>Your password has been changed. Click <asp:HyperLink ID=\"login\" runat=\"server\" NavigateUrl=\"~/Account/Login\">here</asp:HyperLink> to login </p>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ResetPasswordConfirmation.aspx.cs",
    "content": "﻿using System.Web.UI;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class ResetPasswordConfirmation : Page\n    {\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/ResetPasswordConfirmation.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class ResetPasswordConfirmation {\n\n        /// <summary>\n        /// login control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink login;    \n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/TwoFactorAuthenticationSignIn.aspx",
    "content": "﻿<%@ Page Title=\"Two-Factor Authentication\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"TwoFactorAuthenticationSignIn.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.TwoFactorAuthenticationSignIn\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n        <h2><%: Title %>.</h2>\n    <asp:PlaceHolder runat=\"server\" ID=\"sendcode\">\n        <section>\n            <h4>Send verification code</h4>\n            <hr />\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    Select Two-Factor Authentication Provider:\n            <asp:DropDownList runat=\"server\" ID=\"Providers\">\n            </asp:DropDownList>\n                    <asp:Button Text=\"Submit\" ID=\"ProviderSubmit\" OnClick=\"ProviderSubmit_Click\" CssClass=\"btn btn-default\" runat=\"server\" />\n                </div>\n            </div>\n        </section>\n    </asp:PlaceHolder>\n    <asp:PlaceHolder runat=\"server\" ID=\"verifycode\" Visible=\"false\">\n        <section>\n            <h4>Enter verification code</h4>\n            <hr />\n            <asp:HiddenField ID=\"SelectedProvider\" runat=\"server\" />\n            <asp:PlaceHolder runat=\"server\" ID=\"ErrorMessage\" Visible=\"false\">\n                <p class=\"text-danger\">\n                    <asp:Literal runat=\"server\" ID=\"FailureText\" />\n                </p>\n            </asp:PlaceHolder>\n            <div class=\"form-group\">\n                <asp:Label Text=\"Code:\" runat=\"server\" AssociatedControlID=\"Code\" CssClass=\"col-md-2 control-label\" />\n                <div class=\"col-md-10\">\n                    <asp:TextBox runat=\"server\" ID=\"Code\" CssClass=\"form-control\" />\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <div class=\"checkbox\">\n                        <asp:Label Text=\"Remember Browser\" runat=\"server\" />\n                        <asp:CheckBox Text=\"\" ID=\"RememberBrowser\" runat=\"server\" />\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <asp:Button Text=\"Submit\" ID=\"CodeSubmit\" OnClick=\"CodeSubmit_Click\" CssClass=\"btn btn-default\" runat=\"server\" />\n                </div>\n            </div>\n        </section>\n    </asp:PlaceHolder>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/TwoFactorAuthenticationSignIn.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class TwoFactorAuthenticationSignIn : System.Web.UI.Page\n    {\n        private ApplicationSignInManager signinManager;\n        private ApplicationUserManager manager;\n\n        public TwoFactorAuthenticationSignIn()\n        {\n            manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var userId = signinManager.GetVerifiedUserId<ApplicationUser, string>();\n            if (userId == null)\n            {\n                Response.Redirect(\"/Account/Error\", true);\n            }\n            var userFactors = manager.GetValidTwoFactorProviders(userId);\n            Providers.DataSource = userFactors.Select(x => x).ToList();\n            Providers.DataBind();            \n        }\n\n        protected void CodeSubmit_Click(object sender, EventArgs e)\n        {\n            bool rememberMe = false;\n            bool.TryParse(Request.QueryString[\"RememberMe\"], out rememberMe);\n            \n            var result = signinManager.TwoFactorSignIn<ApplicationUser, string>(SelectedProvider.Value, Code.Text, isPersistent: rememberMe, rememberBrowser: RememberBrowser.Checked);\n            switch (result)\n            {\n                case SignInStatus.Success:\n                    IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                    break;\n                case SignInStatus.LockedOut:\n                    Response.Redirect(\"/Account/Lockout\");\n                    break;\n                case SignInStatus.Failure:\n                default:\n                    FailureText.Text = \"Invalid code\";\n                    ErrorMessage.Visible = true;\n                    break;\n            }\n        }\n\n        protected void ProviderSubmit_Click(object sender, EventArgs e)\n        {\n            if (!signinManager.SendTwoFactorCode(Providers.SelectedValue))\n            {\n                Response.Redirect(\"/Account/Error\");\n            }\n\n            var user = manager.FindById(signinManager.GetVerifiedUserId<ApplicationUser, string>());\n            if (user != null)\n            {\n                var code = manager.GenerateTwoFactorToken(user.Id, Providers.SelectedValue);\n            }\n\n            SelectedProvider.Value = Providers.SelectedValue;\n            sendcode.Visible = false;\n            verifycode.Visible = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/TwoFactorAuthenticationSignIn.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class TwoFactorAuthenticationSignIn {\n        \n        /// <summary>\n        /// sendcode control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder sendcode;\n        \n        /// <summary>\n        /// Providers control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.DropDownList Providers;\n        \n        /// <summary>\n        /// ProviderSubmit control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button ProviderSubmit;\n        \n        /// <summary>\n        /// verifycode control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder verifycode;\n        \n        /// <summary>\n        /// SelectedProvider control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HiddenField SelectedProvider;\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;\n        \n        /// <summary>\n        /// FailureText control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal FailureText;\n        \n        /// <summary>\n        /// Code control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Code;\n        \n        /// <summary>\n        /// RememberBrowser control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.CheckBox RememberBrowser;\n        \n        /// <summary>\n        /// CodeSubmit control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button CodeSubmit;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/VerifyPhoneNumber.aspx",
    "content": "﻿<%@ Page Title=\"Verify Phone Number\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"VerifyPhoneNumber.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Account.VerifyPhoneNumber\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n <h2><%: Title %>.</h2>\n    <p class=\"text-danger\">\n        <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n    </p>\n    <div class=\"form-horizontal\">\n        <h4>Enter verification code</h4>\n        <hr />\n        <asp:HiddenField runat=\"server\" ID=\"PhoneNumber\" />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Code\" CssClass=\"col-md-2 control-label\">Code</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Code\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Code\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The Code field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"Code_Click\"\n                    Text=\"Submit\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/VerifyPhoneNumber.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace Linq2TwitterDemos_WebForms.Account\n{\n    public partial class VerifyPhoneNumber : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var phonenumber = Request.QueryString[\"PhoneNumber\"];\n            var code = manager.GenerateChangePhoneNumberToken(User.Identity.GetUserId(), phonenumber);           \n            PhoneNumber.Value = phonenumber;\n        }\n\n        protected void Code_Click(object sender, EventArgs e)\n        {\n            if (!ModelState.IsValid)\n            {\n                ModelState.AddModelError(\"\", \"Invalid code\");\n                return;\n            }\n\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n\n            var result = manager.ChangePhoneNumber(User.Identity.GetUserId(), PhoneNumber.Value, Code.Text);\n\n            if (result.Succeeded)\n            {\n                var user = manager.FindById(User.Identity.GetUserId());\n\n                if (user != null)\n                {\n                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                    Response.Redirect(\"/Account/Manage?m=AddPhoneNumberSuccess\");\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            ModelState.AddModelError(\"\", \"Failed to verify phone\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/VerifyPhoneNumber.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.Account {\n    \n    \n    public partial class VerifyPhoneNumber {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// PhoneNumber control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HiddenField PhoneNumber;\n        \n        /// <summary>\n        /// Code control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Code;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Account/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n<configuration>\n\n  <location path=\"Manage.aspx\">\n    <system.web>\n      <authorization>\n        <deny users=\"?\"/>\n      </authorization>\n    </system.web>\n  </location>\n\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/App_Start/BundleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Optimization;\nusing System.Web.UI;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public class BundleConfig\n    {\n        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkID=303951\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/WebFormsJs\").Include(\n                            \"~/Scripts/WebForms/WebForms.js\",\n                            \"~/Scripts/WebForms/WebUIValidation.js\",\n                            \"~/Scripts/WebForms/MenuStandards.js\",\n                            \"~/Scripts/WebForms/Focus.js\",\n                            \"~/Scripts/WebForms/GridView.js\",\n                            \"~/Scripts/WebForms/DetailsView.js\",\n                            \"~/Scripts/WebForms/TreeView.js\",\n                            \"~/Scripts/WebForms/WebParts.js\"));\n\n            // Order is very important for these files to work, they have explicit dependencies\n            bundles.Add(new ScriptBundle(\"~/bundles/MsAjaxJs\").Include(\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjax.js\",\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjaxApplicationServices.js\",\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjaxTimer.js\",\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjaxWebForms.js\"));\n\n            // Use the Development version of Modernizr to develop with and learn from. Then, when you’re\n            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                            \"~/Scripts/modernizr-*\"));\n\n            ScriptManager.ScriptResourceMapping.AddDefinition(\n                \"respond\",\n                new ScriptResourceDefinition\n                {\n                    Path = \"~/Scripts/respond.min.js\",\n                    DebugPath = \"~/Scripts/respond.js\",\n                });\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/App_Start/IdentityConfig.cs",
    "content": "﻿using System;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public class EmailService : IIdentityMessageService\n    {\n        public Task SendAsync(IdentityMessage message)\n        {\n            // Plug in your email service here to send an email.\n            return Task.FromResult(0);\n        }\n    }\n\n    public class SmsService : IIdentityMessageService\n    {\n        public Task SendAsync(IdentityMessage message)\n        {\n            // Plug in your SMS service here to send a text message.\n            return Task.FromResult(0);\n        }\n    }\n\n    // Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.\n    public class ApplicationUserManager : UserManager<ApplicationUser>\n    {\n        public ApplicationUserManager(IUserStore<ApplicationUser> store)\n            : base(store)\n        {\n        }\n\n        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)\n        {\n            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));\n            // Configure validation logic for usernames\n            manager.UserValidator = new UserValidator<ApplicationUser>(manager)\n            {\n                AllowOnlyAlphanumericUserNames = false,\n                RequireUniqueEmail = true\n            };\n\n            // Configure validation logic for passwords\n            manager.PasswordValidator = new PasswordValidator\n            {\n                RequiredLength = 6,\n                RequireNonLetterOrDigit = true,\n                RequireDigit = true,\n                RequireLowercase = true,\n                RequireUppercase = true,\n            };\n\n            // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user\n            // You can write your own provider and plug it in here.\n            manager.RegisterTwoFactorProvider(\"Phone Code\", new PhoneNumberTokenProvider<ApplicationUser>\n            {\n                MessageFormat = \"Your security code is {0}\"\n            });\n            manager.RegisterTwoFactorProvider(\"Email Code\", new EmailTokenProvider<ApplicationUser>\n            {\n                Subject = \"Security Code\",\n                BodyFormat = \"Your security code is {0}\"\n            });\n\n            // Configure user lockout defaults\n            manager.UserLockoutEnabledByDefault = true;\n            manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);\n            manager.MaxFailedAccessAttemptsBeforeLockout = 5;\n\n            manager.EmailService = new EmailService();\n            manager.SmsService = new SmsService();\n            var dataProtectionProvider = options.DataProtectionProvider;\n            if (dataProtectionProvider != null)\n            {\n                manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create(\"ASP.NET Identity\"));\n            }\n            return manager;\n        }\n    }\n\n    public class ApplicationSignInManager : SignInManager<ApplicationUser, string>\n    {\n        public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager) :\n            base(userManager, authenticationManager) { }\n\n        public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)\n        {\n            return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager);\n        }\n\n        public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context)\n        {\n            return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/App_Start/RouteConfig.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Web;\nusing System.Web.Routing;\nusing Microsoft.AspNet.FriendlyUrls;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public static class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            var settings = new FriendlyUrlSettings();\n            settings.AutoRedirectMode = RedirectMode.Permanent;\n            routes.EnableFriendlyUrls(settings);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/App_Start/Startup.Auth.cs",
    "content": "﻿using System;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.DataProtection;\nusing Microsoft.Owin.Security.Google;\nusing Owin;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class Startup {\n\n        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301883\n        public void ConfigureAuth(IAppBuilder app)\n        {\n            // Configure the db context, user manager and signin manager to use a single instance per request\n            app.CreatePerOwinContext(ApplicationDbContext.Create);\n            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);\n            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);\n\n            // Enable the application to use a cookie to store information for the signed in user\n            // and to use a cookie to temporarily store information about a user logging in with a third party login provider\n            // Configure the sign in cookie\n            app.UseCookieAuthentication(new CookieAuthenticationOptions\n            {\n                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,\n                LoginPath = new PathString(\"/Account/Login\"),\n                Provider = new CookieAuthenticationProvider\n                {\n                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(\n                        validateInterval: TimeSpan.FromMinutes(30),\n                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))\n                }\n            });\n            // Use a cookie to temporarily store information about a user logging in with a third party login provider\n            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);\n\n            // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.\n            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));\n\n            // Enables the application to remember the second login verification factor such as phone or email.\n            // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.\n            // This is similar to the RememberMe option when you log in.\n            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);\n\n            // Uncomment the following lines to enable logging in with third party login providers\n            //app.UseMicrosoftAccountAuthentication(\n            //    clientId: \"\",\n            //    clientSecret: \"\");\n\n            //app.UseTwitterAuthentication(\n            //   consumerKey: \"\",\n            //   consumerSecret: \"\");\n\n            //app.UseFacebookAuthentication(\n            //   appId: \"\",\n            //   appSecret: \"\");\n\n            //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()\n            //{\n            //    ClientId = \"\",\n            //    ClientSecret = \"\"\n            //});\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Bundle.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<bundles version=\"1.0\">\n  <styleBundle path=\"~/Content/css\">\n    <include path=\"~/Content/bootstrap.css\" />\n    <include path=\"~/Content/Site.css\" />\n  </styleBundle>\n</bundles>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Contact.aspx",
    "content": "﻿<%@ Page Title=\"Contact\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Contact.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Contact\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n    <h3>Your contact page.</h3>\n    <address>\n        One Microsoft Way<br />\n        Redmond, WA 98052-6399<br />\n        <abbr title=\"Phone\">P:</abbr>\n        425.555.0100\n    </address>\n\n    <address>\n        <strong>Support:</strong>   <a href=\"mailto:Support@example.com\">Support@example.com</a><br />\n        <strong>Marketing:</strong> <a href=\"mailto:Marketing@example.com\">Marketing@example.com</a>\n    </address>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Contact.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class Contact : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Contact.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms\n{\n\n\n    public partial class Contact\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Content/Site.css",
    "content": "﻿/* Move down content because we have a fixed navbar that is 50px tall */\nbody {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Wrapping element */\n/* Set some basic padding to keep content from hitting the edges */\n.body-content {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n/* Override the default bootstrap behavior where horizontal description lists \n   will truncate terms that are too long to fit in the left column \n*/\n.dl-horizontal dt {\n    white-space: normal;\n}\n\n/* Set widths on the form inputs since otherwise they're 100% wide */\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"tel\"],\ninput[type=\"select\"] {\n    max-width: 280px;\n}\n\n/* Responsive: Portrait tablets and up */\n@media screen and (min-width: 768px) {\n    .jumbotron {\n        margin-top: 20px;\n    }\n    .body-content {\n        padding: 0;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Content/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default:disabled,\n.btn-default[disabled] {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary:disabled,\n.btn-primary[disabled] {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success:disabled,\n.btn-success[disabled] {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info:disabled,\n.btn-info[disabled] {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning:disabled,\n.btn-warning[disabled] {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger:disabled,\n.btn-danger[disabled] {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Content/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n  height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n  visibility: hidden;\n}\n.collapse.in {\n  display: block;\n  visibility: visible;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n  visibility: hidden;\n}\n.tab-content > .active {\n  display: block;\n  visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n    visibility: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px 15px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding: 48px 0;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-weight: normal;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000;\n            perspective: 1000;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Default.aspx",
    "content": "﻿<%@ Page Title=\"Home Page\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms._Default\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n\n    <div class=\"jumbotron\">\n        <h1>LINQ to Twitter</h1>\n        <p class=\"lead\">LINQ to Twitter is an open-source 3rd party library for working with the Twitter API. Please select a menu item to view demos for how LINQ to Twitter supports each category of the Twitter API.</p>\n        <p><a href=\"http://linqtotwitter.codeplex.com\" class=\"btn btn-primary btn-large\">Learn more &raquo;</a></p>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-4\">\n            <h2>Getting started</h2>\n            <p>\n                LINQ to Twitter has extensive documentation. You can get basic guidance, security info, and specifications for each API. Be sure to check out the FAQ too.\n            </p>\n            <p>\n                <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/documentation\">Learn more &raquo;</a>\n            </p>\n        </div>\n        <div class=\"col-md-4\">\n            <h2>Get help</h2>\n            <p>\n                When these demos don't have the info you need, you can still get help through the discussion forums. Tip: the Search box is often helpful in finding answers. \n            </p>\n            <p>\n                <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/discussions\">Learn more &raquo;</a>\n            </p>\n        </div>\n        <div class=\"col-md-4\">\n            <h2>Get the code</h2>\n            <p>\n                You can download the code from the LINQ to Twitter site on CodePlex.com, but the most convenient way to use LINQ to Twitter is via NuGet.\n            </p>\n            <p>\n                <a class=\"btn btn-default\" href=\"http://www.nuget.org/packages/linqtotwitter\">Learn more &raquo;</a>\n            </p>\n        </div>\n    </div>\n\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Default.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class _Default : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            if (!new SessionStateCredentialStore().HasAllCredentials())\n                Response.Redirect(\"~/Oauth.aspx\", false);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Default.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms\n{\n\n\n    public partial class _Default\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Global\" Language=\"C#\" %>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Optimization;\nusing System.Web.Routing;\nusing System.Web.Security;\nusing System.Web.SessionState;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public class Global : HttpApplication\n    {\n        void Application_Start(object sender, EventArgs e)\n        {\n            // Code that runs on application startup\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Linq2TwitterDemos_WebForms.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{91B2C679-6016-4BBD-A5D7-2104E7A8072E}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_WebForms</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_WebForms</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <NuGetPackageImportStamp>f2c30c94</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AspNet.ScriptManager.bootstrap, Version=3.3.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\AspNet.ScriptManager.bootstrap.3.3.1\\lib\\net45\\AspNet.ScriptManager.bootstrap.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AspNet.ScriptManager.jQuery, Version=2.1.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\AspNet.ScriptManager.jQuery.2.1.1\\lib\\net45\\AspNet.ScriptManager.jQuery.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.2\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\EntityFramework.6.1.2\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.AspNet\">\n      <HintPath>..\\..\\packages\\LinqToTwitter.3.1.1\\lib\\net45\\LinqToTwitter.AspNet.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitterPcl\">\n      <HintPath>..\\..\\packages\\LinqToTwitter.3.1.1\\lib\\net45\\LinqToTwitterPcl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.7\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\..\\packages\\Rx-Core.2.2.5\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\..\\packages\\Rx-Interfaces.2.2.5\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\..\\packages\\Rx-Linq.2.2.5\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\..\\packages\\Rx-PlatformServices.2.2.5\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.ScriptManager.MSAjax\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.ScriptManager.MSAjax.5.0.0\\lib\\net45\\Microsoft.ScriptManager.MSAjax.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.ScriptManager.WebForms\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.ScriptManager.WebForms.5.0.0\\lib\\net45\\Microsoft.ScriptManager.WebForms.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Web.Optimization.WebForms\">\n      <Private>True</Private>\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Web.Optimization.WebForms.1.1.3\\lib\\net45\\Microsoft.AspNet.Web.Optimization.WebForms.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.FriendlyUrls\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.FriendlyUrls.Core.1.0.2\\lib\\net45\\Microsoft.AspNet.FriendlyUrls.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Core.2.1.0\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.Owin.2.1.0\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Identity.EntityFramework.2.1.0\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Providers\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Providers.Core.2.0.0\\lib\\net40\\System.Web.Providers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.3.0.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Host.SystemWeb\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Host.SystemWeb.3.0.0\\lib\\net45\\Microsoft.Owin.Host.SystemWeb.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.3.0.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Facebook\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Facebook.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Facebook.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Cookies\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Cookies.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Google\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Google.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Google.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Twitter.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.MicrosoftAccount\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.MicrosoftAccount.3.0.0\\lib\\net45\\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin\">\n      <HintPath>..\\..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.OAuth\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.OAuth.3.0.0\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"About.aspx\" />\n    <Content Include=\"Account\\AddPhoneNumber.aspx\" />\n    <Content Include=\"Account\\Confirm.aspx\" />\n    <Content Include=\"Account\\Forgot.aspx\" />\n    <Content Include=\"Account\\Lockout.aspx\" />\n    <Content Include=\"Account\\Login.aspx\" />\n    <Content Include=\"Account\\Manage.aspx\" />\n    <Content Include=\"Account\\ManageLogins.aspx\" />\n    <Content Include=\"Account\\ManagePassword.aspx\" />\n    <Content Include=\"Account\\OpenAuthProviders.ascx\" />\n    <Content Include=\"Account\\Register.aspx\" />\n    <Content Include=\"Account\\RegisterExternalLogin.aspx\" />\n    <Content Include=\"Account\\ResetPassword.aspx\" />\n    <Content Include=\"Account\\ResetPasswordConfirmation.aspx\" />\n    <Content Include=\"Account\\TwoFactorAuthenticationSignIn.aspx\" />\n    <Content Include=\"Account\\VerifyPhoneNumber.aspx\" />\n    <Content Include=\"Contact.aspx\" />\n    <Content Include=\"Content\\bootstrap-theme.css\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css\" />\n    <Content Include=\"Content\\bootstrap.css\" />\n    <Content Include=\"Content\\bootstrap.min.css\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.svg\" />\n    <Content Include=\"OAuth.aspx\" />\n    <Content Include=\"packages.config\" />\n    <Content Include=\"Account\\Web.config\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.ttf\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.eot\" />\n    <Content Include=\"Content\\bootstrap-theme.css.map\" />\n    <Content Include=\"Content\\bootstrap.css.map\" />\n    <None Include=\"Scripts\\jquery-2.1.1.intellisense.js\" />\n    <Content Include=\"Scripts\\bootstrap.js\" />\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.js\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.min.js\" />\n    <Content Include=\"Scripts\\modernizr-2.8.3.js\" />\n    <Content Include=\"Scripts\\npm.js\" />\n    <Content Include=\"Scripts\\respond.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.min.js\" />\n    <Content Include=\"Scripts\\respond.min.js\" />\n    <Content Include=\"Scripts\\WebForms\\DetailsView.js\" />\n    <Content Include=\"Scripts\\WebForms\\Focus.js\" />\n    <Content Include=\"Scripts\\WebForms\\GridView.js\" />\n    <Content Include=\"Scripts\\WebForms\\Menu.js\" />\n    <Content Include=\"Scripts\\WebForms\\MenuStandards.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjax.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxApplicationServices.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxComponentModel.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxCore.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxGlobalization.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxHistory.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxNetwork.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxSerialization.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxTimer.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxWebForms.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxWebServices.js\" />\n    <Content Include=\"Scripts\\WebForms\\SmartNav.js\" />\n    <Content Include=\"Scripts\\WebForms\\TreeView.js\" />\n    <Content Include=\"Scripts\\WebForms\\WebForms.js\" />\n    <Content Include=\"Scripts\\WebForms\\WebParts.js\" />\n    <Content Include=\"Scripts\\WebForms\\WebUIValidation.js\" />\n    <Content Include=\"Scripts\\_references.js\" />\n    <Content Include=\"Default.aspx\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Site.Master\" />\n    <Content Include=\"StatusDemos\\HomeTimelineDemo.aspx\" />\n    <Content Include=\"StatusDemos\\StatusDemos.aspx\" />\n    <Content Include=\"StatusDemos\\TweetDemo.aspx\" />\n    <Content Include=\"ViewSwitcher.ascx\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Bundle.config\" />\n    <None Include=\"Project_Readme.html\" />\n    <Content Include=\"Site.Mobile.Master\" />\n    <Content Include=\"Scripts\\jquery-2.1.1.min.map\" />\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Account\\AddPhoneNumber.aspx.cs\">\n      <DependentUpon>AddPhoneNumber.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\AddPhoneNumber.aspx.designer.cs\">\n      <DependentUpon>AddPhoneNumber.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Confirm.aspx.cs\">\n      <DependentUpon>Confirm.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Confirm.aspx.designer.cs\">\n      <DependentUpon>Confirm.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Forgot.aspx.cs\">\n      <DependentUpon>Forgot.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Forgot.aspx.designer.cs\">\n      <DependentUpon>Forgot.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Lockout.aspx.cs\">\n      <DependentUpon>Lockout.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Lockout.aspx.designer.cs\">\n      <DependentUpon>Lockout.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Login.aspx.cs\">\n      <DependentUpon>Login.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Login.aspx.designer.cs\">\n      <DependentUpon>Login.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Manage.aspx.cs\">\n      <DependentUpon>Manage.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Manage.aspx.designer.cs\">\n      <DependentUpon>Manage.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ManageLogins.aspx.cs\">\n      <DependentUpon>ManageLogins.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ManageLogins.aspx.designer.cs\">\n      <DependentUpon>ManageLogins.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ManagePassword.aspx.cs\">\n      <DependentUpon>ManagePassword.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ManagePassword.aspx.designer.cs\">\n      <DependentUpon>ManagePassword.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\OpenAuthProviders.ascx.cs\">\n      <DependentUpon>OpenAuthProviders.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\OpenAuthProviders.ascx.designer.cs\">\n      <DependentUpon>OpenAuthProviders.ascx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Register.aspx.cs\">\n      <DependentUpon>Register.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Register.aspx.designer.cs\">\n      <DependentUpon>Register.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\RegisterExternalLogin.aspx.cs\">\n      <DependentUpon>RegisterExternalLogin.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\RegisterExternalLogin.aspx.designer.cs\">\n      <DependentUpon>RegisterExternalLogin.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ResetPassword.aspx.cs\">\n      <DependentUpon>ResetPassword.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ResetPassword.aspx.designer.cs\">\n      <DependentUpon>ResetPassword.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ResetPasswordConfirmation.aspx.cs\">\n      <DependentUpon>ResetPasswordConfirmation.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ResetPasswordConfirmation.aspx.designer.cs\">\n      <DependentUpon>ResetPasswordConfirmation.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\TwoFactorAuthenticationSignIn.aspx.cs\">\n      <DependentUpon>TwoFactorAuthenticationSignIn.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\TwoFactorAuthenticationSignIn.aspx.designer.cs\">\n      <DependentUpon>TwoFactorAuthenticationSignIn.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\VerifyPhoneNumber.aspx.cs\">\n      <DependentUpon>VerifyPhoneNumber.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\VerifyPhoneNumber.aspx.designer.cs\">\n      <DependentUpon>VerifyPhoneNumber.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"About.aspx.cs\">\n      <DependentUpon>About.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"About.aspx.designer.cs\">\n      <DependentUpon>About.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"App_Start\\IdentityConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\Startup.Auth.cs\" />\n    <Compile Include=\"Contact.aspx.cs\">\n      <DependentUpon>Contact.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Contact.aspx.designer.cs\">\n      <DependentUpon>Contact.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Default.aspx.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Default.aspx.designer.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Models\\IdentityModels.cs\" />\n    <Compile Include=\"OAuth.aspx.cs\">\n      <DependentUpon>OAuth.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"OAuth.aspx.designer.cs\">\n      <DependentUpon>OAuth.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Site.Master.cs\">\n      <DependentUpon>Site.Master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Site.Master.designer.cs\">\n      <DependentUpon>Site.Master</DependentUpon>\n    </Compile>\n    <Compile Include=\"Site.Mobile.Master.cs\">\n      <DependentUpon>Site.Mobile.Master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Site.Mobile.Master.designer.cs\">\n      <DependentUpon>Site.Mobile.Master</DependentUpon>\n    </Compile>\n    <Compile Include=\"Startup.cs\" />\n    <Compile Include=\"StatusDemos\\HomeTimelineDemo.aspx.cs\">\n      <DependentUpon>HomeTimelineDemo.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\HomeTimelineDemo.aspx.designer.cs\">\n      <DependentUpon>HomeTimelineDemo.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\StatusDemos.aspx.cs\">\n      <DependentUpon>StatusDemos.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\StatusDemos.aspx.designer.cs\">\n      <DependentUpon>StatusDemos.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\TweetDemo.aspx.cs\">\n      <DependentUpon>TweetDemo.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\TweetDemo.aspx.designer.cs\">\n      <DependentUpon>TweetDemo.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"ViewSwitcher.ascx.cs\">\n      <DependentUpon>ViewSwitcher.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"ViewSwitcher.ascx.designer.cs\">\n      <DependentUpon>ViewSwitcher.ascx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>17008</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:17008/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Models/IdentityModels.cs",
    "content": "﻿using System;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Linq2TwitterDemos_WebForms.Models;\n\nnamespace Linq2TwitterDemos_WebForms.Models\n{\n    // You can add User data for the user by adding more properties to your User class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.\n    public class ApplicationUser : IdentityUser\n    {\n        public ClaimsIdentity GenerateUserIdentity(ApplicationUserManager manager)\n        {\n            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType\n            var userIdentity = manager.CreateIdentity(this, DefaultAuthenticationTypes.ApplicationCookie);\n            // Add custom user claims here\n            return userIdentity;\n        }\n\n        public Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)\n        {\n            return Task.FromResult(GenerateUserIdentity(manager));\n        }\n    }\n\n    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>\n    {\n        public ApplicationDbContext()\n            : base(\"DefaultConnection\", throwIfV1Schema: false)\n        {\n        }\n\n        public static ApplicationDbContext Create()\n        {\n            return new ApplicationDbContext();\n        }\n    }\n}\n\n#region Helpers\nnamespace Linq2TwitterDemos_WebForms\n{\n    public static class IdentityHelper\n    {\n        // Used for XSRF when linking external logins\n        public const string XsrfKey = \"XsrfId\";\n\n        public const string ProviderNameKey = \"providerName\";\n        public static string GetProviderNameFromRequest(HttpRequest request)\n        {\n            return request.QueryString[ProviderNameKey];\n        }\n\n        public const string CodeKey = \"code\";\n        public static string GetCodeFromRequest(HttpRequest request)\n        {\n            return request.QueryString[CodeKey];\n        }\n\n        public const string UserIdKey = \"userId\";\n        public static string GetUserIdFromRequest(HttpRequest request)\n        {\n            return HttpUtility.UrlDecode(request.QueryString[UserIdKey]);\n        }\n\n        public static string GetResetPasswordRedirectUrl(string code, HttpRequest request)\n        {\n            var absoluteUri = \"/Account/ResetPassword?\" + CodeKey + \"=\" + HttpUtility.UrlEncode(code);\n            return new Uri(request.Url, absoluteUri).AbsoluteUri.ToString();\n        }\n\n        public static string GetUserConfirmationRedirectUrl(string code, string userId, HttpRequest request)\n        {\n            var absoluteUri = \"/Account/Confirm?\" + CodeKey + \"=\" + HttpUtility.UrlEncode(code) + \"&\" + UserIdKey + \"=\" + HttpUtility.UrlEncode(userId);\n            return new Uri(request.Url, absoluteUri).AbsoluteUri.ToString();\n        }\n\n        private static bool IsLocalUrl(string url)\n        {\n            return !string.IsNullOrEmpty(url) && ((url[0] == '/' && (url.Length == 1 || (url[1] != '/' && url[1] != '\\\\'))) || (url.Length > 1 && url[0] == '~' && url[1] == '/'));\n        }\n\n        public static void RedirectToReturnUrl(string returnUrl, HttpResponse response)\n        {\n            if (!String.IsNullOrEmpty(returnUrl) && IsLocalUrl(returnUrl))\n            {\n                response.Redirect(returnUrl);\n            }\n            else\n            {\n                response.Redirect(\"~/\");\n            }\n        }\n    }\n}\n#endregion\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/OAuth.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"OAuth.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.OAuth\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <p></p>\n    <p>\n        Please press this button to start the Twitter OAuth authorization process:\n    </p>\n    <p>\n        <asp:Button ID=\"AuthorizeButton\" runat=\"server\" OnClick=\"AuthorizeButton_Click\" Text=\"Authorize\" />\n    </p>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/OAuth.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing LinqToTwitter;\nusing System.Configuration;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class OAuth : System.Web.UI.Page\n    {\n        AspNetAuthorizer auth;\n\n        protected async void Page_Load(object sender, EventArgs e)\n        {\n            auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                },\n                GoToTwitterAuthorization =\n                    twitterUrl => Response.Redirect(twitterUrl, false)\n            };\n\n            if (!Page.IsPostBack && Request.QueryString[\"oauth_token\"] != null)\n            {\n                await auth.CompleteAuthorizeAsync(Request.Url);\n\n                // This is how you access credentials after authorization.\n                // The oauthToken and oauthTokenSecret do not expire.\n                // You can use the userID to associate the credentials with the user.\n                // You can save credentials any way you want - database, isolated \n                //   storage, etc. - it's up to you.\n                // You can retrieve and load all 4 credentials on subsequent queries \n                //   to avoid the need to re-authorize.\n                // When you've loaded all 4 credentials, LINQ to Twitter will let you \n                //   make queries without re-authorizing.\n                //\n                //var credentials = auth.CredentialStore;\n                //string oauthToken = credentials.OAuthToken;\n                //string oauthTokenSecret = credentials.OAuthTokenSecret;\n                //string screenName = credentials.ScreenName;\n                //ulong userID = credentials.UserID;\n                //\n\n                Response.Redirect(\"~/Default.aspx\", false);\n            }\n        }\n\n        protected async void AuthorizeButton_Click(object sender, EventArgs e)\n        {\n            await auth.BeginAuthorizeAsync(Request.Url);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/OAuth.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms {\n    \n    \n    public partial class OAuth {\n        \n        /// <summary>\n        /// AuthorizeButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button AuthorizeButton;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Project_Readme.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <style>\n        body {\n            background: #fff;\n            color: #505050;\n            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;\n            margin: 20px;\n            padding: 0;\n        }\n\n        #header {\n            background: #efefef;\n            padding: 0;\n        }\n\n        h1 {\n            font-size: 48px;\n            font-weight: normal;\n            margin: 0;\n            padding: 0 30px;\n            line-height: 150px;\n        }\n\n        p {\n            font-size: 20px;\n            color: #fff;\n            background: #969696;\n            padding: 0 30px;\n            line-height: 50px;\n        }\n\n        #main {\n            padding: 5px 30px;\n        }\n\n        .section {\n            width: 21.7%;\n            float: left;\n            margin: 0 0 0 4%;\n        }\n\n            .section h2 {\n                font-size: 13px;\n                text-transform: uppercase;\n                margin: 0;\n                border-bottom: 1px solid silver;\n                padding-bottom: 12px;\n                margin-bottom: 8px;\n            }\n\n            .section.first {\n                margin-left: 0;\n            }\n\n                .section.first h2 {\n                    font-size: 24px;\n                    text-transform: none;\n                    margin-bottom: 25px;\n                    border: none;\n                }\n\n                .section.first li {\n                    border-top: 1px solid silver;\n                    padding: 8px 0;\n                }\n\n            .section.last {\n                margin-right: 0;\n            }\n\n        ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n            line-height: 20px;\n        }\n\n        li {\n            padding: 4px 0;\n        }\n\n        a {\n            color: #267cb2;\n            text-decoration: none;\n        }\n\n            a:hover {\n                text-decoration: underline;\n            }\n    </style>\n</head>\n<body>\n\n    <div id=\"header\">\n        <h1>Your ASP.NET application</h1>\n        <p>Congratulations! You've created a project</p>\n    </div>\n\n    <div id=\"main\">\n        <div class=\"section first\">\n            <h2>This application consists of:</h2>\n            <ul>\n                <li>Sample pages showing basic nav between Home, About, and Contact.</li>\n                <li>Theming using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320754\">Bootstrap</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320755\">Authentication</a>, if selected, shows how to register and sign in</li>\n                <li>ASP.NET features managed using <a href=\"http://go.microsoft.com/fwlink/?LinkID=320775\">NuGet</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Customize app</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320774\">Get started with ASP.NET Web Forms</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320758\">Change the site's theme</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320759\">Add more libraries using NuGet</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320776\">Configure authentication</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320761\">Customize information about the website users</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320762\">Get information from social providers</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320763\">Add HTTP services using ASP.NET Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320764\">Secure the Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320765\">Add real-time web with ASP.NET SignalR</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320766\">Add components using Scaffolding</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320767\">Test app with Browser Link</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320768\">Share your project</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Deploy</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320769\">Ensure your app is ready for production</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320770\">Microsoft Azure</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320771\">Hosting providers</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section last\">\n            <h2>Get help</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320772\">Get help</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=320773\">Get more templates</a></li>\n            </ul>\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_WebForms\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_WebForms\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"ec2cd5ac-7330-418b-803a-ffbe688d7016\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/DetailsView.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/DetailsView.js\nfunction DetailsView() {\n    this.pageIndex = null;\n    this.dataKeys = null;\n    this.createPropertyString = DetailsView_createPropertyString;\n    this.setStateField = DetailsView_setStateValue;\n    this.getHiddenFieldContents = DetailsView_getHiddenFieldContents;\n    this.stateField = null;\n    this.panelElement = null;\n    this.callback = null;\n}\nfunction DetailsView_createPropertyString() {\n    return createPropertyStringFromValues_DetailsView(this.pageIndex, this.dataKeys);\n}\nfunction DetailsView_setStateValue() {\n    this.stateField.value = this.createPropertyString();\n}\nfunction DetailsView_OnCallback (result, context) {\n    var value = new String(result);\n    var valsArray = value.split(\"|\");\n    var innerHtml = valsArray[2];\n    for (var i = 3; i < valsArray.length; i++) {\n        innerHtml += \"|\" + valsArray[i];\n    }\n    context.panelElement.innerHTML = innerHtml;\n    context.stateField.value = createPropertyStringFromValues_DetailsView(valsArray[0], valsArray[1]);\n}\nfunction DetailsView_getHiddenFieldContents(arg) {\n    return arg + \"|\" + this.stateField.value;\n}\nfunction createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) {\n    var value = new Array(pageIndex, dataKeys);\n    return value.join(\"|\");\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/Focus.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebForms.js\nfunction WebForm_FindFirstFocusableChild(control) {\n    if (!control || !(control.tagName)) {\n        return null;\n    }\n    var tagName = control.tagName.toLowerCase();\n    if (tagName == \"undefined\") {\n        return null;\n    }\n    var children = control.childNodes;\n    if (children) {\n        for (var i = 0; i < children.length; i++) {\n            try {\n                if (WebForm_CanFocus(children[i])) {\n                    return children[i];\n                }\n                else {\n                    var focused = WebForm_FindFirstFocusableChild(children[i]);\n                    if (WebForm_CanFocus(focused)) {\n                        return focused;\n                    }\n                }\n            } catch (e) {\n            }\n        }\n    }\n    return null;\n}\nfunction WebForm_AutoFocus(focusId) {\n    var targetControl;\n    if (__nonMSDOMBrowser) {\n        targetControl = document.getElementById(focusId);\n    }\n    else {\n        targetControl = document.all[focusId];\n    }\n    var focused = targetControl;\n    if (targetControl && (!WebForm_CanFocus(targetControl)) ) {\n        focused = WebForm_FindFirstFocusableChild(targetControl);\n    }\n    if (focused) {\n        try {\n            focused.focus();\n            if (__nonMSDOMBrowser) {\n                focused.scrollIntoView(false);\n            }\n            if (window.__smartNav) {\n                window.__smartNav.ae = focused.id;\n            }\n        }\n        catch (e) {\n        }\n    }\n}\nfunction WebForm_CanFocus(element) {\n    if (!element || !(element.tagName)) return false;\n    var tagName = element.tagName.toLowerCase();\n    return (!(element.disabled) &&\n            (!(element.type) || element.type.toLowerCase() != \"hidden\") &&\n            WebForm_IsFocusableTag(tagName) &&\n            WebForm_IsInVisibleContainer(element)\n            );\n}\nfunction WebForm_IsFocusableTag(tagName) {\n    return (tagName == \"input\" ||\n            tagName == \"textarea\" ||\n            tagName == \"select\" ||\n            tagName == \"button\" ||\n            tagName == \"a\");\n}\nfunction WebForm_IsInVisibleContainer(ctrl) {\n    var current = ctrl;\n    while((typeof(current) != \"undefined\") && (current != null)) {\n        if (current.disabled ||\n            ( typeof(current.style) != \"undefined\" &&\n            ( ( typeof(current.style.display) != \"undefined\" &&\n                current.style.display == \"none\") ||\n                ( typeof(current.style.visibility) != \"undefined\" &&\n                current.style.visibility == \"hidden\") ) ) ) {\n            return false;\n        }\n        if (typeof(current.parentNode) != \"undefined\" &&\n                current.parentNode != null &&\n                current.parentNode != current &&\n                current.parentNode.tagName.toLowerCase() != \"body\") {\n            current = current.parentNode;\n        }\n        else {\n            return true;\n        }\n    }\n    return true;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/GridView.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/GridView.js\nfunction GridView() {\n    this.pageIndex = null;\n    this.sortExpression = null;\n    this.sortDirection = null;\n    this.dataKeys = null;\n    this.createPropertyString = GridView_createPropertyString;\n    this.setStateField = GridView_setStateValue;\n    this.getHiddenFieldContents = GridView_getHiddenFieldContents;\n    this.stateField = null;\n    this.panelElement = null;\n    this.callback = null;\n}\nfunction GridView_createPropertyString() {\n    return createPropertyStringFromValues_GridView(this.pageIndex, this.sortDirection, this.sortExpression, this.dataKeys);\n}\nfunction GridView_setStateValue() {\n    this.stateField.value = this.createPropertyString();\n}\nfunction GridView_OnCallback (result, context) {\n    var value = new String(result);\n    var valsArray = value.split(\"|\");\n    var innerHtml = valsArray[4];\n    for (var i = 5; i < valsArray.length; i++) {\n        innerHtml += \"|\" + valsArray[i];\n    }\n    context.panelElement.innerHTML = innerHtml;\n    context.stateField.value = createPropertyStringFromValues_GridView(valsArray[0], valsArray[1], valsArray[2], valsArray[3]);\n}\nfunction GridView_getHiddenFieldContents(arg) {\n    return arg + \"|\" + this.stateField.value;\n}\nfunction createPropertyStringFromValues_GridView(pageIndex, sortDirection, sortExpression, dataKeys) {\n    var value = new Array(pageIndex, sortDirection, sortExpression, dataKeys);\n    return value.join(\"|\");\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjax.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjax.js\nFunction.__typeName=\"Function\";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c<e;c++)d[c]=arguments[c];d[e]=a;return b.apply(this,d)}return b.call(this,a)}};Function.createDelegate=function(a,b){return function(){return b.apply(a,arguments)}};Function.emptyFunction=Function.emptyMethod=function(){};Function.validateParameters=function(c,b,a){return Function._validateParams(c,b,a)};Function._validateParams=function(g,e,c){var a,d=e.length;c=c||typeof c===\"undefined\";a=Function._validateParameterCount(g,e,c);if(a){a.popStackFrame();return a}for(var b=0,i=g.length;b<i;b++){var f=e[Math.min(b,d-1)],h=f.name;if(f.parameterArray)h+=\"[\"+(b-d+1)+\"]\";else if(!c&&b>=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(e<b){var f=b;for(a=0;a<b;a++){var g=d[a];if(g.optional||g.parameterArray)f--}if(e<f)c=true}else if(i&&e>b){c=true;for(a=0;a<b;a++)if(d[a].parameterArray){c=false;break}}if(c){var h=Error.parameterCount();h.popStackFrame();return h}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!==\"undefined\"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d<c.length;d++){var n=c[d];b=Function._validateParameterType(n,e,j,i,f,h+\"[\"+d+\"]\");if(b){b.popStackFrame();return b}}}return null};Function._validateParameterType=function(b,c,k,j,h,d){var a,g;if(typeof b===\"undefined\")if(h)return null;else{a=Error.argumentUndefined(d);a.popStackFrame();return a}if(b===null)if(h)return null;else{a=Error.argumentNull(d);a.popStackFrame();return a}if(c&&c.__enum){if(typeof b!==\"number\"){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(b%1===0){var e=c.prototype;if(!c.__flags||b===0){for(g in e)if(e[g]===b)return null}else{var i=b;for(g in e){var f=e[g];if(f===0)continue;if((f&b)===f)i-=f;if(i===0)return null}}}a=Error.argumentOutOfRange(d,b,String.format(Sys.Res.enumInvalidValue,b,c.getName()));a.popStackFrame();return a}if(j&&(!Sys._isDomElement(b)||b.nodeType===3)){a=Error.argument(d,Sys.Res.argumentDomElement);a.popStackFrame();return a}if(c&&!Sys._isInstanceOfType(c,b)){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(c===Number&&k)if(b%1!==0){a=Error.argumentOutOfRange(d,b,Sys.Res.argumentInteger);a.popStackFrame();return a}return null};Error.__typeName=\"Error\";Error.__class=true;Error.create=function(d,b){var a=new Error(d);a.message=d;if(b)for(var c in b)a[c]=b[c];a.popStackFrame();return a};Error.argument=function(a,c){var b=\"Sys.ArgumentException: \"+(c?c:Sys.Res.argument);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentException\",paramName:a});d.popStackFrame();return d};Error.argumentNull=function(a,c){var b=\"Sys.ArgumentNullException: \"+(c?c:Sys.Res.argumentNull);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentNullException\",paramName:a});d.popStackFrame();return d};Error.argumentOutOfRange=function(c,a,d){var b=\"Sys.ArgumentOutOfRangeException: \"+(d?d:Sys.Res.argumentOutOfRange);if(c)b+=\"\\n\"+String.format(Sys.Res.paramName,c);if(typeof a!==\"undefined\"&&a!==null)b+=\"\\n\"+String.format(Sys.Res.actualValue,a);var e=Error.create(b,{name:\"Sys.ArgumentOutOfRangeException\",paramName:c,actualValue:a});e.popStackFrame();return e};Error.argumentType=function(d,c,b,e){var a=\"Sys.ArgumentTypeException: \";if(e)a+=e;else if(c&&b)a+=String.format(Sys.Res.argumentTypeWithTypes,c.getName(),b.getName());else a+=Sys.Res.argumentType;if(d)a+=\"\\n\"+String.format(Sys.Res.paramName,d);var f=Error.create(a,{name:\"Sys.ArgumentTypeException\",paramName:d,actualType:c,expectedType:b});f.popStackFrame();return f};Error.argumentUndefined=function(a,c){var b=\"Sys.ArgumentUndefinedException: \"+(c?c:Sys.Res.argumentUndefined);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentUndefinedException\",paramName:a});d.popStackFrame();return d};Error.format=function(a){var c=\"Sys.FormatException: \"+(a?a:Sys.Res.format),b=Error.create(c,{name:\"Sys.FormatException\"});b.popStackFrame();return b};Error.invalidOperation=function(a){var c=\"Sys.InvalidOperationException: \"+(a?a:Sys.Res.invalidOperation),b=Error.create(c,{name:\"Sys.InvalidOperationException\"});b.popStackFrame();return b};Error.notImplemented=function(a){var c=\"Sys.NotImplementedException: \"+(a?a:Sys.Res.notImplemented),b=Error.create(c,{name:\"Sys.NotImplementedException\"});b.popStackFrame();return b};Error.parameterCount=function(a){var c=\"Sys.ParameterCountException: \"+(a?a:Sys.Res.parameterCount),b=Error.create(c,{name:\"Sys.ParameterCountException\"});b.popStackFrame();return b};Error.prototype.popStackFrame=function(){if(typeof this.stack===\"undefined\"||this.stack===null||typeof this.fileName===\"undefined\"||this.fileName===null||typeof this.lineNumber===\"undefined\"||this.lineNumber===null)return;var a=this.stack.split(\"\\n\"),c=a[0],e=this.fileName+\":\"+this.lineNumber;while(typeof c!==\"undefined\"&&c!==null&&c.indexOf(e)===-1){a.shift();c=a[0]}var d=a[1];if(typeof d===\"undefined\"||d===null)return;var b=d.match(/@(.*):(\\d+)$/);if(typeof b===\"undefined\"||b===null)return;this.fileName=b[1];this.lineNumber=parseInt(b[2]);a.shift();this.stack=a.join(\"\\n\")};Object.__typeName=\"Object\";Object.__class=true;Object.getType=function(b){var a=b.constructor;if(!a||typeof a!==\"function\"||!a.__typeName||a.__typeName===\"Object\")return Object;return a};Object.getTypeName=function(a){return Object.getType(a).getName()};String.__typeName=\"String\";String.__class=true;String.prototype.endsWith=function(a){return this.substr(this.length-a.length)===a};String.prototype.startsWith=function(a){return this.substr(0,a.length)===a};String.prototype.trim=function(){return this.replace(/^\\s+|\\s+$/g,\"\")};String.prototype.trimEnd=function(){return this.replace(/\\s+$/,\"\")};String.prototype.trimStart=function(){return this.replace(/^\\s+/,\"\")};String.format=function(){return String._toFormattedString(false,arguments)};String._toFormattedString=function(l,j){var c=\"\",e=j[0];for(var a=0;true;){var f=e.indexOf(\"{\",a),d=e.indexOf(\"}\",a);if(f<0&&d<0){c+=e.slice(a);break}if(d>0&&(d<f||f<0)){c+=e.slice(a,d+1);a=d+2;continue}c+=e.slice(a,f);a=f+1;if(e.charAt(a)===\"{\"){c+=\"{\";a++;continue}if(d<0)break;var h=e.substring(a,d),g=h.indexOf(\":\"),k=parseInt(g<0?h:h.substring(0,g),10)+1,i=g<0?\"\":h.substring(g+1),b=j[k];if(typeof b===\"undefined\"||b===null)b=\"\";if(b.toFormattedString)c+=b.toFormattedString(i);else if(l&&b.localeFormat)c+=b.localeFormat(i);else if(b.format)c+=b.format(i);else c+=b.toString();a=d+1}return c};Boolean.__typeName=\"Boolean\";Boolean.__class=true;Boolean.parse=function(b){var a=b.trim().toLowerCase();if(a===\"false\")return false;if(a===\"true\")return true};Date.__typeName=\"Date\";Date.__class=true;Number.__typeName=\"Number\";Number.__class=true;RegExp.__typeName=\"RegExp\";RegExp.__class=true;if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=Sys._getBaseMethod(this,a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(a,b){return Sys._getBaseMethod(this,a,b)};Type.prototype.getBaseType=function(){return typeof this.__baseType===\"undefined\"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Array.contains(a,e))a[a.length]=e}b=b.__baseType}return a};Type.prototype.getName=function(){return typeof this.__typeName===\"undefined\"?\"\":this.__typeName};Type.prototype.implementsInterface=function(d){this.resolveInheritance();var c=d.getName(),a=this.__interfaceCache;if(a){var e=a[c];if(typeof e!==\"undefined\")return e}else a=this.__interfaceCache={};var b=this;while(b){var f=b.__interfaces;if(f)if(Array.indexOf(f,d)!==-1)return a[c]=true;b=b.__baseType}return a[c]=false};Type.prototype.inheritsFrom=function(b){this.resolveInheritance();var a=this.__baseType;while(a){if(a===b)return true;a=a.__baseType}return false};Type.prototype.initializeBase=function(a,b){this.resolveInheritance();if(this.__baseType)if(!b)this.__baseType.apply(a);else this.__baseType.apply(a,b);return a};Type.prototype.isImplementedBy=function(a){if(typeof a===\"undefined\"||a===null)return false;var b=Object.getType(a);return !!(b.implementsInterface&&b.implementsInterface(this))};Type.prototype.isInstanceOfType=function(a){return Sys._isInstanceOfType(this,a)};Type.prototype.registerClass=function(c,b,d){this.prototype.constructor=this;this.__typeName=c;this.__class=true;if(b){this.__baseType=b;this.__basePrototypePending=true}Sys.__upperCaseTypes[c.toUpperCase()]=this;if(d){this.__interfaces=[];for(var a=2,f=arguments.length;a<f;a++){var e=arguments[a];this.__interfaces.push(e)}}return this};Type.prototype.registerInterface=function(a){Sys.__upperCaseTypes[a.toUpperCase()]=this;this.prototype.constructor=this;this.__typeName=a;this.__interface=true;return this};Type.prototype.resolveInheritance=function(){if(this.__basePrototypePending){var b=this.__baseType;b.resolveInheritance();for(var a in b.prototype){var c=b.prototype[a];if(!this.prototype[a])this.prototype[a]=c}delete this.__basePrototypePending}};Type.getRootNamespaces=function(){return Array.clone(Sys.__rootNamespaces)};Type.isClass=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__class};Type.isInterface=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__interface};Type.isNamespace=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__namespace};Type.parse=function(typeName,ns){var fn;if(ns){fn=Sys.__upperCaseTypes[ns.getName().toUpperCase()+\".\"+typeName.toUpperCase()];return fn||null}if(!typeName)return null;if(!Type.__htClasses)Type.__htClasses={};fn=Type.__htClasses[typeName];if(!fn){fn=eval(typeName);Type.__htClasses[typeName]=fn}return fn};Type.registerNamespace=function(e){var d=window,c=e.split(\".\");for(var b=0;b<c.length;b++){var f=c[b],a=d[f];if(!a)a=d[f]={};if(!a.__namespace){if(b===0&&e!==\"Sys\")Sys.__rootNamespaces[Sys.__rootNamespaces.length]=a;a.__namespace=true;a.__typeName=c.slice(0,b+1).join(\".\");a.getName=function(){return this.__typeName}}d=a}};Type._checkDependency=function(c,a){var d=Type._registerScript._scripts,b=d?!!d[c]:false;if(typeof a!==\"undefined\"&&!b)throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded,a,c));return b};Type._registerScript=function(a,c){var b=Type._registerScript._scripts;if(!b)Type._registerScript._scripts=b={};if(b[a])throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded,a));b[a]=true;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Type._checkDependency(e))throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound,a,e))}};Type.registerNamespace(\"Sys\");Sys.__upperCaseTypes={};Sys.__rootNamespaces=[Sys];Sys._isInstanceOfType=function(c,b){if(typeof b===\"undefined\"||b===null)return false;if(b instanceof c)return true;var a=Object.getType(b);return !!(a===c)||a.inheritsFrom&&a.inheritsFrom(c)||a.implementsInterface&&a.implementsInterface(c)};Sys._getBaseMethod=function(d,e,c){var b=d.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Sys._isDomElement=function(a){var c=false;if(typeof a.nodeType!==\"number\"){var b=a.ownerDocument||a.document||a;if(b!=a){var d=b.defaultView||b.parentWindow;c=d!=a}else c=typeof b.body===\"undefined\"}return !c};Array.__typeName=\"Array\";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Sys._indexOf(a,b)>=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a<f;a++){var c=b[a];if(typeof c!==\"undefined\")e.call(d,c,a,b)}};Array.indexOf=function(a,c,b){return Sys._indexOf(a,c,b)};Array.insert=function(a,b,c){a.splice(b,0,c)};Array.parse=function(value){if(!value)return [];return eval(value)};Array.remove=function(b,c){var a=Sys._indexOf(b,c);if(a>=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e===\"undefined\")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b<c;b++)if(typeof d[b]!==\"undefined\"&&d[b]===e)return b}return -1};Type._registerScript._scripts={\"MicrosoftAjaxCore.js\":true,\"MicrosoftAjaxGlobalization.js\":true,\"MicrosoftAjaxSerialization.js\":true,\"MicrosoftAjaxComponentModel.js\":true,\"MicrosoftAjaxHistory.js\":true,\"MicrosoftAjaxNetwork.js\":true,\"MicrosoftAjaxWebServices.js\":true};Sys.IDisposable=function(){};Sys.IDisposable.prototype={};Sys.IDisposable.registerInterface(\"Sys.IDisposable\");Sys.StringBuilder=function(a){this._parts=typeof a!==\"undefined\"&&a!==null&&a!==\"\"?[a.toString()]:[];this._value={};this._len=0};Sys.StringBuilder.prototype={append:function(a){this._parts[this._parts.length]=a},appendLine:function(a){this._parts[this._parts.length]=typeof a===\"undefined\"||a===null||a===\"\"?\"\\r\\n\":a+\"\\r\\n\"},clear:function(){this._parts=[];this._value={};this._len=0},isEmpty:function(){if(this._parts.length===0)return true;return this.toString()===\"\"},toString:function(a){a=a||\"\";var b=this._parts;if(this._len!==b.length){this._value={};this._len=b.length}var d=this._value;if(typeof d[a]===\"undefined\"){if(a!==\"\")for(var c=0;c<b.length;)if(typeof b[c]===\"undefined\"||b[c]===\"\"||b[c]===null)b.splice(c,1);else c++;d[a]=this._parts.join(a)}return d[a]}};Sys.StringBuilder.registerClass(\"Sys.StringBuilder\");Sys.Browser={};Sys.Browser.InternetExplorer={};Sys.Browser.Firefox={};Sys.Browser.Safari={};Sys.Browser.Opera={};Sys.Browser.agent=null;Sys.Browser.hasDebuggerStatement=false;Sys.Browser.name=navigator.appName;Sys.Browser.version=parseFloat(navigator.appVersion);Sys.Browser.documentMode=0;if(navigator.userAgent.indexOf(\" MSIE \")>-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\\d+\\.\\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" Firefox/\")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\\/(\\d+\\.\\d+)/)[1]);Sys.Browser.name=\"Firefox\";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" AppleWebKit/\")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\\/(\\d+(\\.\\d+)?)/)[1]);Sys.Browser.name=\"Safari\"}else if(navigator.userAgent.indexOf(\"Opera/\")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass(\"Sys.EventArgs\");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass(\"Sys.CancelEventArgs\",Sys.EventArgs);Type.registerNamespace(\"Sys.UI\");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!==\"undefined\"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value+=b+\"\\n\"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value=\"\"},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval(\"debugger\")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:\"traceDump\";b=b?b:\"\";if(a===null){this.trace(b+c+\": null\");return}switch(typeof a){case \"undefined\":this.trace(b+c+\": Undefined\");break;case \"number\":case \"string\":case \"boolean\":this.trace(b+c+\": \"+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+\": \"+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+\": ...\");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName===\"string\"){var k=a.tagName?a.tagName:\"DomElement\";if(a.id)k+=\" - \"+a.id;this.trace(b+c+\" {\"+k+\"}\")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i===\"string\"?\" {\"+i+\"}\":\"\"));if(b===\"\"||f){b+=\"    \";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e<j;e++)this._traceDump(a[e],\"[\"+e+\"]\",f,b,d)}else for(g in a){h=a[g];if(!Function.isInstanceOfType(h))this._traceDump(h,g,f,b,d)}}}Array.remove(d,a)}}};Sys._Debug.registerClass(\"Sys._Debug\");Sys.Debug=new Sys._Debug;Sys.Debug.isDebug=false;function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if(!a){this.__lowerCaseValues=a={};var g=this.prototype;for(var f in g)a[f.toLowerCase()]=g[f]}}else a=this.prototype;if(!this.__flags){i=e?c.toLowerCase():c;b=a[i.trim()];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c,this.__typeName));return b}else{var h=(e?c.toLowerCase():c).split(\",\"),j=0;for(var d=h.length-1;d>=0;d--){var k=h[d].trim();b=a[k];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c.split(\",\")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c===\"undefined\"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(\", \")}return \"\"}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!==\"number\")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!==\"number\")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass(\"Sys.CollectionChange\");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum(\"Sys.NotifyCollectionChangedAction\");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass(\"Sys.NotifyCollectionChangedEventArgs\",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass(\"Sys.Observer\");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,\"propertyChanged\",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"propertyChanged\",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,\"\")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(\".\");for(var i=0,m=d.length-1;i<m;i++){var l=d[i];b=a[\"get_\"+l];if(typeof b===\"function\")a=b.call(a);else a=a[l];var n=typeof a;if(a===null||n===\"undefined\")throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath,j))}var e,c=d[m];b=a[\"get_\"+c];f=a[\"set_\"+c];if(typeof b===\"function\")e=b.call(a);else e=a[c];if(typeof f===\"function\")f.call(a,g);else a[c]=g;if(e!==g){var h=Sys.Observer._getContext(k);if(h&&h.updating){h.dirty=true;return}Sys.Observer.raisePropertyChanged(k,d[0])}};Sys.Observer.setValue=function(b,a,c){Sys.Observer._setValue(b,a,c)};Sys.Observer.raisePropertyChanged=function(b,a){Sys.Observer.raiseEvent(b,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))};Sys.Observer.addCollectionChanged=function(b,a){Sys.Observer._addEventHandler(b,\"collectionChanged\",a)};Sys.Observer.removeCollectionChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"collectionChanged\",a)};Sys.Observer._collectionChange=function(d,c){var a=Sys.Observer._getContext(d);if(a&&a.updating){a.dirty=true;var b=a.changes;if(!b)a.changes=b=[c];else b.push(c)}else{Sys.Observer.raiseCollectionChanged(d,[c]);Sys.Observer.raisePropertyChanged(d,\"length\")}};Sys.Observer.add=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[b],a.length);Array.add(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.addRange=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,b,a.length);Array.addRange(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.clear=function(a){var b=Array.clone(a);Array.clear(a);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset,null,-1,b,0))};Sys.Observer.insert=function(a,b,c){Array.insert(a,b,c);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[c],b))};Sys.Observer.remove=function(a,b){var c=Array.indexOf(a,b);if(c!==-1){Array.remove(a,b);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[b],c));return true}return false};Sys.Observer.removeAt=function(b,a){if(a>-1&&a<b.length){var c=b[a];Array.removeAt(b,a);Sys.Observer._collectionChange(b,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[c],a))}};Sys.Observer.raiseCollectionChanged=function(b,a){Sys.Observer.raiseEvent(b,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))};Sys.Observer._observeMethods={add_propertyChanged:function(a){Sys.Observer._addEventHandler(this,\"propertyChanged\",a)},remove_propertyChanged:function(a){Sys.Observer._removeEventHandler(this,\"propertyChanged\",a)},addEventHandler:function(a,b){Sys.Observer._addEventHandler(this,a,b)},removeEventHandler:function(a,b){Sys.Observer._removeEventHandler(this,a,b)},get_isUpdating:function(){return Sys.Observer.isUpdating(this)},beginUpdate:function(){Sys.Observer.beginUpdate(this)},endUpdate:function(){Sys.Observer.endUpdate(this)},setValue:function(b,a){Sys.Observer._setValue(this,b,a)},raiseEvent:function(b,a){Sys.Observer.raiseEvent(this,b,a)},raisePropertyChanged:function(a){Sys.Observer.raiseEvent(this,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))}};Sys.Observer._arrayMethods={add_collectionChanged:function(a){Sys.Observer._addEventHandler(this,\"collectionChanged\",a)},remove_collectionChanged:function(a){Sys.Observer._removeEventHandler(this,\"collectionChanged\",a)},add:function(a){Sys.Observer.add(this,a)},addRange:function(a){Sys.Observer.addRange(this,a)},clear:function(){Sys.Observer.clear(this)},insert:function(a,b){Sys.Observer.insert(this,a,b)},remove:function(a){return Sys.Observer.remove(this,a)},removeAt:function(a){Sys.Observer.removeAt(this,a)},raiseCollectionChanged:function(a){Sys.Observer.raiseEvent(this,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))}};Sys.Observer._getContext=function(b,c){var a=b._observerContext;if(a)return a();if(c)return (b._observerContext=Sys.Observer._createContext())();return null};Sys.Observer._createContext=function(){var a={events:new Sys.EventHandlerList};return function(){return a}};Date._appendPreOrPostMatch=function(e,b){var d=0,a=false;for(var c=0,g=e.length;c<g;c++){var f=e.charAt(c);switch(f){case \"'\":if(a)b.append(\"'\");else d++;a=false;break;case \"\\\\\":if(a)b.append(\"\\\\\");a=!a;break;default:b.append(f);a=false}}return d};Date._expandFormat=function(a,b){if(!b)b=\"F\";var c=b.length;if(c===1)switch(b){case \"d\":return a.ShortDatePattern;case \"D\":return a.LongDatePattern;case \"t\":return a.ShortTimePattern;case \"T\":return a.LongTimePattern;case \"f\":return a.LongDatePattern+\" \"+a.ShortTimePattern;case \"F\":return a.FullDateTimePattern;case \"M\":case \"m\":return a.MonthDayPattern;case \"s\":return a.SortableDateTimePattern;case \"Y\":case \"y\":return a.YearMonthPattern;default:throw Error.format(Sys.Res.formatInvalidString)}else if(c===2&&b.charAt(0)===\"%\")b=b.charAt(1);return b};Date._expandYear=function(c,a){var d=new Date,e=Date._getEra(d);if(a<100){var b=Date._getEraYear(d,c,e);a+=b-b%100;if(a>c.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a<f;a+=4){b=c[a+2];if(b===null||d>=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g,\"\\\\\\\\$1\");var a=new Sys.StringBuilder(\"^\"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case \"dddd\":case \"ddd\":case \"MMMM\":case \"MMM\":case \"gg\":case \"g\":a.append(\"(\\\\D+)\");break;case \"tt\":case \"t\":a.append(\"(\\\\D*)\");break;case \"yyyy\":a.append(\"(\\\\d{4})\");break;case \"fff\":a.append(\"(\\\\d{3})\");break;case \"ff\":a.append(\"(\\\\d{2})\");break;case \"f\":a.append(\"(\\\\d)\");break;case \"dd\":case \"d\":case \"MM\":case \"M\":case \"yy\":case \"y\":case \"HH\":case \"H\":case \"hh\":case \"h\":case \"mm\":case \"m\":case \"ss\":case \"s\":a.append(\"(\\\\d\\\\d?)\");break;case \"zzz\":a.append(\"([+-]?\\\\d\\\\d?:\\\\d{2})\");break;case \"zz\":case \"z\":a.append(\"([+-]?\\\\d\\\\d?)\");break;case \"/\":a.append(\"(\\\\\"+b.DateSeparator+\")\")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append(\"$\");var k=a.toString().replace(/\\s+/g,\"\\\\s+\"),g={\"regExp\":k,\"groups\":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a<c;a++){f=i[a];if(f){g=true;b=Date._parseExact(h,f,d);if(b)return b}}if(!g){e=d._getDateTimeFormats();for(a=0,c=e.length;a<c;a++){b=Date._parseExact(h,e[a],d);if(b)return b}}return null};Date._parseExact=function(w,D,k){w=w.trim();var g=k.dateTimeFormat,A=Date._getParseRegExp(g,D),C=(new RegExp(A.regExp)).exec(w);if(C===null)return null;var B=A.groups,x=null,e=null,c=null,j=null,i=null,d=0,h,p=0,q=0,f=0,l=null,v=false;for(var s=0,E=B.length;s<E;s++){var a=C[s+1];if(a)switch(B[s]){case \"dd\":case \"d\":j=parseInt(a,10);if(j<1||j>31)return null;break;case \"MMMM\":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case \"MMM\":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case \"M\":case \"MM\":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case \"y\":case \"yy\":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case \"yyyy\":e=parseInt(a,10);if(e<0||e>9999)return null;break;case \"h\":case \"hh\":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case \"H\":case \"HH\":d=parseInt(a,10);if(d<0||d>23)return null;break;case \"m\":case \"mm\":p=parseInt(a,10);if(p<0||p>59)return null;break;case \"s\":case \"ss\":q=parseInt(a,10);if(q<0||q>59)return null;break;case \"tt\":case \"t\":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case \"f\":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case \"ff\":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case \"fff\":f=parseInt(a,10);if(f<0||f>999)return null;break;case \"dddd\":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case \"ddd\":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case \"zzz\":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var m=parseInt(u[1],10);if(m<0||m>59)return null;l=h*60+(a.startsWith(\"-\")?-m:m);break;case \"z\":case \"zz\":h=parseInt(a,10);if(h<-12||h>13)return null;l=h*60;break;case \"g\":case \"gg\":var o=a;if(!o||!g.eras)return null;o=o.toLowerCase().trim();for(var r=0,F=g.eras.length;r<F;r+=4)if(o===g.eras[r+1].toLowerCase()){x=r;break}if(x===null)return null}}var b=new Date,t,n=g.Calendar.convert;if(n)t=n.fromGregorian(b)[0];else t=b.getFullYear();if(e===null)e=t;else if(g.eras)e+=g.eras[(x||0)+3];if(c===null)c=0;if(j===null)j=1;if(n){b=n.toGregorian(e,c,j);if(b===null)return null}else{b.setFullYear(e,c,j);if(b.getDate()!==j)return null;if(i!==null&&b.getDay()!==i)return null}if(v&&d<12)d+=12;b.setHours(d,p,q,f);if(l!==null){var y=b.getMinutes()-(l+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(y/60,10),y%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,j){var b=j.dateTimeFormat,n=b.Calendar.convert;if(!e||!e.length||e===\"i\")if(j&&j.name.length)if(n)return this._toFormattedString(b.FullDateTimePattern,j);else{var r=new Date(this.getTime()),x=Date._getEra(this,b.eras);r.setFullYear(Date._getEraYear(this,b,x));return r.toLocaleString()}else return this.toString();var l=b.eras,k=e===\"s\";e=Date._expandFormat(b,e);var a=new Sys.StringBuilder,c;function d(a){if(a<10)return \"0\"+a;return a.toString()}function m(a){if(a<10)return \"00\"+a;if(a<100)return \"0\"+a;return a.toString()}function v(a){if(a<10)return \"000\"+a;else if(a<100)return \"00\"+a;else if(a<1000)return \"0\"+a;return a.toString()}var h,p,t=/([^d]|^)(d|dd)([^d]|$)/g;function s(){if(h||p)return h;h=t.test(e);p=true;return h}var q=0,o=Date._getTokenRegExp(),f;if(!k&&n)f=n.fromGregorian(this);for(;true;){var w=o.lastIndex,i=o.exec(e),u=e.slice(w,i?i.index:e.length);q+=Date._appendPreOrPostMatch(u,a);if(!i)break;if(q%2===1){a.append(i[0]);continue}function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear();case 1:return a.getMonth();case 2:return a.getDate()}}switch(i[0]){case \"dddd\":a.append(b.DayNames[this.getDay()]);break;case \"ddd\":a.append(b.AbbreviatedDayNames[this.getDay()]);break;case \"dd\":h=true;a.append(d(g(this,2)));break;case \"d\":h=true;a.append(g(this,2));break;case \"MMMM\":a.append(b.MonthGenitiveNames&&s()?b.MonthGenitiveNames[g(this,1)]:b.MonthNames[g(this,1)]);break;case \"MMM\":a.append(b.AbbreviatedMonthGenitiveNames&&s()?b.AbbreviatedMonthGenitiveNames[g(this,1)]:b.AbbreviatedMonthNames[g(this,1)]);break;case \"MM\":a.append(d(g(this,1)+1));break;case \"M\":a.append(g(this,1)+1);break;case \"yyyy\":a.append(v(f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k)));break;case \"yy\":a.append(d((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100));break;case \"y\":a.append((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100);break;case \"hh\":c=this.getHours()%12;if(c===0)c=12;a.append(d(c));break;case \"h\":c=this.getHours()%12;if(c===0)c=12;a.append(c);break;case \"HH\":a.append(d(this.getHours()));break;case \"H\":a.append(this.getHours());break;case \"mm\":a.append(d(this.getMinutes()));break;case \"m\":a.append(this.getMinutes());break;case \"ss\":a.append(d(this.getSeconds()));break;case \"s\":a.append(this.getSeconds());break;case \"tt\":a.append(this.getHours()<12?b.AMDesignator:b.PMDesignator);break;case \"t\":a.append((this.getHours()<12?b.AMDesignator:b.PMDesignator).charAt(0));break;case \"f\":a.append(m(this.getMilliseconds()).charAt(0));break;case \"ff\":a.append(m(this.getMilliseconds()).substr(0,2));break;case \"fff\":a.append(m(this.getMilliseconds()));break;case \"z\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+Math.floor(Math.abs(c)));break;case \"zz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c))));break;case \"zzz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c)))+\":\"+d(Math.abs(this.getTimezoneOffset()%60)));break;case \"g\":case \"gg\":if(b.eras)a.append(b.eras[Date._getEra(this,l)+1]);break;case \"/\":a.append(b.DateSeparator)}}return a.toString()};String.localeFormat=function(){return String._toFormattedString(true,arguments)};Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===\"\"&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h===\"\")h=\"+\";var j,d,f=e.indexOf(\"e\");if(f<0)f=e.indexOf(\"E\");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join(\"\");var n=a.NumberGroupSeparator.replace(/\\u00A0/g,\" \");if(a.NumberGroupSeparator!==n)c=c.split(n).join(\"\");var l=h+c;if(k!==null)l+=\".\"+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]===\"\")i[0]=\"+\";l+=\"e\"+i[0]+i[1]}if(l.match(/^[+-]?\\d*\\.?\\d*(e[+-]?\\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=\" \"+b;c=\" \"+c;case 3:if(a.endsWith(b))return [\"-\",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return [\"+\",a.substr(0,a.length-c.length)];break;case 2:b+=\" \";c+=\" \";case 1:if(a.startsWith(b))return [\"-\",a.substr(b.length)];else if(a.startsWith(c))return [\"+\",a.substr(c.length)];break;case 0:if(a.startsWith(\"(\")&&a.endsWith(\")\"))return [\"-\",a.substr(1,a.length-2)]}return [\"\",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(e,j){if(!e||e.length===0||e===\"i\")if(j&&j.name.length>0)return this.toLocaleString();else return this.toString();var o=[\"n %\",\"n%\",\"%n\"],n=[\"-n %\",\"-n%\",\"-%n\"],p=[\"(n)\",\"-n\",\"- n\",\"n-\",\"n -\"],m=[\"$n\",\"n$\",\"$ n\",\"n $\"],l=[\"($n)\",\"-$n\",\"$-n\",\"$n-\",\"(n$)\",\"-n$\",\"n-$\",\"n$-\",\"-n $\",\"-$ n\",\"n $-\",\"$ n-\",\"$ -n\",\"n- $\",\"($ n)\",\"(n $)\"];function g(a,c,d){for(var b=a.length;b<c;b++)a=d?\"0\"+a:a+\"0\";return a}function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/o;if(!isFinite(m))m=j;j=m;var b=j.toString(),a=\"\",c,e=b.split(/e/i);b=e[0];c=e.length>1?parseInt(e[1]):0;e=b.split(\".\");b=e[0];a=e.length>1?e[1]:\"\";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a=\"\";var d=b.length-1,f=\"\";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k<l.length){h=l[k];k++}}return b.slice(0,d+1)+n+f+a}var a=j.numberFormat,d=Math.abs(this);if(!e)e=\"D\";var b=-1;if(e.length>1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case \"d\":case \"D\":c=\"n\";if(b!==-1)d=g(\"\"+d,b,true);if(this<0)d=-d;break;case \"c\":case \"C\":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case \"n\":case \"N\":if(this<0)c=p[a.NumberNegativePattern];else c=\"n\";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case \"p\":case \"P\":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\\$|-|%/g,f=\"\";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case \"n\":f+=d;break;case \"$\":f+=a.CurrencySymbol;break;case \"-\":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case \"%\":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a<d;a++)b[a]=this._toUpper(c[a]);return b},_toUpper:function(a){return a.split(\"\\u00a0\").join(\" \").toUpperCase()}};Sys.CultureInfo.registerClass(\"Sys.CultureInfo\");Sys.CultureInfo._parse=function(a){var b=a.dateTimeFormat;if(b&&!b.eras)b.eras=a.eras;return new Sys.CultureInfo(a.name,a.numberFormat,b)};Sys.CultureInfo.InvariantCulture=Sys.CultureInfo._parse({\"name\":\"\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":true,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"\\u00a4\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":true},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, dd MMMM yyyy HH:mm:ss\",\"LongDatePattern\":\"dddd, dd MMMM yyyy\",\"LongTimePattern\":\"HH:mm:ss\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"MM/dd/yyyy\",\"ShortTimePattern\":\"HH:mm\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"yyyy MMMM\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":true,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});if(typeof __cultureInfo===\"object\"){Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse(__cultureInfo);delete __cultureInfo}else Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse({\"name\":\"en-US\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":false,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"$\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":false},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, MMMM dd, yyyy h:mm:ss tt\",\"LongDatePattern\":\"dddd, MMMM dd, yyyy\",\"LongTimePattern\":\"h:mm:ss tt\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"M/d/yyyy\",\"ShortTimePattern\":\"h:mm tt\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"MMMM, yyyy\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":false,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});Type.registerNamespace(\"Sys.Serialization\");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass(\"Sys.Serialization.JavaScriptSerializer\");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\\\\\])\\\\\"\\\\\\\\/Date\\\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\\\+|-)[0-9]{4})?\\\\)\\\\\\\\/\\\\\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"i\");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"g\");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp(\"[^,:{}\\\\[\\\\]0-9.\\\\-+Eaeflnr-u \\\\n\\\\r\\\\t]\",\"g\");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('\"(\\\\\\\\.|[^\"\\\\\\\\])*\"',\"g\");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName=\"__type\";Sys.Serialization.JavaScriptSerializer._init=function(){var c=[\"\\\\u0000\",\"\\\\u0001\",\"\\\\u0002\",\"\\\\u0003\",\"\\\\u0004\",\"\\\\u0005\",\"\\\\u0006\",\"\\\\u0007\",\"\\\\b\",\"\\\\t\",\"\\\\n\",\"\\\\u000b\",\"\\\\f\",\"\\\\r\",\"\\\\u000e\",\"\\\\u000f\",\"\\\\u0010\",\"\\\\u0011\",\"\\\\u0012\",\"\\\\u0013\",\"\\\\u0014\",\"\\\\u0015\",\"\\\\u0016\",\"\\\\u0017\",\"\\\\u0018\",\"\\\\u0019\",\"\\\\u001a\",\"\\\\u001b\",\"\\\\u001c\",\"\\\\u001d\",\"\\\\u001e\",\"\\\\u001f\"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]=\"\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[\"\\\\\"]=new RegExp(\"\\\\\\\\\",\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[\"\\\\\"]=\"\\\\\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='\"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\"']=new RegExp('\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars['\"']='\\\\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('\"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('\"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case \"object\":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append(\"[\");for(c=0;c<b.length;++c){if(c>0)a.append(\",\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append(\"]\")}else{if(Date.isInstanceOfType(b)){a.append('\"\\\\/Date(');a.append(b.getTime());a.append(')\\\\/\"');break}var d=[],f=0;for(var e in b){if(e.startsWith(\"$\"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append(\"{\");var j=false;for(c=0;c<f;c++){var h=b[d[c]];if(typeof h!==\"undefined\"&&typeof h!==\"function\"){if(j)a.append(\",\");else j=true;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(d[c],a,i,g);a.append(\":\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(h,a,i,g)}}a.append(\"}\")}else a.append(\"null\");break;case \"number\":Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);break;case \"string\":Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);break;case \"boolean\":Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);break;default:a.append(\"null\")}};Sys.Serialization.JavaScriptSerializer.serialize=function(b){var a=new Sys.StringBuilder;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b,a,false);return a.toString()};Sys.Serialization.JavaScriptSerializer.deserialize=function(data,secure){if(data.length===0)throw Error.argument(\"data\",Sys.Res.cannotDeserializeEmptyString);try{var exp=data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx,\"$1new Date($2)\");if(secure&&Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx,\"\")))throw null;return eval(\"(\"+exp+\")\")}catch(a){throw Error.argument(\"data\",Sys.Res.cannotDeserializeInvalidJson)}};Type.registerNamespace(\"Sys.UI\");Sys.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={_addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},addHandler:function(b,a){this._addHandler(b,a)},_removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},removeHandler:function(b,a){this._removeHandler(b,a)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b<e;b++)a[b](c,d)}},_getEvent:function(a,b){if(!this._list[a]){if(!b)return null;this._list[a]=[]}return this._list[a]}};Sys.EventHandlerList.registerClass(\"Sys.EventHandlerList\");Sys.CommandEventArgs=function(c,a,b){Sys.CommandEventArgs.initializeBase(this);this._commandName=c;this._commandArgument=a;this._commandSource=b};Sys.CommandEventArgs.prototype={_commandName:null,_commandArgument:null,_commandSource:null,get_commandName:function(){return this._commandName},get_commandArgument:function(){return this._commandArgument},get_commandSource:function(){return this._commandSource}};Sys.CommandEventArgs.registerClass(\"Sys.CommandEventArgs\",Sys.CancelEventArgs);Sys.INotifyPropertyChange=function(){};Sys.INotifyPropertyChange.prototype={};Sys.INotifyPropertyChange.registerInterface(\"Sys.INotifyPropertyChange\");Sys.PropertyChangedEventArgs=function(a){Sys.PropertyChangedEventArgs.initializeBase(this);this._propertyName=a};Sys.PropertyChangedEventArgs.prototype={get_propertyName:function(){return this._propertyName}};Sys.PropertyChangedEventArgs.registerClass(\"Sys.PropertyChangedEventArgs\",Sys.EventArgs);Sys.INotifyDisposing=function(){};Sys.INotifyDisposing.prototype={};Sys.INotifyDisposing.registerInterface(\"Sys.INotifyDisposing\");Sys.Component=function(){if(Sys.Application)Sys.Application.registerDisposableObject(this)};Sys.Component.prototype={_id:null,_initialized:false,_updating:false,get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_id:function(){return this._id},set_id:function(a){this._id=a},get_isInitialized:function(){return this._initialized},get_isUpdating:function(){return this._updating},add_disposing:function(a){this.get_events().addHandler(\"disposing\",a)},remove_disposing:function(a){this.get_events().removeHandler(\"disposing\",a)},add_propertyChanged:function(a){this.get_events().addHandler(\"propertyChanged\",a)},remove_propertyChanged:function(a){this.get_events().removeHandler(\"propertyChanged\",a)},beginUpdate:function(){this._updating=true},dispose:function(){if(this._events){var a=this._events.getHandler(\"disposing\");if(a)a(this,Sys.EventArgs.Empty)}delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},endUpdate:function(){this._updating=false;if(!this._initialized)this.initialize();this.updated()},initialize:function(){this._initialized=true},raisePropertyChanged:function(b){if(!this._events)return;var a=this._events.getHandler(\"propertyChanged\");if(a)a(this,new Sys.PropertyChangedEventArgs(b))},updated:function(){}};Sys.Component.registerClass(\"Sys.Component\",null,Sys.IDisposable,Sys.INotifyPropertyChange,Sys.INotifyDisposing);function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j===Object||j===Sys.UI.DomElement,h=Sys.Component.isInstanceOfType(a)&&!a.get_isUpdating();if(h)a.beginUpdate();for(var c in i){var b=i[c],f=e?null:a[\"get_\"+c];if(e||typeof f!==\"function\"){var k=a[c];if(!b||typeof b!==\"object\"||e&&!k)a[c]=b;else Sys$Component$_setProperties(k,b)}else{var l=a[\"set_\"+c];if(typeof l===\"function\")l.apply(a,[b]);else if(b instanceof Array){d=f.apply(a);for(var g=0,m=d.length,n=b.length;g<n;g++,m++)d[m]=b[g]}else if(typeof b===\"object\"&&Object.getType(b)===Object){d=f.apply(a);Sys$Component$_setProperties(d,b)}}}if(h)a.endUpdate()}function Sys$Component$_setReferences(c,b){for(var a in b){var e=c[\"set_\"+a],d=$find(b[a]);e.apply(c,[d])}}var $create=Sys.Component.create=function(h,f,d,c,g){var a=g?new h(g):new h,b=Sys.Application,i=b.get_isCreatingComponents();a.beginUpdate();if(f)Sys$Component$_setProperties(a,f);if(d)for(var e in d)a[\"add_\"+e](d[e]);if(a.get_id())b.addComponent(a);if(i){b._createdComponents[b._createdComponents.length]=a;if(c)b._addComponentToSecondPass(a,c);else a.endUpdate()}else{if(c)Sys$Component$_setReferences(a,c);a.endUpdate()}return a};Sys.UI.MouseButton=function(){throw Error.notImplemented()};Sys.UI.MouseButton.prototype={leftButton:0,middleButton:1,rightButton:2};Sys.UI.MouseButton.registerEnum(\"Sys.UI.MouseButton\");Sys.UI.Key=function(){throw Error.notImplemented()};Sys.UI.Key.prototype={backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127};Sys.UI.Key.registerEnum(\"Sys.UI.Key\");Sys.UI.Point=function(a,b){this.rawX=a;this.rawY=b;this.x=Math.round(a);this.y=Math.round(b)};Sys.UI.Point.registerClass(\"Sys.UI.Point\");Sys.UI.Bounds=function(c,d,b,a){this.x=c;this.y=d;this.height=a;this.width=b};Sys.UI.Bounds.registerClass(\"Sys.UI.Bounds\");Sys.UI.DomEvent=function(e){var a=e,b=this.type=a.type.toLowerCase();this.rawEvent=a;this.altKey=a.altKey;if(typeof a.button!==\"undefined\")this.button=typeof a.which!==\"undefined\"?a.button:a.button===4?Sys.UI.MouseButton.middleButton:a.button===2?Sys.UI.MouseButton.rightButton:Sys.UI.MouseButton.leftButton;if(b===\"keypress\")this.charCode=a.charCode||a.keyCode;else if(a.keyCode&&a.keyCode===46)this.keyCode=127;else this.keyCode=a.keyCode;this.clientX=a.clientX;this.clientY=a.clientY;this.ctrlKey=a.ctrlKey;this.target=a.target?a.target:a.srcElement;if(!b.startsWith(\"key\"))if(typeof a.offsetX!==\"undefined\"&&typeof a.offsetY!==\"undefined\"){this.offsetX=a.offsetX;this.offsetY=a.offsetY}else if(this.target&&this.target.nodeType!==3&&typeof a.clientX===\"number\"){var c=Sys.UI.DomElement.getLocation(this.target),d=Sys.UI.DomElement._getWindow(this.target);this.offsetX=(d.pageXOffset||0)+a.clientX-c.x;this.offsetY=(d.pageYOffset||0)+a.clientY-c.y}this.screenX=a.screenX;this.screenY=a.screenY;this.shiftKey=a.shiftKey};Sys.UI.DomEvent.prototype={preventDefault:function(){if(this.rawEvent.preventDefault)this.rawEvent.preventDefault();else if(window.event)this.rawEvent.returnValue=false},stopPropagation:function(){if(this.rawEvent.stopPropagation)this.rawEvent.stopPropagation();else if(window.event)this.rawEvent.cancelBubble=true}};Sys.UI.DomEvent.registerClass(\"Sys.UI.DomEvent\");var $addHandler=Sys.UI.DomEvent.addHandler=function(a,d,e,g){if(!a._events)a._events={};var c=a._events[d];if(!c)a._events[d]=c=[];var b;if(a.addEventListener){b=function(b){return e.call(a,new Sys.UI.DomEvent(b))};a.addEventListener(d,b,false)}else if(a.attachEvent){b=function(){var b={};try{b=Sys.UI.DomElement._getWindow(a).event}catch(c){}return e.call(a,new Sys.UI.DomEvent(b))};a.attachEvent(\"on\"+d,b)}c[c.length]={handler:e,browserHandler:b,autoRemove:g};if(g){var f=a.dispose;if(f!==Sys.UI.DomEvent._disposeHandlers){a.dispose=Sys.UI.DomEvent._disposeHandlers;if(typeof f!==\"undefined\")a._chainDispose=f}}},$addHandlers=Sys.UI.DomEvent.addHandlers=function(f,d,c,e){for(var b in d){var a=d[b];if(c)a=Function.createDelegate(c,a);$addHandler(f,b,a,e||false)}},$clearHandlers=Sys.UI.DomEvent.clearHandlers=function(a){Sys.UI.DomEvent._clearHandlers(a,false)};Sys.UI.DomEvent._clearHandlers=function(a,g){if(a._events){var e=a._events;for(var b in e){var d=e[b];for(var c=d.length-1;c>=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!==\"undefined\"){this.dispose=b;this._chainDispose=null;if(a===\"function\")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b<g;b++)if(c[b].handler===f){d=c[b].browserHandler;break}if(a.removeEventListener)a.removeEventListener(e,d,false);else if(a.detachEvent)a.detachEvent(\"on\"+e,d);c.splice(b,1)};Sys.UI.DomElement=function(){};Sys.UI.DomElement.registerClass(\"Sys.UI.DomElement\");Sys.UI.DomElement.addCssClass=function(a,b){if(!Sys.UI.DomElement.containsCssClass(a,b))if(a.className===\"\")a.className=b;else a.className+=\" \"+b};Sys.UI.DomElement.containsCssClass=function(b,a){return Array.contains(b.className.split(\" \"),a)};Sys.UI.DomElement.getBounds=function(a){var b=Sys.UI.DomElement.getLocation(a);return new Sys.UI.Bounds(b.x,b.y,a.offsetWidth||0,a.offsetHeight||0)};var $get=Sys.UI.DomElement.getElementById=function(f,e){if(!e)return document.getElementById(f);if(e.getElementById)return e.getElementById(f);var c=[],d=e.childNodes;for(var b=0;b<d.length;b++){var a=d[b];if(a.nodeType==1)c[c.length]=a}while(c.length){a=c.shift();if(a.id==f)return a;d=a.childNodes;for(b=0;b<d.length;b++){a=d[b];if(a.nodeType==1)c[c.length]=a}}return null};if(document.documentElement.getBoundingClientRect)Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9||a===document.documentElement||a.parentNode===a.ownerDocument.documentElement)return new Sys.UI.Point(0,0);var f=a.getBoundingClientRect();if(!f)return new Sys.UI.Point(0,0);var e=a.ownerDocument.documentElement,h=a.ownerDocument.body,l,c=Math.round(f.left)+(e.scrollLeft||h.scrollLeft),d=Math.round(f.top)+(e.scrollTop||h.scrollTop);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){try{var g=a.ownerDocument.parentWindow.frameElement||null;if(g){var i=g.frameBorder===\"0\"||g.frameBorder===\"no\"?2:0;c+=i;d+=i}}catch(m){}if(Sys.Browser.version===7&&!document.documentMode){var j=document.body,k=j.getBoundingClientRect(),b=(k.right-k.left)/j.clientWidth;b=Math.round(b*100);b=(b-b%5)/100;if(!isNaN(b)&&b!==1){c=Math.round(c/b);d=Math.round(d/b)}}if((document.documentMode||0)<8){c-=e.clientLeft;d-=e.clientTop}}return new Sys.UI.Point(c,d)};else if(Sys.Browser.agent===Sys.Browser.Safari)Sys.UI.DomElement.getLocation=function(c){if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);var d=0,e=0,a,j=null,g=null,b;for(a=c;a;j=a,(g=b,a=a.offsetParent)){b=Sys.UI.DomElement._getCurrentStyle(a);var f=a.tagName?a.tagName.toUpperCase():null;if((a.offsetLeft||a.offsetTop)&&(f!==\"BODY\"||(!g||g.position!==\"absolute\"))){d+=a.offsetLeft;e+=a.offsetTop}if(j&&Sys.Browser.version>=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!==\"BODY\"&&f!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i===\"absolute\")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c===\"BODY\"&&(!g||g.position!==\"absolute\"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!==\"TABLE\"&&c!==\"TD\"&&c!==\"HTML\"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c===\"TABLE\"&&(b.position===\"relative\"||b.position===\"absolute\")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!==\"BODY\"&&c!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=\" \"+d.className+\" \",b=a.indexOf(\" \"+c+\" \");if(b>=0)d.className=(a.substr(0,b)+\" \"+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a===\"string\")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position=\"absolute\";a.left=c+\"px\";a.top=d+\"px\"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!==\"hidden\"&&a.display!==\"none\"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?\"visible\":\"hidden\";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode===\"none\")switch(a.tagName.toUpperCase()){case \"DIV\":case \"P\":case \"ADDRESS\":case \"BLOCKQUOTE\":case \"BODY\":case \"COL\":case \"COLGROUP\":case \"DD\":case \"DL\":case \"DT\":case \"FIELDSET\":case \"FORM\":case \"H1\":case \"H2\":case \"H3\":case \"H4\":case \"H5\":case \"H6\":case \"HR\":case \"IFRAME\":case \"LEGEND\":case \"OL\":case \"PRE\":case \"TABLE\":case \"TD\":case \"TH\":case \"TR\":case \"UL\":a._oldDisplayMode=\"block\";break;case \"LI\":a._oldDisplayMode=\"list-item\";break;default:a._oldDisplayMode=\"inline\"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position=\"absolute\";a.style.display=\"block\";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display=\"none\"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface(\"Sys.IContainer\");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass(\"Sys.ApplicationLoadEventArgs\",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,\"unload\",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler(\"init\",a)},remove_init:function(a){this.get_events().removeHandler(\"init\",a)},add_load:function(a){this.get_events().addHandler(\"load\",a)},remove_load:function(a){this.get_events().removeHandler(\"load\",a)},add_unload:function(a){this.get_events().addHandler(\"unload\",a)},remove_unload:function(a){this.get_events().removeHandler(\"unload\",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler(\"unload\");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a<f;a++){var d=b[a];if(typeof d!==\"undefined\")d.dispose()}Array.clear(this._disposableObjects);Sys.UI.DomEvent.removeHandler(window,\"unload\",this._unloadHandlerDelegate);if(Sys._ScriptLoader){var e=Sys._ScriptLoader.getInstance();if(e)e.dispose()}Sys._Application.callBaseMethod(this,\"dispose\")}},disposeElement:function(c,j){if(c.nodeType===1){var b,h=c.getElementsByTagName(\"*\"),g=h.length,i=new Array(g);for(b=0;b<g;b++)i[b]=h[b];for(b=g-1;b>=0;b--){var d=i[b],f=d.dispose;if(f&&typeof f===\"function\")d.dispose();else{var e=d.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=d._behaviors;if(a)this._disposeComponents(a);a=d._components;if(a){this._disposeComponents(a);d._components=null}}if(!j){var f=c.dispose;if(f&&typeof f===\"function\")c.dispose();else{var e=c.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=c._behaviors;if(a)this._disposeComponents(a);a=c._components;if(a){this._disposeComponents(a);c._components=null}}}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a<d;a++){var c=b[a].component;Sys$Component$_setReferences(c,b[a].references);c.endUpdate()}this._secondPassComponents=[];this._creatingComponents=false},findComponent:function(b,a){return a?Sys.IContainer.isInstanceOfType(a)?a.findComponent(b):a[b]||null:Sys.Application._components[b]||null},getComponents:function(){var a=[],b=this._components;for(var c in b)a[a.length]=b[c];return a},initialize:function(){if(!this.get_isInitialized()&&!this._disposing){Sys._Application.callBaseMethod(this,\"initialize\");this._raiseInit();if(this.get_stateString){if(Sys.WebForms&&Sys.WebForms.PageRequestManager){this._beginRequestHandler=Function.createDelegate(this,this._onPageRequestManagerBeginRequest);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);this._endRequestHandler=Function.createDelegate(this,this._onPageRequestManagerEndRequest);Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler)}var a=this.get_stateString();if(a!==this._currentEntry)this._navigate(a);else this._ensureHistory()}this.raiseLoad()}},notifyScriptLoaded:function(){},registerDisposableObject:function(b){if(!this._disposing){var a=this._disposableObjects,c=a.length;a[c]=b;b.__msdisposeindex=c}},raiseLoad:function(){var b=this.get_events().getHandler(\"load\"),a=new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents),!!this._loaded);this._loaded=true;if(b)b(this,a);if(window.pageLoad)window.pageLoad(this,a);this._createdComponents=[]},removeComponent:function(b){var a=b.get_id();if(a)delete this._components[a]},unregisterDisposableObject:function(a){if(!this._disposing){var e=a.__msdisposeindex;if(typeof e===\"number\"){var b=this._disposableObjects;delete b[e];delete a.__msdisposeindex;if(++this._deleteCount>1000){var c=[];for(var d=0,f=b.length;d<f;d++){a=b[d];if(typeof a!==\"undefined\"){a.__msdisposeindex=c.length;c.push(a)}}this._disposableObjects=c;this._deleteCount=0}}}},_addComponentToSecondPass:function(b,a){this._secondPassComponents[this._secondPassComponents.length]={component:b,references:a}},_disposeComponents:function(a){if(a)for(var b=a.length-1;b>=0;b--){var c=a[b];if(typeof c.dispose===\"function\")c.dispose()}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,\"load\",c);b()};Sys.UI.DomEvent.addHandler(window,\"load\",c);if(document.addEventListener)try{document.addEventListener(\"DOMContentLoaded\",a=function(){document.removeEventListener(\"DOMContentLoaded\",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement(\"div\");a=function(){try{d.doScroll(\"left\")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent(\"onreadystatechange\",a=function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler(\"init\");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass(\"Sys._Application\",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,\"get_id\");if(a)return a;if(!this._element||!this._element.id)return \"\";return this._element.id+\"$\"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(\".\");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,\"initialize\");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,\"dispose\");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass(\"Sys.UI.Behavior\",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b<f;b++)if(e.isInstanceOfType(a[b]))c[c.length]=a[b];return c};Sys.UI.VisibilityMode=function(){throw Error.notImplemented()};Sys.UI.VisibilityMode.prototype={hide:0,collapse:1};Sys.UI.VisibilityMode.registerEnum(\"Sys.UI.VisibilityMode\");Sys.UI.Control=function(a){Sys.UI.Control.initializeBase(this);this._element=a;a.control=this;var b=this.get_role();if(b)a.setAttribute(\"role\",b)};Sys.UI.Control.prototype={_parent:null,_visibilityMode:Sys.UI.VisibilityMode.hide,get_element:function(){return this._element},get_id:function(){if(!this._element)return \"\";return this._element.id},set_id:function(){throw Error.invalidOperation(Sys.Res.cantSetId)},get_parent:function(){if(this._parent)return this._parent;if(!this._element)return null;var a=this._element.parentNode;while(a){if(a.control)return a.control;a=a.parentNode}return null},set_parent:function(a){this._parent=a},get_role:function(){return null},get_visibilityMode:function(){return Sys.UI.DomElement.getVisibilityMode(this._element)},set_visibilityMode:function(a){Sys.UI.DomElement.setVisibilityMode(this._element,a)},get_visible:function(){return Sys.UI.DomElement.getVisible(this._element)},set_visible:function(a){Sys.UI.DomElement.setVisible(this._element,a)},addCssClass:function(a){Sys.UI.DomElement.addCssClass(this._element,a)},dispose:function(){Sys.UI.Control.callBaseMethod(this,\"dispose\");if(this._element){this._element.control=null;delete this._element}if(this._parent)delete this._parent},onBubbleEvent:function(){return false},raiseBubbleEvent:function(a,b){this._raiseBubbleEvent(a,b)},_raiseBubbleEvent:function(b,c){var a=this.get_parent();while(a){if(a.onBubbleEvent(b,c))return;a=a.get_parent()}},removeCssClass:function(a){Sys.UI.DomElement.removeCssClass(this._element,a)},toggleCssClass:function(a){Sys.UI.DomElement.toggleCssClass(this._element,a)}};Sys.UI.Control.registerClass(\"Sys.UI.Control\",Sys.Component);Sys.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass(\"Sys.HistoryEventArgs\",Sys.EventArgs);Sys.Application._appLoadHandler=null;Sys.Application._beginRequestHandler=null;Sys.Application._clientId=null;Sys.Application._currentEntry=\"\";Sys.Application._endRequestHandler=null;Sys.Application._history=null;Sys.Application._enableHistory=false;Sys.Application._historyFrame=null;Sys.Application._historyInitialized=false;Sys.Application._historyPointIsNew=false;Sys.Application._ignoreTimer=false;Sys.Application._initialState=null;Sys.Application._state={};Sys.Application._timerCookie=0;Sys.Application._timerHandler=null;Sys.Application._uniqueId=null;Sys._Application.prototype.get_stateString=function(){var a=null;if(Sys.Browser.agent===Sys.Browser.Firefox){var c=window.location.href,b=c.indexOf(\"#\");if(b!==-1)a=c.substring(b+1);else a=\"\";return a}else a=window.location.hash;if(a.length>0&&a.charAt(0)===\"#\")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler(\"navigate\",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler(\"navigate\",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!==\"undefined\")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||\"\";var b=a.indexOf(\"&&\");if(b!==-1&&b+2<a.length){e.__s=a.substr(b+2);a=a.substr(0,b)}var g=a.split(\"&\");for(var f=0,j=g.length;f<j;f++){var d=g[f],c=d.indexOf(\"=\");if(c!==-1&&c+1<d.length){var i=d.substr(0,c),h=d.substr(c+1);e[i]=decodeURIComponent(h)}}return e};Sys._Application.prototype._enableHistoryInScriptManager=function(){this._enableHistory=true};Sys._Application.prototype._ensureHistory=function(){if(!this._historyInitialized&&this._enableHistory){if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&document.documentMode<8){this._historyFrame=document.getElementById(\"__historyFrame\");this._ignoreIFrame=true}this._timerHandler=Function.createDelegate(this,this._onIdle);this._timerCookie=window.setTimeout(this._timerHandler,100);try{this._initialState=this._deserializeState(this.get_stateString())}catch(a){}this._historyInitialized=true}};Sys._Application.prototype._navigate=function(c){this._ensureHistory();var b=this._deserializeState(c);if(this._uniqueId){var d=this._state.__s||\"\",a=b.__s||\"\";if(a!==d){this._updateHiddenField(a);__doPostBack(this._uniqueId,a);this._state=b;return}}this._setState(c);this._state=b;this._raiseNavigate()};Sys._Application.prototype._onIdle=function(){delete this._timerCookie;var a=this.get_stateString();if(a!==this._currentEntry){if(!this._ignoreTimer){this._historyPointIsNew=false;this._navigate(a)}}else this._ignoreTimer=false;this._timerCookie=window.setTimeout(this._timerHandler,100)};Sys._Application.prototype._onIFrameLoad=function(a){if(document.documentMode<8){this._ensureHistory();if(!this._ignoreIFrame){this._historyPointIsNew=false;this._navigate(a)}this._ignoreIFrame=false}};Sys._Application.prototype._onPageRequestManagerBeginRequest=function(){this._ignoreTimer=true;this._originalTitle=document.title};Sys._Application.prototype._onPageRequestManagerEndRequest=function(g,f){var d=f.get_dataItems()[this._clientId],c=this._originalTitle;this._originalTitle=null;var b=document.getElementById(\"__EVENTTARGET\");if(b&&b.value===this._uniqueId)b.value=\"\";if(typeof d!==\"undefined\"){this.setServerState(d);this._historyPointIsNew=true}else this._ignoreTimer=false;var a=this._serializeState(this._state);if(a!==this._currentEntry){this._ignoreTimer=true;if(typeof c===\"string\"){if(Sys.Browser.agent!==Sys.Browser.InternetExplorer||Sys.Browser.version>7){var e=document.title;document.title=c;this._setState(a);document.title=e}else this._setState(a);this._raiseNavigate()}else{this._setState(a);this._raiseNavigate()}}};Sys._Application.prototype._raiseNavigate=function(){var d=this._historyPointIsNew,c=this.get_events().getHandler(\"navigate\"),b={};for(var a in this._state)if(a!==\"__s\")b[a]=this._state[a];var e=new Sys.HistoryEventArgs(b);if(c)c(this,e);if(!d){var f;try{if(Sys.Browser.agent===Sys.Browser.Firefox&&window.location.hash&&(!window.frameElement||window.top.location.hash))Sys.Browser.version<3.5?window.history.go(0):(location.hash=this.get_stateString())}catch(g){}}};Sys._Application.prototype._serializeState=function(d){var b=[];for(var a in d){var e=d[a];if(a===\"__s\")var c=e;else b[b.length]=a+\"=\"+encodeURIComponent(e)}return b.join(\"&\")+(c?\"&&\"+c:\"\")};Sys._Application.prototype._setState=function(a,b){if(this._enableHistory){a=a||\"\";if(a!==this._currentEntry){if(window.theForm){var d=window.theForm.action,e=d.indexOf(\"#\");window.theForm.action=(e!==-1?d.substring(0,e):d)+\"#\"+a}if(this._historyFrame&&this._historyPointIsNew){var f=document.createElement(\"div\");f.appendChild(document.createTextNode(b||document.title));var g=f.innerHTML;this._ignoreIFrame=true;var c=this._historyFrame.contentWindow.document;c.open(\"javascript:'<html></html>'\");c.write(\"<html><head><title>\"+g+\"</title><scri\"+'pt type=\"text/javascript\">parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+\");</scri\"+\"pt></head><body></body></html>\");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var h=this.get_stateString();if(a!==h){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!==\"undefined\"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=[\"Msxml2.XMLHTTP.3.0\",\"Msxml2.XMLHTTP\"];for(var a=0,c=b.length;a<c;a++)try{return new ActiveXObject(b[a])}catch(d){}return null};Type.registerNamespace(\"Sys.Net\");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass(\"Sys.Net.WebRequestExecutor\");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=[\"Msxml2.DOMDocument.3.0\",\"Msxml2.DOMDocument\"];for(var b=0,f=c.length;b<f;b++)try{var a=new ActiveXObject(c[b]);a.async=false;a.loadXML(d);a.setProperty(\"SelectionLanguage\",\"XPath\");return a}catch(g){}}else try{var e=new window.DOMParser;return e.parseFromString(d,\"text/xml\")}catch(g){}return null};Sys.Net.XMLHttpExecutor=function(){Sys.Net.XMLHttpExecutor.initializeBase(this);var a=this;this._xmlHttpRequest=null;this._webRequest=null;this._responseAvailable=false;this._timedOut=false;this._timer=null;this._aborted=false;this._started=false;this._onReadyStateChange=function(){if(a._xmlHttpRequest.readyState===4){try{if(typeof a._xmlHttpRequest.status===\"undefined\")return}catch(b){return}a._clearTimer();a._responseAvailable=true;try{a._webRequest.completed(Sys.EventArgs.Empty)}finally{if(a._xmlHttpRequest!=null){a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest=null}}}};this._clearTimer=function(){if(a._timer!=null){window.clearTimeout(a._timer);a._timer=null}};this._onTimeout=function(){if(!a._responseAvailable){a._clearTimer();a._timedOut=true;a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest.abort();a._webRequest.completed(Sys.EventArgs.Empty);a._xmlHttpRequest=null}}};Sys.Net.XMLHttpExecutor.prototype={get_timedOut:function(){return this._timedOut},get_started:function(){return this._started},get_responseAvailable:function(){return this._responseAvailable},get_aborted:function(){return this._aborted},executeRequest:function(){this._webRequest=this.get_webRequest();var c=this._webRequest.get_body(),a=this._webRequest.get_headers();this._xmlHttpRequest=new XMLHttpRequest;this._xmlHttpRequest.onreadystatechange=this._onReadyStateChange;var e=this._webRequest.get_httpVerb();this._xmlHttpRequest.open(e,this._webRequest.getResolvedUrl(),true);this._xmlHttpRequest.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");if(a)for(var b in a){var f=a[b];if(typeof f!==\"function\")this._xmlHttpRequest.setRequestHeader(b,f)}if(e.toLowerCase()===\"post\"){if(a===null||!a[\"Content-Type\"])this._xmlHttpRequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=utf-8\");if(!c)c=\"\"}var d=this._webRequest.get_timeout();if(d>0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a=\"\";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf(\"MSIE\")!==-1&&typeof a.setProperty!=\"undefined\")a.setProperty(\"SelectionLanguage\",\"XPath\");if(a.documentElement.namespaceURI===\"http://www.mozilla.org/newlayout/xml/parsererror.xml\"&&a.documentElement.tagName===\"parsererror\")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName===\"parsererror\")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass(\"Sys.Net.XMLHttpExecutor\",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType=\"Sys.Net.XMLHttpExecutor\"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler(\"invokingRequest\",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler(\"invokingRequest\",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler(\"completedRequest\",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler(\"completedRequest\",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler(\"invokingRequest\");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass(\"Sys.Net._WebRequestManager\");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass(\"Sys.Net.NetworkRequestEventArgs\",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url=\"\";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler(\"completed\",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler(\"completed\",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler(\"completedRequest\");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler(\"completed\");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return \"GET\";return \"POST\"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf(\"://\")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName(\"base\")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf(\"?\");if(c!==-1)a=a.substr(0,c);c=a.indexOf(\"#\");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf(\"/\")+1);if(!b||b.length===0)return a;if(b.charAt(0)===\"/\"){var e=a.indexOf(\"://\"),g=a.indexOf(\"/\",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf(\"/\");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e===\"function\")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append(\"&\");a.append(d);a.append(\"=\");a.append(b(g))}if(f){if(h)a.append(\"&\");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf(\"?\")>=0?\"&\":\"?\")+d:a};Sys.Net.WebRequest.registerClass(\"Sys.Net.WebRequest\");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){if(this._ensureReadyStateLoaded())this._executeInternal()},_executeInternal:function(){this._addScriptElementHandlers();document.getElementsByTagName(\"head\")[0].appendChild(this._scriptElement)},_ensureReadyStateLoaded:function(){if(this._useReadyState()&&this._scriptElement.readyState!==\"loaded\"&&this._scriptElement.readyState!==\"complete\"){this._scriptDownloadDelegate=Function.createDelegate(this,this._executeInternal);$addHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);return false}return true},_addScriptElementHandlers:function(){if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(this._useReadyState())$addHandler(this._scriptElement,\"readystatechange\",this._scriptLoadDelegate);else $addHandler(this._scriptElement,\"load\",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener(\"error\",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}if(this._useReadyState()&&this._scriptLoadDelegate)$removeHandler(a,\"readystatechange\",this._scriptLoadDelegate);else $removeHandler(a,\"load\",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener(\"error\",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(this._useReadyState()&&a.readyState!==\"complete\")return;this._completedCallback(a,true)},_useReadyState:function(){return Sys.Browser.agent===Sys.Browser.InternetExplorer&&(Sys.Browser.version<9||(document.documentMode||0)<9)}};Sys._ScriptLoaderTask.registerClass(\"Sys._ScriptLoaderTask\",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug&&a.parentNode)a.parentNode.removeChild(a)};Type.registerNamespace(\"Sys.Net\");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange(\"value\",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext===\"undefined\"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||\"callback\"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a===\"undefined\")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass(\"Sys.Net.WebServiceProxy\");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||\"callback\";c=\"_jsonp\"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+\"/\"+encodeURIComponent(a):q,r,n?p+\"=Sys.\"+c:null);if(n){s=document.createElement(\"script\");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!==\"undefined\"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()[\"Content-Type\"]=\"application/json; charset=utf-8\";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o===\"{}\")o=\"\"}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader(\"Content-Type\");if(e.startsWith(\"application/json\"))c=d.get_object();else if(e.startsWith(\"text/xml\"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader(\"jsonerror\"),h=k===\"true\";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith(\"application/json\"))c=!c||typeof c.d===\"undefined\"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,\"\",\"\"),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\\s*([a-zA-Z0-9\\+\\-\\.]+\\:)\\/\\/([^?#\\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||\"\"},get_exceptionType:function(){return this._exceptionType||\"\"},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass(\"Sys.Net.WebServiceError\");"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxApplicationServices.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxApplicationServices.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxApplicationServices.js\nType._registerScript(\"MicrosoftAjaxApplicationServices.js\",[\"MicrosoftAjaxWebServices.js\"]);Type.registerNamespace(\"Sys.Services\");Sys.Services._ProfileService=function(){Sys.Services._ProfileService.initializeBase(this);this.properties={}};Sys.Services._ProfileService.DefaultWebServicePath=\"\";Sys.Services._ProfileService.prototype={_defaultLoadCompletedCallback:null,_defaultSaveCompletedCallback:null,_path:\"\",_timeout:0,get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_defaultSaveCompletedCallback:function(){return this._defaultSaveCompletedCallback},set_defaultSaveCompletedCallback:function(a){this._defaultSaveCompletedCallback=a},get_path:function(){return this._path||\"\"},load:function(c,d,e,f){var b,a;if(!c){a=\"GetAllPropertiesForCurrentUser\";b={authenticatedUserOnly:false}}else{a=\"GetPropertiesForCurrentUser\";b={properties:this._clonePropertyNames(c),authenticatedUserOnly:false}}this._invoke(this._get_path(),a,false,b,Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[d,e,f])},save:function(d,b,c,e){var a=this._flattenProperties(d,this.properties);this._invoke(this._get_path(),\"SetPropertiesForCurrentUser\",false,{values:a.value,authenticatedUserOnly:false},Function.createDelegate(this,this._onSaveComplete),Function.createDelegate(this,this._onSaveFailed),[b,c,e,a.count])},_clonePropertyNames:function(e){var c=[],d={};for(var b=0;b<e.length;b++){var a=e[b];if(!d[a]){Array.add(c,a);d[a]=true}}return c},_flattenProperties:function(a,i,j){var b={},e,d,g=0;if(a&&a.length===0)return {value:b,count:0};for(var c in i){e=i[c];d=j?j+\".\"+c:c;if(Sys.Services.ProfileGroup.isInstanceOfType(e)){var k=this._flattenProperties(a,e,d),h=k.value;g+=k.count;for(var f in h){var l=h[f];b[f]=l}}else if(!a||Array.indexOf(a,d)!==-1){b[d]=e;g++}}return {value:b,count:g}},_get_path:function(){var a=this.get_path();if(!a.length)a=Sys.Services._ProfileService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_onLoadComplete:function(a,e,g){if(typeof a!==\"object\")throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,g,\"Object\"));var c=this._unflattenProperties(a);for(var b in c)this.properties[b]=c[b];var d=e[0]||this.get_defaultLoadCompletedCallback()||this.get_defaultSucceededCallback();if(d){var f=e[2]||this.get_defaultUserContext();d(a.length,f,\"Sys.Services.ProfileService.load\")}},_onLoadFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,\"Sys.Services.ProfileService.load\")}},_onSaveComplete:function(a,b,f){var c=b[3];if(a!==null)if(a instanceof Array)c-=a.length;else if(typeof a===\"number\")c=a;else throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,\"Array\"));var d=b[0]||this.get_defaultSaveCompletedCallback()||this.get_defaultSucceededCallback();if(d){var e=b[2]||this.get_defaultUserContext();d(c,e,\"Sys.Services.ProfileService.save\")}},_onSaveFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,\"Sys.Services.ProfileService.save\")}},_unflattenProperties:function(e){var c={},d,f,h=0;for(var a in e){h++;f=e[a];d=a.indexOf(\".\");if(d!==-1){var g=a.substr(0,d);a=a.substr(d+1);var b=c[g];if(!b||!Sys.Services.ProfileGroup.isInstanceOfType(b)){b=new Sys.Services.ProfileGroup;c[g]=b}b[a]=f}else c[a]=f}e.length=h;return c}};Sys.Services._ProfileService.registerClass(\"Sys.Services._ProfileService\",Sys.Net.WebServiceProxy);Sys.Services.ProfileService=new Sys.Services._ProfileService;Sys.Services.ProfileGroup=function(a){if(a)for(var b in a)this[b]=a[b]};Sys.Services.ProfileGroup.registerClass(\"Sys.Services.ProfileGroup\");Sys.Services._AuthenticationService=function(){Sys.Services._AuthenticationService.initializeBase(this)};Sys.Services._AuthenticationService.DefaultWebServicePath=\"\";Sys.Services._AuthenticationService.prototype={_defaultLoginCompletedCallback:null,_defaultLogoutCompletedCallback:null,_path:\"\",_timeout:0,_authenticated:false,get_defaultLoginCompletedCallback:function(){return this._defaultLoginCompletedCallback},set_defaultLoginCompletedCallback:function(a){this._defaultLoginCompletedCallback=a},get_defaultLogoutCompletedCallback:function(){return this._defaultLogoutCompletedCallback},set_defaultLogoutCompletedCallback:function(a){this._defaultLogoutCompletedCallback=a},get_isLoggedIn:function(){return this._authenticated},get_path:function(){return this._path||\"\"},login:function(c,b,a,h,f,d,e,g){this._invoke(this._get_path(),\"Login\",false,{userName:c,password:b,createPersistentCookie:a},Function.createDelegate(this,this._onLoginComplete),Function.createDelegate(this,this._onLoginFailed),[c,b,a,h,f,d,e,g])},logout:function(c,a,b,d){this._invoke(this._get_path(),\"Logout\",false,{},Function.createDelegate(this,this._onLogoutComplete),Function.createDelegate(this,this._onLogoutFailed),[c,a,b,d])},_get_path:function(){var a=this.get_path();if(!a.length)a=Sys.Services._AuthenticationService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_onLoginComplete:function(e,c,f){if(typeof e!==\"boolean\")throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,\"Boolean\"));var b=c[4],d=c[7]||this.get_defaultUserContext(),a=c[5]||this.get_defaultLoginCompletedCallback()||this.get_defaultSucceededCallback();if(e){this._authenticated=true;if(a)a(true,d,\"Sys.Services.AuthenticationService.login\");if(typeof b!==\"undefined\"&&b!==null)window.location.href=b}else if(a)a(false,d,\"Sys.Services.AuthenticationService.login\")},_onLoginFailed:function(d,b){var a=b[6]||this.get_defaultFailedCallback();if(a){var c=b[7]||this.get_defaultUserContext();a(d,c,\"Sys.Services.AuthenticationService.login\")}},_onLogoutComplete:function(f,a,e){if(f!==null)throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,e,\"null\"));var b=a[0],d=a[3]||this.get_defaultUserContext(),c=a[1]||this.get_defaultLogoutCompletedCallback()||this.get_defaultSucceededCallback();this._authenticated=false;if(c)c(null,d,\"Sys.Services.AuthenticationService.logout\");if(!b)window.location.reload();else window.location.href=b},_onLogoutFailed:function(c,b){var a=b[2]||this.get_defaultFailedCallback();if(a)a(c,b[3],\"Sys.Services.AuthenticationService.logout\")},_setAuthenticated:function(a){this._authenticated=a}};Sys.Services._AuthenticationService.registerClass(\"Sys.Services._AuthenticationService\",Sys.Net.WebServiceProxy);Sys.Services.AuthenticationService=new Sys.Services._AuthenticationService;Sys.Services._RoleService=function(){Sys.Services._RoleService.initializeBase(this);this._roles=[]};Sys.Services._RoleService.DefaultWebServicePath=\"\";Sys.Services._RoleService.prototype={_defaultLoadCompletedCallback:null,_rolesIndex:null,_timeout:0,_path:\"\",get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_path:function(){return this._path||\"\"},get_roles:function(){return Array.clone(this._roles)},isUserInRole:function(a){var b=this._get_rolesIndex()[a.trim().toLowerCase()];return !!b},load:function(a,b,c){Sys.Net.WebServiceProxy.invoke(this._get_path(),\"GetRolesForCurrentUser\",false,{},Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[a,b,c],this.get_timeout())},_get_path:function(){var a=this.get_path();if(!a||!a.length)a=Sys.Services._RoleService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_get_rolesIndex:function(){if(!this._rolesIndex){var b={};for(var a=0;a<this._roles.length;a++)b[this._roles[a].toLowerCase()]=true;this._rolesIndex=b}return this._rolesIndex},_onLoadComplete:function(a,c,f){if(a&&!(a instanceof Array))throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,\"Array\"));this._roles=a;this._rolesIndex=null;var b=c[0]||this.get_defaultLoadCompletedCallback()||this.get_defaultSucceededCallback();if(b){var e=c[2]||this.get_defaultUserContext(),d=Array.clone(a);b(d,e,\"Sys.Services.RoleService.load\")}},_onLoadFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,\"Sys.Services.RoleService.load\")}}};Sys.Services._RoleService.registerClass(\"Sys.Services._RoleService\",Sys.Net.WebServiceProxy);Sys.Services.RoleService=new Sys.Services._RoleService;"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxComponentModel.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxComponentModel.js\nType._registerScript(\"MicrosoftAjaxComponentModel.js\",[\"MicrosoftAjaxCore.js\"]);Type.registerNamespace(\"Sys.UI\");Sys.CommandEventArgs=function(c,a,b){Sys.CommandEventArgs.initializeBase(this);this._commandName=c;this._commandArgument=a;this._commandSource=b};Sys.CommandEventArgs.prototype={_commandName:null,_commandArgument:null,_commandSource:null,get_commandName:function(){return this._commandName},get_commandArgument:function(){return this._commandArgument},get_commandSource:function(){return this._commandSource}};Sys.CommandEventArgs.registerClass(\"Sys.CommandEventArgs\",Sys.CancelEventArgs);Sys.INotifyDisposing=function(){};Sys.INotifyDisposing.prototype={};Sys.INotifyDisposing.registerInterface(\"Sys.INotifyDisposing\");Sys.Component=function(){if(Sys.Application)Sys.Application.registerDisposableObject(this)};Sys.Component.prototype={_id:null,_initialized:false,_updating:false,get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_id:function(){return this._id},set_id:function(a){this._id=a},get_isInitialized:function(){return this._initialized},get_isUpdating:function(){return this._updating},add_disposing:function(a){this.get_events().addHandler(\"disposing\",a)},remove_disposing:function(a){this.get_events().removeHandler(\"disposing\",a)},add_propertyChanged:function(a){this.get_events().addHandler(\"propertyChanged\",a)},remove_propertyChanged:function(a){this.get_events().removeHandler(\"propertyChanged\",a)},beginUpdate:function(){this._updating=true},dispose:function(){if(this._events){var a=this._events.getHandler(\"disposing\");if(a)a(this,Sys.EventArgs.Empty)}delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},endUpdate:function(){this._updating=false;if(!this._initialized)this.initialize();this.updated()},initialize:function(){this._initialized=true},raisePropertyChanged:function(b){if(!this._events)return;var a=this._events.getHandler(\"propertyChanged\");if(a)a(this,new Sys.PropertyChangedEventArgs(b))},updated:function(){}};Sys.Component.registerClass(\"Sys.Component\",null,Sys.IDisposable,Sys.INotifyPropertyChange,Sys.INotifyDisposing);function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j===Object||j===Sys.UI.DomElement,h=Sys.Component.isInstanceOfType(a)&&!a.get_isUpdating();if(h)a.beginUpdate();for(var c in i){var b=i[c],f=e?null:a[\"get_\"+c];if(e||typeof f!==\"function\"){var k=a[c];if(!b||typeof b!==\"object\"||e&&!k)a[c]=b;else Sys$Component$_setProperties(k,b)}else{var l=a[\"set_\"+c];if(typeof l===\"function\")l.apply(a,[b]);else if(b instanceof Array){d=f.apply(a);for(var g=0,m=d.length,n=b.length;g<n;g++,m++)d[m]=b[g]}else if(typeof b===\"object\"&&Object.getType(b)===Object){d=f.apply(a);Sys$Component$_setProperties(d,b)}}}if(h)a.endUpdate()}function Sys$Component$_setReferences(c,b){for(var a in b){var e=c[\"set_\"+a],d=$find(b[a]);e.apply(c,[d])}}var $create=Sys.Component.create=function(h,f,d,c,g){var a=g?new h(g):new h,b=Sys.Application,i=b.get_isCreatingComponents();a.beginUpdate();if(f)Sys$Component$_setProperties(a,f);if(d)for(var e in d)a[\"add_\"+e](d[e]);if(a.get_id())b.addComponent(a);if(i){b._createdComponents[b._createdComponents.length]=a;if(c)b._addComponentToSecondPass(a,c);else a.endUpdate()}else{if(c)Sys$Component$_setReferences(a,c);a.endUpdate()}return a};Sys.UI.MouseButton=function(){throw Error.notImplemented()};Sys.UI.MouseButton.prototype={leftButton:0,middleButton:1,rightButton:2};Sys.UI.MouseButton.registerEnum(\"Sys.UI.MouseButton\");Sys.UI.Key=function(){throw Error.notImplemented()};Sys.UI.Key.prototype={backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127};Sys.UI.Key.registerEnum(\"Sys.UI.Key\");Sys.UI.Point=function(a,b){this.rawX=a;this.rawY=b;this.x=Math.round(a);this.y=Math.round(b)};Sys.UI.Point.registerClass(\"Sys.UI.Point\");Sys.UI.Bounds=function(c,d,b,a){this.x=c;this.y=d;this.height=a;this.width=b};Sys.UI.Bounds.registerClass(\"Sys.UI.Bounds\");Sys.UI.DomEvent=function(e){var a=e,b=this.type=a.type.toLowerCase();this.rawEvent=a;this.altKey=a.altKey;if(typeof a.button!==\"undefined\")this.button=typeof a.which!==\"undefined\"?a.button:a.button===4?Sys.UI.MouseButton.middleButton:a.button===2?Sys.UI.MouseButton.rightButton:Sys.UI.MouseButton.leftButton;if(b===\"keypress\")this.charCode=a.charCode||a.keyCode;else if(a.keyCode&&a.keyCode===46)this.keyCode=127;else this.keyCode=a.keyCode;this.clientX=a.clientX;this.clientY=a.clientY;this.ctrlKey=a.ctrlKey;this.target=a.target?a.target:a.srcElement;if(!b.startsWith(\"key\"))if(typeof a.offsetX!==\"undefined\"&&typeof a.offsetY!==\"undefined\"){this.offsetX=a.offsetX;this.offsetY=a.offsetY}else if(this.target&&this.target.nodeType!==3&&typeof a.clientX===\"number\"){var c=Sys.UI.DomElement.getLocation(this.target),d=Sys.UI.DomElement._getWindow(this.target);this.offsetX=(d.pageXOffset||0)+a.clientX-c.x;this.offsetY=(d.pageYOffset||0)+a.clientY-c.y}this.screenX=a.screenX;this.screenY=a.screenY;this.shiftKey=a.shiftKey};Sys.UI.DomEvent.prototype={preventDefault:function(){if(this.rawEvent.preventDefault)this.rawEvent.preventDefault();else if(window.event)this.rawEvent.returnValue=false},stopPropagation:function(){if(this.rawEvent.stopPropagation)this.rawEvent.stopPropagation();else if(window.event)this.rawEvent.cancelBubble=true}};Sys.UI.DomEvent.registerClass(\"Sys.UI.DomEvent\");var $addHandler=Sys.UI.DomEvent.addHandler=function(a,d,e,g){if(!a._events)a._events={};var c=a._events[d];if(!c)a._events[d]=c=[];var b;if(a.addEventListener){b=function(b){return e.call(a,new Sys.UI.DomEvent(b))};a.addEventListener(d,b,false)}else if(a.attachEvent){b=function(){var b={};try{b=Sys.UI.DomElement._getWindow(a).event}catch(c){}return e.call(a,new Sys.UI.DomEvent(b))};a.attachEvent(\"on\"+d,b)}c[c.length]={handler:e,browserHandler:b,autoRemove:g};if(g){var f=a.dispose;if(f!==Sys.UI.DomEvent._disposeHandlers){a.dispose=Sys.UI.DomEvent._disposeHandlers;if(typeof f!==\"undefined\")a._chainDispose=f}}},$addHandlers=Sys.UI.DomEvent.addHandlers=function(f,d,c,e){for(var b in d){var a=d[b];if(c)a=Function.createDelegate(c,a);$addHandler(f,b,a,e||false)}},$clearHandlers=Sys.UI.DomEvent.clearHandlers=function(a){Sys.UI.DomEvent._clearHandlers(a,false)};Sys.UI.DomEvent._clearHandlers=function(a,g){if(a._events){var e=a._events;for(var b in e){var d=e[b];for(var c=d.length-1;c>=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!==\"undefined\"){this.dispose=b;this._chainDispose=null;if(a===\"function\")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b<g;b++)if(c[b].handler===f){d=c[b].browserHandler;break}if(a.removeEventListener)a.removeEventListener(e,d,false);else if(a.detachEvent)a.detachEvent(\"on\"+e,d);c.splice(b,1)};Sys.UI.DomElement=function(){};Sys.UI.DomElement.registerClass(\"Sys.UI.DomElement\");Sys.UI.DomElement.addCssClass=function(a,b){if(!Sys.UI.DomElement.containsCssClass(a,b))if(a.className===\"\")a.className=b;else a.className+=\" \"+b};Sys.UI.DomElement.containsCssClass=function(b,a){return Array.contains(b.className.split(\" \"),a)};Sys.UI.DomElement.getBounds=function(a){var b=Sys.UI.DomElement.getLocation(a);return new Sys.UI.Bounds(b.x,b.y,a.offsetWidth||0,a.offsetHeight||0)};var $get=Sys.UI.DomElement.getElementById=function(f,e){if(!e)return document.getElementById(f);if(e.getElementById)return e.getElementById(f);var c=[],d=e.childNodes;for(var b=0;b<d.length;b++){var a=d[b];if(a.nodeType==1)c[c.length]=a}while(c.length){a=c.shift();if(a.id==f)return a;d=a.childNodes;for(b=0;b<d.length;b++){a=d[b];if(a.nodeType==1)c[c.length]=a}}return null};if(document.documentElement.getBoundingClientRect)Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9||a===document.documentElement||a.parentNode===a.ownerDocument.documentElement)return new Sys.UI.Point(0,0);var f=a.getBoundingClientRect();if(!f)return new Sys.UI.Point(0,0);var e=a.ownerDocument.documentElement,h=a.ownerDocument.body,l,c=Math.round(f.left)+(e.scrollLeft||h.scrollLeft),d=Math.round(f.top)+(e.scrollTop||h.scrollTop);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){try{var g=a.ownerDocument.parentWindow.frameElement||null;if(g){var i=g.frameBorder===\"0\"||g.frameBorder===\"no\"?2:0;c+=i;d+=i}}catch(m){}if(Sys.Browser.version===7&&!document.documentMode){var j=document.body,k=j.getBoundingClientRect(),b=(k.right-k.left)/j.clientWidth;b=Math.round(b*100);b=(b-b%5)/100;if(!isNaN(b)&&b!==1){c=Math.round(c/b);d=Math.round(d/b)}}if((document.documentMode||0)<8){c-=e.clientLeft;d-=e.clientTop}}return new Sys.UI.Point(c,d)};else if(Sys.Browser.agent===Sys.Browser.Safari)Sys.UI.DomElement.getLocation=function(c){if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);var d=0,e=0,a,j=null,g=null,b;for(a=c;a;j=a,(g=b,a=a.offsetParent)){b=Sys.UI.DomElement._getCurrentStyle(a);var f=a.tagName?a.tagName.toUpperCase():null;if((a.offsetLeft||a.offsetTop)&&(f!==\"BODY\"||(!g||g.position!==\"absolute\"))){d+=a.offsetLeft;e+=a.offsetTop}if(j&&Sys.Browser.version>=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!==\"BODY\"&&f!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i===\"absolute\")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c===\"BODY\"&&(!g||g.position!==\"absolute\"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!==\"TABLE\"&&c!==\"TD\"&&c!==\"HTML\"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c===\"TABLE\"&&(b.position===\"relative\"||b.position===\"absolute\")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!==\"BODY\"&&c!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=\" \"+d.className+\" \",b=a.indexOf(\" \"+c+\" \");if(b>=0)d.className=(a.substr(0,b)+\" \"+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a===\"string\")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position=\"absolute\";a.left=c+\"px\";a.top=d+\"px\"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!==\"hidden\"&&a.display!==\"none\"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?\"visible\":\"hidden\";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode===\"none\")switch(a.tagName.toUpperCase()){case \"DIV\":case \"P\":case \"ADDRESS\":case \"BLOCKQUOTE\":case \"BODY\":case \"COL\":case \"COLGROUP\":case \"DD\":case \"DL\":case \"DT\":case \"FIELDSET\":case \"FORM\":case \"H1\":case \"H2\":case \"H3\":case \"H4\":case \"H5\":case \"H6\":case \"HR\":case \"IFRAME\":case \"LEGEND\":case \"OL\":case \"PRE\":case \"TABLE\":case \"TD\":case \"TH\":case \"TR\":case \"UL\":a._oldDisplayMode=\"block\";break;case \"LI\":a._oldDisplayMode=\"list-item\";break;default:a._oldDisplayMode=\"inline\"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position=\"absolute\";a.style.display=\"block\";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display=\"none\"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface(\"Sys.IContainer\");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass(\"Sys.ApplicationLoadEventArgs\",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,\"unload\",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler(\"init\",a)},remove_init:function(a){this.get_events().removeHandler(\"init\",a)},add_load:function(a){this.get_events().addHandler(\"load\",a)},remove_load:function(a){this.get_events().removeHandler(\"load\",a)},add_unload:function(a){this.get_events().addHandler(\"unload\",a)},remove_unload:function(a){this.get_events().removeHandler(\"unload\",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler(\"unload\");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a<f;a++){var d=b[a];if(typeof d!==\"undefined\")d.dispose()}Array.clear(this._disposableObjects);Sys.UI.DomEvent.removeHandler(window,\"unload\",this._unloadHandlerDelegate);if(Sys._ScriptLoader){var e=Sys._ScriptLoader.getInstance();if(e)e.dispose()}Sys._Application.callBaseMethod(this,\"dispose\")}},disposeElement:function(c,j){if(c.nodeType===1){var b,h=c.getElementsByTagName(\"*\"),g=h.length,i=new Array(g);for(b=0;b<g;b++)i[b]=h[b];for(b=g-1;b>=0;b--){var d=i[b],f=d.dispose;if(f&&typeof f===\"function\")d.dispose();else{var e=d.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=d._behaviors;if(a)this._disposeComponents(a);a=d._components;if(a){this._disposeComponents(a);d._components=null}}if(!j){var f=c.dispose;if(f&&typeof f===\"function\")c.dispose();else{var e=c.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=c._behaviors;if(a)this._disposeComponents(a);a=c._components;if(a){this._disposeComponents(a);c._components=null}}}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a<d;a++){var c=b[a].component;Sys$Component$_setReferences(c,b[a].references);c.endUpdate()}this._secondPassComponents=[];this._creatingComponents=false},findComponent:function(b,a){return a?Sys.IContainer.isInstanceOfType(a)?a.findComponent(b):a[b]||null:Sys.Application._components[b]||null},getComponents:function(){var a=[],b=this._components;for(var c in b)a[a.length]=b[c];return a},initialize:function(){if(!this.get_isInitialized()&&!this._disposing){Sys._Application.callBaseMethod(this,\"initialize\");this._raiseInit();if(this.get_stateString){if(Sys.WebForms&&Sys.WebForms.PageRequestManager){this._beginRequestHandler=Function.createDelegate(this,this._onPageRequestManagerBeginRequest);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);this._endRequestHandler=Function.createDelegate(this,this._onPageRequestManagerEndRequest);Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler)}var a=this.get_stateString();if(a!==this._currentEntry)this._navigate(a);else this._ensureHistory()}this.raiseLoad()}},notifyScriptLoaded:function(){},registerDisposableObject:function(b){if(!this._disposing){var a=this._disposableObjects,c=a.length;a[c]=b;b.__msdisposeindex=c}},raiseLoad:function(){var b=this.get_events().getHandler(\"load\"),a=new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents),!!this._loaded);this._loaded=true;if(b)b(this,a);if(window.pageLoad)window.pageLoad(this,a);this._createdComponents=[]},removeComponent:function(b){var a=b.get_id();if(a)delete this._components[a]},unregisterDisposableObject:function(a){if(!this._disposing){var e=a.__msdisposeindex;if(typeof e===\"number\"){var b=this._disposableObjects;delete b[e];delete a.__msdisposeindex;if(++this._deleteCount>1000){var c=[];for(var d=0,f=b.length;d<f;d++){a=b[d];if(typeof a!==\"undefined\"){a.__msdisposeindex=c.length;c.push(a)}}this._disposableObjects=c;this._deleteCount=0}}}},_addComponentToSecondPass:function(b,a){this._secondPassComponents[this._secondPassComponents.length]={component:b,references:a}},_disposeComponents:function(a){if(a)for(var b=a.length-1;b>=0;b--){var c=a[b];if(typeof c.dispose===\"function\")c.dispose()}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,\"load\",c);b()};Sys.UI.DomEvent.addHandler(window,\"load\",c);if(document.addEventListener)try{document.addEventListener(\"DOMContentLoaded\",a=function(){document.removeEventListener(\"DOMContentLoaded\",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement(\"div\");a=function(){try{d.doScroll(\"left\")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent(\"onreadystatechange\",a=function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler(\"init\");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass(\"Sys._Application\",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,\"get_id\");if(a)return a;if(!this._element||!this._element.id)return \"\";return this._element.id+\"$\"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(\".\");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,\"initialize\");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,\"dispose\");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass(\"Sys.UI.Behavior\",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b<f;b++)if(e.isInstanceOfType(a[b]))c[c.length]=a[b];return c};Sys.UI.VisibilityMode=function(){throw Error.notImplemented()};Sys.UI.VisibilityMode.prototype={hide:0,collapse:1};Sys.UI.VisibilityMode.registerEnum(\"Sys.UI.VisibilityMode\");Sys.UI.Control=function(a){Sys.UI.Control.initializeBase(this);this._element=a;a.control=this;var b=this.get_role();if(b)a.setAttribute(\"role\",b)};Sys.UI.Control.prototype={_parent:null,_visibilityMode:Sys.UI.VisibilityMode.hide,get_element:function(){return this._element},get_id:function(){if(!this._element)return \"\";return this._element.id},set_id:function(){throw Error.invalidOperation(Sys.Res.cantSetId)},get_parent:function(){if(this._parent)return this._parent;if(!this._element)return null;var a=this._element.parentNode;while(a){if(a.control)return a.control;a=a.parentNode}return null},set_parent:function(a){this._parent=a},get_role:function(){return null},get_visibilityMode:function(){return Sys.UI.DomElement.getVisibilityMode(this._element)},set_visibilityMode:function(a){Sys.UI.DomElement.setVisibilityMode(this._element,a)},get_visible:function(){return Sys.UI.DomElement.getVisible(this._element)},set_visible:function(a){Sys.UI.DomElement.setVisible(this._element,a)},addCssClass:function(a){Sys.UI.DomElement.addCssClass(this._element,a)},dispose:function(){Sys.UI.Control.callBaseMethod(this,\"dispose\");if(this._element){this._element.control=null;delete this._element}if(this._parent)delete this._parent},onBubbleEvent:function(){return false},raiseBubbleEvent:function(a,b){this._raiseBubbleEvent(a,b)},_raiseBubbleEvent:function(b,c){var a=this.get_parent();while(a){if(a.onBubbleEvent(b,c))return;a=a.get_parent()}},removeCssClass:function(a){Sys.UI.DomElement.removeCssClass(this._element,a)},toggleCssClass:function(a){Sys.UI.DomElement.toggleCssClass(this._element,a)}};Sys.UI.Control.registerClass(\"Sys.UI.Control\",Sys.Component);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxCore.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxCore.js\nFunction.__typeName=\"Function\";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c<e;c++)d[c]=arguments[c];d[e]=a;return b.apply(this,d)}return b.call(this,a)}};Function.createDelegate=function(a,b){return function(){return b.apply(a,arguments)}};Function.emptyFunction=Function.emptyMethod=function(){};Function.validateParameters=function(c,b,a){return Function._validateParams(c,b,a)};Function._validateParams=function(g,e,c){var a,d=e.length;c=c||typeof c===\"undefined\";a=Function._validateParameterCount(g,e,c);if(a){a.popStackFrame();return a}for(var b=0,i=g.length;b<i;b++){var f=e[Math.min(b,d-1)],h=f.name;if(f.parameterArray)h+=\"[\"+(b-d+1)+\"]\";else if(!c&&b>=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(e<b){var f=b;for(a=0;a<b;a++){var g=d[a];if(g.optional||g.parameterArray)f--}if(e<f)c=true}else if(i&&e>b){c=true;for(a=0;a<b;a++)if(d[a].parameterArray){c=false;break}}if(c){var h=Error.parameterCount();h.popStackFrame();return h}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!==\"undefined\"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d<c.length;d++){var n=c[d];b=Function._validateParameterType(n,e,j,i,f,h+\"[\"+d+\"]\");if(b){b.popStackFrame();return b}}}return null};Function._validateParameterType=function(b,c,k,j,h,d){var a,g;if(typeof b===\"undefined\")if(h)return null;else{a=Error.argumentUndefined(d);a.popStackFrame();return a}if(b===null)if(h)return null;else{a=Error.argumentNull(d);a.popStackFrame();return a}if(c&&c.__enum){if(typeof b!==\"number\"){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(b%1===0){var e=c.prototype;if(!c.__flags||b===0){for(g in e)if(e[g]===b)return null}else{var i=b;for(g in e){var f=e[g];if(f===0)continue;if((f&b)===f)i-=f;if(i===0)return null}}}a=Error.argumentOutOfRange(d,b,String.format(Sys.Res.enumInvalidValue,b,c.getName()));a.popStackFrame();return a}if(j&&(!Sys._isDomElement(b)||b.nodeType===3)){a=Error.argument(d,Sys.Res.argumentDomElement);a.popStackFrame();return a}if(c&&!Sys._isInstanceOfType(c,b)){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(c===Number&&k)if(b%1!==0){a=Error.argumentOutOfRange(d,b,Sys.Res.argumentInteger);a.popStackFrame();return a}return null};Error.__typeName=\"Error\";Error.__class=true;Error.create=function(d,b){var a=new Error(d);a.message=d;if(b)for(var c in b)a[c]=b[c];a.popStackFrame();return a};Error.argument=function(a,c){var b=\"Sys.ArgumentException: \"+(c?c:Sys.Res.argument);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentException\",paramName:a});d.popStackFrame();return d};Error.argumentNull=function(a,c){var b=\"Sys.ArgumentNullException: \"+(c?c:Sys.Res.argumentNull);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentNullException\",paramName:a});d.popStackFrame();return d};Error.argumentOutOfRange=function(c,a,d){var b=\"Sys.ArgumentOutOfRangeException: \"+(d?d:Sys.Res.argumentOutOfRange);if(c)b+=\"\\n\"+String.format(Sys.Res.paramName,c);if(typeof a!==\"undefined\"&&a!==null)b+=\"\\n\"+String.format(Sys.Res.actualValue,a);var e=Error.create(b,{name:\"Sys.ArgumentOutOfRangeException\",paramName:c,actualValue:a});e.popStackFrame();return e};Error.argumentType=function(d,c,b,e){var a=\"Sys.ArgumentTypeException: \";if(e)a+=e;else if(c&&b)a+=String.format(Sys.Res.argumentTypeWithTypes,c.getName(),b.getName());else a+=Sys.Res.argumentType;if(d)a+=\"\\n\"+String.format(Sys.Res.paramName,d);var f=Error.create(a,{name:\"Sys.ArgumentTypeException\",paramName:d,actualType:c,expectedType:b});f.popStackFrame();return f};Error.argumentUndefined=function(a,c){var b=\"Sys.ArgumentUndefinedException: \"+(c?c:Sys.Res.argumentUndefined);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentUndefinedException\",paramName:a});d.popStackFrame();return d};Error.format=function(a){var c=\"Sys.FormatException: \"+(a?a:Sys.Res.format),b=Error.create(c,{name:\"Sys.FormatException\"});b.popStackFrame();return b};Error.invalidOperation=function(a){var c=\"Sys.InvalidOperationException: \"+(a?a:Sys.Res.invalidOperation),b=Error.create(c,{name:\"Sys.InvalidOperationException\"});b.popStackFrame();return b};Error.notImplemented=function(a){var c=\"Sys.NotImplementedException: \"+(a?a:Sys.Res.notImplemented),b=Error.create(c,{name:\"Sys.NotImplementedException\"});b.popStackFrame();return b};Error.parameterCount=function(a){var c=\"Sys.ParameterCountException: \"+(a?a:Sys.Res.parameterCount),b=Error.create(c,{name:\"Sys.ParameterCountException\"});b.popStackFrame();return b};Error.prototype.popStackFrame=function(){if(typeof this.stack===\"undefined\"||this.stack===null||typeof this.fileName===\"undefined\"||this.fileName===null||typeof this.lineNumber===\"undefined\"||this.lineNumber===null)return;var a=this.stack.split(\"\\n\"),c=a[0],e=this.fileName+\":\"+this.lineNumber;while(typeof c!==\"undefined\"&&c!==null&&c.indexOf(e)===-1){a.shift();c=a[0]}var d=a[1];if(typeof d===\"undefined\"||d===null)return;var b=d.match(/@(.*):(\\d+)$/);if(typeof b===\"undefined\"||b===null)return;this.fileName=b[1];this.lineNumber=parseInt(b[2]);a.shift();this.stack=a.join(\"\\n\")};Object.__typeName=\"Object\";Object.__class=true;Object.getType=function(b){var a=b.constructor;if(!a||typeof a!==\"function\"||!a.__typeName||a.__typeName===\"Object\")return Object;return a};Object.getTypeName=function(a){return Object.getType(a).getName()};String.__typeName=\"String\";String.__class=true;String.prototype.endsWith=function(a){return this.substr(this.length-a.length)===a};String.prototype.startsWith=function(a){return this.substr(0,a.length)===a};String.prototype.trim=function(){return this.replace(/^\\s+|\\s+$/g,\"\")};String.prototype.trimEnd=function(){return this.replace(/\\s+$/,\"\")};String.prototype.trimStart=function(){return this.replace(/^\\s+/,\"\")};String.format=function(){return String._toFormattedString(false,arguments)};String._toFormattedString=function(l,j){var c=\"\",e=j[0];for(var a=0;true;){var f=e.indexOf(\"{\",a),d=e.indexOf(\"}\",a);if(f<0&&d<0){c+=e.slice(a);break}if(d>0&&(d<f||f<0)){c+=e.slice(a,d+1);a=d+2;continue}c+=e.slice(a,f);a=f+1;if(e.charAt(a)===\"{\"){c+=\"{\";a++;continue}if(d<0)break;var h=e.substring(a,d),g=h.indexOf(\":\"),k=parseInt(g<0?h:h.substring(0,g),10)+1,i=g<0?\"\":h.substring(g+1),b=j[k];if(typeof b===\"undefined\"||b===null)b=\"\";if(b.toFormattedString)c+=b.toFormattedString(i);else if(l&&b.localeFormat)c+=b.localeFormat(i);else if(b.format)c+=b.format(i);else c+=b.toString();a=d+1}return c};Boolean.__typeName=\"Boolean\";Boolean.__class=true;Boolean.parse=function(b){var a=b.trim().toLowerCase();if(a===\"false\")return false;if(a===\"true\")return true};Date.__typeName=\"Date\";Date.__class=true;Number.__typeName=\"Number\";Number.__class=true;RegExp.__typeName=\"RegExp\";RegExp.__class=true;if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=Sys._getBaseMethod(this,a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(a,b){return Sys._getBaseMethod(this,a,b)};Type.prototype.getBaseType=function(){return typeof this.__baseType===\"undefined\"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Array.contains(a,e))a[a.length]=e}b=b.__baseType}return a};Type.prototype.getName=function(){return typeof this.__typeName===\"undefined\"?\"\":this.__typeName};Type.prototype.implementsInterface=function(d){this.resolveInheritance();var c=d.getName(),a=this.__interfaceCache;if(a){var e=a[c];if(typeof e!==\"undefined\")return e}else a=this.__interfaceCache={};var b=this;while(b){var f=b.__interfaces;if(f)if(Array.indexOf(f,d)!==-1)return a[c]=true;b=b.__baseType}return a[c]=false};Type.prototype.inheritsFrom=function(b){this.resolveInheritance();var a=this.__baseType;while(a){if(a===b)return true;a=a.__baseType}return false};Type.prototype.initializeBase=function(a,b){this.resolveInheritance();if(this.__baseType)if(!b)this.__baseType.apply(a);else this.__baseType.apply(a,b);return a};Type.prototype.isImplementedBy=function(a){if(typeof a===\"undefined\"||a===null)return false;var b=Object.getType(a);return !!(b.implementsInterface&&b.implementsInterface(this))};Type.prototype.isInstanceOfType=function(a){return Sys._isInstanceOfType(this,a)};Type.prototype.registerClass=function(c,b,d){this.prototype.constructor=this;this.__typeName=c;this.__class=true;if(b){this.__baseType=b;this.__basePrototypePending=true}Sys.__upperCaseTypes[c.toUpperCase()]=this;if(d){this.__interfaces=[];for(var a=2,f=arguments.length;a<f;a++){var e=arguments[a];this.__interfaces.push(e)}}return this};Type.prototype.registerInterface=function(a){Sys.__upperCaseTypes[a.toUpperCase()]=this;this.prototype.constructor=this;this.__typeName=a;this.__interface=true;return this};Type.prototype.resolveInheritance=function(){if(this.__basePrototypePending){var b=this.__baseType;b.resolveInheritance();for(var a in b.prototype){var c=b.prototype[a];if(!this.prototype[a])this.prototype[a]=c}delete this.__basePrototypePending}};Type.getRootNamespaces=function(){return Array.clone(Sys.__rootNamespaces)};Type.isClass=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__class};Type.isInterface=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__interface};Type.isNamespace=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__namespace};Type.parse=function(typeName,ns){var fn;if(ns){fn=Sys.__upperCaseTypes[ns.getName().toUpperCase()+\".\"+typeName.toUpperCase()];return fn||null}if(!typeName)return null;if(!Type.__htClasses)Type.__htClasses={};fn=Type.__htClasses[typeName];if(!fn){fn=eval(typeName);Type.__htClasses[typeName]=fn}return fn};Type.registerNamespace=function(e){var d=window,c=e.split(\".\");for(var b=0;b<c.length;b++){var f=c[b],a=d[f];if(!a)a=d[f]={};if(!a.__namespace){if(b===0&&e!==\"Sys\")Sys.__rootNamespaces[Sys.__rootNamespaces.length]=a;a.__namespace=true;a.__typeName=c.slice(0,b+1).join(\".\");a.getName=function(){return this.__typeName}}d=a}};Type._checkDependency=function(c,a){var d=Type._registerScript._scripts,b=d?!!d[c]:false;if(typeof a!==\"undefined\"&&!b)throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded,a,c));return b};Type._registerScript=function(a,c){var b=Type._registerScript._scripts;if(!b)Type._registerScript._scripts=b={};if(b[a])throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded,a));b[a]=true;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Type._checkDependency(e))throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound,a,e))}};Type.registerNamespace(\"Sys\");Sys.__upperCaseTypes={};Sys.__rootNamespaces=[Sys];Sys._isInstanceOfType=function(c,b){if(typeof b===\"undefined\"||b===null)return false;if(b instanceof c)return true;var a=Object.getType(b);return !!(a===c)||a.inheritsFrom&&a.inheritsFrom(c)||a.implementsInterface&&a.implementsInterface(c)};Sys._getBaseMethod=function(d,e,c){var b=d.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Sys._isDomElement=function(a){var c=false;if(typeof a.nodeType!==\"number\"){var b=a.ownerDocument||a.document||a;if(b!=a){var d=b.defaultView||b.parentWindow;c=d!=a}else c=typeof b.body===\"undefined\"}return !c};Array.__typeName=\"Array\";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Sys._indexOf(a,b)>=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a<f;a++){var c=b[a];if(typeof c!==\"undefined\")e.call(d,c,a,b)}};Array.indexOf=function(a,c,b){return Sys._indexOf(a,c,b)};Array.insert=function(a,b,c){a.splice(b,0,c)};Array.parse=function(value){if(!value)return [];return eval(value)};Array.remove=function(b,c){var a=Sys._indexOf(b,c);if(a>=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e===\"undefined\")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b<c;b++)if(typeof d[b]!==\"undefined\"&&d[b]===e)return b}return -1};Type._registerScript(\"MicrosoftAjaxCore.js\");Sys.IDisposable=function(){};Sys.IDisposable.prototype={};Sys.IDisposable.registerInterface(\"Sys.IDisposable\");Sys.StringBuilder=function(a){this._parts=typeof a!==\"undefined\"&&a!==null&&a!==\"\"?[a.toString()]:[];this._value={};this._len=0};Sys.StringBuilder.prototype={append:function(a){this._parts[this._parts.length]=a},appendLine:function(a){this._parts[this._parts.length]=typeof a===\"undefined\"||a===null||a===\"\"?\"\\r\\n\":a+\"\\r\\n\"},clear:function(){this._parts=[];this._value={};this._len=0},isEmpty:function(){if(this._parts.length===0)return true;return this.toString()===\"\"},toString:function(a){a=a||\"\";var b=this._parts;if(this._len!==b.length){this._value={};this._len=b.length}var d=this._value;if(typeof d[a]===\"undefined\"){if(a!==\"\")for(var c=0;c<b.length;)if(typeof b[c]===\"undefined\"||b[c]===\"\"||b[c]===null)b.splice(c,1);else c++;d[a]=this._parts.join(a)}return d[a]}};Sys.StringBuilder.registerClass(\"Sys.StringBuilder\");Sys.Browser={};Sys.Browser.InternetExplorer={};Sys.Browser.Firefox={};Sys.Browser.Safari={};Sys.Browser.Opera={};Sys.Browser.agent=null;Sys.Browser.hasDebuggerStatement=false;Sys.Browser.name=navigator.appName;Sys.Browser.version=parseFloat(navigator.appVersion);Sys.Browser.documentMode=0;if(navigator.userAgent.indexOf(\" MSIE \")>-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\\d+\\.\\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" Firefox/\")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\\/(\\d+\\.\\d+)/)[1]);Sys.Browser.name=\"Firefox\";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" AppleWebKit/\")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\\/(\\d+(\\.\\d+)?)/)[1]);Sys.Browser.name=\"Safari\"}else if(navigator.userAgent.indexOf(\"Opera/\")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass(\"Sys.EventArgs\");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass(\"Sys.CancelEventArgs\",Sys.EventArgs);Sys.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={_addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},addHandler:function(b,a){this._addHandler(b,a)},_removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},removeHandler:function(b,a){this._removeHandler(b,a)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b<e;b++)a[b](c,d)}},_getEvent:function(a,b){if(!this._list[a]){if(!b)return null;this._list[a]=[]}return this._list[a]}};Sys.EventHandlerList.registerClass(\"Sys.EventHandlerList\");Type.registerNamespace(\"Sys.UI\");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!==\"undefined\"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value+=b+\"\\n\"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value=\"\"},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval(\"debugger\")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:\"traceDump\";b=b?b:\"\";if(a===null){this.trace(b+c+\": null\");return}switch(typeof a){case \"undefined\":this.trace(b+c+\": Undefined\");break;case \"number\":case \"string\":case \"boolean\":this.trace(b+c+\": \"+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+\": \"+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+\": ...\");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName===\"string\"){var k=a.tagName?a.tagName:\"DomElement\";if(a.id)k+=\" - \"+a.id;this.trace(b+c+\" {\"+k+\"}\")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i===\"string\"?\" {\"+i+\"}\":\"\"));if(b===\"\"||f){b+=\"    \";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e<j;e++)this._traceDump(a[e],\"[\"+e+\"]\",f,b,d)}else for(g in a){h=a[g];if(!Function.isInstanceOfType(h))this._traceDump(h,g,f,b,d)}}}Array.remove(d,a)}}};Sys._Debug.registerClass(\"Sys._Debug\");Sys.Debug=new Sys._Debug;Sys.Debug.isDebug=false;function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if(!a){this.__lowerCaseValues=a={};var g=this.prototype;for(var f in g)a[f.toLowerCase()]=g[f]}}else a=this.prototype;if(!this.__flags){i=e?c.toLowerCase():c;b=a[i.trim()];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c,this.__typeName));return b}else{var h=(e?c.toLowerCase():c).split(\",\"),j=0;for(var d=h.length-1;d>=0;d--){var k=h[d].trim();b=a[k];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c.split(\",\")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c===\"undefined\"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(\", \")}return \"\"}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!==\"number\")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!==\"number\")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass(\"Sys.CollectionChange\");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum(\"Sys.NotifyCollectionChangedAction\");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass(\"Sys.NotifyCollectionChangedEventArgs\",Sys.EventArgs);Sys.INotifyPropertyChange=function(){};Sys.INotifyPropertyChange.prototype={};Sys.INotifyPropertyChange.registerInterface(\"Sys.INotifyPropertyChange\");Sys.PropertyChangedEventArgs=function(a){Sys.PropertyChangedEventArgs.initializeBase(this);this._propertyName=a};Sys.PropertyChangedEventArgs.prototype={get_propertyName:function(){return this._propertyName}};Sys.PropertyChangedEventArgs.registerClass(\"Sys.PropertyChangedEventArgs\",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass(\"Sys.Observer\");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,\"propertyChanged\",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"propertyChanged\",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,\"\")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(\".\");for(var i=0,m=d.length-1;i<m;i++){var l=d[i];b=a[\"get_\"+l];if(typeof b===\"function\")a=b.call(a);else a=a[l];var n=typeof a;if(a===null||n===\"undefined\")throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath,j))}var e,c=d[m];b=a[\"get_\"+c];f=a[\"set_\"+c];if(typeof b===\"function\")e=b.call(a);else e=a[c];if(typeof f===\"function\")f.call(a,g);else a[c]=g;if(e!==g){var h=Sys.Observer._getContext(k);if(h&&h.updating){h.dirty=true;return}Sys.Observer.raisePropertyChanged(k,d[0])}};Sys.Observer.setValue=function(b,a,c){Sys.Observer._setValue(b,a,c)};Sys.Observer.raisePropertyChanged=function(b,a){Sys.Observer.raiseEvent(b,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))};Sys.Observer.addCollectionChanged=function(b,a){Sys.Observer._addEventHandler(b,\"collectionChanged\",a)};Sys.Observer.removeCollectionChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"collectionChanged\",a)};Sys.Observer._collectionChange=function(d,c){var a=Sys.Observer._getContext(d);if(a&&a.updating){a.dirty=true;var b=a.changes;if(!b)a.changes=b=[c];else b.push(c)}else{Sys.Observer.raiseCollectionChanged(d,[c]);Sys.Observer.raisePropertyChanged(d,\"length\")}};Sys.Observer.add=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[b],a.length);Array.add(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.addRange=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,b,a.length);Array.addRange(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.clear=function(a){var b=Array.clone(a);Array.clear(a);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset,null,-1,b,0))};Sys.Observer.insert=function(a,b,c){Array.insert(a,b,c);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[c],b))};Sys.Observer.remove=function(a,b){var c=Array.indexOf(a,b);if(c!==-1){Array.remove(a,b);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[b],c));return true}return false};Sys.Observer.removeAt=function(b,a){if(a>-1&&a<b.length){var c=b[a];Array.removeAt(b,a);Sys.Observer._collectionChange(b,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[c],a))}};Sys.Observer.raiseCollectionChanged=function(b,a){Sys.Observer.raiseEvent(b,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))};Sys.Observer._observeMethods={add_propertyChanged:function(a){Sys.Observer._addEventHandler(this,\"propertyChanged\",a)},remove_propertyChanged:function(a){Sys.Observer._removeEventHandler(this,\"propertyChanged\",a)},addEventHandler:function(a,b){Sys.Observer._addEventHandler(this,a,b)},removeEventHandler:function(a,b){Sys.Observer._removeEventHandler(this,a,b)},get_isUpdating:function(){return Sys.Observer.isUpdating(this)},beginUpdate:function(){Sys.Observer.beginUpdate(this)},endUpdate:function(){Sys.Observer.endUpdate(this)},setValue:function(b,a){Sys.Observer._setValue(this,b,a)},raiseEvent:function(b,a){Sys.Observer.raiseEvent(this,b,a)},raisePropertyChanged:function(a){Sys.Observer.raiseEvent(this,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))}};Sys.Observer._arrayMethods={add_collectionChanged:function(a){Sys.Observer._addEventHandler(this,\"collectionChanged\",a)},remove_collectionChanged:function(a){Sys.Observer._removeEventHandler(this,\"collectionChanged\",a)},add:function(a){Sys.Observer.add(this,a)},addRange:function(a){Sys.Observer.addRange(this,a)},clear:function(){Sys.Observer.clear(this)},insert:function(a,b){Sys.Observer.insert(this,a,b)},remove:function(a){return Sys.Observer.remove(this,a)},removeAt:function(a){Sys.Observer.removeAt(this,a)},raiseCollectionChanged:function(a){Sys.Observer.raiseEvent(this,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))}};Sys.Observer._getContext=function(b,c){var a=b._observerContext;if(a)return a();if(c)return (b._observerContext=Sys.Observer._createContext())();return null};Sys.Observer._createContext=function(){var a={events:new Sys.EventHandlerList};return function(){return a}};"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxGlobalization.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxGlobalization.js\nType._registerScript(\"MicrosoftAjaxGlobalization.js\",[\"MicrosoftAjaxCore.js\"]);Date._appendPreOrPostMatch=function(e,b){var d=0,a=false;for(var c=0,g=e.length;c<g;c++){var f=e.charAt(c);switch(f){case \"'\":if(a)b.append(\"'\");else d++;a=false;break;case \"\\\\\":if(a)b.append(\"\\\\\");a=!a;break;default:b.append(f);a=false}}return d};Date._expandFormat=function(a,b){if(!b)b=\"F\";var c=b.length;if(c===1)switch(b){case \"d\":return a.ShortDatePattern;case \"D\":return a.LongDatePattern;case \"t\":return a.ShortTimePattern;case \"T\":return a.LongTimePattern;case \"f\":return a.LongDatePattern+\" \"+a.ShortTimePattern;case \"F\":return a.FullDateTimePattern;case \"M\":case \"m\":return a.MonthDayPattern;case \"s\":return a.SortableDateTimePattern;case \"Y\":case \"y\":return a.YearMonthPattern;default:throw Error.format(Sys.Res.formatInvalidString)}else if(c===2&&b.charAt(0)===\"%\")b=b.charAt(1);return b};Date._expandYear=function(c,a){var d=new Date,e=Date._getEra(d);if(a<100){var b=Date._getEraYear(d,c,e);a+=b-b%100;if(a>c.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a<f;a+=4){b=c[a+2];if(b===null||d>=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g,\"\\\\\\\\$1\");var a=new Sys.StringBuilder(\"^\"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case \"dddd\":case \"ddd\":case \"MMMM\":case \"MMM\":case \"gg\":case \"g\":a.append(\"(\\\\D+)\");break;case \"tt\":case \"t\":a.append(\"(\\\\D*)\");break;case \"yyyy\":a.append(\"(\\\\d{4})\");break;case \"fff\":a.append(\"(\\\\d{3})\");break;case \"ff\":a.append(\"(\\\\d{2})\");break;case \"f\":a.append(\"(\\\\d)\");break;case \"dd\":case \"d\":case \"MM\":case \"M\":case \"yy\":case \"y\":case \"HH\":case \"H\":case \"hh\":case \"h\":case \"mm\":case \"m\":case \"ss\":case \"s\":a.append(\"(\\\\d\\\\d?)\");break;case \"zzz\":a.append(\"([+-]?\\\\d\\\\d?:\\\\d{2})\");break;case \"zz\":case \"z\":a.append(\"([+-]?\\\\d\\\\d?)\");break;case \"/\":a.append(\"(\\\\\"+b.DateSeparator+\")\")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append(\"$\");var k=a.toString().replace(/\\s+/g,\"\\\\s+\"),g={\"regExp\":k,\"groups\":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a<c;a++){f=i[a];if(f){g=true;b=Date._parseExact(h,f,d);if(b)return b}}if(!g){e=d._getDateTimeFormats();for(a=0,c=e.length;a<c;a++){b=Date._parseExact(h,e[a],d);if(b)return b}}return null};Date._parseExact=function(w,D,k){w=w.trim();var g=k.dateTimeFormat,A=Date._getParseRegExp(g,D),C=(new RegExp(A.regExp)).exec(w);if(C===null)return null;var B=A.groups,x=null,e=null,c=null,j=null,i=null,d=0,h,p=0,q=0,f=0,l=null,v=false;for(var s=0,E=B.length;s<E;s++){var a=C[s+1];if(a)switch(B[s]){case \"dd\":case \"d\":j=parseInt(a,10);if(j<1||j>31)return null;break;case \"MMMM\":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case \"MMM\":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case \"M\":case \"MM\":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case \"y\":case \"yy\":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case \"yyyy\":e=parseInt(a,10);if(e<0||e>9999)return null;break;case \"h\":case \"hh\":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case \"H\":case \"HH\":d=parseInt(a,10);if(d<0||d>23)return null;break;case \"m\":case \"mm\":p=parseInt(a,10);if(p<0||p>59)return null;break;case \"s\":case \"ss\":q=parseInt(a,10);if(q<0||q>59)return null;break;case \"tt\":case \"t\":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case \"f\":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case \"ff\":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case \"fff\":f=parseInt(a,10);if(f<0||f>999)return null;break;case \"dddd\":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case \"ddd\":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case \"zzz\":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var m=parseInt(u[1],10);if(m<0||m>59)return null;l=h*60+(a.startsWith(\"-\")?-m:m);break;case \"z\":case \"zz\":h=parseInt(a,10);if(h<-12||h>13)return null;l=h*60;break;case \"g\":case \"gg\":var o=a;if(!o||!g.eras)return null;o=o.toLowerCase().trim();for(var r=0,F=g.eras.length;r<F;r+=4)if(o===g.eras[r+1].toLowerCase()){x=r;break}if(x===null)return null}}var b=new Date,t,n=g.Calendar.convert;if(n)t=n.fromGregorian(b)[0];else t=b.getFullYear();if(e===null)e=t;else if(g.eras)e+=g.eras[(x||0)+3];if(c===null)c=0;if(j===null)j=1;if(n){b=n.toGregorian(e,c,j);if(b===null)return null}else{b.setFullYear(e,c,j);if(b.getDate()!==j)return null;if(i!==null&&b.getDay()!==i)return null}if(v&&d<12)d+=12;b.setHours(d,p,q,f);if(l!==null){var y=b.getMinutes()-(l+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(y/60,10),y%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,j){var b=j.dateTimeFormat,n=b.Calendar.convert;if(!e||!e.length||e===\"i\")if(j&&j.name.length)if(n)return this._toFormattedString(b.FullDateTimePattern,j);else{var r=new Date(this.getTime()),x=Date._getEra(this,b.eras);r.setFullYear(Date._getEraYear(this,b,x));return r.toLocaleString()}else return this.toString();var l=b.eras,k=e===\"s\";e=Date._expandFormat(b,e);var a=new Sys.StringBuilder,c;function d(a){if(a<10)return \"0\"+a;return a.toString()}function m(a){if(a<10)return \"00\"+a;if(a<100)return \"0\"+a;return a.toString()}function v(a){if(a<10)return \"000\"+a;else if(a<100)return \"00\"+a;else if(a<1000)return \"0\"+a;return a.toString()}var h,p,t=/([^d]|^)(d|dd)([^d]|$)/g;function s(){if(h||p)return h;h=t.test(e);p=true;return h}var q=0,o=Date._getTokenRegExp(),f;if(!k&&n)f=n.fromGregorian(this);for(;true;){var w=o.lastIndex,i=o.exec(e),u=e.slice(w,i?i.index:e.length);q+=Date._appendPreOrPostMatch(u,a);if(!i)break;if(q%2===1){a.append(i[0]);continue}function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear();case 1:return a.getMonth();case 2:return a.getDate()}}switch(i[0]){case \"dddd\":a.append(b.DayNames[this.getDay()]);break;case \"ddd\":a.append(b.AbbreviatedDayNames[this.getDay()]);break;case \"dd\":h=true;a.append(d(g(this,2)));break;case \"d\":h=true;a.append(g(this,2));break;case \"MMMM\":a.append(b.MonthGenitiveNames&&s()?b.MonthGenitiveNames[g(this,1)]:b.MonthNames[g(this,1)]);break;case \"MMM\":a.append(b.AbbreviatedMonthGenitiveNames&&s()?b.AbbreviatedMonthGenitiveNames[g(this,1)]:b.AbbreviatedMonthNames[g(this,1)]);break;case \"MM\":a.append(d(g(this,1)+1));break;case \"M\":a.append(g(this,1)+1);break;case \"yyyy\":a.append(v(f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k)));break;case \"yy\":a.append(d((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100));break;case \"y\":a.append((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100);break;case \"hh\":c=this.getHours()%12;if(c===0)c=12;a.append(d(c));break;case \"h\":c=this.getHours()%12;if(c===0)c=12;a.append(c);break;case \"HH\":a.append(d(this.getHours()));break;case \"H\":a.append(this.getHours());break;case \"mm\":a.append(d(this.getMinutes()));break;case \"m\":a.append(this.getMinutes());break;case \"ss\":a.append(d(this.getSeconds()));break;case \"s\":a.append(this.getSeconds());break;case \"tt\":a.append(this.getHours()<12?b.AMDesignator:b.PMDesignator);break;case \"t\":a.append((this.getHours()<12?b.AMDesignator:b.PMDesignator).charAt(0));break;case \"f\":a.append(m(this.getMilliseconds()).charAt(0));break;case \"ff\":a.append(m(this.getMilliseconds()).substr(0,2));break;case \"fff\":a.append(m(this.getMilliseconds()));break;case \"z\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+Math.floor(Math.abs(c)));break;case \"zz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c))));break;case \"zzz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c)))+\":\"+d(Math.abs(this.getTimezoneOffset()%60)));break;case \"g\":case \"gg\":if(b.eras)a.append(b.eras[Date._getEra(this,l)+1]);break;case \"/\":a.append(b.DateSeparator)}}return a.toString()};String.localeFormat=function(){return String._toFormattedString(true,arguments)};Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===\"\"&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h===\"\")h=\"+\";var j,d,f=e.indexOf(\"e\");if(f<0)f=e.indexOf(\"E\");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join(\"\");var n=a.NumberGroupSeparator.replace(/\\u00A0/g,\" \");if(a.NumberGroupSeparator!==n)c=c.split(n).join(\"\");var l=h+c;if(k!==null)l+=\".\"+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]===\"\")i[0]=\"+\";l+=\"e\"+i[0]+i[1]}if(l.match(/^[+-]?\\d*\\.?\\d*(e[+-]?\\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=\" \"+b;c=\" \"+c;case 3:if(a.endsWith(b))return [\"-\",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return [\"+\",a.substr(0,a.length-c.length)];break;case 2:b+=\" \";c+=\" \";case 1:if(a.startsWith(b))return [\"-\",a.substr(b.length)];else if(a.startsWith(c))return [\"+\",a.substr(c.length)];break;case 0:if(a.startsWith(\"(\")&&a.endsWith(\")\"))return [\"-\",a.substr(1,a.length-2)]}return [\"\",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(e,j){if(!e||e.length===0||e===\"i\")if(j&&j.name.length>0)return this.toLocaleString();else return this.toString();var o=[\"n %\",\"n%\",\"%n\"],n=[\"-n %\",\"-n%\",\"-%n\"],p=[\"(n)\",\"-n\",\"- n\",\"n-\",\"n -\"],m=[\"$n\",\"n$\",\"$ n\",\"n $\"],l=[\"($n)\",\"-$n\",\"$-n\",\"$n-\",\"(n$)\",\"-n$\",\"n-$\",\"n$-\",\"-n $\",\"-$ n\",\"n $-\",\"$ n-\",\"$ -n\",\"n- $\",\"($ n)\",\"(n $)\"];function g(a,c,d){for(var b=a.length;b<c;b++)a=d?\"0\"+a:a+\"0\";return a}function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/o;if(!isFinite(m))m=j;j=m;var b=j.toString(),a=\"\",c,e=b.split(/e/i);b=e[0];c=e.length>1?parseInt(e[1]):0;e=b.split(\".\");b=e[0];a=e.length>1?e[1]:\"\";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a=\"\";var d=b.length-1,f=\"\";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k<l.length){h=l[k];k++}}return b.slice(0,d+1)+n+f+a}var a=j.numberFormat,d=Math.abs(this);if(!e)e=\"D\";var b=-1;if(e.length>1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case \"d\":case \"D\":c=\"n\";if(b!==-1)d=g(\"\"+d,b,true);if(this<0)d=-d;break;case \"c\":case \"C\":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case \"n\":case \"N\":if(this<0)c=p[a.NumberNegativePattern];else c=\"n\";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case \"p\":case \"P\":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\\$|-|%/g,f=\"\";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case \"n\":f+=d;break;case \"$\":f+=a.CurrencySymbol;break;case \"-\":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case \"%\":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a<d;a++)b[a]=this._toUpper(c[a]);return b},_toUpper:function(a){return a.split(\"\\u00a0\").join(\" \").toUpperCase()}};Sys.CultureInfo.registerClass(\"Sys.CultureInfo\");Sys.CultureInfo._parse=function(a){var b=a.dateTimeFormat;if(b&&!b.eras)b.eras=a.eras;return new Sys.CultureInfo(a.name,a.numberFormat,b)};Sys.CultureInfo.InvariantCulture=Sys.CultureInfo._parse({\"name\":\"\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":true,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"\\u00a4\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":true},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, dd MMMM yyyy HH:mm:ss\",\"LongDatePattern\":\"dddd, dd MMMM yyyy\",\"LongTimePattern\":\"HH:mm:ss\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"MM/dd/yyyy\",\"ShortTimePattern\":\"HH:mm\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"yyyy MMMM\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":true,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});if(typeof __cultureInfo===\"object\"){Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse(__cultureInfo);delete __cultureInfo}else Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse({\"name\":\"en-US\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":false,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"$\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":false},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, MMMM dd, yyyy h:mm:ss tt\",\"LongDatePattern\":\"dddd, MMMM dd, yyyy\",\"LongTimePattern\":\"h:mm:ss tt\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"M/d/yyyy\",\"ShortTimePattern\":\"h:mm tt\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"MMMM, yyyy\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":false,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxHistory.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxHistory.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxHistory.js\nType._registerScript(\"MicrosoftAjaxHistory.js\",[\"MicrosoftAjaxComponentModel.js\",\"MicrosoftAjaxSerialization.js\"]);Sys.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass(\"Sys.HistoryEventArgs\",Sys.EventArgs);Sys.Application._appLoadHandler=null;Sys.Application._beginRequestHandler=null;Sys.Application._clientId=null;Sys.Application._currentEntry=\"\";Sys.Application._endRequestHandler=null;Sys.Application._history=null;Sys.Application._enableHistory=false;Sys.Application._historyFrame=null;Sys.Application._historyInitialized=false;Sys.Application._historyPointIsNew=false;Sys.Application._ignoreTimer=false;Sys.Application._initialState=null;Sys.Application._state={};Sys.Application._timerCookie=0;Sys.Application._timerHandler=null;Sys.Application._uniqueId=null;Sys._Application.prototype.get_stateString=function(){var a=null;if(Sys.Browser.agent===Sys.Browser.Firefox){var c=window.location.href,b=c.indexOf(\"#\");if(b!==-1)a=c.substring(b+1);else a=\"\";return a}else a=window.location.hash;if(a.length>0&&a.charAt(0)===\"#\")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler(\"navigate\",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler(\"navigate\",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!==\"undefined\")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||\"\";var b=a.indexOf(\"&&\");if(b!==-1&&b+2<a.length){e.__s=a.substr(b+2);a=a.substr(0,b)}var g=a.split(\"&\");for(var f=0,j=g.length;f<j;f++){var d=g[f],c=d.indexOf(\"=\");if(c!==-1&&c+1<d.length){var i=d.substr(0,c),h=d.substr(c+1);e[i]=decodeURIComponent(h)}}return e};Sys._Application.prototype._enableHistoryInScriptManager=function(){this._enableHistory=true};Sys._Application.prototype._ensureHistory=function(){if(!this._historyInitialized&&this._enableHistory){if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&document.documentMode<8){this._historyFrame=document.getElementById(\"__historyFrame\");this._ignoreIFrame=true}this._timerHandler=Function.createDelegate(this,this._onIdle);this._timerCookie=window.setTimeout(this._timerHandler,100);try{this._initialState=this._deserializeState(this.get_stateString())}catch(a){}this._historyInitialized=true}};Sys._Application.prototype._navigate=function(c){this._ensureHistory();var b=this._deserializeState(c);if(this._uniqueId){var d=this._state.__s||\"\",a=b.__s||\"\";if(a!==d){this._updateHiddenField(a);__doPostBack(this._uniqueId,a);this._state=b;return}}this._setState(c);this._state=b;this._raiseNavigate()};Sys._Application.prototype._onIdle=function(){delete this._timerCookie;var a=this.get_stateString();if(a!==this._currentEntry){if(!this._ignoreTimer){this._historyPointIsNew=false;this._navigate(a)}}else this._ignoreTimer=false;this._timerCookie=window.setTimeout(this._timerHandler,100)};Sys._Application.prototype._onIFrameLoad=function(a){if(document.documentMode<8){this._ensureHistory();if(!this._ignoreIFrame){this._historyPointIsNew=false;this._navigate(a)}this._ignoreIFrame=false}};Sys._Application.prototype._onPageRequestManagerBeginRequest=function(){this._ignoreTimer=true;this._originalTitle=document.title};Sys._Application.prototype._onPageRequestManagerEndRequest=function(g,f){var d=f.get_dataItems()[this._clientId],c=this._originalTitle;this._originalTitle=null;var b=document.getElementById(\"__EVENTTARGET\");if(b&&b.value===this._uniqueId)b.value=\"\";if(typeof d!==\"undefined\"){this.setServerState(d);this._historyPointIsNew=true}else this._ignoreTimer=false;var a=this._serializeState(this._state);if(a!==this._currentEntry){this._ignoreTimer=true;if(typeof c===\"string\"){if(Sys.Browser.agent!==Sys.Browser.InternetExplorer||Sys.Browser.version>7){var e=document.title;document.title=c;this._setState(a);document.title=e}else this._setState(a);this._raiseNavigate()}else{this._setState(a);this._raiseNavigate()}}};Sys._Application.prototype._raiseNavigate=function(){var d=this._historyPointIsNew,c=this.get_events().getHandler(\"navigate\"),b={};for(var a in this._state)if(a!==\"__s\")b[a]=this._state[a];var e=new Sys.HistoryEventArgs(b);if(c)c(this,e);if(!d){var f;try{if(Sys.Browser.agent===Sys.Browser.Firefox&&window.location.hash&&(!window.frameElement||window.top.location.hash))Sys.Browser.version<3.5?window.history.go(0):(location.hash=this.get_stateString())}catch(g){}}};Sys._Application.prototype._serializeState=function(d){var b=[];for(var a in d){var e=d[a];if(a===\"__s\")var c=e;else b[b.length]=a+\"=\"+encodeURIComponent(e)}return b.join(\"&\")+(c?\"&&\"+c:\"\")};Sys._Application.prototype._setState=function(a,b){if(this._enableHistory){a=a||\"\";if(a!==this._currentEntry){if(window.theForm){var d=window.theForm.action,e=d.indexOf(\"#\");window.theForm.action=(e!==-1?d.substring(0,e):d)+\"#\"+a}if(this._historyFrame&&this._historyPointIsNew){var f=document.createElement(\"div\");f.appendChild(document.createTextNode(b||document.title));var g=f.innerHTML;this._ignoreIFrame=true;var c=this._historyFrame.contentWindow.document;c.open(\"javascript:'<html></html>'\");c.write(\"<html><head><title>\"+g+\"</title><scri\"+'pt type=\"text/javascript\">parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+\");</scri\"+\"pt></head><body></body></html>\");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var h=this.get_stateString();if(a!==h){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!==\"undefined\"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxNetwork.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxNetwork.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxNetwork.js\nType._registerScript(\"MicrosoftAjaxNetwork.js\",[\"MicrosoftAjaxSerialization.js\"]);if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=[\"Msxml2.XMLHTTP.3.0\",\"Msxml2.XMLHTTP\"];for(var a=0,c=b.length;a<c;a++)try{return new ActiveXObject(b[a])}catch(d){}return null};Type.registerNamespace(\"Sys.Net\");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass(\"Sys.Net.WebRequestExecutor\");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=[\"Msxml2.DOMDocument.3.0\",\"Msxml2.DOMDocument\"];for(var b=0,f=c.length;b<f;b++)try{var a=new ActiveXObject(c[b]);a.async=false;a.loadXML(d);a.setProperty(\"SelectionLanguage\",\"XPath\");return a}catch(g){}}else try{var e=new window.DOMParser;return e.parseFromString(d,\"text/xml\")}catch(g){}return null};Sys.Net.XMLHttpExecutor=function(){Sys.Net.XMLHttpExecutor.initializeBase(this);var a=this;this._xmlHttpRequest=null;this._webRequest=null;this._responseAvailable=false;this._timedOut=false;this._timer=null;this._aborted=false;this._started=false;this._onReadyStateChange=function(){if(a._xmlHttpRequest.readyState===4){try{if(typeof a._xmlHttpRequest.status===\"undefined\")return}catch(b){return}a._clearTimer();a._responseAvailable=true;try{a._webRequest.completed(Sys.EventArgs.Empty)}finally{if(a._xmlHttpRequest!=null){a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest=null}}}};this._clearTimer=function(){if(a._timer!=null){window.clearTimeout(a._timer);a._timer=null}};this._onTimeout=function(){if(!a._responseAvailable){a._clearTimer();a._timedOut=true;a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest.abort();a._webRequest.completed(Sys.EventArgs.Empty);a._xmlHttpRequest=null}}};Sys.Net.XMLHttpExecutor.prototype={get_timedOut:function(){return this._timedOut},get_started:function(){return this._started},get_responseAvailable:function(){return this._responseAvailable},get_aborted:function(){return this._aborted},executeRequest:function(){this._webRequest=this.get_webRequest();var c=this._webRequest.get_body(),a=this._webRequest.get_headers();this._xmlHttpRequest=new XMLHttpRequest;this._xmlHttpRequest.onreadystatechange=this._onReadyStateChange;var e=this._webRequest.get_httpVerb();this._xmlHttpRequest.open(e,this._webRequest.getResolvedUrl(),true);this._xmlHttpRequest.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");if(a)for(var b in a){var f=a[b];if(typeof f!==\"function\")this._xmlHttpRequest.setRequestHeader(b,f)}if(e.toLowerCase()===\"post\"){if(a===null||!a[\"Content-Type\"])this._xmlHttpRequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=utf-8\");if(!c)c=\"\"}var d=this._webRequest.get_timeout();if(d>0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a=\"\";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf(\"MSIE\")!==-1&&typeof a.setProperty!=\"undefined\")a.setProperty(\"SelectionLanguage\",\"XPath\");if(a.documentElement.namespaceURI===\"http://www.mozilla.org/newlayout/xml/parsererror.xml\"&&a.documentElement.tagName===\"parsererror\")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName===\"parsererror\")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass(\"Sys.Net.XMLHttpExecutor\",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType=\"Sys.Net.XMLHttpExecutor\"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler(\"invokingRequest\",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler(\"invokingRequest\",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler(\"completedRequest\",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler(\"completedRequest\",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler(\"invokingRequest\");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass(\"Sys.Net._WebRequestManager\");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass(\"Sys.Net.NetworkRequestEventArgs\",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url=\"\";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler(\"completed\",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler(\"completed\",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler(\"completedRequest\");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler(\"completed\");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return \"GET\";return \"POST\"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf(\"://\")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName(\"base\")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf(\"?\");if(c!==-1)a=a.substr(0,c);c=a.indexOf(\"#\");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf(\"/\")+1);if(!b||b.length===0)return a;if(b.charAt(0)===\"/\"){var e=a.indexOf(\"://\"),g=a.indexOf(\"/\",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf(\"/\");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e===\"function\")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append(\"&\");a.append(d);a.append(\"=\");a.append(b(g))}if(f){if(h)a.append(\"&\");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf(\"?\")>=0?\"&\":\"?\")+d:a};Sys.Net.WebRequest.registerClass(\"Sys.Net.WebRequest\");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){if(this._ensureReadyStateLoaded())this._executeInternal()},_executeInternal:function(){this._addScriptElementHandlers();document.getElementsByTagName(\"head\")[0].appendChild(this._scriptElement)},_ensureReadyStateLoaded:function(){if(this._useReadyState()&&this._scriptElement.readyState!==\"loaded\"&&this._scriptElement.readyState!==\"complete\"){this._scriptDownloadDelegate=Function.createDelegate(this,this._executeInternal);$addHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);return false}return true},_addScriptElementHandlers:function(){if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(this._useReadyState())$addHandler(this._scriptElement,\"readystatechange\",this._scriptLoadDelegate);else $addHandler(this._scriptElement,\"load\",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener(\"error\",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}if(this._useReadyState()&&this._scriptLoadDelegate)$removeHandler(a,\"readystatechange\",this._scriptLoadDelegate);else $removeHandler(a,\"load\",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener(\"error\",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(this._useReadyState()&&a.readyState!==\"complete\")return;this._completedCallback(a,true)},_useReadyState:function(){return Sys.Browser.agent===Sys.Browser.InternetExplorer&&(Sys.Browser.version<9||(document.documentMode||0)<9)}};Sys._ScriptLoaderTask.registerClass(\"Sys._ScriptLoaderTask\",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug&&a.parentNode)a.parentNode.removeChild(a)};"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxSerialization.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxSerialization.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxSerialization.js\nType._registerScript(\"MicrosoftAjaxSerialization.js\",[\"MicrosoftAjaxCore.js\"]);Type.registerNamespace(\"Sys.Serialization\");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass(\"Sys.Serialization.JavaScriptSerializer\");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\\\\\])\\\\\"\\\\\\\\/Date\\\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\\\+|-)[0-9]{4})?\\\\)\\\\\\\\/\\\\\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"i\");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"g\");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp(\"[^,:{}\\\\[\\\\]0-9.\\\\-+Eaeflnr-u \\\\n\\\\r\\\\t]\",\"g\");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('\"(\\\\\\\\.|[^\"\\\\\\\\])*\"',\"g\");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName=\"__type\";Sys.Serialization.JavaScriptSerializer._init=function(){var c=[\"\\\\u0000\",\"\\\\u0001\",\"\\\\u0002\",\"\\\\u0003\",\"\\\\u0004\",\"\\\\u0005\",\"\\\\u0006\",\"\\\\u0007\",\"\\\\b\",\"\\\\t\",\"\\\\n\",\"\\\\u000b\",\"\\\\f\",\"\\\\r\",\"\\\\u000e\",\"\\\\u000f\",\"\\\\u0010\",\"\\\\u0011\",\"\\\\u0012\",\"\\\\u0013\",\"\\\\u0014\",\"\\\\u0015\",\"\\\\u0016\",\"\\\\u0017\",\"\\\\u0018\",\"\\\\u0019\",\"\\\\u001a\",\"\\\\u001b\",\"\\\\u001c\",\"\\\\u001d\",\"\\\\u001e\",\"\\\\u001f\"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]=\"\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[\"\\\\\"]=new RegExp(\"\\\\\\\\\",\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[\"\\\\\"]=\"\\\\\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='\"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\"']=new RegExp('\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars['\"']='\\\\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('\"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('\"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case \"object\":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append(\"[\");for(c=0;c<b.length;++c){if(c>0)a.append(\",\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append(\"]\")}else{if(Date.isInstanceOfType(b)){a.append('\"\\\\/Date(');a.append(b.getTime());a.append(')\\\\/\"');break}var d=[],f=0;for(var e in b){if(e.startsWith(\"$\"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append(\"{\");var j=false;for(c=0;c<f;c++){var h=b[d[c]];if(typeof h!==\"undefined\"&&typeof h!==\"function\"){if(j)a.append(\",\");else j=true;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(d[c],a,i,g);a.append(\":\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(h,a,i,g)}}a.append(\"}\")}else a.append(\"null\");break;case \"number\":Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);break;case \"string\":Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);break;case \"boolean\":Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);break;default:a.append(\"null\")}};Sys.Serialization.JavaScriptSerializer.serialize=function(b){var a=new Sys.StringBuilder;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b,a,false);return a.toString()};Sys.Serialization.JavaScriptSerializer.deserialize=function(data,secure){if(data.length===0)throw Error.argument(\"data\",Sys.Res.cannotDeserializeEmptyString);try{var exp=data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx,\"$1new Date($2)\");if(secure&&Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx,\"\")))throw null;return eval(\"(\"+exp+\")\")}catch(a){throw Error.argument(\"data\",Sys.Res.cannotDeserializeInvalidJson)}};"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxTimer.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxTimer.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxTimer.js\nType._registerScript(\"Timer.js\",[\"MicrosoftAjaxComponentModel.js\"]);Sys.UI._Timer=function(a){Sys.UI._Timer.initializeBase(this,[a]);this._interval=60000;this._enabled=true;this._postbackPending=false;this._raiseTickDelegate=null;this._endRequestHandlerDelegate=null;this._timer=null;this._pageRequestManager=null;this._uniqueID=null};Sys.UI._Timer.prototype={get_enabled:function(){return this._enabled},set_enabled:function(a){this._enabled=a},get_interval:function(){return this._interval},set_interval:function(a){this._interval=a},get_uniqueID:function(){return this._uniqueID},set_uniqueID:function(a){this._uniqueID=a},dispose:function(){this._stopTimer();if(this._pageRequestManager!==null)this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);Sys.UI._Timer.callBaseMethod(this,\"dispose\")},_doPostback:function(){__doPostBack(this.get_uniqueID(),\"\")},_handleEndRequest:function(c,b){var a=b.get_dataItems()[this.get_id()];if(a)this._update(a[0],a[1]);if(this._postbackPending===true&&this._pageRequestManager!==null&&this._pageRequestManager.get_isInAsyncPostBack()===false){this._postbackPending=false;this._doPostback()}},initialize:function(){Sys.UI._Timer.callBaseMethod(this,\"initialize\");this._raiseTickDelegate=Function.createDelegate(this,this._raiseTick);this._endRequestHandlerDelegate=Function.createDelegate(this,this._handleEndRequest);if(Sys.WebForms&&Sys.WebForms.PageRequestManager)this._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(this._pageRequestManager!==null)this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate);if(this.get_enabled())this._startTimer()},_raiseTick:function(){this._startTimer();if(this._pageRequestManager===null||!this._pageRequestManager.get_isInAsyncPostBack()){this._doPostback();this._postbackPending=false}else this._postbackPending=true},_startTimer:function(){this._timer=window.setTimeout(Function.createDelegate(this,this._raiseTick),this.get_interval())},_stopTimer:function(){if(this._timer!==null){window.clearTimeout(this._timer);this._timer=null}},_update:function(c,b){var a=!this.get_enabled(),d=this.get_interval()!==b;if(!a&&(!c||d)){this._stopTimer();a=true}this.set_enabled(c);this.set_interval(b);if(this.get_enabled()&&a)this._startTimer()}};Sys.UI._Timer.registerClass(\"Sys.UI._Timer\",Sys.UI.Control);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxWebForms.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxWebForms.js\nType._registerScript(\"MicrosoftAjaxWebForms.js\",[\"MicrosoftAjaxCore.js\",\"MicrosoftAjaxSerialization.js\",\"MicrosoftAjaxNetwork.js\",\"MicrosoftAjaxComponentModel.js\"]);Type.registerNamespace(\"Sys.WebForms\");Sys.WebForms.BeginRequestEventArgs=function(c,b,a){Sys.WebForms.BeginRequestEventArgs.initializeBase(this);this._request=c;this._postBackElement=b;this._updatePanelsToUpdate=a};Sys.WebForms.BeginRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request},get_updatePanelsToUpdate:function(){return this._updatePanelsToUpdate?Array.clone(this._updatePanelsToUpdate):[]}};Sys.WebForms.BeginRequestEventArgs.registerClass(\"Sys.WebForms.BeginRequestEventArgs\",Sys.EventArgs);Sys.WebForms.EndRequestEventArgs=function(c,a,b){Sys.WebForms.EndRequestEventArgs.initializeBase(this);this._errorHandled=false;this._error=c;this._dataItems=a||{};this._response=b};Sys.WebForms.EndRequestEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_error:function(){return this._error},get_errorHandled:function(){return this._errorHandled},set_errorHandled:function(a){this._errorHandled=a},get_response:function(){return this._response}};Sys.WebForms.EndRequestEventArgs.registerClass(\"Sys.WebForms.EndRequestEventArgs\",Sys.EventArgs);Sys.WebForms.InitializeRequestEventArgs=function(c,b,a){Sys.WebForms.InitializeRequestEventArgs.initializeBase(this);this._request=c;this._postBackElement=b;this._updatePanelsToUpdate=a};Sys.WebForms.InitializeRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request},get_updatePanelsToUpdate:function(){return this._updatePanelsToUpdate?Array.clone(this._updatePanelsToUpdate):[]},set_updatePanelsToUpdate:function(a){this._updated=true;this._updatePanelsToUpdate=a}};Sys.WebForms.InitializeRequestEventArgs.registerClass(\"Sys.WebForms.InitializeRequestEventArgs\",Sys.CancelEventArgs);Sys.WebForms.PageLoadedEventArgs=function(b,a,c){Sys.WebForms.PageLoadedEventArgs.initializeBase(this);this._panelsUpdated=b;this._panelsCreated=a;this._dataItems=c||{}};Sys.WebForms.PageLoadedEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsCreated:function(){return this._panelsCreated},get_panelsUpdated:function(){return this._panelsUpdated}};Sys.WebForms.PageLoadedEventArgs.registerClass(\"Sys.WebForms.PageLoadedEventArgs\",Sys.EventArgs);Sys.WebForms.PageLoadingEventArgs=function(b,a,c){Sys.WebForms.PageLoadingEventArgs.initializeBase(this);this._panelsUpdating=b;this._panelsDeleting=a;this._dataItems=c||{}};Sys.WebForms.PageLoadingEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsDeleting:function(){return this._panelsDeleting},get_panelsUpdating:function(){return this._panelsUpdating}};Sys.WebForms.PageLoadingEventArgs.registerClass(\"Sys.WebForms.PageLoadingEventArgs\",Sys.EventArgs);Sys._ScriptLoader=function(){this._scriptsToLoad=null;this._sessions=[];this._scriptLoadedDelegate=Function.createDelegate(this,this._scriptLoadedHandler)};Sys._ScriptLoader.prototype={dispose:function(){this._stopSession();this._loading=false;if(this._events)delete this._events;this._sessions=null;this._currentSession=null;this._scriptLoadedDelegate=null},loadScripts:function(d,b,c,a){var e={allScriptsLoadedCallback:b,scriptLoadFailedCallback:c,scriptLoadTimeoutCallback:a,scriptsToLoad:this._scriptsToLoad,scriptTimeout:d};this._scriptsToLoad=null;this._sessions[this._sessions.length]=e;if(!this._loading)this._nextSession()},queueCustomScriptTag:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,a)},queueScriptBlock:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{text:a})},queueScriptReference:function(a,b){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{src:a,fallback:b})},_createScriptElement:function(c){var a=document.createElement(\"script\");a.type=\"text/javascript\";for(var b in c)a[b]=c[b];return a},_loadScriptsInternal:function(){var c=this._currentSession;if(c.scriptsToLoad&&c.scriptsToLoad.length>0){var b=Array.dequeue(c.scriptsToLoad),f=this._scriptLoadedDelegate;if(b.fallback){var g=b.fallback;delete b.fallback;var d=this;f=function(b,a){a||function(){var a=d._createScriptElement({src:g});d._currentTask=new Sys._ScriptLoaderTask(a,d._scriptLoadedDelegate);d._currentTask.execute()}()}}var a=this._createScriptElement(b);if(a.text&&Sys.Browser.agent===Sys.Browser.Safari){a.innerHTML=a.text;delete a.text}if(typeof b.src===\"string\"){this._currentTask=new Sys._ScriptLoaderTask(a,f);this._currentTask.execute()}else{document.getElementsByTagName(\"head\")[0].appendChild(a);Sys._ScriptLoaderTask._clearScript(a);this._loadScriptsInternal()}}else{this._stopSession();var e=c.allScriptsLoadedCallback;if(e)e(this);this._nextSession()}},_nextSession:function(){if(this._sessions.length===0){this._loading=false;this._currentSession=null;return}this._loading=true;var a=Array.dequeue(this._sessions);this._currentSession=a;if(a.scriptTimeout>0)this._timeoutCookie=window.setTimeout(Function.createDelegate(this,this._scriptLoadTimeoutHandler),a.scriptTimeout*1000);this._loadScriptsInternal()},_raiseError:function(){var b=this._currentSession.scriptLoadFailedCallback,a=this._currentTask.get_scriptElement();this._stopSession();if(b){b(this,a);this._nextSession()}else{this._loading=false;throw Sys._ScriptLoader._errorScriptLoadFailed(a.src)}},_scriptLoadedHandler:function(a,b){if(b){Array.add(Sys._ScriptLoader._getLoadedScripts(),a.src);this._currentTask.dispose();this._currentTask=null;this._loadScriptsInternal()}else this._raiseError()},_scriptLoadTimeoutHandler:function(){var a=this._currentSession.scriptLoadTimeoutCallback;this._stopSession();if(a)a(this);this._nextSession()},_stopSession:function(){if(this._timeoutCookie){window.clearTimeout(this._timeoutCookie);this._timeoutCookie=null}if(this._currentTask){this._currentTask.dispose();this._currentTask=null}}};Sys._ScriptLoader.registerClass(\"Sys._ScriptLoader\",null,Sys.IDisposable);Sys._ScriptLoader.getInstance=function(){var a=Sys._ScriptLoader._activeInstance;if(!a)a=Sys._ScriptLoader._activeInstance=new Sys._ScriptLoader;return a};Sys._ScriptLoader.isScriptLoaded=function(b){var a=document.createElement(\"script\");a.src=b;return Array.contains(Sys._ScriptLoader._getLoadedScripts(),a.src)};Sys._ScriptLoader.readLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){var c=Sys._ScriptLoader._referencedScripts=[],d=document.getElementsByTagName(\"script\");for(var b=d.length-1;b>=0;b--){var e=d[b],a=e.src;if(a.length)if(!Array.contains(c,a))Array.add(c,a)}}};Sys._ScriptLoader._errorScriptLoadFailed=function(b){var a;a=Sys.Res.scriptLoadFailed;var d=\"Sys.ScriptLoadFailedException: \"+String.format(a,b),c=Error.create(d,{name:\"Sys.ScriptLoadFailedException\",\"scriptUrl\":b});c.popStackFrame();return c};Sys._ScriptLoader._getLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){Sys._ScriptLoader._referencedScripts=[];Sys._ScriptLoader.readLoadedScripts()}return Sys._ScriptLoader._referencedScripts};Sys.WebForms.PageRequestManager=function(){this._form=null;this._activeDefaultButton=null;this._activeDefaultButtonClicked=false;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._updatePanelHasChildrenAsTriggers=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._scriptManagerID=null;this._pageLoadedHandler=null;this._additionalInput=null;this._onsubmit=null;this._onSubmitStatements=[];this._originalDoPostBack=null;this._originalDoPostBackWithOptions=null;this._originalFireDefaultButton=null;this._originalDoCallback=null;this._isCrossPost=false;this._postBackSettings=null;this._request=null;this._onFormSubmitHandler=null;this._onFormElementClickHandler=null;this._onWindowUnloadHandler=null;this._asyncPostBackTimeout=null;this._controlIDToFocus=null;this._scrollPosition=null;this._processingRequest=false;this._scriptDisposes={};this._transientFields=[\"__VIEWSTATEENCRYPTED\",\"__VIEWSTATEFIELDCOUNT\"];this._textTypes=/^(text|password|hidden|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i};Sys.WebForms.PageRequestManager.prototype={_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_isInAsyncPostBack:function(){return this._request!==null},add_beginRequest:function(a){this._get_eventHandlerList().addHandler(\"beginRequest\",a)},remove_beginRequest:function(a){this._get_eventHandlerList().removeHandler(\"beginRequest\",a)},add_endRequest:function(a){this._get_eventHandlerList().addHandler(\"endRequest\",a)},remove_endRequest:function(a){this._get_eventHandlerList().removeHandler(\"endRequest\",a)},add_initializeRequest:function(a){this._get_eventHandlerList().addHandler(\"initializeRequest\",a)},remove_initializeRequest:function(a){this._get_eventHandlerList().removeHandler(\"initializeRequest\",a)},add_pageLoaded:function(a){this._get_eventHandlerList().addHandler(\"pageLoaded\",a)},remove_pageLoaded:function(a){this._get_eventHandlerList().removeHandler(\"pageLoaded\",a)},add_pageLoading:function(a){this._get_eventHandlerList().addHandler(\"pageLoading\",a)},remove_pageLoading:function(a){this._get_eventHandlerList().removeHandler(\"pageLoading\",a)},abortPostBack:function(){if(!this._processingRequest&&this._request){this._request.get_executor().abort();this._request=null}},beginAsyncPostBack:function(c,a,f,d,e){if(d&&typeof Page_ClientValidate===\"function\"&&!Page_ClientValidate(e||null))return;this._postBackSettings=this._createPostBackSettings(true,c,a);var b=this._form;b.__EVENTTARGET.value=a||\"\";b.__EVENTARGUMENT.value=f||\"\";this._isCrossPost=false;this._additionalInput=null;this._onFormSubmit()},_cancelPendingCallbacks:function(){for(var a=0,e=window.__pendingCallbacks.length;a<e;a++){var c=window.__pendingCallbacks[a];if(c){if(!c.async)window.__synchronousCallBackIndex=-1;window.__pendingCallbacks[a]=null;var d=\"__CALLBACKFRAME\"+a,b=document.getElementById(d);if(b)b.parentNode.removeChild(b)}}},_commitControls:function(a,b){if(a){this._updatePanelIDs=a.updatePanelIDs;this._updatePanelClientIDs=a.updatePanelClientIDs;this._updatePanelHasChildrenAsTriggers=a.updatePanelHasChildrenAsTriggers;this._asyncPostBackControlIDs=a.asyncPostBackControlIDs;this._asyncPostBackControlClientIDs=a.asyncPostBackControlClientIDs;this._postBackControlIDs=a.postBackControlIDs;this._postBackControlClientIDs=a.postBackControlClientIDs}if(typeof b!==\"undefined\"&&b!==null)this._asyncPostBackTimeout=b*1000},_createHiddenField:function(c,d){var b,a=document.getElementById(c);if(a)if(!a._isContained)a.parentNode.removeChild(a);else b=a.parentNode;if(!b){b=document.createElement(\"span\");b.style.cssText=\"display:none !important\";this._form.appendChild(b)}b.innerHTML=\"<input type='hidden' />\";a=b.childNodes[0];a._isContained=true;a.id=a.name=c;a.value=d},_createPageRequestManagerTimeoutError:function(){var b=\"Sys.WebForms.PageRequestManagerTimeoutException: \"+Sys.WebForms.Res.PRM_TimeoutError,a=Error.create(b,{name:\"Sys.WebForms.PageRequestManagerTimeoutException\"});a.popStackFrame();return a},_createPageRequestManagerServerError:function(a,d){var c=\"Sys.WebForms.PageRequestManagerServerErrorException: \"+(d||String.format(Sys.WebForms.Res.PRM_ServerError,a)),b=Error.create(c,{name:\"Sys.WebForms.PageRequestManagerServerErrorException\",httpStatusCode:a});b.popStackFrame();return b},_createPageRequestManagerParserError:function(b){var c=\"Sys.WebForms.PageRequestManagerParserErrorException: \"+String.format(Sys.WebForms.Res.PRM_ParserError,b),a=Error.create(c,{name:\"Sys.WebForms.PageRequestManagerParserErrorException\"});a.popStackFrame();return a},_createPanelID:function(e,b){var c=b.asyncTarget,a=this._ensureUniqueIds(e||b.panelsToUpdate),d=a instanceof Array?a.join(\",\"):a||this._scriptManagerID;if(c)d+=\"|\"+c;return encodeURIComponent(this._scriptManagerID)+\"=\"+encodeURIComponent(d)+\"&\"},_createPostBackSettings:function(d,a,c,b){return {async:d,asyncTarget:c,panelsToUpdate:a,sourceElement:b}},_convertToClientIDs:function(a,f,e,d){if(a)for(var b=0,h=a.length;b<h;b+=d?2:1){var c=a[b],g=(d?a[b+1]:\"\")||this._uniqueIDToClientID(c);Array.add(f,c);Array.add(e,g)}},dispose:function(){if(this._form){Sys.UI.DomEvent.removeHandler(this._form,\"submit\",this._onFormSubmitHandler);Sys.UI.DomEvent.removeHandler(this._form,\"click\",this._onFormElementClickHandler);Sys.UI.DomEvent.removeHandler(window,\"unload\",this._onWindowUnloadHandler);Sys.UI.DomEvent.removeHandler(window,\"load\",this._pageLoadedHandler)}if(this._originalDoPostBack){window.__doPostBack=this._originalDoPostBack;this._originalDoPostBack=null}if(this._originalDoPostBackWithOptions){window.WebForm_DoPostBackWithOptions=this._originalDoPostBackWithOptions;this._originalDoPostBackWithOptions=null}if(this._originalFireDefaultButton){window.WebForm_FireDefaultButton=this._originalFireDefaultButton;this._originalFireDefaultButton=null}if(this._originalDoCallback){window.WebForm_DoCallback=this._originalDoCallback;this._originalDoCallback=null}this._form=null;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._asyncPostBackTimeout=null;this._scrollPosition=null;this._activeElement=null},_doCallback:function(d,b,c,f,a,e){if(!this.get_isInAsyncPostBack())this._originalDoCallback(d,b,c,f,a,e)},_doPostBack:function(a,k){var f=window.event;if(!f){var d=arguments.callee?arguments.callee.caller:null;if(d){var j=30;while(d.arguments.callee.caller&&--j)d=d.arguments.callee.caller;f=j&&d.arguments.length?d.arguments[0]:null}}this._additionalInput=null;var h=this._form;if(a===null||typeof a===\"undefined\"||this._isCrossPost){this._postBackSettings=this._createPostBackSettings(false);this._isCrossPost=false}else{var c=this._masterPageUniqueID,l=this._uniqueIDToClientID(a),g=document.getElementById(l);if(!g&&c)if(a.indexOf(c+\"$\")===0)g=document.getElementById(l.substr(c.length+1));if(!g)if(Array.contains(this._asyncPostBackControlIDs,a))this._postBackSettings=this._createPostBackSettings(true,null,a);else if(Array.contains(this._postBackControlIDs,a))this._postBackSettings=this._createPostBackSettings(false);else{var e=this._findNearestElement(a);if(e)this._postBackSettings=this._getPostBackSettings(e,a);else{if(c){c+=\"$\";if(a.indexOf(c)===0)e=this._findNearestElement(a.substr(c.length))}if(e)this._postBackSettings=this._getPostBackSettings(e,a);else{var b;try{b=f?f.target||f.srcElement:null}catch(n){}b=b||this._activeElement;var m=/__doPostBack\\(|WebForm_DoPostBackWithOptions\\(/;function i(b){b=b?b.toString():\"\";return m.test(b)&&b.indexOf(\"'\"+a+\"'\")!==-1||b.indexOf('\"'+a+'\"')!==-1}if(b&&(b.name===a||i(b.href)||i(b.onclick)||i(b.onchange)))this._postBackSettings=this._getPostBackSettings(b,a);else this._postBackSettings=this._createPostBackSettings(false)}}}else this._postBackSettings=this._getPostBackSettings(g,a)}if(!this._postBackSettings.async){h.onsubmit=this._onsubmit;this._originalDoPostBack(a,k);h.onsubmit=null;return}h.__EVENTTARGET.value=a;h.__EVENTARGUMENT.value=k;this._onFormSubmit()},_doPostBackWithOptions:function(a){this._isCrossPost=a&&a.actionUrl;var d=true;if(a.validation)if(typeof Page_ClientValidate==\"function\")d=Page_ClientValidate(a.validationGroup);if(d){if(typeof a.actionUrl!=\"undefined\"&&a.actionUrl!=null&&a.actionUrl.length>0)theForm.action=a.actionUrl;if(a.trackFocus){var c=theForm.elements[\"__LASTFOCUS\"];if(typeof c!=\"undefined\"&&c!=null)if(typeof document.activeElement==\"undefined\")c.value=a.eventTarget;else{var b=document.activeElement;if(typeof b!=\"undefined\"&&b!=null)if(typeof b.id!=\"undefined\"&&b.id!=null&&b.id.length>0)c.value=b.id;else if(typeof b.name!=\"undefined\")c.value=b.name}}}if(a.clientSubmit)this._doPostBack(a.eventTarget,a.eventArgument)},_elementContains:function(b,a){while(a){if(a===b)return true;a=a.parentNode}return false},_endPostBack:function(a,d,f){if(this._request===d.get_webRequest()){this._processingRequest=false;this._additionalInput=null;this._request=null}var e=this._get_eventHandlerList().getHandler(\"endRequest\"),b=false;if(e){var c=new Sys.WebForms.EndRequestEventArgs(a,f?f.dataItems:{},d);e(this,c);b=c.get_errorHandled()}if(a&&!b)throw a},_ensureUniqueIds:function(a){if(!a)return a;a=a instanceof Array?a:[a];var c=[];for(var b=0,f=a.length;b<f;b++){var e=a[b],d=Array.indexOf(this._updatePanelClientIDs,e);c.push(d>-1?this._updatePanelIDs[d]:e)}return c},_findNearestElement:function(a){while(a.length>0){var d=this._uniqueIDToClientID(a),c=document.getElementById(d);if(c)return c;var b=a.lastIndexOf(\"$\");if(b===-1)return null;a=a.substring(0,b)}return null},_findText:function(b,a){var c=Math.max(0,a-20),d=Math.min(b.length,a+20);return b.substring(c,d)},_fireDefaultButton:function(a,d){if(a.keyCode===13){var c=a.srcElement||a.target;if(!c||c.tagName.toLowerCase()!==\"textarea\"){var b=document.getElementById(d);if(b&&typeof b.click!==\"undefined\"){this._activeDefaultButton=b;this._activeDefaultButtonClicked=false;try{b.click()}finally{this._activeDefaultButton=null}a.cancelBubble=true;if(typeof a.stopPropagation===\"function\")a.stopPropagation();return false}}}return true},_getPageLoadedEventArgs:function(n,c){var m=[],l=[],k=c?c.version4:false,d=c?c.updatePanelData:null,e,g,h,b;if(!d){e=this._updatePanelIDs;g=this._updatePanelClientIDs;h=null;b=null}else{e=d.updatePanelIDs;g=d.updatePanelClientIDs;h=d.childUpdatePanelIDs;b=d.panelsToRefreshIDs}var a,f,j,i;if(b)for(a=0,f=b.length;a<f;a+=k?2:1){j=b[a];i=(k?b[a+1]:\"\")||this._uniqueIDToClientID(j);Array.add(m,document.getElementById(i))}for(a=0,f=e.length;a<f;a++)if(n||Array.indexOf(h,e[a])!==-1)Array.add(l,document.getElementById(g[a]));return new Sys.WebForms.PageLoadedEventArgs(m,l,c?c.dataItems:{})},_getPageLoadingEventArgs:function(f){var j=[],i=[],c=f.updatePanelData,k=c.oldUpdatePanelIDs,l=c.oldUpdatePanelClientIDs,n=c.updatePanelIDs,m=c.childUpdatePanelIDs,d=c.panelsToRefreshIDs,a,e,b,g,h=f.version4;for(a=0,e=d.length;a<e;a+=h?2:1){b=d[a];g=(h?d[a+1]:\"\")||this._uniqueIDToClientID(b);Array.add(j,document.getElementById(g))}for(a=0,e=k.length;a<e;a++){b=k[a];if(Array.indexOf(d,b)===-1&&(Array.indexOf(n,b)===-1||Array.indexOf(m,b)>-1))Array.add(i,document.getElementById(l[a]))}return new Sys.WebForms.PageLoadingEventArgs(j,i,f.dataItems)},_getPostBackSettings:function(a,c){var d=a,b=null;while(a){if(a.id){if(!b&&Array.contains(this._asyncPostBackControlClientIDs,a.id))b=this._createPostBackSettings(true,null,c,d);else if(!b&&Array.contains(this._postBackControlClientIDs,a.id))return this._createPostBackSettings(false);else{var e=Array.indexOf(this._updatePanelClientIDs,a.id);if(e!==-1)if(this._updatePanelHasChildrenAsTriggers[e])return this._createPostBackSettings(true,[this._updatePanelIDs[e]],c,d);else return this._createPostBackSettings(true,null,c,d)}if(!b&&this._matchesParentIDInList(a.id,this._asyncPostBackControlClientIDs))b=this._createPostBackSettings(true,null,c,d);else if(!b&&this._matchesParentIDInList(a.id,this._postBackControlClientIDs))return this._createPostBackSettings(false)}a=a.parentNode}if(!b)return this._createPostBackSettings(false);else return b},_getScrollPosition:function(){var a=document.documentElement;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else{a=document.body;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else if(this._validPosition(window.pageXOffset)||this._validPosition(window.pageYOffset))return {x:window.pageXOffset,y:window.pageYOffset};else return {x:0,y:0}}},_initializeInternal:function(f,g,a,b,e,c,d){if(this._prmInitialized)throw Error.invalidOperation(Sys.WebForms.Res.PRM_CannotRegisterTwice);this._prmInitialized=true;this._masterPageUniqueID=d;this._scriptManagerID=f;this._form=Sys.UI.DomElement.resolveElement(g);this._onsubmit=this._form.onsubmit;this._form.onsubmit=null;this._onFormSubmitHandler=Function.createDelegate(this,this._onFormSubmit);this._onFormElementClickHandler=Function.createDelegate(this,this._onFormElementClick);this._onWindowUnloadHandler=Function.createDelegate(this,this._onWindowUnload);Sys.UI.DomEvent.addHandler(this._form,\"submit\",this._onFormSubmitHandler);Sys.UI.DomEvent.addHandler(this._form,\"click\",this._onFormElementClickHandler);Sys.UI.DomEvent.addHandler(window,\"unload\",this._onWindowUnloadHandler);this._originalDoPostBack=window.__doPostBack;if(this._originalDoPostBack)window.__doPostBack=Function.createDelegate(this,this._doPostBack);this._originalDoPostBackWithOptions=window.WebForm_DoPostBackWithOptions;if(this._originalDoPostBackWithOptions)window.WebForm_DoPostBackWithOptions=Function.createDelegate(this,this._doPostBackWithOptions);this._originalFireDefaultButton=window.WebForm_FireDefaultButton;if(this._originalFireDefaultButton)window.WebForm_FireDefaultButton=Function.createDelegate(this,this._fireDefaultButton);this._originalDoCallback=window.WebForm_DoCallback;if(this._originalDoCallback)window.WebForm_DoCallback=Function.createDelegate(this,this._doCallback);this._pageLoadedHandler=Function.createDelegate(this,this._pageLoadedInitialLoad);Sys.UI.DomEvent.addHandler(window,\"load\",this._pageLoadedHandler);if(a)this._updateControls(a,b,e,c,true)},_matchesParentIDInList:function(c,b){for(var a=0,d=b.length;a<d;a++)if(c.startsWith(b[a]+\"_\"))return true;return false},_onFormElementActive:function(a,d,e){if(a.disabled)return;this._activeElement=a;this._postBackSettings=this._getPostBackSettings(a,a.name);if(a.name){var b=a.tagName.toUpperCase();if(b===\"INPUT\"){var c=a.type;if(c===\"submit\")this._additionalInput=encodeURIComponent(a.name)+\"=\"+encodeURIComponent(a.value);else if(c===\"image\")this._additionalInput=encodeURIComponent(a.name)+\".x=\"+d+\"&\"+encodeURIComponent(a.name)+\".y=\"+e}else if(b===\"BUTTON\"&&a.name.length!==0&&a.type===\"submit\")this._additionalInput=encodeURIComponent(a.name)+\"=\"+encodeURIComponent(a.value)}},_onFormElementClick:function(a){this._activeDefaultButtonClicked=a.target===this._activeDefaultButton;this._onFormElementActive(a.target,a.offsetX,a.offsetY)},_onFormSubmit:function(i){var f,x,h=true,z=this._isCrossPost;this._isCrossPost=false;if(this._onsubmit)h=this._onsubmit();if(h)for(f=0,x=this._onSubmitStatements.length;f<x;f++)if(!this._onSubmitStatements[f]()){h=false;break}if(!h){if(i)i.preventDefault();return}var w=this._form;if(z)return;if(this._activeDefaultButton&&!this._activeDefaultButtonClicked)this._onFormElementActive(this._activeDefaultButton,0,0);if(!this._postBackSettings||!this._postBackSettings.async)return;var b=new Sys.StringBuilder,s=w.elements,B=s.length,t=this._createPanelID(null,this._postBackSettings);b.append(t);for(f=0;f<B;f++){var e=s[f],g=e.name;if(typeof g===\"undefined\"||g===null||g.length===0||g===this._scriptManagerID)continue;var n=e.tagName.toUpperCase();if(n===\"INPUT\"){var p=e.type;if(this._textTypes.test(p)||(p===\"checkbox\"||p===\"radio\")&&e.checked){b.append(encodeURIComponent(g));b.append(\"=\");b.append(encodeURIComponent(e.value));b.append(\"&\")}}else if(n===\"SELECT\"){var A=e.options.length;for(var q=0;q<A;q++){var u=e.options[q];if(u.selected){b.append(encodeURIComponent(g));b.append(\"=\");b.append(encodeURIComponent(u.value));b.append(\"&\")}}}else if(n===\"TEXTAREA\"){b.append(encodeURIComponent(g));b.append(\"=\");b.append(encodeURIComponent(e.value));b.append(\"&\")}}b.append(\"__ASYNCPOST=true&\");if(this._additionalInput){b.append(this._additionalInput);this._additionalInput=null}var c=new Sys.Net.WebRequest,a=w.action;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var r=a.indexOf(\"#\");if(r!==-1)a=a.substr(0,r);var o=\"\",v=\"\",m=a.indexOf(\"?\");if(m!==-1){v=a.substr(m);a=a.substr(0,m)}if(/^https?\\:\\/\\/.*$/gi.test(a)){var y=a.indexOf(\"//\")+2,l=a.indexOf(\"/\",y);if(l===-1){o=a;a=\"\"}else{o=a.substr(0,l);a=a.substr(l)}}a=o+encodeURI(decodeURI(a))+v}c.set_url(a);c.get_headers()[\"X-MicrosoftAjax\"]=\"Delta=true\";c.get_headers()[\"Cache-Control\"]=\"no-cache\";c.set_timeout(this._asyncPostBackTimeout);c.add_completed(Function.createDelegate(this,this._onFormSubmitCompleted));c.set_body(b.toString());var j,d,k=this._get_eventHandlerList().getHandler(\"initializeRequest\");if(k){j=this._postBackSettings.panelsToUpdate;d=new Sys.WebForms.InitializeRequestEventArgs(c,this._postBackSettings.sourceElement,j);k(this,d);h=!d.get_cancel()}if(!h){if(i)i.preventDefault();return}if(d&&d._updated){j=d.get_updatePanelsToUpdate();c.set_body(c.get_body().replace(t,this._createPanelID(j,this._postBackSettings)))}this._scrollPosition=this._getScrollPosition();this.abortPostBack();k=this._get_eventHandlerList().getHandler(\"beginRequest\");if(k){d=new Sys.WebForms.BeginRequestEventArgs(c,this._postBackSettings.sourceElement,j||this._postBackSettings.panelsToUpdate);k(this,d)}if(this._originalDoCallback)this._cancelPendingCallbacks();this._request=c;this._processingRequest=false;c.invoke();if(i)i.preventDefault()},_onFormSubmitCompleted:function(c){this._processingRequest=true;if(c.get_timedOut()){this._endPostBack(this._createPageRequestManagerTimeoutError(),c,null);return}if(c.get_aborted()){this._endPostBack(null,c,null);return}if(!this._request||c.get_webRequest()!==this._request)return;if(c.get_statusCode()!==200){this._endPostBack(this._createPageRequestManagerServerError(c.get_statusCode()),c,null);return}var a=this._parseDelta(c);if(!a)return;var b,e;if(a.asyncPostBackControlIDsNode&&a.postBackControlIDsNode&&a.updatePanelIDsNode&&a.panelsToRefreshNode&&a.childUpdatePanelIDsNode){var r=this._updatePanelIDs,n=this._updatePanelClientIDs,i=a.childUpdatePanelIDsNode.content,p=i.length?i.split(\",\"):[],m=this._splitNodeIntoArray(a.asyncPostBackControlIDsNode),o=this._splitNodeIntoArray(a.postBackControlIDsNode),q=this._splitNodeIntoArray(a.updatePanelIDsNode),g=this._splitNodeIntoArray(a.panelsToRefreshNode),h=a.version4;for(b=0,e=g.length;b<e;b+=h?2:1){var j=(h?g[b+1]:\"\")||this._uniqueIDToClientID(g[b]);if(!document.getElementById(j)){this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel,j)),c,a);return}}var f=this._processUpdatePanelArrays(q,m,o,h);f.oldUpdatePanelIDs=r;f.oldUpdatePanelClientIDs=n;f.childUpdatePanelIDs=p;f.panelsToRefreshIDs=g;a.updatePanelData=f}a.dataItems={};var d;for(b=0,e=a.dataItemNodes.length;b<e;b++){d=a.dataItemNodes[b];a.dataItems[d.id]=d.content}for(b=0,e=a.dataItemJsonNodes.length;b<e;b++){d=a.dataItemJsonNodes[b];a.dataItems[d.id]=Sys.Serialization.JavaScriptSerializer.deserialize(d.content)}var l=this._get_eventHandlerList().getHandler(\"pageLoading\");if(l)l(this,this._getPageLoadingEventArgs(a));Sys._ScriptLoader.readLoadedScripts();Sys.Application.beginCreateComponents();var k=Sys._ScriptLoader.getInstance();this._queueScripts(k,a.scriptBlockNodes,true,false);this._processingRequest=true;k.loadScripts(0,Function.createDelegate(this,Function.createCallback(this._scriptIncludesLoadComplete,a)),Function.createDelegate(this,Function.createCallback(this._scriptIncludesLoadFailed,a)),null)},_onWindowUnload:function(){this.dispose()},_pageLoaded:function(a,c){var b=this._get_eventHandlerList().getHandler(\"pageLoaded\");if(b)b(this,this._getPageLoadedEventArgs(a,c));if(!a)Sys.Application.raiseLoad()},_pageLoadedInitialLoad:function(){this._pageLoaded(true,null)},_parseDelta:function(h){var c=h.get_responseData(),d,i,E,F,D,b=0,e=null,k=[];while(b<c.length){d=c.indexOf(\"|\",b);if(d===-1){e=this._findText(c,b);break}i=parseInt(c.substring(b,d),10);if(i%1!==0){e=this._findText(c,b);break}b=d+1;d=c.indexOf(\"|\",b);if(d===-1){e=this._findText(c,b);break}E=c.substring(b,d);b=d+1;d=c.indexOf(\"|\",b);if(d===-1){e=this._findText(c,b);break}F=c.substring(b,d);b=d+1;if(b+i>=c.length){e=this._findText(c,c.length);break}D=c.substr(b,i);b+=i;if(c.charAt(b)!==\"|\"){e=this._findText(c,b);break}b++;Array.add(k,{type:E,id:F,content:D})}if(e){this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_ParserErrorDetails,e)),h,null);return null}var x=[],w=[],q=[],j=[],t=[],C=[],A=[],z=[],v=[],s=[],m,p,u,n,o,r,y,g;for(var l=0,G=k.length;l<G;l++){var a=k[l];switch(a.type){case \"#\":g=a;break;case \"updatePanel\":Array.add(x,a);break;case \"hiddenField\":Array.add(w,a);break;case \"arrayDeclaration\":Array.add(q,a);break;case \"scriptBlock\":Array.add(j,a);break;case \"fallbackScript\":j[j.length-1].fallback=a.id;case \"scriptStartupBlock\":Array.add(t,a);break;case \"expando\":Array.add(C,a);break;case \"onSubmit\":Array.add(A,a);break;case \"asyncPostBackControlIDs\":m=a;break;case \"postBackControlIDs\":p=a;break;case \"updatePanelIDs\":u=a;break;case \"asyncPostBackTimeout\":n=a;break;case \"childUpdatePanelIDs\":o=a;break;case \"panelsToRefreshIDs\":r=a;break;case \"formAction\":y=a;break;case \"dataItem\":Array.add(z,a);break;case \"dataItemJson\":Array.add(v,a);break;case \"scriptDispose\":Array.add(s,a);break;case \"pageRedirect\":if(g&&parseFloat(g.content)>=4)a.content=unescape(a.content);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var f=document.createElement(\"a\");f.style.display=\"none\";f.attachEvent(\"onclick\",B);f.href=a.content;this._form.parentNode.insertBefore(f,this._form);f.click();f.detachEvent(\"onclick\",B);this._form.parentNode.removeChild(f);function B(a){a.cancelBubble=true}}else window.location.href=a.content;return null;case \"error\":this._endPostBack(this._createPageRequestManagerServerError(Number.parseInvariant(a.id),a.content),h,null);return null;case \"pageTitle\":document.title=a.content;break;case \"focus\":this._controlIDToFocus=a.content;break;default:this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_UnknownToken,a.type)),h,null);return null}}return {version4:g?parseFloat(g.content)>=4:false,executor:h,updatePanelNodes:x,hiddenFieldNodes:w,arrayDeclarationNodes:q,scriptBlockNodes:j,scriptStartupNodes:t,expandoNodes:C,onSubmitNodes:A,dataItemNodes:z,dataItemJsonNodes:v,scriptDisposeNodes:s,asyncPostBackControlIDsNode:m,postBackControlIDsNode:p,updatePanelIDsNode:u,asyncPostBackTimeoutNode:n,childUpdatePanelIDsNode:o,panelsToRefreshNode:r,formActionNode:y}},_processUpdatePanelArrays:function(e,q,r,f){var d,c,b;if(e){var i=e.length,j=f?2:1;d=new Array(i/j);c=new Array(i/j);b=new Array(i/j);for(var g=0,h=0;g<i;g+=j,h++){var p,a=e[g],k=f?e[g+1]:\"\";p=a.charAt(0)===\"t\";a=a.substr(1);if(!k)k=this._uniqueIDToClientID(a);b[h]=p;d[h]=a;c[h]=k}}else{d=[];c=[];b=[]}var n=[],l=[];this._convertToClientIDs(q,n,l,f);var o=[],m=[];this._convertToClientIDs(r,o,m,f);return {updatePanelIDs:d,updatePanelClientIDs:c,updatePanelHasChildrenAsTriggers:b,asyncPostBackControlIDs:n,asyncPostBackControlClientIDs:l,postBackControlIDs:o,postBackControlClientIDs:m}},_queueScripts:function(scriptLoader,scriptBlockNodes,queueIncludes,queueBlocks){for(var i=0,l=scriptBlockNodes.length;i<l;i++){var scriptBlockType=scriptBlockNodes[i].id;switch(scriptBlockType){case \"ScriptContentNoTags\":if(!queueBlocks)continue;scriptLoader.queueScriptBlock(scriptBlockNodes[i].content);break;case \"ScriptContentWithTags\":var scriptTagAttributes;eval(\"scriptTagAttributes = \"+scriptBlockNodes[i].content);if(scriptTagAttributes.src){if(!queueIncludes||Sys._ScriptLoader.isScriptLoaded(scriptTagAttributes.src))continue}else if(!queueBlocks)continue;scriptLoader.queueCustomScriptTag(scriptTagAttributes);break;case \"ScriptPath\":var script=scriptBlockNodes[i];if(!queueIncludes||Sys._ScriptLoader.isScriptLoaded(script.content))continue;scriptLoader.queueScriptReference(script.content,script.fallback)}}},_registerDisposeScript:function(a,b){if(!this._scriptDisposes[a])this._scriptDisposes[a]=[b];else Array.add(this._scriptDisposes[a],b)},_scriptIncludesLoadComplete:function(e,b){if(b.executor.get_webRequest()!==this._request)return;this._commitControls(b.updatePanelData,b.asyncPostBackTimeoutNode?b.asyncPostBackTimeoutNode.content:null);if(b.formActionNode)this._form.action=b.formActionNode.content;var a,d,c;for(a=0,d=b.updatePanelNodes.length;a<d;a++){c=b.updatePanelNodes[a];var j=document.getElementById(c.id);if(!j){this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel,c.id)),b.executor,b);return}this._updatePanel(j,c.content)}for(a=0,d=b.scriptDisposeNodes.length;a<d;a++){c=b.scriptDisposeNodes[a];this._registerDisposeScript(c.id,c.content)}for(a=0,d=this._transientFields.length;a<d;a++){var g=document.getElementById(this._transientFields[a]);if(g){var k=g._isContained?g.parentNode:g;k.parentNode.removeChild(k)}}for(a=0,d=b.hiddenFieldNodes.length;a<d;a++){c=b.hiddenFieldNodes[a];this._createHiddenField(c.id,c.content)}if(b.scriptsFailed)throw Sys._ScriptLoader._errorScriptLoadFailed(b.scriptsFailed.src,b.scriptsFailed.multipleCallbacks);this._queueScripts(e,b.scriptBlockNodes,false,true);var i=\"\";for(a=0,d=b.arrayDeclarationNodes.length;a<d;a++){c=b.arrayDeclarationNodes[a];i+=\"Sys.WebForms.PageRequestManager._addArrayElement('\"+c.id+\"', \"+c.content+\");\\r\\n\"}var h=\"\";for(a=0,d=b.expandoNodes.length;a<d;a++){c=b.expandoNodes[a];h+=c.id+\" = \"+c.content+\"\\r\\n\"}if(i.length)e.queueScriptBlock(i);if(h.length)e.queueScriptBlock(h);this._queueScripts(e,b.scriptStartupNodes,true,true);var f=\"\";for(a=0,d=b.onSubmitNodes.length;a<d;a++){if(a===0)f=\"Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, function() {\\r\\n\";f+=b.onSubmitNodes[a].content+\"\\r\\n\"}if(f.length){f+=\"\\r\\nreturn true;\\r\\n});\\r\\n\";e.queueScriptBlock(f)}e.loadScripts(0,Function.createDelegate(this,Function.createCallback(this._scriptsLoadComplete,b)),null,null)},_scriptIncludesLoadFailed:function(d,c,b,a){a.scriptsFailed={src:c.src,multipleCallbacks:b};this._scriptIncludesLoadComplete(d,a)},_scriptsLoadComplete:function(f,c){var e=c.executor;if(window.__theFormPostData)window.__theFormPostData=\"\";if(window.__theFormPostCollection)window.__theFormPostCollection=[];if(window.WebForm_InitCallback)window.WebForm_InitCallback();if(this._scrollPosition){if(window.scrollTo)window.scrollTo(this._scrollPosition.x,this._scrollPosition.y);this._scrollPosition=null}Sys.Application.endCreateComponents();this._pageLoaded(false,c);this._endPostBack(null,e,c);if(this._controlIDToFocus){var a,d;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var b=$get(this._controlIDToFocus);a=b;if(b&&!WebForm_CanFocus(b))a=WebForm_FindFirstFocusableChild(b);if(a&&typeof a.contentEditable!==\"undefined\"){d=a.contentEditable;a.contentEditable=false}else a=null}WebForm_AutoFocus(this._controlIDToFocus);if(a)a.contentEditable=d;this._controlIDToFocus=null}},_splitNodeIntoArray:function(b){var a=b.content,c=a.length?a.split(\",\"):[];return c},_uniqueIDToClientID:function(a){return a.replace(/\\$/g,\"_\")},_updateControls:function(d,a,c,b,e){this._commitControls(this._processUpdatePanelArrays(d,a,c,e),b)},_updatePanel:function(updatePanelElement,rendering){for(var updatePanelID in this._scriptDisposes)if(this._elementContains(updatePanelElement,document.getElementById(updatePanelID))){var disposeScripts=this._scriptDisposes[updatePanelID];for(var i=0,l=disposeScripts.length;i<l;i++)eval(disposeScripts[i]);delete this._scriptDisposes[updatePanelID]}Sys.Application.disposeElement(updatePanelElement,true);updatePanelElement.innerHTML=rendering},_validPosition:function(a){return typeof a!==\"undefined\"&&a!==null&&a!==0}};Sys.WebForms.PageRequestManager.getInstance=function(){var a=Sys.WebForms.PageRequestManager._instance;if(!a)a=Sys.WebForms.PageRequestManager._instance=new Sys.WebForms.PageRequestManager;return a};Sys.WebForms.PageRequestManager._addArrayElement=function(a){if(!window[a])window[a]=[];for(var b=1,c=arguments.length;b<c;b++)Array.add(window[a],arguments[b])};Sys.WebForms.PageRequestManager._initialize=function(){var a=Sys.WebForms.PageRequestManager.getInstance();a._initializeInternal.apply(a,arguments)};Sys.WebForms.PageRequestManager.registerClass(\"Sys.WebForms.PageRequestManager\");Sys.UI._UpdateProgress=function(a){Sys.UI._UpdateProgress.initializeBase(this,[a]);this._displayAfter=500;this._dynamicLayout=true;this._associatedUpdatePanelId=null;this._beginRequestHandlerDelegate=null;this._startDelegate=null;this._endRequestHandlerDelegate=null;this._pageRequestManager=null;this._timerCookie=null};Sys.UI._UpdateProgress.prototype={get_displayAfter:function(){return this._displayAfter},set_displayAfter:function(a){this._displayAfter=a},get_dynamicLayout:function(){return this._dynamicLayout},set_dynamicLayout:function(a){this._dynamicLayout=a},get_associatedUpdatePanelId:function(){return this._associatedUpdatePanelId},set_associatedUpdatePanelId:function(a){this._associatedUpdatePanelId=a},get_role:function(){return \"status\"},_clearTimeout:function(){if(this._timerCookie){window.clearTimeout(this._timerCookie);this._timerCookie=null}},_getUniqueID:function(b){var a=Array.indexOf(this._pageRequestManager._updatePanelClientIDs,b);return a===-1?null:this._pageRequestManager._updatePanelIDs[a]},_handleBeginRequest:function(f,e){var b=e.get_postBackElement(),a=true,d=this._associatedUpdatePanelId;if(this._associatedUpdatePanelId){var c=e.get_updatePanelsToUpdate();if(c&&c.length)a=Array.contains(c,d)||Array.contains(c,this._getUniqueID(d));else a=false}while(!a&&b){if(b.id&&this._associatedUpdatePanelId===b.id)a=true;b=b.parentNode}if(a)this._timerCookie=window.setTimeout(this._startDelegate,this._displayAfter)},_startRequest:function(){if(this._pageRequestManager.get_isInAsyncPostBack()){var a=this.get_element();if(this._dynamicLayout)a.style.display=\"block\";else a.style.visibility=\"visible\";if(this.get_role()===\"status\")a.setAttribute(\"aria-hidden\",\"false\")}this._timerCookie=null},_handleEndRequest:function(){var a=this.get_element();if(this._dynamicLayout)a.style.display=\"none\";else a.style.visibility=\"hidden\";if(this.get_role()===\"status\")a.setAttribute(\"aria-hidden\",\"true\");this._clearTimeout()},dispose:function(){if(this._beginRequestHandlerDelegate!==null){this._pageRequestManager.remove_beginRequest(this._beginRequestHandlerDelegate);this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);this._beginRequestHandlerDelegate=null;this._endRequestHandlerDelegate=null}this._clearTimeout();Sys.UI._UpdateProgress.callBaseMethod(this,\"dispose\")},initialize:function(){Sys.UI._UpdateProgress.callBaseMethod(this,\"initialize\");if(this.get_role()===\"status\")this.get_element().setAttribute(\"aria-hidden\",\"true\");this._beginRequestHandlerDelegate=Function.createDelegate(this,this._handleBeginRequest);this._endRequestHandlerDelegate=Function.createDelegate(this,this._handleEndRequest);this._startDelegate=Function.createDelegate(this,this._startRequest);if(Sys.WebForms&&Sys.WebForms.PageRequestManager)this._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(this._pageRequestManager!==null){this._pageRequestManager.add_beginRequest(this._beginRequestHandlerDelegate);this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate)}}};Sys.UI._UpdateProgress.registerClass(\"Sys.UI._UpdateProgress\",Sys.UI.Control);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MSAjax/MicrosoftAjaxWebServices.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxWebServices.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxWebServices.js\nType._registerScript(\"MicrosoftAjaxWebServices.js\",[\"MicrosoftAjaxNetwork.js\"]);Type.registerNamespace(\"Sys.Net\");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange(\"value\",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext===\"undefined\"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||\"callback\"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a===\"undefined\")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass(\"Sys.Net.WebServiceProxy\");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||\"callback\";c=\"_jsonp\"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+\"/\"+encodeURIComponent(a):q,r,n?p+\"=Sys.\"+c:null);if(n){s=document.createElement(\"script\");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!==\"undefined\"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()[\"Content-Type\"]=\"application/json; charset=utf-8\";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o===\"{}\")o=\"\"}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader(\"Content-Type\");if(e.startsWith(\"application/json\"))c=d.get_object();else if(e.startsWith(\"text/xml\"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader(\"jsonerror\"),h=k===\"true\";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith(\"application/json\"))c=!c||typeof c.d===\"undefined\"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,\"\",\"\"),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\\s*([a-zA-Z0-9\\+\\-\\.]+\\:)\\/\\/([^?#\\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||\"\"},get_exceptionType:function(){return this._exceptionType||\"\"},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass(\"Sys.Net.WebServiceError\");"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/Menu.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/Menu.js\nvar __rootMenuItem;\nvar __menuInterval;\nvar __scrollPanel;\nvar __disappearAfter = 500;\nfunction Menu_ClearInterval() {\n    if (__menuInterval) {\n        window.clearInterval(__menuInterval);\n    }\n}\nfunction Menu_Collapse(item) {\n    Menu_SetRoot(item);\n    if (__rootMenuItem) {\n        Menu_ClearInterval();\n        if (__disappearAfter >= 0) {\n            __menuInterval = window.setInterval(\"Menu_HideItems()\", __disappearAfter);\n        }\n    }\n}\nfunction Menu_Expand(item, horizontalOffset, verticalOffset, hideScrollers) {\n    Menu_ClearInterval();\n    var tr = item.parentNode.parentNode.parentNode.parentNode.parentNode;\n    var horizontal = true;\n    if (!tr.id) {\n        horizontal = false;\n        tr = tr.parentNode;\n    }\n    var child = Menu_FindSubMenu(item);\n    if (child) {\n        var data = Menu_GetData(item);\n        if (!data) {\n            return null;\n        }\n        child.rel = tr.id;\n        child.x = horizontalOffset;\n        child.y = verticalOffset;\n        if (horizontal) child.pos = \"bottom\";\n        PopOut_Show(child.id, hideScrollers, data);\n    }\n    Menu_SetRoot(item);\n    if (child) {\n        if (!document.body.__oldOnClick && document.body.onclick) {\n            document.body.__oldOnClick = document.body.onclick;\n        }\n        if (__rootMenuItem) {\n            document.body.onclick = Menu_HideItems;\n        }\n    }\n    Menu_ResetSiblings(tr);\n    return child;\n}\nfunction Menu_FindMenu(item) {\n    if (item && item.menu) return item.menu;\n    var tr = item.parentNode.parentNode.parentNode.parentNode.parentNode;\n    if (!tr.id) {\n        tr = tr.parentNode;\n    }\n    for (var i = tr.id.length - 1; i >= 0; i--) {\n        if (tr.id.charAt(i) < '0' || tr.id.charAt(i) > '9') {\n            var menu = WebForm_GetElementById(tr.id.substr(0, i));\n            if (menu) {\n                item.menu = menu;\n                return menu;\n            }\n        }\n    }\n    return null;\n}\nfunction Menu_FindNext(item) {\n    var a = WebForm_GetElementByTagName(item, \"A\");\n    var parent = Menu_FindParentContainer(item);\n    var first = null;\n    if (parent) {\n        var links = WebForm_GetElementsByTagName(parent, \"A\");\n        var match = false;\n        for (var i = 0; i < links.length; i++) {\n            var link = links[i];\n            if (Menu_IsSelectable(link)) {\n                if (Menu_FindParentContainer(link) == parent) {\n                    if (match) {\n                        return link;\n                    }\n                    else if (!first) {\n                        first = link;\n                    }\n                }\n                if (!match && link == a) {\n                    match = true;\n                }\n            }\n        }\n    }\n    return first;\n}\nfunction Menu_FindParentContainer(item) {\n    if (item.menu_ParentContainerCache) return item.menu_ParentContainerCache;\n    var a = (item.tagName.toLowerCase() == \"a\") ? item : WebForm_GetElementByTagName(item, \"A\");\n    var menu = Menu_FindMenu(a);\n    if (menu) {\n        var parent = item;\n        while (parent && parent.tagName &&\n            parent.id != menu.id &&\n            parent.tagName.toLowerCase() != \"div\") {\n            parent = parent.parentNode;\n        }\n        item.menu_ParentContainerCache = parent;\n        return parent;\n    }\n}\nfunction Menu_FindParentItem(item) {\n    var parentContainer = Menu_FindParentContainer(item);\n    var parentContainerID = parentContainer.id;\n    var len = parentContainerID.length;\n    if (parentContainerID && parentContainerID.substr(len - 5) == \"Items\") {\n        var parentItemID = parentContainerID.substr(0, len - 5);\n        return WebForm_GetElementById(parentItemID);\n    }\n    return null;\n}\nfunction Menu_FindPrevious(item) {\n    var a = WebForm_GetElementByTagName(item, \"A\");\n    var parent = Menu_FindParentContainer(item);\n    var last = null;\n    if (parent) {\n        var links = WebForm_GetElementsByTagName(parent, \"A\");\n        for (var i = 0; i < links.length; i++) {\n            var link = links[i];\n            if (Menu_IsSelectable(link)) {\n                if (link == a && last) {\n                    return last;\n                }\n                if (Menu_FindParentContainer(link) == parent) {\n                    last = link;\n                }\n            }\n        }\n    }\n    return last;\n}\nfunction Menu_FindSubMenu(item) {\n    var tr = item.parentNode.parentNode.parentNode.parentNode.parentNode;\n    if (!tr.id) {\n        tr=tr.parentNode;\n    }\n    return WebForm_GetElementById(tr.id + \"Items\");\n}\nfunction Menu_Focus(item) {\n    if (item && item.focus) {\n        var pos = WebForm_GetElementPosition(item);\n        var parentContainer = Menu_FindParentContainer(item);\n        if (!parentContainer.offset) {\n            parentContainer.offset = 0;\n        }\n        var posParent = WebForm_GetElementPosition(parentContainer);\n        var delta;\n        if (pos.y + pos.height > posParent.y + parentContainer.offset + parentContainer.clippedHeight) {\n            delta = pos.y + pos.height - posParent.y - parentContainer.offset - parentContainer.clippedHeight;\n            PopOut_Scroll(parentContainer, delta);\n        }\n        else if (pos.y < posParent.y + parentContainer.offset) {\n            delta = posParent.y + parentContainer.offset - pos.y;\n            PopOut_Scroll(parentContainer, -delta);\n        }\n        PopOut_HideScrollers(parentContainer);\n        item.focus();\n    }\n}\nfunction Menu_GetData(item) {\n    if (!item.data) {\n        var a = (item.tagName.toLowerCase() == \"a\" ? item : WebForm_GetElementByTagName(item, \"a\"));\n        var menu = Menu_FindMenu(a);\n        try {\n            item.data = eval(menu.id + \"_Data\");\n        }\n        catch(e) {}\n    }\n    return item.data;\n}\nfunction Menu_HideItems(items) {\n    if (document.body.__oldOnClick) {\n        document.body.onclick = document.body.__oldOnClick;\n        document.body.__oldOnClick = null;\n    }\n    Menu_ClearInterval();\n    if (!items || ((typeof(items.tagName) == \"undefined\") && (items instanceof Event))) {\n        items = __rootMenuItem;\n    }\n    var table = items;\n    if ((typeof(table) == \"undefined\") || (table == null) || !table.tagName || (table.tagName.toLowerCase() != \"table\")) {\n        table = WebForm_GetElementByTagName(table, \"TABLE\");\n    }\n    if ((typeof(table) == \"undefined\") || (table == null) || !table.tagName || (table.tagName.toLowerCase() != \"table\")) {\n        return;\n    }\n    var rows = table.rows ? table.rows : table.firstChild.rows;\n    var isVertical = false;\n    for (var r = 0; r < rows.length; r++) {\n        if (rows[r].id) {\n            isVertical = true;\n            break;\n        }\n    }\n    var i, child, nextLevel;\n    if (isVertical) {\n        for(i = 0; i < rows.length; i++) {\n            if (rows[i].id) {\n                child = WebForm_GetElementById(rows[i].id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n            else if (rows[i].cells[0]) {\n                nextLevel = WebForm_GetElementByTagName(rows[i].cells[0], \"TABLE\");\n                if (nextLevel) {\n                    Menu_HideItems(nextLevel);\n                }\n            }\n        }\n    }\n    else if (rows[0]) {\n        for(i = 0; i < rows[0].cells.length; i++) {\n            if (rows[0].cells[i].id) {\n                child = WebForm_GetElementById(rows[0].cells[i].id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n            else {\n                nextLevel = WebForm_GetElementByTagName(rows[0].cells[i], \"TABLE\");\n                if (nextLevel) {\n                    Menu_HideItems(rows[0].cells[i].firstChild);\n                }\n            }\n        }\n    }\n    if (items && items.id) {\n        PopOut_Hide(items.id);\n    }\n}\nfunction Menu_HoverDisabled(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var data = Menu_GetData(item);\n    if (!data) return;\n    node = WebForm_GetElementByTagName(node, \"table\").rows[0].cells[0].childNodes[0];\n    if (data.disappearAfter >= 200) {\n        __disappearAfter = data.disappearAfter;\n    }\n    Menu_Expand(node, data.horizontalOffset, data.verticalOffset); \n}\nfunction Menu_HoverDynamic(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var data = Menu_GetData(item);\n    if (!data) return;\n    var nodeTable = WebForm_GetElementByTagName(node, \"table\");\n    if (data.hoverClass) {\n        nodeTable.hoverClass = data.hoverClass;\n        WebForm_AppendToClassName(nodeTable, data.hoverClass);\n    }\n    node = nodeTable.rows[0].cells[0].childNodes[0];\n    if (data.hoverHyperLinkClass) {\n        node.hoverHyperLinkClass = data.hoverHyperLinkClass;\n        WebForm_AppendToClassName(node, data.hoverHyperLinkClass);\n    }\n    if (data.disappearAfter >= 200) {\n        __disappearAfter = data.disappearAfter;\n    }\n    Menu_Expand(node, data.horizontalOffset, data.verticalOffset); \n}\nfunction Menu_HoverRoot(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var data = Menu_GetData(item);\n    if (!data) {\n        return null;\n    }\n    var nodeTable = WebForm_GetElementByTagName(node, \"table\");\n    if (data.staticHoverClass) {\n        nodeTable.hoverClass = data.staticHoverClass;\n        WebForm_AppendToClassName(nodeTable, data.staticHoverClass);\n    }\n    node = nodeTable.rows[0].cells[0].childNodes[0];\n    if (data.staticHoverHyperLinkClass) {\n        node.hoverHyperLinkClass = data.staticHoverHyperLinkClass;\n        WebForm_AppendToClassName(node, data.staticHoverHyperLinkClass);\n    }\n    return node;\n}\nfunction Menu_HoverStatic(item) {\n    var node = Menu_HoverRoot(item);\n    var data = Menu_GetData(item);\n    if (!data) return;\n    __disappearAfter = data.disappearAfter;\n    Menu_Expand(node, data.horizontalOffset, data.verticalOffset); \n}\nfunction Menu_IsHorizontal(item) {\n    if (item) {\n        var a = ((item.tagName && (item.tagName.toLowerCase == \"a\")) ? item : WebForm_GetElementByTagName(item, \"A\"));\n        if (!a) {\n            return false;\n        }\n        var td = a.parentNode.parentNode.parentNode.parentNode.parentNode;\n        if (td.id) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction Menu_IsSelectable(link) {\n    return (link && link.href)\n}\nfunction Menu_Key(item) {\n    var event;\n    if (item.currentTarget) {\n        event = item;\n        item = event.currentTarget;\n    }\n    else {\n        event = window.event;        \n    }\n    var key = (event ? event.keyCode : -1);\n    var data = Menu_GetData(item);\n    if (!data) return;\n    var horizontal = Menu_IsHorizontal(item);\n    var a = WebForm_GetElementByTagName(item, \"A\");\n    var nextItem, parentItem, previousItem;\n    if ((!horizontal && key == 38) || (horizontal && key == 37)) {\n        previousItem = Menu_FindPrevious(item);\n        while (previousItem && previousItem.disabled) {\n            previousItem = Menu_FindPrevious(previousItem);\n        }\n        if (previousItem) {\n            Menu_Focus(previousItem);\n            Menu_Expand(previousItem, data.horizontalOffset, data.verticalOffset, true);\n            event.cancelBubble = true;\n            if (event.stopPropagation) event.stopPropagation();\n            return;\n        }\n    }\n    if ((!horizontal && key == 40) || (horizontal && key == 39)) {\n        if (horizontal) {\n            var subMenu = Menu_FindSubMenu(a);\n            if (subMenu && subMenu.style && subMenu.style.visibility && \n                subMenu.style.visibility.toLowerCase() == \"hidden\") {\n                Menu_Expand(a, data.horizontalOffset, data.verticalOffset, true);\n                event.cancelBubble = true;\n                if (event.stopPropagation) event.stopPropagation();\n                return;\n            }\n        }\n        nextItem = Menu_FindNext(item);\n        while (nextItem && nextItem.disabled) {\n            nextItem = Menu_FindNext(nextItem);\n        }\n        if (nextItem) {\n            Menu_Focus(nextItem);\n            Menu_Expand(nextItem, data.horizontalOffset, data.verticalOffset, true);\n            event.cancelBubble = true;\n            if (event.stopPropagation) event.stopPropagation();\n            return;\n        }\n    }\n    if ((!horizontal && key == 39) || (horizontal && key == 40)) {\n        var children = Menu_Expand(a, data.horizontalOffset, data.verticalOffset, true);\n        if (children) {\n            var firstChild;\n            children = WebForm_GetElementsByTagName(children, \"A\");\n            for (var i = 0; i < children.length; i++) {\n                if (!children[i].disabled && Menu_IsSelectable(children[i])) {\n                    firstChild = children[i];\n                    break;\n                }\n            }\n            if (firstChild) {\n                Menu_Focus(firstChild);\n                Menu_Expand(firstChild, data.horizontalOffset, data.verticalOffset, true);\n                event.cancelBubble = true;\n                if (event.stopPropagation) event.stopPropagation();\n                return;\n            }\n        }\n        else {\n            parentItem = Menu_FindParentItem(item);\n            while (parentItem && !Menu_IsHorizontal(parentItem)) {\n                parentItem = Menu_FindParentItem(parentItem);\n            }\n            if (parentItem) {\n                nextItem = Menu_FindNext(parentItem);\n                while (nextItem && nextItem.disabled) {\n                    nextItem = Menu_FindNext(nextItem);\n                }\n                if (nextItem) {\n                    Menu_Focus(nextItem);\n                    Menu_Expand(nextItem, data.horizontalOffset, data.verticalOffset, true);\n                    event.cancelBubble = true;\n                    if (event.stopPropagation) event.stopPropagation();\n                    return;\n                }\n            }\n        }\n    }\n    if ((!horizontal && key == 37) || (horizontal && key == 38)) {\n        parentItem = Menu_FindParentItem(item);\n        if (parentItem) {\n            if (Menu_IsHorizontal(parentItem)) {\n                previousItem = Menu_FindPrevious(parentItem);\n                while (previousItem && previousItem.disabled) {\n                    previousItem = Menu_FindPrevious(previousItem);\n                }\n                if (previousItem) {\n                    Menu_Focus(previousItem);\n                    Menu_Expand(previousItem, data.horizontalOffset, data.verticalOffset, true);\n                    event.cancelBubble = true;\n                    if (event.stopPropagation) event.stopPropagation();\n                    return;\n                }\n            }\n            var parentA = WebForm_GetElementByTagName(parentItem, \"A\");\n            if (parentA) {\n                Menu_Focus(parentA);\n            }\n            Menu_ResetSiblings(parentItem);\n            event.cancelBubble = true;\n            if (event.stopPropagation) event.stopPropagation();\n            return;\n        }\n    }\n    if (key == 27) {\n        Menu_HideItems();\n        event.cancelBubble = true;\n        if (event.stopPropagation) event.stopPropagation();\n        return;\n    }\n}\nfunction Menu_ResetSiblings(item) {\n    var table = (item.tagName.toLowerCase() == \"td\") ?\n        item.parentNode.parentNode.parentNode :\n        item.parentNode.parentNode;\n    var isVertical = false;\n    for (var r = 0; r < table.rows.length; r++) {\n        if (table.rows[r].id) {\n            isVertical = true;\n            break;\n        }\n    }\n    var i, child, childNode;\n    if (isVertical) {\n        for(i = 0; i < table.rows.length; i++) {\n            childNode = table.rows[i];\n            if (childNode != item) {\n                child = WebForm_GetElementById(childNode.id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n        }\n    }\n    else {\n        for(i = 0; i < table.rows[0].cells.length; i++) {\n            childNode = table.rows[0].cells[i];\n            if (childNode != item) {\n                child = WebForm_GetElementById(childNode.id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n        }\n    }\n    Menu_ResetTopMenus(table, table, 0, true);\n}\nfunction Menu_ResetTopMenus(table, doNotReset, level, up) {\n    var i, child, childNode;\n    if (up && table.id == \"\") {\n        var parentTable = table.parentNode.parentNode.parentNode.parentNode;\n        if (parentTable.tagName.toLowerCase() == \"table\") {\n            Menu_ResetTopMenus(parentTable, doNotReset, level + 1, true);\n        }\n    }\n    else {\n        if (level == 0 && table != doNotReset) {\n            if (table.rows[0].id) {\n                for(i = 0; i < table.rows.length; i++) {\n                    childNode = table.rows[i];\n                    child = WebForm_GetElementById(childNode.id + \"Items\");\n                    if (child) {\n                        Menu_HideItems(child);\n                    }\n                }\n            }\n            else {\n                for(i = 0; i < table.rows[0].cells.length; i++) {\n                    childNode = table.rows[0].cells[i];\n                    child = WebForm_GetElementById(childNode.id + \"Items\");\n                    if (child) {\n                        Menu_HideItems(child);\n                    }\n                }\n            }\n        }\n        else if (level > 0) {\n            for (i = 0; i < table.rows.length; i++) {\n                for (var j = 0; j < table.rows[i].cells.length; j++) {\n                    var subTable = table.rows[i].cells[j].firstChild;\n                    if (subTable && subTable.tagName.toLowerCase() == \"table\") {\n                        Menu_ResetTopMenus(subTable, doNotReset, level - 1, false);\n                    }\n                }\n            }\n        }\n    }\n}\nfunction Menu_RestoreInterval() {\n    if (__menuInterval && __rootMenuItem) {\n        Menu_ClearInterval();\n        __menuInterval = window.setInterval(\"Menu_HideItems()\", __disappearAfter);\n    }\n}\nfunction Menu_SetRoot(item) {\n    var newRoot = Menu_FindMenu(item);\n    if (newRoot) {\n        if (__rootMenuItem && __rootMenuItem != newRoot) {\n            Menu_HideItems();\n        }\n        __rootMenuItem = newRoot;\n    }\n}\nfunction Menu_Unhover(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var nodeTable = WebForm_GetElementByTagName(node, \"table\");\n    if (nodeTable.hoverClass) {\n        WebForm_RemoveClassName(nodeTable, nodeTable.hoverClass);\n    }\n    node = nodeTable.rows[0].cells[0].childNodes[0];\n    if (node.hoverHyperLinkClass) {\n        WebForm_RemoveClassName(node, node.hoverHyperLinkClass);\n    }\n    Menu_Collapse(node);\n}\nfunction PopOut_Clip(element, y, height) {\n    if (element && element.style) {\n        element.style.clip = \"rect(\" + y + \"px auto \" + (y + height) + \"px auto)\";\n        element.style.overflow = \"hidden\";\n    }\n}\nfunction PopOut_Down(scroller) {\n    Menu_ClearInterval();\n    var panel;\n    if (scroller) {\n        panel = scroller.parentNode\n    }\n    else {\n        panel = __scrollPanel;\n    }\n    if (panel && ((panel.offset + panel.clippedHeight) < panel.physicalHeight)) {\n        PopOut_Scroll(panel, 2)\n        __scrollPanel = panel;\n        PopOut_ShowScrollers(panel);\n        PopOut_Stop();\n        __scrollPanel.interval = window.setInterval(\"PopOut_Down()\", 8);\n    }\n    else {\n        PopOut_ShowScrollers(panel);\n    }\n}\nfunction PopOut_Hide(panelId) {\n    var panel = WebForm_GetElementById(panelId);\n    if (panel && panel.tagName.toLowerCase() == \"div\") {\n        panel.style.visibility = \"hidden\";\n        panel.style.display = \"none\";\n        panel.offset = 0;\n        panel.scrollTop = 0;\n        var table = WebForm_GetElementByTagName(panel, \"TABLE\");\n        if (table) {\n            WebForm_SetElementY(table, 0);\n        }\n        if (window.navigator && window.navigator.appName == \"Microsoft Internet Explorer\" &&\n            !window.opera) {\n            var childFrameId = panel.id + \"_MenuIFrame\";\n            var childFrame = WebForm_GetElementById(childFrameId);\n            if (childFrame) {\n                childFrame.style.display = \"none\";\n            }\n        }\n    }\n}\nfunction PopOut_HideScrollers(panel) {\n    if (panel && panel.style) {\n        var up = WebForm_GetElementById(panel.id + \"Up\");\n        var dn = WebForm_GetElementById(panel.id + \"Dn\");\n        if (up) {\n            up.style.visibility = \"hidden\";\n            up.style.display = \"none\";\n        }\n        if (dn) {\n            dn.style.visibility = \"hidden\";\n            dn.style.display = \"none\";\n        }\n    }\n}\nfunction PopOut_Position(panel, hideScrollers) {\n    if (window.opera) {\n        panel.parentNode.removeChild(panel);\n        document.forms[0].appendChild(panel);\n    }\n    var rel = WebForm_GetElementById(panel.rel);\n    var relTable = WebForm_GetElementByTagName(rel, \"TABLE\");\n    var relCoordinates = WebForm_GetElementPosition(relTable ? relTable : rel);\n    var panelCoordinates = WebForm_GetElementPosition(panel);\n    var panelHeight = ((typeof(panel.physicalHeight) != \"undefined\") && (panel.physicalHeight != null)) ?\n        panel.physicalHeight :\n        panelCoordinates.height;\n    panel.physicalHeight = panelHeight;\n    var panelParentCoordinates;\n    if (panel.offsetParent) {\n        panelParentCoordinates = WebForm_GetElementPosition(panel.offsetParent);\n    }\n    else {\n        panelParentCoordinates = new Object();\n        panelParentCoordinates.x = 0;\n        panelParentCoordinates.y = 0;\n    }\n    var overflowElement = WebForm_GetElementById(\"__overFlowElement\");\n    if (!overflowElement) {\n        overflowElement = document.createElement(\"img\");\n        overflowElement.id=\"__overFlowElement\";\n        WebForm_SetElementWidth(overflowElement, 1);\n        document.body.appendChild(overflowElement);\n    }\n    WebForm_SetElementHeight(overflowElement, panelHeight + relCoordinates.y + parseInt(panel.y ? panel.y : 0));\n    overflowElement.style.visibility = \"visible\";\n    overflowElement.style.display = \"inline\";\n    var clientHeight = 0;\n    var clientWidth = 0;\n    if (window.innerHeight) {\n        clientHeight = window.innerHeight;\n        clientWidth = window.innerWidth;\n    }\n    else if (document.documentElement && document.documentElement.clientHeight) {\n        clientHeight = document.documentElement.clientHeight;\n        clientWidth = document.documentElement.clientWidth;\n    }\n    else if (document.body && document.body.clientHeight) {\n        clientHeight = document.body.clientHeight;\n        clientWidth = document.body.clientWidth;\n    }\n    var scrollTop = 0;\n    var scrollLeft = 0;\n    if (typeof(window.pageYOffset) != \"undefined\") {\n        scrollTop = window.pageYOffset;\n        scrollLeft = window.pageXOffset;\n    }\n    else if (document.documentElement && (typeof(document.documentElement.scrollTop) != \"undefined\")) {\n        scrollTop = document.documentElement.scrollTop;\n        scrollLeft = document.documentElement.scrollLeft;\n    }\n    else if (document.body && (typeof(document.body.scrollTop) != \"undefined\")) {\n        scrollTop = document.body.scrollTop;\n        scrollLeft = document.body.scrollLeft;\n    }\n    overflowElement.style.visibility = \"hidden\";\n    overflowElement.style.display = \"none\";\n    var bottomWindowBorder = clientHeight + scrollTop;\n    var rightWindowBorder = clientWidth + scrollLeft;\n    var position = panel.pos;\n    if ((typeof(position) == \"undefined\") || (position == null) || (position == \"\")) {\n        position = (WebForm_GetElementDir(rel) == \"rtl\" ? \"middleleft\" : \"middleright\");\n    }\n    position = position.toLowerCase();\n    var y = relCoordinates.y + parseInt(panel.y ? panel.y : 0) - panelParentCoordinates.y;\n    var borderParent = (rel && rel.parentNode && rel.parentNode.parentNode && rel.parentNode.parentNode.parentNode\n        && rel.parentNode.parentNode.parentNode.tagName.toLowerCase() == \"div\") ?\n        rel.parentNode.parentNode.parentNode : null;\n    WebForm_SetElementY(panel, y);\n    PopOut_SetPanelHeight(panel, panelHeight, true);\n    var clip = false;\n    var overflow;\n    if (position.indexOf(\"top\") != -1) {\n        y -= panelHeight;\n        WebForm_SetElementY(panel, y); \n        if (y < -panelParentCoordinates.y) {\n            y = -panelParentCoordinates.y;\n            WebForm_SetElementY(panel, y); \n            if (panelHeight > clientHeight - 2) {\n                clip = true;\n                PopOut_SetPanelHeight(panel, clientHeight - 2);\n            }\n        }\n    }\n    else {\n        if (position.indexOf(\"bottom\") != -1) {\n            y += relCoordinates.height;\n            WebForm_SetElementY(panel, y); \n        }\n        overflow = y + panelParentCoordinates.y + panelHeight - bottomWindowBorder;\n        if (overflow > 0) {\n            y -= overflow;\n            WebForm_SetElementY(panel, y); \n            if (y < -panelParentCoordinates.y) {\n                y = 2 - panelParentCoordinates.y + scrollTop;\n                WebForm_SetElementY(panel, y); \n                clip = true;\n                PopOut_SetPanelHeight(panel, clientHeight - 2);\n            }\n        }\n    }\n    if (!clip) {\n        PopOut_SetPanelHeight(panel, panel.clippedHeight, true);\n    }\n    var panelParentOffsetY = 0;\n    if (panel.offsetParent) {\n        panelParentOffsetY = WebForm_GetElementPosition(panel.offsetParent).y;\n    }\n    var panelY = ((typeof(panel.originY) != \"undefined\") && (panel.originY != null)) ?\n        panel.originY :\n        y - panelParentOffsetY;\n    panel.originY = panelY;\n    if (!hideScrollers) {\n        PopOut_ShowScrollers(panel);\n    }\n    else {\n        PopOut_HideScrollers(panel);\n    }\n    var x = relCoordinates.x + parseInt(panel.x ? panel.x : 0) - panelParentCoordinates.x;\n    if (borderParent && borderParent.clientLeft) {\n        x += 2 * borderParent.clientLeft;\n    }\n    WebForm_SetElementX(panel, x);\n    if (position.indexOf(\"left\") != -1) {\n        x -= panelCoordinates.width;\n        WebForm_SetElementX(panel, x);\n        if (x < -panelParentCoordinates.x) {\n            WebForm_SetElementX(panel, -panelParentCoordinates.x);\n        }\n    }\n    else {\n        if (position.indexOf(\"right\") != -1) {\n            x += relCoordinates.width;\n            WebForm_SetElementX(panel, x);\n        }\n        overflow = x + panelParentCoordinates.x + panelCoordinates.width - rightWindowBorder;\n        if (overflow > 0) {\n            if (position.indexOf(\"bottom\") == -1 && relCoordinates.x > panelCoordinates.width) {\n                x -= relCoordinates.width + panelCoordinates.width;\n            }\n            else {\n                x -= overflow;\n            }\n            WebForm_SetElementX(panel, x);\n            if (x < -panelParentCoordinates.x) {\n                WebForm_SetElementX(panel, -panelParentCoordinates.x);\n            }\n        }\n    }\n}\nfunction PopOut_Scroll(panel, offsetDelta) {\n    var table = WebForm_GetElementByTagName(panel, \"TABLE\");\n    if (!table) return;\n    table.style.position = \"relative\";\n    var tableY = (table.style.top ? parseInt(table.style.top) : 0);\n    panel.offset += offsetDelta;\n    WebForm_SetElementY(table, tableY - offsetDelta);\n}\nfunction PopOut_SetPanelHeight(element, height, doNotClip) {\n    if (element && element.style) {\n        var size = WebForm_GetElementPosition(element);\n        element.physicalWidth = size.width;\n        element.clippedHeight = height;\n        WebForm_SetElementHeight(element, height - (element.clientTop ? (2 * element.clientTop) : 0));\n        if (doNotClip && element.style) {\n            element.style.clip = \"rect(auto auto auto auto)\";\n        }\n        else {\n            PopOut_Clip(element, 0, height);\n        }\n    }\n}\nfunction PopOut_Show(panelId, hideScrollers, data) {\n    var panel = WebForm_GetElementById(panelId);\n    if (panel && panel.tagName.toLowerCase() == \"div\") {\n        panel.style.visibility = \"visible\";\n        panel.style.display = \"inline\";\n        if (!panel.offset || hideScrollers) {\n            panel.scrollTop = 0;\n            panel.offset = 0;\n            var table = WebForm_GetElementByTagName(panel, \"TABLE\");\n            if (table) {\n                WebForm_SetElementY(table, 0);\n            }\n        }\n        PopOut_Position(panel, hideScrollers);\n        var z = 1;\n        var isIE = window.navigator && window.navigator.appName == \"Microsoft Internet Explorer\" && !window.opera;\n        if (isIE && data) {\n            var childFrameId = panel.id + \"_MenuIFrame\";\n            var childFrame = WebForm_GetElementById(childFrameId);\n            var parent = panel.offsetParent;\n            if (!childFrame) {\n                childFrame = document.createElement(\"iframe\");\n                childFrame.id = childFrameId;\n                childFrame.src = (data.iframeUrl ? data.iframeUrl : \"about:blank\");\n                childFrame.style.position = \"absolute\";\n                childFrame.style.display = \"none\";\n                childFrame.scrolling = \"no\";\n                childFrame.frameBorder = \"0\";\n                if (parent.tagName.toLowerCase() == \"html\") {\n                    document.body.appendChild(childFrame);\n                }\n                else {\n                    parent.appendChild(childFrame);\n                }\n            }\n            var pos = WebForm_GetElementPosition(panel);\n            var parentPos = WebForm_GetElementPosition(parent);\n            WebForm_SetElementX(childFrame, pos.x - parentPos.x);\n            WebForm_SetElementY(childFrame, pos.y - parentPos.y);\n            WebForm_SetElementWidth(childFrame, pos.width);\n            WebForm_SetElementHeight(childFrame, pos.height);\n            childFrame.style.display = \"block\";\n            if (panel.currentStyle && panel.currentStyle.zIndex && panel.currentStyle.zIndex != \"auto\") {\n                z = panel.currentStyle.zIndex;\n            }\n            else if (panel.style.zIndex) {\n                z = panel.style.zIndex;\n            }\n        }\n        panel.style.zIndex = z;\n    }\n}\nfunction PopOut_ShowScrollers(panel) {\n    if (panel && panel.style) {\n        var up = WebForm_GetElementById(panel.id + \"Up\");\n        var dn = WebForm_GetElementById(panel.id + \"Dn\");\n        var cnt = 0;\n        if (up && dn) {\n            if (panel.offset && panel.offset > 0) {\n                up.style.visibility = \"visible\";\n                up.style.display = \"inline\";\n                cnt++;\n                if (panel.clientWidth) {\n                    WebForm_SetElementWidth(up, panel.clientWidth\n                        - (up.clientLeft ? (2 * up.clientLeft) : 0));\n                }\n                WebForm_SetElementY(up, 0);\n            }\n            else {\n                up.style.visibility = \"hidden\";\n                up.style.display = \"none\";\n            }\n            if (panel.offset + panel.clippedHeight + 2 <= panel.physicalHeight) {\n                dn.style.visibility = \"visible\";\n                dn.style.display = \"inline\";\n                cnt++;\n                if (panel.clientWidth) {\n                    WebForm_SetElementWidth(dn, panel.clientWidth\n                        - (dn.clientLeft ? (2 * dn.clientLeft) : 0));\n                }\n                WebForm_SetElementY(dn, panel.clippedHeight - WebForm_GetElementPosition(dn).height\n                    - (panel.clientTop ? (2 * panel.clientTop) : 0));\n            }\n            else {\n                dn.style.visibility = \"hidden\";\n                dn.style.display = \"none\";\n            }\n            if (cnt == 0) {\n                panel.style.clip = \"rect(auto auto auto auto)\";\n            }\n        }\n    }\n}\nfunction PopOut_Stop() {\n    if (__scrollPanel && __scrollPanel.interval) {\n        window.clearInterval(__scrollPanel.interval);\n    }\n    Menu_RestoreInterval();\n}\nfunction PopOut_Up(scroller) {\n    Menu_ClearInterval();\n    var panel;\n    if (scroller) {\n        panel = scroller.parentNode\n    }\n    else {\n        panel = __scrollPanel;\n    }\n    if (panel && panel.offset && panel.offset > 0) {\n        PopOut_Scroll(panel, -2);\n        __scrollPanel = panel;\n        PopOut_ShowScrollers(panel);\n        PopOut_Stop();\n        __scrollPanel.interval = window.setInterval(\"PopOut_Up()\", 8);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/MenuStandards.js",
    "content": "﻿//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MenuStandards.js\nif (!window.Sys) { window.Sys = {}; }\nif (!Sys.WebForms) { Sys.WebForms = {}; }\nSys.WebForms.Menu = function(options) {\n    this.items = [];\n    this.depth = options.depth || 1;\n    this.parentMenuItem = options.parentMenuItem;\n    this.element = Sys.WebForms.Menu._domHelper.getElement(options.element);\n    if (this.element.tagName === 'DIV') {\n        var containerElement = this.element;\n        this.element = Sys.WebForms.Menu._domHelper.firstChild(containerElement);\n        this.element.tabIndex = options.tabIndex || 0;\n        options.element = containerElement;\n        options.menu = this;\n        this.container = new Sys.WebForms._MenuContainer(options);\n        Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? \"right\" : \"left\");\n    }\n    else {\n        this.container = options.container;\n        this.keyMap = options.keyMap;\n    }\n    Sys.WebForms.Menu._elementObjectMapper.map(this.element, this);\n    if (this.parentMenuItem && this.parentMenuItem.parentMenu) {\n        this.parentMenu = this.parentMenuItem.parentMenu;\n        this.rootMenu = this.parentMenu.rootMenu;\n        if (!this.element.id) {\n            this.element.id = (this.container.element.id || 'menu') + ':submenu:' + Sys.WebForms.Menu._elementObjectMapper._computedId;\n        }\n        if (this.depth > this.container.staticDisplayLevels) {\n            this.displayMode = \"dynamic\";\n            this.element.style.display = \"none\";\n            this.element.style.position = \"absolute\";\n            if (this.rootMenu && this.container.orientation === 'horizontal' && this.parentMenu.isStatic()) {\n                this.element.style.top = \"100%\";\n                if (this.container.rightToLeft) {\n                    this.element.style.right = \"0px\";\n                }\n                else {\n                    this.element.style.left = \"0px\";\n                }\n            }\n            else {\n                this.element.style.top = \"0px\";\n                if (this.container.rightToLeft) {\n                    this.element.style.right = \"100%\";\n                }\n                else {\n                    this.element.style.left = \"100%\";\n                }\n            }\n            if (this.container.rightToLeft) {\n                this.keyMap = Sys.WebForms.Menu._keyboardMapping.verticalRtl;\n            }\n            else {\n                this.keyMap = Sys.WebForms.Menu._keyboardMapping.vertical;\n            }\n        }\n        else {\n            this.displayMode = \"static\";\n            this.element.style.display = \"block\";\n            if (this.container.orientation === 'horizontal') {\n                Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? \"right\" : \"left\");\n            }\n        }\n    }\n    Sys.WebForms.Menu._domHelper.appendCssClass(this.element, this.displayMode);\n    var children = this.element.childNodes;\n    var count = children.length;\n    for (var i = 0; i < count; i++) {\n        var node = children[i];\n        if (node.nodeType !== 1) {   \n            continue;\n        }\n        var topLevelMenuItem = null;\n        if (this.parentMenuItem) {\n            topLevelMenuItem = this.parentMenuItem.topLevelMenuItem;\n        }\n        var menuItem = new Sys.WebForms.MenuItem(this, node, topLevelMenuItem);\n        var previousMenuItem = this.items[this.items.length - 1];\n        if (previousMenuItem) {\n            menuItem.previousSibling = previousMenuItem;\n            previousMenuItem.nextSibling = menuItem;\n        }\n        this.items[this.items.length] = menuItem;\n    }\n};\nSys.WebForms.Menu.prototype = {\n    blur: function() { if (this.container) this.container.blur(); },\n    collapse: function() {\n        this.each(function(menuItem) {\n            menuItem.hover(false);\n            menuItem.blur();\n            var childMenu = menuItem.childMenu;\n            if (childMenu) {\n                childMenu.collapse();\n            }\n        });\n        this.hide();\n    },\n    doDispose: function() { this.each(function(item) { item.doDispose(); }); },\n    each: function(fn) {\n        var count = this.items.length;\n        for (var i = 0; i < count; i++) {\n            fn(this.items[i]);\n        }\n    },\n    firstChild: function() { return this.items[0]; },\n    focus: function() { if (this.container) this.container.focus(); },\n    get_displayed: function() { return this.element.style.display !== 'none'; },\n    get_focused: function() {\n        if (this.container) {\n            return this.container.focused;\n        }\n        return false;\n    },\n    handleKeyPress: function(keyCode) {\n        if (this.keyMap.contains(keyCode)) {\n            if (this.container.focusedMenuItem) {\n                this.container.focusedMenuItem.navigate(keyCode);\n                return;\n            }\n            var firstChild = this.firstChild();\n            if (firstChild) {\n                this.container.navigateTo(firstChild);\n            }\n        }\n    },\n    hide: function() {\n        if (!this.get_displayed()) {\n            return;\n        }\n        this.each(function(item) {\n            if (item.childMenu) {\n                item.childMenu.hide();\n            }\n        });\n        if (!this.isRoot()) {\n            if (this.get_focused()) {\n                this.container.navigateTo(this.parentMenuItem);\n            }\n            this.element.style.display = 'none';\n        }\n    },\n    isRoot: function() { return this.rootMenu === this; },\n    isStatic: function() { return this.displayMode === 'static'; },\n    lastChild: function() { return this.items[this.items.length - 1]; },\n    show: function() { this.element.style.display = 'block'; }\n};\nif (Sys.WebForms.Menu.registerClass) {\n    Sys.WebForms.Menu.registerClass('Sys.WebForms.Menu');\n}\nSys.WebForms.MenuItem = function(parentMenu, listElement, topLevelMenuItem) {\n    this.keyMap = parentMenu.keyMap;\n    this.parentMenu = parentMenu;\n    this.container = parentMenu.container;\n    this.element = listElement;\n    this.topLevelMenuItem = topLevelMenuItem || this;\n    this._anchor = Sys.WebForms.Menu._domHelper.firstChild(listElement);\n    while (this._anchor && this._anchor.tagName !== 'A') {\n        this._anchor = Sys.WebForms.Menu._domHelper.nextSibling(this._anchor);\n    }\n    if (this._anchor) {\n        this._anchor.tabIndex = -1;\n        var subMenu = this._anchor;\n        while (subMenu && subMenu.tagName !== 'UL') {\n            subMenu = Sys.WebForms.Menu._domHelper.nextSibling(subMenu);\n        }\n        if (subMenu) {\n            this.childMenu = new Sys.WebForms.Menu({ element: subMenu, parentMenuItem: this, depth: parentMenu.depth + 1, container: this.container, keyMap: this.keyMap });\n            if (!this.childMenu.isStatic()) {\n                Sys.WebForms.Menu._domHelper.appendCssClass(this.element, 'has-popup');\n                Sys.WebForms.Menu._domHelper.appendAttributeValue(this.element, 'aria-haspopup', this.childMenu.element.id);\n            }\n        }\n    }\n    Sys.WebForms.Menu._elementObjectMapper.map(listElement, this);\n    Sys.WebForms.Menu._domHelper.appendAttributeValue(listElement, 'role', 'menuitem');\n    Sys.WebForms.Menu._domHelper.appendCssClass(listElement, parentMenu.displayMode);\n    if (this._anchor) {\n        Sys.WebForms.Menu._domHelper.appendCssClass(this._anchor, parentMenu.displayMode);\n    }\n    this.element.style.position = \"relative\";\n    if (this.parentMenu.depth == 1 && this.container.orientation == 'horizontal') {\n        Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? \"right\" : \"left\");\n    }\n    if (!this.container.disabled) {\n        Sys.WebForms.Menu._domHelper.addEvent(this.element, 'mouseover', Sys.WebForms.MenuItem._onmouseover);\n        Sys.WebForms.Menu._domHelper.addEvent(this.element, 'mouseout', Sys.WebForms.MenuItem._onmouseout);\n    }\n};\nSys.WebForms.MenuItem.prototype = {\n    applyUp: function(fn, condition) {\n        condition = condition || function(menuItem) { return menuItem; };\n        var menuItem = this;\n        var lastMenuItem = null;\n        while (condition(menuItem)) {\n            fn(menuItem);\n            lastMenuItem = menuItem;\n            menuItem = menuItem.parentMenu.parentMenuItem;\n        }\n        return lastMenuItem;\n    },\n    blur: function() { this.setTabIndex(-1); },\n    doDispose: function() {\n        Sys.WebForms.Menu._domHelper.removeEvent(this.element, 'mouseover', Sys.WebForms.MenuItem._onmouseover);\n        Sys.WebForms.Menu._domHelper.removeEvent(this.element, 'mouseout', Sys.WebForms.MenuItem._onmouseout);\n        if (this.childMenu) {\n            this.childMenu.doDispose();\n        }\n    },\n    focus: function() {\n        if (!this.parentMenu.get_displayed()) {\n            this.parentMenu.show();\n        }\n        this.setTabIndex(0);\n        this.container.focused = true;\n        this._anchor.focus();\n    },\n    get_highlighted: function() { return /(^|\\s)highlighted(\\s|$)/.test(this._anchor.className); },\n    getTabIndex: function() { return this._anchor.tabIndex; },\n    highlight: function(highlighting) {\n        if (highlighting) {\n            this.applyUp(function(menuItem) {\n                menuItem.parentMenu.parentMenuItem.highlight(true);\n            },\n            function(menuItem) {\n                return !menuItem.parentMenu.isStatic() && menuItem.parentMenu.parentMenuItem;\n            }\n        );\n            Sys.WebForms.Menu._domHelper.appendCssClass(this._anchor, 'highlighted');\n        }\n        else {\n            Sys.WebForms.Menu._domHelper.removeCssClass(this._anchor, 'highlighted');\n            this.setTabIndex(-1);\n        }\n    },\n    hover: function(hovering) {\n        if (hovering) {\n            var currentHoveredItem = this.container.hoveredMenuItem;\n            if (currentHoveredItem) {\n                currentHoveredItem.hover(false);\n            }\n            var currentFocusedItem = this.container.focusedMenuItem;\n            if (currentFocusedItem && currentFocusedItem !== this) {\n                currentFocusedItem.hover(false);\n            }\n            this.applyUp(function(menuItem) {\n                if (menuItem.childMenu && !menuItem.childMenu.get_displayed()) {\n                    menuItem.childMenu.show();\n                }\n            });\n            this.container.hoveredMenuItem = this;\n            this.highlight(true);\n        }\n        else {\n            var menuItem = this;\n            while (menuItem) {\n                menuItem.highlight(false);\n                if (menuItem.childMenu) {\n                    if (!menuItem.childMenu.isStatic()) {\n                        menuItem.childMenu.hide();\n                    }\n                }\n                menuItem = menuItem.parentMenu.parentMenuItem;\n            }\n        }\n    },\n    isSiblingOf: function(menuItem) { return menuItem.parentMenu === this.parentMenu; },\n    mouseout: function() {\n        var menuItem = this,\n            id = this.container.pendingMouseoutId,\n            disappearAfter = this.container.disappearAfter;\n        if (id) {\n            window.clearTimeout(id);\n        }\n        if (disappearAfter > -1) {\n            this.container.pendingMouseoutId =\n                window.setTimeout(function() { menuItem.hover(false); }, disappearAfter);\n        }\n    },\n    mouseover: function() {\n        var id = this.container.pendingMouseoutId;\n        if (id) {\n            window.clearTimeout(id);\n            this.container.pendingMouseoutId = null;\n        }\n        this.hover(true);\n        if (this.container.menu.get_focused()) {\n            this.container.navigateTo(this);\n        }\n    },\n    navigate: function(keyCode) {\n        switch (this.keyMap[keyCode]) {\n            case this.keyMap.next:\n                this.navigateNext();\n                break;\n            case this.keyMap.previous:\n                this.navigatePrevious();\n                break;\n            case this.keyMap.child:\n                this.navigateChild();\n                break;\n            case this.keyMap.parent:\n                this.navigateParent();\n                break;\n            case this.keyMap.tab:\n                this.navigateOut();\n                break;\n        }\n    },\n    navigateChild: function() {\n        var subMenu = this.childMenu;\n        if (subMenu) {\n            var firstChild = subMenu.firstChild();\n            if (firstChild) {\n                this.container.navigateTo(firstChild);\n            }\n        }\n        else {\n            if (this.container.orientation === 'horizontal') {\n                var nextItem = this.topLevelMenuItem.nextSibling || this.topLevelMenuItem.parentMenu.firstChild();\n                if (nextItem == this.topLevelMenuItem) {\n                    return;\n                }\n                this.topLevelMenuItem.childMenu.hide();\n                this.container.navigateTo(nextItem);\n                if (nextItem.childMenu) {\n                    this.container.navigateTo(nextItem.childMenu.firstChild());\n                }\n            }\n        }\n    },\n    navigateNext: function() {\n        if (this.childMenu) {\n            this.childMenu.hide();\n        }\n        var nextMenuItem = this.nextSibling;\n        if (!nextMenuItem && this.parentMenu.isRoot()) {\n            nextMenuItem = this.parentMenu.parentMenuItem;\n            if (nextMenuItem) {\n                nextMenuItem = nextMenuItem.nextSibling;\n            }\n        }\n        if (!nextMenuItem) {\n            nextMenuItem = this.parentMenu.firstChild();\n        }\n        if (nextMenuItem) {\n            this.container.navigateTo(nextMenuItem);\n        }\n    },\n    navigateOut: function() {\n        this.parentMenu.blur();\n    },\n    navigateParent: function() {\n        var parentMenu = this.parentMenu,\n            horizontal = this.container.orientation === 'horizontal';\n        if (!parentMenu) return;\n        if (horizontal && this.childMenu && parentMenu.isRoot()) {\n            this.navigateChild();\n            return;\n        }\n        if (parentMenu.parentMenuItem && !parentMenu.isRoot()) {\n            if (horizontal && this.parentMenu.depth === 2) {\n                var previousItem = this.parentMenu.parentMenuItem.previousSibling;\n                if (!previousItem) {\n                    previousItem = this.parentMenu.rootMenu.lastChild();\n                }\n                this.topLevelMenuItem.childMenu.hide();\n                this.container.navigateTo(previousItem);\n                if (previousItem.childMenu) {\n                    this.container.navigateTo(previousItem.childMenu.firstChild());\n                }\n            }\n            else {\n                this.parentMenu.hide();\n            }\n        }\n    },\n    navigatePrevious: function() {\n        if (this.childMenu) {\n            this.childMenu.hide();\n        }\n        var previousMenuItem = this.previousSibling;\n        if (previousMenuItem) {\n            var childMenu = previousMenuItem.childMenu;\n            if (childMenu && childMenu.isRoot()) {\n                previousMenuItem = childMenu.lastChild();\n            }\n        }\n        if (!previousMenuItem && this.parentMenu.isRoot()) {\n            previousMenuItem = this.parentMenu.parentMenuItem;\n        }\n        if (!previousMenuItem) {\n            previousMenuItem = this.parentMenu.lastChild();\n        }\n        if (previousMenuItem) {\n            this.container.navigateTo(previousMenuItem);\n        }\n    },\n    setTabIndex: function(index) { if (this._anchor) this._anchor.tabIndex = index; }\n};\nSys.WebForms.MenuItem._onmouseout = function(e) {\n    var menuItem = Sys.WebForms.Menu._elementObjectMapper.getMappedObject(this);\n    if (!menuItem) {\n        return;\n    }\n    menuItem.mouseout();\n    Sys.WebForms.Menu._domHelper.cancelEvent(e);\n};\nSys.WebForms.MenuItem._onmouseover = function(e) {\n    var menuItem = Sys.WebForms.Menu._elementObjectMapper.getMappedObject(this);\n    if (!menuItem) {\n        return;\n    }\n    menuItem.mouseover();\n    Sys.WebForms.Menu._domHelper.cancelEvent(e);\n};\nSys.WebForms.Menu._domHelper = {\n    addEvent: function(element, eventName, fn, useCapture) {\n        if (element.addEventListener) {\n            element.addEventListener(eventName, fn, !!useCapture);\n        }\n        else {\n            element['on' + eventName] = fn;\n        }\n    },\n    appendAttributeValue: function(element, name, value) {\n        this.updateAttributeValue('append', element, name, value);\n    },\n    appendCssClass: function(element, value) {\n        this.updateClassName('append', element, name, value);\n    },\n    appendString: function(getString, setString, value) {\n        var currentValue = getString();\n        if (!currentValue) {\n            setString(value);\n            return;\n        }\n        var regex = this._regexes.getRegex('(^| )' + value + '($| )');\n        if (regex.test(currentValue)) {\n            return;\n        }\n        setString(currentValue + ' ' + value);\n    },\n    cancelEvent: function(e) {\n        var event = e || window.event;\n        if (event) {\n            event.cancelBubble = true;\n            if (event.stopPropagation) {\n                event.stopPropagation();\n            }\n        }\n    },\n    contains: function(ancestor, descendant) {\n        for (; descendant && (descendant !== ancestor); descendant = descendant.parentNode) { }\n        return !!descendant;\n    },\n    firstChild: function(element) {\n        var child = element.firstChild;\n        if (child && child.nodeType !== 1) {   \n            child = this.nextSibling(child);\n        }\n        return child;\n    },\n    getElement: function(elementOrId) { return typeof elementOrId === 'string' ? document.getElementById(elementOrId) : elementOrId; },\n    getElementDirection: function(element) {\n        if (element) {\n            if (element.dir) {\n                return element.dir;\n            }\n            return this.getElementDirection(element.parentNode);\n        }\n        return \"ltr\";\n    },\n    getKeyCode: function(event) { return event.keyCode || event.charCode || 0; },\n    insertAfter: function(element, elementToInsert) {\n        var next = element.nextSibling;\n        if (next) {\n            element.parentNode.insertBefore(elementToInsert, next);\n        }\n        else if (element.parentNode) {\n            element.parentNode.appendChild(elementToInsert);\n        }\n    },\n    nextSibling: function(element) {\n        var sibling = element.nextSibling;\n        while (sibling) {\n            if (sibling.nodeType === 1) {   \n                return sibling;\n            }\n            sibling = sibling.nextSibling;\n        }\n    },\n    removeAttributeValue: function(element, name, value) {\n        this.updateAttributeValue('remove', element, name, value);\n    },\n    removeCssClass: function(element, value) {\n        this.updateClassName('remove', element, name, value);\n    },\n    removeEvent: function(element, eventName, fn, useCapture) {\n        if (element.removeEventListener) {\n            element.removeEventListener(eventName, fn, !!useCapture);\n        }\n        else if (element.detachEvent) {\n            element.detachEvent('on' + eventName, fn)\n        }\n        element['on' + eventName] = null;\n    },\n    removeString: function(getString, setString, valueToRemove) {\n        var currentValue = getString();\n        if (currentValue) {\n            var regex = this._regexes.getRegex('(\\\\s|\\\\b)' + valueToRemove + '$|\\\\b' + valueToRemove + '\\\\s+');\n            setString(currentValue.replace(regex, ''));\n        }\n    },\n    setFloat: function(element, direction) {\n        element.style.styleFloat = direction;\n        element.style.cssFloat = direction;\n    },\n    updateAttributeValue: function(operation, element, name, value) {\n        this[operation + 'String'](\n                function() {\n                    return element.getAttribute(name);\n                },\n                function(newValue) {\n                    element.setAttribute(name, newValue);\n                },\n                value\n            );\n    },\n    updateClassName: function(operation, element, name, value) {\n        this[operation + 'String'](\n                function() {\n                    return element.className;\n                },\n                function(newValue) {\n                    element.className = newValue;\n                },\n                value\n            );\n    },\n    _regexes: {\n        getRegex: function(pattern) {\n            var regex = this[pattern];\n            if (!regex) {\n                this[pattern] = regex = new RegExp(pattern);\n            }\n            return regex;\n        }\n    }\n};\nSys.WebForms.Menu._elementObjectMapper = {\n    _computedId: 0,\n    _mappings: {},\n    _mappingIdName: 'Sys.WebForms.Menu.Mapping',\n    getMappedObject: function(element) {\n        var id = element[this._mappingIdName];\n        if (id) {\n            return this._mappings[this._mappingIdName + ':' + id];\n        }\n    },\n    map: function(element, theObject) {\n        var mappedObject = element[this._mappingIdName];\n        if (mappedObject === theObject) {\n            return;\n        }\n        var objectId = element[this._mappingIdName] || element.id || '%' + (++this._computedId); \n        element[this._mappingIdName] = objectId;\n        this._mappings[this._mappingIdName + ':' + objectId] = theObject;\n        theObject.mappingId = objectId;\n    }\n};\nSys.WebForms.Menu._keyboardMapping = new (function() {\n    var LEFT_ARROW = 37;\n    var UP_ARROW = 38;\n    var RIGHT_ARROW = 39;\n    var DOWN_ARROW = 40;\n    var TAB = 9;\n    var ESCAPE = 27;\n    this.vertical = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.vertical[DOWN_ARROW] = this.vertical.next;\n    this.vertical[UP_ARROW] = this.vertical.previous;\n    this.vertical[RIGHT_ARROW] = this.vertical.child;\n    this.vertical[LEFT_ARROW] = this.vertical.parent;\n    this.vertical[TAB] = this.vertical[ESCAPE] = this.vertical.tab;\n    this.verticalRtl = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.verticalRtl[DOWN_ARROW] = this.verticalRtl.next;\n    this.verticalRtl[UP_ARROW] = this.verticalRtl.previous;\n    this.verticalRtl[LEFT_ARROW] = this.verticalRtl.child;\n    this.verticalRtl[RIGHT_ARROW] = this.verticalRtl.parent;\n    this.verticalRtl[TAB] = this.verticalRtl[ESCAPE] = this.verticalRtl.tab;\n    this.horizontal = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.horizontal[RIGHT_ARROW] = this.horizontal.next;\n    this.horizontal[LEFT_ARROW] = this.horizontal.previous;\n    this.horizontal[DOWN_ARROW] = this.horizontal.child;\n    this.horizontal[UP_ARROW] = this.horizontal.parent;\n    this.horizontal[TAB] = this.horizontal[ESCAPE] = this.horizontal.tab;\n    this.horizontalRtl = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.horizontalRtl[RIGHT_ARROW] = this.horizontalRtl.previous;\n    this.horizontalRtl[LEFT_ARROW] = this.horizontalRtl.next;\n    this.horizontalRtl[DOWN_ARROW] = this.horizontalRtl.child;\n    this.horizontalRtl[UP_ARROW] = this.horizontalRtl.parent;\n    this.horizontalRtl[TAB] = this.horizontalRtl[ESCAPE] = this.horizontalRtl.tab;\n    this.horizontal.contains = this.horizontalRtl.contains = this.vertical.contains = this.verticalRtl.contains = function(keycode) {\n        return this[keycode] != null;\n    };\n})();\nSys.WebForms._MenuContainer = function(options) {\n    this.focused = false;\n    this.disabled = options.disabled;\n    this.staticDisplayLevels = options.staticDisplayLevels || 1;\n    this.element = options.element;\n    this.orientation = options.orientation || 'vertical';\n    this.disappearAfter = options.disappearAfter;\n    this.rightToLeft = Sys.WebForms.Menu._domHelper.getElementDirection(this.element) === 'rtl';\n    Sys.WebForms.Menu._elementObjectMapper.map(this.element, this);\n    this.menu = options.menu;\n    this.menu.rootMenu = this.menu;\n    this.menu.displayMode = 'static';\n    this.menu.element.style.position = 'relative';\n    this.menu.element.style.width = 'auto';\n    if (this.orientation === 'vertical') {\n        Sys.WebForms.Menu._domHelper.appendAttributeValue(this.menu.element, 'role', 'menu');\n        if (this.rightToLeft) {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.verticalRtl;\n        }\n        else {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.vertical;\n        }\n    }\n    else {\n        Sys.WebForms.Menu._domHelper.appendAttributeValue(this.menu.element, 'role', 'menubar');\n        if (this.rightToLeft) {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.horizontalRtl;\n        }\n        else {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.horizontal;\n        }\n    }\n    var floatBreak = document.createElement('div');\n    floatBreak.style.clear = this.rightToLeft ? \"right\" : \"left\";\n    this.element.appendChild(floatBreak);\n    Sys.WebForms.Menu._domHelper.setFloat(this.element, this.rightToLeft ? \"right\" : \"left\");\n    Sys.WebForms.Menu._domHelper.insertAfter(this.element, floatBreak);\n    if (!this.disabled) {\n        Sys.WebForms.Menu._domHelper.addEvent(this.menu.element, 'focus', this._onfocus, true);\n        Sys.WebForms.Menu._domHelper.addEvent(this.menu.element, 'keydown', this._onkeydown);\n        var menuContainer = this;\n        this.element.dispose = function() {\n            if (menuContainer.element.dispose) {\n                menuContainer.element.dispose = null;\n                Sys.WebForms.Menu._domHelper.removeEvent(menuContainer.menu.element, 'focus', menuContainer._onfocus, true);\n                Sys.WebForms.Menu._domHelper.removeEvent(menuContainer.menu.element, 'keydown', menuContainer._onkeydown);\n                menuContainer.menu.doDispose();\n            }\n        };\n        Sys.WebForms.Menu._domHelper.addEvent(window, 'unload', function() {\n            if (menuContainer.element.dispose) {\n                menuContainer.element.dispose();\n            }\n        });\n    }\n};\nSys.WebForms._MenuContainer.prototype = {\n    blur: function() {\n        this.focused = false;\n        this.isBlurring = false;\n        this.menu.collapse();\n        this.focusedMenuItem = null;\n    },\n    focus: function(e) { this.focused = true; },\n    navigateTo: function(menuItem) {\n        if (this.focusedMenuItem && this.focusedMenuItem !== this) {\n            this.focusedMenuItem.highlight(false);\n        }\n        menuItem.highlight(true);\n        menuItem.focus();\n        this.focusedMenuItem = menuItem;\n    },\n    _onfocus: function(e) {\n        var event = e || window.event;\n        if (event.srcElement && this) {\n            if (Sys.WebForms.Menu._domHelper.contains(this.element, event.srcElement)) {\n                if (!this.focused) {\n                    this.focus();\n                }\n            }\n        }\n    },\n    _onkeydown: function(e) {\n        var thisMenu = Sys.WebForms.Menu._elementObjectMapper.getMappedObject(this);\n        var keyCode = Sys.WebForms.Menu._domHelper.getKeyCode(e || window.event);\n        if (thisMenu) {\n            thisMenu.handleKeyPress(keyCode);\n        }\n    }\n};\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/SmartNav.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/SmartNav.js\nvar snSrc;\nif ((typeof(window.__smartNav) == \"undefined\") || (window.__smartNav == null))\n{\n    window.__smartNav = new Object();\n    window.__smartNav.update = function()\n    {\n        var sn = window.__smartNav;\n        var fd;\n        document.detachEvent(\"onstop\", sn.stopHif);\n        sn.inPost = false;\n        try { fd = frames[\"__hifSmartNav\"].document; } catch (e) {return;}\n        var fdr = fd.getElementsByTagName(\"asp_smartnav_rdir\");\n        if (fdr.length > 0)\n        {\n            if ((typeof(sn.sHif) == \"undefined\") || (sn.sHif == null))\n            {\n                sn.sHif = document.createElement(\"IFRAME\");\n                sn.sHif.name = \"__hifSmartNav\";\n                sn.sHif.style.display = \"none\";\n                sn.sHif.src = snSrc;\n            }\n            try {window.location = fdr[0].url;} catch (e) {};\n            return;\n        }\n        var fdurl = fd.location.href;\n        var index = fdurl.indexOf(snSrc);\n        if ((index != -1 && index == fdurl.length-snSrc.length)\n            || fdurl == \"about:blank\")\n            return;\n\t\tvar fdurlb = fdurl.split(\"?\")[0];\n\t\tif (document.location.href.indexOf(fdurlb) < 0)\n\t\t{\n            document.location.href=fdurl;\n\t\t    return;\n\t\t}\n\t\tsn._savedOnLoad = window.onload;\n\t\twindow.onload = null;\n\t\twindow.__smartNav.updateHelper();\n\t}\n\twindow.__smartNav.updateHelper = function()\n\t{\n\t\tif (document.readyState != \"complete\")\n\t\t{\n\t\t    window.setTimeout(window.__smartNav.updateHelper, 25);\n\t\t    return;\n\t\t}\n\t\twindow.__smartNav.loadNewContent();\n\t}\n\twindow.__smartNav.loadNewContent = function()\n\t{\n\t\tvar sn = window.__smartNav;\n\t\tvar fd;\n\t\ttry { fd = frames[\"__hifSmartNav\"].document; } catch (e) {return;}\n        if ((typeof(sn.sHif) != \"undefined\") && (sn.sHif != null))\n        {\n            sn.sHif.removeNode(true);\n            sn.sHif = null;\n        }\n        var hdm = document.getElementsByTagName(\"head\")[0];\n        var hk = hdm.childNodes;\n        var tt = null;\n        var i;\n        for (i = hk.length - 1; i>= 0; i--)\n        {\n            if (hk[i].tagName == \"TITLE\")\n            {\n                tt = hk[i].outerHTML;\n                continue;\n            }\n            if (hk[i].tagName != \"BASEFONT\" || hk[i].innerHTML.length == 0)\n                hdm.removeChild(hdm.childNodes[i]);\n        }\n        var kids = fd.getElementsByTagName(\"head\")[0].childNodes;\n        for (i = 0; i < kids.length; i++)\n        {\n            var tn = kids[i].tagName;\n            var k = document.createElement(tn);\n            k.id = kids[i].id;\n            k.mergeAttributes(kids[i]);\n            switch(tn)\n            {\n            case \"TITLE\":\n                if (tt == kids[i].outerHTML)\n                    continue;\n                k.innerText = kids[i].text;\n                hdm.insertAdjacentElement(\"afterbegin\", k);\n                continue;\n            case \"BASEFONT\" :\n                if (kids[i].innerHTML.length > 0)\n                    continue;\n                break;\n            default:\n                var o = document.createElement(\"BODY\");\n                o.innerHTML = \"<BODY>\" + kids[i].outerHTML + \"</BODY>\";\n                k = o.firstChild;\n                break;\n            }\n            if((typeof(k) != \"undefined\") && (k != null))\n                hdm.appendChild(k);\n        }\n        document.body.clearAttributes();\n        document.body.id = fd.body.id;\n        document.body.mergeAttributes(fd.body);\n        var newBodyLoad = fd.body.onload;\n        if ((typeof(newBodyLoad) != \"undefined\") && (newBodyLoad != null))\n            document.body.onload = newBodyLoad;\n        else\n            document.body.onload = sn._savedOnLoad;\n        var s = \"<BODY>\" + fd.body.innerHTML + \"</BODY>\";\n        if ((typeof(sn.hif) != \"undefined\") && (sn.hif != null))\n        {\n            var hifP = sn.hif.parentElement;\n            if ((typeof(hifP) != \"undefined\") && (hifP != null))\n                sn.sHif=hifP.removeChild(sn.hif);\n        }\n        document.body.innerHTML = s;\n        var sc = document.scripts;\n        for (i = 0; i < sc.length; i++)\n        {\n            sc[i].text = sc[i].text;\n        }\n        sn.hif = document.all(\"__hifSmartNav\");\n        if ((typeof(sn.hif) != \"undefined\") && (sn.hif != null))\n        {\n            var hif = sn.hif;\n            sn.hifName = \"__hifSmartNav\" + (new Date()).getTime();\n            frames[\"__hifSmartNav\"].name = sn.hifName;\n            sn.hifDoc = hif.contentWindow.document;\n            if (sn.ie5)\n                hif.parentElement.removeChild(hif);\n            window.setTimeout(sn.restoreFocus,0);\n        }\n        if (typeof(window.onload) == \"string\")\n        {\n            try { eval(window.onload) } catch (e) {};\n        }\n        else if ((typeof(window.onload) != \"undefined\") && (window.onload != null))\n        {\n            try { window.onload() } catch (e) {};\n        }\n        sn._savedOnLoad = null;\n        sn.attachForm();\n    };\n    window.__smartNav.restoreFocus = function()\n    {\n        if (window.__smartNav.inPost == true) return;\n        var curAe = document.activeElement;\n        var sAeId = window.__smartNav.ae;\n        if (((typeof(sAeId) == \"undefined\") || (sAeId == null)) ||\n            (typeof(curAe) != \"undefined\") && (curAe != null) && (curAe.id == sAeId || curAe.name == sAeId))\n            return;\n        var ae = document.all(sAeId);\n        if ((typeof(ae) == \"undefined\") || (ae == null)) return;\n        try { ae.focus(); } catch(e){};\n    }\n    window.__smartNav.saveHistory = function()\n    {\n        if ((typeof(window.__smartNav.hif) != \"undefined\") && (window.__smartNav.hif != null))\n            window.__smartNav.hif.removeNode();\n        if ((typeof(window.__smartNav.sHif) != \"undefined\") && (window.__smartNav.sHif != null)\n            && (typeof(document.all[window.__smartNav.siHif]) != \"undefined\")\n            && (document.all[window.__smartNav.siHif] != null)) {\n            document.all[window.__smartNav.siHif].insertAdjacentElement(\n                        \"BeforeBegin\", window.__smartNav.sHif);\n        }\n    }\n    window.__smartNav.stopHif = function()\n    {\n        document.detachEvent(\"onstop\", window.__smartNav.stopHif);\n        var sn = window.__smartNav;\n        if (((typeof(sn.hifDoc) == \"undefined\") || (sn.hifDoc == null)) &&\n            (typeof(sn.hif) != \"undefined\") && (sn.hif != null))\n        {\n            try {sn.hifDoc = sn.hif.contentWindow.document;}\n            catch(e){sn.hifDoc=null}\n        }\n        if (sn.hifDoc != null)\n        {\n            try {sn.hifDoc.execCommand(\"stop\");} catch (e){}\n        }\n    }\n    window.__smartNav.init =  function()\n    {\n        var sn = window.__smartNav;\n        window.__smartNav.form.__smartNavPostBack.value = 'true';\n        document.detachEvent(\"onstop\", sn.stopHif);\n        document.attachEvent(\"onstop\", sn.stopHif);\n        try { if (window.event.returnValue == false) return; } catch(e) {}\n        sn.inPost = true;\n        if ((typeof(document.activeElement) != \"undefined\") && (document.activeElement != null))\n        {\n            var ae = document.activeElement.id;\n            if (ae.length == 0)\n                ae = document.activeElement.name;\n            sn.ae = ae;\n        }\n        else\n            sn.ae = null;\n        try {document.selection.empty();} catch (e) {}\n        if ((typeof(sn.hif) == \"undefined\") || (sn.hif == null))\n        {\n            sn.hif = document.all(\"__hifSmartNav\");\n            sn.hifDoc = sn.hif.contentWindow.document;\n        }\n        if ((typeof(sn.hifDoc) != \"undefined\") && (sn.hifDoc != null))\n            try {sn.hifDoc.designMode = \"On\";} catch(e){};\n        if ((typeof(sn.hif.parentElement) == \"undefined\") || (sn.hif.parentElement == null))\n            document.body.appendChild(sn.hif);\n        var hif = sn.hif;\n        hif.detachEvent(\"onload\", sn.update);\n        hif.attachEvent(\"onload\", sn.update);\n        window.__smartNav.fInit = true;\n    };\n    window.__smartNav.submit = function()\n    {\n        window.__smartNav.fInit = false;\n        try { window.__smartNav.init(); } catch(e) {}\n        if (window.__smartNav.fInit) {\n            window.__smartNav.form._submit();\n        }\n    };\n    window.__smartNav.attachForm = function()\n    {\n        var cf = document.forms;\n        for (var i=0; i<cf.length; i++)\n        {\n            if ((typeof(cf[i].__smartNavEnabled) != \"undefined\") && (cf[i].__smartNavEnabled != null))\n            {\n                window.__smartNav.form = cf[i];\n                window.__smartNav.form.insertAdjacentHTML(\"beforeEnd\", \"<input type='hidden' name='__smartNavPostBack' value='false' />\");\n                break;\n            }\n        }\n        var snfm = window.__smartNav.form;\n        if ((typeof(snfm) == \"undefined\") || (snfm == null)) return false;\n        var sft = snfm.target;\n        if (sft.length != 0 && sft.indexOf(\"__hifSmartNav\") != 0) return false;\n        var sfc = snfm.action.split(\"?\")[0];\n        var url = window.location.href.split(\"?\")[0];\n        if (url.charAt(url.length-1) != '/' && url.lastIndexOf(sfc) + sfc.length != url.length) return false;\n        if (snfm.__formAttached == true) return true;\n        snfm.__formAttached = true;\n        snfm.attachEvent(\"onsubmit\", window.__smartNav.init);\n        snfm._submit = snfm.submit;\n        snfm.submit = window.__smartNav.submit;\n        snfm.target = window.__smartNav.hifName;\n        return true;\n    };\n    window.__smartNav.hifName = \"__hifSmartNav\" + (new Date()).getTime();\n    window.__smartNav.ie5 = navigator.appVersion.indexOf(\"MSIE 5\") > 0;\n    var rc = window.__smartNav.attachForm();\n    var hif = document.all(\"__hifSmartNav\");\n    if ((typeof(snSrc) == \"undefined\") || (snSrc == null)) {\n\t    if (typeof(window.dialogHeight) != \"undefined\") {\n\t            snSrc = \"IEsmartnav1\";\n\t\t    hif.src = snSrc;\n\t    } else {\n\t\t    snSrc = hif.src;\n\t    }\n    }\n    if (rc)\n    {\n        var fsn = frames[\"__hifSmartNav\"];\n        fsn.name = window.__smartNav.hifName;\n        window.__smartNav.siHif = hif.sourceIndex;\n        try {\n            if (fsn.document.location != snSrc)\n            {\n                fsn.document.designMode = \"On\";\n                hif.attachEvent(\"onload\",window.__smartNav.update);\n                window.__smartNav.hif = hif;\n            }\n        }\n        catch (e) { window.__smartNav.hif = hif; }\n        window.attachEvent(\"onbeforeunload\", window.__smartNav.saveHistory);\n    }\n    else\n        window.__smartNav = null;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/TreeView.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/TreeView.js\nfunction TreeView_HoverNode(data, node) {\n    if (!data) {\n        return;\n    }\n    node.hoverClass = data.hoverClass;\n    WebForm_AppendToClassName(node, data.hoverClass);\n    if (__nonMSDOMBrowser) {\n        node = node.childNodes[node.childNodes.length - 1];\n    }\n    else {\n        node = node.children[node.children.length - 1];\n    }\n    node.hoverHyperLinkClass = data.hoverHyperLinkClass;\n    WebForm_AppendToClassName(node, data.hoverHyperLinkClass);\n}\nfunction TreeView_GetNodeText(node) {\n    var trNode = WebForm_GetParentByTagName(node, \"TR\");\n    var outerNodes;\n    if (trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName) {\n        outerNodes = trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName(\"A\");\n        if (!outerNodes || outerNodes.length == 0) {\n            outerNodes = trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName(\"SPAN\");\n        }\n    }\n    var textNode = (outerNodes && outerNodes.length > 0) ?\n        outerNodes[0].childNodes[0] :\n        trNode.childNodes[trNode.childNodes.length - 1].childNodes[0];\n    return (textNode && textNode.nodeValue) ? textNode.nodeValue : \"\";\n}\nfunction TreeView_PopulateNode(data, index, node, selectNode, selectImageNode, lineType, text, path, databound, datapath, parentIsLast) {\n    if (!data) {\n        return;\n    }\n    var context = new Object();\n    context.data = data;\n    context.node = node;\n    context.selectNode = selectNode;\n    context.selectImageNode = selectImageNode;\n    context.lineType = lineType;\n    context.index = index;\n    context.isChecked = \"f\";\n    var tr = WebForm_GetParentByTagName(node, \"TR\");\n    if (tr) {\n        var checkbox = tr.getElementsByTagName(\"INPUT\");\n        if (checkbox && (checkbox.length > 0)) {\n            for (var i = 0; i < checkbox.length; i++) {\n                if (checkbox[i].type.toLowerCase() == \"checkbox\") {\n                    if (checkbox[i].checked) {\n                        context.isChecked = \"t\";\n                    }\n                    break;\n                }\n            }\n        }\n    }\n    var param = index + \"|\" + data.lastIndex + \"|\" + databound + context.isChecked + parentIsLast + \"|\" +\n        text.length + \"|\" + text + datapath.length + \"|\" + datapath + path;\n    TreeView_PopulateNodeDoCallBack(context, param);\n}\nfunction TreeView_ProcessNodeData(result, context) {\n    var treeNode = context.node;\n    if (result.length > 0) {\n        var ci =  result.indexOf(\"|\", 0);\n        context.data.lastIndex = result.substring(0, ci);\n        ci = result.indexOf(\"|\", ci + 1);\n        var newExpandState = result.substring(context.data.lastIndex.length + 1, ci);\n        context.data.expandState.value += newExpandState;\n        var chunk = result.substr(ci + 1);\n        var newChildren, table;\n        if (__nonMSDOMBrowser) {\n            var newDiv = document.createElement(\"div\");\n            newDiv.innerHTML = chunk;\n            table = WebForm_GetParentByTagName(treeNode, \"TABLE\");\n            newChildren = null;\n            if ((typeof(table.nextSibling) == \"undefined\") || (table.nextSibling == null)) {\n                table.parentNode.insertBefore(newDiv.firstChild, table.nextSibling);\n                newChildren = table.previousSibling;\n            }\n            else {\n                table = table.nextSibling;\n                table.parentNode.insertBefore(newDiv.firstChild, table);\n                newChildren = table.previousSibling;\n            }\n            newChildren = document.getElementById(treeNode.id + \"Nodes\");\n        }\n        else {\n            table = WebForm_GetParentByTagName(treeNode, \"TABLE\");\n            table.insertAdjacentHTML(\"afterEnd\", chunk);\n            newChildren = document.all[treeNode.id + \"Nodes\"];\n        }\n        if ((typeof(newChildren) != \"undefined\") && (newChildren != null)) {\n            TreeView_ToggleNode(context.data, context.index, treeNode, context.lineType, newChildren);\n            treeNode.href = document.getElementById ?\n                \"javascript:TreeView_ToggleNode(\" + context.data.name + \",\" + context.index + \",document.getElementById('\" + treeNode.id + \"'),'\" + context.lineType + \"',document.getElementById('\" + newChildren.id + \"'))\" :\n                \"javascript:TreeView_ToggleNode(\" + context.data.name + \",\" + context.index + \",\" + treeNode.id + \",'\" + context.lineType + \"',\" + newChildren.id + \")\";\n            if ((typeof(context.selectNode) != \"undefined\") && (context.selectNode != null) && context.selectNode.href &&\n                (context.selectNode.href.indexOf(\"javascript:TreeView_PopulateNode\", 0) == 0)) {\n                context.selectNode.href = treeNode.href;\n            }\n            if ((typeof(context.selectImageNode) != \"undefined\") && (context.selectImageNode != null) && context.selectNode.href &&\n                (context.selectImageNode.href.indexOf(\"javascript:TreeView_PopulateNode\", 0) == 0)) {\n                context.selectImageNode.href = treeNode.href;\n            }\n        }\n        context.data.populateLog.value += context.index + \",\";\n    }\n    else {\n        var img = treeNode.childNodes ? treeNode.childNodes[0] : treeNode.children[0];\n        if ((typeof(img) != \"undefined\") && (img != null)) {\n            var lineType = context.lineType;\n            if (lineType == \"l\") {\n                img.src = context.data.images[13];\n            }\n            else if (lineType == \"t\") {\n                img.src = context.data.images[10];\n            }\n            else if (lineType == \"-\") {\n                img.src = context.data.images[16];\n            }\n            else {\n                img.src = context.data.images[3];\n            }\n            var pe;\n            if (__nonMSDOMBrowser) {\n                pe = treeNode.parentNode;\n                pe.insertBefore(img, treeNode);\n                pe.removeChild(treeNode);\n            }\n            else {\n                pe = treeNode.parentElement;\n                treeNode.style.visibility=\"hidden\";\n                treeNode.style.display=\"none\";\n                pe.insertAdjacentElement(\"afterBegin\", img);\n            }\n        }\n    }\n}\nfunction TreeView_SelectNode(data, node, nodeId) {\n    if (!data) {\n        return;\n    }\n    if ((typeof(data.selectedClass) != \"undefined\") && (data.selectedClass != null)) {\n        var id = data.selectedNodeID.value;\n        if (id.length > 0) {\n            var selectedNode = document.getElementById(id);\n            if ((typeof(selectedNode) != \"undefined\") && (selectedNode != null)) {\n                WebForm_RemoveClassName(selectedNode, data.selectedHyperLinkClass);\n                selectedNode = WebForm_GetParentByTagName(selectedNode, \"TD\");\n                WebForm_RemoveClassName(selectedNode, data.selectedClass);\n            }\n        }\n        WebForm_AppendToClassName(node, data.selectedHyperLinkClass);\n        node = WebForm_GetParentByTagName(node, \"TD\");\n        WebForm_AppendToClassName(node, data.selectedClass)\n    }\n    data.selectedNodeID.value = nodeId;\n}\nfunction TreeView_ToggleNode(data, index, node, lineType, children) {\n    if (!data) {\n        return;\n    }\n    var img = node.childNodes[0];\n    var newExpandState;\n    try {\n        if (children.style.display == \"none\") {\n            children.style.display = \"block\";\n            newExpandState = \"e\";\n            if ((typeof(img) != \"undefined\") && (img != null)) {\n                if (lineType == \"l\") {\n                    img.src = data.images[15];\n                }\n                else if (lineType == \"t\") {\n                    img.src = data.images[12];\n                }\n                else if (lineType == \"-\") {\n                    img.src = data.images[18];\n                }\n                else {\n                    img.src = data.images[5];\n                }\n                img.alt = data.collapseToolTip.replace(/\\{0\\}/, TreeView_GetNodeText(node));\n            }\n        }\n        else {\n            children.style.display = \"none\";\n            newExpandState = \"c\";\n            if ((typeof(img) != \"undefined\") && (img != null)) {\n                if (lineType == \"l\") {\n                    img.src = data.images[14];\n                }\n                else if (lineType == \"t\") {\n                    img.src = data.images[11];\n                }\n                else if (lineType == \"-\") {\n                    img.src = data.images[17];\n                }\n                else {\n                    img.src = data.images[4];\n                }\n                img.alt = data.expandToolTip.replace(/\\{0\\}/, TreeView_GetNodeText(node));\n            }\n        }\n    }\n    catch(e) {}\n    data.expandState.value =  data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1);\n}\nfunction TreeView_UnhoverNode(node) {\n    if (!node.hoverClass) {\n        return;\n    }\n    WebForm_RemoveClassName(node, node.hoverClass);\n    if (__nonMSDOMBrowser) {\n        node = node.childNodes[node.childNodes.length - 1];\n    }\n    else {\n        node = node.children[node.children.length - 1];\n    }\n    WebForm_RemoveClassName(node, node.hoverHyperLinkClass);\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/WebForms.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebForms.js\nfunction WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) {\n    this.eventTarget = eventTarget;\n    this.eventArgument = eventArgument;\n    this.validation = validation;\n    this.validationGroup = validationGroup;\n    this.actionUrl = actionUrl;\n    this.trackFocus = trackFocus;\n    this.clientSubmit = clientSubmit;\n}\nfunction WebForm_DoPostBackWithOptions(options) {\n    var validationResult = true;\n    if (options.validation) {\n        if (typeof(Page_ClientValidate) == 'function') {\n            validationResult = Page_ClientValidate(options.validationGroup);\n        }\n    }\n    if (validationResult) {\n        if ((typeof(options.actionUrl) != \"undefined\") && (options.actionUrl != null) && (options.actionUrl.length > 0)) {\n            theForm.action = options.actionUrl;\n        }\n        if (options.trackFocus) {\n            var lastFocus = theForm.elements[\"__LASTFOCUS\"];\n            if ((typeof(lastFocus) != \"undefined\") && (lastFocus != null)) {\n                if (typeof(document.activeElement) == \"undefined\") {\n                    lastFocus.value = options.eventTarget;\n                }\n                else {\n                    var active = document.activeElement;\n                    if ((typeof(active) != \"undefined\") && (active != null)) {\n                        if ((typeof(active.id) != \"undefined\") && (active.id != null) && (active.id.length > 0)) {\n                            lastFocus.value = active.id;\n                        }\n                        else if (typeof(active.name) != \"undefined\") {\n                            lastFocus.value = active.name;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    if (options.clientSubmit) {\n        __doPostBack(options.eventTarget, options.eventArgument);\n    }\n}\nvar __pendingCallbacks = new Array();\nvar __synchronousCallBackIndex = -1;\nfunction WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {\n    var postData = __theFormPostData +\n                \"__CALLBACKID=\" + WebForm_EncodeCallback(eventTarget) +\n                \"&__CALLBACKPARAM=\" + WebForm_EncodeCallback(eventArgument);\n    if (theForm[\"__EVENTVALIDATION\"]) {\n        postData += \"&__EVENTVALIDATION=\" + WebForm_EncodeCallback(theForm[\"__EVENTVALIDATION\"].value);\n    }\n    var xmlRequest,e;\n    try {\n        xmlRequest = new XMLHttpRequest();\n    }\n    catch(e) {\n        try {\n            xmlRequest = new ActiveXObject(\"Microsoft.XMLHTTP\");\n        }\n        catch(e) {\n        }\n    }\n    var setRequestHeaderMethodExists = true;\n    try {\n        setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);\n    }\n    catch(e) {}\n    var callback = new Object();\n    callback.eventCallback = eventCallback;\n    callback.context = context;\n    callback.errorCallback = errorCallback;\n    callback.async = useAsync;\n    var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);\n    if (!useAsync) {\n        if (__synchronousCallBackIndex != -1) {\n            __pendingCallbacks[__synchronousCallBackIndex] = null;\n        }\n        __synchronousCallBackIndex = callbackIndex;\n    }\n    if (setRequestHeaderMethodExists) {\n        xmlRequest.onreadystatechange = WebForm_CallbackComplete;\n        callback.xmlRequest = xmlRequest;\n        // e.g. http:\n        var action = theForm.action || document.location.pathname, fragmentIndex = action.indexOf('#');\n        if (fragmentIndex !== -1) {\n            action = action.substr(0, fragmentIndex);\n        }\n        if (!__nonMSDOMBrowser) {\n            var queryIndex = action.indexOf('?');\n            if (queryIndex !== -1) {\n                var path = action.substr(0, queryIndex);\n                if (path.indexOf(\"%\") === -1) {\n                    action = encodeURI(path) + action.substr(queryIndex);\n                }\n            }\n            else if (action.indexOf(\"%\") === -1) {\n                action = encodeURI(action);\n            }\n        }\n        xmlRequest.open(\"POST\", action, true);\n        xmlRequest.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\");\n        xmlRequest.send(postData);\n        return;\n    }\n    callback.xmlRequest = new Object();\n    var callbackFrameID = \"__CALLBACKFRAME\" + callbackIndex;\n    var xmlRequestFrame = document.frames[callbackFrameID];\n    if (!xmlRequestFrame) {\n        xmlRequestFrame = document.createElement(\"IFRAME\");\n        xmlRequestFrame.width = \"1\";\n        xmlRequestFrame.height = \"1\";\n        xmlRequestFrame.frameBorder = \"0\";\n        xmlRequestFrame.id = callbackFrameID;\n        xmlRequestFrame.name = callbackFrameID;\n        xmlRequestFrame.style.position = \"absolute\";\n        xmlRequestFrame.style.top = \"-100px\"\n        xmlRequestFrame.style.left = \"-100px\";\n        try {\n            if (callBackFrameUrl) {\n                xmlRequestFrame.src = callBackFrameUrl;\n            }\n        }\n        catch(e) {}\n        document.body.appendChild(xmlRequestFrame);\n    }\n    var interval = window.setInterval(function() {\n        xmlRequestFrame = document.frames[callbackFrameID];\n        if (xmlRequestFrame && xmlRequestFrame.document) {\n            window.clearInterval(interval);\n            xmlRequestFrame.document.write(\"\");\n            xmlRequestFrame.document.close();\n            xmlRequestFrame.document.write('<html><body><form method=\"post\"><input type=\"hidden\" name=\"__CALLBACKLOADSCRIPT\" value=\"t\"></form></body></html>');\n            xmlRequestFrame.document.close();\n            xmlRequestFrame.document.forms[0].action = theForm.action;\n            var count = __theFormPostCollection.length;\n            var element;\n            for (var i = 0; i < count; i++) {\n                element = __theFormPostCollection[i];\n                if (element) {\n                    var fieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n                    fieldElement.type = \"hidden\";\n                    fieldElement.name = element.name;\n                    fieldElement.value = element.value;\n                    xmlRequestFrame.document.forms[0].appendChild(fieldElement);\n                }\n            }\n            var callbackIdFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n            callbackIdFieldElement.type = \"hidden\";\n            callbackIdFieldElement.name = \"__CALLBACKID\";\n            callbackIdFieldElement.value = eventTarget;\n            xmlRequestFrame.document.forms[0].appendChild(callbackIdFieldElement);\n            var callbackParamFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n            callbackParamFieldElement.type = \"hidden\";\n            callbackParamFieldElement.name = \"__CALLBACKPARAM\";\n            callbackParamFieldElement.value = eventArgument;\n            xmlRequestFrame.document.forms[0].appendChild(callbackParamFieldElement);\n            if (theForm[\"__EVENTVALIDATION\"]) {\n                var callbackValidationFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n                callbackValidationFieldElement.type = \"hidden\";\n                callbackValidationFieldElement.name = \"__EVENTVALIDATION\";\n                callbackValidationFieldElement.value = theForm[\"__EVENTVALIDATION\"].value;\n                xmlRequestFrame.document.forms[0].appendChild(callbackValidationFieldElement);\n            }\n            var callbackIndexFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n            callbackIndexFieldElement.type = \"hidden\";\n            callbackIndexFieldElement.name = \"__CALLBACKINDEX\";\n            callbackIndexFieldElement.value = callbackIndex;\n            xmlRequestFrame.document.forms[0].appendChild(callbackIndexFieldElement);\n            xmlRequestFrame.document.forms[0].submit();\n        }\n    }, 10);\n}\nfunction WebForm_CallbackComplete() {\n    for (var i = 0; i < __pendingCallbacks.length; i++) {\n        callbackObject = __pendingCallbacks[i];\n        if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {\n            if (!__pendingCallbacks[i].async) {\n                __synchronousCallBackIndex = -1;\n            }\n            __pendingCallbacks[i] = null;\n            var callbackFrameID = \"__CALLBACKFRAME\" + i;\n            var xmlRequestFrame = document.getElementById(callbackFrameID);\n            if (xmlRequestFrame) {\n                xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);\n            }\n            WebForm_ExecuteCallback(callbackObject);\n        }\n    }\n}\nfunction WebForm_ExecuteCallback(callbackObject) {\n    var response = callbackObject.xmlRequest.responseText;\n    if (response.charAt(0) == \"s\") {\n        if ((typeof(callbackObject.eventCallback) != \"undefined\") && (callbackObject.eventCallback != null)) {\n            callbackObject.eventCallback(response.substring(1), callbackObject.context);\n        }\n    }\n    else if (response.charAt(0) == \"e\") {\n        if ((typeof(callbackObject.errorCallback) != \"undefined\") && (callbackObject.errorCallback != null)) {\n            callbackObject.errorCallback(response.substring(1), callbackObject.context);\n        }\n    }\n    else {\n        var separatorIndex = response.indexOf(\"|\");\n        if (separatorIndex != -1) {\n            var validationFieldLength = parseInt(response.substring(0, separatorIndex));\n            if (!isNaN(validationFieldLength)) {\n                var validationField = response.substring(separatorIndex + 1, separatorIndex + validationFieldLength + 1);\n                if (validationField != \"\") {\n                    var validationFieldElement = theForm[\"__EVENTVALIDATION\"];\n                    if (!validationFieldElement) {\n                        validationFieldElement = document.createElement(\"INPUT\");\n                        validationFieldElement.type = \"hidden\";\n                        validationFieldElement.name = \"__EVENTVALIDATION\";\n                        theForm.appendChild(validationFieldElement);\n                    }\n                    validationFieldElement.value = validationField;\n                }\n                if ((typeof(callbackObject.eventCallback) != \"undefined\") && (callbackObject.eventCallback != null)) {\n                    callbackObject.eventCallback(response.substring(separatorIndex + validationFieldLength + 1), callbackObject.context);\n                }\n            }\n        }\n    }\n}\nfunction WebForm_FillFirstAvailableSlot(array, element) {\n    var i;\n    for (i = 0; i < array.length; i++) {\n        if (!array[i]) break;\n    }\n    array[i] = element;\n    return i;\n}\nvar __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);\nvar __theFormPostData = \"\";\nvar __theFormPostCollection = new Array();\nvar __callbackTextTypes = /^(text|password|hidden|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i;\nfunction WebForm_InitCallback() {\n    var formElements = theForm.elements,\n        count = formElements.length,\n        element;\n    for (var i = 0; i < count; i++) {\n        element = formElements[i];\n        var tagName = element.tagName.toLowerCase();\n        if (tagName == \"input\") {\n            var type = element.type;\n            if ((__callbackTextTypes.test(type) || ((type == \"checkbox\" || type == \"radio\") && element.checked))\n                && (element.id != \"__EVENTVALIDATION\")) {\n                WebForm_InitCallbackAddField(element.name, element.value);\n            }\n        }\n        else if (tagName == \"select\") {\n            var selectCount = element.options.length;\n            for (var j = 0; j < selectCount; j++) {\n                var selectChild = element.options[j];\n                if (selectChild.selected == true) {\n                    WebForm_InitCallbackAddField(element.name, element.value);\n                }\n            }\n        }\n        else if (tagName == \"textarea\") {\n            WebForm_InitCallbackAddField(element.name, element.value);\n        }\n    }\n}\nfunction WebForm_InitCallbackAddField(name, value) {\n    var nameValue = new Object();\n    nameValue.name = name;\n    nameValue.value = value;\n    __theFormPostCollection[__theFormPostCollection.length] = nameValue;\n    __theFormPostData += WebForm_EncodeCallback(name) + \"=\" + WebForm_EncodeCallback(value) + \"&\";\n}\nfunction WebForm_EncodeCallback(parameter) {\n    if (encodeURIComponent) {\n        return encodeURIComponent(parameter);\n    }\n    else {\n        return escape(parameter);\n    }\n}\nvar __disabledControlArray = new Array();\nfunction WebForm_ReEnableControls() {\n    if (typeof(__enabledControlArray) == 'undefined') {\n        return false;\n    }\n    var disabledIndex = 0;\n    for (var i = 0; i < __enabledControlArray.length; i++) {\n        var c;\n        if (__nonMSDOMBrowser) {\n            c = document.getElementById(__enabledControlArray[i]);\n        }\n        else {\n            c = document.all[__enabledControlArray[i]];\n        }\n        if ((typeof(c) != \"undefined\") && (c != null) && (c.disabled == true)) {\n            c.disabled = false;\n            __disabledControlArray[disabledIndex++] = c;\n        }\n    }\n    setTimeout(\"WebForm_ReDisableControls()\", 0);\n    return true;\n}\nfunction WebForm_ReDisableControls() {\n    for (var i = 0; i < __disabledControlArray.length; i++) {\n        __disabledControlArray[i].disabled = true;\n    }\n}\nfunction WebForm_SimulateClick(element, event) {\n    var clickEvent;\n    if (element) {\n        if (element.click) {\n            element.click();\n        } else { \n            clickEvent = document.createEvent(\"MouseEvents\");\n            clickEvent.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n            if (!element.dispatchEvent(clickEvent)) {\n                return true;\n            }\n        }\n        event.cancelBubble = true;\n        if (event.stopPropagation) {\n            event.stopPropagation();\n        }\n        return false;\n    }\n    return true;\n}\nfunction WebForm_FireDefaultButton(event, target) {\n    if (event.keyCode == 13) {\n        var src = event.srcElement || event.target;\n        if (src &&\n            ((src.tagName.toLowerCase() == \"input\") &&\n             (src.type.toLowerCase() == \"submit\" || src.type.toLowerCase() == \"button\")) ||\n            ((src.tagName.toLowerCase() == \"a\") &&\n             (src.href != null) && (src.href != \"\")) ||\n            (src.tagName.toLowerCase() == \"textarea\")) {\n            return true;\n        }\n        var defaultButton;\n        if (__nonMSDOMBrowser) {\n            defaultButton = document.getElementById(target);\n        }\n        else {\n            defaultButton = document.all[target];\n        }\n        if (defaultButton) {\n            return WebForm_SimulateClick(defaultButton, event);\n        } \n    }\n    return true;\n}\nfunction WebForm_GetScrollX() {\n    if (__nonMSDOMBrowser) {\n        return window.pageXOffset;\n    }\n    else {\n        if (document.documentElement && document.documentElement.scrollLeft) {\n            return document.documentElement.scrollLeft;\n        }\n        else if (document.body) {\n            return document.body.scrollLeft;\n        }\n    }\n    return 0;\n}\nfunction WebForm_GetScrollY() {\n    if (__nonMSDOMBrowser) {\n        return window.pageYOffset;\n    }\n    else {\n        if (document.documentElement && document.documentElement.scrollTop) {\n            return document.documentElement.scrollTop;\n        }\n        else if (document.body) {\n            return document.body.scrollTop;\n        }\n    }\n    return 0;\n}\nfunction WebForm_SaveScrollPositionSubmit() {\n    if (__nonMSDOMBrowser) {\n        theForm.elements['__SCROLLPOSITIONY'].value = window.pageYOffset;\n        theForm.elements['__SCROLLPOSITIONX'].value = window.pageXOffset;\n    }\n    else {\n        theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();\n        theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();\n    }\n    if ((typeof(this.oldSubmit) != \"undefined\") && (this.oldSubmit != null)) {\n        return this.oldSubmit();\n    }\n    return true;\n}\nfunction WebForm_SaveScrollPositionOnSubmit() {\n    theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();\n    theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();\n    if ((typeof(this.oldOnSubmit) != \"undefined\") && (this.oldOnSubmit != null)) {\n        return this.oldOnSubmit();\n    }\n    return true;\n}\nfunction WebForm_RestoreScrollPosition() {\n    if (__nonMSDOMBrowser) {\n        window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, theForm.elements['__SCROLLPOSITIONY'].value);\n    }\n    else {\n        window.scrollTo(theForm.__SCROLLPOSITIONX.value, theForm.__SCROLLPOSITIONY.value);\n    }\n    if ((typeof(theForm.oldOnLoad) != \"undefined\") && (theForm.oldOnLoad != null)) {\n        return theForm.oldOnLoad();\n    }\n    return true;\n}\nfunction WebForm_TextBoxKeyHandler(event) {\n    if (event.keyCode == 13) {\n        var target;\n        if (__nonMSDOMBrowser) {\n            target = event.target;\n        }\n        else {\n            target = event.srcElement;\n        }\n        if ((typeof(target) != \"undefined\") && (target != null)) {\n            if (typeof(target.onchange) != \"undefined\") {\n                target.onchange();\n                event.cancelBubble = true;\n                if (event.stopPropagation) event.stopPropagation();\n                return false;\n            }\n        }\n    }\n    return true;\n}\nfunction WebForm_TrimString(value) {\n    return value.replace(/^\\s+|\\s+$/g, '')\n}\nfunction WebForm_AppendToClassName(element, className) {\n    var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';\n    className = WebForm_TrimString(className);\n    var index = currentClassName.indexOf(' ' + className + ' ');\n    if (index === -1) {\n        element.className = (element.className === '') ? className : element.className + ' ' + className;\n    }\n}\nfunction WebForm_RemoveClassName(element, className) {\n    var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';\n    className = WebForm_TrimString(className);\n    var index = currentClassName.indexOf(' ' + className + ' ');\n    if (index >= 0) {\n        element.className = WebForm_TrimString(currentClassName.substring(0, index) + ' ' +\n            currentClassName.substring(index + className.length + 1, currentClassName.length));\n    }\n}\nfunction WebForm_GetElementById(elementId) {\n    if (document.getElementById) {\n        return document.getElementById(elementId);\n    }\n    else if (document.all) {\n        return document.all[elementId];\n    }\n    else return null;\n}\nfunction WebForm_GetElementByTagName(element, tagName) {\n    var elements = WebForm_GetElementsByTagName(element, tagName);\n    if (elements && elements.length > 0) {\n        return elements[0];\n    }\n    else return null;\n}\nfunction WebForm_GetElementsByTagName(element, tagName) {\n    if (element && tagName) {\n        if (element.getElementsByTagName) {\n            return element.getElementsByTagName(tagName);\n        }\n        if (element.all && element.all.tags) {\n            return element.all.tags(tagName);\n        }\n    }\n    return null;\n}\nfunction WebForm_GetElementDir(element) {\n    if (element) {\n        if (element.dir) {\n            return element.dir;\n        }\n        return WebForm_GetElementDir(element.parentNode);\n    }\n    return \"ltr\";\n}\nfunction WebForm_GetElementPosition(element) {\n    var result = new Object();\n    result.x = 0;\n    result.y = 0;\n    result.width = 0;\n    result.height = 0;\n    if (element.offsetParent) {\n        result.x = element.offsetLeft;\n        result.y = element.offsetTop;\n        var parent = element.offsetParent;\n        while (parent) {\n            result.x += parent.offsetLeft;\n            result.y += parent.offsetTop;\n            var parentTagName = parent.tagName.toLowerCase();\n            if (parentTagName != \"table\" &&\n                parentTagName != \"body\" && \n                parentTagName != \"html\" && \n                parentTagName != \"div\" && \n                parent.clientTop && \n                parent.clientLeft) {\n                result.x += parent.clientLeft;\n                result.y += parent.clientTop;\n            }\n            parent = parent.offsetParent;\n        }\n    }\n    else if (element.left && element.top) {\n        result.x = element.left;\n        result.y = element.top;\n    }\n    else {\n        if (element.x) {\n            result.x = element.x;\n        }\n        if (element.y) {\n            result.y = element.y;\n        }\n    }\n    if (element.offsetWidth && element.offsetHeight) {\n        result.width = element.offsetWidth;\n        result.height = element.offsetHeight;\n    }\n    else if (element.style && element.style.pixelWidth && element.style.pixelHeight) {\n        result.width = element.style.pixelWidth;\n        result.height = element.style.pixelHeight;\n    }\n    return result;\n}\nfunction WebForm_GetParentByTagName(element, tagName) {\n    var parent = element.parentNode;\n    var upperTagName = tagName.toUpperCase();\n    while (parent && (parent.tagName.toUpperCase() != upperTagName)) {\n        parent = parent.parentNode ? parent.parentNode : parent.parentElement;\n    }\n    return parent;\n}\nfunction WebForm_SetElementHeight(element, height) {\n    if (element && element.style) {\n        element.style.height = height + \"px\";\n    }\n}\nfunction WebForm_SetElementWidth(element, width) {\n    if (element && element.style) {\n        element.style.width = width + \"px\";\n    }\n}\nfunction WebForm_SetElementX(element, x) {\n    if (element && element.style) {\n        element.style.left = x + \"px\";\n    }\n}\nfunction WebForm_SetElementY(element, y) {\n    if (element && element.style) {\n        element.style.top = y + \"px\";\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/WebParts.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebParts.js\nvar __wpm = null;\nfunction Point(x, y) {\n    this.x = x;\n    this.y = y;\n}\nfunction __wpTranslateOffset(x, y, offsetElement, relativeToElement, includeScroll) {\n    while ((typeof(offsetElement) != \"undefined\") && (offsetElement != null) && (offsetElement != relativeToElement)) {\n        x += offsetElement.offsetLeft;\n        y += offsetElement.offsetTop;\n        var tagName = offsetElement.tagName;\n        if ((tagName != \"TABLE\") && (tagName != \"BODY\")) {\n            x += offsetElement.clientLeft;\n            y += offsetElement.clientTop;\n        }\n        if (includeScroll && (tagName != \"BODY\")) {\n            x -= offsetElement.scrollLeft;\n            y -= offsetElement.scrollTop;\n        }\n        offsetElement = offsetElement.offsetParent;\n    }\n    return new Point(x, y);\n}\nfunction __wpGetPageEventLocation(event, includeScroll) {\n    if ((typeof(event) == \"undefined\") || (event == null)) {\n        event = window.event;\n    }\n    return __wpTranslateOffset(event.offsetX, event.offsetY, event.srcElement, null, includeScroll);\n}\nfunction __wpClearSelection() {\n    document.selection.empty();\n}\nfunction WebPart(webPartElement, webPartTitleElement, zone, zoneIndex, allowZoneChange) {\n    this.webPartElement = webPartElement;\n    this.allowZoneChange = allowZoneChange;\n    this.zone = zone;\n    this.zoneIndex = zoneIndex;\n    this.title = ((typeof(webPartTitleElement) != \"undefined\") && (webPartTitleElement != null)) ?\n        webPartTitleElement.innerText : \"\";\n    webPartElement.__webPart = this;\n    if ((typeof(webPartTitleElement) != \"undefined\") && (webPartTitleElement != null)) {\n        webPartTitleElement.style.cursor = \"move\";\n        webPartTitleElement.attachEvent(\"onmousedown\", WebPart_OnMouseDown);\n        webPartElement.attachEvent(\"ondragstart\", WebPart_OnDragStart);\n        webPartElement.attachEvent(\"ondrag\", WebPart_OnDrag);\n        webPartElement.attachEvent(\"ondragend\", WebPart_OnDragEnd);\n    }\n    this.UpdatePosition = WebPart_UpdatePosition;\n    this.Dispose = WebPart_Dispose;\n}\nfunction WebPart_Dispose() {\n    this.webPartElement.__webPart = null    \n}\nfunction WebPart_OnMouseDown() {\n    var currentEvent = window.event;\n    var draggedWebPart = WebPart_GetParentWebPartElement(currentEvent.srcElement);\n    if ((typeof(draggedWebPart) == \"undefined\") || (draggedWebPart == null)) {\n        return;\n    }\n    document.selection.empty();\n    try {\n        __wpm.draggedWebPart = draggedWebPart;\n        __wpm.DragDrop();\n    }\n    catch (e) {\n        __wpm.draggedWebPart = draggedWebPart;\n        window.setTimeout(\"__wpm.DragDrop()\", 0);\n    }\n    currentEvent.returnValue = false;\n    currentEvent.cancelBubble = true;\n}\nfunction WebPart_OnDragStart() {\n    var currentEvent = window.event;\n    var webPartElement = currentEvent.srcElement;\n    if ((typeof(webPartElement.__webPart) == \"undefined\") || (webPartElement.__webPart == null)) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n        return;\n    }\n    var dataObject = currentEvent.dataTransfer;\n    dataObject.effectAllowed = __wpm.InitiateWebPartDragDrop(webPartElement);\n}\nfunction WebPart_OnDrag() {\n    __wpm.ContinueWebPartDragDrop();\n}\nfunction WebPart_OnDragEnd() {\n    __wpm.CompleteWebPartDragDrop();\n}\nfunction WebPart_GetParentWebPartElement(containedElement) {\n    var elem = containedElement;\n    while ((typeof(elem.__webPart) == \"undefined\") || (elem.__webPart == null)) {\n        elem = elem.parentElement;\n        if ((typeof(elem) == \"undefined\") || (elem == null)) {\n            break;\n        }\n    }\n    return elem;\n}\nfunction WebPart_UpdatePosition() {\n    var location = __wpTranslateOffset(0, 0, this.webPartElement, null, false);\n    this.middleX = location.x + this.webPartElement.offsetWidth / 2;\n    this.middleY = location.y + this.webPartElement.offsetHeight / 2;\n}\nfunction Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutChange, highlightColor) {\n    var webPartTable = null;\n    if (zoneElement.rows.length == 1) {\n        webPartTableContainer = zoneElement.rows[0].cells[0];\n    }\n    else {\n        webPartTableContainer = zoneElement.rows[1].cells[0];\n    }\n    var i;\n    for (i = 0; i < webPartTableContainer.childNodes.length; i++) {\n        var node = webPartTableContainer.childNodes[i];\n        if (node.tagName == \"TABLE\") {\n            webPartTable = node;\n            break;\n        }\n    }\n    this.zoneElement = zoneElement;\n    this.zoneIndex = zoneIndex;\n    this.webParts = new Array();\n    this.uniqueID = uniqueID;\n    this.isVertical = isVertical;\n    this.allowLayoutChange = allowLayoutChange;\n    this.allowDrop = false;\n    this.webPartTable = webPartTable;\n    this.highlightColor = highlightColor;\n    this.savedBorderColor = (webPartTable != null) ? webPartTable.style.borderColor : null;\n    this.dropCueElements = new Array();\n    if (webPartTable != null) {\n        if (isVertical) {\n            for (i = 0; i < webPartTable.rows.length; i += 2) {\n                this.dropCueElements[i / 2] = webPartTable.rows[i].cells[0].childNodes[0];\n            }\n        }\n        else {\n            for (i = 0; i < webPartTable.rows[0].cells.length; i += 2) {\n                this.dropCueElements[i / 2] = webPartTable.rows[0].cells[i].childNodes[0];\n            }\n        }\n    }\n    this.AddWebPart = Zone_AddWebPart;\n    this.GetWebPartIndex = Zone_GetWebPartIndex;\n    this.ToggleDropCues = Zone_ToggleDropCues;\n    this.UpdatePosition = Zone_UpdatePosition;\n    this.Dispose = Zone_Dispose;\n    webPartTable.__zone = this;\n    webPartTable.attachEvent(\"ondragenter\", Zone_OnDragEnter);\n    webPartTable.attachEvent(\"ondrop\", Zone_OnDrop);\n}\nfunction Zone_Dispose() {\n    for (var i = 0; i < this.webParts.length; i++) {\n        this.webParts[i].Dispose();\n    }\n    this.webPartTable.__zone = null;\n}\nfunction Zone_OnDragEnter() {\n    var handled = __wpm.ProcessWebPartDragEnter();\n    var currentEvent = window.event;\n    if (handled) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n    }\n}\nfunction Zone_OnDragOver() {\n    var handled = __wpm.ProcessWebPartDragOver();\n    var currentEvent = window.event;\n    if (handled) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n    }\n}\nfunction Zone_OnDrop() {\n    var handled = __wpm.ProcessWebPartDrop();\n    var currentEvent = window.event;\n    if (handled) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n    }\n}\nfunction Zone_GetParentZoneElement(containedElement) {\n    var elem = containedElement;\n    while ((typeof(elem.__zone) == \"undefined\") || (elem.__zone == null)) {\n        elem = elem.parentElement;\n        if ((typeof(elem) == \"undefined\") || (elem == null)) {\n            break;\n        }\n    }\n    return elem;\n}\nfunction Zone_AddWebPart(webPartElement, webPartTitleElement, allowZoneChange) {\n    var webPart = null;\n    var zoneIndex = this.webParts.length;\n    if (this.allowLayoutChange && __wpm.IsDragDropEnabled()) {\n        webPart = new WebPart(webPartElement, webPartTitleElement, this, zoneIndex, allowZoneChange);\n    }\n    else {\n        webPart = new WebPart(webPartElement, null, this, zoneIndex, allowZoneChange);\n    }\n    this.webParts[zoneIndex] = webPart;\n    return webPart;\n}\nfunction Zone_ToggleDropCues(show, index, ignoreOutline) {\n    if (ignoreOutline == false) {\n        this.webPartTable.style.borderColor = (show ? this.highlightColor : this.savedBorderColor);\n    }\n    if (index == -1) {\n        return;\n    }\n    var dropCue = this.dropCueElements[index];\n    if (dropCue && dropCue.style) {\n        if (dropCue.style.height == \"100%\" && !dropCue.webPartZoneHorizontalCueResized) {\n            var oldParentHeight = dropCue.parentElement.clientHeight;\n            var realHeight = oldParentHeight - 10;\n            dropCue.style.height = realHeight + \"px\";\n            var dropCueVerticalBar = dropCue.getElementsByTagName(\"DIV\")[0];\n            if (dropCueVerticalBar && dropCueVerticalBar.style) {\n                dropCueVerticalBar.style.height = dropCue.style.height;\n                var heightDiff = (dropCue.parentElement.clientHeight - oldParentHeight);\n                if (heightDiff) {\n                    dropCue.style.height = (realHeight - heightDiff) + \"px\";\n                    dropCueVerticalBar.style.height = dropCue.style.height;\n                }\n            }\n            dropCue.webPartZoneHorizontalCueResized = true;\n        }\n        dropCue.style.visibility = (show ? \"visible\" : \"hidden\");\n    }\n}\nfunction Zone_GetWebPartIndex(location) {\n    var x = location.x;\n    var y = location.y;\n    if ((x < this.webPartTableLeft) || (x > this.webPartTableRight) ||\n        (y < this.webPartTableTop) || (y > this.webPartTableBottom)) {\n        return -1;\n    }\n    var vertical = this.isVertical;\n    var webParts = this.webParts;\n    var webPartsCount = webParts.length;\n    for (var i = 0; i < webPartsCount; i++) {\n        var webPart = webParts[i];\n        if (vertical) {\n            if (y < webPart.middleY) {\n                return i;\n            }\n        }\n        else {\n            if (x < webPart.middleX) {\n                return i;\n            }\n        }\n    }\n    return webPartsCount;\n}\nfunction Zone_UpdatePosition() {\n    var topLeft = __wpTranslateOffset(0, 0, this.webPartTable, null, false);\n    this.webPartTableLeft = topLeft.x;\n    this.webPartTableTop = topLeft.y;\n    this.webPartTableRight = (this.webPartTable != null) ? topLeft.x + this.webPartTable.offsetWidth : topLeft.x;\n    this.webPartTableBottom = (this.webPartTable != null) ? topLeft.y + this.webPartTable.offsetHeight : topLeft.y;\n    for (var i = 0; i < this.webParts.length; i++) {\n        this.webParts[i].UpdatePosition();\n    }\n}\nfunction WebPartDragState(webPartElement, effect) {\n    this.webPartElement = webPartElement;\n    this.dropZoneElement = null;\n    this.dropIndex = -1;\n    this.effect = effect;\n    this.dropped = false;\n}\nfunction WebPartMenu(menuLabelElement, menuDropDownElement, menuElement) {\n    this.menuLabelElement = menuLabelElement;\n    this.menuDropDownElement = menuDropDownElement;\n    this.menuElement = menuElement;\n    this.menuLabelElement.__menu = this;\n    this.menuLabelElement.attachEvent('onclick', WebPartMenu_OnClick);\n    this.menuLabelElement.attachEvent('onkeypress', WebPartMenu_OnKeyPress);\n    this.menuLabelElement.attachEvent('onmouseenter', WebPartMenu_OnMouseEnter);\n    this.menuLabelElement.attachEvent('onmouseleave', WebPartMenu_OnMouseLeave);\n    if ((typeof(this.menuDropDownElement) != \"undefined\") && (this.menuDropDownElement != null)) {\n        this.menuDropDownElement.__menu = this;\n    }\n    this.menuItemStyle = \"\";\n    this.menuItemHoverStyle = \"\";\n    this.popup = null;\n    this.hoverClassName = \"\";\n    this.hoverColor = \"\";\n    this.oldColor = this.menuLabelElement.style.color;\n    this.oldTextDecoration = this.menuLabelElement.style.textDecoration;\n    this.oldClassName = this.menuLabelElement.className;\n    this.Show = WebPartMenu_Show;\n    this.Hide = WebPartMenu_Hide;\n    this.Hover = WebPartMenu_Hover;\n    this.Unhover = WebPartMenu_Unhover;\n    this.Dispose = WebPartMenu_Dispose;\n    var menu = this;\n    this.disposeDelegate = function() { menu.Dispose(); };\n    window.attachEvent('onunload', this.disposeDelegate);\n}\nfunction WebPartMenu_Dispose() {\n    this.menuLabelElement.__menu = null;\n    this.menuDropDownElement.__menu = null;\n    window.detachEvent('onunload', this.disposeDelegate);\n}\nfunction WebPartMenu_Show() {\n    if ((typeof(__wpm.menu) != \"undefined\") && (__wpm.menu != null)) {\n        __wpm.menu.Hide();\n    }\n    var menuHTML =\n        \"<html><head><style>\" +\n        \"a.menuItem, a.menuItem:Link { display: block; padding: 1px; text-decoration: none; \" + this.itemStyle + \" }\" +\n        \"a.menuItem:Hover { \" + this.itemHoverStyle + \" }\" +\n        \"</style><body scroll=\\\"no\\\" style=\\\"border: none; margin: 0; padding: 0;\\\" ondragstart=\\\"window.event.returnValue=false;\\\" onclick=\\\"popup.hide()\\\">\" +\n        this.menuElement.innerHTML +\n        \"</body></html>\";\n    var width = 16;\n    var height = 16;\n    this.popup = window.createPopup();\n    __wpm.menu = this;\n    var popupDocument = this.popup.document;\n    popupDocument.write(menuHTML);\n    this.popup.show(0, 0, width, height);\n    var popupBody = popupDocument.body;\n    width = popupBody.scrollWidth;\n    height = popupBody.scrollHeight;\n    if (width < this.menuLabelElement.offsetWidth) {\n        width = this.menuLabelElement.offsetWidth + 16;\n    }\n    if (this.menuElement.innerHTML.indexOf(\"progid:DXImageTransform.Microsoft.Shadow\") != -1) {\n        popupBody.style.paddingRight = \"4px\";\n    }\n    popupBody.__wpm = __wpm;\n    popupBody.__wpmDeleteWarning = __wpmDeleteWarning;\n    popupBody.__wpmCloseProviderWarning = __wpmCloseProviderWarning;\n    popupBody.popup = this.popup;\n    this.popup.hide();\n    this.popup.show(0, this.menuLabelElement.offsetHeight, width, height, this.menuLabelElement);\n}\nfunction WebPartMenu_Hide() {\n    if (__wpm.menu == this) {\n        __wpm.menu = null;\n        if ((typeof(this.popup) != \"undefined\") && (this.popup != null)) {\n            this.popup.hide();\n            this.popup = null;\n        }\n    }\n}\nfunction WebPartMenu_Hover() {\n    if (this.labelHoverClassName != \"\") {\n        this.menuLabelElement.className = this.menuLabelElement.className + \" \" + this.labelHoverClassName;\n    }\n    if (this.labelHoverColor != \"\") {\n        this.menuLabelElement.style.color = this.labelHoverColor;\n    }\n}\nfunction WebPartMenu_Unhover() {\n    if (this.labelHoverClassName != \"\") {\n        this.menuLabelElement.style.textDecoration = this.oldTextDecoration;\n        this.menuLabelElement.className = this.oldClassName;\n    }\n    if (this.labelHoverColor != \"\") {\n        this.menuLabelElement.style.color = this.oldColor;\n    }\n}\nfunction WebPartMenu_OnClick() {\n    var menu = window.event.srcElement.__menu;\n    if ((typeof(menu) != \"undefined\") && (menu != null)) {\n        window.event.returnValue = false;\n        window.event.cancelBubble = true;\n        menu.Show();\n    }\n}\nfunction WebPartMenu_OnKeyPress() {\n    if (window.event.keyCode == 13) {\n        var menu = window.event.srcElement.__menu;\n        if ((typeof(menu) != \"undefined\") && (menu != null)) {\n            window.event.returnValue = false;\n            window.event.cancelBubble = true;\n            menu.Show();\n        }\n    }\n}\nfunction WebPartMenu_OnMouseEnter() {\n    var menu = window.event.srcElement.__menu;\n    if ((typeof(menu) != \"undefined\") && (menu != null)) {\n        menu.Hover();\n    }\n}\nfunction WebPartMenu_OnMouseLeave() {\n    var menu = window.event.srcElement.__menu;\n    if ((typeof(menu) != \"undefined\") && (menu != null)) {\n        menu.Unhover();\n    }\n}\nfunction WebPartManager() {\n    this.overlayContainerElement = null;\n    this.zones = new Array();\n    this.dragState = null;\n    this.menu = null;\n    this.draggedWebPart = null;\n    this.AddZone = WebPartManager_AddZone;\n    this.IsDragDropEnabled = WebPartManager_IsDragDropEnabled;\n    this.DragDrop = WebPartManager_DragDrop;\n    this.InitiateWebPartDragDrop = WebPartManager_InitiateWebPartDragDrop;\n    this.CompleteWebPartDragDrop = WebPartManager_CompleteWebPartDragDrop;\n    this.ContinueWebPartDragDrop = WebPartManager_ContinueWebPartDragDrop;\n    this.ProcessWebPartDragEnter = WebPartManager_ProcessWebPartDragEnter;\n    this.ProcessWebPartDragOver = WebPartManager_ProcessWebPartDragOver;\n    this.ProcessWebPartDrop = WebPartManager_ProcessWebPartDrop;\n    this.ShowHelp = WebPartManager_ShowHelp;\n    this.ExportWebPart = WebPartManager_ExportWebPart;\n    this.Execute = WebPartManager_Execute;\n    this.SubmitPage = WebPartManager_SubmitPage;\n    this.UpdatePositions = WebPartManager_UpdatePositions;\n    window.attachEvent(\"onunload\", WebPartManager_Dispose);\n}\nfunction WebPartManager_Dispose() {\n    for (var i = 0; i < __wpm.zones.length; i++) {\n        __wpm.zones[i].Dispose();\n    }\n    window.detachEvent(\"onunload\", WebPartManager_Dispose);\n}\nfunction WebPartManager_AddZone(zoneElement, uniqueID, isVertical, allowLayoutChange, highlightColor) {\n    var zoneIndex = this.zones.length;\n    var zone = new Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutChange, highlightColor);\n    this.zones[zoneIndex] = zone;\n    return zone;\n}\nfunction WebPartManager_IsDragDropEnabled() {\n    return ((typeof(this.overlayContainerElement) != \"undefined\") && (this.overlayContainerElement != null));\n}\nfunction WebPartManager_DragDrop() {\n    if ((typeof(this.draggedWebPart) != \"undefined\") && (this.draggedWebPart != null)) {\n        var tempWebPart = this.draggedWebPart;\n        this.draggedWebPart = null;\n        tempWebPart.dragDrop();\n        window.setTimeout(\"__wpClearSelection()\", 0);\n    }\n}\nfunction WebPartManager_InitiateWebPartDragDrop(webPartElement) {\n    var webPart = webPartElement.__webPart;\n    this.UpdatePositions();\n    this.dragState = new WebPartDragState(webPartElement, \"move\");\n    var location = __wpGetPageEventLocation(window.event, true);\n    var overlayContainerElement = this.overlayContainerElement;\n    overlayContainerElement.style.left = location.x - webPartElement.offsetWidth / 2;\n    overlayContainerElement.style.top = location.y + 4 + (webPartElement.clientTop ? webPartElement.clientTop : 0);\n    overlayContainerElement.style.display = \"block\";\n    overlayContainerElement.style.width = webPartElement.offsetWidth;\n    overlayContainerElement.style.height = webPartElement.offsetHeight;\n    overlayContainerElement.appendChild(webPartElement.cloneNode(true));\n    if (webPart.allowZoneChange == false) {\n        webPart.zone.allowDrop = true;\n    }\n    else {\n        for (var i = 0; i < __wpm.zones.length; i++) {\n            var zone = __wpm.zones[i];\n            if (zone.allowLayoutChange) {\n                zone.allowDrop = true;\n            }\n        }\n    }\n    document.body.attachEvent(\"ondragover\", Zone_OnDragOver);\n    return \"move\";\n}\nfunction WebPartManager_CompleteWebPartDragDrop() {\n    var dragState = this.dragState;\n    this.dragState = null;\n    if ((typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n        dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, false);\n    }\n    document.body.detachEvent(\"ondragover\", Zone_OnDragOver);\n    for (var i = 0; i < __wpm.zones.length; i++) {\n        __wpm.zones[i].allowDrop = false;\n    }\n    this.overlayContainerElement.removeChild(this.overlayContainerElement.firstChild);\n    this.overlayContainerElement.style.display = \"none\";\n    if ((typeof(dragState) != \"undefined\") && (dragState != null) && (dragState.dropped == true)) {\n        var currentZone = dragState.webPartElement.__webPart.zone;\n        var currentZoneIndex = dragState.webPartElement.__webPart.zoneIndex;\n        if ((currentZone != dragState.dropZoneElement.__zone) ||\n            ((currentZoneIndex != dragState.dropIndex) &&\n             (currentZoneIndex != (dragState.dropIndex - 1)))) {\n            var eventTarget = dragState.dropZoneElement.__zone.uniqueID;\n            var eventArgument = \"Drag:\" + dragState.webPartElement.id + \":\" + dragState.dropIndex;\n            this.SubmitPage(eventTarget, eventArgument);\n        }\n    }\n}\nfunction WebPartManager_ContinueWebPartDragDrop() {\n    var dragState = this.dragState;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null)) {\n        var style = this.overlayContainerElement.style;\n        var location = __wpGetPageEventLocation(window.event, true);\n        style.left = location.x - dragState.webPartElement.offsetWidth / 2;\n        style.top = location.y + 4 + (dragState.webPartElement.clientTop ? dragState.webPartElement.clientTop : 0);\n    }\n}\nfunction WebPartManager_Execute(script) {\n    if (this.menu) {\n        this.menu.Hide();\n    }\n    var scriptReference = new Function(script);\n    return (scriptReference() != false);\n}\nfunction WebPartManager_ProcessWebPartDragEnter() {\n    var dragState = __wpm.dragState;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null)) {\n        var currentEvent = window.event;\n        var newDropZoneElement = Zone_GetParentZoneElement(currentEvent.srcElement);\n        if ((typeof(newDropZoneElement.__zone) == \"undefined\") || (newDropZoneElement.__zone == null) ||\n            (newDropZoneElement.__zone.allowDrop == false)) {\n            newDropZoneElement = null;\n        }\n        var newDropIndex = -1;\n        if ((typeof(newDropZoneElement) != \"undefined\") && (newDropZoneElement != null)) {\n            newDropIndex = newDropZoneElement.__zone.GetWebPartIndex(__wpGetPageEventLocation(currentEvent, false));\n            if (newDropIndex == -1) {\n                newDropZoneElement = null;\n            }\n        }\n        if (dragState.dropZoneElement != newDropZoneElement) {\n            if ((typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n                dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, false);\n            }\n            dragState.dropZoneElement = newDropZoneElement;\n            dragState.dropIndex = newDropIndex;\n            if ((typeof(newDropZoneElement) != \"undefined\") && (newDropZoneElement != null)) {\n                newDropZoneElement.__zone.ToggleDropCues(true, newDropIndex, false);\n            }\n        }\n        else if (dragState.dropIndex != newDropIndex) {\n            if (dragState.dropIndex != -1) {\n                dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, false);\n            }\n            dragState.dropIndex = newDropIndex;\n            if ((typeof(newDropZoneElement) != \"undefined\") && (newDropZoneElement != null)) {\n                newDropZoneElement.__zone.ToggleDropCues(true, newDropIndex, false);\n            }\n        }\n        if ((typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n            currentEvent.dataTransfer.effectAllowed = dragState.effect;\n        }\n        return true;\n    }\n    return false;\n}\nfunction WebPartManager_ProcessWebPartDragOver() {\n    var dragState = __wpm.dragState;\n    var currentEvent = window.event;\n    var handled = false;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null) &&\n        (typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n        var dropZoneElement = Zone_GetParentZoneElement(currentEvent.srcElement);\n        if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null) && (dropZoneElement.__zone.allowDrop == false)) {\n            dropZoneElement = null;\n        }\n        if (((typeof(dropZoneElement) == \"undefined\") || (dropZoneElement == null)) &&\n            (typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n            dragState.dropZoneElement.__zone.ToggleDropCues(false, __wpm.dragState.dropIndex, false);\n            dragState.dropZoneElement = null;\n            dragState.dropIndex = -1;\n        }\n        else if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null)) {\n            var location = __wpGetPageEventLocation(currentEvent, false);\n            var newDropIndex = dropZoneElement.__zone.GetWebPartIndex(location);\n            if (newDropIndex == -1) {\n                dropZoneElement = null;\n            }\n            if (dragState.dropZoneElement != dropZoneElement) {\n                if ((dragState.dropIndex != -1) || (typeof(dropZoneElement) == \"undefined\") || (dropZoneElement == null)) {\n                    dragState.dropZoneElement.__zone.ToggleDropCues(false, __wpm.dragState.dropIndex, false);\n                }\n                dragState.dropZoneElement = dropZoneElement;\n            }\n            else {\n                dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, true);\n            }\n            dragState.dropIndex = newDropIndex;\n            if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null)) {\n                dropZoneElement.__zone.ToggleDropCues(true, newDropIndex, false);\n            }\n        }\n        handled = true;\n    }\n    if ((typeof(dragState) == \"undefined\") || (dragState == null) ||\n        (typeof(dragState.dropZoneElement) == \"undefined\") || (dragState.dropZoneElement == null)) {\n        currentEvent.dataTransfer.effectAllowed = \"none\";\n    }\n    return handled;\n}\nfunction WebPartManager_ProcessWebPartDrop() {\n    var dragState = this.dragState;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null)) {\n        var currentEvent = window.event;\n        var dropZoneElement = Zone_GetParentZoneElement(currentEvent.srcElement);\n        if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null) && (dropZoneElement.__zone.allowDrop == false)) {\n            dropZoneElement = null;\n        }\n        if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null) && (dragState.dropZoneElement == dropZoneElement)) {\n            dragState.dropped = true;\n        }\n        return true;\n    }\n    return false;\n}\nfunction WebPartManager_ShowHelp(helpUrl, helpMode) {\n    if ((typeof(this.menu) != \"undefined\") && (this.menu != null)) {\n        this.menu.Hide();\n    }\n    if (helpMode == 0 || helpMode == 1) {\n        if (helpMode == 0) {\n            var dialogInfo = \"edge: Sunken; center: yes; help: no; resizable: yes; status: no\";\n            window.showModalDialog(helpUrl, null, dialogInfo);\n        }\n        else {\n            window.open(helpUrl, null, \"scrollbars=yes,resizable=yes,status=no,toolbar=no,menubar=no,location=no\");\n        }\n    }\n    else if (helpMode == 2) {\n        window.location = helpUrl;\n    }\n}\nfunction WebPartManager_ExportWebPart(exportUrl, warn, confirmOnly) {\n    if (warn == true && __wpmExportWarning.length > 0 && this.personalizationScopeShared != true) {\n        if (confirm(__wpmExportWarning) == false) {\n            return false;\n        }\n    }\n    if (confirmOnly == false) {\n        window.location = exportUrl;\n    }\n    return true;\n}\nfunction WebPartManager_UpdatePositions() {\n    for (var i = 0; i < this.zones.length; i++) {\n        this.zones[i].UpdatePosition();\n    }\n}\nfunction WebPartManager_SubmitPage(eventTarget, eventArgument) {\n    if ((typeof(this.menu) != \"undefined\") && (this.menu != null)) {\n        this.menu.Hide();\n    }\n    __doPostBack(eventTarget, eventArgument);\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/WebForms/WebUIValidation.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebUIValidation.js\nvar Page_ValidationVer = \"125\";\nvar Page_IsValid = true;\nvar Page_BlockSubmit = false;\nvar Page_InvalidControlToBeFocused = null;\nvar Page_TextTypes = /^(text|password|file|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i;\nfunction ValidatorUpdateDisplay(val) {\n    if (typeof(val.display) == \"string\") {\n        if (val.display == \"None\") {\n            return;\n        }\n        if (val.display == \"Dynamic\") {\n            val.style.display = val.isvalid ? \"none\" : \"inline\";\n            return;\n        }\n    }\n    if ((navigator.userAgent.indexOf(\"Mac\") > -1) &&\n        (navigator.userAgent.indexOf(\"MSIE\") > -1)) {\n        val.style.display = \"inline\";\n    }\n    val.style.visibility = val.isvalid ? \"hidden\" : \"visible\";\n}\nfunction ValidatorUpdateIsValid() {\n    Page_IsValid = AllValidatorsValid(Page_Validators);\n}\nfunction AllValidatorsValid(validators) {\n    if ((typeof(validators) != \"undefined\") && (validators != null)) {\n        var i;\n        for (i = 0; i < validators.length; i++) {\n            if (!validators[i].isvalid) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\nfunction ValidatorHookupControlID(controlID, val) {\n    if (typeof(controlID) != \"string\") {\n        return;\n    }\n    var ctrl = document.getElementById(controlID);\n    if ((typeof(ctrl) != \"undefined\") && (ctrl != null)) {\n        ValidatorHookupControl(ctrl, val);\n    }\n    else {\n        val.isvalid = true;\n        val.enabled = false;\n    }\n}\nfunction ValidatorHookupControl(control, val) {\n    if (typeof(control.tagName) != \"string\") {\n        return;  \n    }\n    if (control.tagName != \"INPUT\" && control.tagName != \"TEXTAREA\" && control.tagName != \"SELECT\") {\n        var i;\n        for (i = 0; i < control.childNodes.length; i++) {\n            ValidatorHookupControl(control.childNodes[i], val);\n        }\n        return;\n    }\n    else {\n        if (typeof(control.Validators) == \"undefined\") {\n            control.Validators = new Array;\n            var eventType;\n            if (control.type == \"radio\") {\n                eventType = \"onclick\";\n            } else {\n                eventType = \"onchange\";\n                if (typeof(val.focusOnError) == \"string\" && val.focusOnError == \"t\") {\n                    ValidatorHookupEvent(control, \"onblur\", \"ValidatedControlOnBlur(event); \");\n                }\n            }\n            ValidatorHookupEvent(control, eventType, \"ValidatorOnChange(event); \");\n            if (Page_TextTypes.test(control.type)) {\n                ValidatorHookupEvent(control, \"onkeypress\", \n                    \"event = event || window.event; if (!ValidatedTextBoxOnKeyPress(event)) { event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } \");\n            }\n        }\n        control.Validators[control.Validators.length] = val;\n    }\n}\nfunction ValidatorHookupEvent(control, eventType, functionPrefix) {\n    var ev = control[eventType];\n    if (typeof(ev) == \"function\") {\n        ev = ev.toString();\n        ev = ev.substring(ev.indexOf(\"{\") + 1, ev.lastIndexOf(\"}\"));\n    }\n    else {\n        ev = \"\";\n    }\n    control[eventType] = new Function(\"event\", functionPrefix + \" \" + ev);\n}\nfunction ValidatorGetValue(id) {\n    var control;\n    control = document.getElementById(id);\n    if (typeof(control.value) == \"string\") {\n        return control.value;\n    }\n    return ValidatorGetValueRecursive(control);\n}\nfunction ValidatorGetValueRecursive(control)\n{\n    if (typeof(control.value) == \"string\" && (control.type != \"radio\" || control.checked == true)) {\n        return control.value;\n    }\n    var i, val;\n    for (i = 0; i<control.childNodes.length; i++) {\n        val = ValidatorGetValueRecursive(control.childNodes[i]);\n        if (val != \"\") return val;\n    }\n    return \"\";\n}\nfunction Page_ClientValidate(validationGroup) {\n    Page_InvalidControlToBeFocused = null;\n    if (typeof(Page_Validators) == \"undefined\") {\n        return true;\n    }\n    var i;\n    for (i = 0; i < Page_Validators.length; i++) {\n        ValidatorValidate(Page_Validators[i], validationGroup, null);\n    }\n    ValidatorUpdateIsValid();\n    ValidationSummaryOnSubmit(validationGroup);\n    Page_BlockSubmit = !Page_IsValid;\n    return Page_IsValid;\n}\nfunction ValidatorCommonOnSubmit() {\n    Page_InvalidControlToBeFocused = null;\n    var result = !Page_BlockSubmit;\n    if ((typeof(window.event) != \"undefined\") && (window.event != null)) {\n        window.event.returnValue = result;\n    }\n    Page_BlockSubmit = false;\n    return result;\n}\nfunction ValidatorEnable(val, enable) {\n    val.enabled = (enable != false);\n    ValidatorValidate(val);\n    ValidatorUpdateIsValid();\n}\nfunction ValidatorOnChange(event) {\n    event = event || window.event;\n    Page_InvalidControlToBeFocused = null;\n    var targetedControl;\n    if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n        targetedControl = event.srcElement;\n    }\n    else {\n        targetedControl = event.target;\n    }\n    var vals;\n    if (typeof(targetedControl.Validators) != \"undefined\") {\n        vals = targetedControl.Validators;\n    }\n    else {\n        if (targetedControl.tagName.toLowerCase() == \"label\") {\n            targetedControl = document.getElementById(targetedControl.htmlFor);\n            vals = targetedControl.Validators;\n        }\n    }\n    if (vals) {\n        for (var i = 0; i < vals.length; i++) {\n            ValidatorValidate(vals[i], null, event);\n        }\n    }\n    ValidatorUpdateIsValid();\n}\nfunction ValidatedTextBoxOnKeyPress(event) {\n    event = event || window.event;\n    if (event.keyCode == 13) {\n        ValidatorOnChange(event);\n        var vals;\n        if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n            vals = event.srcElement.Validators;\n        }\n        else {\n            vals = event.target.Validators;\n        }\n        return AllValidatorsValid(vals);\n    }\n    return true;\n}\nfunction ValidatedControlOnBlur(event) {\n    event = event || window.event;\n    var control;\n    if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n        control = event.srcElement;\n    }\n    else {\n        control = event.target;\n    }\n    if ((typeof(control) != \"undefined\") && (control != null) && (Page_InvalidControlToBeFocused == control)) {\n        control.focus();\n        Page_InvalidControlToBeFocused = null;\n    }\n}\nfunction ValidatorValidate(val, validationGroup, event) {\n    val.isvalid = true;\n    if ((typeof(val.enabled) == \"undefined\" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {\n        if (typeof(val.evaluationfunction) == \"function\") {\n            val.isvalid = val.evaluationfunction(val);\n            if (!val.isvalid && Page_InvalidControlToBeFocused == null &&\n                typeof(val.focusOnError) == \"string\" && val.focusOnError == \"t\") {\n                ValidatorSetFocus(val, event);\n            }\n        }\n    }\n    ValidatorUpdateDisplay(val);\n}\nfunction ValidatorSetFocus(val, event) {\n    var ctrl;\n    if (typeof(val.controlhookup) == \"string\") {\n        var eventCtrl;\n        if ((typeof(event) != \"undefined\") && (event != null)) {\n            if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n                eventCtrl = event.srcElement;\n            }\n            else {\n                eventCtrl = event.target;\n            }\n        }\n        if ((typeof(eventCtrl) != \"undefined\") && (eventCtrl != null) &&\n            (typeof(eventCtrl.id) == \"string\") &&\n            (eventCtrl.id == val.controlhookup)) {\n            ctrl = eventCtrl;\n        }\n    }\n    if ((typeof(ctrl) == \"undefined\") || (ctrl == null)) {\n        ctrl = document.getElementById(val.controltovalidate);\n    }\n    if ((typeof(ctrl) != \"undefined\") && (ctrl != null) &&\n        (ctrl.tagName.toLowerCase() != \"table\" || (typeof(event) == \"undefined\") || (event == null)) && \n        ((ctrl.tagName.toLowerCase() != \"input\") || (ctrl.type.toLowerCase() != \"hidden\")) &&\n        (typeof(ctrl.disabled) == \"undefined\" || ctrl.disabled == null || ctrl.disabled == false) &&\n        (typeof(ctrl.visible) == \"undefined\" || ctrl.visible == null || ctrl.visible != false) &&\n        (IsInVisibleContainer(ctrl))) {\n        if ((ctrl.tagName.toLowerCase() == \"table\" && (typeof(__nonMSDOMBrowser) == \"undefined\" || __nonMSDOMBrowser)) ||\n            (ctrl.tagName.toLowerCase() == \"span\")) {\n            var inputElements = ctrl.getElementsByTagName(\"input\");\n            var lastInputElement  = inputElements[inputElements.length -1];\n            if (lastInputElement != null) {\n                ctrl = lastInputElement;\n            }\n        }\n        if (typeof(ctrl.focus) != \"undefined\" && ctrl.focus != null) {\n            ctrl.focus();\n            Page_InvalidControlToBeFocused = ctrl;\n        }\n    }\n}\nfunction IsInVisibleContainer(ctrl) {\n    if (typeof(ctrl.style) != \"undefined\" &&\n        ( ( typeof(ctrl.style.display) != \"undefined\" &&\n            ctrl.style.display == \"none\") ||\n          ( typeof(ctrl.style.visibility) != \"undefined\" &&\n            ctrl.style.visibility == \"hidden\") ) ) {\n        return false;\n    }\n    else if (typeof(ctrl.parentNode) != \"undefined\" &&\n             ctrl.parentNode != null &&\n             ctrl.parentNode != ctrl) {\n        return IsInVisibleContainer(ctrl.parentNode);\n    }\n    return true;\n}\nfunction IsValidationGroupMatch(control, validationGroup) {\n    if ((typeof(validationGroup) == \"undefined\") || (validationGroup == null)) {\n        return true;\n    }\n    var controlGroup = \"\";\n    if (typeof(control.validationGroup) == \"string\") {\n        controlGroup = control.validationGroup;\n    }\n    return (controlGroup == validationGroup);\n}\nfunction ValidatorOnLoad() {\n    if (typeof(Page_Validators) == \"undefined\")\n        return;\n    var i, val;\n    for (i = 0; i < Page_Validators.length; i++) {\n        val = Page_Validators[i];\n        if (typeof(val.evaluationfunction) == \"string\") {\n            eval(\"val.evaluationfunction = \" + val.evaluationfunction + \";\");\n        }\n        if (typeof(val.isvalid) == \"string\") {\n            if (val.isvalid == \"False\") {\n                val.isvalid = false;\n                Page_IsValid = false;\n            }\n            else {\n                val.isvalid = true;\n            }\n        } else {\n            val.isvalid = true;\n        }\n        if (typeof(val.enabled) == \"string\") {\n            val.enabled = (val.enabled != \"False\");\n        }\n        if (typeof(val.controltovalidate) == \"string\") {\n            ValidatorHookupControlID(val.controltovalidate, val);\n        }\n        if (typeof(val.controlhookup) == \"string\") {\n            ValidatorHookupControlID(val.controlhookup, val);\n        }\n    }\n    Page_ValidationActive = true;\n}\nfunction ValidatorConvert(op, dataType, val) {\n    function GetFullYear(year) {\n        var twoDigitCutoffYear = val.cutoffyear % 100;\n        var cutoffYearCentury = val.cutoffyear - twoDigitCutoffYear;\n        return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year));\n    }\n    var num, cleanInput, m, exp;\n    if (dataType == \"Integer\") {\n        exp = /^\\s*[-\\+]?\\d+\\s*$/;\n        if (op.match(exp) == null)\n            return null;\n        num = parseInt(op, 10);\n        return (isNaN(num) ? null : num);\n    }\n    else if(dataType == \"Double\") {\n        exp = new RegExp(\"^\\\\s*([-\\\\+])?(\\\\d*)\\\\\" + val.decimalchar + \"?(\\\\d*)\\\\s*$\");\n        m = op.match(exp);\n        if (m == null)\n            return null;\n        if (m[2].length == 0 && m[3].length == 0)\n            return null;\n        cleanInput = (m[1] != null ? m[1] : \"\") + (m[2].length>0 ? m[2] : \"0\") + (m[3].length>0 ? \".\" + m[3] : \"\");\n        num = parseFloat(cleanInput);\n        return (isNaN(num) ? null : num);\n    }\n    else if (dataType == \"Currency\") {\n        var hasDigits = (val.digits > 0);\n        var beginGroupSize, subsequentGroupSize;\n        var groupSizeNum = parseInt(val.groupsize, 10);\n        if (!isNaN(groupSizeNum) && groupSizeNum > 0) {\n            beginGroupSize = \"{1,\" + groupSizeNum + \"}\";\n            subsequentGroupSize = \"{\" + groupSizeNum + \"}\";\n        }\n        else {\n            beginGroupSize = subsequentGroupSize = \"+\";\n        }\n        exp = new RegExp(\"^\\\\s*([-\\\\+])?((\\\\d\" + beginGroupSize + \"(\\\\\" + val.groupchar + \"\\\\d\" + subsequentGroupSize + \")+)|\\\\d*)\"\n                        + (hasDigits ? \"\\\\\" + val.decimalchar + \"?(\\\\d{0,\" + val.digits + \"})\" : \"\")\n                        + \"\\\\s*$\");\n        m = op.match(exp);\n        if (m == null)\n            return null;\n        if (m[2].length == 0 && hasDigits && m[5].length == 0)\n            return null;\n        cleanInput = (m[1] != null ? m[1] : \"\") + m[2].replace(new RegExp(\"(\\\\\" + val.groupchar + \")\", \"g\"), \"\") + ((hasDigits && m[5].length > 0) ? \".\" + m[5] : \"\");\n        num = parseFloat(cleanInput);\n        return (isNaN(num) ? null : num);\n    }\n    else if (dataType == \"Date\") {\n        var yearFirstExp = new RegExp(\"^\\\\s*((\\\\d{4})|(\\\\d{2}))([-/]|\\\\. ?)(\\\\d{1,2})\\\\4(\\\\d{1,2})\\\\.?\\\\s*$\");\n        m = op.match(yearFirstExp);\n        var day, month, year;\n        if (m != null && (((typeof(m[2]) != \"undefined\") && (m[2].length == 4)) || val.dateorder == \"ymd\")) {\n            day = m[6];\n            month = m[5];\n            year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));\n        }\n        else {\n            if (val.dateorder == \"ymd\"){\n                return null;\n            }\n            var yearLastExp = new RegExp(\"^\\\\s*(\\\\d{1,2})([-/]|\\\\. ?)(\\\\d{1,2})(?:\\\\s|\\\\2)((\\\\d{4})|(\\\\d{2}))(?:\\\\s\\u0433\\\\.|\\\\.)?\\\\s*$\");\n            m = op.match(yearLastExp);\n            if (m == null) {\n                return null;\n            }\n            if (val.dateorder == \"mdy\") {\n                day = m[3];\n                month = m[1];\n            }\n            else {\n                day = m[1];\n                month = m[3];\n            }\n            year = ((typeof(m[5]) != \"undefined\") && (m[5].length == 4)) ? m[5] : GetFullYear(parseInt(m[6], 10));\n        }\n        month -= 1;\n        var date = new Date(year, month, day);\n        if (year < 100) {\n            date.setFullYear(year);\n        }\n        return (typeof(date) == \"object\" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;\n    }\n    else {\n        return op.toString();\n    }\n}\nfunction ValidatorCompare(operand1, operand2, operator, val) {\n    var dataType = val.type;\n    var op1, op2;\n    if ((op1 = ValidatorConvert(operand1, dataType, val)) == null)\n        return false;\n    if (operator == \"DataTypeCheck\")\n        return true;\n    if ((op2 = ValidatorConvert(operand2, dataType, val)) == null)\n        return true;\n    switch (operator) {\n        case \"NotEqual\":\n            return (op1 != op2);\n        case \"GreaterThan\":\n            return (op1 > op2);\n        case \"GreaterThanEqual\":\n            return (op1 >= op2);\n        case \"LessThan\":\n            return (op1 < op2);\n        case \"LessThanEqual\":\n            return (op1 <= op2);\n        default:\n            return (op1 == op2);\n    }\n}\nfunction CompareValidatorEvaluateIsValid(val) {\n    var value = ValidatorGetValue(val.controltovalidate);\n    if (ValidatorTrim(value).length == 0)\n        return true;\n    var compareTo = \"\";\n    if ((typeof(val.controltocompare) != \"string\") ||\n        (typeof(document.getElementById(val.controltocompare)) == \"undefined\") ||\n        (null == document.getElementById(val.controltocompare))) {\n        if (typeof(val.valuetocompare) == \"string\") {\n            compareTo = val.valuetocompare;\n        }\n    }\n    else {\n        compareTo = ValidatorGetValue(val.controltocompare);\n    }\n    var operator = \"Equal\";\n    if (typeof(val.operator) == \"string\") {\n        operator = val.operator;\n    }\n    return ValidatorCompare(value, compareTo, operator, val);\n}\nfunction CustomValidatorEvaluateIsValid(val) {\n    var value = \"\";\n    if (typeof(val.controltovalidate) == \"string\") {\n        value = ValidatorGetValue(val.controltovalidate);\n        if ((ValidatorTrim(value).length == 0) &&\n            ((typeof(val.validateemptytext) != \"string\") || (val.validateemptytext != \"true\"))) {\n            return true;\n        }\n    }\n    var args = { Value:value, IsValid:true };\n    if (typeof(val.clientvalidationfunction) == \"string\") {\n        eval(val.clientvalidationfunction + \"(val, args) ;\");\n    }\n    return args.IsValid;\n}\nfunction RegularExpressionValidatorEvaluateIsValid(val) {\n    var value = ValidatorGetValue(val.controltovalidate);\n    if (ValidatorTrim(value).length == 0)\n        return true;\n    var rx = new RegExp(val.validationexpression);\n    var matches = rx.exec(value);\n    return (matches != null && value == matches[0]);\n}\nfunction ValidatorTrim(s) {\n    var m = s.match(/^\\s*(\\S+(\\s+\\S+)*)\\s*$/);\n    return (m == null) ? \"\" : m[1];\n}\nfunction RequiredFieldValidatorEvaluateIsValid(val) {\n    return (ValidatorTrim(ValidatorGetValue(val.controltovalidate)) != ValidatorTrim(val.initialvalue))\n}\nfunction RangeValidatorEvaluateIsValid(val) {\n    var value = ValidatorGetValue(val.controltovalidate);\n    if (ValidatorTrim(value).length == 0)\n        return true;\n    return (ValidatorCompare(value, val.minimumvalue, \"GreaterThanEqual\", val) &&\n            ValidatorCompare(value, val.maximumvalue, \"LessThanEqual\", val));\n}\nfunction ValidationSummaryOnSubmit(validationGroup) {\n    if (typeof(Page_ValidationSummaries) == \"undefined\")\n        return;\n    var summary, sums, s;\n    var headerSep, first, pre, post, end;\n    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {\n        summary = Page_ValidationSummaries[sums];\n        if (!summary) continue;\n        summary.style.display = \"none\";\n        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {\n            var i;\n            if (summary.showsummary != \"False\") {\n                summary.style.display = \"\";\n                if (typeof(summary.displaymode) != \"string\") {\n                    summary.displaymode = \"BulletList\";\n                }\n                switch (summary.displaymode) {\n                    case \"List\":\n                        headerSep = \"<br>\";\n                        first = \"\";\n                        pre = \"\";\n                        post = \"<br>\";\n                        end = \"\";\n                        break;\n                    case \"BulletList\":\n                    default:\n                        headerSep = \"\";\n                        first = \"<ul>\";\n                        pre = \"<li>\";\n                        post = \"</li>\";\n                        end = \"</ul>\";\n                        break;\n                    case \"SingleParagraph\":\n                        headerSep = \" \";\n                        first = \"\";\n                        pre = \"\";\n                        post = \" \";\n                        end = \"<br>\";\n                        break;\n                }\n                s = \"\";\n                if (typeof(summary.headertext) == \"string\") {\n                    s += summary.headertext + headerSep;\n                }\n                s += first;\n                for (i=0; i<Page_Validators.length; i++) {\n                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == \"string\") {\n                        s += pre + Page_Validators[i].errormessage + post;\n                    }\n                }\n                s += end;\n                summary.innerHTML = s;\n                window.scrollTo(0,0);\n            }\n            if (summary.showmessagebox == \"True\") {\n                s = \"\";\n                if (typeof(summary.headertext) == \"string\") {\n                    s += summary.headertext + \"\\r\\n\";\n                }\n                var lastValIndex = Page_Validators.length - 1;\n                for (i=0; i<=lastValIndex; i++) {\n                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == \"string\") {\n                        switch (summary.displaymode) {\n                            case \"List\":\n                                s += Page_Validators[i].errormessage;\n                                if (i < lastValIndex) {\n                                    s += \"\\r\\n\";\n                                }\n                                break;\n                            case \"BulletList\":\n                            default:\n                                s += \"- \" + Page_Validators[i].errormessage;\n                                if (i < lastValIndex) {\n                                    s += \"\\r\\n\";\n                                }\n                                break;\n                            case \"SingleParagraph\":\n                                s += Page_Validators[i].errormessage + \" \";\n                                break;\n                        }\n                    }\n                }\n                alert(s);\n            }\n        }\n    }\n}\nif (window.jQuery) {\n    (function ($) {\n        var dataValidationAttribute = \"data-val\",\n            dataValidationSummaryAttribute = \"data-valsummary\",\n            normalizedAttributes = { validationgroup: \"validationGroup\", focusonerror: \"focusOnError\" };\n        function getAttributesWithPrefix(element, prefix) {\n            var i,\n                attribute,\n                list = {},\n                attributes = element.attributes,\n                length = attributes.length,\n                prefixLength = prefix.length;\n            prefix = prefix.toLowerCase();\n            for (i = 0; i < length; i++) {\n                attribute = attributes[i];\n                if (attribute.specified && attribute.name.substr(0, prefixLength).toLowerCase() === prefix) {\n                    list[attribute.name.substr(prefixLength)] = attribute.value;\n                }\n            }\n            return list;\n        }\n        function normalizeKey(key) {\n            key = key.toLowerCase();\n            return normalizedAttributes[key] === undefined ? key : normalizedAttributes[key];\n        }\n        function addValidationExpando(element) {\n            var attributes = getAttributesWithPrefix(element, dataValidationAttribute + \"-\");\n            $.each(attributes, function (key, value) {\n                element[normalizeKey(key)] = value;\n            });\n        }\n        function dispose(element) {\n            var index = $.inArray(element, Page_Validators);\n            if (index >= 0) {\n                Page_Validators.splice(index, 1);\n            }\n        }\n        function addNormalizedAttribute(name, normalizedName) {\n            normalizedAttributes[name.toLowerCase()] = normalizedName;\n        }\n        function parseSpecificAttribute(selector, attribute, validatorsArray) {\n            return $(selector).find(\"[\" + attribute + \"='true']\").each(function (index, element) {\n                addValidationExpando(element);\n                element.dispose = function () { dispose(element); element.dispose = null; };\n                if ($.inArray(element, validatorsArray) === -1) {\n                    validatorsArray.push(element);\n                }\n            }).length;\n        }\n        function parse(selector) {\n            var length = parseSpecificAttribute(selector, dataValidationAttribute, Page_Validators);\n            length += parseSpecificAttribute(selector, dataValidationSummaryAttribute, Page_ValidationSummaries);\n            return length;\n        }\n        function loadValidators() {\n            if (typeof (ValidatorOnLoad) === \"function\") {\n                ValidatorOnLoad();\n            }\n            if (typeof (ValidatorOnSubmit) === \"undefined\") {\n                window.ValidatorOnSubmit = function () {\n                    return Page_ValidationActive ? ValidatorCommonOnSubmit() : true;\n                };\n            }\n        }\n        function registerUpdatePanel() {\n            if (window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager) {\n                var prm = Sys.WebForms.PageRequestManager.getInstance(),\n                    postBackElement, endRequestHandler;\n                if (prm.get_isInAsyncPostBack()) {\n                    endRequestHandler = function (sender, args) {\n                        if (parse(document)) {\n                            loadValidators();\n                        }\n                        prm.remove_endRequest(endRequestHandler);\n                        endRequestHandler = null;\n                    };\n                    prm.add_endRequest(endRequestHandler);\n                }\n                prm.add_beginRequest(function (sender, args) {\n                    postBackElement = args.get_postBackElement();\n                });\n                prm.add_pageLoaded(function (sender, args) {\n                    var i, panels, valFound = 0;\n                    if (typeof (postBackElement) === \"undefined\") {\n                        return;\n                    }\n                    panels = args.get_panelsUpdated();\n                    for (i = 0; i < panels.length; i++) {\n                        valFound += parse(panels[i]);\n                    }\n                    panels = args.get_panelsCreated();\n                    for (i = 0; i < panels.length; i++) {\n                        valFound += parse(panels[i]);\n                    }\n                    if (valFound) {\n                        loadValidators();\n                    }\n                });\n            }\n        }\n        $(function () {\n            if (typeof (Page_Validators) === \"undefined\") {\n                window.Page_Validators = [];\n            }\n            if (typeof (Page_ValidationSummaries) === \"undefined\") {\n                window.Page_ValidationSummaries = [];\n            }\n            if (typeof (Page_ValidationActive) === \"undefined\") {\n                window.Page_ValidationActive = false;\n            }\n            $.WebFormValidator = {\n                addNormalizedAttribute: addNormalizedAttribute,\n                parse: parse\n            };\n            if (parse(document)) {\n                loadValidators();\n            }\n            registerUpdatePanel();\n        });\n    } (jQuery));\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.1\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.1\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.1\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n    }\n\n    if (changed) this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target)\n      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n      Plugin.call($btn, 'toggle')\n      e.preventDefault()\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.1\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var delta = direction == 'prev' ? -1 : 1\n    var activeIndex = this.getItemIndex(active)\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.1\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $(this.options.trigger).filter('[href=\"#' + element.id + '\"], [data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true,\n    trigger: '[data-toggle=\"collapse\"]'\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && option == 'show') options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.1'\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--                        // up\n    if (e.which == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.1\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options        = options\n    this.$body          = $(document.body)\n    this.$element       = $(element)\n    this.$backdrop      =\n    this.isShown        = null\n    this.scrollbarWidth = 0\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      if (that.options.backdrop) that.adjustBackdrop()\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .prependTo(this.$element)\n        .on('click.dismiss.bs.modal', $.proxy(function (e) {\n          if (e.target !== e.currentTarget) return\n          this.options.backdrop == 'static'\n            ? this.$element[0].focus.call(this.$element[0])\n            : this.hide.call(this)\n        }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    if (this.options.backdrop) this.adjustBackdrop()\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustBackdrop = function () {\n    this.$backdrop\n      .css('height', 0)\n      .css('height', this.$element[0].scrollHeight)\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    this.bodyIsOverflowing = document.body.scrollHeight > document.documentElement.clientHeight\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', '')\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.1\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (self && self.$tip && self.$tip.is(':visible')) {\n      self.hoverState = 'in'\n      return\n    }\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var $container   = this.options.container ? $(this.options.container) : this.$element.parent()\n        var containerDim = this.getPosition($container)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < containerDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > containerDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < containerDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {\n    this.arrow()\n      .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isHorizontal ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element\n        .removeAttr('aria-describedby')\n        .trigger('hidden.bs.' + that.type)\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    return (this.$tip = this.$tip || $(this.options.template))\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.tooltip')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.tooltip', (data = {}))\n        if (!data[selector]) data[selector] = new Tooltip(this, options)\n      } else {\n        if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.1\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this    = $(this)\n      var data     = $this.data('bs.popover')\n      var options  = typeof option == 'object' && option\n      var selector = options && options.selector\n\n      if (!data && option == 'destroy') return\n      if (selector) {\n        if (!data) $this.data('bs.popover', (data = {}))\n        if (!data[selector]) data[selector] = new Popover(this, options)\n      } else {\n        if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      }\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.1\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var process  = $.proxy(this.process, this)\n\n    this.$body          = $('body')\n    this.$scrollElement = $(element).is('body') ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', process)\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = 'offset'\n    var offsetBase   = 0\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.offsets = []\n    this.targets = []\n    this.scrollHeight = this.getScrollHeight()\n\n    var self     = this\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n        '[data-target=\"' + target + '\"],' +\n        this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.1\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.VERSION = '3.3.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.1\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      =\n    this.unpin        =\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && colliderTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = $('body').height()\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/jquery-2.1.1.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to return the new transport object to use with the data type provided in the first argument.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead.</summary>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'fn.extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>\n    ///   <param name=\"object\" type=\"Object\">An object to merge onto the jQuery prototype.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">Document element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"\">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"htmlString\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked or selected.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"htmlString\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the           index position of the element in the set and the old HTML value as arguments.           jQuery empties the element before calling the function;           use the oldhtml argument to reference the previous content.           Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"PlainObject\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"\">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"newContent\" type=\"\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <summary>Selects the element that is the root of the document.</summary>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/jquery-2.1.1.js",
    "content": "/*!\n * jQuery JavaScript Library v2.1.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-05-01T17:11Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper window is present,\n\t\t// execute the factory and get jQuery\n\t\t// For environments that do not inherently posses a window with a document\n\t\t// (such as Node.js), expose a jQuery-making factory as module.exports\n\t\t// This accentuates the need for the creation of a real window\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\n\nvar arr = [];\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\n\tversion = \"2.1.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\treturn !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\t// Support: Android < 4.0, iOS < 6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf(\"use strict\") === 1 ) {\n\t\t\t\tscript = document.createElement(\"script\");\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t// and removal by using an indirect global eval\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v1.10.19\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2014-04-18\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document (jQuery #6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== strundefined && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent !== parent.top ) {\n\t\t// IE11 does not have attachEvent, so all must suffer\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t}, false );\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", function() {\n\t\t\t\tsetDocument();\n\t\t\t});\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select msallowclip=''><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowclip^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (oldCache = outerCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is no seed and only one group\n\tif ( match.length === 1 ) {\n\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = (/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/);\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) >= 0 ) !== not;\n\t});\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n});\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[0] === \"<\" && selector[ selector.length - 1 ] === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof rootjQuery.ready !== \"undefined\" ?\n\t\t\t\trootjQuery.ready( selector ) :\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.extend({\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push( elem );\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar matched = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tmatched.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t}\n});\n\njQuery.fn.extend({\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.unique(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\twhile ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.unique( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n});\nvar rnotwhite = (/\\S+/g);\n\n\n\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend({\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n});\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\twindow.removeEventListener( \"load\", completed, false );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[0], key ) : emptyGet;\n};\n\n\n/**\n * Determines whether an object can have data\n */\njQuery.acceptData = function( owner ) {\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\nfunction Data() {\n\t// Support: Android < 4,\n\t// Old WebKit does not have Object.preventExtensions/freeze method,\n\t// return new empty object instead with no [[set]] accessor\n\tObject.defineProperty( this.cache = {}, 0, {\n\t\tget: function() {\n\t\t\treturn {};\n\t\t}\n\t});\n\n\tthis.expando = jQuery.expando + Math.random();\n}\n\nData.uid = 1;\nData.accepts = jQuery.acceptData;\n\nData.prototype = {\n\tkey: function( owner ) {\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return the key for a frozen object.\n\t\tif ( !Data.accepts( owner ) ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar descriptor = {},\n\t\t\t// Check if the owner object already has a cache key\n\t\t\tunlock = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !unlock ) {\n\t\t\tunlock = Data.uid++;\n\n\t\t\t// Secure it in a non-enumerable, non-writable property\n\t\t\ttry {\n\t\t\t\tdescriptor[ this.expando ] = { value: unlock };\n\t\t\t\tObject.defineProperties( owner, descriptor );\n\n\t\t\t// Support: Android < 4\n\t\t\t// Fallback to a less secure definition\n\t\t\t} catch ( e ) {\n\t\t\t\tdescriptor[ this.expando ] = unlock;\n\t\t\t\tjQuery.extend( owner, descriptor );\n\t\t\t}\n\t\t}\n\n\t\t// Ensure the cache object\n\t\tif ( !this.cache[ unlock ] ) {\n\t\t\tthis.cache[ unlock ] = {};\n\t\t}\n\n\t\treturn unlock;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\t// There may be an unlock assigned to this node,\n\t\t\t// if there is no entry for this \"owner\", create one inline\n\t\t\t// and set the unlock as though an owner entry had always existed\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\t\t\t// Fresh assignments by object are shallow copied\n\t\t\tif ( jQuery.isEmptyObject( cache ) ) {\n\t\t\t\tjQuery.extend( this.cache[ unlock ], data );\n\t\t\t// Otherwise, copy the properties one-by-one to the cache object\n\t\t\t} else {\n\t\t\t\tfor ( prop in data ) {\n\t\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\t// Either a valid cache is found, or will be created.\n\t\t// New caches will be created and the unlock returned,\n\t\t// allowing direct access to the newly created\n\t\t// empty data object. A valid owner object must be provided.\n\t\tvar cache = this.cache[ this.key( owner ) ];\n\n\t\treturn key === undefined ?\n\t\t\tcache : cache[ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase(key) );\n\t\t}\n\n\t\t// [*]When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tunlock = this.key( owner ),\n\t\t\tcache = this.cache[ unlock ];\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.cache[ unlock ] = {};\n\n\t\t} else {\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\treturn !jQuery.isEmptyObject(\n\t\t\tthis.cache[ owner[ this.expando ] ] || {}\n\t\t);\n\t},\n\tdiscard: function( owner ) {\n\t\tif ( owner[ this.expando ] ) {\n\t\t\tdelete this.cache[ owner[ this.expando ] ];\n\t\t}\n\t}\n};\nvar data_priv = new Data();\n\nvar data_user = new Data();\n\n\n\n/*\n\tImplementation Summary\n\n\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t2. Improve the module's maintainability by reducing the storage\n\t\tpaths to a single mechanism.\n\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n*/\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdata_user.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend({\n\thasData: function( elem ) {\n\t\treturn data_user.hasData( elem ) || data_priv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn data_user.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdata_user.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to data_priv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn data_priv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdata_priv.remove( elem, name );\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = data_user.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !data_priv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata_priv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tdata_user.set( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data,\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = data_user.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = data_user.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each(function() {\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = data_user.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdata_user.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf(\"-\") !== -1 && data !== undefined ) {\n\t\t\t\t\tdata_user.set( this, key, value );\n\t\t\t\t}\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tdata_user.remove( this, key );\n\t\t});\n\t}\n});\n\n\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = data_priv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = data_priv.access( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn data_priv.get( elem, key ) || data_priv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tdata_priv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = data_priv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n\t};\n\nvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\n\n(function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` need .setAttribute for WWA\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE9-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n})();\nvar strundefined = typeof undefined;\n\n\n\nsupport.focusinBubbles = \"onfocusin\" in window;\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = data_priv.hasData( elem ) && data_priv.get( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\t\t\tdata_priv.remove( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( data_priv.get( cur, \"events\" ) || {} )[ event.type ] && data_priv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && jQuery.acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( data_priv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome < 28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle, false );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\t\t\t\t// Support: Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && e.preventDefault ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// Support: Chrome 15+\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// Create \"bubbling\" focus and blur events\n// Support: Firefox, Chrome, Safari\nif ( !support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdata_priv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = data_priv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdata_priv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdata_priv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\n\t\t// Support: IE 9\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t_default: [ 0, \"\", \"\" ]\n\t};\n\n// Support: IE 9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: 1.x compatibility\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdata_priv.set(\n\t\t\telems[ i ], \"globalEval\", !refElements || data_priv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( data_priv.hasData( src ) ) {\n\t\tpdataOld = data_priv.access( src );\n\t\tpdataCur = data_priv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( data_user.hasData( src ) ) {\n\t\tudataOld = data_user.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdata_user.set( dest, udataCur );\n\t}\n}\n\nfunction getAll( context, tag ) {\n\tvar ret = context.getElementsByTagName ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\tcontext.querySelectorAll ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n// Support: IE >= 9\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Support: IE >= 9\n\t\t// Fix Cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar elem, tmp, tag, wrap, contains, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[ 2 ];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[ 0 ];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Fixes #12346\n\t\t\t\t\t// Support: Webkit, IE\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type, key,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[ i ]) !== undefined; i++ ) {\n\t\t\tif ( jQuery.acceptData( elem ) ) {\n\t\t\t\tkey = elem[ data_priv.expando ];\n\n\t\t\t\tif ( key && (data = data_priv.cache[ key ]) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( data_priv.cache[ key ] ) {\n\t\t\t\t\t\t// Discard any remaining `private` data\n\t\t\t\t\t\tdelete data_priv.cache[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Discard any remaining `user` data\n\t\t\tdelete data_user.cache[ elem[ data_user.expando ] ];\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each(function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\tremove: function( selector, keepData /* Internal Use Only */ ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map(function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar arg = arguments[ 0 ];\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\targ = this.parentNode;\n\n\t\t\tjQuery.cleanData( getAll( this ) );\n\n\t\t\tif ( arg ) {\n\t\t\t\targ.replaceChild( elem, this );\n\t\t\t}\n\t\t});\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn arg && (arg.length || arg.nodeType) ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = concat.apply( [], args );\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[ 0 ],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction ||\n\t\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\t// Support: QtWebKit\n\t\t\t\t\t\t\t// jQuery.merge because push.apply(_, arraylike) throws\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[ i ], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!data_priv.access( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\n\nvar iframe,\n\telemdisplay = {};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar style,\n\t\telem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\t// getDefaultComputedStyle might be reliably used only on attached element\n\t\tdisplay = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?\n\n\t\t\t// Use of this method is a temporary fix (more like optmization) until something better comes along,\n\t\t\t// since it was removed from specification and supported only in FF\n\t\t\tstyle.display : jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = (iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" )).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = (/^margin/);\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\t\treturn elem.ownerDocument.defaultView.getComputedStyle( elem, null );\n\t};\n\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\t}\n\n\tif ( computed ) {\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// Support: iOS < 6\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\t\t\t\t// Hook not needed (or it's not possible to use it due to missing dependency),\n\t\t\t\t// remove it.\n\t\t\t\t// Since there are no other hooks for marginRight, remove the whole object.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\n\t\t\treturn (this.get = hookFn).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\n(function() {\n\tvar pixelPositionVal, boxSizingReliableVal,\n\t\tdocElem = document.documentElement,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;\" +\n\t\t\"position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computePixelPositionAndBoxSizingReliable() {\n\t\tdiv.style.cssText =\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;\" +\n\t\t\t\"box-sizing:border-box;display:block;margin-top:1%;top:1%;\" +\n\t\t\t\"border:1px;padding:1px;width:4px;position:absolute\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocElem.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div, null );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\tdocElem.removeChild( container );\n\t}\n\n\t// Support: node.js jsdom\n\t// Don't assume that getComputedStyle is a property of the global object\n\tif ( window.getComputedStyle ) {\n\t\tjQuery.extend( support, {\n\t\t\tpixelPosition: function() {\n\t\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t\t// No need to check if the test was already performed, though.\n\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\tboxSizingReliable: function() {\n\t\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\t\tcomputePixelPositionAndBoxSizingReliable();\n\t\t\t\t}\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\treliableMarginRight: function() {\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\t\tvar ret,\n\t\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\t\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\t\tdiv.style.width = \"1px\";\n\t\t\t\tdocElem.appendChild( container );\n\n\t\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );\n\n\t\t\t\tdocElem.removeChild( container );\n\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t});\n\t}\n})();\n\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\njQuery.swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + pnum + \")\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = data_priv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = data_priv.access( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdata_priv.set( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) && elem.offsetWidth === 0 ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t}\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t} ]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = data_priv.get( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdata_priv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always(function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t});\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = data_priv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\n\t\t\tdata_priv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( (display === \"none\" ? defaultDisplay( elem.nodeName ) : display) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || data_priv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = data_priv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = data_priv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\tclearTimeout( timeout );\n\t\t};\n\t});\n};\n\n\n(function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS 5.1, Android 4.x, Android 2.3\n\t// Check the default checkbox/radio value (\"\" on old WebKit; \"on\" elsewhere)\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Must access the parent to make an option select properly\n\t// Support: IE9, IE10\n\tsupport.optSelected = opt.selected;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Check if an input maintains its value after becoming a radio\n\t// Support: IE9, IE10\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n})();\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n});\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i;\n\njQuery.fn.extend({\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.hasAttribute( \"tabindex\" ) || rfocusable.test( elem.nodeName ) || elem.href ?\n\t\t\t\t\telem.tabIndex :\n\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Support: IE9+\n// Selectedness for an option in an optgroup can be inaccurate\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\njQuery.fn.extend({\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j, finalValue,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value,\n\t\t\ti = 0,\n\t\t\tlen = this.length;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t\tif ( elem.className !== finalValue ) {\n\t\t\t\t\t\telem.className = finalValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tdata_priv.set( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : data_priv.get( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n});\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend({\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE6-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ? !option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\n\n\nvar nonce = jQuery.now();\n\nvar rquery = (/\\?/);\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\ttmp = new DOMParser();\n\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n});\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t});\n};\n\n\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0;\n};\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function() {\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new XMLHttpRequest();\n\t} catch( e ) {}\n};\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSuccessStatus = {\n\t\t// file protocol always yields status code 0, assume 200\n\t\t0: 200,\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE9\n// Open requests must be manually aborted on unload (#5280)\nif ( window.ActiveXObject ) {\n\tjQuery( window ).on( \"unload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]();\n\t\t}\n\t});\n}\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport(function( options ) {\n\tvar callback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\txhr.open( options.type, options.url, options.async, options.username, options.password );\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t// file: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\t\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText === \"string\" ? {\n\t\t\t\t\t\t\t\t\t\ttext: xhr.responseText\n\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\txhr.onerror = callback(\"error\");\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = xhrCallbacks[ id ] = callback(\"abort\");\n\n\t\t\t\ttry {\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery(\"<script>\").prop({\n\t\t\t\t\tasync: true,\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t}).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context, defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[1] ) ];\n\t}\n\n\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t}).length;\n};\n\n\n\n\nvar docElem = window.document.documentElement;\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf(\"auto\") > -1;\n\n\t\t// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend({\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t});\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== strundefined ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// We assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : window.pageXOffset,\n\t\t\t\t\ttop ? val : window.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n});\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t});\n}\n\n\n\n\nvar\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === strundefined ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n\n}));\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/modernizr-2.8.3.js",
    "content": "/*!\n * Modernizr v2.8.3\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.8.3',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq) && matchMedia(mq).matches || false;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   goo.gl/v3V4Gp\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /**\n     * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n     */\n    ;(function(window, document) {\n        /*jshint evil:true */\n        /** version */\n        var version = '3.7.0';\n\n        /** Preset options */\n        var options = window.html5 || {};\n\n        /** Used to skip problem elements */\n        var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n        /** Not all elements can be cloned in IE **/\n        var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n        /** Detect whether the browser supports default html5 styles */\n        var supportsHtml5Styles;\n\n        /** Name of the expando, to work with multiple documents or to re-shiv one document */\n        var expando = '_html5shiv';\n\n        /** The id for the the documents expando */\n        var expanID = 0;\n\n        /** Cached data for each document */\n        var expandoData = {};\n\n        /** Detect whether the browser supports unknown elements */\n        var supportsUnknownElements;\n\n        (function() {\n          try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n          } catch(e) {\n            // assign a false positive if detection fails => unable to shiv\n            supportsHtml5Styles = true;\n            supportsUnknownElements = true;\n          }\n\n        }());\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Creates a style sheet with the given CSS text and adds it to the document.\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @param {String} cssText The CSS text.\n         * @returns {StyleSheet} The style element.\n         */\n        function addStyleSheet(ownerDocument, cssText) {\n          var p = ownerDocument.createElement('p'),\n          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n          p.innerHTML = 'x<style>' + cssText + '</style>';\n          return parent.insertBefore(p.lastChild, parent.firstChild);\n        }\n\n        /**\n         * Returns the value of `html5.elements` as an array.\n         * @private\n         * @returns {Array} An array of shived element node names.\n         */\n        function getElements() {\n          var elements = html5.elements;\n          return typeof elements == 'string' ? elements.split(' ') : elements;\n        }\n\n        /**\n         * Returns the data associated to the given document\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @returns {Object} An object of data.\n         */\n        function getExpandoData(ownerDocument) {\n          var data = expandoData[ownerDocument[expando]];\n          if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n          }\n          return data;\n        }\n\n        /**\n         * returns a shived element for the given nodeName and document\n         * @memberOf html5\n         * @param {String} nodeName name of the element\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived element.\n         */\n        function createElement(nodeName, ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n          }\n          if (!data) {\n            data = getExpandoData(ownerDocument);\n          }\n          var node;\n\n          if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n          } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n          } else {\n            node = data.createElem(nodeName);\n          }\n\n          // Avoid adding some elements to fragments in IE < 9 because\n          // * Attributes like `name` or `type` cannot be set/changed once an element\n          //   is inserted into a document/fragment\n          // * Link elements with `src` attributes that are inaccessible, as with\n          //   a 403 response, will cause the tab/window to crash\n          // * Script elements appended to fragments will execute when their `src`\n          //   or `text` property is set\n          return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n        }\n\n        /**\n         * returns a shived DocumentFragment for the given document\n         * @memberOf html5\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived DocumentFragment.\n         */\n        function createDocumentFragment(ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n          }\n          data = data || getExpandoData(ownerDocument);\n          var clone = data.frag.cloneNode(),\n          i = 0,\n          elems = getElements(),\n          l = elems.length;\n          for(;i<l;i++){\n            clone.createElement(elems[i]);\n          }\n          return clone;\n        }\n\n        /**\n         * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n         * @private\n         * @param {Document|DocumentFragment} ownerDocument The document.\n         * @param {Object} data of the document.\n         */\n        function shivMethods(ownerDocument, data) {\n          if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n          }\n\n\n          ownerDocument.createElement = function(nodeName) {\n            //abort shiv\n            if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n            }\n            return createElement(nodeName, ownerDocument, data);\n          };\n\n          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n                                                          'var n=f.cloneNode(),c=n.createElement;' +\n                                                          'h.shivMethods&&(' +\n                                                          // unroll the `createElement` calls\n                                                          getElements().join().replace(/[\\w\\-]+/g, function(nodeName) {\n            data.createElem(nodeName);\n            data.frag.createElement(nodeName);\n            return 'c(\"' + nodeName + '\")';\n          }) +\n            ');return n}'\n                                                         )(html5, data.frag);\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Shivs the given document.\n         * @memberOf html5\n         * @param {Document} ownerDocument The document to shiv.\n         * @returns {Document} The shived document.\n         */\n        function shivDocument(ownerDocument) {\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          var data = getExpandoData(ownerDocument);\n\n          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n            data.hasCSS = !!addStyleSheet(ownerDocument,\n                                          // corrects block display not defined in IE6/7/8/9\n                                          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +\n                                            // adds styling not present in IE6/7/8/9\n                                            'mark{background:#FF0;color:#000}' +\n                                            // hides non-rendered elements\n                                            'template{display:none}'\n                                         );\n          }\n          if (!supportsUnknownElements) {\n            shivMethods(ownerDocument, data);\n          }\n          return ownerDocument;\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * The `html5` object is exposed so that more elements can be shived and\n         * existing shiving can be detected on iframes.\n         * @type Object\n         * @example\n         *\n         * // options can be changed before the script is included\n         * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n         */\n        var html5 = {\n\n          /**\n           * An array or space separated string of node names of the elements to shiv.\n           * @memberOf html5\n           * @type Array|String\n           */\n          'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',\n\n          /**\n           * current version of html5shiv\n           */\n          'version': version,\n\n          /**\n           * A flag to indicate that the HTML5 style sheet should be inserted.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivCSS': (options.shivCSS !== false),\n\n          /**\n           * Is equal to true if a browser supports creating unknown/HTML5 elements\n           * @memberOf html5\n           * @type boolean\n           */\n          'supportsUnknownElements': supportsUnknownElements,\n\n          /**\n           * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n           * methods should be overwritten.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivMethods': (options.shivMethods !== false),\n\n          /**\n           * A string to describe the type of `html5` object (\"default\" or \"default print\").\n           * @memberOf html5\n           * @type String\n           */\n          'type': 'default',\n\n          // shivs the document according to the specified `html5` object options\n          'shivDocument': shivDocument,\n\n          //creates a shived element\n          createElement: createElement,\n\n          //creates a shived documentFragment\n          createDocumentFragment: createDocumentFragment\n        };\n\n        /*--------------------------------------------------------------------------*/\n\n        // expose html5\n        window.html5 = html5;\n\n        // shiv the document\n        shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/respond.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Scripts/respond.matchmedia.addListener.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n(function(w) {\n  \"use strict\";\n  if (w.matchMedia && w.matchMedia(\"all\").addListener) {\n    return false;\n  }\n  var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia(\"only all\").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) {\n    w.clearTimeout(timeoutID);\n    timeoutID = w.setTimeout(function() {\n      for (var i = 0, il = queries.length; i < il; i++) {\n        var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches;\n        if (matches !== mql.matches) {\n          mql.matches = matches;\n          for (var j = 0, jl = listeners.length; j < jl; j++) {\n            listeners[j].call(w, mql);\n          }\n        }\n      }\n    }, 30);\n  };\n  w.matchMedia = function(media) {\n    var mql = localMatchMedia(media), listeners = [], index = 0;\n    mql.addListener = function(listener) {\n      if (!hasMediaQueries) {\n        return;\n      }\n      if (!isListening) {\n        isListening = true;\n        w.addEventListener(\"resize\", handleChange, true);\n      }\n      if (index === 0) {\n        index = queries.push({\n          mql: mql,\n          listeners: listeners\n        });\n      }\n      listeners.push(listener);\n    };\n    mql.removeListener = function(listener) {\n      for (var i = 0, il = listeners.length; i < il; i++) {\n        if (listeners[i] === listener) {\n          listeners.splice(i, 1);\n        }\n      }\n    };\n    return mql;\n  };\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Site.Master",
    "content": "﻿<%@ Master Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"Site.master.cs\" Inherits=\"Linq2TwitterDemos_WebForms.SiteMaster\" %>\n\n<!DOCTYPE html>\n\n<html lang=\"en\">\n<head runat=\"server\">\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title><%: Page.Title %> - My ASP.NET Application</title>\n\n    <asp:PlaceHolder runat=\"server\">\n        <%: Scripts.Render(\"~/bundles/modernizr\") %>\n    </asp:PlaceHolder>\n    <webopt:bundlereference runat=\"server\" path=\"~/Content/css\" />\n    <link href=\"~/favicon.ico\" rel=\"shortcut icon\" type=\"image/x-icon\" />\n\n</head>\n<body>\n    <form runat=\"server\">\n        <asp:ScriptManager runat=\"server\">\n            <Scripts>\n                <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>\n                <%--Framework Scripts--%>\n                <asp:ScriptReference Name=\"MsAjaxBundle\" />\n                <asp:ScriptReference Name=\"jquery\" />\n                <asp:ScriptReference Name=\"bootstrap\" />\n                <asp:ScriptReference Name=\"respond\" />\n                <asp:ScriptReference Name=\"WebForms.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/WebForms.js\" />\n                <asp:ScriptReference Name=\"WebUIValidation.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/WebUIValidation.js\" />\n                <asp:ScriptReference Name=\"MenuStandards.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/MenuStandards.js\" />\n                <asp:ScriptReference Name=\"GridView.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/GridView.js\" />\n                <asp:ScriptReference Name=\"DetailsView.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/DetailsView.js\" />\n                <asp:ScriptReference Name=\"TreeView.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/TreeView.js\" />\n                <asp:ScriptReference Name=\"WebParts.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/WebParts.js\" />\n                <asp:ScriptReference Name=\"Focus.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/Focus.js\" />\n                <asp:ScriptReference Name=\"WebFormsBundle\" />\n                <%--Site Scripts--%>\n            </Scripts>\n        </asp:ScriptManager>\n\n        <div class=\"navbar navbar-inverse navbar-fixed-top\">\n            <div class=\"container\">\n                <div class=\"navbar-header\">\n                    <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                    </button>\n                    <a class=\"navbar-brand\" runat=\"server\" href=\"~/\">Application name</a>\n                </div>\n                <div class=\"navbar-collapse collapse\">\n                    <ul class=\"nav navbar-nav\">\n                        <li><a runat=\"server\" href=\"~/\">Home</a></li>\n                        <li><a runat=\"server\" href=\"~/StatusDemos/StatusDemos\">Status</a></li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n        <div class=\"container body-content\">\n            <asp:ContentPlaceHolder ID=\"MainContent\" runat=\"server\">\n            </asp:ContentPlaceHolder>\n            <hr />\n            <footer>\n                <p>&copy; <%: DateTime.Now.Year %> - My ASP.NET Application</p>\n            </footer>\n        </div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Site.Master.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Security.Claims;\nusing System.Security.Principal;\nusing System.Web;\nusing System.Web.Security;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class SiteMaster : MasterPage\n    {\n        private const string AntiXsrfTokenKey = \"__AntiXsrfToken\";\n        private const string AntiXsrfUserNameKey = \"__AntiXsrfUserName\";\n        private string _antiXsrfTokenValue;\n\n        protected void Page_Init(object sender, EventArgs e)\n        {\n            // The code below helps to protect against XSRF attacks\n            var requestCookie = Request.Cookies[AntiXsrfTokenKey];\n            Guid requestCookieGuidValue;\n            if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue))\n            {\n                // Use the Anti-XSRF token from the cookie\n                _antiXsrfTokenValue = requestCookie.Value;\n                Page.ViewStateUserKey = _antiXsrfTokenValue;\n            }\n            else\n            {\n                // Generate a new Anti-XSRF token and save to the cookie\n                _antiXsrfTokenValue = Guid.NewGuid().ToString(\"N\");\n                Page.ViewStateUserKey = _antiXsrfTokenValue;\n\n                var responseCookie = new HttpCookie(AntiXsrfTokenKey)\n                {\n                    HttpOnly = true,\n                    Value = _antiXsrfTokenValue\n                };\n                if (FormsAuthentication.RequireSSL && Request.IsSecureConnection)\n                {\n                    responseCookie.Secure = true;\n                }\n                Response.Cookies.Set(responseCookie);\n            }\n\n            Page.PreLoad += master_Page_PreLoad;\n        }\n\n        protected void master_Page_PreLoad(object sender, EventArgs e)\n        {\n            if (!IsPostBack)\n            {\n                // Set Anti-XSRF token\n                ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey;\n                ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty;\n            }\n            else\n            {\n                // Validate the Anti-XSRF token\n                if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue\n                    || (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty))\n                {\n                    throw new InvalidOperationException(\"Validation of Anti-XSRF token failed.\");\n                }\n            }\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void Unnamed_LoggingOut(object sender, LoginCancelEventArgs e)\n        {\n            Context.GetOwinContext().Authentication.SignOut();\n        }\n    }\n\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Site.Master.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms {\n    \n    \n    public partial class SiteMaster {\n        \n        /// <summary>\n        /// MainContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Site.Mobile.Master",
    "content": "<%@ Master Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"Site.Mobile.master.cs\" Inherits=\"Linq2TwitterDemos_WebForms.Site_Mobile\" %>\n<%@ Register Src=\"~/ViewSwitcher.ascx\" TagPrefix=\"friendlyUrls\" TagName=\"ViewSwitcher\" %>\n\n<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title></title>\n    <asp:ContentPlaceHolder runat=\"server\" ID=\"HeadContent\" />\n</head>\n<body>\n    <form id=\"form1\" runat=\"server\">\n    <div>\n        <h1>Mobile Master Page</h1>\n        <asp:ContentPlaceHolder runat=\"server\" ID=\"FeaturedContent\" />\n        <section class=\"content-wrapper main-content clear-fix\">\n            <asp:ContentPlaceHolder runat=\"server\" ID=\"MainContent\" />\n        </section>\n        <friendlyUrls:ViewSwitcher runat=\"server\" />\n    </div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Site.Mobile.Master.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class Site_Mobile : System.Web.UI.MasterPage\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Site.Mobile.Master.designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms {\n    \n    \n    public partial class Site_Mobile {\n        \n        /// <summary>\n        /// HeadContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder HeadContent;\n        \n        /// <summary>\n        /// form1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm form1;\n        \n        /// <summary>\n        /// FeaturedContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder FeaturedContent;\n        \n        /// <summary>\n        /// MainContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Startup.cs",
    "content": "﻿using Microsoft.Owin;\nusing Owin;\n\n[assembly: OwinStartupAttribute(typeof(Linq2TwitterDemos_WebForms.Startup))]\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class Startup {\n        public void Configuration(IAppBuilder app) {\n            ConfigureAuth(app);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/HomeTimelineDemo.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"HomeTimelineDemo.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.StatusDemos.HomeTimelineDemo\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Home Timeline Demo</h1>\n    <p>\n        <asp:Button ID=\"RefreshButton\" runat=\"server\" Text=\"Refresh\" OnClick=\"RefreshButton_Click\" />\n    </p>\n    <asp:ListView ID=\"TwitterListView\" runat=\"server\">\n        <LayoutTemplate>\n            <table id=\"Table1\" runat=\"server\">\n                <tr id=\"Tr1\" runat=\"server\">\n                    <th>Picture </th>\n                    <th>Name </th>\n                    <th>Last Tweet </th>\n                    <th>Mentions </th>\n                </tr>\n                <tr id=\"itemPlaceholder\">\n                </tr>\n            </table>\n        </LayoutTemplate>\n        <ItemTemplate>\n            <tr id=\"Tr2\" runat=\"server\">\n                <td>\n                    <asp:Image ID=\"UserImage\" runat=\"server\" ImageUrl='<%#Eval(\"User.ProfileImageUrl\") %>' />\n                </td>\n                <td>\n                    <asp:Label ID=\"NameLabel\" runat=\"server\" Text='<%#Eval(\"User.ScreenNameResponse\") %>' />\n                </td>\n                <td>\n                    <asp:Label ID=\"TweetLabel\" runat=\"server\" Text='<%#Eval(\"Text\") %>' />\n                </td>\n                <td>\n                    <asp:Repeater runat=\"server\" DataSource='<%#Eval(\"Entities.UserMentionEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"ScreenName\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                    <asp:Repeater ID=\"Repeater1\" runat=\"server\" DataSource='<%#Eval(\"Entities.UrlEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Url\")%>,</ItemTemplate>\n                    </asp:Repeater>\n\n                    <asp:Repeater ID=\"Repeater2\" runat=\"server\" DataSource='<%#Eval(\"Entities.HashTagEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Tag\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                </td>\n            </tr>\n        </ItemTemplate>\n    </asp:ListView>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/HomeTimelineDemo.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WebForms.StatusDemos\n{\n    public partial class HomeTimelineDemo : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected async void RefreshButton_Click(object sender, EventArgs e)\n        {\n            var auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(),\n                GoToTwitterAuthorization = twitterUrl => { }\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            var tweets =\n                await\n                (from tweet in ctx.Status\n                 where tweet.Type == StatusType.Home\n                 select tweet)\n                .ToListAsync();\n\n            TwitterListView.DataSource = tweets;\n            TwitterListView.DataBind();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/HomeTimelineDemo.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.StatusDemos {\n    \n    \n    public partial class HomeTimelineDemo {\n        \n        /// <summary>\n        /// RefreshButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button RefreshButton;\n        \n        /// <summary>\n        /// TwitterListView control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ListView TwitterListView;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/StatusDemos.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"StatusDemos.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.StatusDemos.StatusDemos\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Status Demos</h1>\n    <p></p>\n    <p>\n        <asp:HyperLink ID=\"TweetDemoHyperLink\" runat=\"server\" NavigateUrl=\"~/StatusDemos/TweetDemo.aspx\">Tweet Demo</asp:HyperLink>\n    </p>\n    <p>\n        <asp:HyperLink ID=\"HomeTimelineDemoHyperLink\" runat=\"server\" NavigateUrl=\"~/StatusDemos/HomeTimelineDemo.aspx\">Home Timeline Demo</asp:HyperLink>\n    </p>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/StatusDemos.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WebForms.StatusDemos\n{\n    public partial class StatusDemos : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/StatusDemos.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.StatusDemos {\n    \n    \n    public partial class StatusDemos {\n        \n        /// <summary>\n        /// TweetDemoHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink TweetDemoHyperLink;\n        \n        /// <summary>\n        /// HomeTimelineDemoHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink HomeTimelineDemoHyperLink;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/TweetDemo.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"TweetDemo.aspx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.StatusDemos.TweetDemo\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Tweet Demo</h1>\n    <p></p>\n\t<p>Post an update:</p> \n    <p>\n        <asp:TextBox ID=\"UpdateTextBox\" runat=\"server\" Columns=\"70\" Rows=\"2\" />\n        <asp:RequiredFieldValidator ID=\"RequiredFieldValidator1\" runat=\"server\" ControlToValidate=\"UpdateTextBox\"\n            ErrorMessage=\"type in some message first\" />\n    </p>\n    <p>\n        <asp:Button ID=\"PostUpdateButton\" runat=\"server\" Text=\"Post update\" OnClick=\"PostUpdateButton_Click\" />\n    </p>\n    <p>\n        <asp:Label runat=\"server\" EnableViewState=\"false\" Text=\"Update posted.\" Visible=\"false\" ID=\"SuccessLabel\" />\n    </p>\n\t\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/TweetDemo.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WebForms.StatusDemos\n{\n    public partial class TweetDemo : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            UpdateTextBox.Text = \"Testing LINQ to Twitter WebForms Demo - \" + DateTime.Now;\n        }\n\n        protected async void PostUpdateButton_Click(object sender, EventArgs e)\n        {\n            var auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(),\n                GoToTwitterAuthorization = twitterUrl => { }\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            await ctx.TweetAsync(UpdateTextBox.Text);\n\n            SuccessLabel.Visible = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/StatusDemos/TweetDemo.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms.StatusDemos {\n    \n    \n    public partial class TweetDemo {\n        \n        /// <summary>\n        /// UpdateTextBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox UpdateTextBox;\n        \n        /// <summary>\n        /// RequiredFieldValidator1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;\n        \n        /// <summary>\n        /// PostUpdateButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button PostUpdateButton;\n        \n        /// <summary>\n        /// SuccessLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label SuccessLabel;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/ViewSwitcher.ascx",
    "content": "<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"ViewSwitcher.ascx.cs\" Inherits=\"Linq2TwitterDemos_WebForms.ViewSwitcher\" %>\n<div id=\"viewSwitcher\">\n    <%: CurrentView %> view | <a href=\"<%: SwitchUrl %>\" data-ajax=\"false\">Switch to <%: AlternateView %></a>\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/ViewSwitcher.ascx.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Routing;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.FriendlyUrls.Resolvers;\n\nnamespace Linq2TwitterDemos_WebForms\n{\n    public partial class ViewSwitcher : System.Web.UI.UserControl\n    {\n        protected string CurrentView { get; private set; }\n\n        protected string AlternateView { get; private set; }\n\n        protected string SwitchUrl { get; private set; }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            // Determine current view\n            var isMobile = WebFormsFriendlyUrlResolver.IsMobileView(new HttpContextWrapper(Context));\n            CurrentView = isMobile ? \"Mobile\" : \"Desktop\";\n\n            // Determine alternate view\n            AlternateView = isMobile ? \"Desktop\" : \"Mobile\";\n\n            // Create switch URL from the route, e.g. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page\n            var switchViewRouteName = \"AspNet.FriendlyUrls.SwitchView\";\n            var switchViewRoute = RouteTable.Routes[switchViewRouteName];\n            if (switchViewRoute == null)\n            {\n                // Friendly URLs is not enabled or the name of the switch view route is out of sync\n                this.Visible = false;\n                return;\n            }\n            var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView, __FriendlyUrls_SwitchViews = true });\n            url += \"?ReturnUrl=\" + HttpUtility.UrlEncode(Request.RawUrl);\n            SwitchUrl = url;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/ViewSwitcher.ascx.designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WebForms {\n    \n    \n    public partial class ViewSwitcher {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n<configuration>\n  <configSections>\n    \n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n  </appSettings>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=(LocalDb)\\v11.0;AttachDbFilename=|DataDirectory|\\aspnet-Linq2TwitterDemos_WebForms-20141128083655.mdf;Initial Catalog=aspnet-Linq2TwitterDemos_WebForms-20141128083655;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <system.web>\n    <authentication mode=\"None\" />\n    <compilation debug=\"true\" targetFramework=\"4.5\" />\n    <httpRuntime targetFramework=\"4.5\" />\n    <pages>\n      <namespaces>\n        <add namespace=\"System.Web.Optimization\" />\n        <add namespace=\"Microsoft.AspNet.Identity\" />\n      </namespaces>\n      <controls>\n        <add assembly=\"Microsoft.AspNet.Web.Optimization.WebForms\" namespace=\"Microsoft.AspNet.Web.Optimization.WebForms\" tagPrefix=\"webopt\" />\n      </controls>\n    </pages>\n    <membership>\n      <providers>\n        <!--\n\t      ASP.NET Membership is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template\n        -->\n        <clear />\n      </providers>\n    </membership>\n    <profile>\n      <providers>\n        <!--\n\t      ASP.NET Membership Profile is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template\n        -->\n        <clear />\n      </providers>\n    </profile>\n    <roleManager>\n      <!--\n\t        ASP.NET Membership Role is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template\n        -->\n      <providers>\n        <clear />\n      </providers>\n    </roleManager>\n    <!--\n            If you are deploying to a cloud environment that has multiple web server instances,\n            you should change session state mode from \"InProc\" to \"Custom\". In addition,\n            change the connection string named \"DefaultConnection\" to connect to an instance\n            of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.\n      -->\n    <sessionState mode=\"InProc\" customProvider=\"DefaultSessionProvider\">\n      <providers>\n        <add name=\"DefaultSessionProvider\" type=\"System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" connectionStringName=\"DefaultConnection\" />\n      </providers>\n    </sessionState>\n  </system.web>\n  <system.webServer>\n    <modules>\n      <remove name=\"FormsAuthentication\" />\n    </modules>\n  </system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" culture=\"neutral\" publicKeyToken=\"30ad4fe6b2a6aeed\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework\" publicKeyToken=\"b77a5c561934e089\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WebForms/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net45\" />\n  <package id=\"AspNet.ScriptManager.bootstrap\" version=\"3.3.1\" targetFramework=\"net45\" />\n  <package id=\"AspNet.ScriptManager.jQuery\" version=\"2.1.1\" targetFramework=\"net45\" />\n  <package id=\"bootstrap\" version=\"3.4.1\" targetFramework=\"net45\" />\n  <package id=\"EntityFramework\" version=\"6.1.2\" targetFramework=\"net45\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net45\" />\n  <package id=\"LinqToTwitter\" version=\"3.1.1\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.FriendlyUrls\" version=\"1.0.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.FriendlyUrls.Core\" version=\"1.0.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.2.4\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Providers.Core\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.ScriptManager.MSAjax\" version=\"5.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.ScriptManager.WebForms\" version=\"5.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization.WebForms\" version=\"1.1.3\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Host.SystemWeb\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"4.2.2\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Facebook\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Google\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.MicrosoftAccount\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"3.0.0\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net45\" />\n  <package id=\"Modernizr\" version=\"2.8.3\" targetFramework=\"net45\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" />\n  <package id=\"Respond\" version=\"1.4.2\" targetFramework=\"net45\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"net45\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n  </appSettings>\n  <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Linq2TwitterDemos_WindowsForms.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_WindowsForms</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_WindowsForms</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>1561785d</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"OAuthForm.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"OAuthForm.Designer.cs\">\n      <DependentUpon>OAuthForm.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"SharedState.cs\" />\n    <Compile Include=\"StatusDemos\\HomeTimelineForm.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\HomeTimelineForm.Designer.cs\">\n      <DependentUpon>HomeTimelineForm.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Tweet.cs\" />\n    <Compile Include=\"TwitterForm.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"TwitterForm.Designer.cs\">\n      <DependentUpon>TwitterForm.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <EmbeddedResource Include=\"OAuthForm.resx\">\n      <DependentUpon>OAuthForm.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"StatusDemos\\HomeTimelineForm.resx\">\n      <DependentUpon>HomeTimelineForm.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"TwitterForm.resx\">\n      <DependentUpon>TwitterForm.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{CAAFF164-A681-4183-BB83-A07B668F7FFC}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/OAuthForm.Designer.cs",
    "content": "﻿namespace Linq2TwitterDemos_WindowsForms\n{\n    partial class OAuthForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.SubmitPinButton = new System.Windows.Forms.Button();\n            this.PinTextBox = new System.Windows.Forms.TextBox();\n            this.PinLabel = new System.Windows.Forms.Label();\n            this.OAuthWebBrowser = new System.Windows.Forms.WebBrowser();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // panel1\n            // \n            this.panel1.Controls.Add(this.SubmitPinButton);\n            this.panel1.Controls.Add(this.PinTextBox);\n            this.panel1.Controls.Add(this.PinLabel);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;\n            this.panel1.Location = new System.Drawing.Point(0, 319);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(584, 42);\n            this.panel1.TabIndex = 1;\n            // \n            // SubmitPinButton\n            // \n            this.SubmitPinButton.Location = new System.Drawing.Point(497, 11);\n            this.SubmitPinButton.Name = \"SubmitPinButton\";\n            this.SubmitPinButton.Size = new System.Drawing.Size(75, 23);\n            this.SubmitPinButton.TabIndex = 2;\n            this.SubmitPinButton.Text = \"Submit Pin\";\n            this.SubmitPinButton.UseVisualStyleBackColor = true;\n            this.SubmitPinButton.Click += new System.EventHandler(this.SubmitPinButton_Click);\n            // \n            // PinTextBox\n            // \n            this.PinTextBox.Location = new System.Drawing.Point(38, 13);\n            this.PinTextBox.Name = \"PinTextBox\";\n            this.PinTextBox.Size = new System.Drawing.Size(453, 20);\n            this.PinTextBox.TabIndex = 1;\n            // \n            // PinLabel\n            // \n            this.PinLabel.AutoSize = true;\n            this.PinLabel.Location = new System.Drawing.Point(4, 16);\n            this.PinLabel.Name = \"PinLabel\";\n            this.PinLabel.Size = new System.Drawing.Size(28, 13);\n            this.PinLabel.TabIndex = 0;\n            this.PinLabel.Text = \"PIN:\";\n            // \n            // OAuthWebBrowser\n            // \n            this.OAuthWebBrowser.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.OAuthWebBrowser.Location = new System.Drawing.Point(0, 0);\n            this.OAuthWebBrowser.MinimumSize = new System.Drawing.Size(20, 20);\n            this.OAuthWebBrowser.Name = \"OAuthWebBrowser\";\n            this.OAuthWebBrowser.Size = new System.Drawing.Size(584, 319);\n            this.OAuthWebBrowser.TabIndex = 2;\n            // \n            // OAuthForm\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(584, 361);\n            this.Controls.Add(this.OAuthWebBrowser);\n            this.Controls.Add(this.panel1);\n            this.Name = \"OAuthForm\";\n            this.Text = \"Authorize this Application\";\n            this.Load += new System.EventHandler(this.OAuthForm_Load);\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Panel panel1;\n        private System.Windows.Forms.Button SubmitPinButton;\n        private System.Windows.Forms.TextBox PinTextBox;\n        private System.Windows.Forms.Label PinLabel;\n        private System.Windows.Forms.WebBrowser OAuthWebBrowser;\n\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/OAuthForm.cs",
    "content": "﻿using System;\nusing System.Configuration;\nusing System.Linq;\nusing System.Windows.Forms;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsForms\n{\n    public partial class OAuthForm : Form\n    {\n        PinAuthorizer pinAuth = new PinAuthorizer();\n\n        public OAuthForm()\n        {\n            InitializeComponent();\n        }\n\n        async void OAuthForm_Load(object sender, EventArgs e)\n        {\n            pinAuth = new PinAuthorizer\n            {\n                // Get the ConsumerKey and ConsumerSecret for your app and load them here.\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                },\n                // Note: GetPin isn't used here because we've broken the authorization\n                // process into two parts: begin and complete\n                GoToTwitterAuthorization = pageLink => \n                    OAuthWebBrowser.Navigate(new Uri(pageLink, UriKind.Absolute))\n            };\n\n            await pinAuth.BeginAuthorizeAsync();\n        }\n\n        async void SubmitPinButton_Click(object sender, EventArgs e)\n        {\n            await pinAuth.CompleteAuthorizeAsync(PinTextBox.Text);\n            SharedState.Authorizer = pinAuth;\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n            //\n            //var credentials = pinAuth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            Close();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/OAuthForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Program.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows.Forms;\n\nnamespace Linq2TwitterDemos_WindowsForms\n{\n    static class Program\n    {\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new TwitterForm());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_WindowsForms\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_WindowsForms\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"daa6cf23-20f8-499c-bd15-4c7758d76236\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34003\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WindowsForms.Properties\n{\n\n\n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources\n    {\n\n        private static global::System.Resources.ResourceManager resourceMan;\n\n        private static global::System.Globalization.CultureInfo resourceCulture;\n\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources()\n        {\n        }\n\n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager\n        {\n            get\n            {\n                if ((resourceMan == null))\n                {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Linq2TwitterDemos_WindowsForms.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n\n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture\n        {\n            get\n            {\n                return resourceCulture;\n            }\n            set\n            {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.34003\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WindowsForms.Properties\n{\n\n\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"11.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase\n    {\n\n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n\n        public static Settings Default\n        {\n            get\n            {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/SharedState.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsForms\n{\n    class SharedState\n    {\n        public static IAuthorizer Authorizer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/StatusDemos/HomeTimelineForm.Designer.cs",
    "content": "﻿namespace Linq2TwitterDemos_WindowsForms.StatusDemos\n{\n    partial class HomeTimelineForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.TweetDataGridView = new System.Windows.Forms.DataGridView();\n            this.UserImage = new System.Windows.Forms.DataGridViewImageColumn();\n            this.ScreenName = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.TweetText = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            ((System.ComponentModel.ISupportInitialize)(this.TweetDataGridView)).BeginInit();\n            this.SuspendLayout();\n            // \n            // TweetDataGridView\n            // \n            this.TweetDataGridView.AllowUserToAddRows = false;\n            this.TweetDataGridView.AllowUserToDeleteRows = false;\n            this.TweetDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\n            this.TweetDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.UserImage,\n            this.ScreenName,\n            this.TweetText});\n            this.TweetDataGridView.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.TweetDataGridView.Location = new System.Drawing.Point(0, 0);\n            this.TweetDataGridView.Name = \"TweetDataGridView\";\n            this.TweetDataGridView.ReadOnly = true;\n            this.TweetDataGridView.Size = new System.Drawing.Size(584, 361);\n            this.TweetDataGridView.TabIndex = 0;\n            // \n            // UserImage\n            // \n            this.UserImage.HeaderText = \"Image\";\n            this.UserImage.Name = \"UserImage\";\n            this.UserImage.ReadOnly = true;\n            // \n            // ScreenName\n            // \n            this.ScreenName.HeaderText = \"Screen Name\";\n            this.ScreenName.Name = \"ScreenName\";\n            this.ScreenName.ReadOnly = true;\n            // \n            // TweetText\n            // \n            this.TweetText.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;\n            this.TweetText.HeaderText = \"Tweet\";\n            this.TweetText.Name = \"TweetText\";\n            this.TweetText.ReadOnly = true;\n            // \n            // HomeTimelineForm\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(584, 361);\n            this.Controls.Add(this.TweetDataGridView);\n            this.Name = \"HomeTimelineForm\";\n            this.Text = \"Home Timeline\";\n            this.Load += new System.EventHandler(this.HomeTimelineForm_Load);\n            ((System.ComponentModel.ISupportInitialize)(this.TweetDataGridView)).EndInit();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.DataGridView TweetDataGridView;\n        private System.Windows.Forms.DataGridViewImageColumn UserImage;\n        private System.Windows.Forms.DataGridViewTextBoxColumn ScreenName;\n        private System.Windows.Forms.DataGridViewTextBoxColumn TweetText;\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/StatusDemos/HomeTimelineForm.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows.Forms;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsForms.StatusDemos\n{\n    public partial class HomeTimelineForm : Form\n    {\n        public HomeTimelineForm()\n        {\n            InitializeComponent();\n        }\n\n        async void HomeTimelineForm_Load(object sender, EventArgs e)\n        {\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home\n                 select new Tweet\n                 {\n                     ImageUrl = tweet.User.ProfileImageUrl,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     TweetText = tweet.Text\n                 })\n                .ToListAsync();\n\n            TweetDataGridView.Rows.Clear();\n\n            tweets.ForEach(async tweet =>\n                {\n                    await tweet.LoadImage();\n                    TweetDataGridView.Rows.Add(tweet.ToArray());\n                });\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/StatusDemos/HomeTimelineForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"UserImage.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"ScreenName.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"TweetText.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/Tweet.cs",
    "content": "﻿using System;\nusing System.Drawing;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace Linq2TwitterDemos_WindowsForms\n{\n    public class Tweet\n    {\n        public string ImageUrl { get; set; }\n\n        public Bitmap UserImage { get; set; }\n\n        public string ScreenName { get; set; }\n\n        public string TweetText { get; set; }\n\n        public async Task LoadImage()\n        {\n            HttpResponseMessage response = await new HttpClient().GetAsync(ImageUrl);\n            Stream responseStream = await response.Content.ReadAsStreamAsync();\n            UserImage = new Bitmap(responseStream);\n        }\n\n        public object[] ToArray()\n        {\n            return new object[] { UserImage, ScreenName, TweetText };\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/TwitterForm.Designer.cs",
    "content": "﻿namespace Linq2TwitterDemos_WindowsForms\n{\n    partial class TwitterForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TwitterForm));\n            this.menuStrip1 = new System.Windows.Forms.MenuStrip();\n            this.StatusMenu = new System.Windows.Forms.ToolStripMenuItem();\n            this.StatusHomeTimelineMenu = new System.Windows.Forms.ToolStripMenuItem();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.menuStrip1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // menuStrip1\n            // \n            this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.StatusMenu});\n            this.menuStrip1.Location = new System.Drawing.Point(0, 0);\n            this.menuStrip1.Name = \"menuStrip1\";\n            this.menuStrip1.Size = new System.Drawing.Size(284, 24);\n            this.menuStrip1.TabIndex = 0;\n            this.menuStrip1.Text = \"menuStrip1\";\n            // \n            // StatusMenu\n            // \n            this.StatusMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.StatusHomeTimelineMenu});\n            this.StatusMenu.Name = \"StatusMenu\";\n            this.StatusMenu.Size = new System.Drawing.Size(51, 20);\n            this.StatusMenu.Text = \"Status\";\n            // \n            // StatusHomeTimelineMenu\n            // \n            this.StatusHomeTimelineMenu.Name = \"StatusHomeTimelineMenu\";\n            this.StatusHomeTimelineMenu.Size = new System.Drawing.Size(156, 22);\n            this.StatusHomeTimelineMenu.Tag = \"Linq2TwitterDemos_WindowsForms.StatusDemos.HomeTimelineForm\";\n            this.StatusHomeTimelineMenu.Text = \"Home Timeline\";\n            this.StatusHomeTimelineMenu.Click += new System.EventHandler(this.MenuItem_Click);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox1.Image\")));\n            this.pictureBox1.Location = new System.Drawing.Point(0, 24);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(284, 237);\n            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            // \n            // TwitterForm\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(284, 261);\n            this.Controls.Add(this.pictureBox1);\n            this.Controls.Add(this.menuStrip1);\n            this.MainMenuStrip = this.menuStrip1;\n            this.Name = \"TwitterForm\";\n            this.Text = \"LINQ to Twitter Demos\";\n            this.Load += new System.EventHandler(this.TwitterForm_Load);\n            this.menuStrip1.ResumeLayout(false);\n            this.menuStrip1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.MenuStrip menuStrip1;\n        private System.Windows.Forms.ToolStripMenuItem StatusMenu;\n        private System.Windows.Forms.ToolStripMenuItem StatusHomeTimelineMenu;\n        private System.Windows.Forms.PictureBox pictureBox1;\n\n    }\n}\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/TwitterForm.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows.Forms;\n\nnamespace Linq2TwitterDemos_WindowsForms\n{\n    public partial class TwitterForm : Form\n    {\n        public TwitterForm()\n        {\n            InitializeComponent();\n        }\n\n        void MenuItem_Click(object sender, EventArgs e)\n        {\n            var type = Type.GetType((sender as ToolStripMenuItem).Tag as string);\n            Form formInst = (Form)Activator.CreateInstance(type);\n\n            formInst.Show();\n        }\n\n        private void TwitterForm_Load(object sender, EventArgs e)\n        {\n            if (SharedState.Authorizer == null)\n                new OAuthForm().ShowDialog();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/TwitterForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"menuStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6\n        JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGnRF\n        WHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAABp7SURBVHhe7VwJcFTZdWUSx3YSJ44Tp7wk\n        KcexndiOnXEcL3HGTlLeKuPYFW9ju1yumopnYNDS3VrYZsAjNqGlF+39u1sS2hfEpgUJAdqRQBJICO1L\n        a0EL0gACIQktzMDNOa+/MMMw4w0mMPxT9aul1u/+X++8e++59933VxkwYMCAAQMGDBgwYMCAAQMGDBgw\n        YMCAAQMGDBgwYMCAAQOPAAKtng+HxCRv5hEYEf+4/raB/w+Yrc6nzTbXeHBcqoQkpInF4Z4x2Zz/rP/Z\n        wJsJs02zBMV4JCg2WVxFR8RZWC4h8bvFYnc59FMMvFkIcri+iYG/aXF4pKDmpIzNLcjJgWEJATlmm7PL\n        FBf3p/qpBu431ths77XYXB1BMcmSW1kvo1evyfDMnDois/ZJoE27EeTQntBPN3A/wfiAOHEyICpJdqbt\n        Ee/0VUXE4OWrUnG2R3bgvXWJ6WKxub+rf8TA/UJgpPYFi909wTixPiFVcirq5dzsNRmYnpGMI7USaHUq\n        MhBbOgOiUj6of8zA/QBixmdJhtnhFu1guZweHscxJiOwjoa+IZDgEpPVOY24stE/Ou39+scM3Cc8Zra6\n        ytclpYun+Jh4L83IuavzMnRlFsecVLX3isnuomVU6ecbuN/AzG8OjU+VqrO9MjG/iNgxIwMgZvDyrJzo\n        H5ZgyF/ElvFQq/NT+kcM3GtQuprtzp9abFqOyapNM5Cvi0uRqo5eWMg16Qch/ZeuSN/FKxK/vxQxRBO4\n        Nm+w3fVp/SsM3CtYYrT/hFW0WlTilyLrYB0vaBmwBDcG3S3lrZ0yhPhBMvqhtNonLkh0zgExIy8xSLnH\n        sNidZgTwJeYZuzL3SuGJFmnynpO2sUlpHhqTstMd4io+IpWIHQMgoxek8JWkRBmk3FuYrVogyyHMwLMr\n        6mQAg80snPJ2GAF8eGZe/Ux3dQx5x/HeIUVGz4XLylLOGqTcOwTatcdhGXMkZG9to8rAKWtJwAhU1crh\n        ix0I6gjodT1eHIPq526Q0of328anDFJ+V4SFhf2e2a4VMV6kllbKqG4RzMBLmtrEnl8ksQUlcqj5rHRN\n        XVKxoxcEMI7kVDZI+ZkukDInnS9NSy9IOTP+kiKFlkZSLDHJn9AvZeDXAYL435rtrjkG7o6JqVvlkIwj\n        NeIflShrI+Jl9Y5YCY1LlqahUVjCFfGCsHpI3i2uTAmNTVYurB+W0jk1LT0grAUxx5Zf6Cul2F179EsZ\n        IOCOWPY4qo4Y15f0t1eZouM+EuTwbLPYXPtAiGhF5cot0TrKWzolAGQg4ZOAaEje+BTfoMMCBnUyNoNA\n        nhMQ7VRK7Cj+3jc9K+2won6QeqStB++rknx/WFjB2/XLPtoITUz5EJK2iQ3OTL3W5JoOsjq/ClfyuSC7\n        eziYAwZFFYhBLzxxWlkHM3Cub/gG20dGBVTVIC3nNWQkiX9kojpICknoR/CvRmz5hSdbQhPSBO7Qrt+O\n        AczOKK7oOQ8eluxjdQi2bkGiN2myusYZeJMOlIkDMWJNeCxiRJsig0dqWZU8tyv+DcnA90h07kGJyNqv\n        snWSsiFxt+ypawYZOSqHMVtduWFpae/Ub+fRhn904vvhcia5cNQ4MCwTc4uSUV4jJrohqxNkHJZB5hII\n        xva8QpVzkAzvFV85fSMGl693IwNE4zUJbqwXMWNGqru98mJyjqr6cgKEJsDybK6csDCDjFuAq3iG2Xbi\n        /lLIWOQQGFgeaYerxAkyWCikixq/tigH6pvFU3JM/U4V1QOSmAh6EajvRoZ/ZIKEpxdIG3KPHnzPqdFJ\n        ZPOZINs5b7FrFThnvRE37gAGJYKzlWqJ1jF8ZRa5xawMQUH5FpdmVZ5Reuos5KkbiilLOs9fUIGbOYUX\n        5/G1qrNfNiWlKTIY5P0iElQppa5vSLpI3vSMpB+tU+vrEA579csbsFgTvwj3tMFsd/5gjdv9B0HR2hOW\n        GPcCB3tfXZMigi5qiLOeP+MoOtmiZjxdDV1QblWDDMGamGcwA+/D+bnVJ9U5frAKE84LT98rtb2Diohu\n        EEZ3xYAOpXbT3+r6d/12Hm0ERLu+BDW1wBU9WoXFpmWtEnnM7NCimX1zVlciHlDSsnzOg+XztMM1Ks/g\n        zOfBnKKiHXED5zH75tFz4Yo09I9IMYL+MQT4s+cvgogrioyTg2MSlpIrIbgmhEKsfjsGzHZ3PonQCg/L\n        VgwQFRRmdQkCeAelaeL+MumevKSsgiURuizWobgEm3a4+pY7CtRzCuYcg5CvDNhdzMBxLhM/5hldFy9L\n        L34+4R2Vbal5EhQHNWXTGkOt1j/Wb+fRQ7Bd+yuL1fV9EPETs835bbNVm6Mq6p68IC3DY7IZGbTKLyBN\n        qaZWAjjjRvPgqI8QvEdCBjDIu+8ghZaSV9Mo7bCGLloJYgXJIDEskRw63aGkrcpj7K6WUGvKh/Rbe/QA\n        bf+/Zocvj+CBpO4VDnw6BnV8dgEBfEGavedU4KVlrJChAjjcDmXwntpGJXFVsRCk8EiF+rqNlJv8+UUk\n        d9VdA8jCe6XgeLNkVzZIZPZ+5aKCkWcgPpWG2JL+Rr+1Rw9B0c6vI1a8wlgRV1AiLmTUGxLT1Kw+3j0g\n        5+cXVfAew+CfOXde5RgrZJTpaooDHWhNUqQwVlDmsj7FAM6EkJIW59xkbKG6ah6ekAoqLWc64g3+hmvB\n        Kr2w0PX/ERb2Nv3WHk2wKsvZmQc1xMF/aWFJqhCEOdC7kBe0j02qGEE1dQ4xgM0IdE/FjWfUOVRTVExU\n        S/yZpLB8TpfUi3jBmJFVcVxewOCz96qqc0BJ2wF8V3bVCbhBxCabVhxic79Xv6VHF0+npb3TZE3qXY8s\n        uHN8Eq7pmoxi8JlbcPBY/mBA75h4SUlbpaRARhfiQBiyaM54krFyKFIw2/MRKxiwV1QVLeXUyHmV9HWD\n        DB71A+dkiztLd1PaD/VberTxVEHB78O/14RA1RxpaZeXFpdlamFZWkfGZSPcFgc8fu8h6ZnyqSm6LgZu\n        Ztv1SOI2I5Omu7o7KScVERx8Bm31ymAOUpvgsqim6CbNVmcu70O/JQNmm2sN60SbktJVo3NJY6ts350H\n        64j7pZpSPVOQqBjQQbz2Y3C5/NrQN6wC/d1JSUK2XSsdU9PSBwKppnjU9g6rFlEWCi0OV2uQw/UB/VYM\n        EGFh1W+DxI1BVrzMzJlBdvXO2FeRQes42HBaIjP3Seu5CaWm2Iww9AakWOya7ML5O9P3QEnVy/4Tp8Vz\n        qEI2gni1zcDh7gi2J35Uvw0Dd8Jk1Z4PsruX/CITX0XGrQy8vEae2e6QbbCeFqgtL/7GUghV1XGdFKop\n        BGj1SiLOIGZoxUdVVs/3lKy2aksQAx5zbPL79EsbuBMBUa7PISHs9YebuT3pu1sGTutRpIxM3GpGGAAp\n        db1DsjU1Vw0+k0jWo1i15WHNKxTVfWJ3J0JVfUa/rIG7gUkYXMxIMAL7Ly0DGTgs4PUycEUKgvJpkEI1\n        xVIIAzjXvY+0dSNoj9+qTdUp68lUhUK/mCSjOeFXAbP2KS6L2nIOQtLO3grgDO5vlIGvkHIKiolkrCgp\n        BnDmGSSjcWgcVkM1lYrEz+UKe9STvl8HgQ7tCcSPm8w7+i5M++QtCEg8UCbP7YpTiunuGfgvLeUkLIlu\n        iyqKLoqkNCDP2IE4otSUXTu1KcL5Hv2SBt4IYQUFb0cucoI+vhhWQTnLIM6mNUjS183A2S+VUlalksfn\n        kYVzjaO6e0Bq8LlcJIabkfRRTSGAnw2KcP6dfjkDd8IUl/qXcB9fC7F5/l5/a5XJof0IQV0pI1qBSv4w\n        2x17ilQ+YbI5QYz26gz8IpI8WAtJWQtLWsna1yOhDOL6CRRVcIx7jyku7q/1yzx4YL0m0Ob+ONshTXGe\n        N/1G2U8FadvLwcJAzyAx28f9e35O53toJcgNpLylQ1kIs/GjCNCs1Jrt2qLJmvQKdzatZOAsoXddQKzA\n        kVJWqSyJvVgmm9aN78yyxLi+r1/2wUKo1fNh3GioOVorDohK9vpFJF/1j0he8I/0TARGuxowQPY3Y5dp\n        QFTCB5EjeNcnpsuujL2yxZMjFvj3QA641dmEgT+CQb0ZlbX/1ho4GxPYsQ6XtQxSyvD36xz0PJDSe8kX\n        yFW7J8hLgEJTa+A2l59+yQcLfghiCGbbLbaUqeCYPFkXnytb01MkPDdewvNiZUe2RzZpWTDrHMxWzytB\n        Ds9BDMx92zFEN0Vpy84OStuzkKh765okPKNALdFyFRBWcxMDqlb3VO6BgS5uamNWzYSvxmxzbqJbontj\n        zKCS8pVDmIPk6U1szh/ol3xwEGrVPmmxe1o42Ju03RJb/rxk9z4lJRe/KcfmvyGV156UipkfS9G5NZLW\n        sE3CdrskODabs2sKvvpH+tfcU8BdfhyxYHaLO1tVb7lraXR2QTUfsFcq6eBhWQ95unpnjERl7/dZCOIJ\n        V/jUEq7d/TJJtdicfhQAJCUfgb66exCJYJZPTdm0nGC7/Q/1Sz4YYLC0xLgHgmNyZWdepBSMPimHFz8h\n        R1/+uFS+/BmpXH5Cqpe/Lsdf/pY03vieNF3/mdRdDhLXsRjo/nT4YPzjVudP9K+7Z2BHOmZ3IePH/vpm\n        pabomhi82X9LWdsE+ZpTWS/bd+dLVWefUlPcp8G4wXULuLXD/C6zVQsmKesQwF8AGapqa3flPnBNbE+F\n        hb0dJlsbEpsjkQe2SsnMv0jp4kfk6NKn5dCFb0l2m0XcNVsl6ehOyT61VUpHgqVp0U9OXw+Q1uWNktsY\n        Dxem/rmLv6v7CrAlYGIkWzGQVrPV/Xm+Z7Ylf8PscN9gDOnnYIMQqiq+DrMpGiSxYHgWFnSK2fZLvvWM\n        FjatuVS2/TK7UfhdINeM7x7Ee4NwzfEPZEehyZZkCsYs35Zpl+Irn5dD1z4mh+e+IBktgbIlRZNgR66K\n        GUGObLxmy/qEdIk/FCf1l7ZK29IW6bi+S1Iq3DB/tWG+8rddJ1Dd6Q73SEg8JCgDt1VjL9VuBOevsmuE\n        s7umq18pKZLBmFHcdEYRodo8QQpdFksiKmgjgKcdqVFSlu2c+mWUanxgV/oCdiX8BUzZG4pByOv/nhxa\n        +JiUz39eEo9txj+RDVnI1hbXHpPNFYDZ/zQGPDowWhsz2TJkR4ZbGi/ZpGPJKmdmNAlL5bnum6bopG/q\n        X/8aIB74YXbWWezuYj6iQn8bVpD4Zbw3sdL4nHmkVq1dW2JSGLiv4h4GmFtoRUdUxZbBu7qzX8lWdpez\n        VlWLuMA8o58VXVgS5W2D95xatAIhcxAg/6hf7sFFiM357SBHmuzaEy5l84/L4YXHJbNtrQTZ2J/qOn83\n        9cGHdeGfqzDZ0iS+0COdC0nSdz1Z9jZlYDayuVjL0k99FRBn/o3d4euTMiRUbWBxT6jtALAADPi0CQF3\n        pVDIPX18UgIrtZtwvn9Uklq72ITBbT13XlkIy+iUt2t3xasNNeugltiFfoAbNPFZlkO8EAGukmNK2mKy\n        bNJv5cEFfKo1yJEh6S1rQcanpfzq1+C64uB3U1/GrPqxftproKqtDvdQkCNFaoZ3S//1TGk6nw91lsbs\n        uNs/LPFd+qkreIxugz1SGeXV4ik+KiSA2wFw/iQtYzeyZ659q+aEy74HuoxgQE8NjeFv1bIhYbc8uyNG\n        BWtKW2bfe483Q/ayYUEbg2vz8jvp7lgC4ZpGWWuXKqNT2prs2vP6vTy4wMysCYlLk3zvd+XY0udk7+BP\n        JRS/wzWd+lVVTuj7MLM9RXKOZ8nAUr70zBbKrqwMtsfMYpA/qZ+mwM2UuJZqYuscn1Ld59yrwe0A3BbA\n        XipfA5uvxZOFQqools+5/MqgzS50dqZbYQXtkxdVXaoR73E1D+50TF3D7voZyCkGSfMkhkpqvTMTluvq\n        8XvQ+6ZMcWXvwAw9+7wrVQ6O/49ULn5F8jvNmG18TJ22Wz/tdWGxup+0wEJi96eLd+mAeBdKJSo3Q0zR\n        LrHoqmYFFqsWwT3f6bAONrCNYoAHMdgkhZbh2248q0jIR/LGqi0LhSyHKKkLy2EwZ/xohMxtG39JKSnm\n        HDEFJT55a9ee0S+3imUeWP92kF2LoJ7jF/kQrGk8Dcm3QkjR+I+keukbsqcr2EeI3Z2un/a6MDlc3yEh\n        CYWZMrR0SAavHQMhmbAQ7cbtAZvADM0jIYUNp+T8/JIMwyWt9E3x4HoGfy9AFs5AzaIf+6di9hSr2pRa\n        dsXfqaJUVwh+V722+L3k1FlfVm7Vjj/0DWvw61UhsWmyz/uM1C5/R4pH/IQbFBHQO36VRkdA3mW2J0tB\n        w14ZWToqvTPVsjMjSwKjnBcDHK7PUsGtbFZh/y0C+lIo3Ag7B1UTAgZ2ZUsAXRO3AKgqLQhhqYOVWi6t\n        8veIrH2qHEJXxZ2vJILStgs5x2nkG8y6YQ0LD/1Sq8nqDg+KSZeMxhelfumHUj+3WiLyOAgpNzFDN+in\n        vQZ+ETmstI6ExqXIyXOlMrpcI00jlWrL8NqIxKXV4fHe1eGx3tW74s48szMub20kJLPdVcbSBZUWe25v\n        3xLAFp2E/WVKMZGM2w9cR2/rTFILSyx9nKLSApmUt6xNeQ5VKiWFSbJTv8WHE4EOz1eQCd/ckZ2gyGhc\n        XC0l/dvwj6VgxnmotELurPME25P/HAO1ntYRuy9Hhq/VyOjSCcmpLpLndiVKJKRoCVxT6cnTUlB1QuL3\n        lQkfawSSllgMZPsnyaBl0E351r6vqvoUYwfbeiAA7k4M5C03VbJbhP1TDd4R39ZjJIk+aaud0G/z4QQH\n        m4qKmXrB2R1y+nqgtCxtlPzmOB8pSAzhOlosNmcCBsWBoyQgShvAewvQ9VLZUyZjyw3Se/mEbHH7mp2H\n        Jqbkdty4eVMGJyYlo7RCVWejcvZLO5QWAzglLetRK/UpkpLwBqTw81wJpGtj688mZ4bKMyhtmd/ACh/+\n        rWQsCgbFpMpmj0dqp7ZL2/Ut0r6MRLEHvjsnFbObGTOPNAmOS5ft6dlwTSkSnpEh3rnjIATW0HoU1pEg\n        aRgcYn5xUeYWFgVcvAqne/olCAPLQiCfV8jtxtyGTCWlVv1ACgP43UhhTEmBPGbmTeIxkSZAzGUlb5Fn\n        wMV2PxTZ+K+Bx6Dd3cGxGbIj0yP1Uw7pecUmvS/HS+d8qlQNZkpxa74UteyVmv6DUtVTgkF1S2HTIZDR\n        LMPzrRKZza3ALsksr5FU+PMdu/NkW3KOWBGMyxqa5crsnE6JSN+5MUWKakaAG2JM4fNDmGv0svQBa2GB\n        kKSotn/EDu4VZ3GRK35HznbL87AMKKt5ELbGEgO3GuNZz8Us/f95+KGenGbTjgTHZciW5BQpPpssXddS\n        ZfBGpozKHhmTQhmXMpmSKtFK8jBLUxBMT8j4Upsc76/HDHbTXcwHRCcOPrMjtgiy9cTayMQbq8Pj5Dnu\n        r0BC2NY/qFMiUnemgwkkc4c+zvxgSGI+4GWls1AVCaemJbm0UvXvcnMMO0JICJ+QQDfFNh1Yjln/F956\n        WBPpfjctxeJIlRAQE5UHOdyUK7WDBdIyVSztF8rlWOchDrxkHD2oyBhd6BStiE+84VZg15Y1YWF/pLaW\n        qVKGhgBeK03eftmRnqeCcs/wqCKEcSU2v4hxoD6IGzIRkGkplLbey3PKQlSnCIjhRpn2yUu+rcf4vaKj\n        H9k5cyUGeveX9dt/68LscPHh8i2BVshIuLF1iRnyYkq2hOHgTA6M1uT4QK2cX+6SM2MtsiGRO0+1qY1u\n        97tN0Yn/BTJm+OiKvKoaGZublgvLc9IxMSYhsR7ZCdm6sLSsSGnq6mXRcNEc6/wUrreNS7UrpAzAUmgN\n        nVzbABHcErDShc41Di7fmq2afVVY2O/pt/3WBouDlhj3kyYoK1O0sxbZdzcGbxAqZ/EFV5p0TJ2WiaVe\n        KT1dC4th/6uWHOhw/TesZ/Z2MsbmL8vQlYviLipXm1zoplp7BxQhFy7PQJlli3904nO8ZpBNi/SRkiz7\n        G06rzhC1wRLyuAdkHGvvky0eTAqSYdfyH+mOwvVRKX9ijk76J6ibie1p2RiodplY9EpezVEuJLHkvg8Z\n        9SWSkf8qMi6J82CpquzCZZ2Hi5oqqKhThCwtX5fo7AOCWOPWL6NIURspQYw1t1B1iuwDOUkHy2U9lJRO\n        RtGayMh36x95dMGHuGDQJ7alZkMNdcn5xWHZW1el1iqglm6Y2P90FzJYWkeCOW6xur4I1XQ8HYGauHHj\n        hsT44kiBfgkFLoaZbM5hluopaVcOZPkziBsRECDv0E99tMEkEgPfwYDaOtouk4vjUtvdomQpXVF+de0d\n        ZJT5yHC41EIUvwPqq3tPZb0iZPn6ddUsHRCZkKoucBvMsbHvg3J7ClYVg1iRGhzr9mcHiv5nAyvA7M3j\n        GvWR1pMg5Lz0XxyWrQj2uZV3WsYvyeBaOT/Lp7j5RzuXm7v6FSGXZmbVo4wCohNC1Jcb+M2BoP0zltEd\n        +ftBwISMzU7KmVGvjFy9eAcZbiZu4yudI/6Jie+iu+I+vfmFBUVIC4J7gNV5w2R3/qv6cgO/OditQf8e\n        jLyhqv2MTC5ceo1lqITP4e62xDj/gZ+Bu/qAf3SSetpna69XkUFoBw4zfrRxm7P6cgO/HRh0KWFf9GRJ\n        x/g5uC5ulrkoSQdK5dmdsVRNr6yNTEhbvTPu58+GxyU8uzNueKMzU463depUwDp6BtRjKQKsSWv1rzXw\n        2yJM1PNtD1KChqfnS6N3QKmpn293yI7UXInO3KvK479IzpVIyNq8iuNybvKCToXI6NQF2Zqaz1J6wwPX\n        wvmwgk/hCbK7zrCJgFvIuE6RXHgY8WFRXoGcvXhlRiV+1xaXdBp86B0Zk50Ze5EMJvUFOVKNDTH3Es/x\n        0UgOTx7dFzdInh0Y0of9tZiaviLF9c2yyZUtftFJLcgxjI2U9wumaG0zFdWGxHRJ3H8YA39K6s50SS2O\n        0pMtklxSAXmbJ89FJFyBqvI8sG2cbyWwcQ4J3tOrw2ML10TE963ZFTe9JiLu0prw+MFnd8RU+EVrGyxR\n        PtVl4E2GJSbmz/x3JX7UFO36yBrDGgwYMGDAgIF7jFWr/g8w/4GU/vpm8wAAAABJRU5ErkJggg==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsForms/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/App.xaml",
    "content": "﻿<Application \n    x:Class=\"Linq2TwitterDemos_WindowsPhone.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:sys=\"clr-namespace:System;assembly=mscorlib\">\n\n    <!--Application Resources-->\n    <Application.Resources>\n        <sys:Double x:Key=\"PanoramaItemHeaderFontSize\">66</sys:Double>\n\n        <Style x:Key=\"PanoramaItemHeaderTextStyle\" TargetType=\"TextBlock\">\n            <Setter Property=\"FontFamily\" Value=\"{StaticResource PhoneFontFamilySemiLight}\"/>\n            <Setter Property=\"FontSize\" Value=\"{StaticResource PanoramaItemHeaderFontSize}\"/>\n            <Setter Property=\"CharacterSpacing\" Value=\"-35\"/>\n        </Style>\n        \n        <local:LocalizedStrings xmlns:local=\"clr-namespace:Linq2TwitterDemos_WindowsPhone\" x:Key=\"LocalizedStrings\"/>\n    </Application.Resources>\n\n    <Application.ApplicationLifetimeObjects>\n        <!--Required object that handles lifetime events for the application-->\n        <shell:PhoneApplicationService \n            Launching=\"Application_Launching\" Closing=\"Application_Closing\" \n            Activated=\"Application_Activated\" Deactivated=\"Application_Deactivated\"/>\n    </Application.ApplicationLifetimeObjects>\n\n</Application>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/App.xaml.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Windows.Navigation;\nusing Linq2TwitterDemos_WindowsPhone.Resources;\nusing Linq2TwitterDemos_WindowsPhone.ViewModels;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\n\nnamespace Linq2TwitterDemos_WindowsPhone\n{\n    public partial class App : Application\n    {\n        private static MainViewModel viewModel = null;\n\n        /// <summary>\n        /// A static ViewModel used by the views to bind against.\n        /// </summary>\n        /// <returns>The MainViewModel object.</returns>\n        public static MainViewModel ViewModel\n        {\n            get\n            {\n                // Delay creation of the view model until necessary\n                if (viewModel == null)\n                    viewModel = new MainViewModel();\n\n                return viewModel;\n            }\n        }\n\n        /// <summary>\n        /// Provides easy access to the root frame of the Phone Application.\n        /// </summary>\n        /// <returns>The root frame of the Phone Application.</returns>\n        public static PhoneApplicationFrame RootFrame { get; private set; }\n\n        /// <summary>\n        /// Constructor for the Application object.\n        /// </summary>\n        public App()\n        {\n            // Global handler for uncaught exceptions.\n            UnhandledException += Application_UnhandledException;\n\n            // Standard XAML initialization\n            InitializeComponent();\n\n            // Phone-specific initialization\n            InitializePhoneApplication();\n\n            // Language display initialization\n            InitializeLanguage();\n\n            // Show graphics profiling information while debugging.\n            if (Debugger.IsAttached)\n            {\n                // Display the current frame rate counters.\n                Application.Current.Host.Settings.EnableFrameRateCounter = true;\n\n                // Show the areas of the app that are being redrawn in each frame.\n                //Application.Current.Host.Settings.EnableRedrawRegions = true;\n\n                // Enable non-production analysis visualization mode,\n                // which shows areas of a page that are handed off to GPU with a colored overlay.\n                //Application.Current.Host.Settings.EnableCacheVisualization = true;\n\n                // Prevent the screen from turning off while under the debugger by disabling\n                // the application's idle detection.\n                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run\n                // and consume battery power when the user is not using the phone.\n                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;\n            }\n\n        }\n\n        // Code to execute when the application is launching (eg, from Start)\n        // This code will not execute when the application is reactivated\n        private void Application_Launching(object sender, LaunchingEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is activated (brought to foreground)\n        // This code will not execute when the application is first launched\n        private void Application_Activated(object sender, ActivatedEventArgs e)\n        {\n            // Ensure that application state is restored appropriately\n            if (!App.ViewModel.IsDataLoaded)\n            {\n                App.ViewModel.LoadData();\n            }\n        }\n\n        // Code to execute when the application is deactivated (sent to background)\n        // This code will not execute when the application is closing\n        private void Application_Deactivated(object sender, DeactivatedEventArgs e)\n        {\n            // Ensure that required application state is persisted here.\n        }\n\n        // Code to execute when the application is closing (eg, user hit Back)\n        // This code will not execute when the application is deactivated\n        private void Application_Closing(object sender, ClosingEventArgs e)\n        {\n        }\n\n        // Code to execute if a navigation fails\n        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // A navigation has failed; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        // Code to execute on Unhandled Exceptions\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // An unhandled exception has occurred; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        #region Phone application initialization\n\n        // Avoid double-initialization\n        private bool phoneApplicationInitialized = false;\n\n        // Do not add any additional code to this method\n        private void InitializePhoneApplication()\n        {\n            if (phoneApplicationInitialized)\n                return;\n\n            // Create the frame but don't set it as RootVisual yet; this allows the splash\n            // screen to remain active until the application is ready to render.\n            RootFrame = new PhoneApplicationFrame();\n            RootFrame.Navigated += CompleteInitializePhoneApplication;\n\n            // Handle navigation failures\n            RootFrame.NavigationFailed += RootFrame_NavigationFailed;\n\n            // Handle reset requests for clearing the backstack\n            RootFrame.Navigated += CheckForResetNavigation;\n\n            // Ensure we don't initialize again\n            phoneApplicationInitialized = true;\n        }\n\n        // Do not add any additional code to this method\n        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)\n        {\n            // Set the root visual to allow the application to render\n            if (RootVisual != RootFrame)\n                RootVisual = RootFrame;\n\n            // Remove this handler since it is no longer needed\n            RootFrame.Navigated -= CompleteInitializePhoneApplication;\n        }\n\n        private void CheckForResetNavigation(object sender, NavigationEventArgs e)\n        {\n            // If the app has received a 'reset' navigation, then we need to check\n            // on the next navigation to see if the page stack should be reset\n            if (e.NavigationMode == NavigationMode.Reset)\n                RootFrame.Navigated += ClearBackStackAfterReset;\n        }\n\n        private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)\n        {\n            // Unregister the event so it doesn't get called again\n            RootFrame.Navigated -= ClearBackStackAfterReset;\n\n            // Only clear the stack for 'new' (forward) and 'refresh' navigations\n            if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)\n                return;\n\n            // For UI consistency, clear the entire page stack\n            while (RootFrame.RemoveBackEntry() != null)\n            {\n                ; // do nothing\n            }\n        }\n\n        #endregion\n\n        // Initialize the app's font and flow direction as defined in its localized resource strings.\n        //\n        // To ensure that the font of your application is aligned with its supported languages and that the\n        // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage\n        // and ResourceFlowDirection should be initialized in each resx file to match these values with that\n        // file's culture. For example:\n        //\n        // AppResources.es-ES.resx\n        //    ResourceLanguage's value should be \"es-ES\"\n        //    ResourceFlowDirection's value should be \"LeftToRight\"\n        //\n        // AppResources.ar-SA.resx\n        //     ResourceLanguage's value should be \"ar-SA\"\n        //     ResourceFlowDirection's value should be \"RightToLeft\"\n        //\n        // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.\n        //\n        private void InitializeLanguage()\n        {\n            try\n            {\n                // Set the font to match the display language defined by the\n                // ResourceLanguage resource string for each supported language.\n                //\n                // Fall back to the font of the neutral language if the Display\n                // language of the phone is not supported.\n                //\n                // If a compiler error is hit then ResourceLanguage is missing from\n                // the resource file.\n                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);\n\n                // Set the FlowDirection of all elements under the root frame based\n                // on the ResourceFlowDirection resource string for each\n                // supported language.\n                //\n                // If a compiler error is hit then ResourceFlowDirection is missing from\n                // the resource file.\n                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);\n                RootFrame.FlowDirection = flow;\n            }\n            catch\n            {\n                // If an exception is caught here it is most likely due to either\n                // ResourceLangauge not being correctly set to a supported language\n                // code or ResourceFlowDirection is set to a value other than LeftToRight\n                // or RightToLeft.\n\n                if (Debugger.IsAttached)\n                {\n                    Debugger.Break();\n                }\n\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/Linq2TwitterDemos_WindowsPhone.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_WindowsPhone</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_WindowsPhone</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>Linq2TwitterDemos_WindowsPhone_$(Configuration)_$(Platform).xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>Linq2TwitterDemos_WindowsPhone.App</SilverlightAppEntry>\n    <ValidateXaml>true</ValidateXaml>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <NuGetPackageImportStamp>c4be3af1</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\x86\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|ARM' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\ARM\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|ARM' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\ARM\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"LocalizedStrings.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"OAuth.xaml.cs\">\n      <DependentUpon>OAuth.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\AppResources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>AppResources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"SharedState.cs\" />\n    <Compile Include=\"StatusDemos\\HomeTimelineDemo.xaml.cs\">\n      <DependentUpon>HomeTimelineDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\TweetDemo.xaml.cs\">\n      <DependentUpon>TweetDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StreamingDemos\\FilterStreamDemo.xaml.cs\">\n      <DependentUpon>FilterStreamDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StreamingDemos\\SampleStreamDemo.xaml.cs\">\n      <DependentUpon>SampleStreamDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StreamingDemos\\UserStreamDemo.xaml.cs\">\n      <DependentUpon>UserStreamDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"ViewModels\\JsonContent.cs\" />\n    <Compile Include=\"ViewModels\\StreamViewModel.cs\" />\n    <Compile Include=\"ViewModels\\ItemViewModel.cs\" />\n    <Compile Include=\"ViewModels\\MainViewModel.cs\" />\n    <Compile Include=\"ViewModels\\Tweet.cs\" />\n    <Compile Include=\"ViewModels\\TweetViewModel.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <DesignData Include=\"SampleData\\MainViewModelSampleData.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </DesignData>\n    <Page Include=\"OAuth.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StatusDemos\\HomeTimelineDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StatusDemos\\TweetDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StreamingDemos\\FilterStreamDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StreamingDemos\\SampleStreamDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StreamingDemos\\UserStreamDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\AppManifest.xml\" />\n    <None Include=\"Properties\\WMAppManifest.xml\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"Assets\\PanoramaBackground.png\" />\n    <Content Include=\"Assets\\AlignmentGrid.png\" />\n    <Content Include=\"Assets\\ApplicationIcon.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileMedium.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileMediumLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\AppResources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{CAAFF164-A681-4183-BB83-A07B668F7FFC}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System.IO.Compression, Version=3.9.85.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\Microsoft.Bcl.Compression.3.9.85\\lib\\wp8\\System.IO.Compression.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Compression.3.9.85\\build\\wp8\\Microsoft.Bcl.Compression.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Compression.3.9.85\\build\\wp8\\Microsoft.Bcl.Compression.targets')\" />\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/LocalizedStrings.cs",
    "content": "﻿using Linq2TwitterDemos_WindowsPhone.Resources;\n\nnamespace Linq2TwitterDemos_WindowsPhone\n{\n    /// <summary>\n    /// Provides access to string resources.\n    /// </summary>\n    public class LocalizedStrings\n    {\n        private static readonly AppResources localizedResources = new AppResources();\n\n        public AppResources LocalizedResources { get { return localizedResources; } }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/MainPage.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    d:DataContext=\"{d:DesignData SampleData/MainViewModelSampleData.xaml}\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\"  Orientation=\"Portrait\"\n    shell:SystemTray.IsVisible=\"False\">\n\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n\n        <phone:Panorama Title=\"linq2twitter demos\">\n            <phone:Panorama.Background>\n                <ImageBrush ImageSource=\"/Linq2TwitterDemos_WindowsPhone;component/Assets/PanoramaBackground.png\"/>\n            </phone:Panorama.Background>\n\n            <phone:PanoramaItem Header=\"statuses\">\n                <phone:LongListSelector Margin=\"0,0,-22,0\" ItemsSource=\"{Binding Statuses}\">\n                    <phone:LongListSelector.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Margin=\"0,-6,0,12\">\n                                <Button Name=\"DemoButton\" Content=\"{Binding Operation}\" Tag=\"{Binding PageUri}\" Click=\"DemoButton_Click\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </phone:LongListSelector.ItemTemplate>\n                </phone:LongListSelector>\n            </phone:PanoramaItem>\n            <phone:PanoramaItem Header=\"streaming\">\n                <phone:LongListSelector Margin=\"0,0,-22,0\" ItemsSource=\"{Binding Streams}\">\n                    <phone:LongListSelector.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Margin=\"0,-6,0,12\">\n                                <Button Name=\"DemoButton\" Content=\"{Binding Operation}\" Tag=\"{Binding PageUri}\" Click=\"DemoButton_Click\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </phone:LongListSelector.ItemTemplate>\n                </phone:LongListSelector>\n            </phone:PanoramaItem>\n\n            <!--Panorama item two-->\n            <phone:PanoramaItem>\n                <!--Double line list with image placeholder and text wrapping using a floating header that scrolls with the content-->\n                <phone:LongListSelector Margin=\"0,-38,-22,2\" ItemsSource=\"{Binding Items}\">\n                    <phone:LongListSelector.ListHeaderTemplate>\n                        <DataTemplate>\n                            <Grid Margin=\"12,0,0,38\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"*\"/>\n                                </Grid.RowDefinitions>\n                                <TextBlock Text=\"second item\"\n                                           Style=\"{StaticResource PanoramaItemHeaderTextStyle}\"\n                                           Grid.Row=\"0\"/>\n                            </Grid>\n                        </DataTemplate>\n                    </phone:LongListSelector.ListHeaderTemplate>\n                    <phone:LongListSelector.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\" Margin=\"12,2,0,4\" Height=\"105\" Width=\"432\">\n                                <!--Replace rectangle with image-->\n                                <Border BorderThickness=\"1\" Width=\"99\" Height=\"99\" BorderBrush=\"#FFFFC700\" Background=\"#FFFFC700\"/>\n                                <StackPanel Width=\"311\" Margin=\"8,-7,0,0\">\n                                    <TextBlock Text=\"{Binding Operation}\" TextWrapping=\"Wrap\" Margin=\"10,0\" Style=\"{StaticResource PhoneTextExtraLargeStyle}\" FontSize=\"{StaticResource PhoneFontSizeLarge}\" />\n                                    <TextBlock Text=\"{Binding PageUri}\" TextWrapping=\"Wrap\" Margin=\"10,-2,10,0\" Style=\"{StaticResource PhoneTextSubtleStyle}\" />\n                                </StackPanel>\n                            </StackPanel>\n                        </DataTemplate>\n                    </phone:LongListSelector.ItemTemplate>\n                </phone:LongListSelector>\n            </phone:PanoramaItem>\n\n            <!--Panorama item three-->\n            <phone:PanoramaItem Header=\"third item\" Orientation=\"Horizontal\">\n                <!--Double wide Panorama with large image placeholders-->\n                <Grid>\n                    <StackPanel Margin=\"0,4,16,0\" Orientation=\"Vertical\" VerticalAlignment=\"Top\">\n                        <StackPanel HorizontalAlignment=\"Left\" Orientation=\"Horizontal\">\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                        </StackPanel>\n                        <StackPanel HorizontalAlignment=\"Left\" Orientation=\"Horizontal\" Margin=\"0,12,0,0\">\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                            <Border Background=\"#FFFFC700\" Height=\"173\" Width=\"173\" Margin=\"12,0,0,0\"/>\n                        </StackPanel>\n                    </StackPanel>\n                </Grid>\n            </phone:PanoramaItem>\n        </phone:Panorama>\n\n        <!--Uncomment to see an alignment grid to help ensure your controls are\n            aligned on common boundaries.  The image has a top margin of -32px to\n            account for the System Tray. Set this to 0 (or remove the margin altogether)\n            if the System Tray is hidden.\n\n            Before shipping remove this XAML and the image itself.-->\n        <!--<Image Source=\"/Assets/AlignmentGrid.png\" VerticalAlignment=\"Top\" Height=\"800\" Width=\"480\" Margin=\"0\" Grid.Row=\"0\" Grid.RowSpan=\"2\" IsHitTestVisible=\"False\" />-->\n\n    </Grid>\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/MainPage.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone\n{\n    public partial class MainPage : PhoneApplicationPage\n    {\n        // Constructor\n        public MainPage()\n        {\n            InitializeComponent();\n\n            // Set the data context of the listbox control to the sample data\n            DataContext = App.ViewModel;\n        }\n\n        // Load data for the ViewModel Items\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (!App.ViewModel.IsDataLoaded)\n            {\n                App.ViewModel.LoadData();\n            }\n\n            if (SharedState.Authorizer == null)\n                NavigationService.Navigate(new Uri(\"/OAuth.xaml\", UriKind.Relative));\n        }\n\n        private void DemoButton_Click(object sender, RoutedEventArgs e)\n        {\n            string destinationUri = (sender as Button).Tag as string;\n            NavigationService.Navigate(new Uri(destinationUri, UriKind.Relative));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/OAuth.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.OAuth\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock Text=\"OAUTH\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock Text=\"authorize app\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <phone:WebBrowser HorizontalAlignment=\"Left\" Margin=\"5,0,0,0\" Name=\"OAuthWebBrowser\" VerticalAlignment=\"Top\" Height=\"450\" Width=\"450\" />\n            <TextBlock Height=\"30\" HorizontalAlignment=\"Left\" Margin=\"23,478,0,0\" Name=\"EnterPinTextBlock\" Text=\"Enter PIN:\" VerticalAlignment=\"Top\" />\n            <TextBox Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"117,456,0,0\" Name=\"PinTextBox\" Text=\"\" VerticalAlignment=\"Top\" Width=\"333\" />\n            <Button Content=\"Authorize\" Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"117,529,0,0\" Name=\"AuthorizationButton\" VerticalAlignment=\"Top\" Width=\"216\" Click=\"AuthorizationButton_Click\" />\n        </Grid>\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/OAuth.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone\n{\n    public partial class OAuth : PhoneApplicationPage\n    {\n        PinAuthorizer pinAuth = new PinAuthorizer();\n\n        public OAuth()\n        {\n            InitializeComponent();\n            Loaded += new RoutedEventHandler(Page_Loaded);\n        }\n\n        async void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n            pinAuth = new PinAuthorizer\n            {\n                // Get the ConsumerKey and ConsumerSecret for your app and load them here.\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                },\n                // Note: GetPin isn't used here because we've broken the authorization\n                // process into two parts: begin and complete\n                GoToTwitterAuthorization = pageLink => Dispatcher.BeginInvoke(\n                    () => OAuthWebBrowser.Navigate(new Uri(pageLink, UriKind.Absolute)))\n            };\n\n            await pinAuth.BeginAuthorizeAsync();\n        }\n\n        async void AuthorizationButton_Click(object sender, RoutedEventArgs e)\n        {\n            await pinAuth.CompleteAuthorizeAsync(PinTextBox.Text);\n            SharedState.Authorizer = pinAuth;\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n            //\n            //var credentials = pinAuth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            NavigationService.GoBack();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n</Deployment>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_WindowsPhone\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_WindowsPhone\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"49115a98-47ca-4621-a8d8-156124b6be06\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/Properties/WMAppManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2012/deployment\" AppPlatformVersion=\"8.0\">\n  <DefaultLanguage xmlns=\"\" code=\"en-US\"/>\n  <App xmlns=\"\" ProductID=\"{cdffaa64-bda8-48d7-9534-85e5e09c9f29}\" Title=\"Linq2TwitterDemos_WindowsPhone\" RuntimeType=\"Silverlight\" Version=\"1.0.0.0\" Genre=\"apps.normal\"  Author=\"Linq2TwitterDemos_WindowsPhone author\" Description=\"Sample description\" Publisher=\"Linq2TwitterDemos_WindowsPhone\" PublisherID=\"{ea632925-2945-4755-b695-8e038d90153f}\">\n    <IconPath IsRelative=\"true\" IsResource=\"false\">Assets\\ApplicationIcon.png</IconPath>\n    <Capabilities>\n      <Capability Name=\"ID_CAP_NETWORKING\"/>\n      <Capability Name=\"ID_CAP_MEDIALIB_AUDIO\"/>\n      <Capability Name=\"ID_CAP_MEDIALIB_PLAYBACK\"/>\n      <Capability Name=\"ID_CAP_SENSORS\"/>\n      <Capability Name=\"ID_CAP_WEBBROWSERCOMPONENT\"/>\n    </Capabilities>\n    <Tasks>\n      <DefaultTask  Name =\"_default\" NavigationPage=\"MainPage.xaml\"/>\n    </Tasks>\n    <Tokens>\n      <PrimaryToken TokenID=\"Linq2TwitterDemos_WindowsPhoneToken\" TaskName=\"_default\">\n        <TemplateFlip>\n          <SmallImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileSmall.png</SmallImageURI>\n          <Count>0</Count>\n          <BackgroundImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileMedium.png</BackgroundImageURI>\n          <Title>Linq2TwitterDemos_WindowsPhone</Title>\n          <BackContent></BackContent>\n          <BackBackgroundImageURI></BackBackgroundImageURI>\n          <BackTitle></BackTitle>\n          <DeviceLockImageURI></DeviceLockImageURI>\n          <HasLarge></HasLarge>\n        </TemplateFlip>\n      </PrimaryToken>\n    </Tokens>\n    <ScreenResolutions>\n      <ScreenResolution Name=\"ID_RESOLUTION_WVGA\"/>\n      <ScreenResolution Name=\"ID_RESOLUTION_WXGA\"/>\n      <ScreenResolution Name=\"ID_RESOLUTION_HD720P\"/>\n    </ScreenResolutions>\n  </App>\n</Deployment>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/Resources/AppResources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.17626\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_WindowsPhone.Resources\n{\n    using System;\n\n\n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AppResources\n    {\n\n        private static global::System.Resources.ResourceManager resourceMan;\n\n        private static global::System.Globalization.CultureInfo resourceCulture;\n\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AppResources()\n        {\n        }\n\n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager\n        {\n            get\n            {\n                if (object.ReferenceEquals(resourceMan, null))\n                {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Linq2TwitterDemos_WindowsPhone.Resources.AppResources\", typeof(AppResources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n\n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture\n        {\n            get\n            {\n                return resourceCulture;\n            }\n            set\n            {\n                resourceCulture = value;\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to LeftToRight.\n        /// </summary>\n        public static string ResourceFlowDirection\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResourceFlowDirection\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to us-EN.\n        /// </summary>\n        public static string ResourceLanguage\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResourceLanguage\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to my application.\n        /// </summary>\n        public static string ApplicationTitle\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ApplicationTitle\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Sample Runtime Property Value.\n        /// </summary>\n        public static string SampleProperty\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SampleProperty\", resourceCulture);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/Resources/AppResources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResourceFlowDirection\" xml:space=\"preserve\">\n    <value>LeftToRight</value>\n    <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>\n  </data>\n  <data name=\"ResourceLanguage\" xml:space=\"preserve\">\n    <value>en-US</value>\n    <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>\n  </data>\n  <data name=\"ApplicationTitle\" xml:space=\"preserve\">\n    <value>my application</value>\n  </data>\n  <data name=\"SampleProperty\" xml:space=\"preserve\">\n    <value>Sample Runtime Property Value</value>\n  </data>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/SampleData/MainViewModelSampleData.xaml",
    "content": "﻿<vm:MainViewModel\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:vm=\"clr-namespace:Linq2TwitterDemos_WindowsPhone.ViewModels\"\n    SampleProperty=\"Sample Text Property Value\">\n\n    <vm:MainViewModel.Items>\n        <vm:ItemViewModel Operation=\"design one\" PageUri=\"Maecenas praesent accumsan bibendum\"/>\n        <vm:ItemViewModel Operation=\"design two\" PageUri=\"Dictumst eleifend facilisi faucibus\"/>\n        <vm:ItemViewModel Operation=\"design three\" PageUri=\"Habitant inceptos interdum lobortis\"/>\n        <vm:ItemViewModel Operation=\"design four\" PageUri=\"Nascetur pharetra placerat pulvinar\"/>\n        <vm:ItemViewModel Operation=\"design five\" PageUri=\"Sagittis senectus sociosqu suscipit\"/>\n        <vm:ItemViewModel Operation=\"design six\" PageUri=\"Torquent ultrices vehicula volutpat\"/>\n    </vm:MainViewModel.Items>\n\n</vm:MainViewModel>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/SharedState.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsPhone\n{\n    class SharedState\n    {\n        public static IAuthorizer Authorizer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StatusDemos/HomeTimelineDemo.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.StatusDemos.HomeTimelineDemo\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <StackPanel Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock Text=\"LINQ2TWITTER - STATUSES\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock Text=\"home timeline\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <Button Content=\"Query Timeline\" Height=\"72\" HorizontalAlignment=\"Center\" Name=\"QueryButton\" VerticalAlignment=\"Top\" Width=\"365\" Click=\"QueryButton_Click\" />\n            <phone:LongListSelector Grid.Row=\"1\" Margin=\"0,0,-22,0\" ItemsSource=\"{Binding Tweets}\">\n                <phone:LongListSelector.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\" Height=\"132\">\n                            <Image Source=\"{Binding ImageSource}\" Height=\"73\" Width=\"73\" VerticalAlignment=\"Top\" Margin=\"0,10,8,0\"/>\n                            <StackPanel Width=\"370\">\n                                <TextBlock Text=\"{Binding UserName}\" Foreground=\"#FFC8AB14\" FontSize=\"28\" />\n                                <TextBlock Text=\"{Binding Message}\" TextWrapping=\"Wrap\" FontSize=\"24\" />\n                            </StackPanel>\n                        </StackPanel>\n                    </DataTemplate>\n                </phone:LongListSelector.ItemTemplate>\n            </phone:LongListSelector>\n        </Grid>\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StatusDemos/HomeTimelineDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing Linq2TwitterDemos_WindowsPhone.ViewModels;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone.StatusDemos\n{\n    public partial class HomeTimelineDemo : PhoneApplicationPage\n    {\n        public HomeTimelineDemo()\n        {\n            InitializeComponent();\n\n            DataContext = new TweetViewModel();\n        }\n\n        async void QueryButton_Click(object sender, RoutedEventArgs e)\n        {\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            var tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home\n                 select new Tweet\n                 {\n                     ImageSource = tweet.User.ProfileImageUrl,\n                     UserName = tweet.User.ScreenNameResponse,\n                     Message = tweet.Text\n                 })\n                .ToListAsync();\n\n            var tweetCollection = (DataContext as TweetViewModel).Tweets;\n            tweetCollection.Clear();\n            tweets.ForEach(tweet => tweetCollection.Add(tweet));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StatusDemos/TweetDemo.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.StatusDemos.TweetDemo\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock Text=\"LINQ2TWITTER - STATUSES\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock Text=\"tweet\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <TextBox Height=\"144\" HorizontalAlignment=\"Left\" Margin=\"0,49,0,0\" Name=\"TweetTextBox\" Text=\"\" VerticalAlignment=\"Top\" Width=\"467\" InputScope=\"Text\" />\n            <Button Content=\"Tweet\" Height=\"72\" HorizontalAlignment=\"Left\" Margin=\"143,215,0,0\" Name=\"TweetButton\" VerticalAlignment=\"Top\" Width=\"160\" Click=\"TweetButton_Click\" />\n        </Grid>\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StatusDemos/TweetDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone.StatusDemos\n{\n    public partial class TweetDemo : PhoneApplicationPage\n    {\n        public TweetDemo()\n        {\n            InitializeComponent();\n            TweetTextBox.Text = \"Windows Phone Test, \" + DateTime.Now.ToString() + \" #linq2twitter\";\n        }\n\n        async void TweetButton_Click(object sender, RoutedEventArgs e)\n        {\n            IAuthorizer auth = SharedState.Authorizer;\n\n            var twitterCtx = new TwitterContext(auth);\n\n            decimal latitude = 37.78215m;\n            decimal longitude = -122.40060m;\n\n            Status tweet = await twitterCtx.TweetAsync(TweetTextBox.Text, latitude, longitude);\n\n            MessageBox.Show(\n                \"User: \" + tweet.User.ScreenNameResponse +\n                \", Posted Status: \" + tweet.Text,\n                \"Update Successfully Posted.\",\n                MessageBoxButton.OK);\n\n            TweetTextBox.Text = \"Windows Phone Test, \" + DateTime.Now.ToString() + \" #linq2twitter\";\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StreamingDemos/FilterStreamDemo.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.StreamingDemos.FilterStreamDemo\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock Text=\"LINQ TO TWITTER - STREAMING\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock Text=\"filter stream\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <Button Content=\"Start\" Height=\"72\" HorizontalAlignment=\"Center\" Name=\"StartButton\" VerticalAlignment=\"Top\" Width=\"365\" Click=\"StartButton_Click\" />\n            <phone:LongListSelector Grid.Row=\"1\" Margin=\"0,0,-22,0\" ItemsSource=\"{Binding JsonContent}\">\n                <phone:LongListSelector.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Content}\" Foreground=\"#FFC8AB14\" FontSize=\"28\" />\n                    </DataTemplate>\n                </phone:LongListSelector.ItemTemplate>\n            </phone:LongListSelector>\n        </Grid>\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StreamingDemos/FilterStreamDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Windows;\nusing Linq2TwitterDemos_WindowsPhone.ViewModels;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone.StreamingDemos\n{\n    public partial class FilterStreamDemo : PhoneApplicationPage\n    {\n        ObservableCollection<JsonContent> jsonCollection;\n\n        public FilterStreamDemo()\n        {\n            InitializeComponent();\n\n            var streamVM = new StreamViewModel();\n            DataContext = streamVM;\n            jsonCollection = streamVM.JsonContent;\n        }\n\n        async void StartButton_Click(object sender, RoutedEventArgs e)\n        {\n            Show(\"Starting Stream...\");\n\n            // Compression doesn't work correctly for streaming in Windows Phone\n            SharedState.Authorizer.SupportsCompression = false;\n            int count = 0;\n\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.Filter &&\n                       strm.Track == \"twitter\"\n                 select strm)\n                .StartAsync(async strm =>\n                {\n                    Show(strm.Content);\n\n                    if (count++ >= 50)\n                        strm.CloseStream();\n                });\n        }\n  \n        void Show(string content)\n        {\n             Dispatcher.BeginInvoke(() =>\n                jsonCollection.Add(new JsonContent { Content = content }));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StreamingDemos/SampleStreamDemo.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.StreamingDemos.SampleStreamDemo\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock Text=\"LINQ TO TWITTER - STREAMS\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock Text=\"sample stream\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n        <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <Button Content=\"Start\" Height=\"72\" HorizontalAlignment=\"Center\" Name=\"StartButton\" VerticalAlignment=\"Top\" Width=\"365\" Click=\"StartButton_Click\" />\n            <phone:LongListSelector Grid.Row=\"1\" Margin=\"0,0,-22,0\" ItemsSource=\"{Binding JsonContent}\">\n                <phone:LongListSelector.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Content}\" Foreground=\"#FFC8AB14\" FontSize=\"28\" />\n                    </DataTemplate>\n                </phone:LongListSelector.ItemTemplate>\n            </phone:LongListSelector>\n        </Grid>\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StreamingDemos/SampleStreamDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Windows;\nusing Linq2TwitterDemos_WindowsPhone.ViewModels;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone.StreamingDemos\n{\n    public partial class SampleStreamDemo : PhoneApplicationPage\n    {\n        ObservableCollection<JsonContent> jsonCollection;\n\n        public SampleStreamDemo()\n        {\n            InitializeComponent();\n\n            var streamVM = new StreamViewModel();\n            DataContext = streamVM;\n            jsonCollection = streamVM.JsonContent;\n        }\n\n        async void StartButton_Click(object sender, RoutedEventArgs e)\n        {\n            Show(\"Starting Stream...\");\n\n            // Compression doesn't work correctly for streaming in Windows Phone\n            SharedState.Authorizer.SupportsCompression = false;\n            int count = 0;\n\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.Sample\n                 select strm)\n                .StartAsync(async strm =>\n                {\n                    Show(strm.Content);\n\n                    if (count++ >= 5)\n                        strm.CloseStream();\n                });\n        }\n\n        void Show(string content)\n        {\n            Dispatcher.BeginInvoke(() =>\n               jsonCollection.Add(new JsonContent { Content = content }));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StreamingDemos/UserStreamDemo.xaml",
    "content": "﻿<phone:PhoneApplicationPage\n    x:Class=\"Linq2TwitterDemos_WindowsPhone.StreamingDemos.UserStreamDemo\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    mc:Ignorable=\"d\"\n    shell:SystemTray.IsVisible=\"True\">\n\n    <!--LayoutRoot is the root grid where all page content is placed-->\n    <Grid x:Name=\"LayoutRoot\" Background=\"Transparent\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--TitlePanel contains the name of the application and page title-->\n        <StackPanel Grid.Row=\"0\" Margin=\"12,17,0,28\">\n            <TextBlock Text=\"LINQ TO TWITTER - STREAMING\" Style=\"{StaticResource PhoneTextNormalStyle}\"/>\n            <TextBlock Text=\"user stream\" Margin=\"9,-7,0,0\" Style=\"{StaticResource PhoneTextTitle1Style}\"/>\n        </StackPanel>\n\n        <!--ContentPanel - place additional content here-->\n            <Grid x:Name=\"ContentPanel\" Grid.Row=\"1\" Margin=\"12,0,12,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\" />\n                <RowDefinition Height=\"*\" />\n            </Grid.RowDefinitions>\n            <Button Content=\"Start\" Height=\"72\" HorizontalAlignment=\"Center\" Name=\"StartButton\" VerticalAlignment=\"Top\" Width=\"365\" Click=\"StartButton_Click\" />\n            <phone:LongListSelector Grid.Row=\"1\" Margin=\"0,0,-22,0\" ItemsSource=\"{Binding JsonContent}\">\n                <phone:LongListSelector.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Content}\" Foreground=\"#FFC8AB14\" FontSize=\"28\" />\n                    </DataTemplate>\n                </phone:LongListSelector.ItemTemplate>\n            </phone:LongListSelector>\n        </Grid>\n    </Grid>\n\n</phone:PhoneApplicationPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/StreamingDemos/UserStreamDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Windows;\nusing Linq2TwitterDemos_WindowsPhone.ViewModels;\nusing LinqToTwitter;\nusing Microsoft.Phone.Controls;\n\nnamespace Linq2TwitterDemos_WindowsPhone.StreamingDemos\n{\n    public partial class UserStreamDemo : PhoneApplicationPage\n    {\n        ObservableCollection<JsonContent> jsonCollection;\n\n        public UserStreamDemo()\n        {\n            InitializeComponent();\n\n            var streamVM = new StreamViewModel();\n            DataContext = streamVM;\n            jsonCollection = streamVM.JsonContent;\n        }\n\n        async void StartButton_Click(object sender, RoutedEventArgs e)\n        {\n            Show(\"Starting Stream...\");\n\n            // Compression doesn't work correctly for streaming in Windows Phone\n            SharedState.Authorizer.SupportsCompression = false;\n            int count = 0;\n\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.User\n                 select strm)\n                .StartAsync(async strm =>\n                {\n                    if (IsKeepAliveMessageFromTwitterApi(strm))\n                        return;\n\n                    Show(strm.Content);\n\n                    if (count++ == 5)\n                        strm.CloseStream();\n                });\n        }\n  \n        private bool IsKeepAliveMessageFromTwitterApi(StreamContent strm)\n        {\n            return string.IsNullOrWhiteSpace(strm.Content);\n        }\n\n        void Show(string content)\n        {\n            Dispatcher.BeginInvoke(() =>\n               jsonCollection.Add(new JsonContent { Content = content }));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/ViewModels/ItemViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\n\nnamespace Linq2TwitterDemos_WindowsPhone.ViewModels\n{\n    public class ItemViewModel : INotifyPropertyChanged\n    {\n        private string operation;\n        /// <summary>\n        /// Sample ViewModel property; this property is used in the view to display its value using a Binding.\n        /// </summary>\n        /// <returns></returns>\n        public string Operation\n        {\n            get\n            {\n                return operation;\n            }\n            set\n            {\n                if (value != operation)\n                {\n                    operation = value;\n                    NotifyPropertyChanged(\"Operation\");\n                }\n            }\n        }\n\n        private string pageUri;\n        /// <summary>\n        /// Sample ViewModel property; this property is used in the view to display its value using a Binding.\n        /// </summary>\n        /// <returns></returns>\n        public string PageUri\n        {\n            get\n            {\n                return pageUri;\n            }\n            set\n            {\n                if (value != pageUri)\n                {\n                    pageUri = value;\n                    NotifyPropertyChanged(\"PageUri\");\n                }\n            }\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n        private void NotifyPropertyChanged(String propertyName)\n        {\n            PropertyChangedEventHandler handler = PropertyChanged;\n            if (null != handler)\n            {\n                handler(this, new PropertyChangedEventArgs(propertyName));\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/ViewModels/JsonContent.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WindowsPhone.ViewModels\n{\n    class JsonContent\n    {\n        public string Content { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/ViewModels/MainViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing Linq2TwitterDemos_WindowsPhone.Resources;\n\nnamespace Linq2TwitterDemos_WindowsPhone.ViewModels\n{\n    public class MainViewModel : INotifyPropertyChanged\n    {\n        public MainViewModel()\n        {\n            Items = new ObservableCollection<ItemViewModel>();\n            Statuses = new ObservableCollection<ItemViewModel>();\n            Streams = new ObservableCollection<ItemViewModel>();\n        }\n\n        /// <summary>\n        /// A collection for ItemViewModel objects.\n        /// </summary>\n        public ObservableCollection<ItemViewModel> Items { get; private set; }\n\n        /// <summary>\n        /// A collection for ItemViewModel objects with Statuses.\n        /// </summary>\n        public ObservableCollection<ItemViewModel> Statuses { get; private set; }\n\n        /// <summary>\n        /// A collection for ItemViewModel objects with Statuses.\n        /// </summary>\n        public ObservableCollection<ItemViewModel> Streams { get; private set; }\n\n        private string sampleProperty = \"Sample Runtime Property Value\";\n        /// <summary>\n        /// Sample ViewModel property; this property is used in the view to display its value using a Binding\n        /// </summary>\n        /// <returns></returns>\n        public string SampleProperty\n        {\n            get\n            {\n                return sampleProperty;\n            }\n            set\n            {\n                if (value != sampleProperty)\n                {\n                    sampleProperty = value;\n                    NotifyPropertyChanged(\"SampleProperty\");\n                }\n            }\n        }\n\n        /// <summary>\n        /// Sample property that returns a localized string\n        /// </summary>\n        public string LocalizedSampleProperty\n        {\n            get\n            {\n                return AppResources.SampleProperty;\n            }\n        }\n\n        public bool IsDataLoaded\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        /// Creates and adds a few ItemViewModel objects into the Items collection.\n        /// </summary>\n        public void LoadData()\n        {\n            Statuses.Add(new ItemViewModel { Operation = \"tweet\", PageUri = \"/StatusDemos/TweetDemo.xaml\" });\n            Statuses.Add(new ItemViewModel { Operation = \"home timeline\", PageUri = \"/StatusDemos/HomeTimelineDemo.xaml\" });\n\n            Streams.Add(new ItemViewModel { Operation = \"filter stream\", PageUri = \"/StreamingDemos/FilterStreamDemo.xaml\" });\n            Streams.Add(new ItemViewModel { Operation = \"sample stream\", PageUri = \"/StreamingDemos/SampleStreamDemo.xaml\" });\n            Streams.Add(new ItemViewModel { Operation = \"user stream\", PageUri = \"/StreamingDemos/UserStreamDemo.xaml\" });\n\n            // Sample data; replace with real data\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime one\", PageUri = \"Maecenas praesent accumsan bibendum\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime two\", PageUri = \"Dictumst eleifend facilisi faucibus\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime three\", PageUri = \"Habitant inceptos interdum lobortis\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime four\", PageUri = \"Nascetur pharetra placerat pulvinar\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime five\", PageUri = \"Maecenas praesent accumsan bibendum\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime six\", PageUri = \"Dictumst eleifend facilisi faucibus\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime seven\", PageUri = \"Habitant inceptos interdum lobortis\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime eight\", PageUri = \"Nascetur pharetra placerat pulvinar\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime nine\", PageUri = \"Maecenas praesent accumsan bibendum\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime ten\", PageUri = \"Dictumst eleifend facilisi faucibus\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime eleven\", PageUri = \"Habitant inceptos interdum lobortis\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime twelve\", PageUri = \"Nascetur pharetra placerat pulvinar\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime thirteen\", PageUri = \"Maecenas praesent accumsan bibendum\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime fourteen\", PageUri = \"Dictumst eleifend facilisi faucibus\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime fifteen\", PageUri = \"Habitant inceptos interdum lobortis\" });\n            this.Items.Add(new ItemViewModel() { Operation = \"runtime sixteen\", PageUri = \"Nascetur pharetra placerat pulvinar\" });\n\n            this.IsDataLoaded = true;\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n        private void NotifyPropertyChanged(String propertyName)\n        {\n            PropertyChangedEventHandler handler = PropertyChanged;\n            if (null != handler)\n            {\n                handler(this, new PropertyChangedEventArgs(propertyName));\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/ViewModels/StreamViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WindowsPhone.ViewModels\n{\n    class StreamViewModel\n    {\n        public StreamViewModel()\n        {\n            JsonContent = new ObservableCollection<JsonContent>();\n        }\n\n        public ObservableCollection<JsonContent> JsonContent { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/ViewModels/Tweet.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WindowsPhone.ViewModels\n{\n    public class Tweet\n    {\n        public string UserName { get; set; }\n\n        public string Message { get; set; }\n\n        public string ImageSource { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/ViewModels/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\n\nnamespace Linq2TwitterDemos_WindowsPhone.ViewModels\n{\n    public class TweetViewModel\n    {\n        public TweetViewModel()\n        {\n            Tweets = new ObservableCollection<Tweet>();\n        }\n\n        public ObservableCollection<Tweet> Tweets { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsPhone/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Linq2TwitterDemos_WindowsStore.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore\"\n    xmlns:localData=\"using:Linq2TwitterDemos_WindowsStore.Data\">\n\n    <Application.Resources>\n\n        <!-- Application-specific resources -->\n\n        <x:String x:Key=\"AppName\">Linq2TwitterDemos_WindowsStore</x:String>\n\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/App.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Grid App template is documented at http://go.microsoft.com/fwlink/?LinkId=234226\n\nnamespace Linq2TwitterDemos_WindowsStore\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// Initializes the singleton Application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override async void OnLaunched(LaunchActivatedEventArgs e)\n        {\n\n#if DEBUG\n            // Show graphics profiling information while debugging.\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                // Display the current frame rate counters\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n                //Associate the frame with a SuspensionManager key                                \n                SuspensionManager.RegisterFrame(rootFrame, \"AppFrame\");\n                // Set the default language\n                rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    // Restore the saved session state only when appropriate\n                    try\n                    {\n                        await SuspensionManager.RestoreAsync();\n                    }\n                    catch (SuspensionManagerException)\n                    {\n                        //Something went wrong restoring state.\n                        //Assume there is no state and continue\n                    }\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n            if (rootFrame.Content == null)\n            {\n                // When the navigation stack isn't restored navigate to the first page,\n                // configuring the new page by passing required information as a navigation\n                // parameter\n                rootFrame.Navigate(typeof(GroupedItemsPage), e.Arguments);\n            }\n            // Ensure the current window is active\n            Window.Current.Activate();\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private async void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            await SuspensionManager.SaveAsync();\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/BooleanNegationConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace Linq2TwitterDemos_WindowsStore.Common\n{\n    /// <summary>\n    /// Value converter that translates true to false and vice versa.\n    /// </summary>\n    public sealed class BooleanNegationConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            return !(value is bool && (bool)value);\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            return !(value is bool && (bool)value);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/BooleanToVisibilityConverter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.Graphics.Display;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Data;\n\nnamespace Linq2TwitterDemos_WindowsStore.Common\n{\n    /// <summary>\n    /// Value converter that translates true to <see cref=\"Visibility.Visible\"/> and false to\n    /// <see cref=\"Visibility.Collapsed\"/>.\n    /// </summary>\n    public sealed class BooleanToVisibilityConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            return (value is bool && (bool)value) ? Visibility.Visible : Visibility.Collapsed;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            return value is Visibility && (Visibility)value == Visibility.Visible;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/NavigationHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing Windows.System;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Linq2TwitterDemos_WindowsStore.Common\n{\n    /// <summary>\n    /// NavigationManager aids in navigation between pages.  It provides commands used to \n    /// navigate back and forward as well as registers for standard mouse and keyboard \n    /// shortcuts used to go back and forward.  In addition it integrates SuspensionManger\n    /// to handle process lifetime management and state management when navigating between\n    /// pages.\n    /// </summary>\n    /// <example>\n    /// To make use of NavigationManager, follow these two steps or\n    /// start with a BasicPage or any other Page item template other than BlankPage.\n    /// \n    /// 1) Create an instance of the NaivgationHelper somewhere such as in the \n    ///     constructor for the page and register a callback for the LoadState and \n    ///     SaveState events.\n    /// <code>\n    ///     public MyPage()\n    ///     {\n    ///         this.InitializeComponent();\n    ///         var navigationHelper = new NavigationHelper(this);\n    ///         this.navigationHelper.LoadState += navigationHelper_LoadState;\n    ///         this.navigationHelper.SaveState += navigationHelper_SaveState;\n    ///     }\n    ///     \n    ///     private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n    ///     { }\n    ///     private async void navigationHelper_SaveState(object sender, LoadStateEventArgs e)\n    ///     { }\n    /// </code>\n    /// \n    /// 2) Register the page to call into the NavigationManager whenever the page participates \n    ///     in navigation by overriding the <see cref=\"Windows.UI.Xaml.Controls.Page.OnNavigatedTo\"/> \n    ///     and <see cref=\"Windows.UI.Xaml.Controls.Page.OnNavigatedFrom\"/> events.\n    /// <code>\n    ///     protected override void OnNavigatedTo(NavigationEventArgs e)\n    ///     {\n    ///         navigationHelper.OnNavigatedTo(e);\n    ///     }\n    ///     \n    ///     protected override void OnNavigatedFrom(NavigationEventArgs e)\n    ///     {\n    ///         navigationHelper.OnNavigatedFrom(e);\n    ///     }\n    /// </code>\n    /// </example>\n    [Windows.Foundation.Metadata.WebHostHidden]\n    public class NavigationHelper : DependencyObject\n    {\n        private Page Page { get; set; }\n        private Frame Frame { get { return this.Page.Frame; } }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"NavigationHelper\"/> class.\n        /// </summary>\n        /// <param name=\"page\">A reference to the current page used for navigation.  \n        /// This reference allows for frame manipulation and to ensure that keyboard \n        /// navigation requests only occur when the page is occupying the entire window.</param>\n        public NavigationHelper(Page page)\n        {\n            this.Page = page;\n\n            // When this page is part of the visual tree make two changes:\n            // 1) Map application view state to visual state for the page\n            // 2) Handle keyboard and mouse navigation requests\n            this.Page.Loaded += (sender, e) =>\n            {\n                // Keyboard and mouse navigation only apply when occupying the entire window\n                if (this.Page.ActualHeight == Window.Current.Bounds.Height &&\n                    this.Page.ActualWidth == Window.Current.Bounds.Width)\n                {\n                    // Listen to the window directly so focus isn't required\n                    Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated +=\n                        CoreDispatcher_AcceleratorKeyActivated;\n                    Window.Current.CoreWindow.PointerPressed +=\n                        this.CoreWindow_PointerPressed;\n                }\n            };\n\n            // Undo the same changes when the page is no longer visible\n            this.Page.Unloaded += (sender, e) =>\n            {\n                Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated -=\n                    CoreDispatcher_AcceleratorKeyActivated;\n                Window.Current.CoreWindow.PointerPressed -=\n                    this.CoreWindow_PointerPressed;\n            };\n        }\n\n        #region Navigation support\n\n        RelayCommand _goBackCommand;\n        RelayCommand _goForwardCommand;\n\n        /// <summary>\n        /// <see cref=\"RelayCommand\"/> used to bind to the back Button's Command property\n        /// for navigating to the most recent item in back navigation history, if a Frame\n        /// manages its own navigation history.\n        /// \n        /// The <see cref=\"RelayCommand\"/> is set up to use the virtual method <see cref=\"GoBack\"/>\n        /// as the Execute Action and <see cref=\"CanGoBack\"/> for CanExecute.\n        /// </summary>\n        public RelayCommand GoBackCommand\n        {\n            get\n            {\n                if (_goBackCommand == null)\n                {\n                    _goBackCommand = new RelayCommand(\n                        () => this.GoBack(),\n                        () => this.CanGoBack());\n                }\n                return _goBackCommand;\n            }\n            set\n            {\n                _goBackCommand = value;\n            }\n        }\n        /// <summary>\n        /// <see cref=\"RelayCommand\"/> used for navigating to the most recent item in \n        /// the forward navigation history, if a Frame manages its own navigation history.\n        /// \n        /// The <see cref=\"RelayCommand\"/> is set up to use the virtual method <see cref=\"GoForward\"/>\n        /// as the Execute Action and <see cref=\"CanGoForward\"/> for CanExecute.\n        /// </summary>\n        public RelayCommand GoForwardCommand\n        {\n            get\n            {\n                if (_goForwardCommand == null)\n                {\n                    _goForwardCommand = new RelayCommand(\n                        () => this.GoForward(),\n                        () => this.CanGoForward());\n                }\n                return _goForwardCommand;\n            }\n        }\n\n        /// <summary>\n        /// Virtual method used by the <see cref=\"GoBackCommand\"/> property\n        /// to determine if the <see cref=\"Frame\"/> can go back.\n        /// </summary>\n        /// <returns>\n        /// true if the <see cref=\"Frame\"/> has at least one entry \n        /// in the back navigation history.\n        /// </returns>\n        public virtual bool CanGoBack()\n        {\n            return this.Frame != null && this.Frame.CanGoBack;\n        }\n        /// <summary>\n        /// Virtual method used by the <see cref=\"GoForwardCommand\"/> property\n        /// to determine if the <see cref=\"Frame\"/> can go forward.\n        /// </summary>\n        /// <returns>\n        /// true if the <see cref=\"Frame\"/> has at least one entry \n        /// in the forward navigation history.\n        /// </returns>\n        public virtual bool CanGoForward()\n        {\n            return this.Frame != null && this.Frame.CanGoForward;\n        }\n\n        /// <summary>\n        /// Virtual method used by the <see cref=\"GoBackCommand\"/> property\n        /// to invoke the <see cref=\"Windows.UI.Xaml.Controls.Frame.GoBack\"/> method.\n        /// </summary>\n        public virtual void GoBack()\n        {\n            if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack();\n        }\n        /// <summary>\n        /// Virtual method used by the <see cref=\"GoForwardCommand\"/> property\n        /// to invoke the <see cref=\"Windows.UI.Xaml.Controls.Frame.GoForward\"/> method.\n        /// </summary>\n        public virtual void GoForward()\n        {\n            if (this.Frame != null && this.Frame.CanGoForward) this.Frame.GoForward();\n        }\n\n        /// <summary>\n        /// Invoked on every keystroke, including system keys such as Alt key combinations, when\n        /// this page is active and occupies the entire window.  Used to detect keyboard navigation\n        /// between pages even when the page itself doesn't have focus.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"e\">Event data describing the conditions that led to the event.</param>\n        private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender,\n            AcceleratorKeyEventArgs e)\n        {\n            var virtualKey = e.VirtualKey;\n\n            // Only investigate further when Left, Right, or the dedicated Previous or Next keys\n            // are pressed\n            if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown ||\n                e.EventType == CoreAcceleratorKeyEventType.KeyDown) &&\n                (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right ||\n                (int)virtualKey == 166 || (int)virtualKey == 167))\n            {\n                var coreWindow = Window.Current.CoreWindow;\n                var downState = CoreVirtualKeyStates.Down;\n                bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState;\n                bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState;\n                bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState;\n                bool noModifiers = !menuKey && !controlKey && !shiftKey;\n                bool onlyAlt = menuKey && !controlKey && !shiftKey;\n\n                if (((int)virtualKey == 166 && noModifiers) ||\n                    (virtualKey == VirtualKey.Left && onlyAlt))\n                {\n                    // When the previous key or Alt+Left are pressed navigate back\n                    e.Handled = true;\n                    this.GoBackCommand.Execute(null);\n                }\n                else if (((int)virtualKey == 167 && noModifiers) ||\n                    (virtualKey == VirtualKey.Right && onlyAlt))\n                {\n                    // When the next key or Alt+Right are pressed navigate forward\n                    e.Handled = true;\n                    this.GoForwardCommand.Execute(null);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Invoked on every mouse click, touch screen tap, or equivalent interaction when this\n        /// page is active and occupies the entire window.  Used to detect browser-style next and\n        /// previous mouse button clicks to navigate between pages.\n        /// </summary>\n        /// <param name=\"sender\">Instance that triggered the event.</param>\n        /// <param name=\"e\">Event data describing the conditions that led to the event.</param>\n        private void CoreWindow_PointerPressed(CoreWindow sender,\n            PointerEventArgs e)\n        {\n            var properties = e.CurrentPoint.Properties;\n\n            // Ignore button chords with the left, right, and middle buttons\n            if (properties.IsLeftButtonPressed || properties.IsRightButtonPressed ||\n                properties.IsMiddleButtonPressed) return;\n\n            // If back or foward are pressed (but not both) navigate appropriately\n            bool backPressed = properties.IsXButton1Pressed;\n            bool forwardPressed = properties.IsXButton2Pressed;\n            if (backPressed ^ forwardPressed)\n            {\n                e.Handled = true;\n                if (backPressed) this.GoBackCommand.Execute(null);\n                if (forwardPressed) this.GoForwardCommand.Execute(null);\n            }\n        }\n\n        #endregion\n\n        #region Process lifetime management\n\n        private String _pageKey;\n\n        /// <summary>\n        /// Register this event on the current page to populate the page\n        /// with content passed during navigation as well as any saved\n        /// state provided when recreating a page from a prior session.\n        /// </summary>\n        public event LoadStateEventHandler LoadState;\n        /// <summary>\n        /// Register this event on the current page to preserve\n        /// state associated with the current page in case the\n        /// application is suspended or the page is discarded from\n        /// the navigaqtion cache.\n        /// </summary>\n        public event SaveStateEventHandler SaveState;\n\n        /// <summary>\n        /// Invoked when this page is about to be displayed in a Frame.  \n        /// This method calls <see cref=\"LoadState\"/>, where all page specific\n        /// navigation and process lifetime management logic should be placed.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property provides the group to be displayed.</param>\n        public void OnNavigatedTo(NavigationEventArgs e)\n        {\n            var frameState = SuspensionManager.SessionStateForFrame(this.Frame);\n            this._pageKey = \"Page-\" + this.Frame.BackStackDepth;\n\n            if (e.NavigationMode == NavigationMode.New)\n            {\n                // Clear existing state for forward navigation when adding a new page to the\n                // navigation stack\n                var nextPageKey = this._pageKey;\n                int nextPageIndex = this.Frame.BackStackDepth;\n                while (frameState.Remove(nextPageKey))\n                {\n                    nextPageIndex++;\n                    nextPageKey = \"Page-\" + nextPageIndex;\n                }\n\n                // Pass the navigation parameter to the new page\n                if (this.LoadState != null)\n                {\n                    this.LoadState(this, new LoadStateEventArgs(e.Parameter, null));\n                }\n            }\n            else\n            {\n                // Pass the navigation parameter and preserved page state to the page, using\n                // the same strategy for loading suspended state and recreating pages discarded\n                // from cache\n                if (this.LoadState != null)\n                {\n                    this.LoadState(this, new LoadStateEventArgs(e.Parameter, (Dictionary<String, Object>)frameState[this._pageKey]));\n                }\n            }\n        }\n\n        /// <summary>\n        /// Invoked when this page will no longer be displayed in a Frame.\n        /// This method calls <see cref=\"SaveState\"/>, where all page specific\n        /// navigation and process lifetime management logic should be placed.\n        /// </summary>\n        /// <param name=\"e\">Event data that describes how this page was reached.  The Parameter\n        /// property provides the group to be displayed.</param>\n        public void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            var frameState = SuspensionManager.SessionStateForFrame(this.Frame);\n            var pageState = new Dictionary<String, Object>();\n            if (this.SaveState != null)\n            {\n                this.SaveState(this, new SaveStateEventArgs(pageState));\n            }\n            frameState[_pageKey] = pageState;\n        }\n\n        #endregion\n    }\n\n    /// <summary>\n    /// Represents the method that will handle the <see cref=\"NavigationHelper.LoadState\"/>event\n    /// </summary>\n    public delegate void LoadStateEventHandler(object sender, LoadStateEventArgs e);\n    /// <summary>\n    /// Represents the method that will handle the <see cref=\"NavigationHelper.SaveState\"/>event\n    /// </summary>\n    public delegate void SaveStateEventHandler(object sender, SaveStateEventArgs e);\n\n    /// <summary>\n    /// Class used to hold the event data required when a page attempts to load state.\n    /// </summary>\n    public class LoadStateEventArgs : EventArgs\n    {\n        /// <summary>\n        /// The parameter value passed to <see cref=\"Frame.Navigate(Type, Object)\"/> \n        /// when this page was initially requested.\n        /// </summary>\n        public Object NavigationParameter { get; private set; }\n        /// <summary>\n        /// A dictionary of state preserved by this page during an earlier\n        /// session.  This will be null the first time a page is visited.\n        /// </summary>\n        public Dictionary<string, Object> PageState { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"LoadStateEventArgs\"/> class.\n        /// </summary>\n        /// <param name=\"navigationParameter\">\n        /// The parameter value passed to <see cref=\"Frame.Navigate(Type, Object)\"/> \n        /// when this page was initially requested.\n        /// </param>\n        /// <param name=\"pageState\">\n        /// A dictionary of state preserved by this page during an earlier\n        /// session.  This will be null the first time a page is visited.\n        /// </param>\n        public LoadStateEventArgs(Object navigationParameter, Dictionary<string, Object> pageState)\n            : base()\n        {\n            this.NavigationParameter = navigationParameter;\n            this.PageState = pageState;\n        }\n    }\n    /// <summary>\n    /// Class used to hold the event data required when a page attempts to save state.\n    /// </summary>\n    public class SaveStateEventArgs : EventArgs\n    {\n        /// <summary>\n        /// An empty dictionary to be populated with serializable state.\n        /// </summary>\n        public Dictionary<string, Object> PageState { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"SaveStateEventArgs\"/> class.\n        /// </summary>\n        /// <param name=\"pageState\">An empty dictionary to be populated with serializable state.</param>\n        public SaveStateEventArgs(Dictionary<string, Object> pageState)\n            : base()\n        {\n            this.PageState = pageState;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/ObservableDictionary.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Windows.Foundation.Collections;\n\nnamespace Linq2TwitterDemos_WindowsStore.Common\n{\n    /// <summary>\n    /// Implementation of IObservableMap that supports reentrancy for use as a default view\n    /// model.\n    /// </summary>\n    public class ObservableDictionary : IObservableMap<string, object>\n    {\n        private class ObservableDictionaryChangedEventArgs : IMapChangedEventArgs<string>\n        {\n            public ObservableDictionaryChangedEventArgs(CollectionChange change, string key)\n            {\n                this.CollectionChange = change;\n                this.Key = key;\n            }\n\n            public CollectionChange CollectionChange { get; private set; }\n            public string Key { get; private set; }\n        }\n\n        private Dictionary<string, object> _dictionary = new Dictionary<string, object>();\n        public event MapChangedEventHandler<string, object> MapChanged;\n\n        private void InvokeMapChanged(CollectionChange change, string key)\n        {\n            var eventHandler = MapChanged;\n            if (eventHandler != null)\n            {\n                eventHandler(this, new ObservableDictionaryChangedEventArgs(change, key));\n            }\n        }\n\n        public void Add(string key, object value)\n        {\n            this._dictionary.Add(key, value);\n            this.InvokeMapChanged(CollectionChange.ItemInserted, key);\n        }\n\n        public void Add(KeyValuePair<string, object> item)\n        {\n            this.Add(item.Key, item.Value);\n        }\n\n        public bool Remove(string key)\n        {\n            if (this._dictionary.Remove(key))\n            {\n                this.InvokeMapChanged(CollectionChange.ItemRemoved, key);\n                return true;\n            }\n            return false;\n        }\n\n        public bool Remove(KeyValuePair<string, object> item)\n        {\n            object currentValue;\n            if (this._dictionary.TryGetValue(item.Key, out currentValue) &&\n                Object.Equals(item.Value, currentValue) && this._dictionary.Remove(item.Key))\n            {\n                this.InvokeMapChanged(CollectionChange.ItemRemoved, item.Key);\n                return true;\n            }\n            return false;\n        }\n\n        public object this[string key]\n        {\n            get\n            {\n                return this._dictionary[key];\n            }\n            set\n            {\n                this._dictionary[key] = value;\n                this.InvokeMapChanged(CollectionChange.ItemChanged, key);\n            }\n        }\n\n        public void Clear()\n        {\n            var priorKeys = this._dictionary.Keys.ToArray();\n            this._dictionary.Clear();\n            foreach (var key in priorKeys)\n            {\n                this.InvokeMapChanged(CollectionChange.ItemRemoved, key);\n            }\n        }\n\n        public ICollection<string> Keys\n        {\n            get { return this._dictionary.Keys; }\n        }\n\n        public bool ContainsKey(string key)\n        {\n            return this._dictionary.ContainsKey(key);\n        }\n\n        public bool TryGetValue(string key, out object value)\n        {\n            return this._dictionary.TryGetValue(key, out value);\n        }\n\n        public ICollection<object> Values\n        {\n            get { return this._dictionary.Values; }\n        }\n\n        public bool Contains(KeyValuePair<string, object> item)\n        {\n            return this._dictionary.Contains(item);\n        }\n\n        public int Count\n        {\n            get { return this._dictionary.Count; }\n        }\n\n        public bool IsReadOnly\n        {\n            get { return false; }\n        }\n\n        public IEnumerator<KeyValuePair<string, object>> GetEnumerator()\n        {\n            return this._dictionary.GetEnumerator();\n        }\n\n        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()\n        {\n            return this._dictionary.GetEnumerator();\n        }\n\n        public void CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)\n        {\n            int arraySize = array.Length;\n            foreach (var pair in this._dictionary)\n            {\n                if (arrayIndex >= arraySize) break;\n                array[arrayIndex++] = pair;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/ReadMe.txt",
    "content": "﻿The Common directory contains classes that simplify application development.\n\nClasses in the Common directory form part of your project and may be further enhanced to meet your\nneeds.  Care should be taken when altering existing methods and properties as incompatible changes\nwill require corresponding changes to code included in a variety of Visual Studio templates.  For\nexample, additional pages added to your project are written assuming that the original methods and\nproperties in Common classes are still present and that the names of the types have not changed."
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/RelayCommand.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\n\nnamespace Linq2TwitterDemos_WindowsStore.Common\n{\n    /// <summary>\n    /// A command whose sole purpose is to relay its functionality \n    /// to other objects by invoking delegates. \n    /// The default return value for the CanExecute method is 'true'.\n    /// <see cref=\"RaiseCanExecuteChanged\"/> needs to be called whenever\n    /// <see cref=\"CanExecute\"/> is expected to return a different value.\n    /// </summary>\n    public class RelayCommand : ICommand\n    {\n        private readonly Action _execute;\n        private readonly Func<bool> _canExecute;\n\n        /// <summary>\n        /// Raised when RaiseCanExecuteChanged is called.\n        /// </summary>\n        public event EventHandler CanExecuteChanged;\n\n        /// <summary>\n        /// Creates a new command that can always execute.\n        /// </summary>\n        /// <param name=\"execute\">The execution logic.</param>\n        public RelayCommand(Action execute)\n            : this(execute, null)\n        {\n        }\n\n        /// <summary>\n        /// Creates a new command.\n        /// </summary>\n        /// <param name=\"execute\">The execution logic.</param>\n        /// <param name=\"canExecute\">The execution status logic.</param>\n        public RelayCommand(Action execute, Func<bool> canExecute)\n        {\n            if (execute == null)\n                throw new ArgumentNullException(\"execute\");\n            _execute = execute;\n            _canExecute = canExecute;\n        }\n\n        /// <summary>\n        /// Determines whether this <see cref=\"RelayCommand\"/> can execute in its current state.\n        /// </summary>\n        /// <param name=\"parameter\">\n        /// Data used by the command. If the command does not require data to be passed, this object can be set to null.\n        /// </param>\n        /// <returns>true if this command can be executed; otherwise, false.</returns>\n        public bool CanExecute(object parameter)\n        {\n            return _canExecute == null ? true : _canExecute();\n        }\n\n        /// <summary>\n        /// Executes the <see cref=\"RelayCommand\"/> on the current command target.\n        /// </summary>\n        /// <param name=\"parameter\">\n        /// Data used by the command. If the command does not require data to be passed, this object can be set to null.\n        /// </param>\n        public void Execute(object parameter)\n        {\n            _execute();\n        }\n\n        /// <summary>\n        /// Method used to raise the <see cref=\"CanExecuteChanged\"/> event\n        /// to indicate that the return value of the <see cref=\"CanExecute\"/>\n        /// method has changed.\n        /// </summary>\n        public void RaiseCanExecuteChanged()\n        {\n            var handler = CanExecuteChanged;\n            if (handler != null)\n            {\n                handler(this, EventArgs.Empty);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Common/SuspensionManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Windows.ApplicationModel;\nusing Windows.Storage;\nusing Windows.Storage.Streams;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Linq2TwitterDemos_WindowsStore.Common\n{\n    /// <summary>\n    /// SuspensionManager captures global session state to simplify process lifetime management\n    /// for an application.  Note that session state will be automatically cleared under a variety\n    /// of conditions and should only be used to store information that would be convenient to\n    /// carry across sessions, but that should be discarded when an application crashes or is\n    /// upgraded.\n    /// </summary>\n    internal sealed class SuspensionManager\n    {\n        private static Dictionary<string, object> _sessionState = new Dictionary<string, object>();\n        private static List<Type> _knownTypes = new List<Type>();\n        private const string sessionStateFilename = \"_sessionState.xml\";\n\n        /// <summary>\n        /// Provides access to global session state for the current session.  This state is\n        /// serialized by <see cref=\"SaveAsync\"/> and restored by\n        /// <see cref=\"RestoreAsync\"/>, so values must be serializable by\n        /// <see cref=\"DataContractSerializer\"/> and should be as compact as possible.  Strings\n        /// and other self-contained data types are strongly recommended.\n        /// </summary>\n        public static Dictionary<string, object> SessionState\n        {\n            get { return _sessionState; }\n        }\n\n        /// <summary>\n        /// List of custom types provided to the <see cref=\"DataContractSerializer\"/> when\n        /// reading and writing session state.  Initially empty, additional types may be\n        /// added to customize the serialization process.\n        /// </summary>\n        public static List<Type> KnownTypes\n        {\n            get { return _knownTypes; }\n        }\n\n        /// <summary>\n        /// Save the current <see cref=\"SessionState\"/>.  Any <see cref=\"Frame\"/> instances\n        /// registered with <see cref=\"RegisterFrame\"/> will also preserve their current\n        /// navigation stack, which in turn gives their active <see cref=\"Page\"/> an opportunity\n        /// to save its state.\n        /// </summary>\n        /// <returns>An asynchronous task that reflects when session state has been saved.</returns>\n        public static async Task SaveAsync()\n        {\n            try\n            {\n                // Save the navigation state for all registered frames\n                foreach (var weakFrameReference in _registeredFrames)\n                {\n                    Frame frame;\n                    if (weakFrameReference.TryGetTarget(out frame))\n                    {\n                        SaveFrameNavigationState(frame);\n                    }\n                }\n\n                // Serialize the session state synchronously to avoid asynchronous access to shared\n                // state\n                MemoryStream sessionData = new MemoryStream();\n                DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);\n                serializer.WriteObject(sessionData, _sessionState);\n\n                // Get an output stream for the SessionState file and write the state asynchronously\n                StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename, CreationCollisionOption.ReplaceExisting);\n                using (Stream fileStream = await file.OpenStreamForWriteAsync())\n                {\n                    sessionData.Seek(0, SeekOrigin.Begin);\n                    await sessionData.CopyToAsync(fileStream);\n                }\n            }\n            catch (Exception e)\n            {\n                throw new SuspensionManagerException(e);\n            }\n        }\n\n        /// <summary>\n        /// Restores previously saved <see cref=\"SessionState\"/>.  Any <see cref=\"Frame\"/> instances\n        /// registered with <see cref=\"RegisterFrame\"/> will also restore their prior navigation\n        /// state, which in turn gives their active <see cref=\"Page\"/> an opportunity restore its\n        /// state.\n        /// </summary>\n        /// <returns>An asynchronous task that reflects when session state has been read.  The\n        /// content of <see cref=\"SessionState\"/> should not be relied upon until this task\n        /// completes.</returns>\n        public static async Task RestoreAsync()\n        {\n            _sessionState = new Dictionary<String, Object>();\n\n            try\n            {\n                // Get the input stream for the SessionState file\n                StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(sessionStateFilename);\n                using (IInputStream inStream = await file.OpenSequentialReadAsync())\n                {\n                    // Deserialize the Session State\n                    DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);\n                    _sessionState = (Dictionary<string, object>)serializer.ReadObject(inStream.AsStreamForRead());\n                }\n\n                // Restore any registered frames to their saved state\n                foreach (var weakFrameReference in _registeredFrames)\n                {\n                    Frame frame;\n                    if (weakFrameReference.TryGetTarget(out frame))\n                    {\n                        frame.ClearValue(FrameSessionStateProperty);\n                        RestoreFrameNavigationState(frame);\n                    }\n                }\n            }\n            catch (Exception e)\n            {\n                throw new SuspensionManagerException(e);\n            }\n        }\n\n        private static DependencyProperty FrameSessionStateKeyProperty =\n            DependencyProperty.RegisterAttached(\"_FrameSessionStateKey\", typeof(String), typeof(SuspensionManager), null);\n        private static DependencyProperty FrameSessionStateProperty =\n            DependencyProperty.RegisterAttached(\"_FrameSessionState\", typeof(Dictionary<String, Object>), typeof(SuspensionManager), null);\n        private static List<WeakReference<Frame>> _registeredFrames = new List<WeakReference<Frame>>();\n\n        /// <summary>\n        /// Registers a <see cref=\"Frame\"/> instance to allow its navigation history to be saved to\n        /// and restored from <see cref=\"SessionState\"/>.  Frames should be registered once\n        /// immediately after creation if they will participate in session state management.  Upon\n        /// registration if state has already been restored for the specified key\n        /// the navigation history will immediately be restored.  Subsequent invocations of\n        /// <see cref=\"RestoreAsync\"/> will also restore navigation history.\n        /// </summary>\n        /// <param name=\"frame\">An instance whose navigation history should be managed by\n        /// <see cref=\"SuspensionManager\"/></param>\n        /// <param name=\"sessionStateKey\">A unique key into <see cref=\"SessionState\"/> used to\n        /// store navigation-related information.</param>\n        public static void RegisterFrame(Frame frame, String sessionStateKey)\n        {\n            if (frame.GetValue(FrameSessionStateKeyProperty) != null)\n            {\n                throw new InvalidOperationException(\"Frames can only be registered to one session state key\");\n            }\n\n            if (frame.GetValue(FrameSessionStateProperty) != null)\n            {\n                throw new InvalidOperationException(\"Frames must be either be registered before accessing frame session state, or not registered at all\");\n            }\n\n            // Use a dependency property to associate the session key with a frame, and keep a list of frames whose\n            // navigation state should be managed\n            frame.SetValue(FrameSessionStateKeyProperty, sessionStateKey);\n            _registeredFrames.Add(new WeakReference<Frame>(frame));\n\n            // Check to see if navigation state can be restored\n            RestoreFrameNavigationState(frame);\n        }\n\n        /// <summary>\n        /// Disassociates a <see cref=\"Frame\"/> previously registered by <see cref=\"RegisterFrame\"/>\n        /// from <see cref=\"SessionState\"/>.  Any navigation state previously captured will be\n        /// removed.\n        /// </summary>\n        /// <param name=\"frame\">An instance whose navigation history should no longer be\n        /// managed.</param>\n        public static void UnregisterFrame(Frame frame)\n        {\n            // Remove session state and remove the frame from the list of frames whose navigation\n            // state will be saved (along with any weak references that are no longer reachable)\n            SessionState.Remove((String)frame.GetValue(FrameSessionStateKeyProperty));\n            _registeredFrames.RemoveAll((weakFrameReference) =>\n            {\n                Frame testFrame;\n                return !weakFrameReference.TryGetTarget(out testFrame) || testFrame == frame;\n            });\n        }\n\n        /// <summary>\n        /// Provides storage for session state associated with the specified <see cref=\"Frame\"/>.\n        /// Frames that have been previously registered with <see cref=\"RegisterFrame\"/> have\n        /// their session state saved and restored automatically as a part of the global\n        /// <see cref=\"SessionState\"/>.  Frames that are not registered have transient state\n        /// that can still be useful when restoring pages that have been discarded from the\n        /// navigation cache.\n        /// </summary>\n        /// <remarks>Apps may choose to rely on <see cref=\"NavigationHelper\"/> to manage\n        /// page-specific state instead of working with frame session state directly.</remarks>\n        /// <param name=\"frame\">The instance for which session state is desired.</param>\n        /// <returns>A collection of state subject to the same serialization mechanism as\n        /// <see cref=\"SessionState\"/>.</returns>\n        public static Dictionary<String, Object> SessionStateForFrame(Frame frame)\n        {\n            var frameState = (Dictionary<String, Object>)frame.GetValue(FrameSessionStateProperty);\n\n            if (frameState == null)\n            {\n                var frameSessionKey = (String)frame.GetValue(FrameSessionStateKeyProperty);\n                if (frameSessionKey != null)\n                {\n                    // Registered frames reflect the corresponding session state\n                    if (!_sessionState.ContainsKey(frameSessionKey))\n                    {\n                        _sessionState[frameSessionKey] = new Dictionary<String, Object>();\n                    }\n                    frameState = (Dictionary<String, Object>)_sessionState[frameSessionKey];\n                }\n                else\n                {\n                    // Frames that aren't registered have transient state\n                    frameState = new Dictionary<String, Object>();\n                }\n                frame.SetValue(FrameSessionStateProperty, frameState);\n            }\n            return frameState;\n        }\n\n        private static void RestoreFrameNavigationState(Frame frame)\n        {\n            var frameState = SessionStateForFrame(frame);\n            if (frameState.ContainsKey(\"Navigation\"))\n            {\n                frame.SetNavigationState((String)frameState[\"Navigation\"]);\n            }\n        }\n\n        private static void SaveFrameNavigationState(Frame frame)\n        {\n            var frameState = SessionStateForFrame(frame);\n            frameState[\"Navigation\"] = frame.GetNavigationState();\n        }\n    }\n    public class SuspensionManagerException : Exception\n    {\n        public SuspensionManagerException()\n        {\n        }\n\n        public SuspensionManagerException(Exception e)\n            : base(\"SuspensionManager failed\", e)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/FilterStreamViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    class FilterStreamViewModel : StreamViewModel\n    {\n        public override async void OnStart(object obj)\n        {\n            int count = 0;\n\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.Filter &&\n                       strm.Track == \"twitter\"\n                 select strm)\n                .StartAsync(async strm =>\n                {\n                    Show(strm.Content);\n\n                    if (count++ >= 50)\n                        strm.CloseStream();\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/JsonContent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    public class JsonContent\n    {\n        public string Content { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/SampleStreamViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    class SampleStreamViewModel : StreamViewModel\n    {\n        public override async void OnStart(object obj)\n        {\n            int count = 0;\n\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.Sample\n                 select strm)\n                .StartAsync(async strm =>\n                {\n                    Show(strm.Content);\n\n                    if (count++ >= 5)\n                        strm.CloseStream();\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/StreamViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing Windows.ApplicationModel.Core;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    abstract class StreamViewModel : INotifyPropertyChanged\n    {        \n        public StreamViewModel()\n        {\n            JsonContent = new ObservableCollection<JsonContent>();\n            StartCommand = new TwitterCommand<object>(OnStart);\n        }\n\n        public ObservableCollection<JsonContent> JsonContent { get; set; }\n\n        public TwitterCommand<object> StartCommand { get; set; }\n\n        public abstract void OnStart(object obj);\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected void SetPropertyChanged(string propertyName)\n        {\n            if (PropertyChanged != null)\n                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));\n        }\n\n        protected async void Show(string content)\n        {\n            var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;\n\n            await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>\n            {\n                JsonContent.Add(new JsonContent { Content = content });\n            });            \n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/Tweet.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    public class Tweet\n    {\n        public string Name { get; set; }\n        public string Text { get; set; }\n        public string ImageUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    class TweetViewModel : INotifyPropertyChanged\n    {\n        public List<Tweet> Tweets { get; set; }\n\n        public TweetViewModel()\n        {\n            RefreshCommand = new TwitterCommand<object>(OnRefresh);\n        }\n\n        public TwitterCommand<object> RefreshCommand { get; set; }\n\n        async void OnRefresh(object obj)\n        {\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            var timelineResponse =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home\n                 select tweet)\n                .ToListAsync();\n\n            Tweets =\n                (from tweet in timelineResponse\n                 select new Tweet\n                 {\n                     Name = tweet.User.ScreenNameResponse,\n                     Text = tweet.Text,\n                     ImageUrl = tweet.User.ProfileImageUrl\n                 })\n                .ToList();\n\n            if (PropertyChanged != null)\n            {\n                PropertyChanged(this, new PropertyChangedEventArgs(\"Tweets\"));\n            }\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/TwitterCommand.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Windows.Input;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    class  TwitterCommand<T> : ICommand\n    {\n        readonly Action<T> callback;\n\n        public TwitterCommand(Action<T> handler)\n        {\n            callback = handler;\n        }\n\n        public bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public event EventHandler CanExecuteChanged;\n\n        public void Execute(object parameter)\n        {\n            if (callback != null) callback((T)parameter);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/TwitterData.json",
    "content": "{\"Groups\":[\n  {\n    \"UniqueId\": \"Statuses\",\n    \"Title\": \"Statuses\",\n    \"Subtitle\": \"Tweets and Timelines\",\n    \"ImagePath\": \"Assets/DarkGray.png\",\n    \"Description\" : \"All commands and queries related to statuses\",\n    \"Items\":\n    [\n      {\n        \"UniqueId\": \"Linq2TwitterDemos_WindowsStore.StatusDemos.TweetDemo,Linq2TwitterDemos_WindowsStore\",\n        \"Title\": \"Tweet Demo\",\n        \"Subtitle\": \"Send a tweet\",\n        \"ImagePath\": \"Assets/LightGray.png\",\n        \"Description\" : \"Updates the user's status.\",\n        \"Content\" : \"This will update the user's status and return the new status. You'll see the new status appear in a message box.\"\n      },\n      {\n        \"UniqueId\": \"Linq2TwitterDemos_WindowsStore.StatusDemos.HomeTimelineDemo,Linq2TwitterDemos_WindowsStore\",\n        \"Title\": \"Home Timeline Demo\",\n        \"Subtitle\": \"Show home timeline\",\n        \"ImagePath\": \"Assets/DarkGray.png\",\n        \"Description\" : \"Shows list with home timeline.\",\n        \"Content\" : \"This page lets you click a button to refresh the page. At that time, the page will perform a query that obtains the home timeline of the authorizing user.\"\n      }\n    ]\n  },\n  {\n    \"UniqueId\": \"Streams\",\n    \"Title\": \"Streams\",\n    \"Subtitle\": \"Receive data from streams.\",\n    \"ImagePath\": \"Assets/LightGray.png\",\n    \"Description\" : \"Streams allow you to view real-time data from Twitter and is more efficient than performing REST API queries.\",\n    \"Items\":\n    [\n      {\n        \"UniqueId\": \"Linq2TwitterDemos_WindowsStore.StreamDemos.FilterStreamDemo,Linq2TwitterDemos_WindowsStore\",\n        \"Title\": \"Filter Stream Demo\",\n        \"Subtitle\": \"Show filtered tweets\",\n        \"ImagePath\": \"Assets/DarkGray.png\",\n        \"Description\" : \"Streams data matching specified criteria.\",\n        \"Content\" : \"The filter stream allows you to specify a query string to return tweets for. You can also filter a stream by users or location.\"\n      },\n      {\n        \"UniqueId\": \"Linq2TwitterDemos_WindowsStore.StreamDemos.SampleStreamDemo,Linq2TwitterDemos_WindowsStore\",\n        \"Title\": \"Sample Stream Demo\",\n        \"Subtitle\": \"Show random tweets\",\n        \"ImagePath\": \"Assets/DarkGray.png\",\n        \"Description\" : \"Streams a random sample of Twitter data.\",\n        \"Content\" : \"The Sample stream provides approximately 1% of the Twitter stream and is a random sample from the Twitter API.\"\n      },\n      {\n        \"UniqueId\": \"Linq2TwitterDemos_WindowsStore.StreamDemos.UserStreamDemo,Linq2TwitterDemos_WindowsStore\",\n        \"Title\": \"User Stream Demo\",\n        \"Subtitle\": \"Show tweets for a user\",\n        \"ImagePath\": \"Assets/DarkGray.png\",\n        \"Description\" : \"Streams data for a user.\",\n        \"Content\" : \"The user stream lets you stream activity data for a user's account.\"\n      }\n    ]\n  }\n]\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/TwitterDataSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Data.Json;\nusing Windows.Storage;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Imaging;\n\n// The data model defined by this file serves as a representative example of a strongly-typed\n// model.  The property names chosen coincide with data bindings in the standard item templates.\n//\n// Applications may use this model as a starting point and build on it, or discard it entirely and\n// replace it with something appropriate to their needs. If using this model, you might improve app \n// responsiveness by initiating the data loading task in the code behind for App.xaml when the app \n// is first launched.\n\nnamespace Linq2TwitterDemos_WindowsStore.Data\n{\n    /// <summary>\n    /// Twitter item data model.\n    /// </summary>\n    public class TwitterDataItem\n    {\n        public TwitterDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content)\n        {\n            this.UniqueId = uniqueId;\n            this.Title = title;\n            this.Subtitle = subtitle;\n            this.Description = description;\n            this.ImagePath = imagePath;\n            this.Content = content;\n        }\n\n        public string UniqueId { get; private set; }\n        public string Title { get; private set; }\n        public string Subtitle { get; private set; }\n        public string Description { get; private set; }\n        public string ImagePath { get; private set; }\n        public string Content { get; private set; }\n\n        public override string ToString()\n        {\n            return this.Title;\n        }\n    }\n\n    /// <summary>\n    /// Generic group data model.\n    /// </summary>\n    public class TwitterDataGroup\n    {\n        public TwitterDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description)\n        {\n            this.UniqueId = uniqueId;\n            this.Title = title;\n            this.Subtitle = subtitle;\n            this.Description = description;\n            this.ImagePath = imagePath;\n            this.Items = new ObservableCollection<TwitterDataItem>();\n        }\n\n        public string UniqueId { get; private set; }\n        public string Title { get; private set; }\n        public string Subtitle { get; private set; }\n        public string Description { get; private set; }\n        public string ImagePath { get; private set; }\n        public ObservableCollection<TwitterDataItem> Items { get; private set; }\n\n        public override string ToString()\n        {\n            return this.Title;\n        }\n    }\n\n    /// <summary>\n    /// Creates a collection of groups and items with content read from a static json file.\n    /// \n    /// TwitterDataSource initializes with data read from a static json file included in the \n    /// project.  This provides sample data at both design-time and run-time.\n    /// </summary>\n    public sealed class TwitterDataSource\n    {\n        private static TwitterDataSource twitterDataSource = new TwitterDataSource();\n\n        private ObservableCollection<TwitterDataGroup> _groups = new ObservableCollection<TwitterDataGroup>();\n        public ObservableCollection<TwitterDataGroup> Groups\n        {\n            get { return this._groups; }\n        }\n\n        public static async Task<IEnumerable<TwitterDataGroup>> GetGroupsAsync()\n        {\n            await twitterDataSource.GetTwitterDataAsync();\n\n            return twitterDataSource.Groups;\n        }\n\n        public static async Task<TwitterDataGroup> GetGroupAsync(string uniqueId)\n        {\n            await twitterDataSource.GetTwitterDataAsync();\n            // Simple linear search is acceptable for small data sets\n            var matches = twitterDataSource.Groups.Where((group) => group.UniqueId.Equals(uniqueId));\n            if (matches.Count() == 1) return matches.First();\n            return null;\n        }\n\n        public static async Task<TwitterDataItem> GetItemAsync(string uniqueId)\n        {\n            await twitterDataSource.GetTwitterDataAsync();\n            // Simple linear search is acceptable for small data sets\n            var matches = twitterDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));\n            if (matches.Count() == 1) return matches.First();\n            return null;\n        }\n\n        private async Task GetTwitterDataAsync()\n        {\n            if (this._groups.Count != 0)\n                return;\n\n            Uri dataUri = new Uri(\"ms-appx:///DataModel/TwitterData.json\");\n\n            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);\n            string jsonText = await FileIO.ReadTextAsync(file);\n            JsonObject jsonObject = JsonObject.Parse(jsonText);\n            JsonArray jsonArray = jsonObject[\"Groups\"].GetArray();\n\n            foreach (JsonValue groupValue in jsonArray)\n            {\n                JsonObject groupObject = groupValue.GetObject();\n                TwitterDataGroup group = new TwitterDataGroup(groupObject[\"UniqueId\"].GetString(),\n                                                            groupObject[\"Title\"].GetString(),\n                                                            groupObject[\"Subtitle\"].GetString(),\n                                                            groupObject[\"ImagePath\"].GetString(),\n                                                            groupObject[\"Description\"].GetString());\n\n                foreach (JsonValue itemValue in groupObject[\"Items\"].GetArray())\n                {\n                    JsonObject itemObject = itemValue.GetObject();\n                    group.Items.Add(new TwitterDataItem(itemObject[\"UniqueId\"].GetString(),\n                                                       itemObject[\"Title\"].GetString(),\n                                                       itemObject[\"Subtitle\"].GetString(),\n                                                       itemObject[\"ImagePath\"].GetString(),\n                                                       itemObject[\"Description\"].GetString(),\n                                                       itemObject[\"Content\"].GetString()));\n                }\n                this.Groups.Add(group);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/DataModel/UserStreamViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsStore.DataModel\n{\n    class UserStreamViewModel : StreamViewModel\n    {\n        public override async void OnStart(object obj)\n        {\n            int count = 0;\n\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.User\n                 select strm)\n                .StartAsync(async strm =>\n                {\n                    if (strm.Content.Trim() != string.Empty)\n                    {\n                        Show(strm.Content);\n\n                        if (count++ >= 5)\n                            strm.CloseStream();\n                    }\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/GroupDetailPage.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.GroupDetailPage\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore\"\n    xmlns:data=\"using:Linq2TwitterDemos_WindowsStore.Data\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <!-- Collection of items displayed by this page -->\n        <CollectionViewSource\n            x:Name=\"itemsViewSource\"\n            Source=\"{Binding Items}\"\n            d:Source=\"{Binding Groups[0].Items, Source={d:DesignData Source=/DataModel/SampleData.json, Type=data:SampleDataSource}}\"/>\n    </Page.Resources>\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\"\n        DataContext=\"{Binding Group}\"\n        d:DataContext=\"{Binding Groups[0], Source={d:DesignData Source=/DataModel/SampleData.json, Type=data:SampleDataSource}}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!-- Horizontal scrolling grid -->\n\n        <GridView\n            x:Name=\"itemGridView\"\n            AutomationProperties.AutomationId=\"ItemGridView\"\n            AutomationProperties.Name=\"Items In Group\"\n            TabIndex=\"1\"\n            Grid.RowSpan=\"2\"\n            Padding=\"120,126,120,50\"\n            ItemsSource=\"{Binding Source={StaticResource itemsViewSource}}\"\n            SelectionMode=\"None\"\n            IsSwipeEnabled=\"false\"\n            IsItemClickEnabled=\"True\"\n            ItemClick=\"ItemView_ItemClick\">\n            <GridView.ItemTemplate>\n                <DataTemplate>\n                    <Grid Height=\"110\" Width=\"480\" Margin=\"10\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n                        <Border Background=\"{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}\" Width=\"110\" Height=\"110\">\n                            <Image Source=\"{Binding ImagePath}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n                        </Border>\n                        <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"10,0,0,0\">\n                            <TextBlock Text=\"{Binding Title}\" Style=\"{StaticResource TitleTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\n                            <TextBlock Text=\"{Binding Subtitle}\" Style=\"{StaticResource CaptionTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\n                            <TextBlock Text=\"{Binding Description}\" Style=\"{StaticResource BodyTextBlockStyle}\" MaxHeight=\"60\"/>\n                        </StackPanel>\n                    </Grid>\n                </DataTemplate>\n            </GridView.ItemTemplate>\n            <GridView.Header>\n                <StackPanel Width=\"480\" Margin=\"0,4,14,0\">\n                    <TextBlock Text=\"{Binding Subtitle}\" Margin=\"0,0,0,20\" Style=\"{StaticResource SubheaderTextBlockStyle}\" MaxHeight=\"60\"/>\n                    <Image Source=\"{Binding ImagePath}\" Height=\"400\" Margin=\"0,0,0,20\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n                    <TextBlock Text=\"{Binding Description}\" Margin=\"0,0,0,0\" Style=\"{StaticResource BodyTextBlockStyle}\"/>\n                </StackPanel>\n            </GridView.Header>\n            <GridView.ItemContainerStyle>\n                <Style TargetType=\"FrameworkElement\">\n                    <Setter Property=\"Margin\" Value=\"52,0,0,2\"/>\n                </Style>\n            </GridView.ItemContainerStyle>\n        </GridView>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"{Binding Title}\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/GroupDetailPage.xaml.cs",
    "content": "﻿using Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.Data;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Group Detail Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234229\n\nnamespace Linq2TwitterDemos_WindowsStore\n{\n    /// <summary>\n    /// A page that displays an overview of a single group, including a preview of the items\n    /// within the group.\n    /// </summary>\n    public sealed partial class GroupDetailPage : Page\n    {\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n\n        public GroupDetailPage()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation.  Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session.  The state will be null the first time a page is visited.</param>\n        private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            // TODO: Create an appropriate data model for your problem domain to replace the sample data\n            var group = await TwitterDataSource.GetGroupAsync((String)e.NavigationParameter);\n            this.DefaultViewModel[\"Group\"] = group;\n            this.DefaultViewModel[\"Items\"] = group.Items;\n        }\n\n        /// <summary>\n        /// Invoked when an item is clicked.\n        /// </summary>\n        /// <param name=\"sender\">The GridView displaying the item clicked.</param>\n        /// <param name=\"e\">Event data that describes the item clicked.</param>\n        void ItemView_ItemClick(object sender, ItemClickEventArgs e)\n        {\n            // Navigate to the appropriate destination page, configuring the new page\n            // by passing required information as a navigation parameter\n            var itemId = ((TwitterDataItem)e.ClickedItem).UniqueId;\n            this.Frame.Navigate(Type.GetType(itemId));\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/GroupedItemsPage.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.GroupedItemsPage\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore\"\n    xmlns:data=\"using:Linq2TwitterDemos_WindowsStore.Data\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <x:String x:Key=\"ChevronGlyph\">&#xE26B;</x:String>\n        <!--\n            Collection of grouped items displayed by this page, bound to a subset\n            of the complete item list because items in groups cannot be virtualized\n        -->\n        <CollectionViewSource\n            x:Name=\"groupedItemsViewSource\"\n            Source=\"{Binding Groups}\"\n            IsSourceGrouped=\"true\"\n            ItemsPath=\"Items\"\n            d:Source=\"{Binding Groups, Source={d:DesignData Source=/DataModel/SampleData.json, Type=data:SampleDataSource}}\"/>\n    </Page.Resources>\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!-- Horizontal scrolling grid -->\n        <GridView\n            x:Name=\"itemGridView\"\n            AutomationProperties.AutomationId=\"ItemGridView\"\n            AutomationProperties.Name=\"Grouped Items\"\n            Grid.RowSpan=\"2\"\n            Padding=\"116,137,40,46\"\n            ItemsSource=\"{Binding Source={StaticResource groupedItemsViewSource}}\"\n            SelectionMode=\"None\"\n            IsSwipeEnabled=\"false\"\n            IsItemClickEnabled=\"True\"\n            ItemClick=\"ItemView_ItemClick\">\n            <GridView.ItemTemplate>\n                <DataTemplate>\n                    <Grid HorizontalAlignment=\"Left\" Width=\"250\" Height=\"250\">\n                        <Border Background=\"{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}\">\n                            <Image Source=\"{Binding ImagePath}\" Stretch=\"UniformToFill\" AutomationProperties.Name=\"{Binding Title}\"/>\n                        </Border>\n                        <StackPanel VerticalAlignment=\"Bottom\" Background=\"{ThemeResource ListViewItemOverlayBackgroundThemeBrush}\">\n                            <TextBlock Text=\"{Binding Title}\" Foreground=\"{ThemeResource ListViewItemOverlayForegroundThemeBrush}\" Style=\"{StaticResource TitleTextBlockStyle}\" Height=\"60\" Margin=\"15,0,15,0\"/>\n                            <TextBlock Text=\"{Binding Subtitle}\" Foreground=\"{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}\" Style=\"{StaticResource CaptionTextBlockStyle}\" TextWrapping=\"NoWrap\" Margin=\"15,0,15,10\"/>\n                        </StackPanel>\n                    </Grid>\n                </DataTemplate>\n            </GridView.ItemTemplate>\n            <GridView.ItemsPanel>\n                <ItemsPanelTemplate>\n                    <ItemsWrapGrid GroupPadding=\"0,0,70,0\"/>\n                </ItemsPanelTemplate>\n            </GridView.ItemsPanel>\n            <GridView.GroupStyle>\n                <GroupStyle>\n                    <GroupStyle.HeaderTemplate>\n                        <DataTemplate>\n                            <Grid Margin=\"0,0,0,2\">\n                                <Button Foreground=\"{ThemeResource ApplicationHeaderForegroundThemeBrush}\"\n                                    AutomationProperties.Name=\"Group Title\"\n                                    Click=\"Header_Click\"\n                                    Style=\"{StaticResource TextBlockButtonStyle}\" >\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <TextBlock Text=\"{Binding Title}\" Margin=\"0,-11,10,10\" Style=\"{StaticResource SubheaderTextBlockStyle}\" TextWrapping=\"NoWrap\" />\n                                        <TextBlock Text=\"{StaticResource ChevronGlyph}\" FontFamily=\"Segoe UI Symbol\" Margin=\"0,-11,0,10\" Style=\"{StaticResource SubheaderTextBlockStyle}\" TextWrapping=\"NoWrap\" />\n                                    </StackPanel>\n                                </Button>\n                            </Grid>\n                        </DataTemplate>\n                    </GroupStyle.HeaderTemplate>\n                </GroupStyle>\n            </GridView.GroupStyle>\n        </GridView>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"{StaticResource AppName}\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/GroupedItemsPage.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.Data;\nusing LinqToTwitter;\nusing LinqToTwitter.WindowsStore;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Grouped Items Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234231\n\nnamespace Linq2TwitterDemos_WindowsStore\n{\n    /// <summary>\n    /// A page that displays a grouped collection of items.\n    /// </summary>\n    public sealed partial class GroupedItemsPage : Page\n    {\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        public GroupedItemsPage()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation.  Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session.  The state will be null the first time a page is visited.</param>\n        async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            if (SharedState.Authorizer == null)\n            {\n                var auth = new WindowsStoreAuthorizer\n                {\n                    CredentialStore = new InMemoryCredentialStore\n                    {\n                        ConsumerKey = \"\",\n                        ConsumerSecret = \"\"\n                    },\n                    Callback = \"http://linqtotwitter.codeplex.com/\"\n                };\n\n                await auth.AuthorizeAsync();\n\n                SharedState.Authorizer = auth;\n            }\n\n            var twitterDataGroups = await TwitterDataSource.GetGroupsAsync();\n            this.DefaultViewModel[\"Groups\"] = twitterDataGroups;\n        }\n\n        /// <summary>\n        /// Invoked when a group header is clicked.\n        /// </summary>\n        /// <param name=\"sender\">The Button used as a group header for the selected group.</param>\n        /// <param name=\"e\">Event data that describes how the click was initiated.</param>\n        void Header_Click(object sender, RoutedEventArgs e)\n        {\n            // Determine what group the Button instance represents\n            var group = (sender as FrameworkElement).DataContext;\n\n            // Navigate to the appropriate destination page, configuring the new page\n            // by passing required information as a navigation parameter\n            this.Frame.Navigate(typeof(GroupDetailPage), ((TwitterDataGroup)group).UniqueId);\n        }\n\n        /// <summary>\n        /// Invoked when an item within a group is clicked.\n        /// </summary>\n        /// <param name=\"sender\">The GridView (or ListView when the application is snapped)\n        /// displaying the item clicked.</param>\n        /// <param name=\"e\">Event data that describes the item clicked.</param>\n        void ItemView_ItemClick(object sender, ItemClickEventArgs e)\n        {\n            // Navigate to the appropriate destination page, configuring the new page\n            // by passing required information as a navigation parameter\n            var itemId = ((TwitterDataItem)e.ClickedItem).UniqueId;\n            this.Frame.Navigate(Type.GetType(itemId));\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/ItemDetailPage.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.ItemDetailPage\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore\"\n    xmlns:data=\"using:Linq2TwitterDemos_WindowsStore.Data\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\"\n        DataContext=\"{Binding Item}\"\n        d:DataContext=\"{Binding Groups[0].Items[0], Source={d:DesignData Source=/DataModel/SampleData.json, Type=data:SampleDataSource}}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--\n            TODO: Content should be placed within the following grid \n                  to show details for the current item\n        -->\n        <Grid Grid.Row=\"1\" x:Name=\"contentRegion\"/>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"{Binding Title}\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/ItemDetailPage.xaml.cs",
    "content": "﻿using Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.Data;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Item Detail Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234232\n\nnamespace Linq2TwitterDemos_WindowsStore\n{\n    /// <summary>\n    /// A page that displays details for a single item within a group.\n    /// </summary>\n    public sealed partial class ItemDetailPage : Page\n    {\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        public ItemDetailPage()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation.  Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session.  The state will be null the first time a page is visited.</param>\n        private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            // TODO: Create an appropriate data model for your problem domain to replace the sample data\n            var item = await TwitterDataSource.GetItemAsync((String)e.NavigationParameter);\n            this.DefaultViewModel[\"Item\"] = item;\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Linq2TwitterDemos_WindowsStore.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_WindowsStore</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_WindowsStore</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformVersion>8.1</TargetPlatformVersion>\n    <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>Linq2TwitterDemos_WindowsStore_TemporaryKey.pfx</PackageCertificateKeyFile>\n    <NuGetPackageImportStamp>4481c33e</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitter.WindowsStore\\LinqToTwitter.WindowsStore.csproj\">\n      <Project>{aaa9aebb-50da-4693-a82b-184f7455b4f0}</Project>\n      <Name>LinqToTwitter.WindowsStore</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Common\\BooleanNegationConverter.cs\" />\n    <Compile Include=\"Common\\BooleanToVisibilityConverter.cs\" />\n    <Compile Include=\"DataModel\\SampleStreamViewModel.cs\" />\n    <Compile Include=\"DataModel\\FilterStreamViewModel.cs\" />\n    <Compile Include=\"DataModel\\JsonContent.cs\" />\n    <Compile Include=\"DataModel\\StreamViewModel.cs\" />\n    <Compile Include=\"DataModel\\Tweet.cs\" />\n    <Compile Include=\"DataModel\\TweetViewModel.cs\" />\n    <Compile Include=\"DataModel\\TwitterCommand.cs\" />\n    <Compile Include=\"DataModel\\UserStreamViewModel.cs\" />\n    <Compile Include=\"GroupedItemsPage.xaml.cs\">\n      <DependentUpon>GroupedItemsPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"GroupDetailPage.xaml.cs\">\n      <DependentUpon>GroupDetailPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"ItemDetailPage.xaml.cs\">\n      <DependentUpon>ItemDetailPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"DataModel\\TwitterDataSource.cs\" />\n    <Compile Include=\"Common\\SuspensionManager.cs\" />\n    <Compile Include=\"Common\\NavigationHelper.cs\" />\n    <Compile Include=\"Common\\RelayCommand.cs\" />\n    <Compile Include=\"Common\\ObservableDictionary.cs\" />\n    <Compile Include=\"SharedState.cs\" />\n    <Compile Include=\"StatusDemos\\HomeTimelineDemo.xaml.cs\">\n      <DependentUpon>HomeTimelineDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\TweetDemo.xaml.cs\">\n      <DependentUpon>TweetDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StreamDemos\\FilterStreamDemo.xaml.cs\">\n      <DependentUpon>FilterStreamDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StreamDemos\\SampleStreamDemo.xaml.cs\">\n      <DependentUpon>SampleStreamDemo.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"StreamDemos\\UserStreamDemo.xaml.cs\">\n      <DependentUpon>UserStreamDemo.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"Common\\ReadMe.txt\" />\n    <None Include=\"Linq2TwitterDemos_WindowsStore_TemporaryKey.pfx\" />\n    <Content Include=\"DataModel\\TwitterData.json\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Assets\\Logo.scale-100.png\" />\n    <Content Include=\"Assets\\SmallLogo.scale-100.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-100.png\" />\n    <Content Include=\"Assets\\StoreLogo.scale-100.png\" />\n    <Content Include=\"Assets\\LightGray.png\" />\n    <Content Include=\"Assets\\MediumGray.png\" />\n    <Content Include=\"Assets\\DarkGray.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"GroupedItemsPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"GroupDetailPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"ItemDetailPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"StatusDemos\\HomeTimelineDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StatusDemos\\TweetDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StreamDemos\\FilterStreamDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StreamDemos\\SampleStreamDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n    <Page Include=\"StreamDemos\\UserStreamDemo.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' \">\n    <VisualStudioVersion>12.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/2010/manifest\" xmlns:m2=\"http://schemas.microsoft.com/appx/2013/manifest\">\n\n  <Identity Name=\"8e6d50e1-5094-4cf8-9085-3df9b8cc73d0\"\n            Publisher=\"CN=jmayo\"\n            Version=\"1.0.0.0\" />\n\n  <Properties>\n    <DisplayName>Linq2TwitterDemos_WindowsStore</DisplayName>\n    <PublisherDisplayName>jmayo</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Prerequisites>\n    <OSMinVersion>6.3.0</OSMinVersion>\n    <OSMaxVersionTested>6.3.0</OSMaxVersionTested>\n  </Prerequisites>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n        Executable=\"$targetnametoken$.exe\"\n        EntryPoint=\"Linq2TwitterDemos_WindowsStore.App\">\n        <m2:VisualElements\n            DisplayName=\"Linq2TwitterDemos_WindowsStore\"\n            Square150x150Logo=\"Assets\\Logo.png\"\n            Square30x30Logo=\"Assets\\SmallLogo.png\"\n            Description=\"Linq2TwitterDemos_WindowsStore\"\n            ForegroundText=\"light\"\n            BackgroundColor=\"#464646\">\n            <m2:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n        </m2:VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_WindowsStore\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_WindowsStore\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/SharedState.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_WindowsStore\n{\n    public class SharedState\n    {\n        public static IAuthorizer Authorizer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StatusDemos/HomeTimelineDemo.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.StatusDemos.HomeTimelineDemo\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore.StatusDemos\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"1\" x:Name=\"contentRegion\">\n            <Button Content=\"Refresh Timeline\" Height=\"72\" Width=\"365\" \n                HorizontalAlignment=\"Left\"  Margin=\"5,35,0,0\" \n                Name=\"RefreshTimeline\" VerticalAlignment=\"Top\"\n                Command=\"{Binding RefreshCommand}\"/>\n            <ListView Height=\"465\" HorizontalAlignment=\"Left\" Margin=\"5,144,0,0\" \n                 Name=\"SearchListBox\" VerticalAlignment=\"Top\" Width=\"1355\"\n                 ItemsSource=\"{Binding Tweets}\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\" Height=\"132\">\n                            <Image Source=\"{Binding ImageUrl}\" \n                               Height=\"73\" Width=\"73\" \n                               VerticalAlignment=\"Top\" Margin=\"0,10,8,0\"/>\n                            <StackPanel Width=\"370\">\n                                <TextBlock Text=\"{Binding Name}\" \n                                       Foreground=\"#FFC8AB14\" FontSize=\"28\" />\n                                <TextBlock Text=\"{Binding Text}\" \n                                       TextWrapping=\"Wrap\" FontSize=\"24\" />\n                            </StackPanel>\n                        </StackPanel>\n                    </DataTemplate>\n                </ListView.ItemTemplate>\n            </ListView>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"Home Timeline\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StatusDemos/HomeTimelineDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.DataModel;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Item Detail Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234232\n\nnamespace Linq2TwitterDemos_WindowsStore.StatusDemos\n{\n    /// <summary>\n    /// A page that displays details for a single item within a group while allowing gestures to\n    /// flip through other items belonging to the same group.\n    /// </summary>\n    public sealed partial class HomeTimelineDemo : Page\n    {\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n        public HomeTimelineDemo()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation.  Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session.  The state will be null the first time a page is visited.</param>\n        private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            object navigationParameter;\n            if (e.PageState != null && e.PageState.ContainsKey(\"SelectedItem\"))\n            {\n                navigationParameter = e.PageState[\"SelectedItem\"];\n            }\n\n            DataContext = new TweetViewModel();\n\n            // TODO: Assign a bindable group to this.DefaultViewModel[\"Group\"]\n            // TODO: Assign a collection of bindable items to this.DefaultViewModel[\"Items\"]\n            // TODO: Assign the selected item to this.flipView.SelectedItem\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StatusDemos/TweetDemo.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.StatusDemos.TweetDemo\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore.StatusDemos\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!--\n            TODO: Content should be placed within the following grid \n                  to show details for the current item\n        -->\n        <Grid Grid.Row=\"1\" x:Name=\"contentRegion\">\n            <StackPanel>\n                <TextBox Name=\"TweetTextBox\" Margin=\"15\" />\n                <Button Name=\"TweetButton\" Content=\"Tweet\" Click=\"TweetButton_Click\" Margin=\"15,0,0,0\" />\n            </StackPanel>\n        </Grid>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"Tweet\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StatusDemos/TweetDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing LinqToTwitter;\nusing Windows.UI.Popups;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Item Detail Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234232\n\nnamespace Linq2TwitterDemos_WindowsStore.StatusDemos\n{\n    /// <summary>\n    /// A page that displays details for a single item within a group while allowing gestures to\n    /// flip through other items belonging to the same group.\n    /// </summary>\n    public sealed partial class TweetDemo : Page\n    {\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n        public TweetDemo()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation.  Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session.  The state will be null the first time a page is visited.</param>\n        private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            object navigationParameter;\n            if (e.PageState != null && e.PageState.ContainsKey(\"SelectedItem\"))\n            {\n                navigationParameter = e.PageState[\"SelectedItem\"];\n            }\n\n            // TODO: Assign a bindable group to this.DefaultViewModel[\"Group\"]\n            // TODO: Assign a collection of bindable items to this.DefaultViewModel[\"Items\"]\n            // TODO: Assign the selected item to this.flipView.SelectedItem\n        }\n\n        async void TweetButton_Click(object sender, RoutedEventArgs e)\n        {\n            var twitterCtx = new TwitterContext(SharedState.Authorizer);\n\n            Status tweet = await twitterCtx.TweetAsync(TweetTextBox.Text);\n\n            await new MessageDialog(tweet.Text, \"Tweet Sent\").ShowAsync();\n        }\n\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StreamDemos/FilterStreamDemo.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.StreamDemos.FilterStreamDemo\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore.StreamDemos\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->\n        <x:String x:Key=\"AppName\">My Application</x:String>\n    </Page.Resources>\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"Filter Stream\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n        <Grid Grid.Row=\"1\" x:Name=\"contentRegion\">\n            <Button Content=\"Start Stream\" Height=\"72\" Width=\"365\" \n                HorizontalAlignment=\"Left\"  Margin=\"5,35,0,0\" \n                Name=\"StartStreamButton\" VerticalAlignment=\"Top\"\n                Command=\"{Binding StartCommand}\"/>\n            <ListView Height=\"465\" HorizontalAlignment=\"Left\" Margin=\"5,144,0,0\" \n                 Name=\"StreamListBox\" VerticalAlignment=\"Top\" Width=\"1355\"\n                 ItemsSource=\"{Binding JsonContent}\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Content}\" TextWrapping=\"Wrap\" FontSize=\"24\" />\n                    </DataTemplate>\n                </ListView.ItemTemplate>\n            </ListView>\n        </Grid>\n\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StreamDemos/FilterStreamDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.DataModel;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237\n\nnamespace Linq2TwitterDemos_WindowsStore.StreamDemos\n{\n    /// <summary>\n    /// A basic page that provides characteristics common to most applications.\n    /// </summary>\n    public sealed partial class FilterStreamDemo : Page\n    {\n\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n\n        public FilterStreamDemo()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n            this.navigationHelper.SaveState += navigationHelper_SaveState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation. Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session. The state will be null the first time a page is visited.</param>\n        private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            DataContext = new FilterStreamViewModel();\n        }\n\n        /// <summary>\n        /// Preserves state associated with this page in case the application is suspended or the\n        /// page is discarded from the navigation cache.  Values must conform to the serialization\n        /// requirements of <see cref=\"SuspensionManager.SessionState\"/>.\n        /// </summary>\n        /// <param name=\"sender\">The source of the event; typically <see cref=\"NavigationHelper\"/></param>\n        /// <param name=\"e\">Event data that provides an empty dictionary to be populated with\n        /// serializable state.</param>\n        private void navigationHelper_SaveState(object sender, SaveStateEventArgs e)\n        {\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StreamDemos/SampleStreamDemo.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.StreamDemos.SampleStreamDemo\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore.StreamDemos\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->\n        <x:String x:Key=\"AppName\">My Application</x:String>\n    </Page.Resources>\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"{StaticResource AppName}\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n        <Grid Grid.Row=\"1\" x:Name=\"contentRegion\">\n            <Button Content=\"Start Stream\" Height=\"72\" Width=\"365\" \n                HorizontalAlignment=\"Left\"  Margin=\"5,35,0,0\" \n                Name=\"StartStreamButton\" VerticalAlignment=\"Top\"\n                Command=\"{Binding StartCommand}\"/>\n            <ListView Height=\"465\" HorizontalAlignment=\"Left\" Margin=\"5,144,0,0\" \n                 Name=\"StreamListBox\" VerticalAlignment=\"Top\" Width=\"1355\"\n                 ItemsSource=\"{Binding JsonContent}\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Content}\" TextWrapping=\"Wrap\" FontSize=\"24\" />\n                    </DataTemplate>\n                </ListView.ItemTemplate>\n            </ListView>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StreamDemos/SampleStreamDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.DataModel;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237\n\nnamespace Linq2TwitterDemos_WindowsStore.StreamDemos\n{\n    /// <summary>\n    /// A basic page that provides characteristics common to most applications.\n    /// </summary>\n    public sealed partial class SampleStreamDemo : Page\n    {\n\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n\n        public SampleStreamDemo()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n            this.navigationHelper.SaveState += navigationHelper_SaveState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation. Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session. The state will be null the first time a page is visited.</param>\n        private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            DataContext = new SampleStreamViewModel();\n        }\n\n        /// <summary>\n        /// Preserves state associated with this page in case the application is suspended or the\n        /// page is discarded from the navigation cache.  Values must conform to the serialization\n        /// requirements of <see cref=\"SuspensionManager.SessionState\"/>.\n        /// </summary>\n        /// <param name=\"sender\">The source of the event; typically <see cref=\"NavigationHelper\"/></param>\n        /// <param name=\"e\">Event data that provides an empty dictionary to be populated with\n        /// serializable state.</param>\n        private void navigationHelper_SaveState(object sender, SaveStateEventArgs e)\n        {\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StreamDemos/UserStreamDemo.xaml",
    "content": "﻿<Page\n    x:Name=\"pageRoot\"\n    x:Class=\"Linq2TwitterDemos_WindowsStore.StreamDemos.UserStreamDemo\"\n    DataContext=\"{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Linq2TwitterDemos_WindowsStore.StreamDemos\"\n    xmlns:common=\"using:Linq2TwitterDemos_WindowsStore.Common\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <!-- TODO: Delete this line if the key AppName is declared in App.xaml -->\n        <x:String x:Key=\"AppName\">My Application</x:String>\n    </Page.Resources>\n\n    <!--\n        This grid acts as a root panel for the page that defines two rows:\n        * Row 0 contains the back button and page title\n        * Row 1 contains the rest of the page layout\n    -->\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.ChildrenTransitions>\n            <TransitionCollection>\n                <EntranceThemeTransition/>\n            </TransitionCollection>\n        </Grid.ChildrenTransitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"140\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <!-- Back button and page title -->\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"120\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"backButton\" Margin=\"39,59,39,0\" Command=\"{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}\"\n                        Style=\"{StaticResource NavigationBackButtonNormalStyle}\"\n                        VerticalAlignment=\"Top\"\n                        AutomationProperties.Name=\"Back\"\n                        AutomationProperties.AutomationId=\"BackButton\"\n                        AutomationProperties.ItemType=\"Navigation Button\"/>\n            <TextBlock x:Name=\"pageTitle\" Text=\"User Stream\" Style=\"{StaticResource HeaderTextBlockStyle}\" Grid.Column=\"1\" \n                        IsHitTestVisible=\"false\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Bottom\" Margin=\"0,0,30,40\"/>\n        </Grid>\n        <Grid Grid.Row=\"1\" x:Name=\"contentRegion\">\n            <Button Content=\"Start Stream\" Height=\"72\" Width=\"365\" \n                HorizontalAlignment=\"Left\"  Margin=\"5,35,0,0\" \n                Name=\"StartStreamButton\" VerticalAlignment=\"Top\"\n                Command=\"{Binding StartCommand}\"/>\n            <ListView Height=\"465\" HorizontalAlignment=\"Left\" Margin=\"5,144,0,0\" \n                 Name=\"StreamListBox\" VerticalAlignment=\"Top\" Width=\"1355\"\n                 ItemsSource=\"{Binding JsonContent}\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <TextBlock Text=\"{Binding Content}\" TextWrapping=\"Wrap\" FontSize=\"24\" />\n                    </DataTemplate>\n                </ListView.ItemTemplate>\n            </ListView>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/StreamDemos/UserStreamDemo.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Linq2TwitterDemos_WindowsStore.Common;\nusing Linq2TwitterDemos_WindowsStore.DataModel;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237\n\nnamespace Linq2TwitterDemos_WindowsStore.StreamDemos\n{\n    /// <summary>\n    /// A basic page that provides characteristics common to most applications.\n    /// </summary>\n    public sealed partial class UserStreamDemo : Page\n    {\n\n        private NavigationHelper navigationHelper;\n        private ObservableDictionary defaultViewModel = new ObservableDictionary();\n\n        /// <summary>\n        /// This can be changed to a strongly typed view model.\n        /// </summary>\n        public ObservableDictionary DefaultViewModel\n        {\n            get { return this.defaultViewModel; }\n        }\n\n        /// <summary>\n        /// NavigationHelper is used on each page to aid in navigation and \n        /// process lifetime management\n        /// </summary>\n        public NavigationHelper NavigationHelper\n        {\n            get { return this.navigationHelper; }\n        }\n\n\n        public UserStreamDemo()\n        {\n            this.InitializeComponent();\n            this.navigationHelper = new NavigationHelper(this);\n            this.navigationHelper.LoadState += navigationHelper_LoadState;\n            this.navigationHelper.SaveState += navigationHelper_SaveState;\n        }\n\n        /// <summary>\n        /// Populates the page with content passed during navigation. Any saved state is also\n        /// provided when recreating a page from a prior session.\n        /// </summary>\n        /// <param name=\"sender\">\n        /// The source of the event; typically <see cref=\"NavigationHelper\"/>\n        /// </param>\n        /// <param name=\"e\">Event data that provides both the navigation parameter passed to\n        /// <see cref=\"Frame.Navigate(Type, Object)\"/> when this page was initially requested and\n        /// a dictionary of state preserved by this page during an earlier\n        /// session. The state will be null the first time a page is visited.</param>\n        private void navigationHelper_LoadState(object sender, LoadStateEventArgs e)\n        {\n            DataContext = new UserStreamViewModel();\n        }\n\n        /// <summary>\n        /// Preserves state associated with this page in case the application is suspended or the\n        /// page is discarded from the navigation cache.  Values must conform to the serialization\n        /// requirements of <see cref=\"SuspensionManager.SessionState\"/>.\n        /// </summary>\n        /// <param name=\"sender\">The source of the event; typically <see cref=\"NavigationHelper\"/></param>\n        /// <param name=\"e\">Event data that provides an empty dictionary to be populated with\n        /// serializable state.</param>\n        private void navigationHelper_SaveState(object sender, SaveStateEventArgs e)\n        {\n        }\n\n        #region NavigationHelper registration\n\n        /// The methods provided in this section are simply used to allow\n        /// NavigationHelper to respond to the page's navigation methods.\n        /// \n        /// Page specific logic should be placed in event handlers for the  \n        /// <see cref=\"GridCS.Common.NavigationHelper.LoadState\"/>\n        /// and <see cref=\"GridCS.Common.NavigationHelper.SaveState\"/>.\n        /// The navigation parameter is available in the LoadState method \n        /// in addition to page state preserved during an earlier session.\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedTo(e);\n        }\n\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            navigationHelper.OnNavigatedFrom(e);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_WindowsStore/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"win81\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"win81\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"win81\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"win81\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/App.cs",
    "content": "﻿using Linq2TwitterDemos_XForms.Views;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Xamarin.Forms;\n\nnamespace Linq2TwitterDemos_XForms\n{\n\tpublic class App : Application\n\t{\n\t\tpublic App ()\n\t\t{\n            MainPage = new TweetView();\n\t\t\t// The root page of your application\n            //MainPage = new ContentPage {\n            //    Content = new StackLayout {\n            //        VerticalOptions = LayoutOptions.Center,\n            //        Children = {\n            //            new Label {\n            //                XAlign = TextAlignment.Center,\n            //                Text = \"Welcome to Xamarin Forms!\"\n            //            }\n            //        }\n            //    }\n            //};\n\t\t}\n\n\t\tprotected override void OnStart ()\n\t\t{\n\t\t\t// Handle when your app starts\n\t\t}\n\n\t\tprotected override void OnSleep ()\n\t\t{\n\t\t\t// Handle when your app sleeps\n\t\t}\n\n\t\tprotected override void OnResume ()\n\t\t{\n\t\t\t// Handle when your app resumes\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>48753c6b-5f85-46c6-a6ba-dbd49eaaa6f7</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>Linq2TwitterDemos_XForms</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)App.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Models\\Tweet.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Models\\TweetViewModel.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Views\\TweetView.xaml.cs\">\n      <DependentUpon>TweetView.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"$(MSBuildThisFileDirectory)Views\\TweetView.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:UpdateDesignTimeXaml</Generator>\n    </EmbeddedResource>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>48753c6b-5f85-46c6-a6ba-dbd49eaaa6f7</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"Linq2TwitterDemos_XForms.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Models/Tweet.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Linq2TwitterDemos_XForms.Models\n{\n    public class Tweet\n    {\n        public ulong StatusID { get; set; }\n\n        public string ScreenName { get; set; }\n\n        public string Text { get; set; }\n\n        public string ImageUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Models/TweetViewModel.cs",
    "content": "﻿using LinqToTwitter;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Linq2TwitterDemos_XForms.Models\n{\n    public class TweetViewModel : INotifyPropertyChanged\n    {\n        List<Tweet> tweets;\n        public List<Tweet> Tweets\n        {\n            get { return tweets; }\n            set\n            {\n                if (tweets == value) return;\n\n                tweets = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public async Task InitTweetViewModel()\n        {\n            var auth = new ApplicationOnlyAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\",\n                },\n            };\n            await auth.AuthorizeAsync();\n\n            var ctx = new TwitterContext(auth);\n\n            var searchResponse = await\n                (from search in ctx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == \"\\\"LINQ to Twitter\\\"\"\n                 select search)\n                .SingleAsync();\n\n            Tweets =\n                (from tweet in searchResponse.Statuses\n                 select new Tweet\n                 {\n                     StatusID = tweet.StatusID,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     Text = tweet.Text,\n                     ImageUrl = tweet.User.ProfileImageUrl\n                 })\n                .ToList();\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)\n        {\n            if (propertyName == null)\n                throw new ArgumentNullException(\"Can't call OnPropertyChanged with a null property name.\", propertyName);\n\n            var propChangedHandler = PropertyChanged;\n            if (propChangedHandler != null)\n                propChangedHandler(this, new PropertyChangedEventArgs(propertyName));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Views/TweetView.xaml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<ContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\"\n             x:Class=\"Linq2TwitterDemos_XForms.Views.TweetView\">\n  <StackLayout>\n    <Label Text=\"LINQ to Twitter Demo\"/>\n    <ListView ItemsSource=\"{Binding Tweets}\">\n      <ListView.ItemTemplate>\n        <DataTemplate>\n          <ImageCell ImageSource=\"{Binding ImageUrl}\" Text=\"{Binding ScreenName}\" Detail=\"{Binding Text}\"/>\n        </DataTemplate>\n      </ListView.ItemTemplate>\n    </ListView>\n  </StackLayout>\n</ContentPage>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Views/TweetView.xaml.cs",
    "content": "﻿using Linq2TwitterDemos_XForms.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Xamarin.Forms;\n\nnamespace Linq2TwitterDemos_XForms.Views\n{\n\tpublic partial class TweetView : ContentPage\n\t{\n        TweetViewModel tweetVM = new TweetViewModel();\n\n        public TweetView()\n        {\n            InitializeComponent();\n        }\n\n        protected override async void OnAppearing()\n        {\n            base.OnAppearing();\n\n            BindingContext = tweetVM;\n            try\n            {\n                await tweetVM.InitTweetViewModel();\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(ex.ToString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with you package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/Linq2TwitterDemos_XForms.Droid.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_XForms.Droid</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_XForms.Droid</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <AndroidApplication>true</AndroidApplication>\n    <AndroidResgenFile>Resources\\Resource.Designer.cs</AndroidResgenFile>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <AndroidManifest>Properties\\AndroidManifest.xml</AndroidManifest>\n    <AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>\n    <AndroidSupportedAbis>armeabi,armeabi-v7a,x86</AndroidSupportedAbis>\n    <AndroidStoreUncompressedFileExtensions />\n    <MandroidI18n />\n    <JavaMaximumHeapSize />\n    <JavaOptions />\n    <NuGetPackageImportStamp>d8210178</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>\n    <AndroidLinkMode>None</AndroidLinkMode>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>\n    <AndroidLinkMode>SdkOnly</AndroidLinkMode>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"FormsViewGroup\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\MonoAndroid10\\FormsViewGroup.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitterPcl\">\n      <HintPath>..\\..\\packages\\LinqToTwitter.3.1.1\\lib\\portable-win8+net45+wp8\\LinqToTwitterPcl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Android\" />\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\monoandroid\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\..\\packages\\Rx-Core.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\..\\packages\\Rx-Interfaces.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\..\\packages\\Rx-Linq.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\..\\packages\\Rx-PlatformServices.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Xamarin.Android.Support.v4\">\n      <HintPath>..\\..\\packages\\Xamarin.Android.Support.v4.19.0.2\\lib\\MonoAndroid10\\Xamarin.Android.Support.v4.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Core\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\MonoAndroid10\\Xamarin.Forms.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Platform.Android\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\MonoAndroid10\\Xamarin.Forms.Platform.Android.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Xaml\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\MonoAndroid10\\Xamarin.Forms.Xaml.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MainActivity.cs\" />\n    <Compile Include=\"Resources\\Resource.Designer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AndroidResource Include=\"Resources\\Drawable\\Icon.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\AndroidManifest.xml\" />\n  </ItemGroup>\n  <Import Project=\"..\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems\" Label=\"Shared\" Condition=\"Exists('..\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\Android\\Xamarin.Android.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets\" Condition=\"Exists('..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets'))\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n     Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/MainActivity.cs",
    "content": "﻿using System;\n\nusing Android.App;\nusing Android.Content.PM;\nusing Android.Runtime;\nusing Android.Views;\nusing Android.Widget;\nusing Android.OS;\n\nnamespace Linq2TwitterDemos_XForms.Droid\n{\n    [Activity(Label = \"Linq2TwitterDemos_XForms\", Icon = \"@drawable/icon\", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]\n    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            base.OnCreate(bundle);\n\n            global::Xamarin.Forms.Forms.Init(this, bundle);\n            LoadApplication(new Linq2TwitterDemos_XForms.App());\n        }\n    }\n}\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/Properties/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<uses-sdk android:minSdkVersion=\"15\" />\n\t<application></application>\n</manifest>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Android.App;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_XForms.Droid\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_XForms.Droid\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: ComVisible(false)]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n\n// Add some common permissions, these can be removed if not needed\n[assembly: UsesPermission(Android.Manifest.Permission.Internet)]\n[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (main.xml),\nan internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    drawable-hdpi/\n        icon.png\n\n    drawable-ldpi/\n        icon.png\n\n    drawable-mdpi/\n        icon.png\n\n    layout/\n        main.xml\n\n    values/\n        strings.xml\n\nIn order to get the build system to recognize Android resources, set the build action to\n\"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class drawable {\n        public const int icon = 0x123;\n    }\n\n    public class layout {\n        public const int main = 0x456;\n    }\n\n    public class strings {\n        public const int first_string = 0xabc;\n        public const int second_string = 0xbcd;\n    }\n}\n\nYou would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main \nto reference the layout/main.xml file, or Resource.strings.first_string to reference the first \nstring in the dictionary file values/strings.xml.\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/Resources/Resource.Designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"Linq2TwitterDemos_XForms.Droid.Resource\", IsApplication=true)]\n\nnamespace Linq2TwitterDemos_XForms.Droid\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int Icon = 2130837504;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.Droid/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"LinqToTwitter\" version=\"3.1.1\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Xamarin.Android.Support.v4\" version=\"19.0.2\" targetFramework=\"MonoAndroid22\" />\n  <package id=\"Xamarin.Forms\" version=\"1.3.1.6296\" targetFramework=\"MonoAndroid22\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Linq2TwitterDemos_XForms.WinPhone.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\">\n\n    <!--Application Resources-->\n    <Application.Resources>\n        <local:LocalizedStrings xmlns:local=\"clr-namespace:Linq2TwitterDemos_XForms.WinPhone\" x:Key=\"LocalizedStrings\"/>\n    </Application.Resources>\n\n    <Application.ApplicationLifetimeObjects>\n        <!--Required object that handles lifetime events for the application-->\n        <shell:PhoneApplicationService\n            Launching=\"Application_Launching\" Closing=\"Application_Closing\"\n            Activated=\"Application_Activated\" Deactivated=\"Application_Deactivated\"/>\n    </Application.ApplicationLifetimeObjects>\n\n</Application>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/App.xaml.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Resources;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\nusing Linq2TwitterDemos_XForms.WinPhone.Resources;\n\nnamespace Linq2TwitterDemos_XForms.WinPhone\n{\n    public partial class App : Application\n    {\n        /// <summary>\n        /// Provides easy access to the root frame of the Phone Application.\n        /// </summary>\n        /// <returns>The root frame of the Phone Application.</returns>\n        public static PhoneApplicationFrame RootFrame { get; private set; }\n\n        /// <summary>\n        /// Constructor for the Application object.\n        /// </summary>\n        public App()\n        {\n            // Global handler for uncaught exceptions.\n            UnhandledException += Application_UnhandledException;\n\n            // Standard XAML initialization\n            InitializeComponent();\n\n            // Phone-specific initialization\n            InitializePhoneApplication();\n\n            // Language display initialization\n            InitializeLanguage();\n\n            // Show graphics profiling information while debugging.\n            if (Debugger.IsAttached)\n            {\n                // Display the current frame rate counters.\n                Application.Current.Host.Settings.EnableFrameRateCounter = true;\n\n                // Show the areas of the app that are being redrawn in each frame.\n                //Application.Current.Host.Settings.EnableRedrawRegions = true;\n\n                // Enable non-production analysis visualization mode,\n                // which shows areas of a page that are handed off to GPU with a colored overlay.\n                //Application.Current.Host.Settings.EnableCacheVisualization = true;\n\n                // Prevent the screen from turning off while under the debugger by disabling\n                // the application's idle detection.\n                // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run\n                // and consume battery power when the user is not using the phone.\n                PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;\n            }\n\n        }\n\n        // Code to execute when the application is launching (eg, from Start)\n        // This code will not execute when the application is reactivated\n        private void Application_Launching(object sender, LaunchingEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is activated (brought to foreground)\n        // This code will not execute when the application is first launched\n        private void Application_Activated(object sender, ActivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is deactivated (sent to background)\n        // This code will not execute when the application is closing\n        private void Application_Deactivated(object sender, DeactivatedEventArgs e)\n        {\n        }\n\n        // Code to execute when the application is closing (eg, user hit Back)\n        // This code will not execute when the application is deactivated\n        private void Application_Closing(object sender, ClosingEventArgs e)\n        {\n        }\n\n        // Code to execute if a navigation fails\n        private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // A navigation has failed; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        // Code to execute on Unhandled Exceptions\n        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)\n        {\n            if (Debugger.IsAttached)\n            {\n                // An unhandled exception has occurred; break into the debugger\n                Debugger.Break();\n            }\n        }\n\n        #region Phone application initialization\n\n        // Avoid double-initialization\n        private bool phoneApplicationInitialized = false;\n\n        // Do not add any additional code to this method\n        private void InitializePhoneApplication()\n        {\n            if (phoneApplicationInitialized)\n                return;\n\n            // Create the frame but don't set it as RootVisual yet; this allows the splash\n            // screen to remain active until the application is ready to render.\n            RootFrame = new PhoneApplicationFrame();\n            RootFrame.Navigated += CompleteInitializePhoneApplication;\n\n            // Handle navigation failures\n            RootFrame.NavigationFailed += RootFrame_NavigationFailed;\n\n            // Handle reset requests for clearing the backstack\n            RootFrame.Navigated += CheckForResetNavigation;\n\n            // Ensure we don't initialize again\n            phoneApplicationInitialized = true;\n        }\n\n        // Do not add any additional code to this method\n        private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)\n        {\n            // Set the root visual to allow the application to render\n            if (RootVisual != RootFrame)\n                RootVisual = RootFrame;\n\n            // Remove this handler since it is no longer needed\n            RootFrame.Navigated -= CompleteInitializePhoneApplication;\n        }\n\n        private void CheckForResetNavigation(object sender, NavigationEventArgs e)\n        {\n            // If the app has received a 'reset' navigation, then we need to check\n            // on the next navigation to see if the page stack should be reset\n            if (e.NavigationMode == NavigationMode.Reset)\n                RootFrame.Navigated += ClearBackStackAfterReset;\n        }\n\n        private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)\n        {\n            // Unregister the event so it doesn't get called again\n            RootFrame.Navigated -= ClearBackStackAfterReset;\n\n            // Only clear the stack for 'new' (forward) and 'refresh' navigations\n            if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)\n                return;\n\n            // For UI consistency, clear the entire page stack\n            while (RootFrame.RemoveBackEntry() != null)\n            {\n                ; // do nothing\n            }\n        }\n\n        #endregion\n\n        // Initialize the app's font and flow direction as defined in its localized resource strings.\n        //\n        // To ensure that the font of your application is aligned with its supported languages and that the\n        // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage\n        // and ResourceFlowDirection should be initialized in each resx file to match these values with that\n        // file's culture. For example:\n        //\n        // AppResources.es-ES.resx\n        //    ResourceLanguage's value should be \"es-ES\"\n        //    ResourceFlowDirection's value should be \"LeftToRight\"\n        //\n        // AppResources.ar-SA.resx\n        //     ResourceLanguage's value should be \"ar-SA\"\n        //     ResourceFlowDirection's value should be \"RightToLeft\"\n        //\n        // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.\n        //\n        private void InitializeLanguage()\n        {\n            try\n            {\n                // Set the font to match the display language defined by the\n                // ResourceLanguage resource string for each supported language.\n                //\n                // Fall back to the font of the neutral language if the Display\n                // language of the phone is not supported.\n                //\n                // If a compiler error is hit then ResourceLanguage is missing from\n                // the resource file.\n                RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);\n\n                // Set the FlowDirection of all elements under the root frame based\n                // on the ResourceFlowDirection resource string for each\n                // supported language.\n                //\n                // If a compiler error is hit then ResourceFlowDirection is missing from\n                // the resource file.\n                FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);\n                RootFrame.FlowDirection = flow;\n            }\n            catch\n            {\n                // If an exception is caught here it is most likely due to either\n                // ResourceLangauge not being correctly set to a supported language\n                // code or ResourceFlowDirection is set to a value other than LeftToRight\n                // or RightToLeft.\n\n                if (Debugger.IsAttached)\n                {\n                    Debugger.Break();\n                }\n\n                throw;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/Linq2TwitterDemos_XForms.WinPhone.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{59D7A107-9A8F-4025-B587-93EE0041EBB7}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Linq2TwitterDemos_XForms.WinPhone</RootNamespace>\n    <AssemblyName>Linq2TwitterDemos_XForms.WinPhone</AssemblyName>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>true</SilverlightApplication>\n    <SupportedCultures>\n    </SupportedCultures>\n    <XapOutputs>true</XapOutputs>\n    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>\n    <XapFilename>PhoneApp1_$(Configuration)_$(Platform).xap</XapFilename>\n    <SilverlightManifestTemplate>Properties\\AppManifest.xml</SilverlightManifestTemplate>\n    <SilverlightAppEntry>Linq2TwitterDemos_XForms.WinPhone.App</SilverlightAppEntry>\n    <ValidateXaml>true</ValidateXaml>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <NuGetPackageImportStamp>3ef05c03</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\x86\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\x86\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|ARM' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\ARM\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|ARM' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\ARM\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"LocalizedStrings.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Resources\\AppResources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>AppResources.resx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n      <Generator>MSBuild:Compile</Generator>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n    <None Include=\"Properties\\AppManifest.xml\" />\n    <None Include=\"Properties\\WMAppManifest.xml\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"README_FIRST.txt\" />\n    <Content Include=\"SplashScreenImage.jpg\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\AlignmentGrid.png\" />\n    <Content Include=\"Assets\\ApplicationIcon.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileMedium.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\FlipCycleTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileMediumLarge.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Assets\\Tiles\\IconicTileSmall.png\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"Toolkit.Content\\ApplicationBar.Add.png\" />\n    <Content Include=\"Toolkit.Content\\ApplicationBar.Cancel.png\" />\n    <Content Include=\"Toolkit.Content\\ApplicationBar.Check.png\" />\n    <Content Include=\"Toolkit.Content\\ApplicationBar.Delete.png\" />\n    <Content Include=\"Toolkit.Content\\ApplicationBar.Select.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\AppResources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>AppResources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitterPcl\">\n      <HintPath>..\\..\\packages\\LinqToTwitter.3.1.1\\lib\\wp8\\LinqToTwitterPcl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Phone.Controls.Toolkit\">\n      <HintPath>..\\..\\packages\\WPtoolkit.4.2013.08.16\\lib\\wp8\\Microsoft.Phone.Controls.Toolkit.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.IO.Compression\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Compression.3.9.85\\lib\\wp8\\System.IO.Compression.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\sl4-windowsphone71\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\..\\packages\\Rx-Core.2.2.5\\lib\\windowsphone8\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\..\\packages\\Rx-Interfaces.2.2.5\\lib\\windowsphone8\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\..\\packages\\Rx-Linq.2.2.5\\lib\\windowsphone8\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\..\\packages\\Rx-PlatformServices.2.2.5\\lib\\windowsphone8\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Core\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\WP80\\Xamarin.Forms.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Platform.WP8\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\WP80\\Xamarin.Forms.Platform.WP8.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Xaml\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\WP80\\Xamarin.Forms.Xaml.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"..\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems\" Label=\"Shared\" Condition=\"Exists('..\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ProjectExtensions />\n  <Import Project=\"..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets\" Condition=\"Exists('..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets'))\" />\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Compression.3.9.85\\build\\wp8\\Microsoft.Bcl.Compression.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Compression.3.9.85\\build\\wp8\\Microsoft.Bcl.Compression.targets'))\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Compression.3.9.85\\build\\wp8\\Microsoft.Bcl.Compression.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Compression.3.9.85\\build\\wp8\\Microsoft.Bcl.Compression.targets')\" />\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/LocalizedStrings.cs",
    "content": "﻿using Linq2TwitterDemos_XForms.WinPhone.Resources;\n\nnamespace Linq2TwitterDemos_XForms.WinPhone\n{\n    /// <summary>\n    /// Provides access to string resources.\n    /// </summary>\n    public class LocalizedStrings\n    {\n        private static AppResources _localizedResources = new AppResources();\n\n        public AppResources LocalizedResources { get { return _localizedResources; } }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/MainPage.xaml",
    "content": "﻿<winPhone:FormsApplicationPage\n    x:Class=\"Linq2TwitterDemos_XForms.WinPhone.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:phone=\"clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone\"\n    xmlns:shell=\"clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:winPhone=\"clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8\"\n    mc:Ignorable=\"d\"\n    FontFamily=\"{StaticResource PhoneFontFamilyNormal}\"\n    FontSize=\"{StaticResource PhoneFontSizeNormal}\"\n    Foreground=\"{StaticResource PhoneForegroundBrush}\"\n    SupportedOrientations=\"Portrait\" Orientation=\"Portrait\"\n    shell:SystemTray.IsVisible=\"True\">\n</winPhone:FormsApplicationPage>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/MainPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\nusing Microsoft.Phone.Controls;\nusing Microsoft.Phone.Shell;\n\nnamespace Linq2TwitterDemos_XForms.WinPhone\n{\n    public partial class MainPage : global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage\n    {\n        public MainPage()\n        {\n            InitializeComponent();\n            SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;\n\n            global::Xamarin.Forms.Forms.Init();\n            LoadApplication(new Linq2TwitterDemos_XForms.App());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/Properties/AppManifest.xml",
    "content": "﻿<Deployment xmlns=\"http://schemas.microsoft.com/client/2007/deployment\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n>\n    <Deployment.Parts>\n    </Deployment.Parts>\n</Deployment>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_XForms.WinPhone\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_XForms.WinPhone\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"65077432-0c92-466b-b68d-911a8ec84f1d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/Properties/WMAppManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Deployment xmlns=\"http://schemas.microsoft.com/windowsphone/2012/deployment\" AppPlatformVersion=\"8.0\">\n  <DefaultLanguage xmlns=\"\" code=\"en-US\"/>\n  <App xmlns=\"\" ProductID=\"{64079e91-56d0-441e-a38d-fa9455836eb4}\" Title=\"Linq2TwitterDemos_XForms.WinPhone\" RuntimeType=\"Silverlight\" Version=\"1.0.0.0\" Genre=\"apps.normal\"  Author=\"Linq2TwitterDemos_XForms.WinPhone author\" Description=\"Sample description\" Publisher=\"Linq2TwitterDemos_XForms.WinPhone\" PublisherID=\"{5240ff4f-2fd2-453d-b3fc-fc7ed7b34989}\">\n    <IconPath IsRelative=\"true\" IsResource=\"false\">Assets\\ApplicationIcon.png</IconPath>\n    <Capabilities>\n      <Capability Name=\"ID_CAP_NETWORKING\"/>\n      <Capability Name=\"ID_CAP_MEDIALIB_AUDIO\"/>\n      <Capability Name=\"ID_CAP_MEDIALIB_PLAYBACK\"/>\n      <Capability Name=\"ID_CAP_SENSORS\"/>\n      <Capability Name=\"ID_CAP_WEBBROWSERCOMPONENT\"/>\n    </Capabilities>\n    <Tasks>\n      <DefaultTask  Name =\"_default\" NavigationPage=\"MainPage.xaml\"/>\n    </Tasks>\n    <Tokens>\n      <PrimaryToken TokenID=\"PhoneApp1Token\" TaskName=\"_default\">\n        <TemplateFlip>\n          <SmallImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileSmall.png</SmallImageURI>\n          <Count>0</Count>\n          <BackgroundImageURI IsRelative=\"true\" IsResource=\"false\">Assets\\Tiles\\FlipCycleTileMedium.png</BackgroundImageURI>\n          <Title>Linq2TwitterDemos_XForms.WinPhone</Title>\n          <BackContent></BackContent>\n          <BackBackgroundImageURI></BackBackgroundImageURI>\n          <BackTitle></BackTitle>\n          <DeviceLockImageURI></DeviceLockImageURI>\n          <HasLarge></HasLarge>\n        </TemplateFlip>\n      </PrimaryToken>\n    </Tokens>\n    <ScreenResolutions>\n      <ScreenResolution Name=\"ID_RESOLUTION_WVGA\"/>\n      <ScreenResolution Name=\"ID_RESOLUTION_WXGA\"/>\n      <ScreenResolution Name=\"ID_RESOLUTION_HD720P\"/>\n    </ScreenResolutions>\n  </App>\n</Deployment>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/README_FIRST.txt",
    "content": "For the Windows Phone toolkit make sure that you have\nmarked the icons in the \"Toolkit.Content\" folder as content.  That way they \ncan be used as the icons for the ApplicationBar control."
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/Resources/AppResources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.17626\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Linq2TwitterDemos_XForms.WinPhone.Resources\n{\n    using System;\n\n\n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class AppResources\n    {\n\n        private static global::System.Resources.ResourceManager resourceMan;\n\n        private static global::System.Globalization.CultureInfo resourceCulture;\n\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal AppResources()\n        {\n        }\n\n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager\n        {\n            get\n            {\n                if (object.ReferenceEquals(resourceMan, null))\n                {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Linq2TwitterDemos_XForms.WinPhone.Resources.AppResources\", typeof(AppResources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n\n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture\n        {\n            get\n            {\n                return resourceCulture;\n            }\n            set\n            {\n                resourceCulture = value;\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to LeftToRight.\n        /// </summary>\n        public static string ResourceFlowDirection\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResourceFlowDirection\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to us-EN.\n        /// </summary>\n        public static string ResourceLanguage\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResourceLanguage\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to MY APPLICATION.\n        /// </summary>\n        public static string ApplicationTitle\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ApplicationTitle\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to button.\n        /// </summary>\n        public static string AppBarButtonText\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AppBarButtonText\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to menu item.\n        /// </summary>\n        public static string AppBarMenuItemText\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AppBarMenuItemText\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/Resources/AppResources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResourceFlowDirection\" xml:space=\"preserve\">\n    <value>LeftToRight</value>\n    <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment>\n  </data>\n  <data name=\"ResourceLanguage\" xml:space=\"preserve\">\n    <value>en-US</value>\n    <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment>\n  </data>\n  <data name=\"ApplicationTitle\" xml:space=\"preserve\">\n    <value>MY APPLICATION</value>\n  </data>\n  <data name=\"AppBarButtonText\" xml:space=\"preserve\">\n    <value>add</value>\n  </data>\n  <data name=\"AppBarMenuItemText\" xml:space=\"preserve\">\n    <value>Menu Item</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.WinPhone/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"LinqToTwitter\" version=\"3.1.1\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"wp80\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"wp80\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"wp80\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"wp80\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"wp80\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"wp80\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"wp80\" />\n  <package id=\"WPtoolkit\" version=\"4.2013.08.16\" targetFramework=\"wp80\" />\n  <package id=\"Xamarin.Forms\" version=\"1.3.1.6296\" targetFramework=\"wp80\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/AppDelegate.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Foundation;\nusing UIKit;\n\nnamespace Linq2TwitterDemos_XForms.iOS\n{\n    // The UIApplicationDelegate for the application. This class is responsible for launching the \n    // User Interface of the application, as well as listening (and optionally responding) to \n    // application events from iOS.\n    [Register(\"AppDelegate\")]\n    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate\n    {\n        //\n        // This method is invoked when the application has loaded and is ready to run. In this \n        // method you should instantiate the window, load the UI into it and then make the window\n        // visible.\n        //\n        // You have 17 seconds to return from this method, or iOS will terminate your application.\n        //\n        public override bool FinishedLaunching(UIApplication app, NSDictionary options)\n        {\n            global::Xamarin.Forms.Forms.Init();\n            LoadApplication(new Linq2TwitterDemos_XForms.App());\n\n            return base.FinishedLaunching(app, options);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/Entitlements.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/Info.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n  <dict>\n    <key>UIDeviceFamily</key>\n    <array>\n      <integer>1</integer>\n      <integer>2</integer>\n    </array>\n    <key>UISupportedInterfaceOrientations</key>\n    <array>\n      <string>UIInterfaceOrientationPortrait</string>\n      <string>UIInterfaceOrientationLandscapeLeft</string>\n      <string>UIInterfaceOrientationLandscapeRight</string>\n    </array>\n    <key>UISupportedInterfaceOrientations~ipad</key>\n    <array>\n      <string>UIInterfaceOrientationPortrait</string>\n      <string>UIInterfaceOrientationPortraitUpsideDown</string>\n      <string>UIInterfaceOrientationLandscapeLeft</string>\n      <string>UIInterfaceOrientationLandscapeRight</string>\n    </array>\n    <key>MinimumOSVersion</key>\n    <string>6.0</string>\n    <key>CFBundleDisplayName</key>\n    <string>Linq2TwitterDemos_XForms</string>\n    <key>CFBundleIdentifier</key>\n    <string>com.yourcompany.Linq2TwitterDemos_XForms</string>\n    <key>CFBundleVersion</key>\n    <string>1.0</string>\n    <key>CFBundleIconFiles</key>\n    <array>\n      <string>Icon-60@2x.png</string>\n      <string>Icon-60@3x.png</string>\n      <string>Icon-76.png</string>\n      <string>Icon-76@2x.png</string>\n      <string>Default.png</string>\n      <string>Default@2x.png</string>\n      <string>Default-568h@2x.png</string>\n      <string>Default-Portrait.png</string>\n      <string>Default-Portrait@2x.png</string>\n      <string>Icon-Small-40.png</string>\n      <string>Icon-Small-40@2x.png</string>\n      <string>Icon-Small-40@3x.png</string>\n      <string>Icon-Small.png</string>\n      <string>Icon-Small@2x.png</string>\n      <string>Icon-Small@3x.png</string>\n    </array>\n    <key>UILaunchStoryboardName</key>\n    <string>LaunchScreen.storyboard</string>\n  </dict>\n</plist>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/Linq2TwitterDemos_XForms.iOS.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{CBFFC286-CDB0-4150-B06F-ACF462D599A7}</ProjectGuid>\n    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Linq2TwitterDemos_XForms.iOS</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>Linq2TwitterDemos_XFormsiOS</AssemblyName>\n    <NuGetPackageImportStamp>5ba5867b</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchArch>i386, x86_64</MtouchArch>\n    <MtouchLink>None</MtouchLink>\n    <MtouchDebug>true</MtouchDebug>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchLink>None</MtouchLink>\n    <MtouchArch>i386, x86_64</MtouchArch>\n    <ConsolePause>false</ConsolePause>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchArch>ARMv7, ARM64</MtouchArch>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <MtouchDebug>true</MtouchDebug>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchArch>ARMv7, ARM64</MtouchArch>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>True</Optimize>\n    <OutputPath>bin\\iPhone\\Ad-Hoc</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>False</ConsolePause>\n    <MtouchArch>ARMv7, ARM64</MtouchArch>\n    <BuildIpa>True</BuildIpa>\n    <CodesignProvision>Automatic:AdHoc</CodesignProvision>\n    <CodesignKey>iPhone Distribution</CodesignKey>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>True</Optimize>\n    <OutputPath>bin\\iPhone\\AppStore</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>False</ConsolePause>\n    <MtouchArch>ARMv7, ARM64</MtouchArch>\n    <CodesignProvision>Automatic:AppStore</CodesignProvision>\n    <CodesignKey>iPhone Distribution</CodesignKey>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"AppDelegate.cs\" />\n    <None Include=\"app.config\" />\n    <None Include=\"Entitlements.plist\" />\n    <None Include=\"Info.plist\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <ITunesArtwork Include=\"iTunesArtwork\" />\n    <ITunesArtwork Include=\"iTunesArtwork@2x\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default-568h%402x.png\" />\n    <BundleResource Include=\"Resources\\Default-Portrait.png\" />\n    <BundleResource Include=\"Resources\\Default-Portrait%402x.png\" />\n    <BundleResource Include=\"Resources\\Default.png\" />\n    <BundleResource Include=\"Resources\\Default%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-60%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-60%403x.png\" />\n    <BundleResource Include=\"Resources\\Icon-76.png\" />\n    <BundleResource Include=\"Resources\\Icon-76%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small-40.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small-40%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small-40%403x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small%403x.png\" />\n    <InterfaceDefinition Include=\"Resources\\LaunchScreen.storyboard\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitterPcl\">\n      <HintPath>..\\..\\packages\\LinqToTwitter.3.1.1\\lib\\portable-win8+net45+wp8\\LinqToTwitterPcl.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net45+win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.28\\lib\\portable-net45+win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\..\\packages\\Rx-Core.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\..\\packages\\Rx-Interfaces.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\..\\packages\\Rx-Linq.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\..\\packages\\Rx-PlatformServices.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Xamarin.Forms.Core\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\Xamarin.iOS10\\Xamarin.Forms.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Platform.iOS\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\Xamarin.iOS10\\Xamarin.Forms.Platform.iOS.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.Forms.Xaml\">\n      <HintPath>..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\lib\\Xamarin.iOS10\\Xamarin.Forms.Xaml.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Xamarin.iOS\" />\n  </ItemGroup>\n  <Import Project=\"..\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems\" Label=\"Shared\" Condition=\"Exists('..\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.iOS.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets\" Condition=\"Exists('..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Xamarin.Forms.1.3.1.6296\\build\\portable-win+net45+wp80+MonoAndroid10+MonoTouch10+Xamarin.iOS10\\Xamarin.Forms.targets'))\" />\n  </Target>\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureBclBuildImported\" BeforeTargets=\"BeforeBuild\" Condition=\"'$(BclBuildImported)' == ''\">\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.\" HelpKeyword=\"BCLBUILD2001\" />\n    <Error Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.14\\tools\\Microsoft.Bcl.Build.targets')\" Text=\"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.\" HelpKeyword=\"BCLBUILD2002\" />\n  </Target>\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/Main.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Foundation;\nusing UIKit;\n\nnamespace Linq2TwitterDemos_XForms.iOS\n{\n    public class Application\n    {\n        // This is the main entry point of the application.\n        static void Main(string[] args)\n        {\n            // if you want to use a different Application Delegate class from \"AppDelegate\"\n            // you can specify it here.\n            UIApplication.Main(args, null, \"AppDelegate\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq2TwitterDemos_XForms.iOS\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Linq2TwitterDemos_XForms.iOS\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"72bdc44f-c588-44f3-b6df-9aace7daafdd\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/Resources/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"6245\" systemVersion=\"13F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"X5k-f2-b5h\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6238\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"gAE-YM-kbH\">\n            <objects>\n                <viewController id=\"X5k-f2-b5h\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Y8P-hJ-Z43\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"9ZL-r4-8FZ\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"yd7-JS-zBw\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" image=\"Icon-60.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"23\">\n                                <rect key=\"frame\" x=\"270\" y=\"270\" width=\"60\" height=\"60\"/>\n                                <rect key=\"contentStretch\" x=\"0.0\" y=\"0.0\" width=\"0.0\" height=\"0.0\"/>\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.20392156862745098\" green=\"0.59607843137254901\" blue=\"0.85882352941176465\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"23\" firstAttribute=\"centerY\" secondItem=\"yd7-JS-zBw\" secondAttribute=\"centerY\" priority=\"1\" id=\"39\"/>\n                            <constraint firstItem=\"23\" firstAttribute=\"centerX\" secondItem=\"yd7-JS-zBw\" secondAttribute=\"centerX\" priority=\"1\" id=\"41\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"XAI-xm-WK6\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"349\" y=\"339\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"Icon-60.png\" width=\"180\" height=\"180\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.28.0\" newVersion=\"4.2.28.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.0.0\" newVersion=\"4.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.iOS/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"LinqToTwitter\" version=\"3.1.1\" targetFramework=\"xamarinios10\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.9\" targetFramework=\"xamarinios10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.14\" targetFramework=\"xamarinios10\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"xamarinios10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.28\" targetFramework=\"xamarinios10\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"xamarinios10\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"xamarinios10\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"xamarinios10\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"xamarinios10\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"xamarinios10\" />\n  <package id=\"Xamarin.Forms\" version=\"1.3.1.6296\" targetFramework=\"xamarinios10\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterDemos_XForms/Linq2TwitterDemos_XForms.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_XForms.WinPhone\", \"Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.WinPhone\\Linq2TwitterDemos_XForms.WinPhone.csproj\", \"{59D7A107-9A8F-4025-B587-93EE0041EBB7}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_XForms.iOS\", \"Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.iOS\\Linq2TwitterDemos_XForms.iOS.csproj\", \"{CBFFC286-CDB0-4150-B06F-ACF462D599A7}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_XForms.Droid\", \"Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.Droid\\Linq2TwitterDemos_XForms.Droid.csproj\", \"{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"Linq2TwitterDemos_XForms\", \"Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.shproj\", \"{48753C6B-5F85-46C6-A6BA-DBD49EAAA6F7}\"\nEndProject\nGlobal\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\tLinq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems*{cbffc286-cdb0-4150-b06f-acf462d599a7}*SharedItemsImports = 4\n\t\tLinq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems*{48753c6b-5f85-46c6-a6ba-dbd49eaaa6f7}*SharedItemsImports = 13\n\t\tLinq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems*{4a3895ee-6f15-4e19-af8f-c1e701557b6f}*SharedItemsImports = 4\n\t\tLinq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms\\Linq2TwitterDemos_XForms.projitems*{59d7a107-9a8f-4025-b587-93ee0041ebb7}*SharedItemsImports = 4\n\tEndGlobalSection\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tAd-Hoc|Any CPU = Ad-Hoc|Any CPU\n\t\tAd-Hoc|ARM = Ad-Hoc|ARM\n\t\tAd-Hoc|iPhone = Ad-Hoc|iPhone\n\t\tAd-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator\n\t\tAd-Hoc|Mixed Platforms = Ad-Hoc|Mixed Platforms\n\t\tAd-Hoc|x86 = Ad-Hoc|x86\n\t\tAppStore|Any CPU = AppStore|Any CPU\n\t\tAppStore|ARM = AppStore|ARM\n\t\tAppStore|iPhone = AppStore|iPhone\n\t\tAppStore|iPhoneSimulator = AppStore|iPhoneSimulator\n\t\tAppStore|Mixed Platforms = AppStore|Mixed Platforms\n\t\tAppStore|x86 = AppStore|x86\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|iPhone = Debug|iPhone\n\t\tDebug|iPhoneSimulator = Debug|iPhoneSimulator\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|iPhone = Release|iPhone\n\t\tRelease|iPhoneSimulator = Release|iPhoneSimulator\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|ARM.ActiveCfg = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|ARM.Build.0 = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|ARM.Deploy.0 = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|Mixed Platforms.Build.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|x86.ActiveCfg = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|x86.Build.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Ad-Hoc|x86.Deploy.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|ARM.ActiveCfg = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|ARM.Build.0 = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|ARM.Deploy.0 = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|Mixed Platforms.Build.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|x86.ActiveCfg = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|x86.Build.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.AppStore|x86.Deploy.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|Any CPU.Build.0 = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|Any CPU.Deploy.0 = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|x86.Build.0 = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|ARM.Build.0 = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|x86.ActiveCfg = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|x86.Build.0 = Release|x86\n\t\t{59D7A107-9A8F-4025-B587-93EE0041EBB7}.Release|x86.Deploy.0 = Release|x86\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|Mixed Platforms.ActiveCfg = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|Mixed Platforms.Build.0 = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|ARM.ActiveCfg = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|iPhone.ActiveCfg = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|iPhone.Build.0 = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|Mixed Platforms.ActiveCfg = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|Mixed Platforms.Build.0 = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.AppStore|x86.ActiveCfg = AppStore|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|Any CPU.ActiveCfg = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|ARM.ActiveCfg = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|iPhone.ActiveCfg = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|iPhone.Build.0 = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|Mixed Platforms.ActiveCfg = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|Mixed Platforms.Build.0 = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Debug|x86.ActiveCfg = Debug|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|Any CPU.ActiveCfg = Release|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|ARM.ActiveCfg = Release|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|iPhone.ActiveCfg = Release|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|iPhone.Build.0 = Release|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|Mixed Platforms.ActiveCfg = Release|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|Mixed Platforms.Build.0 = Release|iPhone\n\t\t{CBFFC286-CDB0-4150-B06F-ACF462D599A7}.Release|x86.ActiveCfg = Release|iPhone\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|Mixed Platforms.Deploy.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|ARM.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|Mixed Platforms.Deploy.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.AppStore|x86.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|Mixed Platforms.Deploy.0 = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|Mixed Platforms.Deploy.0 = Release|Any CPU\n\t\t{4A3895EE-6F15-4E19-AF8F-C1E701557B6F}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n    <add key=\"ClientSettingsProvider.ServiceUri\" value=\"\" />\n  </appSettings>\n  <startup>\n    <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n  </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <system.web>\n    <membership defaultProvider=\"ClientAuthenticationMembershipProvider\">\n      <providers>\n        <add name=\"ClientAuthenticationMembershipProvider\" type=\"System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" serviceUri=\"\" />\n      </providers>\n    </membership>\n    <roleManager defaultProvider=\"ClientRoleProvider\" enabled=\"true\">\n      <providers>\n        <add name=\"ClientRoleProvider\" type=\"System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" serviceUri=\"\" cacheTimeout=\"86400\" />\n      </providers>\n    </roleManager>\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/FriendshipDemos.vb",
    "content": "﻿Imports LinqToTwitter\n \nClass FriendshipDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n\n        Dim key As Char\n        Do\n            ShowMenu()\n\n            key = Console.ReadKey(True).KeyChar\n\n            Select Case key\n\n                Case \"0\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing friends...\" + vbNewLine)\n                Case \"1\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Looking up user ids...\" + vbNewLine)\n                Case \"2\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Getting incoming...\" + vbNewLine)\n                Case \"3\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Getting Outgoing...\" + vbNewLine)\n                Case \"4\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing no retweet IDs...\" + vbNewLine)\n                Case \"5\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Getting friends list...\" + vbNewLine)\n                    Await ShowFriendsListAsync(twitterCtx)\n                Case \"6\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Getting followers list...\" + vbNewLine)\n                Case \"7\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing followers ids...\" + vbNewLine)\n                Case \"8\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing friend ids...\" + vbNewLine)\n                Case \"9\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Creating friendship...\" + vbNewLine)\n                Case \"a\"c\n                Case \"A\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Unfollowing...\" + vbNewLine)\n                Case \"b\"c\n                Case \"B\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Updating friend settings...\" + vbNewLine)\n                Case \"q\"c\n                Case \"Q\"c\n                    Console.WriteLine()\n                    Console.WriteLine(\"Returning...\" + vbNewLine)\n                    Return\n                Case Else\n                    Console.WriteLine(key + \" is unknown\")\n\n            End Select\n\n        Loop While Char.ToUpper(key) <> \"Q\"c\n\n    End Function\n\n    Shared Sub ShowMenu()\n        Console.WriteLine()\n        Console.WriteLine(\"Friendship Demos - Please select:\")\n        Console.WriteLine()\n\n        Console.WriteLine(vbTab + \" 0. Show Friends\")\n        Console.WriteLine(vbTab + \" 1. Lookup Friendships\")\n        Console.WriteLine(vbTab + \" 2. Incoming Friendships\")\n        Console.WriteLine(vbTab + \" 3. Outgoing Friendships\")\n        Console.WriteLine(vbTab + \" 4. No Retweet IDs\")\n        Console.WriteLine(vbTab + \" 5. Friends List\")\n        Console.WriteLine(vbTab + \" 6. Followers List\")\n        Console.WriteLine(vbTab + \" 7. Follower IDs\")\n        Console.WriteLine(vbTab + \" 8. Friend IDs\")\n        Console.WriteLine(vbTab + \" 9. Create Friendship\")\n        Console.WriteLine(vbTab + \" A. Delete Friendship\")\n        Console.WriteLine(vbTab + \" B. Update Freindship Settings\")\n        Console.WriteLine()\n        Console.WriteLine(vbTab + \" Q. Return to Main menu\")\n    End Sub\n\n    Shared Async Function ShowFriendsListAsync(twitterCtx As TwitterContext) As Task\n\n        Dim cursor As Long = -1\n\n        Do\n            Dim friendship = Await (From [friend] In twitterCtx.Friendship Where _\n                                 [friend].Type = FriendshipType.FriendsList AndAlso _\n                                 [friend].ScreenName = \"JoeMayo\" AndAlso _\n                                 [friend].Cursor = cursor _\n                                 Select [friend]).SingleOrDefaultAsync()\n\n            If Not friendship Is Nothing AndAlso _\n               Not friendship.Users Is Nothing AndAlso\n               Not friendship.CursorMovement Is Nothing Then\n\n                cursor = friendship.CursorMovement.Next\n\n                For Each twitterFriend As User In friendship.Users\n                    Console.WriteLine(\"ID: {0} Name: {1}\", twitterFriend.UserIDResponse, twitterFriend.ScreenNameResponse)\n                Next\n\n            End If\n\n        Loop While cursor <> 0\n\n    End Function\n\n\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/Linq2TwitterVbDemos_Console.vbproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <StartupObject>Sub Main</StartupObject>\n    <RootNamespace>Linq2TwitterVbDemos_Console</RootNamespace>\n    <AssemblyName>Linq2TwitterVbDemos_Console</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <MyType>Console</MyType>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n    <NuGetPackageImportStamp>56a4916a</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <DefineDebug>true</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DocumentationFile>Linq2TwitterVbDemos_Console.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <DefineDebug>false</DefineDebug>\n    <DefineTrace>true</DefineTrace>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DocumentationFile>Linq2TwitterVbDemos_Console.xml</DocumentationFile>\n    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionExplicit>On</OptionExplicit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionCompare>Binary</OptionCompare>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionStrict>Off</OptionStrict>\n  </PropertyGroup>\n  <PropertyGroup>\n    <OptionInfer>On</OptionInfer>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Import Include=\"Microsoft.VisualBasic\" />\n    <Import Include=\"System\" />\n    <Import Include=\"System.Collections\" />\n    <Import Include=\"System.Collections.Generic\" />\n    <Import Include=\"System.Data\" />\n    <Import Include=\"System.Diagnostics\" />\n    <Import Include=\"System.Linq\" />\n    <Import Include=\"System.Xml.Linq\" />\n    <Import Include=\"System.Threading.Tasks\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"StreamDemos.vb\" />\n    <Compile Include=\"FriendshipDemos.vb\" />\n    <Compile Include=\"Program.vb\" />\n    <Compile Include=\"My Project\\AssemblyInfo.vb\" />\n    <Compile Include=\"My Project\\Application.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Application.myapp</DependentUpon>\n    </Compile>\n    <Compile Include=\"My Project\\Resources.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"My Project\\Settings.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"My Project\\Resources.resx\">\n      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.vb</LastGenOutput>\n      <CustomToolNamespace>My.Resources</CustomToolNamespace>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"My Project\\Application.myapp\">\n      <Generator>MyApplicationCodeGenerator</Generator>\n      <LastGenOutput>Application.Designer.vb</LastGenOutput>\n    </None>\n    <None Include=\"My Project\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <CustomToolNamespace>My</CustomToolNamespace>\n      <LastGenOutput>Settings.Designer.vb</LastGenOutput>\n    </None>\n    <None Include=\"App.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\".NETFramework,Version=v4.5\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.VisualBasic.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/Application.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.34014\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/Application.myapp",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<MyApplicationData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <MySubMain>false</MySubMain>\n  <SingleInstance>false</SingleInstance>\n  <ShutdownMode>0</ShutdownMode>\n  <EnableVisualStyles>true</EnableVisualStyles>\n  <AuthenticationMode>0</AuthenticationMode>\n  <ApplicationType>2</ApplicationType>\n  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>\n</MyApplicationData>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/AssemblyInfo.vb",
    "content": "﻿Imports System\nImports System.Reflection\nImports System.Runtime.InteropServices\n\n' General Information about an assembly is controlled through the following \n' set of attributes. Change these attribute values to modify the information\n' associated with an assembly.\n\n' Review the values of the assembly attributes\n\n<Assembly: AssemblyTitle(\"Linq2TwitterVbDemos_Console\")> \n<Assembly: AssemblyDescription(\"\")> \n<Assembly: AssemblyCompany(\"\")> \n<Assembly: AssemblyProduct(\"Linq2TwitterVbDemos_Console\")> \n<Assembly: AssemblyCopyright(\"Copyright ©  2014\")> \n<Assembly: AssemblyTrademark(\"\")> \n\n<Assembly: ComVisible(False)>\n\n'The following GUID is for the ID of the typelib if this project is exposed to COM\n<Assembly: Guid(\"792225d0-b893-4db9-9c1c-1ee4d4040eb4\")> \n\n' Version information for an assembly consists of the following four values:\n'\n'      Major Version\n'      Minor Version \n'      Build Number\n'      Revision\n'\n' You can specify all the values or you can default the Build and Revision Numbers \n' by using the '*' as shown below:\n' <Assembly: AssemblyVersion(\"1.0.*\")> \n\n<Assembly: AssemblyVersion(\"1.0.0.0\")> \n<Assembly: AssemblyFileVersion(\"1.0.0.0\")> \n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/Resources.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.34014\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n\nNamespace My.Resources\n    \n    'This class was auto-generated by the StronglyTypedResourceBuilder\n    'class via a tool like ResGen or Visual Studio.\n    'To add or remove a member, edit your .ResX file then rerun ResGen\n    'with the /str option, or rebuild your VS project.\n    '''<summary>\n    '''  A strongly-typed resource class, for looking up localized strings, etc.\n    '''</summary>\n    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\"), _\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _\n     Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _\n    Friend Module Resources\n\n        Private resourceMan As Global.System.Resources.ResourceManager\n\n        Private resourceCulture As Global.System.Globalization.CultureInfo\n\n        '''<summary>\n        '''  Returns the cached ResourceManager instance used by this class.\n        '''</summary>\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\n        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager\n            Get\n                If Object.ReferenceEquals(resourceMan, Nothing) Then\n                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager(\"Linq2TwitterVbDemos_Console.Resources\", GetType(Resources).Assembly)\n                    resourceMan = temp\n                End If\n                Return resourceMan\n            End Get\n        End Property\n\n        '''<summary>\n        '''  Overrides the current thread's CurrentUICulture property for all\n        '''  resource lookups using this strongly typed resource class.\n        '''</summary>\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\n        Friend Property Culture() As Global.System.Globalization.CultureInfo\n            Get\n                Return resourceCulture\n            End Get\n            Set(ByVal value As Global.System.Globalization.CultureInfo)\n                resourceCulture = value\n            End Set\n        End Property\n    End Module\nEnd Namespace\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/Settings.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.34014\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n\nNamespace My\n\n    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _\n     Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"11.0.0.0\"), _\n     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\n    Partial Friend NotInheritable Class MySettings\n        Inherits Global.System.Configuration.ApplicationSettingsBase\n\n        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)\n\n#Region \"My.Settings Auto-Save Functionality\"\n#If _MyType = \"WindowsForms\" Then\n        Private Shared addedHandler As Boolean\n\n        Private Shared addedHandlerLockObject As New Object\n\n        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\n        Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)\n            If My.Application.SaveMySettingsOnExit Then\n                My.Settings.Save()\n            End If\n        End Sub\n#End If\n#End Region\n\n        Public Shared ReadOnly Property [Default]() As MySettings\n            Get\n\n#If _MyType = \"WindowsForms\" Then\n                   If Not addedHandler Then\n                        SyncLock addedHandlerLockObject\n                            If Not addedHandler Then\n                                AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings\n                                addedHandler = True\n                            End If\n                        End SyncLock\n                    End If\n#End If\n                Return defaultInstance\n            End Get\n        End Property\n    End Class\nEnd Namespace\n\nNamespace My\n    \n    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _\n    Friend Module MySettingsProperty\n        \n        <Global.System.ComponentModel.Design.HelpKeywordAttribute(\"My.Settings\")>  _\n        Friend ReadOnly Property Settings() As Global.Linq2TwitterVbDemos_Console.My.MySettings\n            Get\n                Return Global.Linq2TwitterVbDemos_Console.My.MySettings.Default\n            End Get\n        End Property\n    End Module\nEnd Namespace\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/My Project/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" UseMySettingsClassName=\"true\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/Program.vb",
    "content": "﻿Imports System\nImports System.Configuration\nImports LinqToTwitter\n\nClass Program\n\n    Shared Sub Main()\n        Try\n            Dim demoTask = DoDemosAsync()\n            demoTask.Wait()\n        Catch ex As Exception\n            Console.WriteLine(ex.ToString())\n        End Try\n\n        Console.Write(vbNewLine + \"Press any key to close console window...\")\n        Console.ReadKey(True)\n    End Sub\n\n    Shared Async Function DoDemosAsync() As Task\n        Dim auth = ChooseAuthenticationStrategy()\n\n        Await auth.AuthorizeAsync()\n\n\n        ' This is how you access credentials after authorization.\n        ' The oauthToken and oauthTokenSecret do not expire.\n        ' You can use the userID to associate the credentials with the user.\n        ' You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n        ' You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n        ' When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n\n        'Dim credentials = auth.CredentialStore\n        'Dim oauthToken = credentials.OAuthToken\n        'Dim oauthTokenSecret = credentials.OAuthTokenSecret\n        'Dim screenName = credentials.ScreenName\n        'Dim userID = credentials.UserID\n\n        Dim twitterCtx As New TwitterContext(auth)\n        Dim key As Char\n\n        Do\n            ShowMenu()\n\n            key = Console.ReadKey(True).KeyChar\n\n            Select Case key\n\n                Case \"0\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Account Demos...\" + vbNewLine)\n                    'await AccountDemos.RunAsync(twitterCtx)\n                Case \"1\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Block Demos...\" + vbNewLine)\n                    'Await BlockDemos.RunAsync(twitterCtx)\n                Case \"2\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Direct Message Demos...\" + vbNewLine)\n                    'Await DirectMessageDemos.RunAsync(twitterCtx)\n                Case \"3\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Favorite Demos...\" + vbNewLine)\n                    'Await FavoriteDemos.RunAsync(twitterCtx)\n                Case \"4\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Friendship Demos...\" + vbNewLine)\n                    Await FriendshipDemos.RunAsync(twitterCtx)\n                Case \"5\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Geo Demos...\" + vbNewLine)\n                    'Await GeoDemos.RunAsync(twitterCtx)\n                Case \"6\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Help Demos...\" + vbNewLine)\n                    'Await HelpDemos.RunAsync(twitterCtx)\n                Case \"7\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running List Demos...\" + vbNewLine)\n                    'Await ListDemos.RunAsync(twitterCtx)\n                Case \"8\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Raw Demos...\" + vbNewLine)\n                    'Await RawDemos.RunAsync(twitterCtx)\n                Case \"9\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Saved Search Demos...\" + vbNewLine)\n                    'Await SavedSearchDemos.RunAsync(twitterCtx)\n                Case \"a\"c\n                Case \"A\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Search Demos...\" + vbNewLine)\n                    'Await SearchDemos.RunAsync(twitterCtx)\n                Case \"b\"c\n                Case \"B\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Status Demos...\" + vbNewLine)\n                    'Await StatusDemos.RunAsync(twitterCtx)\n                Case \"c\"c\n                Case \"C\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Stream Demos...\" + vbNewLine)\n                    Await StreamDemos.RunAsync(twitterCtx)\n                Case \"d\"c\n                Case \"D\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Trend Demos...\" + vbNewLine)\n                    'Await TrendDemos.RunAsync(twitterCtx)\n                Case \"e\"c\n                Case \"E\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running User Demos...\" + vbNewLine)\n                    'Await UserDemos.RunAsync(twitterCtx)\n                Case \"f\"c\n                Case \"F\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Running Mutes Demos...\" + vbNewLine)\n                    'Await MuteDemos.RunAsync(twitterCtx)\n                Case \"q\"c\n                Case \"Q\"c\n                    Console.WriteLine()\n                    Console.WriteLine(\"Quitting...\" + vbNewLine)\n                Case Else\n                    Console.WriteLine(key + \" is unknown\")\n\n            End Select\n\n        Loop While Char.ToUpper(key) <> \"Q\"c\n\n        Return\n    End Function\n\n    Shared Sub ShowMenu()\n        Console.WriteLine()\n        Console.WriteLine(\"Please select category:\")\n        Console.WriteLine()\n\n        Console.WriteLine(vbTab + \" 0. Account Demos\")\n        Console.WriteLine(vbTab + \" 1. Block Demos\")\n        Console.WriteLine(vbTab + \" 2. Direct Message Demos\")\n        Console.WriteLine(vbTab + \" 3. Favorite Demos\")\n        Console.WriteLine(vbTab + \" 4. Friendship Demos\")\n        Console.WriteLine(vbTab + \" 5. Geo Demos\")\n        Console.WriteLine(vbTab + \" 6. Help Demos\")\n        Console.WriteLine(vbTab + \" 7. List Demos\")\n        Console.WriteLine(vbTab + \" 8. Raw Demos\")\n        Console.WriteLine(vbTab + \" 9. Saved Search Demos\")\n        Console.WriteLine(vbTab + \" A. Search Demos\")\n        Console.WriteLine(vbTab + \" B. Status Demos\")\n        Console.WriteLine(vbTab + \" C. Stream Demos\")\n        Console.WriteLine(vbTab + \" D. Trend Demos\")\n        Console.WriteLine(vbTab + \" E. User Demos\")\n        Console.WriteLine(vbTab + \" F. Mutes Demos\")\n        Console.WriteLine()\n        Console.WriteLine(vbTab + \" Q. End Program\")\n    End Sub\n\n\n    Shared Function ChooseAuthenticationStrategy() As IAuthorizer\n        Console.WriteLine(\"Authentication Strategy:\")\n        Console.WriteLine()\n\n        Console.WriteLine(\"  1 - Pin (default)\")\n        Console.WriteLine(\"  2 - Application-Only\")\n        Console.WriteLine(\"  3 - Single User\")\n        Console.WriteLine(\"  4 - XAuth\")\n\n        Console.WriteLine()\n        Console.Write(\"Please choose (1, 2, 3, or 4): \")\n\n        Dim input As ConsoleKeyInfo = Console.ReadKey()\n        Console.WriteLine()\n\n        Dim auth As IAuthorizer = Nothing\n\n        Select Case input.Key\n\n            Case ConsoleKey.D1\n                auth = DoPinAuth()\n            Case ConsoleKey.D2\n                auth = DoApplicationOnlyAuth()\n            Case ConsoleKey.D3\n                auth = DoSingleUserAuth()\n            Case ConsoleKey.D4\n                auth = DoXAuth()\n            Case Else\n                auth = DoPinAuth()\n        End Select\n\n        Return auth\n    End Function\n\n    Shared Function DoPinAuth() As IAuthorizer\n\n        Dim credentials As New InMemoryCredentialStore()\n        credentials.ConsumerKey = ConfigurationManager.AppSettings(\"consumerKey\")\n        credentials.ConsumerSecret = ConfigurationManager.AppSettings(\"consumerSecret\")\n\n        Dim auth As New PinAuthorizer()\n        auth.CredentialStore = credentials\n        auth.GetPin =\n            Function()\n                Console.WriteLine()\n                Console.WriteLine(\"After authorizing this application, Twitter will give you a 7-digit PIN Number.\")\n                Console.WriteLine()\n                Console.Write(\"Enter the PIN number here: \")\n                Return Console.ReadLine()\n            End Function\n        auth.GoToTwitterAuthorization = Function(pageLink) Process.Start(pageLink)\n\n        Return auth\n\n    End Function\n\n    Shared Function DoApplicationOnlyAuth() As IAuthorizer\n\n        Dim credentials As New InMemoryCredentialStore()\n        credentials.ConsumerKey = ConfigurationManager.AppSettings(\"consumerKey\")\n        credentials.ConsumerSecret = ConfigurationManager.AppSettings(\"consumerSecret\")\n\n        Dim auth As New ApplicationOnlyAuthorizer()\n        auth.CredentialStore = credentials\n\n        Return auth\n\n    End Function\n\n    Shared Function DoSingleUserAuth() As IAuthorizer\n\n        Dim credentials As New SingleUserInMemoryCredentialStore()\n        credentials.ConsumerKey = ConfigurationManager.AppSettings(\"consumerKey\")\n        credentials.ConsumerSecret = ConfigurationManager.AppSettings(\"consumerSecret\")\n        credentials.AccessToken = ConfigurationManager.AppSettings(\"accessToken\")\n        credentials.AccessTokenSecret = ConfigurationManager.AppSettings(\"accessTokenSecret\")\n\n        Dim auth As New SingleUserAuthorizer()\n        auth.CredentialStore = credentials\n\n        Return auth\n\n    End Function\n\n    Shared Function DoXAuth() As IAuthorizer\n\n        Dim credentials As New XAuthCredentials()\n        credentials.ConsumerKey = ConfigurationManager.AppSettings(\"consumerKey\")\n        credentials.ConsumerSecret = ConfigurationManager.AppSettings(\"consumerSecret\")\n        credentials.UserName = \"YourUserName\"\n        credentials.Password = \"YourPassword\"\n\n        Dim auth As New XAuthAuthorizer()\n        auth.CredentialStore = credentials\n\n        Return auth\n\n    End Function\n\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/StreamDemos.vb",
    "content": "﻿Imports LinqToTwitter\n \nClass StreamDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n\n        Dim key As Char\n        Do\n            ShowMenu()\n\n            key = Console.ReadKey(True).KeyChar\n\n            Select Case key\n\n                Case \"0\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing Filter Stream...\" + vbNewLine)\n                Case \"1\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing Sample Stream...\" + vbNewLine)\n                Case \"2\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing User Stream...\" + vbNewLine)\n                Case \"3\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Showing Site Stream...\" + vbNewLine)\n                Case \"4\"c\n                    Console.WriteLine(vbNewLine + vbTab + \"Using Control Stream...\" + vbNewLine)\n                Case \"q\"c\n                Case \"Q\"c\n                    Console.WriteLine()\n                    Console.WriteLine(\"Returning...\" + vbNewLine)\n                    Return\n                Case Else\n                    Console.WriteLine(key + \" is unknown\")\n\n            End Select\n\n        Loop While Char.ToUpper(key) <> \"Q\"c\n\n    End Function\n\n    Shared Sub ShowMenu()\n        Console.WriteLine()\n        Console.WriteLine(\"Streaming Demos - Please select:\")\n        Console.WriteLine()\n\n        Console.WriteLine(vbTab + \" 0. Filter Stream\")\n        Console.WriteLine(vbTab + \" 1. Sample Stream\")\n        Console.WriteLine(vbTab + \" 2. User Stream\")\n        Console.WriteLine(vbTab + \" 3. Site Stream\")\n        Console.WriteLine(vbTab + \" 4. Control Stream\")\n        Console.WriteLine()\n        Console.WriteLine(vbTab + \" Q. Return to Main menu\")\n    End Sub\n\n    Shared Async Function DoFilterStreamAsync(twitterCtx As TwitterContext) As Task\n\n        Console.WriteLine()\n        Console.WriteLine(\"Streamed Content:\")\n        Console.WriteLine()\n\n        Dim count As Integer = 0\n\n        Await _\n            (From strm In twitterCtx.Streaming _\n             Where strm.Type = StreamingType.Filter And _\n             strm.Track = \"twitter\") _\n            .StartAsync( _\n                Async Function(strm)\n                    Console.WriteLine(strm.Content + vbLf)\n                    If System.Math.Max(System.Threading.Interlocked.Increment(count), count - 1) >= 5 Then\n                        strm.CloseStream()\n                    End If\n                    Return\n                End Function)\n\n    End Function\n\n\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter4/Linq2TwitterVbDemos_Console/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/App.xaml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<Application xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\"\n             x:Class=\"NetStd.App\">\n\t<Application.Resources>\n\n\t\t<!-- Application resource dictionary -->\n\n\t</Application.Resources>\n</Application>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/App.xaml.cs",
    "content": "﻿using NetStd.Views;\n\nusing Xamarin.Forms;\n\nnamespace NetStd\n{\n    public partial class App : Application\n\t{\n\t\tpublic App ()\n\t\t{\n\t\t\tInitializeComponent();\n\n\t\t\tMainPage = new TweetView();\n\t\t}\n\n\t\tprotected override void OnStart ()\n\t\t{\n\t\t\t// Handle when your app starts\n\t\t}\n\n\t\tprotected override void OnSleep ()\n\t\t{\n\t\t\t// Handle when your app sleeps\n\t\t}\n\n\t\tprotected override void OnResume ()\n\t\t{\n\t\t\t// Handle when your app resumes\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/Models/ILinqToTwitterAuthorizer.cs",
    "content": "﻿using LinqToTwitter;\n\nnamespace NetStd.Models\n{\n    public interface ILinqToTwitterAuthorizer\n    {\n        IAuthorizer GetAuthorizer(string consumerKey, string consumerSecret);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/Models/Tweet.cs",
    "content": "﻿namespace NetStd.Models\n{\n    public class Tweet\n    {\n        public ulong StatusID { get; set; }\n\n        public string ScreenName { get; set; }\n\n        public string Text { get; set; }\n\n        public string ImageUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/Models/TweetingViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing Xamarin.Forms;\n\nnamespace NetStd.Models\n{\n    public class TweetingViewModel : INotifyPropertyChanged\n    {\n        List<Tweet> tweets;\n        public List<Tweet> Tweets\n        {\n            get { return tweets; }\n            set\n            {\n                if (tweets == value) return;\n\n                tweets = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public async Task InitTweetViewModel()\n        {\n            string consumerKey = \"\";\n            string consumerSecret = \"\";\n\n            var authSvc = DependencyService.Get<ILinqToTwitterAuthorizer>();\n            IAuthorizer auth = authSvc.GetAuthorizer(consumerKey, consumerSecret);\n\n            await auth.AuthorizeAsync();\n\n            var ctx = new TwitterContext(auth);\n\n            Search searchResponse = await\n                (from search in ctx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == \"\\\"Twitter\\\"\"\n                 select search)\n                .SingleAsync();\n\n            Tweets =\n                (from tweet in searchResponse.Statuses\n                 select new Tweet\n                 {\n                     StatusID = tweet.StatusID,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     Text = tweet.Text,\n                     ImageUrl = tweet.User.ProfileImageUrl\n                 })\n                .ToList();\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)\n        {\n            if (propertyName == null)\n                throw new ArgumentNullException(\"Can't call OnPropertyChanged with a null property name.\", propertyName);\n\n            PropertyChangedEventHandler propChangedHandler = PropertyChanged;\n            if (propChangedHandler != null)\n                propChangedHandler(this, new PropertyChangedEventArgs(propertyName));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/NetStd.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\n    <PackageReference Include=\"System.Reactive.Core\" Version=\"3.1.1\" />\n    <PackageReference Include=\"System.Reactive.Interfaces\" Version=\"3.1.1\" />\n    <PackageReference Include=\"System.Reactive.Linq\" Version=\"3.1.1\" />\n    <PackageReference Include=\"System.Reactive.PlatformServices\" Version=\"3.1.1\" />\n    <PackageReference Include=\"Xamarin.Forms\" Version=\"2.5.0.121934\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitter.netstandard\">\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.netstandard\\bin\\Debug\\netstandard2.0\\LinqToTwitter.netstandard.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Condition=\" '$(EnableDefaultCompileItems)' == 'true' \" Update=\"App.xaml.cs\">\n      <DependentUpon>*.xaml</DependentUpon>\n    </Compile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/Views/TweetView.xaml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<ContentPage xmlns=\"http://xamarin.com/schemas/2014/forms\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2009/xaml\"\n             x:Class=\"NetStd.Views.TweetView\">\n  <StackLayout>\n    <Label Text=\"LINQ to Twitter Demo\"/>\n    <ListView ItemsSource=\"{Binding Tweets}\">\n      <ListView.ItemTemplate>\n        <DataTemplate>\n          <ImageCell ImageSource=\"{Binding ImageUrl}\" Text=\"{Binding ScreenName}\" Detail=\"{Binding Text}\"/>\n        </DataTemplate>\n      </ListView.ItemTemplate>\n    </ListView>\n  </StackLayout>\n</ContentPage>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd/Views/TweetView.xaml.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\n\nusing Xamarin.Forms;\nusing NetStd.Models;\n\nnamespace NetStd.Views\n{\n    public partial class TweetView : ContentPage\n    {\n        readonly TweetingViewModel tweetVM = new TweetingViewModel();\n\n        public TweetView()\n        {\n            InitializeComponent();\n        }\n\n        protected override async void OnAppearing()\n        {\n            base.OnAppearing();\n\n            BindingContext = tweetVM;\n            try\n            {\n                await tweetVM.InitTweetViewModel();\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(ex.ToString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Assets/AboutAssets.txt",
    "content": "Any raw assets you want to be deployed with your application can be placed in\nthis directory (and child directories) and given a Build Action of \"AndroidAsset\".\n\nThese files will be deployed with you package and will be accessible using Android's\nAssetManager, like this:\n\npublic class ReadAsset : Activity\n{\n\tprotected override void OnCreate (Bundle bundle)\n\t{\n\t\tbase.OnCreate (bundle);\n\n\t\tInputStream input = Assets.Open (\"my_asset.txt\");\n\t}\n}\n\nAdditionally, some Android functions will automatically load asset files:\n\nTypeface tf = Typeface.CreateFromAsset (Context.Assets, \"fonts/samplefont.ttf\");\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/LinqToTwitterApplicationOnlyAuthorizer.cs",
    "content": "﻿using LinqToTwitter;\nusing NetStd.Droid;\nusing NetStd.Models;\n\n[assembly: Xamarin.Forms.Dependency(typeof(LinqToTwitterApplicationOnlyAuthorizer))]\nnamespace NetStd.Droid\n{\n    public class LinqToTwitterApplicationOnlyAuthorizer : ILinqToTwitterAuthorizer\n    {\n        public IAuthorizer GetAuthorizer(string consumerKey, string consumerSecret)\n        {\n            return new ApplicationOnlyAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = consumerKey,\n                    ConsumerSecret = consumerSecret,\n                },\n            };\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/MainActivity.cs",
    "content": "﻿using System;\n\nusing Android.App;\nusing Android.Content.PM;\nusing Android.Runtime;\nusing Android.Views;\nusing Android.Widget;\nusing Android.OS;\n\nnamespace NetStd.Droid\n{\n    [Activity(Label = \"NetStd\", Icon = \"@drawable/icon\", Theme = \"@style/MainTheme\", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]\n    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity\n    {\n        protected override void OnCreate(Bundle bundle)\n        {\n            TabLayoutResource = Resource.Layout.Tabbar;\n            ToolbarResource = Resource.Layout.Toolbar;\n\n            base.OnCreate(bundle);\n\n            global::Xamarin.Forms.Forms.Init(this, bundle);\n            LoadApplication(new App());\n        }\n    }\n}\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/NetStd.Android.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}</ProjectGuid>\n    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <RootNamespace>NetStd.Droid</RootNamespace>\n    <AssemblyName>NetStd.Android</AssemblyName>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <AndroidApplication>True</AndroidApplication>\n    <AndroidResgenFile>Resources\\Resource.designer.cs</AndroidResgenFile>\n    <AndroidResgenClass>Resource</AndroidResgenClass>\n    <AndroidManifest>Properties\\AndroidManifest.xml</AndroidManifest>\n    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>\n    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>\n    <AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidLinkMode>None</AndroidLinkMode>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AndroidManagedSymbols>true</AndroidManagedSymbols>\n    <AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitter.netstandard\">\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.netstandard\\bin\\Debug\\netstandard2.0\\LinqToTwitter.netstandard.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Android\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>13.0.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Core\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Interfaces\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Linq\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.PlatformServices\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"Xamarin.Forms\" Version=\"2.5.0.121934\" />\n    <PackageReference Include=\"Xamarin.Android.Support.Design\" Version=\"26.1.0.1\" />\n    <PackageReference Include=\"Xamarin.Android.Support.v7.AppCompat\" Version=\"26.1.0.1\" />\n    <PackageReference Include=\"Xamarin.Android.Support.v4\" Version=\"26.1.0.1\" />\n    <PackageReference Include=\"Xamarin.Android.Support.v7.CardView\" Version=\"26.1.0.1\" />\n    <PackageReference Include=\"Xamarin.Android.Support.v7.MediaRouter\" Version=\"26.1.0.1\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"LinqToTwitterApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"MainActivity.cs\" />\n    <Compile Include=\"Resources\\Resource.Designer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Resources\\AboutResources.txt\" />\n    <None Include=\"Assets\\AboutAssets.txt\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AndroidResource Include=\"Resources\\drawable\\icon.png\" />\n    <AndroidResource Include=\"Resources\\drawable-hdpi\\icon.png\" />\n    <AndroidResource Include=\"Resources\\drawable-xhdpi\\icon.png\" />\n    <AndroidResource Include=\"Resources\\drawable-xxhdpi\\icon.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Properties\\AndroidManifest.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AndroidResource Include=\"Resources\\layout\\Tabbar.axml\" />\n    <AndroidResource Include=\"Resources\\layout\\Toolbar.axml\" />\n    <AndroidResource Include=\"Resources\\values\\styles.xml\">\n      <SubType>Designer</SubType>\n    </AndroidResource>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\NetStd\\NetStd.csproj\">\n      <Project>{6BDE94CA-4ACB-4E4D-886B-7EEC591ED9BE}</Project>\n      <Name>NetStd</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\Android\\Xamarin.Android.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Properties/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" android:versionCode=\"1\" android:versionName=\"1.0\" package=\"com.companyname.NetStd\">\n\t<uses-sdk android:minSdkVersion=\"15\" android:targetSdkVersion=\"28\" />\n\t<application android:label=\"NetStd.Android\"></application>\n</manifest>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Android.App;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"NetStd.Android\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"NetStd.Android\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: ComVisible(false)]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n\n// Add some common permissions, these can be removed if not needed\n[assembly: UsesPermission(Android.Manifest.Permission.Internet)]\n[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (main.xml),\nan internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    drawable-hdpi/\n        icon.png\n\n    drawable-ldpi/\n        icon.png\n\n    drawable-mdpi/\n        icon.png\n\n    layout/\n        main.xml\n\n    values/\n        strings.xml\n\nIn order to get the build system to recognize Android resources, set the build action to\n\"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called\n\"Resource\" that contains the tokens for each one of the resources included. For example, \nfor the above Resources layout, this is what the Resource class would expose:\n\npublic class Resource {\n    public class drawable {\n        public const int icon = 0x123;\n    }\n\n    public class layout {\n        public const int main = 0x456;\n    }\n\n    public class strings {\n        public const int first_string = 0xabc;\n        public const int second_string = 0xbcd;\n    }\n}\n\nYou would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main \nto reference the layout/main.xml file, or Resource.strings.first_string to reference the first \nstring in the dictionary file values/strings.xml.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/Resource.designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"NetStd.Droid.Resource\", IsApplication=true)]\n\nnamespace NetStd.Droid\n{\n\t\n\t\n\t[System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"1.0.0.0\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t\tglobal::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSize = global::NetStd.Droid.Resource.Attribute.actionBarSize;\n\t\t}\n\t\t\n\t\tpublic partial class Animation\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040000\n\t\t\tpublic const int abc_fade_in = 2130968576;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040001\n\t\t\tpublic const int abc_fade_out = 2130968577;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040002\n\t\t\tpublic const int abc_grow_fade_in_from_bottom = 2130968578;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040003\n\t\t\tpublic const int abc_popup_enter = 2130968579;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040004\n\t\t\tpublic const int abc_popup_exit = 2130968580;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040005\n\t\t\tpublic const int abc_shrink_fade_out_from_bottom = 2130968581;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040006\n\t\t\tpublic const int abc_slide_in_bottom = 2130968582;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040007\n\t\t\tpublic const int abc_slide_in_top = 2130968583;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040008\n\t\t\tpublic const int abc_slide_out_bottom = 2130968584;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f040009\n\t\t\tpublic const int abc_slide_out_top = 2130968585;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f04000a\n\t\t\tpublic const int design_bottom_sheet_slide_in = 2130968586;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f04000b\n\t\t\tpublic const int design_bottom_sheet_slide_out = 2130968587;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f04000c\n\t\t\tpublic const int design_snackbar_in = 2130968588;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f04000d\n\t\t\tpublic const int design_snackbar_out = 2130968589;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f04000e\n\t\t\tpublic const int tooltip_enter = 2130968590;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f04000f\n\t\t\tpublic const int tooltip_exit = 2130968591;\n\t\t\t\n\t\t\tstatic Animation()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Animation()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Animator\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f050000\n\t\t\tpublic const int design_appbar_state_list_animator = 2131034112;\n\t\t\t\n\t\t\tstatic Animator()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Animator()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01006b\n\t\t\tpublic const int actionBarDivider = 2130772075;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01006c\n\t\t\tpublic const int actionBarItemBackground = 2130772076;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010065\n\t\t\tpublic const int actionBarPopupTheme = 2130772069;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01006a\n\t\t\tpublic const int actionBarSize = 2130772074;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010067\n\t\t\tpublic const int actionBarSplitStyle = 2130772071;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010066\n\t\t\tpublic const int actionBarStyle = 2130772070;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010061\n\t\t\tpublic const int actionBarTabBarStyle = 2130772065;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010060\n\t\t\tpublic const int actionBarTabStyle = 2130772064;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010062\n\t\t\tpublic const int actionBarTabTextStyle = 2130772066;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010068\n\t\t\tpublic const int actionBarTheme = 2130772072;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010069\n\t\t\tpublic const int actionBarWidgetTheme = 2130772073;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010086\n\t\t\tpublic const int actionButtonStyle = 2130772102;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010082\n\t\t\tpublic const int actionDropDownStyle = 2130772098;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100dd\n\t\t\tpublic const int actionLayout = 2130772189;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01006d\n\t\t\tpublic const int actionMenuTextAppearance = 2130772077;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01006e\n\t\t\tpublic const int actionMenuTextColor = 2130772078;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010071\n\t\t\tpublic const int actionModeBackground = 2130772081;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010070\n\t\t\tpublic const int actionModeCloseButtonStyle = 2130772080;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010073\n\t\t\tpublic const int actionModeCloseDrawable = 2130772083;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010075\n\t\t\tpublic const int actionModeCopyDrawable = 2130772085;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010074\n\t\t\tpublic const int actionModeCutDrawable = 2130772084;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010079\n\t\t\tpublic const int actionModeFindDrawable = 2130772089;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010076\n\t\t\tpublic const int actionModePasteDrawable = 2130772086;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01007b\n\t\t\tpublic const int actionModePopupWindowStyle = 2130772091;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010077\n\t\t\tpublic const int actionModeSelectAllDrawable = 2130772087;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010078\n\t\t\tpublic const int actionModeShareDrawable = 2130772088;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010072\n\t\t\tpublic const int actionModeSplitBackground = 2130772082;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01006f\n\t\t\tpublic const int actionModeStyle = 2130772079;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01007a\n\t\t\tpublic const int actionModeWebSearchDrawable = 2130772090;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010063\n\t\t\tpublic const int actionOverflowButtonStyle = 2130772067;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010064\n\t\t\tpublic const int actionOverflowMenuStyle = 2130772068;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100df\n\t\t\tpublic const int actionProviderClass = 2130772191;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100de\n\t\t\tpublic const int actionViewClass = 2130772190;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01008e\n\t\t\tpublic const int activityChooserViewStyle = 2130772110;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b3\n\t\t\tpublic const int alertDialogButtonGroupStyle = 2130772147;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b4\n\t\t\tpublic const int alertDialogCenterButtons = 2130772148;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b2\n\t\t\tpublic const int alertDialogStyle = 2130772146;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b5\n\t\t\tpublic const int alertDialogTheme = 2130772149;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100cb\n\t\t\tpublic const int allowStacking = 2130772171;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100cc\n\t\t\tpublic const int alpha = 2130772172;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100da\n\t\t\tpublic const int alphabeticModifiers = 2130772186;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d3\n\t\t\tpublic const int arrowHeadLength = 2130772179;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d4\n\t\t\tpublic const int arrowShaftLength = 2130772180;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ba\n\t\t\tpublic const int autoCompleteTextViewStyle = 2130772154;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010054\n\t\t\tpublic const int autoSizeMaxTextSize = 2130772052;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010053\n\t\t\tpublic const int autoSizeMinTextSize = 2130772051;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010052\n\t\t\tpublic const int autoSizePresetSizes = 2130772050;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010051\n\t\t\tpublic const int autoSizeStepGranularity = 2130772049;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010050\n\t\t\tpublic const int autoSizeTextType = 2130772048;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01002e\n\t\t\tpublic const int background = 2130772014;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010030\n\t\t\tpublic const int backgroundSplit = 2130772016;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01002f\n\t\t\tpublic const int backgroundStacked = 2130772015;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010116\n\t\t\tpublic const int backgroundTint = 2130772246;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010117\n\t\t\tpublic const int backgroundTintMode = 2130772247;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d5\n\t\t\tpublic const int barLength = 2130772181;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010141\n\t\t\tpublic const int behavior_autoHide = 2130772289;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01011e\n\t\t\tpublic const int behavior_hideable = 2130772254;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01014a\n\t\t\tpublic const int behavior_overlapTop = 2130772298;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01011d\n\t\t\tpublic const int behavior_peekHeight = 2130772253;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01011f\n\t\t\tpublic const int behavior_skipCollapsed = 2130772255;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01013f\n\t\t\tpublic const int borderWidth = 2130772287;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01008b\n\t\t\tpublic const int borderlessButtonStyle = 2130772107;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010139\n\t\t\tpublic const int bottomSheetDialogTheme = 2130772281;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01013a\n\t\t\tpublic const int bottomSheetStyle = 2130772282;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010088\n\t\t\tpublic const int buttonBarButtonStyle = 2130772104;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b8\n\t\t\tpublic const int buttonBarNegativeButtonStyle = 2130772152;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b9\n\t\t\tpublic const int buttonBarNeutralButtonStyle = 2130772153;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b7\n\t\t\tpublic const int buttonBarPositiveButtonStyle = 2130772151;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010087\n\t\t\tpublic const int buttonBarStyle = 2130772103;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01010b\n\t\t\tpublic const int buttonGravity = 2130772235;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010043\n\t\t\tpublic const int buttonPanelSideLayout = 2130772035;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100bb\n\t\t\tpublic const int buttonStyle = 2130772155;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100bc\n\t\t\tpublic const int buttonStyleSmall = 2130772156;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100cd\n\t\t\tpublic const int buttonTint = 2130772173;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ce\n\t\t\tpublic const int buttonTintMode = 2130772174;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010017\n\t\t\tpublic const int cardBackgroundColor = 2130771991;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010018\n\t\t\tpublic const int cardCornerRadius = 2130771992;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010019\n\t\t\tpublic const int cardElevation = 2130771993;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01001a\n\t\t\tpublic const int cardMaxElevation = 2130771994;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01001c\n\t\t\tpublic const int cardPreventCornerOverlap = 2130771996;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01001b\n\t\t\tpublic const int cardUseCompatPadding = 2130771995;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100bd\n\t\t\tpublic const int checkboxStyle = 2130772157;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100be\n\t\t\tpublic const int checkedTextViewStyle = 2130772158;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ee\n\t\t\tpublic const int closeIcon = 2130772206;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010040\n\t\t\tpublic const int closeItemLayout = 2130772032;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01010d\n\t\t\tpublic const int collapseContentDescription = 2130772237;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01010c\n\t\t\tpublic const int collapseIcon = 2130772236;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01012c\n\t\t\tpublic const int collapsedTitleGravity = 2130772268;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010126\n\t\t\tpublic const int collapsedTitleTextAppearance = 2130772262;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100cf\n\t\t\tpublic const int color = 2130772175;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100aa\n\t\t\tpublic const int colorAccent = 2130772138;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b1\n\t\t\tpublic const int colorBackgroundFloating = 2130772145;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ae\n\t\t\tpublic const int colorButtonNormal = 2130772142;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ac\n\t\t\tpublic const int colorControlActivated = 2130772140;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ad\n\t\t\tpublic const int colorControlHighlight = 2130772141;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ab\n\t\t\tpublic const int colorControlNormal = 2130772139;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ca\n\t\t\tpublic const int colorError = 2130772170;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a8\n\t\t\tpublic const int colorPrimary = 2130772136;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a9\n\t\t\tpublic const int colorPrimaryDark = 2130772137;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100af\n\t\t\tpublic const int colorSwitchThumbNormal = 2130772143;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f3\n\t\t\tpublic const int commitIcon = 2130772211;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e0\n\t\t\tpublic const int contentDescription = 2130772192;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010039\n\t\t\tpublic const int contentInsetEnd = 2130772025;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01003d\n\t\t\tpublic const int contentInsetEndWithActions = 2130772029;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01003a\n\t\t\tpublic const int contentInsetLeft = 2130772026;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01003b\n\t\t\tpublic const int contentInsetRight = 2130772027;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010038\n\t\t\tpublic const int contentInsetStart = 2130772024;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01003c\n\t\t\tpublic const int contentInsetStartWithNavigation = 2130772028;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01001d\n\t\t\tpublic const int contentPadding = 2130771997;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010021\n\t\t\tpublic const int contentPaddingBottom = 2130772001;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01001e\n\t\t\tpublic const int contentPaddingLeft = 2130771998;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01001f\n\t\t\tpublic const int contentPaddingRight = 2130771999;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010020\n\t\t\tpublic const int contentPaddingTop = 2130772000;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010127\n\t\t\tpublic const int contentScrim = 2130772263;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b0\n\t\t\tpublic const int controlBackground = 2130772144;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010160\n\t\t\tpublic const int counterEnabled = 2130772320;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010161\n\t\t\tpublic const int counterMaxLength = 2130772321;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010163\n\t\t\tpublic const int counterOverflowTextAppearance = 2130772323;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010162\n\t\t\tpublic const int counterTextAppearance = 2130772322;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010031\n\t\t\tpublic const int customNavigationLayout = 2130772017;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ed\n\t\t\tpublic const int defaultQueryHint = 2130772205;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010080\n\t\t\tpublic const int dialogPreferredPadding = 2130772096;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01007f\n\t\t\tpublic const int dialogTheme = 2130772095;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010027\n\t\t\tpublic const int displayOptions = 2130772007;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01002d\n\t\t\tpublic const int divider = 2130772013;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01008d\n\t\t\tpublic const int dividerHorizontal = 2130772109;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d9\n\t\t\tpublic const int dividerPadding = 2130772185;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01008c\n\t\t\tpublic const int dividerVertical = 2130772108;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d1\n\t\t\tpublic const int drawableSize = 2130772177;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010022\n\t\t\tpublic const int drawerArrowStyle = 2130772002;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01009f\n\t\t\tpublic const int dropDownListViewStyle = 2130772127;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010083\n\t\t\tpublic const int dropdownListPreferredItemHeight = 2130772099;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010094\n\t\t\tpublic const int editTextBackground = 2130772116;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010093\n\t\t\tpublic const int editTextColor = 2130772115;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100bf\n\t\t\tpublic const int editTextStyle = 2130772159;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01003e\n\t\t\tpublic const int elevation = 2130772030;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01015e\n\t\t\tpublic const int errorEnabled = 2130772318;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01015f\n\t\t\tpublic const int errorTextAppearance = 2130772319;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010042\n\t\t\tpublic const int expandActivityOverflowButtonDrawable = 2130772034;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010118\n\t\t\tpublic const int expanded = 2130772248;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01012d\n\t\t\tpublic const int expandedTitleGravity = 2130772269;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010120\n\t\t\tpublic const int expandedTitleMargin = 2130772256;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010124\n\t\t\tpublic const int expandedTitleMarginBottom = 2130772260;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010123\n\t\t\tpublic const int expandedTitleMarginEnd = 2130772259;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010121\n\t\t\tpublic const int expandedTitleMarginStart = 2130772257;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010122\n\t\t\tpublic const int expandedTitleMarginTop = 2130772258;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010125\n\t\t\tpublic const int expandedTitleTextAppearance = 2130772261;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010015\n\t\t\tpublic const int externalRouteEnabledDrawable = 2130771989;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01013d\n\t\t\tpublic const int fabSize = 2130772285;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010004\n\t\t\tpublic const int fastScrollEnabled = 2130771972;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010007\n\t\t\tpublic const int fastScrollHorizontalThumbDrawable = 2130771975;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010008\n\t\t\tpublic const int fastScrollHorizontalTrackDrawable = 2130771976;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010005\n\t\t\tpublic const int fastScrollVerticalThumbDrawable = 2130771973;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010006\n\t\t\tpublic const int fastScrollVerticalTrackDrawable = 2130771974;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010171\n\t\t\tpublic const int font = 2130772337;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010055\n\t\t\tpublic const int fontFamily = 2130772053;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01016a\n\t\t\tpublic const int fontProviderAuthority = 2130772330;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01016d\n\t\t\tpublic const int fontProviderCerts = 2130772333;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01016e\n\t\t\tpublic const int fontProviderFetchStrategy = 2130772334;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01016f\n\t\t\tpublic const int fontProviderFetchTimeout = 2130772335;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01016b\n\t\t\tpublic const int fontProviderPackage = 2130772331;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01016c\n\t\t\tpublic const int fontProviderQuery = 2130772332;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010170\n\t\t\tpublic const int fontStyle = 2130772336;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010172\n\t\t\tpublic const int fontWeight = 2130772338;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010142\n\t\t\tpublic const int foregroundInsidePadding = 2130772290;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d2\n\t\t\tpublic const int gapBetweenBars = 2130772178;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ef\n\t\t\tpublic const int goIcon = 2130772207;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010148\n\t\t\tpublic const int headerLayout = 2130772296;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010023\n\t\t\tpublic const int height = 2130772003;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010037\n\t\t\tpublic const int hideOnContentScroll = 2130772023;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010164\n\t\t\tpublic const int hintAnimationEnabled = 2130772324;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01015d\n\t\t\tpublic const int hintEnabled = 2130772317;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01015c\n\t\t\tpublic const int hintTextAppearance = 2130772316;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010085\n\t\t\tpublic const int homeAsUpIndicator = 2130772101;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010032\n\t\t\tpublic const int homeLayout = 2130772018;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01002b\n\t\t\tpublic const int icon = 2130772011;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e2\n\t\t\tpublic const int iconTint = 2130772194;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e3\n\t\t\tpublic const int iconTintMode = 2130772195;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100eb\n\t\t\tpublic const int iconifiedByDefault = 2130772203;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010095\n\t\t\tpublic const int imageButtonStyle = 2130772117;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010034\n\t\t\tpublic const int indeterminateProgressStyle = 2130772020;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010041\n\t\t\tpublic const int initialActivityCount = 2130772033;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010149\n\t\t\tpublic const int insetForeground = 2130772297;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010024\n\t\t\tpublic const int isLightTheme = 2130772004;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010146\n\t\t\tpublic const int itemBackground = 2130772294;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010144\n\t\t\tpublic const int itemIconTint = 2130772292;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010036\n\t\t\tpublic const int itemPadding = 2130772022;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010147\n\t\t\tpublic const int itemTextAppearance = 2130772295;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010145\n\t\t\tpublic const int itemTextColor = 2130772293;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010131\n\t\t\tpublic const int keylines = 2130772273;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ea\n\t\t\tpublic const int layout = 2130772202;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010000\n\t\t\tpublic const int layoutManager = 2130771968;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010134\n\t\t\tpublic const int layout_anchor = 2130772276;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010136\n\t\t\tpublic const int layout_anchorGravity = 2130772278;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010133\n\t\t\tpublic const int layout_behavior = 2130772275;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01012f\n\t\t\tpublic const int layout_collapseMode = 2130772271;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010130\n\t\t\tpublic const int layout_collapseParallaxMultiplier = 2130772272;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010138\n\t\t\tpublic const int layout_dodgeInsetEdges = 2130772280;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010137\n\t\t\tpublic const int layout_insetEdge = 2130772279;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010135\n\t\t\tpublic const int layout_keyline = 2130772277;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01011b\n\t\t\tpublic const int layout_scrollFlags = 2130772251;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01011c\n\t\t\tpublic const int layout_scrollInterpolator = 2130772252;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a7\n\t\t\tpublic const int listChoiceBackgroundIndicator = 2130772135;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010081\n\t\t\tpublic const int listDividerAlertDialog = 2130772097;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010047\n\t\t\tpublic const int listItemLayout = 2130772039;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010044\n\t\t\tpublic const int listLayout = 2130772036;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c7\n\t\t\tpublic const int listMenuViewStyle = 2130772167;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a0\n\t\t\tpublic const int listPopupWindowStyle = 2130772128;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01009a\n\t\t\tpublic const int listPreferredItemHeight = 2130772122;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01009c\n\t\t\tpublic const int listPreferredItemHeightLarge = 2130772124;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01009b\n\t\t\tpublic const int listPreferredItemHeightSmall = 2130772123;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01009d\n\t\t\tpublic const int listPreferredItemPaddingLeft = 2130772125;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01009e\n\t\t\tpublic const int listPreferredItemPaddingRight = 2130772126;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01002c\n\t\t\tpublic const int logo = 2130772012;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010110\n\t\t\tpublic const int logoDescription = 2130772240;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01014b\n\t\t\tpublic const int maxActionInlineWidth = 2130772299;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01010a\n\t\t\tpublic const int maxButtonHeight = 2130772234;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d7\n\t\t\tpublic const int measureWithLargestChild = 2130772183;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010009\n\t\t\tpublic const int mediaRouteAudioTrackDrawable = 2130771977;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01000a\n\t\t\tpublic const int mediaRouteButtonStyle = 2130771978;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010016\n\t\t\tpublic const int mediaRouteButtonTint = 2130771990;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01000b\n\t\t\tpublic const int mediaRouteCloseDrawable = 2130771979;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01000c\n\t\t\tpublic const int mediaRouteControlPanelThemeOverlay = 2130771980;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01000d\n\t\t\tpublic const int mediaRouteDefaultIconDrawable = 2130771981;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01000e\n\t\t\tpublic const int mediaRoutePauseDrawable = 2130771982;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01000f\n\t\t\tpublic const int mediaRoutePlayDrawable = 2130771983;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010010\n\t\t\tpublic const int mediaRouteSpeakerGroupIconDrawable = 2130771984;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010011\n\t\t\tpublic const int mediaRouteSpeakerIconDrawable = 2130771985;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010012\n\t\t\tpublic const int mediaRouteStopDrawable = 2130771986;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010013\n\t\t\tpublic const int mediaRouteTheme = 2130771987;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010014\n\t\t\tpublic const int mediaRouteTvIconDrawable = 2130771988;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010143\n\t\t\tpublic const int menu = 2130772291;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010045\n\t\t\tpublic const int multiChoiceItemLayout = 2130772037;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01010f\n\t\t\tpublic const int navigationContentDescription = 2130772239;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01010e\n\t\t\tpublic const int navigationIcon = 2130772238;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010026\n\t\t\tpublic const int navigationMode = 2130772006;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100db\n\t\t\tpublic const int numericModifiers = 2130772187;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e6\n\t\t\tpublic const int overlapAnchor = 2130772198;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e8\n\t\t\tpublic const int paddingBottomNoButtons = 2130772200;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010114\n\t\t\tpublic const int paddingEnd = 2130772244;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010113\n\t\t\tpublic const int paddingStart = 2130772243;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e9\n\t\t\tpublic const int paddingTopNoTitle = 2130772201;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a4\n\t\t\tpublic const int panelBackground = 2130772132;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a6\n\t\t\tpublic const int panelMenuListTheme = 2130772134;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a5\n\t\t\tpublic const int panelMenuListWidth = 2130772133;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010167\n\t\t\tpublic const int passwordToggleContentDescription = 2130772327;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010166\n\t\t\tpublic const int passwordToggleDrawable = 2130772326;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010165\n\t\t\tpublic const int passwordToggleEnabled = 2130772325;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010168\n\t\t\tpublic const int passwordToggleTint = 2130772328;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010169\n\t\t\tpublic const int passwordToggleTintMode = 2130772329;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010091\n\t\t\tpublic const int popupMenuStyle = 2130772113;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01003f\n\t\t\tpublic const int popupTheme = 2130772031;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010092\n\t\t\tpublic const int popupWindowStyle = 2130772114;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e4\n\t\t\tpublic const int preserveIconSpacing = 2130772196;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01013e\n\t\t\tpublic const int pressedTranslationZ = 2130772286;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010035\n\t\t\tpublic const int progressBarPadding = 2130772021;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010033\n\t\t\tpublic const int progressBarStyle = 2130772019;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f5\n\t\t\tpublic const int queryBackground = 2130772213;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ec\n\t\t\tpublic const int queryHint = 2130772204;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c0\n\t\t\tpublic const int radioButtonStyle = 2130772160;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c1\n\t\t\tpublic const int ratingBarStyle = 2130772161;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c2\n\t\t\tpublic const int ratingBarStyleIndicator = 2130772162;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c3\n\t\t\tpublic const int ratingBarStyleSmall = 2130772163;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010002\n\t\t\tpublic const int reverseLayout = 2130771970;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01013c\n\t\t\tpublic const int rippleColor = 2130772284;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01012b\n\t\t\tpublic const int scrimAnimationDuration = 2130772267;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01012a\n\t\t\tpublic const int scrimVisibleHeightTrigger = 2130772266;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f1\n\t\t\tpublic const int searchHintIcon = 2130772209;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f0\n\t\t\tpublic const int searchIcon = 2130772208;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010099\n\t\t\tpublic const int searchViewStyle = 2130772121;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c4\n\t\t\tpublic const int seekBarStyle = 2130772164;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010089\n\t\t\tpublic const int selectableItemBackground = 2130772105;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01008a\n\t\t\tpublic const int selectableItemBackgroundBorderless = 2130772106;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100dc\n\t\t\tpublic const int showAsAction = 2130772188;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d8\n\t\t\tpublic const int showDividers = 2130772184;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010101\n\t\t\tpublic const int showText = 2130772225;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010048\n\t\t\tpublic const int showTitle = 2130772040;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010046\n\t\t\tpublic const int singleChoiceItemLayout = 2130772038;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010001\n\t\t\tpublic const int spanCount = 2130771969;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d0\n\t\t\tpublic const int spinBars = 2130772176;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010084\n\t\t\tpublic const int spinnerDropDownItemStyle = 2130772100;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c5\n\t\t\tpublic const int spinnerStyle = 2130772165;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010100\n\t\t\tpublic const int splitTrack = 2130772224;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010049\n\t\t\tpublic const int srcCompat = 2130772041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010003\n\t\t\tpublic const int stackFromEnd = 2130771971;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e7\n\t\t\tpublic const int state_above_anchor = 2130772199;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010119\n\t\t\tpublic const int state_collapsed = 2130772249;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01011a\n\t\t\tpublic const int state_collapsible = 2130772250;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010132\n\t\t\tpublic const int statusBarBackground = 2130772274;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010128\n\t\t\tpublic const int statusBarScrim = 2130772264;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e5\n\t\t\tpublic const int subMenuArrow = 2130772197;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f6\n\t\t\tpublic const int submitBackground = 2130772214;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010028\n\t\t\tpublic const int subtitle = 2130772008;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010103\n\t\t\tpublic const int subtitleTextAppearance = 2130772227;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010112\n\t\t\tpublic const int subtitleTextColor = 2130772242;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01002a\n\t\t\tpublic const int subtitleTextStyle = 2130772010;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f4\n\t\t\tpublic const int suggestionRowLayout = 2130772212;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100fe\n\t\t\tpublic const int switchMinWidth = 2130772222;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100ff\n\t\t\tpublic const int switchPadding = 2130772223;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c6\n\t\t\tpublic const int switchStyle = 2130772166;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100fd\n\t\t\tpublic const int switchTextAppearance = 2130772221;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01014f\n\t\t\tpublic const int tabBackground = 2130772303;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01014e\n\t\t\tpublic const int tabContentStart = 2130772302;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010151\n\t\t\tpublic const int tabGravity = 2130772305;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01014c\n\t\t\tpublic const int tabIndicatorColor = 2130772300;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01014d\n\t\t\tpublic const int tabIndicatorHeight = 2130772301;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010153\n\t\t\tpublic const int tabMaxWidth = 2130772307;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010152\n\t\t\tpublic const int tabMinWidth = 2130772306;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010150\n\t\t\tpublic const int tabMode = 2130772304;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01015b\n\t\t\tpublic const int tabPadding = 2130772315;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01015a\n\t\t\tpublic const int tabPaddingBottom = 2130772314;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010159\n\t\t\tpublic const int tabPaddingEnd = 2130772313;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010157\n\t\t\tpublic const int tabPaddingStart = 2130772311;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010158\n\t\t\tpublic const int tabPaddingTop = 2130772312;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010156\n\t\t\tpublic const int tabSelectedTextColor = 2130772310;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010154\n\t\t\tpublic const int tabTextAppearance = 2130772308;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010155\n\t\t\tpublic const int tabTextColor = 2130772309;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01004f\n\t\t\tpublic const int textAllCaps = 2130772047;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01007c\n\t\t\tpublic const int textAppearanceLargePopupMenu = 2130772092;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a1\n\t\t\tpublic const int textAppearanceListItem = 2130772129;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a2\n\t\t\tpublic const int textAppearanceListItemSecondary = 2130772130;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100a3\n\t\t\tpublic const int textAppearanceListItemSmall = 2130772131;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01007e\n\t\t\tpublic const int textAppearancePopupMenuHeader = 2130772094;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010097\n\t\t\tpublic const int textAppearanceSearchResultSubtitle = 2130772119;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010096\n\t\t\tpublic const int textAppearanceSearchResultTitle = 2130772118;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01007d\n\t\t\tpublic const int textAppearanceSmallPopupMenu = 2130772093;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100b6\n\t\t\tpublic const int textColorAlertDialogListItem = 2130772150;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01013b\n\t\t\tpublic const int textColorError = 2130772283;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010098\n\t\t\tpublic const int textColorSearchUrl = 2130772120;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010115\n\t\t\tpublic const int theme = 2130772245;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100d6\n\t\t\tpublic const int thickness = 2130772182;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100fc\n\t\t\tpublic const int thumbTextPadding = 2130772220;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f7\n\t\t\tpublic const int thumbTint = 2130772215;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f8\n\t\t\tpublic const int thumbTintMode = 2130772216;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01004c\n\t\t\tpublic const int tickMark = 2130772044;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01004d\n\t\t\tpublic const int tickMarkTint = 2130772045;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01004e\n\t\t\tpublic const int tickMarkTintMode = 2130772046;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01004a\n\t\t\tpublic const int tint = 2130772042;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01004b\n\t\t\tpublic const int tintMode = 2130772043;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010025\n\t\t\tpublic const int title = 2130772005;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01012e\n\t\t\tpublic const int titleEnabled = 2130772270;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010104\n\t\t\tpublic const int titleMargin = 2130772228;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010108\n\t\t\tpublic const int titleMarginBottom = 2130772232;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010106\n\t\t\tpublic const int titleMarginEnd = 2130772230;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010105\n\t\t\tpublic const int titleMarginStart = 2130772229;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010107\n\t\t\tpublic const int titleMarginTop = 2130772231;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010109\n\t\t\tpublic const int titleMargins = 2130772233;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010102\n\t\t\tpublic const int titleTextAppearance = 2130772226;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010111\n\t\t\tpublic const int titleTextColor = 2130772241;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010029\n\t\t\tpublic const int titleTextStyle = 2130772009;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010129\n\t\t\tpublic const int toolbarId = 2130772265;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010090\n\t\t\tpublic const int toolbarNavigationButtonStyle = 2130772112;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01008f\n\t\t\tpublic const int toolbarStyle = 2130772111;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c9\n\t\t\tpublic const int tooltipForegroundColor = 2130772169;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100c8\n\t\t\tpublic const int tooltipFrameBackground = 2130772168;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100e1\n\t\t\tpublic const int tooltipText = 2130772193;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f9\n\t\t\tpublic const int track = 2130772217;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100fa\n\t\t\tpublic const int trackTint = 2130772218;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100fb\n\t\t\tpublic const int trackTintMode = 2130772219;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010140\n\t\t\tpublic const int useCompatPadding = 2130772288;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0100f2\n\t\t\tpublic const int voiceIcon = 2130772210;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010056\n\t\t\tpublic const int windowActionBar = 2130772054;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010058\n\t\t\tpublic const int windowActionBarOverlay = 2130772056;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010059\n\t\t\tpublic const int windowActionModeOverlay = 2130772057;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01005d\n\t\t\tpublic const int windowFixedHeightMajor = 2130772061;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01005b\n\t\t\tpublic const int windowFixedHeightMinor = 2130772059;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01005a\n\t\t\tpublic const int windowFixedWidthMajor = 2130772058;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01005c\n\t\t\tpublic const int windowFixedWidthMinor = 2130772060;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01005e\n\t\t\tpublic const int windowMinWidthMajor = 2130772062;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f01005f\n\t\t\tpublic const int windowMinWidthMinor = 2130772063;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f010057\n\t\t\tpublic const int windowNoTitle = 2130772055;\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Boolean\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0d0000\n\t\t\tpublic const int abc_action_bar_embed_tabs = 2131558400;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0d0001\n\t\t\tpublic const int abc_allow_stacked_button_bar = 2131558401;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0d0002\n\t\t\tpublic const int abc_config_actionMenuItemAllCaps = 2131558402;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0d0003\n\t\t\tpublic const int abc_config_closeDialogWhenTouchOutside = 2131558403;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0d0004\n\t\t\tpublic const int abc_config_showMenuShortcutsWhenKeyboardPresent = 2131558404;\n\t\t\t\n\t\t\tstatic Boolean()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Boolean()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Color\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c004b\n\t\t\tpublic const int abc_background_cache_hint_selector_material_dark = 2131492939;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c004c\n\t\t\tpublic const int abc_background_cache_hint_selector_material_light = 2131492940;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c004d\n\t\t\tpublic const int abc_btn_colored_borderless_text_material = 2131492941;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c004e\n\t\t\tpublic const int abc_btn_colored_text_material = 2131492942;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c004f\n\t\t\tpublic const int abc_color_highlight_material = 2131492943;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0050\n\t\t\tpublic const int abc_hint_foreground_material_dark = 2131492944;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0051\n\t\t\tpublic const int abc_hint_foreground_material_light = 2131492945;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0004\n\t\t\tpublic const int abc_input_method_navigation_guard = 2131492868;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0052\n\t\t\tpublic const int abc_primary_text_disable_only_material_dark = 2131492946;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0053\n\t\t\tpublic const int abc_primary_text_disable_only_material_light = 2131492947;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0054\n\t\t\tpublic const int abc_primary_text_material_dark = 2131492948;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0055\n\t\t\tpublic const int abc_primary_text_material_light = 2131492949;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0056\n\t\t\tpublic const int abc_search_url_text = 2131492950;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0005\n\t\t\tpublic const int abc_search_url_text_normal = 2131492869;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0006\n\t\t\tpublic const int abc_search_url_text_pressed = 2131492870;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0007\n\t\t\tpublic const int abc_search_url_text_selected = 2131492871;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0057\n\t\t\tpublic const int abc_secondary_text_material_dark = 2131492951;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0058\n\t\t\tpublic const int abc_secondary_text_material_light = 2131492952;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0059\n\t\t\tpublic const int abc_tint_btn_checkable = 2131492953;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c005a\n\t\t\tpublic const int abc_tint_default = 2131492954;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c005b\n\t\t\tpublic const int abc_tint_edittext = 2131492955;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c005c\n\t\t\tpublic const int abc_tint_seek_thumb = 2131492956;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c005d\n\t\t\tpublic const int abc_tint_spinner = 2131492957;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c005e\n\t\t\tpublic const int abc_tint_switch_track = 2131492958;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0008\n\t\t\tpublic const int accent_material_dark = 2131492872;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0009\n\t\t\tpublic const int accent_material_light = 2131492873;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c000a\n\t\t\tpublic const int background_floating_material_dark = 2131492874;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c000b\n\t\t\tpublic const int background_floating_material_light = 2131492875;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c000c\n\t\t\tpublic const int background_material_dark = 2131492876;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c000d\n\t\t\tpublic const int background_material_light = 2131492877;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c000e\n\t\t\tpublic const int bright_foreground_disabled_material_dark = 2131492878;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c000f\n\t\t\tpublic const int bright_foreground_disabled_material_light = 2131492879;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0010\n\t\t\tpublic const int bright_foreground_inverse_material_dark = 2131492880;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0011\n\t\t\tpublic const int bright_foreground_inverse_material_light = 2131492881;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0012\n\t\t\tpublic const int bright_foreground_material_dark = 2131492882;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0013\n\t\t\tpublic const int bright_foreground_material_light = 2131492883;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0014\n\t\t\tpublic const int button_material_dark = 2131492884;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0015\n\t\t\tpublic const int button_material_light = 2131492885;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0000\n\t\t\tpublic const int cardview_dark_background = 2131492864;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0001\n\t\t\tpublic const int cardview_light_background = 2131492865;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0002\n\t\t\tpublic const int cardview_shadow_end_color = 2131492866;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0003\n\t\t\tpublic const int cardview_shadow_start_color = 2131492867;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0040\n\t\t\tpublic const int design_bottom_navigation_shadow_color = 2131492928;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c005f\n\t\t\tpublic const int design_error = 2131492959;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0041\n\t\t\tpublic const int design_fab_shadow_end_color = 2131492929;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0042\n\t\t\tpublic const int design_fab_shadow_mid_color = 2131492930;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0043\n\t\t\tpublic const int design_fab_shadow_start_color = 2131492931;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0044\n\t\t\tpublic const int design_fab_stroke_end_inner_color = 2131492932;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0045\n\t\t\tpublic const int design_fab_stroke_end_outer_color = 2131492933;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0046\n\t\t\tpublic const int design_fab_stroke_top_inner_color = 2131492934;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0047\n\t\t\tpublic const int design_fab_stroke_top_outer_color = 2131492935;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0048\n\t\t\tpublic const int design_snackbar_background_color = 2131492936;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0060\n\t\t\tpublic const int design_tint_password_toggle = 2131492960;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0016\n\t\t\tpublic const int dim_foreground_disabled_material_dark = 2131492886;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0017\n\t\t\tpublic const int dim_foreground_disabled_material_light = 2131492887;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0018\n\t\t\tpublic const int dim_foreground_material_dark = 2131492888;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0019\n\t\t\tpublic const int dim_foreground_material_light = 2131492889;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c001a\n\t\t\tpublic const int error_color_material = 2131492890;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c001b\n\t\t\tpublic const int foreground_material_dark = 2131492891;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c001c\n\t\t\tpublic const int foreground_material_light = 2131492892;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c001d\n\t\t\tpublic const int highlighted_text_material_dark = 2131492893;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c001e\n\t\t\tpublic const int highlighted_text_material_light = 2131492894;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c001f\n\t\t\tpublic const int material_blue_grey_800 = 2131492895;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0020\n\t\t\tpublic const int material_blue_grey_900 = 2131492896;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0021\n\t\t\tpublic const int material_blue_grey_950 = 2131492897;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0022\n\t\t\tpublic const int material_deep_teal_200 = 2131492898;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0023\n\t\t\tpublic const int material_deep_teal_500 = 2131492899;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0024\n\t\t\tpublic const int material_grey_100 = 2131492900;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0025\n\t\t\tpublic const int material_grey_300 = 2131492901;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0026\n\t\t\tpublic const int material_grey_50 = 2131492902;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0027\n\t\t\tpublic const int material_grey_600 = 2131492903;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0028\n\t\t\tpublic const int material_grey_800 = 2131492904;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0029\n\t\t\tpublic const int material_grey_850 = 2131492905;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c002a\n\t\t\tpublic const int material_grey_900 = 2131492906;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0049\n\t\t\tpublic const int notification_action_color_filter = 2131492937;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c004a\n\t\t\tpublic const int notification_icon_bg_color = 2131492938;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c003f\n\t\t\tpublic const int notification_material_background_media_default_color = 2131492927;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c002b\n\t\t\tpublic const int primary_dark_material_dark = 2131492907;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c002c\n\t\t\tpublic const int primary_dark_material_light = 2131492908;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c002d\n\t\t\tpublic const int primary_material_dark = 2131492909;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c002e\n\t\t\tpublic const int primary_material_light = 2131492910;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c002f\n\t\t\tpublic const int primary_text_default_material_dark = 2131492911;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0030\n\t\t\tpublic const int primary_text_default_material_light = 2131492912;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0031\n\t\t\tpublic const int primary_text_disabled_material_dark = 2131492913;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0032\n\t\t\tpublic const int primary_text_disabled_material_light = 2131492914;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0033\n\t\t\tpublic const int ripple_material_dark = 2131492915;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0034\n\t\t\tpublic const int ripple_material_light = 2131492916;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0035\n\t\t\tpublic const int secondary_text_default_material_dark = 2131492917;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0036\n\t\t\tpublic const int secondary_text_default_material_light = 2131492918;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0037\n\t\t\tpublic const int secondary_text_disabled_material_dark = 2131492919;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0038\n\t\t\tpublic const int secondary_text_disabled_material_light = 2131492920;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0039\n\t\t\tpublic const int switch_thumb_disabled_material_dark = 2131492921;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c003a\n\t\t\tpublic const int switch_thumb_disabled_material_light = 2131492922;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0061\n\t\t\tpublic const int switch_thumb_material_dark = 2131492961;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c0062\n\t\t\tpublic const int switch_thumb_material_light = 2131492962;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c003b\n\t\t\tpublic const int switch_thumb_normal_material_dark = 2131492923;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c003c\n\t\t\tpublic const int switch_thumb_normal_material_light = 2131492924;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c003d\n\t\t\tpublic const int tooltip_background_dark = 2131492925;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0c003e\n\t\t\tpublic const int tooltip_background_light = 2131492926;\n\t\t\t\n\t\t\tstatic Color()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Color()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Dimension\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07001b\n\t\t\tpublic const int abc_action_bar_content_inset_material = 2131165211;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07001c\n\t\t\tpublic const int abc_action_bar_content_inset_with_nav = 2131165212;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070010\n\t\t\tpublic const int abc_action_bar_default_height_material = 2131165200;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07001d\n\t\t\tpublic const int abc_action_bar_default_padding_end_material = 2131165213;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07001e\n\t\t\tpublic const int abc_action_bar_default_padding_start_material = 2131165214;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070020\n\t\t\tpublic const int abc_action_bar_elevation_material = 2131165216;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070021\n\t\t\tpublic const int abc_action_bar_icon_vertical_padding_material = 2131165217;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070022\n\t\t\tpublic const int abc_action_bar_overflow_padding_end_material = 2131165218;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070023\n\t\t\tpublic const int abc_action_bar_overflow_padding_start_material = 2131165219;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070011\n\t\t\tpublic const int abc_action_bar_progress_bar_size = 2131165201;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070024\n\t\t\tpublic const int abc_action_bar_stacked_max_height = 2131165220;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070025\n\t\t\tpublic const int abc_action_bar_stacked_tab_max_width = 2131165221;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070026\n\t\t\tpublic const int abc_action_bar_subtitle_bottom_margin_material = 2131165222;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070027\n\t\t\tpublic const int abc_action_bar_subtitle_top_margin_material = 2131165223;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070028\n\t\t\tpublic const int abc_action_button_min_height_material = 2131165224;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070029\n\t\t\tpublic const int abc_action_button_min_width_material = 2131165225;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07002a\n\t\t\tpublic const int abc_action_button_min_width_overflow_material = 2131165226;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07000f\n\t\t\tpublic const int abc_alert_dialog_button_bar_height = 2131165199;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07002b\n\t\t\tpublic const int abc_button_inset_horizontal_material = 2131165227;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07002c\n\t\t\tpublic const int abc_button_inset_vertical_material = 2131165228;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07002d\n\t\t\tpublic const int abc_button_padding_horizontal_material = 2131165229;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07002e\n\t\t\tpublic const int abc_button_padding_vertical_material = 2131165230;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07002f\n\t\t\tpublic const int abc_cascading_menus_min_smallest_width = 2131165231;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070014\n\t\t\tpublic const int abc_config_prefDialogWidth = 2131165204;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070030\n\t\t\tpublic const int abc_control_corner_material = 2131165232;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070031\n\t\t\tpublic const int abc_control_inset_material = 2131165233;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070032\n\t\t\tpublic const int abc_control_padding_material = 2131165234;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070015\n\t\t\tpublic const int abc_dialog_fixed_height_major = 2131165205;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070016\n\t\t\tpublic const int abc_dialog_fixed_height_minor = 2131165206;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070017\n\t\t\tpublic const int abc_dialog_fixed_width_major = 2131165207;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070018\n\t\t\tpublic const int abc_dialog_fixed_width_minor = 2131165208;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070033\n\t\t\tpublic const int abc_dialog_list_padding_bottom_no_buttons = 2131165235;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070034\n\t\t\tpublic const int abc_dialog_list_padding_top_no_title = 2131165236;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070019\n\t\t\tpublic const int abc_dialog_min_width_major = 2131165209;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07001a\n\t\t\tpublic const int abc_dialog_min_width_minor = 2131165210;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070035\n\t\t\tpublic const int abc_dialog_padding_material = 2131165237;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070036\n\t\t\tpublic const int abc_dialog_padding_top_material = 2131165238;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070037\n\t\t\tpublic const int abc_dialog_title_divider_material = 2131165239;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070038\n\t\t\tpublic const int abc_disabled_alpha_material_dark = 2131165240;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070039\n\t\t\tpublic const int abc_disabled_alpha_material_light = 2131165241;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07003a\n\t\t\tpublic const int abc_dropdownitem_icon_width = 2131165242;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07003b\n\t\t\tpublic const int abc_dropdownitem_text_padding_left = 2131165243;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07003c\n\t\t\tpublic const int abc_dropdownitem_text_padding_right = 2131165244;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07003d\n\t\t\tpublic const int abc_edit_text_inset_bottom_material = 2131165245;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07003e\n\t\t\tpublic const int abc_edit_text_inset_horizontal_material = 2131165246;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07003f\n\t\t\tpublic const int abc_edit_text_inset_top_material = 2131165247;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070040\n\t\t\tpublic const int abc_floating_window_z = 2131165248;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070041\n\t\t\tpublic const int abc_list_item_padding_horizontal_material = 2131165249;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070042\n\t\t\tpublic const int abc_panel_menu_list_width = 2131165250;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070043\n\t\t\tpublic const int abc_progress_bar_height_material = 2131165251;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070044\n\t\t\tpublic const int abc_search_view_preferred_height = 2131165252;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070045\n\t\t\tpublic const int abc_search_view_preferred_width = 2131165253;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070046\n\t\t\tpublic const int abc_seekbar_track_background_height_material = 2131165254;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070047\n\t\t\tpublic const int abc_seekbar_track_progress_height_material = 2131165255;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070048\n\t\t\tpublic const int abc_select_dialog_padding_start_material = 2131165256;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07001f\n\t\t\tpublic const int abc_switch_padding = 2131165215;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070049\n\t\t\tpublic const int abc_text_size_body_1_material = 2131165257;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07004a\n\t\t\tpublic const int abc_text_size_body_2_material = 2131165258;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07004b\n\t\t\tpublic const int abc_text_size_button_material = 2131165259;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07004c\n\t\t\tpublic const int abc_text_size_caption_material = 2131165260;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07004d\n\t\t\tpublic const int abc_text_size_display_1_material = 2131165261;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07004e\n\t\t\tpublic const int abc_text_size_display_2_material = 2131165262;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07004f\n\t\t\tpublic const int abc_text_size_display_3_material = 2131165263;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070050\n\t\t\tpublic const int abc_text_size_display_4_material = 2131165264;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070051\n\t\t\tpublic const int abc_text_size_headline_material = 2131165265;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070052\n\t\t\tpublic const int abc_text_size_large_material = 2131165266;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070053\n\t\t\tpublic const int abc_text_size_medium_material = 2131165267;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070054\n\t\t\tpublic const int abc_text_size_menu_header_material = 2131165268;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070055\n\t\t\tpublic const int abc_text_size_menu_material = 2131165269;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070056\n\t\t\tpublic const int abc_text_size_small_material = 2131165270;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070057\n\t\t\tpublic const int abc_text_size_subhead_material = 2131165271;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070012\n\t\t\tpublic const int abc_text_size_subtitle_material_toolbar = 2131165202;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070058\n\t\t\tpublic const int abc_text_size_title_material = 2131165272;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070013\n\t\t\tpublic const int abc_text_size_title_material_toolbar = 2131165203;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07000c\n\t\t\tpublic const int cardview_compat_inset_shadow = 2131165196;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07000d\n\t\t\tpublic const int cardview_default_elevation = 2131165197;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07000e\n\t\t\tpublic const int cardview_default_radius = 2131165198;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070094\n\t\t\tpublic const int compat_button_inset_horizontal_material = 2131165332;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070095\n\t\t\tpublic const int compat_button_inset_vertical_material = 2131165333;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070096\n\t\t\tpublic const int compat_button_padding_horizontal_material = 2131165334;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070097\n\t\t\tpublic const int compat_button_padding_vertical_material = 2131165335;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070098\n\t\t\tpublic const int compat_control_corner_material = 2131165336;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070072\n\t\t\tpublic const int design_appbar_elevation = 2131165298;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070073\n\t\t\tpublic const int design_bottom_navigation_active_item_max_width = 2131165299;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070074\n\t\t\tpublic const int design_bottom_navigation_active_text_size = 2131165300;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070075\n\t\t\tpublic const int design_bottom_navigation_elevation = 2131165301;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070076\n\t\t\tpublic const int design_bottom_navigation_height = 2131165302;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070077\n\t\t\tpublic const int design_bottom_navigation_item_max_width = 2131165303;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070078\n\t\t\tpublic const int design_bottom_navigation_item_min_width = 2131165304;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070079\n\t\t\tpublic const int design_bottom_navigation_margin = 2131165305;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07007a\n\t\t\tpublic const int design_bottom_navigation_shadow_height = 2131165306;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07007b\n\t\t\tpublic const int design_bottom_navigation_text_size = 2131165307;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07007c\n\t\t\tpublic const int design_bottom_sheet_modal_elevation = 2131165308;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07007d\n\t\t\tpublic const int design_bottom_sheet_peek_height_min = 2131165309;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07007e\n\t\t\tpublic const int design_fab_border_width = 2131165310;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07007f\n\t\t\tpublic const int design_fab_elevation = 2131165311;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070080\n\t\t\tpublic const int design_fab_image_size = 2131165312;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070081\n\t\t\tpublic const int design_fab_size_mini = 2131165313;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070082\n\t\t\tpublic const int design_fab_size_normal = 2131165314;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070083\n\t\t\tpublic const int design_fab_translation_z_pressed = 2131165315;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070084\n\t\t\tpublic const int design_navigation_elevation = 2131165316;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070085\n\t\t\tpublic const int design_navigation_icon_padding = 2131165317;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070086\n\t\t\tpublic const int design_navigation_icon_size = 2131165318;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07006a\n\t\t\tpublic const int design_navigation_max_width = 2131165290;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070087\n\t\t\tpublic const int design_navigation_padding_bottom = 2131165319;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070088\n\t\t\tpublic const int design_navigation_separator_vertical_padding = 2131165320;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07006b\n\t\t\tpublic const int design_snackbar_action_inline_max_width = 2131165291;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07006c\n\t\t\tpublic const int design_snackbar_background_corner_radius = 2131165292;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070089\n\t\t\tpublic const int design_snackbar_elevation = 2131165321;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07006d\n\t\t\tpublic const int design_snackbar_extra_spacing_horizontal = 2131165293;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07006e\n\t\t\tpublic const int design_snackbar_max_width = 2131165294;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07006f\n\t\t\tpublic const int design_snackbar_min_width = 2131165295;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07008a\n\t\t\tpublic const int design_snackbar_padding_horizontal = 2131165322;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07008b\n\t\t\tpublic const int design_snackbar_padding_vertical = 2131165323;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070070\n\t\t\tpublic const int design_snackbar_padding_vertical_2lines = 2131165296;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07008c\n\t\t\tpublic const int design_snackbar_text_size = 2131165324;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07008d\n\t\t\tpublic const int design_tab_max_width = 2131165325;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070071\n\t\t\tpublic const int design_tab_scrollable_min_width = 2131165297;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07008e\n\t\t\tpublic const int design_tab_text_size = 2131165326;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07008f\n\t\t\tpublic const int design_tab_text_size_2line = 2131165327;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070059\n\t\t\tpublic const int disabled_alpha_material_dark = 2131165273;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07005a\n\t\t\tpublic const int disabled_alpha_material_light = 2131165274;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070000\n\t\t\tpublic const int fastscroll_default_thickness = 2131165184;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070001\n\t\t\tpublic const int fastscroll_margin = 2131165185;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070002\n\t\t\tpublic const int fastscroll_minimum_range = 2131165186;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07005b\n\t\t\tpublic const int highlight_alpha_material_colored = 2131165275;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07005c\n\t\t\tpublic const int highlight_alpha_material_dark = 2131165276;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07005d\n\t\t\tpublic const int highlight_alpha_material_light = 2131165277;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07005e\n\t\t\tpublic const int hint_alpha_material_dark = 2131165278;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07005f\n\t\t\tpublic const int hint_alpha_material_light = 2131165279;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070060\n\t\t\tpublic const int hint_pressed_alpha_material_dark = 2131165280;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070061\n\t\t\tpublic const int hint_pressed_alpha_material_light = 2131165281;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070003\n\t\t\tpublic const int item_touch_helper_max_drag_scroll_per_frame = 2131165187;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070004\n\t\t\tpublic const int item_touch_helper_swipe_escape_max_velocity = 2131165188;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070005\n\t\t\tpublic const int item_touch_helper_swipe_escape_velocity = 2131165189;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070006\n\t\t\tpublic const int mr_controller_volume_group_list_item_height = 2131165190;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070007\n\t\t\tpublic const int mr_controller_volume_group_list_item_icon_size = 2131165191;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070008\n\t\t\tpublic const int mr_controller_volume_group_list_max_height = 2131165192;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07000b\n\t\t\tpublic const int mr_controller_volume_group_list_padding_top = 2131165195;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070009\n\t\t\tpublic const int mr_dialog_fixed_width_major = 2131165193;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07000a\n\t\t\tpublic const int mr_dialog_fixed_width_minor = 2131165194;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070099\n\t\t\tpublic const int notification_action_icon_size = 2131165337;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07009a\n\t\t\tpublic const int notification_action_text_size = 2131165338;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07009b\n\t\t\tpublic const int notification_big_circle_margin = 2131165339;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070091\n\t\t\tpublic const int notification_content_margin_start = 2131165329;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07009c\n\t\t\tpublic const int notification_large_icon_height = 2131165340;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07009d\n\t\t\tpublic const int notification_large_icon_width = 2131165341;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070092\n\t\t\tpublic const int notification_main_column_padding_top = 2131165330;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070093\n\t\t\tpublic const int notification_media_narrow_margin = 2131165331;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07009e\n\t\t\tpublic const int notification_right_icon_size = 2131165342;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070090\n\t\t\tpublic const int notification_right_side_padding_top = 2131165328;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f07009f\n\t\t\tpublic const int notification_small_icon_background_padding = 2131165343;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0700a0\n\t\t\tpublic const int notification_small_icon_size_as_large = 2131165344;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0700a1\n\t\t\tpublic const int notification_subtext_size = 2131165345;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0700a2\n\t\t\tpublic const int notification_top_pad = 2131165346;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0700a3\n\t\t\tpublic const int notification_top_pad_large_text = 2131165347;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070062\n\t\t\tpublic const int tooltip_corner_radius = 2131165282;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070063\n\t\t\tpublic const int tooltip_horizontal_padding = 2131165283;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070064\n\t\t\tpublic const int tooltip_margin = 2131165284;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070065\n\t\t\tpublic const int tooltip_precise_anchor_extra_offset = 2131165285;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070066\n\t\t\tpublic const int tooltip_precise_anchor_threshold = 2131165286;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070067\n\t\t\tpublic const int tooltip_vertical_padding = 2131165287;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070068\n\t\t\tpublic const int tooltip_y_offset_non_touch = 2131165288;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f070069\n\t\t\tpublic const int tooltip_y_offset_touch = 2131165289;\n\t\t\t\n\t\t\tstatic Dimension()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Dimension()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020000\n\t\t\tpublic const int abc_ab_share_pack_mtrl_alpha = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020001\n\t\t\tpublic const int abc_action_bar_item_background_material = 2130837505;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020002\n\t\t\tpublic const int abc_btn_borderless_material = 2130837506;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020003\n\t\t\tpublic const int abc_btn_check_material = 2130837507;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020004\n\t\t\tpublic const int abc_btn_check_to_on_mtrl_000 = 2130837508;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020005\n\t\t\tpublic const int abc_btn_check_to_on_mtrl_015 = 2130837509;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020006\n\t\t\tpublic const int abc_btn_colored_material = 2130837510;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020007\n\t\t\tpublic const int abc_btn_default_mtrl_shape = 2130837511;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020008\n\t\t\tpublic const int abc_btn_radio_material = 2130837512;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020009\n\t\t\tpublic const int abc_btn_radio_to_on_mtrl_000 = 2130837513;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02000a\n\t\t\tpublic const int abc_btn_radio_to_on_mtrl_015 = 2130837514;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02000b\n\t\t\tpublic const int abc_btn_switch_to_on_mtrl_00001 = 2130837515;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02000c\n\t\t\tpublic const int abc_btn_switch_to_on_mtrl_00012 = 2130837516;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02000d\n\t\t\tpublic const int abc_cab_background_internal_bg = 2130837517;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02000e\n\t\t\tpublic const int abc_cab_background_top_material = 2130837518;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02000f\n\t\t\tpublic const int abc_cab_background_top_mtrl_alpha = 2130837519;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020010\n\t\t\tpublic const int abc_control_background_material = 2130837520;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020011\n\t\t\tpublic const int abc_dialog_material_background = 2130837521;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020012\n\t\t\tpublic const int abc_edit_text_material = 2130837522;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020013\n\t\t\tpublic const int abc_ic_ab_back_material = 2130837523;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020014\n\t\t\tpublic const int abc_ic_arrow_drop_right_black_24dp = 2130837524;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020015\n\t\t\tpublic const int abc_ic_clear_material = 2130837525;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020016\n\t\t\tpublic const int abc_ic_commit_search_api_mtrl_alpha = 2130837526;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020017\n\t\t\tpublic const int abc_ic_go_search_api_material = 2130837527;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020018\n\t\t\tpublic const int abc_ic_menu_copy_mtrl_am_alpha = 2130837528;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020019\n\t\t\tpublic const int abc_ic_menu_cut_mtrl_alpha = 2130837529;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02001a\n\t\t\tpublic const int abc_ic_menu_overflow_material = 2130837530;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02001b\n\t\t\tpublic const int abc_ic_menu_paste_mtrl_am_alpha = 2130837531;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02001c\n\t\t\tpublic const int abc_ic_menu_selectall_mtrl_alpha = 2130837532;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02001d\n\t\t\tpublic const int abc_ic_menu_share_mtrl_alpha = 2130837533;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02001e\n\t\t\tpublic const int abc_ic_search_api_material = 2130837534;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02001f\n\t\t\tpublic const int abc_ic_star_black_16dp = 2130837535;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020020\n\t\t\tpublic const int abc_ic_star_black_36dp = 2130837536;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020021\n\t\t\tpublic const int abc_ic_star_black_48dp = 2130837537;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020022\n\t\t\tpublic const int abc_ic_star_half_black_16dp = 2130837538;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020023\n\t\t\tpublic const int abc_ic_star_half_black_36dp = 2130837539;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020024\n\t\t\tpublic const int abc_ic_star_half_black_48dp = 2130837540;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020025\n\t\t\tpublic const int abc_ic_voice_search_api_material = 2130837541;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020026\n\t\t\tpublic const int abc_item_background_holo_dark = 2130837542;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020027\n\t\t\tpublic const int abc_item_background_holo_light = 2130837543;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020028\n\t\t\tpublic const int abc_list_divider_mtrl_alpha = 2130837544;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020029\n\t\t\tpublic const int abc_list_focused_holo = 2130837545;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02002a\n\t\t\tpublic const int abc_list_longpressed_holo = 2130837546;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02002b\n\t\t\tpublic const int abc_list_pressed_holo_dark = 2130837547;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02002c\n\t\t\tpublic const int abc_list_pressed_holo_light = 2130837548;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02002d\n\t\t\tpublic const int abc_list_selector_background_transition_holo_dark = 2130837549;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02002e\n\t\t\tpublic const int abc_list_selector_background_transition_holo_light = 2130837550;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02002f\n\t\t\tpublic const int abc_list_selector_disabled_holo_dark = 2130837551;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020030\n\t\t\tpublic const int abc_list_selector_disabled_holo_light = 2130837552;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020031\n\t\t\tpublic const int abc_list_selector_holo_dark = 2130837553;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020032\n\t\t\tpublic const int abc_list_selector_holo_light = 2130837554;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020033\n\t\t\tpublic const int abc_menu_hardkey_panel_mtrl_mult = 2130837555;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020034\n\t\t\tpublic const int abc_popup_background_mtrl_mult = 2130837556;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020035\n\t\t\tpublic const int abc_ratingbar_indicator_material = 2130837557;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020036\n\t\t\tpublic const int abc_ratingbar_material = 2130837558;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020037\n\t\t\tpublic const int abc_ratingbar_small_material = 2130837559;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020038\n\t\t\tpublic const int abc_scrubber_control_off_mtrl_alpha = 2130837560;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020039\n\t\t\tpublic const int abc_scrubber_control_to_pressed_mtrl_000 = 2130837561;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02003a\n\t\t\tpublic const int abc_scrubber_control_to_pressed_mtrl_005 = 2130837562;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02003b\n\t\t\tpublic const int abc_scrubber_primary_mtrl_alpha = 2130837563;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02003c\n\t\t\tpublic const int abc_scrubber_track_mtrl_alpha = 2130837564;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02003d\n\t\t\tpublic const int abc_seekbar_thumb_material = 2130837565;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02003e\n\t\t\tpublic const int abc_seekbar_tick_mark_material = 2130837566;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02003f\n\t\t\tpublic const int abc_seekbar_track_material = 2130837567;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020040\n\t\t\tpublic const int abc_spinner_mtrl_am_alpha = 2130837568;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020041\n\t\t\tpublic const int abc_spinner_textfield_background_material = 2130837569;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020042\n\t\t\tpublic const int abc_switch_thumb_material = 2130837570;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020043\n\t\t\tpublic const int abc_switch_track_mtrl_alpha = 2130837571;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020044\n\t\t\tpublic const int abc_tab_indicator_material = 2130837572;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020045\n\t\t\tpublic const int abc_tab_indicator_mtrl_alpha = 2130837573;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020046\n\t\t\tpublic const int abc_text_cursor_material = 2130837574;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020047\n\t\t\tpublic const int abc_text_select_handle_left_mtrl_dark = 2130837575;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020048\n\t\t\tpublic const int abc_text_select_handle_left_mtrl_light = 2130837576;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020049\n\t\t\tpublic const int abc_text_select_handle_middle_mtrl_dark = 2130837577;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02004a\n\t\t\tpublic const int abc_text_select_handle_middle_mtrl_light = 2130837578;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02004b\n\t\t\tpublic const int abc_text_select_handle_right_mtrl_dark = 2130837579;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02004c\n\t\t\tpublic const int abc_text_select_handle_right_mtrl_light = 2130837580;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02004d\n\t\t\tpublic const int abc_textfield_activated_mtrl_alpha = 2130837581;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02004e\n\t\t\tpublic const int abc_textfield_default_mtrl_alpha = 2130837582;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02004f\n\t\t\tpublic const int abc_textfield_search_activated_mtrl_alpha = 2130837583;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020050\n\t\t\tpublic const int abc_textfield_search_default_mtrl_alpha = 2130837584;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020051\n\t\t\tpublic const int abc_textfield_search_material = 2130837585;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020052\n\t\t\tpublic const int abc_vector_test = 2130837586;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020053\n\t\t\tpublic const int avd_hide_password = 2130837587;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020054\n\t\t\tpublic const int avd_show_password = 2130837588;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020055\n\t\t\tpublic const int design_bottom_navigation_item_background = 2130837589;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020056\n\t\t\tpublic const int design_fab_background = 2130837590;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020057\n\t\t\tpublic const int design_ic_visibility = 2130837591;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020058\n\t\t\tpublic const int design_ic_visibility_off = 2130837592;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020059\n\t\t\tpublic const int design_password_eye = 2130837593;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02005a\n\t\t\tpublic const int design_snackbar_background = 2130837594;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02005b\n\t\t\tpublic const int ic_audiotrack_dark = 2130837595;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02005c\n\t\t\tpublic const int ic_audiotrack_light = 2130837596;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02005d\n\t\t\tpublic const int ic_dialog_close_dark = 2130837597;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02005e\n\t\t\tpublic const int ic_dialog_close_light = 2130837598;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02005f\n\t\t\tpublic const int ic_group_collapse_00 = 2130837599;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020060\n\t\t\tpublic const int ic_group_collapse_01 = 2130837600;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020061\n\t\t\tpublic const int ic_group_collapse_02 = 2130837601;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020062\n\t\t\tpublic const int ic_group_collapse_03 = 2130837602;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020063\n\t\t\tpublic const int ic_group_collapse_04 = 2130837603;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020064\n\t\t\tpublic const int ic_group_collapse_05 = 2130837604;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020065\n\t\t\tpublic const int ic_group_collapse_06 = 2130837605;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020066\n\t\t\tpublic const int ic_group_collapse_07 = 2130837606;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020067\n\t\t\tpublic const int ic_group_collapse_08 = 2130837607;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020068\n\t\t\tpublic const int ic_group_collapse_09 = 2130837608;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020069\n\t\t\tpublic const int ic_group_collapse_10 = 2130837609;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02006a\n\t\t\tpublic const int ic_group_collapse_11 = 2130837610;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02006b\n\t\t\tpublic const int ic_group_collapse_12 = 2130837611;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02006c\n\t\t\tpublic const int ic_group_collapse_13 = 2130837612;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02006d\n\t\t\tpublic const int ic_group_collapse_14 = 2130837613;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02006e\n\t\t\tpublic const int ic_group_collapse_15 = 2130837614;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02006f\n\t\t\tpublic const int ic_group_expand_00 = 2130837615;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020070\n\t\t\tpublic const int ic_group_expand_01 = 2130837616;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020071\n\t\t\tpublic const int ic_group_expand_02 = 2130837617;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020072\n\t\t\tpublic const int ic_group_expand_03 = 2130837618;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020073\n\t\t\tpublic const int ic_group_expand_04 = 2130837619;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020074\n\t\t\tpublic const int ic_group_expand_05 = 2130837620;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020075\n\t\t\tpublic const int ic_group_expand_06 = 2130837621;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020076\n\t\t\tpublic const int ic_group_expand_07 = 2130837622;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020077\n\t\t\tpublic const int ic_group_expand_08 = 2130837623;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020078\n\t\t\tpublic const int ic_group_expand_09 = 2130837624;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020079\n\t\t\tpublic const int ic_group_expand_10 = 2130837625;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02007a\n\t\t\tpublic const int ic_group_expand_11 = 2130837626;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02007b\n\t\t\tpublic const int ic_group_expand_12 = 2130837627;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02007c\n\t\t\tpublic const int ic_group_expand_13 = 2130837628;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02007d\n\t\t\tpublic const int ic_group_expand_14 = 2130837629;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02007e\n\t\t\tpublic const int ic_group_expand_15 = 2130837630;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02007f\n\t\t\tpublic const int ic_media_pause_dark = 2130837631;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020080\n\t\t\tpublic const int ic_media_pause_light = 2130837632;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020081\n\t\t\tpublic const int ic_media_play_dark = 2130837633;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020082\n\t\t\tpublic const int ic_media_play_light = 2130837634;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020083\n\t\t\tpublic const int ic_media_stop_dark = 2130837635;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020084\n\t\t\tpublic const int ic_media_stop_light = 2130837636;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020085\n\t\t\tpublic const int ic_mr_button_connected_00_dark = 2130837637;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020086\n\t\t\tpublic const int ic_mr_button_connected_00_light = 2130837638;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020087\n\t\t\tpublic const int ic_mr_button_connected_01_dark = 2130837639;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020088\n\t\t\tpublic const int ic_mr_button_connected_01_light = 2130837640;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020089\n\t\t\tpublic const int ic_mr_button_connected_02_dark = 2130837641;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02008a\n\t\t\tpublic const int ic_mr_button_connected_02_light = 2130837642;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02008b\n\t\t\tpublic const int ic_mr_button_connected_03_dark = 2130837643;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02008c\n\t\t\tpublic const int ic_mr_button_connected_03_light = 2130837644;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02008d\n\t\t\tpublic const int ic_mr_button_connected_04_dark = 2130837645;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02008e\n\t\t\tpublic const int ic_mr_button_connected_04_light = 2130837646;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02008f\n\t\t\tpublic const int ic_mr_button_connected_05_dark = 2130837647;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020090\n\t\t\tpublic const int ic_mr_button_connected_05_light = 2130837648;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020091\n\t\t\tpublic const int ic_mr_button_connected_06_dark = 2130837649;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020092\n\t\t\tpublic const int ic_mr_button_connected_06_light = 2130837650;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020093\n\t\t\tpublic const int ic_mr_button_connected_07_dark = 2130837651;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020094\n\t\t\tpublic const int ic_mr_button_connected_07_light = 2130837652;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020095\n\t\t\tpublic const int ic_mr_button_connected_08_dark = 2130837653;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020096\n\t\t\tpublic const int ic_mr_button_connected_08_light = 2130837654;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020097\n\t\t\tpublic const int ic_mr_button_connected_09_dark = 2130837655;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020098\n\t\t\tpublic const int ic_mr_button_connected_09_light = 2130837656;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020099\n\t\t\tpublic const int ic_mr_button_connected_10_dark = 2130837657;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02009a\n\t\t\tpublic const int ic_mr_button_connected_10_light = 2130837658;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02009b\n\t\t\tpublic const int ic_mr_button_connected_11_dark = 2130837659;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02009c\n\t\t\tpublic const int ic_mr_button_connected_11_light = 2130837660;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02009d\n\t\t\tpublic const int ic_mr_button_connected_12_dark = 2130837661;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02009e\n\t\t\tpublic const int ic_mr_button_connected_12_light = 2130837662;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02009f\n\t\t\tpublic const int ic_mr_button_connected_13_dark = 2130837663;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a0\n\t\t\tpublic const int ic_mr_button_connected_13_light = 2130837664;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a1\n\t\t\tpublic const int ic_mr_button_connected_14_dark = 2130837665;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a2\n\t\t\tpublic const int ic_mr_button_connected_14_light = 2130837666;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a3\n\t\t\tpublic const int ic_mr_button_connected_15_dark = 2130837667;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a4\n\t\t\tpublic const int ic_mr_button_connected_15_light = 2130837668;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a5\n\t\t\tpublic const int ic_mr_button_connected_16_dark = 2130837669;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a6\n\t\t\tpublic const int ic_mr_button_connected_16_light = 2130837670;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a7\n\t\t\tpublic const int ic_mr_button_connected_17_dark = 2130837671;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a8\n\t\t\tpublic const int ic_mr_button_connected_17_light = 2130837672;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200a9\n\t\t\tpublic const int ic_mr_button_connected_18_dark = 2130837673;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200aa\n\t\t\tpublic const int ic_mr_button_connected_18_light = 2130837674;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ab\n\t\t\tpublic const int ic_mr_button_connected_19_dark = 2130837675;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ac\n\t\t\tpublic const int ic_mr_button_connected_19_light = 2130837676;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ad\n\t\t\tpublic const int ic_mr_button_connected_20_dark = 2130837677;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ae\n\t\t\tpublic const int ic_mr_button_connected_20_light = 2130837678;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200af\n\t\t\tpublic const int ic_mr_button_connected_21_dark = 2130837679;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b0\n\t\t\tpublic const int ic_mr_button_connected_21_light = 2130837680;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b1\n\t\t\tpublic const int ic_mr_button_connected_22_dark = 2130837681;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b2\n\t\t\tpublic const int ic_mr_button_connected_22_light = 2130837682;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b3\n\t\t\tpublic const int ic_mr_button_connected_23_dark = 2130837683;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b4\n\t\t\tpublic const int ic_mr_button_connected_23_light = 2130837684;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b5\n\t\t\tpublic const int ic_mr_button_connected_24_dark = 2130837685;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b6\n\t\t\tpublic const int ic_mr_button_connected_24_light = 2130837686;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b7\n\t\t\tpublic const int ic_mr_button_connected_25_dark = 2130837687;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b8\n\t\t\tpublic const int ic_mr_button_connected_25_light = 2130837688;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200b9\n\t\t\tpublic const int ic_mr_button_connected_26_dark = 2130837689;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ba\n\t\t\tpublic const int ic_mr_button_connected_26_light = 2130837690;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200bb\n\t\t\tpublic const int ic_mr_button_connected_27_dark = 2130837691;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200bc\n\t\t\tpublic const int ic_mr_button_connected_27_light = 2130837692;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200bd\n\t\t\tpublic const int ic_mr_button_connected_28_dark = 2130837693;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200be\n\t\t\tpublic const int ic_mr_button_connected_28_light = 2130837694;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200bf\n\t\t\tpublic const int ic_mr_button_connected_29_dark = 2130837695;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c0\n\t\t\tpublic const int ic_mr_button_connected_29_light = 2130837696;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c1\n\t\t\tpublic const int ic_mr_button_connected_30_dark = 2130837697;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c2\n\t\t\tpublic const int ic_mr_button_connected_30_light = 2130837698;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c3\n\t\t\tpublic const int ic_mr_button_connecting_00_dark = 2130837699;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c4\n\t\t\tpublic const int ic_mr_button_connecting_00_light = 2130837700;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c5\n\t\t\tpublic const int ic_mr_button_connecting_01_dark = 2130837701;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c6\n\t\t\tpublic const int ic_mr_button_connecting_01_light = 2130837702;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c7\n\t\t\tpublic const int ic_mr_button_connecting_02_dark = 2130837703;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c8\n\t\t\tpublic const int ic_mr_button_connecting_02_light = 2130837704;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200c9\n\t\t\tpublic const int ic_mr_button_connecting_03_dark = 2130837705;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ca\n\t\t\tpublic const int ic_mr_button_connecting_03_light = 2130837706;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200cb\n\t\t\tpublic const int ic_mr_button_connecting_04_dark = 2130837707;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200cc\n\t\t\tpublic const int ic_mr_button_connecting_04_light = 2130837708;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200cd\n\t\t\tpublic const int ic_mr_button_connecting_05_dark = 2130837709;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ce\n\t\t\tpublic const int ic_mr_button_connecting_05_light = 2130837710;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200cf\n\t\t\tpublic const int ic_mr_button_connecting_06_dark = 2130837711;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d0\n\t\t\tpublic const int ic_mr_button_connecting_06_light = 2130837712;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d1\n\t\t\tpublic const int ic_mr_button_connecting_07_dark = 2130837713;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d2\n\t\t\tpublic const int ic_mr_button_connecting_07_light = 2130837714;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d3\n\t\t\tpublic const int ic_mr_button_connecting_08_dark = 2130837715;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d4\n\t\t\tpublic const int ic_mr_button_connecting_08_light = 2130837716;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d5\n\t\t\tpublic const int ic_mr_button_connecting_09_dark = 2130837717;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d6\n\t\t\tpublic const int ic_mr_button_connecting_09_light = 2130837718;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d7\n\t\t\tpublic const int ic_mr_button_connecting_10_dark = 2130837719;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d8\n\t\t\tpublic const int ic_mr_button_connecting_10_light = 2130837720;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200d9\n\t\t\tpublic const int ic_mr_button_connecting_11_dark = 2130837721;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200da\n\t\t\tpublic const int ic_mr_button_connecting_11_light = 2130837722;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200db\n\t\t\tpublic const int ic_mr_button_connecting_12_dark = 2130837723;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200dc\n\t\t\tpublic const int ic_mr_button_connecting_12_light = 2130837724;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200dd\n\t\t\tpublic const int ic_mr_button_connecting_13_dark = 2130837725;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200de\n\t\t\tpublic const int ic_mr_button_connecting_13_light = 2130837726;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200df\n\t\t\tpublic const int ic_mr_button_connecting_14_dark = 2130837727;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e0\n\t\t\tpublic const int ic_mr_button_connecting_14_light = 2130837728;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e1\n\t\t\tpublic const int ic_mr_button_connecting_15_dark = 2130837729;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e2\n\t\t\tpublic const int ic_mr_button_connecting_15_light = 2130837730;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e3\n\t\t\tpublic const int ic_mr_button_connecting_16_dark = 2130837731;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e4\n\t\t\tpublic const int ic_mr_button_connecting_16_light = 2130837732;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e5\n\t\t\tpublic const int ic_mr_button_connecting_17_dark = 2130837733;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e6\n\t\t\tpublic const int ic_mr_button_connecting_17_light = 2130837734;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e7\n\t\t\tpublic const int ic_mr_button_connecting_18_dark = 2130837735;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e8\n\t\t\tpublic const int ic_mr_button_connecting_18_light = 2130837736;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200e9\n\t\t\tpublic const int ic_mr_button_connecting_19_dark = 2130837737;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ea\n\t\t\tpublic const int ic_mr_button_connecting_19_light = 2130837738;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200eb\n\t\t\tpublic const int ic_mr_button_connecting_20_dark = 2130837739;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ec\n\t\t\tpublic const int ic_mr_button_connecting_20_light = 2130837740;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ed\n\t\t\tpublic const int ic_mr_button_connecting_21_dark = 2130837741;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ee\n\t\t\tpublic const int ic_mr_button_connecting_21_light = 2130837742;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ef\n\t\t\tpublic const int ic_mr_button_connecting_22_dark = 2130837743;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f0\n\t\t\tpublic const int ic_mr_button_connecting_22_light = 2130837744;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f1\n\t\t\tpublic const int ic_mr_button_connecting_23_dark = 2130837745;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f2\n\t\t\tpublic const int ic_mr_button_connecting_23_light = 2130837746;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f3\n\t\t\tpublic const int ic_mr_button_connecting_24_dark = 2130837747;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f4\n\t\t\tpublic const int ic_mr_button_connecting_24_light = 2130837748;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f5\n\t\t\tpublic const int ic_mr_button_connecting_25_dark = 2130837749;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f6\n\t\t\tpublic const int ic_mr_button_connecting_25_light = 2130837750;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f7\n\t\t\tpublic const int ic_mr_button_connecting_26_dark = 2130837751;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f8\n\t\t\tpublic const int ic_mr_button_connecting_26_light = 2130837752;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200f9\n\t\t\tpublic const int ic_mr_button_connecting_27_dark = 2130837753;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200fa\n\t\t\tpublic const int ic_mr_button_connecting_27_light = 2130837754;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200fb\n\t\t\tpublic const int ic_mr_button_connecting_28_dark = 2130837755;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200fc\n\t\t\tpublic const int ic_mr_button_connecting_28_light = 2130837756;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200fd\n\t\t\tpublic const int ic_mr_button_connecting_29_dark = 2130837757;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200fe\n\t\t\tpublic const int ic_mr_button_connecting_29_light = 2130837758;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0200ff\n\t\t\tpublic const int ic_mr_button_connecting_30_dark = 2130837759;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020100\n\t\t\tpublic const int ic_mr_button_connecting_30_light = 2130837760;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020101\n\t\t\tpublic const int ic_mr_button_disabled_dark = 2130837761;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020102\n\t\t\tpublic const int ic_mr_button_disabled_light = 2130837762;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020103\n\t\t\tpublic const int ic_mr_button_disconnected_dark = 2130837763;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020104\n\t\t\tpublic const int ic_mr_button_disconnected_light = 2130837764;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020105\n\t\t\tpublic const int ic_mr_button_grey = 2130837765;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020106\n\t\t\tpublic const int ic_vol_type_speaker_dark = 2130837766;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020107\n\t\t\tpublic const int ic_vol_type_speaker_group_dark = 2130837767;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020108\n\t\t\tpublic const int ic_vol_type_speaker_group_light = 2130837768;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020109\n\t\t\tpublic const int ic_vol_type_speaker_light = 2130837769;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02010a\n\t\t\tpublic const int ic_vol_type_tv_dark = 2130837770;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02010b\n\t\t\tpublic const int ic_vol_type_tv_light = 2130837771;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02010c\n\t\t\tpublic const int icon = 2130837772;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02010d\n\t\t\tpublic const int mr_button_connected_dark = 2130837773;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02010e\n\t\t\tpublic const int mr_button_connected_light = 2130837774;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02010f\n\t\t\tpublic const int mr_button_connecting_dark = 2130837775;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020110\n\t\t\tpublic const int mr_button_connecting_light = 2130837776;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020111\n\t\t\tpublic const int mr_button_dark = 2130837777;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020112\n\t\t\tpublic const int mr_button_light = 2130837778;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020113\n\t\t\tpublic const int mr_dialog_close_dark = 2130837779;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020114\n\t\t\tpublic const int mr_dialog_close_light = 2130837780;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020115\n\t\t\tpublic const int mr_dialog_material_background_dark = 2130837781;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020116\n\t\t\tpublic const int mr_dialog_material_background_light = 2130837782;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020117\n\t\t\tpublic const int mr_group_collapse = 2130837783;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020118\n\t\t\tpublic const int mr_group_expand = 2130837784;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020119\n\t\t\tpublic const int mr_media_pause_dark = 2130837785;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02011a\n\t\t\tpublic const int mr_media_pause_light = 2130837786;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02011b\n\t\t\tpublic const int mr_media_play_dark = 2130837787;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02011c\n\t\t\tpublic const int mr_media_play_light = 2130837788;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02011d\n\t\t\tpublic const int mr_media_stop_dark = 2130837789;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02011e\n\t\t\tpublic const int mr_media_stop_light = 2130837790;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02011f\n\t\t\tpublic const int mr_vol_type_audiotrack_dark = 2130837791;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020120\n\t\t\tpublic const int mr_vol_type_audiotrack_light = 2130837792;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020121\n\t\t\tpublic const int navigation_empty_icon = 2130837793;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020122\n\t\t\tpublic const int notification_action_background = 2130837794;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020123\n\t\t\tpublic const int notification_bg = 2130837795;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020124\n\t\t\tpublic const int notification_bg_low = 2130837796;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020125\n\t\t\tpublic const int notification_bg_low_normal = 2130837797;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020126\n\t\t\tpublic const int notification_bg_low_pressed = 2130837798;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020127\n\t\t\tpublic const int notification_bg_normal = 2130837799;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020128\n\t\t\tpublic const int notification_bg_normal_pressed = 2130837800;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f020129\n\t\t\tpublic const int notification_icon_background = 2130837801;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02012e\n\t\t\tpublic const int notification_template_icon_bg = 2130837806;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02012f\n\t\t\tpublic const int notification_template_icon_low_bg = 2130837807;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02012a\n\t\t\tpublic const int notification_tile_bg = 2130837802;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02012b\n\t\t\tpublic const int notify_panel_notification_icon_bg = 2130837803;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02012c\n\t\t\tpublic const int tooltip_frame_dark = 2130837804;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f02012d\n\t\t\tpublic const int tooltip_frame_light = 2130837805;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Id\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080031\n\t\t\tpublic const int ALT = 2131230769;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080032\n\t\t\tpublic const int CTRL = 2131230770;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080033\n\t\t\tpublic const int FUNCTION = 2131230771;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080034\n\t\t\tpublic const int META = 2131230772;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080035\n\t\t\tpublic const int SHIFT = 2131230773;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080036\n\t\t\tpublic const int SYM = 2131230774;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b5\n\t\t\tpublic const int action0 = 2131230901;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08007b\n\t\t\tpublic const int action_bar = 2131230843;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080001\n\t\t\tpublic const int action_bar_activity_content = 2131230721;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08007a\n\t\t\tpublic const int action_bar_container = 2131230842;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080076\n\t\t\tpublic const int action_bar_root = 2131230838;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080002\n\t\t\tpublic const int action_bar_spinner = 2131230722;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08005a\n\t\t\tpublic const int action_bar_subtitle = 2131230810;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080059\n\t\t\tpublic const int action_bar_title = 2131230809;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b2\n\t\t\tpublic const int action_container = 2131230898;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08007c\n\t\t\tpublic const int action_context_bar = 2131230844;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b9\n\t\t\tpublic const int action_divider = 2131230905;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b3\n\t\t\tpublic const int action_image = 2131230899;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080003\n\t\t\tpublic const int action_menu_divider = 2131230723;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080004\n\t\t\tpublic const int action_menu_presenter = 2131230724;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080078\n\t\t\tpublic const int action_mode_bar = 2131230840;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080077\n\t\t\tpublic const int action_mode_bar_stub = 2131230839;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08005b\n\t\t\tpublic const int action_mode_close_button = 2131230811;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b4\n\t\t\tpublic const int action_text = 2131230900;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c2\n\t\t\tpublic const int actions = 2131230914;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08005c\n\t\t\tpublic const int activity_chooser_view_content = 2131230812;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08002b\n\t\t\tpublic const int add = 2131230763;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08006f\n\t\t\tpublic const int alertTitle = 2131230831;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080051\n\t\t\tpublic const int all = 2131230801;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080037\n\t\t\tpublic const int always = 2131230775;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080055\n\t\t\tpublic const int async = 2131230805;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080043\n\t\t\tpublic const int auto = 2131230787;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08002e\n\t\t\tpublic const int beginning = 2131230766;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080056\n\t\t\tpublic const int blocking = 2131230806;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08003c\n\t\t\tpublic const int bottom = 2131230780;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080062\n\t\t\tpublic const int buttonPanel = 2131230818;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b6\n\t\t\tpublic const int cancel_action = 2131230902;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080044\n\t\t\tpublic const int center = 2131230788;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080045\n\t\t\tpublic const int center_horizontal = 2131230789;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080046\n\t\t\tpublic const int center_vertical = 2131230790;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080072\n\t\t\tpublic const int checkbox = 2131230834;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800be\n\t\t\tpublic const int chronometer = 2131230910;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08004d\n\t\t\tpublic const int clip_horizontal = 2131230797;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08004e\n\t\t\tpublic const int clip_vertical = 2131230798;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080038\n\t\t\tpublic const int collapseActionView = 2131230776;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08008c\n\t\t\tpublic const int container = 2131230860;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080065\n\t\t\tpublic const int contentPanel = 2131230821;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08008d\n\t\t\tpublic const int coordinator = 2131230861;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08006c\n\t\t\tpublic const int custom = 2131230828;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08006b\n\t\t\tpublic const int customPanel = 2131230827;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080079\n\t\t\tpublic const int decor_content_parent = 2131230841;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08005f\n\t\t\tpublic const int default_activity_button = 2131230815;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08008f\n\t\t\tpublic const int design_bottom_sheet = 2131230863;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080096\n\t\t\tpublic const int design_menu_item_action_area = 2131230870;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080095\n\t\t\tpublic const int design_menu_item_action_area_stub = 2131230869;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080094\n\t\t\tpublic const int design_menu_item_text = 2131230868;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080093\n\t\t\tpublic const int design_navigation_view = 2131230867;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08001f\n\t\t\tpublic const int disableHome = 2131230751;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08007d\n\t\t\tpublic const int edit_query = 2131230845;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08002f\n\t\t\tpublic const int end = 2131230767;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c4\n\t\t\tpublic const int end_padder = 2131230916;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08003e\n\t\t\tpublic const int enterAlways = 2131230782;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08003f\n\t\t\tpublic const int enterAlwaysCollapsed = 2131230783;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080040\n\t\t\tpublic const int exitUntilCollapsed = 2131230784;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08005d\n\t\t\tpublic const int expand_activities_button = 2131230813;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080071\n\t\t\tpublic const int expanded_menu = 2131230833;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08004f\n\t\t\tpublic const int fill = 2131230799;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080050\n\t\t\tpublic const int fill_horizontal = 2131230800;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080047\n\t\t\tpublic const int fill_vertical = 2131230791;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080053\n\t\t\tpublic const int @fixed = 2131230803;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080057\n\t\t\tpublic const int forever = 2131230807;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08000a\n\t\t\tpublic const int ghost_view = 2131230730;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080005\n\t\t\tpublic const int home = 2131230725;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080020\n\t\t\tpublic const int homeAsUp = 2131230752;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080061\n\t\t\tpublic const int icon = 2131230817;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c3\n\t\t\tpublic const int icon_group = 2131230915;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080039\n\t\t\tpublic const int ifRoom = 2131230777;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08005e\n\t\t\tpublic const int image = 2131230814;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800bf\n\t\t\tpublic const int info = 2131230911;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080058\n\t\t\tpublic const int italic = 2131230808;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080000\n\t\t\tpublic const int item_touch_helper_previous_elevation = 2131230720;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08008b\n\t\t\tpublic const int largeLabel = 2131230859;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080048\n\t\t\tpublic const int left = 2131230792;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080017\n\t\t\tpublic const int line1 = 2131230743;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080018\n\t\t\tpublic const int line3 = 2131230744;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08001c\n\t\t\tpublic const int listMode = 2131230748;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080060\n\t\t\tpublic const int list_item = 2131230816;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c9\n\t\t\tpublic const int masked = 2131230921;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b8\n\t\t\tpublic const int media_actions = 2131230904;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c7\n\t\t\tpublic const int message = 2131230919;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080030\n\t\t\tpublic const int middle = 2131230768;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080052\n\t\t\tpublic const int mini = 2131230802;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a4\n\t\t\tpublic const int mr_art = 2131230884;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080099\n\t\t\tpublic const int mr_chooser_list = 2131230873;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08009c\n\t\t\tpublic const int mr_chooser_route_desc = 2131230876;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08009a\n\t\t\tpublic const int mr_chooser_route_icon = 2131230874;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08009b\n\t\t\tpublic const int mr_chooser_route_name = 2131230875;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080098\n\t\t\tpublic const int mr_chooser_title = 2131230872;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a1\n\t\t\tpublic const int mr_close = 2131230881;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a7\n\t\t\tpublic const int mr_control_divider = 2131230887;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800ad\n\t\t\tpublic const int mr_control_playback_ctrl = 2131230893;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b0\n\t\t\tpublic const int mr_control_subtitle = 2131230896;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800af\n\t\t\tpublic const int mr_control_title = 2131230895;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800ae\n\t\t\tpublic const int mr_control_title_container = 2131230894;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a2\n\t\t\tpublic const int mr_custom_control = 2131230882;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a3\n\t\t\tpublic const int mr_default_control = 2131230883;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08009e\n\t\t\tpublic const int mr_dialog_area = 2131230878;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08009d\n\t\t\tpublic const int mr_expandable_area = 2131230877;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b1\n\t\t\tpublic const int mr_group_expand_collapse = 2131230897;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a5\n\t\t\tpublic const int mr_media_main_control = 2131230885;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a0\n\t\t\tpublic const int mr_name = 2131230880;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a6\n\t\t\tpublic const int mr_playback_control = 2131230886;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08009f\n\t\t\tpublic const int mr_title_bar = 2131230879;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a8\n\t\t\tpublic const int mr_volume_control = 2131230888;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800a9\n\t\t\tpublic const int mr_volume_group_list = 2131230889;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800ab\n\t\t\tpublic const int mr_volume_item_icon = 2131230891;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800ac\n\t\t\tpublic const int mr_volume_slider = 2131230892;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080026\n\t\t\tpublic const int multiply = 2131230758;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080092\n\t\t\tpublic const int navigation_header_container = 2131230866;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08003a\n\t\t\tpublic const int never = 2131230778;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080021\n\t\t\tpublic const int none = 2131230753;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08001d\n\t\t\tpublic const int normal = 2131230749;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c1\n\t\t\tpublic const int notification_background = 2131230913;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800bb\n\t\t\tpublic const int notification_main_column = 2131230907;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800ba\n\t\t\tpublic const int notification_main_column_container = 2131230906;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08004b\n\t\t\tpublic const int parallax = 2131230795;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080064\n\t\t\tpublic const int parentPanel = 2131230820;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08000b\n\t\t\tpublic const int parent_matrix = 2131230731;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08004c\n\t\t\tpublic const int pin = 2131230796;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080006\n\t\t\tpublic const int progress_circular = 2131230726;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080007\n\t\t\tpublic const int progress_horizontal = 2131230727;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080074\n\t\t\tpublic const int radio = 2131230836;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080049\n\t\t\tpublic const int right = 2131230793;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c0\n\t\t\tpublic const int right_icon = 2131230912;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800bc\n\t\t\tpublic const int right_side = 2131230908;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08000c\n\t\t\tpublic const int save_image_matrix = 2131230732;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08000d\n\t\t\tpublic const int save_non_transition_alpha = 2131230733;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08000e\n\t\t\tpublic const int save_scale_type = 2131230734;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080027\n\t\t\tpublic const int screen = 2131230759;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080041\n\t\t\tpublic const int scroll = 2131230785;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08006a\n\t\t\tpublic const int scrollIndicatorDown = 2131230826;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080066\n\t\t\tpublic const int scrollIndicatorUp = 2131230822;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080067\n\t\t\tpublic const int scrollView = 2131230823;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080054\n\t\t\tpublic const int scrollable = 2131230804;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08007f\n\t\t\tpublic const int search_badge = 2131230847;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08007e\n\t\t\tpublic const int search_bar = 2131230846;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080080\n\t\t\tpublic const int search_button = 2131230848;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080085\n\t\t\tpublic const int search_close_btn = 2131230853;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080081\n\t\t\tpublic const int search_edit_frame = 2131230849;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080087\n\t\t\tpublic const int search_go_btn = 2131230855;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080082\n\t\t\tpublic const int search_mag_icon = 2131230850;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080083\n\t\t\tpublic const int search_plate = 2131230851;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080084\n\t\t\tpublic const int search_src_text = 2131230852;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080088\n\t\t\tpublic const int search_voice_btn = 2131230856;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080089\n\t\t\tpublic const int select_dialog_listview = 2131230857;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080073\n\t\t\tpublic const int shortcut = 2131230835;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080022\n\t\t\tpublic const int showCustom = 2131230754;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080023\n\t\t\tpublic const int showHome = 2131230755;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080024\n\t\t\tpublic const int showTitle = 2131230756;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c5\n\t\t\tpublic const int sliding_tabs = 2131230917;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08008a\n\t\t\tpublic const int smallLabel = 2131230858;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080091\n\t\t\tpublic const int snackbar_action = 2131230865;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080090\n\t\t\tpublic const int snackbar_text = 2131230864;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080042\n\t\t\tpublic const int snap = 2131230786;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080063\n\t\t\tpublic const int spacer = 2131230819;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080008\n\t\t\tpublic const int split_action_bar = 2131230728;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080028\n\t\t\tpublic const int src_atop = 2131230760;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080029\n\t\t\tpublic const int src_in = 2131230761;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08002a\n\t\t\tpublic const int src_over = 2131230762;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08004a\n\t\t\tpublic const int start = 2131230794;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800b7\n\t\t\tpublic const int status_bar_latest_event_content = 2131230903;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080075\n\t\t\tpublic const int submenuarrow = 2131230837;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080086\n\t\t\tpublic const int submit_area = 2131230854;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08001e\n\t\t\tpublic const int tabMode = 2131230750;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080019\n\t\t\tpublic const int text = 2131230745;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08001a\n\t\t\tpublic const int text2 = 2131230746;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080069\n\t\t\tpublic const int textSpacerNoButtons = 2131230825;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080068\n\t\t\tpublic const int textSpacerNoTitle = 2131230824;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080097\n\t\t\tpublic const int text_input_password_toggle = 2131230871;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080014\n\t\t\tpublic const int textinput_counter = 2131230740;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080015\n\t\t\tpublic const int textinput_error = 2131230741;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800bd\n\t\t\tpublic const int time = 2131230909;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08001b\n\t\t\tpublic const int title = 2131230747;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080070\n\t\t\tpublic const int titleDividerNoCustom = 2131230832;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08006e\n\t\t\tpublic const int title_template = 2131230830;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c6\n\t\t\tpublic const int toolbar = 2131230918;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08003d\n\t\t\tpublic const int top = 2131230781;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08006d\n\t\t\tpublic const int topPanel = 2131230829;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08008e\n\t\t\tpublic const int touch_outside = 2131230862;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08000f\n\t\t\tpublic const int transition_current_scene = 2131230735;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080010\n\t\t\tpublic const int transition_layout_save = 2131230736;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080011\n\t\t\tpublic const int transition_position = 2131230737;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080012\n\t\t\tpublic const int transition_scene_layoutid_cache = 2131230738;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080013\n\t\t\tpublic const int transition_transform = 2131230739;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08002c\n\t\t\tpublic const int uniform = 2131230764;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080009\n\t\t\tpublic const int up = 2131230729;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080025\n\t\t\tpublic const int useLogo = 2131230757;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f080016\n\t\t\tpublic const int view_offset_helper = 2131230742;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800c8\n\t\t\tpublic const int visible = 2131230920;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0800aa\n\t\t\tpublic const int volume_item_container = 2131230890;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08003b\n\t\t\tpublic const int withText = 2131230779;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f08002d\n\t\t\tpublic const int wrap_content = 2131230765;\n\t\t\t\n\t\t\tstatic Id()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Id()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Integer\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0003\n\t\t\tpublic const int abc_config_activityDefaultDur = 2131361795;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0004\n\t\t\tpublic const int abc_config_activityShortDur = 2131361796;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0008\n\t\t\tpublic const int app_bar_elevation_anim_duration = 2131361800;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0009\n\t\t\tpublic const int bottom_sheet_slide_duration = 2131361801;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0005\n\t\t\tpublic const int cancel_button_image_alpha = 2131361797;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0006\n\t\t\tpublic const int config_tooltipAnimTime = 2131361798;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0007\n\t\t\tpublic const int design_snackbar_text_max_lines = 2131361799;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a000a\n\t\t\tpublic const int hide_password_duration = 2131361802;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0000\n\t\t\tpublic const int mr_controller_volume_group_list_animation_duration_ms = 2131361792;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0001\n\t\t\tpublic const int mr_controller_volume_group_list_fade_in_duration_ms = 2131361793;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a0002\n\t\t\tpublic const int mr_controller_volume_group_list_fade_out_duration_ms = 2131361794;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a000b\n\t\t\tpublic const int show_password_duration = 2131361803;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0a000c\n\t\t\tpublic const int status_bar_notification_info_maxnum = 2131361804;\n\t\t\t\n\t\t\tstatic Integer()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Integer()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Interpolator\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f060000\n\t\t\tpublic const int mr_fast_out_slow_in = 2131099648;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f060001\n\t\t\tpublic const int mr_linear_out_slow_in = 2131099649;\n\t\t\t\n\t\t\tstatic Interpolator()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Interpolator()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Layout\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030000\n\t\t\tpublic const int abc_action_bar_title_item = 2130903040;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030001\n\t\t\tpublic const int abc_action_bar_up_container = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030002\n\t\t\tpublic const int abc_action_bar_view_list_nav_layout = 2130903042;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030003\n\t\t\tpublic const int abc_action_menu_item_layout = 2130903043;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030004\n\t\t\tpublic const int abc_action_menu_layout = 2130903044;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030005\n\t\t\tpublic const int abc_action_mode_bar = 2130903045;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030006\n\t\t\tpublic const int abc_action_mode_close_item_material = 2130903046;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030007\n\t\t\tpublic const int abc_activity_chooser_view = 2130903047;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030008\n\t\t\tpublic const int abc_activity_chooser_view_list_item = 2130903048;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030009\n\t\t\tpublic const int abc_alert_dialog_button_bar_material = 2130903049;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03000a\n\t\t\tpublic const int abc_alert_dialog_material = 2130903050;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03000b\n\t\t\tpublic const int abc_alert_dialog_title_material = 2130903051;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03000c\n\t\t\tpublic const int abc_dialog_title_material = 2130903052;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03000d\n\t\t\tpublic const int abc_expanded_menu_layout = 2130903053;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03000e\n\t\t\tpublic const int abc_list_menu_item_checkbox = 2130903054;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03000f\n\t\t\tpublic const int abc_list_menu_item_icon = 2130903055;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030010\n\t\t\tpublic const int abc_list_menu_item_layout = 2130903056;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030011\n\t\t\tpublic const int abc_list_menu_item_radio = 2130903057;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030012\n\t\t\tpublic const int abc_popup_menu_header_item_layout = 2130903058;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030013\n\t\t\tpublic const int abc_popup_menu_item_layout = 2130903059;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030014\n\t\t\tpublic const int abc_screen_content_include = 2130903060;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030015\n\t\t\tpublic const int abc_screen_simple = 2130903061;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030016\n\t\t\tpublic const int abc_screen_simple_overlay_action_mode = 2130903062;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030017\n\t\t\tpublic const int abc_screen_toolbar = 2130903063;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030018\n\t\t\tpublic const int abc_search_dropdown_item_icons_2line = 2130903064;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030019\n\t\t\tpublic const int abc_search_view = 2130903065;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03001a\n\t\t\tpublic const int abc_select_dialog_material = 2130903066;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03001b\n\t\t\tpublic const int design_bottom_navigation_item = 2130903067;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03001c\n\t\t\tpublic const int design_bottom_sheet_dialog = 2130903068;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03001d\n\t\t\tpublic const int design_layout_snackbar = 2130903069;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03001e\n\t\t\tpublic const int design_layout_snackbar_include = 2130903070;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03001f\n\t\t\tpublic const int design_layout_tab_icon = 2130903071;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030020\n\t\t\tpublic const int design_layout_tab_text = 2130903072;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030021\n\t\t\tpublic const int design_menu_item_action_area = 2130903073;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030022\n\t\t\tpublic const int design_navigation_item = 2130903074;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030023\n\t\t\tpublic const int design_navigation_item_header = 2130903075;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030024\n\t\t\tpublic const int design_navigation_item_separator = 2130903076;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030025\n\t\t\tpublic const int design_navigation_item_subheader = 2130903077;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030026\n\t\t\tpublic const int design_navigation_menu = 2130903078;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030027\n\t\t\tpublic const int design_navigation_menu_item = 2130903079;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030028\n\t\t\tpublic const int design_text_input_password_icon = 2130903080;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030029\n\t\t\tpublic const int mr_chooser_dialog = 2130903081;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03002a\n\t\t\tpublic const int mr_chooser_list_item = 2130903082;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03002b\n\t\t\tpublic const int mr_controller_material_dialog_b = 2130903083;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03002c\n\t\t\tpublic const int mr_controller_volume_item = 2130903084;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03002d\n\t\t\tpublic const int mr_playback_control = 2130903085;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03002e\n\t\t\tpublic const int mr_volume_control = 2130903086;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03002f\n\t\t\tpublic const int notification_action = 2130903087;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030030\n\t\t\tpublic const int notification_action_tombstone = 2130903088;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030031\n\t\t\tpublic const int notification_media_action = 2130903089;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030032\n\t\t\tpublic const int notification_media_cancel_action = 2130903090;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030033\n\t\t\tpublic const int notification_template_big_media = 2130903091;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030034\n\t\t\tpublic const int notification_template_big_media_custom = 2130903092;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030035\n\t\t\tpublic const int notification_template_big_media_narrow = 2130903093;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030036\n\t\t\tpublic const int notification_template_big_media_narrow_custom = 2130903094;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030037\n\t\t\tpublic const int notification_template_custom_big = 2130903095;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030038\n\t\t\tpublic const int notification_template_icon_group = 2130903096;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030039\n\t\t\tpublic const int notification_template_lines_media = 2130903097;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03003a\n\t\t\tpublic const int notification_template_media = 2130903098;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03003b\n\t\t\tpublic const int notification_template_media_custom = 2130903099;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03003c\n\t\t\tpublic const int notification_template_part_chronometer = 2130903100;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03003d\n\t\t\tpublic const int notification_template_part_time = 2130903101;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03003e\n\t\t\tpublic const int select_dialog_item_material = 2130903102;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f03003f\n\t\t\tpublic const int select_dialog_multichoice_material = 2130903103;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030040\n\t\t\tpublic const int select_dialog_singlechoice_material = 2130903104;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030041\n\t\t\tpublic const int support_simple_spinner_dropdown_item = 2130903105;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030042\n\t\t\tpublic const int Tabbar = 2130903106;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030043\n\t\t\tpublic const int Toolbar = 2130903107;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f030044\n\t\t\tpublic const int tooltip = 2130903108;\n\t\t\t\n\t\t\tstatic Layout()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Layout()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090015\n\t\t\tpublic const int abc_action_bar_home_description = 2131296277;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090016\n\t\t\tpublic const int abc_action_bar_home_description_format = 2131296278;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090017\n\t\t\tpublic const int abc_action_bar_home_subtitle_description_format = 2131296279;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090018\n\t\t\tpublic const int abc_action_bar_up_description = 2131296280;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090019\n\t\t\tpublic const int abc_action_menu_overflow_description = 2131296281;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09001a\n\t\t\tpublic const int abc_action_mode_done = 2131296282;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09001b\n\t\t\tpublic const int abc_activity_chooser_view_see_all = 2131296283;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09001c\n\t\t\tpublic const int abc_activitychooserview_choose_application = 2131296284;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09001d\n\t\t\tpublic const int abc_capital_off = 2131296285;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09001e\n\t\t\tpublic const int abc_capital_on = 2131296286;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09002a\n\t\t\tpublic const int abc_font_family_body_1_material = 2131296298;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09002b\n\t\t\tpublic const int abc_font_family_body_2_material = 2131296299;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09002c\n\t\t\tpublic const int abc_font_family_button_material = 2131296300;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09002d\n\t\t\tpublic const int abc_font_family_caption_material = 2131296301;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09002e\n\t\t\tpublic const int abc_font_family_display_1_material = 2131296302;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09002f\n\t\t\tpublic const int abc_font_family_display_2_material = 2131296303;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090030\n\t\t\tpublic const int abc_font_family_display_3_material = 2131296304;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090031\n\t\t\tpublic const int abc_font_family_display_4_material = 2131296305;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090032\n\t\t\tpublic const int abc_font_family_headline_material = 2131296306;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090033\n\t\t\tpublic const int abc_font_family_menu_material = 2131296307;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090034\n\t\t\tpublic const int abc_font_family_subhead_material = 2131296308;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090035\n\t\t\tpublic const int abc_font_family_title_material = 2131296309;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09001f\n\t\t\tpublic const int abc_search_hint = 2131296287;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090020\n\t\t\tpublic const int abc_searchview_description_clear = 2131296288;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090021\n\t\t\tpublic const int abc_searchview_description_query = 2131296289;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090022\n\t\t\tpublic const int abc_searchview_description_search = 2131296290;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090023\n\t\t\tpublic const int abc_searchview_description_submit = 2131296291;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090024\n\t\t\tpublic const int abc_searchview_description_voice = 2131296292;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090025\n\t\t\tpublic const int abc_shareactionprovider_share_with = 2131296293;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090026\n\t\t\tpublic const int abc_shareactionprovider_share_with_application = 2131296294;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090027\n\t\t\tpublic const int abc_toolbar_collapse_description = 2131296295;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090036\n\t\t\tpublic const int appbar_scrolling_view_behavior = 2131296310;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090037\n\t\t\tpublic const int bottom_sheet_behavior = 2131296311;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090038\n\t\t\tpublic const int character_counter_pattern = 2131296312;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090000\n\t\t\tpublic const int mr_button_content_description = 2131296256;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090001\n\t\t\tpublic const int mr_cast_button_connected = 2131296257;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090002\n\t\t\tpublic const int mr_cast_button_connecting = 2131296258;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090003\n\t\t\tpublic const int mr_cast_button_disconnected = 2131296259;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090004\n\t\t\tpublic const int mr_chooser_searching = 2131296260;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090005\n\t\t\tpublic const int mr_chooser_title = 2131296261;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090006\n\t\t\tpublic const int mr_controller_album_art = 2131296262;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090007\n\t\t\tpublic const int mr_controller_casting_screen = 2131296263;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090008\n\t\t\tpublic const int mr_controller_close_description = 2131296264;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090009\n\t\t\tpublic const int mr_controller_collapse_group = 2131296265;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09000a\n\t\t\tpublic const int mr_controller_disconnect = 2131296266;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09000b\n\t\t\tpublic const int mr_controller_expand_group = 2131296267;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09000c\n\t\t\tpublic const int mr_controller_no_info_available = 2131296268;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09000d\n\t\t\tpublic const int mr_controller_no_media_selected = 2131296269;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09000e\n\t\t\tpublic const int mr_controller_pause = 2131296270;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09000f\n\t\t\tpublic const int mr_controller_play = 2131296271;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090010\n\t\t\tpublic const int mr_controller_stop = 2131296272;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090011\n\t\t\tpublic const int mr_controller_stop_casting = 2131296273;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090012\n\t\t\tpublic const int mr_controller_volume_slider = 2131296274;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090013\n\t\t\tpublic const int mr_system_route_name = 2131296275;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090014\n\t\t\tpublic const int mr_user_route_category_name = 2131296276;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090039\n\t\t\tpublic const int password_toggle_content_description = 2131296313;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09003a\n\t\t\tpublic const int path_password_eye = 2131296314;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09003b\n\t\t\tpublic const int path_password_eye_mask_strike_through = 2131296315;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09003c\n\t\t\tpublic const int path_password_eye_mask_visible = 2131296316;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f09003d\n\t\t\tpublic const int path_password_strike_through = 2131296317;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090028\n\t\t\tpublic const int search_menu_title = 2131296296;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f090029\n\t\t\tpublic const int status_bar_notification_info_overflow = 2131296297;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ac\n\t\t\tpublic const int AlertDialog_AppCompat = 2131427500;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ad\n\t\t\tpublic const int AlertDialog_AppCompat_Light = 2131427501;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ae\n\t\t\tpublic const int Animation_AppCompat_Dialog = 2131427502;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00af\n\t\t\tpublic const int Animation_AppCompat_DropDownUp = 2131427503;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b0\n\t\t\tpublic const int Animation_AppCompat_Tooltip = 2131427504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0178\n\t\t\tpublic const int Animation_Design_BottomSheetDialog = 2131427704;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b019b\n\t\t\tpublic const int AppCompatDialogStyle = 2131427739;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b1\n\t\t\tpublic const int Base_AlertDialog_AppCompat = 2131427505;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b2\n\t\t\tpublic const int Base_AlertDialog_AppCompat_Light = 2131427506;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b3\n\t\t\tpublic const int Base_Animation_AppCompat_Dialog = 2131427507;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b4\n\t\t\tpublic const int Base_Animation_AppCompat_DropDownUp = 2131427508;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b5\n\t\t\tpublic const int Base_Animation_AppCompat_Tooltip = 2131427509;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b000c\n\t\t\tpublic const int Base_CardView = 2131427340;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b6\n\t\t\tpublic const int Base_DialogWindowTitle_AppCompat = 2131427510;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b7\n\t\t\tpublic const int Base_DialogWindowTitleBackground_AppCompat = 2131427511;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0048\n\t\t\tpublic const int Base_TextAppearance_AppCompat = 2131427400;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0049\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Body1 = 2131427401;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b004a\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Body2 = 2131427402;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0036\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Button = 2131427382;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b004b\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Caption = 2131427403;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b004c\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Display1 = 2131427404;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b004d\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Display2 = 2131427405;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b004e\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Display3 = 2131427406;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b004f\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Display4 = 2131427407;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0050\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Headline = 2131427408;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b001a\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Inverse = 2131427354;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0051\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Large = 2131427409;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b001b\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Large_Inverse = 2131427355;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0052\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131427410;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0053\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131427411;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0054\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Medium = 2131427412;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b001c\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Medium_Inverse = 2131427356;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0055\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Menu = 2131427413;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b8\n\t\t\tpublic const int Base_TextAppearance_AppCompat_SearchResult = 2131427512;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0056\n\t\t\tpublic const int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 2131427414;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0057\n\t\t\tpublic const int Base_TextAppearance_AppCompat_SearchResult_Title = 2131427415;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0058\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Small = 2131427416;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b001d\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Small_Inverse = 2131427357;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0059\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Subhead = 2131427417;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b001e\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Subhead_Inverse = 2131427358;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b005a\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Title = 2131427418;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b001f\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Title_Inverse = 2131427359;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00b9\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Tooltip = 2131427513;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b009d\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131427485;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b005b\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131427419;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b005c\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131427420;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b005d\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 2131427421;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b005e\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131427422;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b005f\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131427423;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0060\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 2131427424;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0061\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_Button = 2131427425;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a4\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131427492;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a5\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_Button_Colored = 2131427493;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b009e\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 2131427486;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ba\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_DropDownItem = 2131427514;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0062\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131427426;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0063\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131427427;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0064\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131427428;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0065\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_Switch = 2131427429;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0066\n\t\t\tpublic const int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131427430;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00bb\n\t\t\tpublic const int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131427515;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0067\n\t\t\tpublic const int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131427431;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0068\n\t\t\tpublic const int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 2131427432;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0069\n\t\t\tpublic const int Base_Theme_AppCompat = 2131427433;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00bc\n\t\t\tpublic const int Base_Theme_AppCompat_CompactMenu = 2131427516;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0020\n\t\t\tpublic const int Base_Theme_AppCompat_Dialog = 2131427360;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0021\n\t\t\tpublic const int Base_Theme_AppCompat_Dialog_Alert = 2131427361;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00bd\n\t\t\tpublic const int Base_Theme_AppCompat_Dialog_FixedSize = 2131427517;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0022\n\t\t\tpublic const int Base_Theme_AppCompat_Dialog_MinWidth = 2131427362;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0010\n\t\t\tpublic const int Base_Theme_AppCompat_DialogWhenLarge = 2131427344;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b006a\n\t\t\tpublic const int Base_Theme_AppCompat_Light = 2131427434;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00be\n\t\t\tpublic const int Base_Theme_AppCompat_Light_DarkActionBar = 2131427518;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0023\n\t\t\tpublic const int Base_Theme_AppCompat_Light_Dialog = 2131427363;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0024\n\t\t\tpublic const int Base_Theme_AppCompat_Light_Dialog_Alert = 2131427364;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00bf\n\t\t\tpublic const int Base_Theme_AppCompat_Light_Dialog_FixedSize = 2131427519;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0025\n\t\t\tpublic const int Base_Theme_AppCompat_Light_Dialog_MinWidth = 2131427365;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0011\n\t\t\tpublic const int Base_Theme_AppCompat_Light_DialogWhenLarge = 2131427345;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c0\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat = 2131427520;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c1\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat_ActionBar = 2131427521;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c2\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat_Dark = 2131427522;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c3\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 2131427523;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0026\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat_Dialog = 2131427366;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0027\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat_Dialog_Alert = 2131427367;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c4\n\t\t\tpublic const int Base_ThemeOverlay_AppCompat_Light = 2131427524;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0028\n\t\t\tpublic const int Base_V11_Theme_AppCompat_Dialog = 2131427368;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0029\n\t\t\tpublic const int Base_V11_Theme_AppCompat_Light_Dialog = 2131427369;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b002a\n\t\t\tpublic const int Base_V11_ThemeOverlay_AppCompat_Dialog = 2131427370;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0032\n\t\t\tpublic const int Base_V12_Widget_AppCompat_AutoCompleteTextView = 2131427378;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0033\n\t\t\tpublic const int Base_V12_Widget_AppCompat_EditText = 2131427379;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0179\n\t\t\tpublic const int Base_V14_Widget_Design_AppBarLayout = 2131427705;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b006b\n\t\t\tpublic const int Base_V21_Theme_AppCompat = 2131427435;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b006c\n\t\t\tpublic const int Base_V21_Theme_AppCompat_Dialog = 2131427436;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b006d\n\t\t\tpublic const int Base_V21_Theme_AppCompat_Light = 2131427437;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b006e\n\t\t\tpublic const int Base_V21_Theme_AppCompat_Light_Dialog = 2131427438;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b006f\n\t\t\tpublic const int Base_V21_ThemeOverlay_AppCompat_Dialog = 2131427439;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0175\n\t\t\tpublic const int Base_V21_Widget_Design_AppBarLayout = 2131427701;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b009b\n\t\t\tpublic const int Base_V22_Theme_AppCompat = 2131427483;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b009c\n\t\t\tpublic const int Base_V22_Theme_AppCompat_Light = 2131427484;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b009f\n\t\t\tpublic const int Base_V23_Theme_AppCompat = 2131427487;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a0\n\t\t\tpublic const int Base_V23_Theme_AppCompat_Light = 2131427488;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a8\n\t\t\tpublic const int Base_V26_Theme_AppCompat = 2131427496;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a9\n\t\t\tpublic const int Base_V26_Theme_AppCompat_Light = 2131427497;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00aa\n\t\t\tpublic const int Base_V26_Widget_AppCompat_Toolbar = 2131427498;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0177\n\t\t\tpublic const int Base_V26_Widget_Design_AppBarLayout = 2131427703;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c5\n\t\t\tpublic const int Base_V7_Theme_AppCompat = 2131427525;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c6\n\t\t\tpublic const int Base_V7_Theme_AppCompat_Dialog = 2131427526;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c7\n\t\t\tpublic const int Base_V7_Theme_AppCompat_Light = 2131427527;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c8\n\t\t\tpublic const int Base_V7_Theme_AppCompat_Light_Dialog = 2131427528;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00c9\n\t\t\tpublic const int Base_V7_ThemeOverlay_AppCompat_Dialog = 2131427529;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ca\n\t\t\tpublic const int Base_V7_Widget_AppCompat_AutoCompleteTextView = 2131427530;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00cb\n\t\t\tpublic const int Base_V7_Widget_AppCompat_EditText = 2131427531;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00cc\n\t\t\tpublic const int Base_V7_Widget_AppCompat_Toolbar = 2131427532;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00cd\n\t\t\tpublic const int Base_Widget_AppCompat_ActionBar = 2131427533;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ce\n\t\t\tpublic const int Base_Widget_AppCompat_ActionBar_Solid = 2131427534;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00cf\n\t\t\tpublic const int Base_Widget_AppCompat_ActionBar_TabBar = 2131427535;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0070\n\t\t\tpublic const int Base_Widget_AppCompat_ActionBar_TabText = 2131427440;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0071\n\t\t\tpublic const int Base_Widget_AppCompat_ActionBar_TabView = 2131427441;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0072\n\t\t\tpublic const int Base_Widget_AppCompat_ActionButton = 2131427442;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0073\n\t\t\tpublic const int Base_Widget_AppCompat_ActionButton_CloseMode = 2131427443;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0074\n\t\t\tpublic const int Base_Widget_AppCompat_ActionButton_Overflow = 2131427444;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d0\n\t\t\tpublic const int Base_Widget_AppCompat_ActionMode = 2131427536;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d1\n\t\t\tpublic const int Base_Widget_AppCompat_ActivityChooserView = 2131427537;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0034\n\t\t\tpublic const int Base_Widget_AppCompat_AutoCompleteTextView = 2131427380;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0075\n\t\t\tpublic const int Base_Widget_AppCompat_Button = 2131427445;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0076\n\t\t\tpublic const int Base_Widget_AppCompat_Button_Borderless = 2131427446;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0077\n\t\t\tpublic const int Base_Widget_AppCompat_Button_Borderless_Colored = 2131427447;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d2\n\t\t\tpublic const int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131427538;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a1\n\t\t\tpublic const int Base_Widget_AppCompat_Button_Colored = 2131427489;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0078\n\t\t\tpublic const int Base_Widget_AppCompat_Button_Small = 2131427448;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0079\n\t\t\tpublic const int Base_Widget_AppCompat_ButtonBar = 2131427449;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d3\n\t\t\tpublic const int Base_Widget_AppCompat_ButtonBar_AlertDialog = 2131427539;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b007a\n\t\t\tpublic const int Base_Widget_AppCompat_CompoundButton_CheckBox = 2131427450;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b007b\n\t\t\tpublic const int Base_Widget_AppCompat_CompoundButton_RadioButton = 2131427451;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d4\n\t\t\tpublic const int Base_Widget_AppCompat_CompoundButton_Switch = 2131427540;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b000f\n\t\t\tpublic const int Base_Widget_AppCompat_DrawerArrowToggle = 2131427343;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d5\n\t\t\tpublic const int Base_Widget_AppCompat_DrawerArrowToggle_Common = 2131427541;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b007c\n\t\t\tpublic const int Base_Widget_AppCompat_DropDownItem_Spinner = 2131427452;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0035\n\t\t\tpublic const int Base_Widget_AppCompat_EditText = 2131427381;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b007d\n\t\t\tpublic const int Base_Widget_AppCompat_ImageButton = 2131427453;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d6\n\t\t\tpublic const int Base_Widget_AppCompat_Light_ActionBar = 2131427542;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d7\n\t\t\tpublic const int Base_Widget_AppCompat_Light_ActionBar_Solid = 2131427543;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d8\n\t\t\tpublic const int Base_Widget_AppCompat_Light_ActionBar_TabBar = 2131427544;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b007e\n\t\t\tpublic const int Base_Widget_AppCompat_Light_ActionBar_TabText = 2131427454;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b007f\n\t\t\tpublic const int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131427455;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0080\n\t\t\tpublic const int Base_Widget_AppCompat_Light_ActionBar_TabView = 2131427456;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0081\n\t\t\tpublic const int Base_Widget_AppCompat_Light_PopupMenu = 2131427457;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0082\n\t\t\tpublic const int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 2131427458;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00d9\n\t\t\tpublic const int Base_Widget_AppCompat_ListMenuView = 2131427545;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0083\n\t\t\tpublic const int Base_Widget_AppCompat_ListPopupWindow = 2131427459;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0084\n\t\t\tpublic const int Base_Widget_AppCompat_ListView = 2131427460;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0085\n\t\t\tpublic const int Base_Widget_AppCompat_ListView_DropDown = 2131427461;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0086\n\t\t\tpublic const int Base_Widget_AppCompat_ListView_Menu = 2131427462;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0087\n\t\t\tpublic const int Base_Widget_AppCompat_PopupMenu = 2131427463;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0088\n\t\t\tpublic const int Base_Widget_AppCompat_PopupMenu_Overflow = 2131427464;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00da\n\t\t\tpublic const int Base_Widget_AppCompat_PopupWindow = 2131427546;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b002b\n\t\t\tpublic const int Base_Widget_AppCompat_ProgressBar = 2131427371;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b002c\n\t\t\tpublic const int Base_Widget_AppCompat_ProgressBar_Horizontal = 2131427372;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0089\n\t\t\tpublic const int Base_Widget_AppCompat_RatingBar = 2131427465;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a2\n\t\t\tpublic const int Base_Widget_AppCompat_RatingBar_Indicator = 2131427490;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a3\n\t\t\tpublic const int Base_Widget_AppCompat_RatingBar_Small = 2131427491;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00db\n\t\t\tpublic const int Base_Widget_AppCompat_SearchView = 2131427547;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00dc\n\t\t\tpublic const int Base_Widget_AppCompat_SearchView_ActionBar = 2131427548;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b008a\n\t\t\tpublic const int Base_Widget_AppCompat_SeekBar = 2131427466;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00dd\n\t\t\tpublic const int Base_Widget_AppCompat_SeekBar_Discrete = 2131427549;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b008b\n\t\t\tpublic const int Base_Widget_AppCompat_Spinner = 2131427467;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0012\n\t\t\tpublic const int Base_Widget_AppCompat_Spinner_Underlined = 2131427346;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b008c\n\t\t\tpublic const int Base_Widget_AppCompat_TextView_SpinnerItem = 2131427468;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ab\n\t\t\tpublic const int Base_Widget_AppCompat_Toolbar = 2131427499;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b008d\n\t\t\tpublic const int Base_Widget_AppCompat_Toolbar_Button_Navigation = 2131427469;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0176\n\t\t\tpublic const int Base_Widget_Design_AppBarLayout = 2131427702;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b017a\n\t\t\tpublic const int Base_Widget_Design_TabLayout = 2131427706;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b000b\n\t\t\tpublic const int CardView = 2131427339;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b000d\n\t\t\tpublic const int CardView_Dark = 2131427341;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b000e\n\t\t\tpublic const int CardView_Light = 2131427342;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0199\n\t\t\tpublic const int MainTheme = 2131427737;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b019a\n\t\t\tpublic const int MainTheme_Base = 2131427738;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b002d\n\t\t\tpublic const int Platform_AppCompat = 2131427373;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b002e\n\t\t\tpublic const int Platform_AppCompat_Light = 2131427374;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b008e\n\t\t\tpublic const int Platform_ThemeOverlay_AppCompat = 2131427470;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b008f\n\t\t\tpublic const int Platform_ThemeOverlay_AppCompat_Dark = 2131427471;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0090\n\t\t\tpublic const int Platform_ThemeOverlay_AppCompat_Light = 2131427472;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b002f\n\t\t\tpublic const int Platform_V11_AppCompat = 2131427375;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0030\n\t\t\tpublic const int Platform_V11_AppCompat_Light = 2131427376;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0037\n\t\t\tpublic const int Platform_V14_AppCompat = 2131427383;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0038\n\t\t\tpublic const int Platform_V14_AppCompat_Light = 2131427384;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0091\n\t\t\tpublic const int Platform_V21_AppCompat = 2131427473;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0092\n\t\t\tpublic const int Platform_V21_AppCompat_Light = 2131427474;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a6\n\t\t\tpublic const int Platform_V25_AppCompat = 2131427494;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00a7\n\t\t\tpublic const int Platform_V25_AppCompat_Light = 2131427495;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0031\n\t\t\tpublic const int Platform_Widget_AppCompat_Spinner = 2131427377;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b003a\n\t\t\tpublic const int RtlOverlay_DialogWindowTitle_AppCompat = 2131427386;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b003b\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 2131427387;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b003c\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 2131427388;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b003d\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_PopupMenuItem = 2131427389;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b003e\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 2131427390;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b003f\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 2131427391;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0040\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_Search_DropDown = 2131427392;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0041\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 2131427393;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0042\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 2131427394;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0043\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 2131427395;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0044\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 2131427396;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0045\n\t\t\tpublic const int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 2131427397;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0046\n\t\t\tpublic const int RtlUnderlay_Widget_AppCompat_ActionButton = 2131427398;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0047\n\t\t\tpublic const int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 2131427399;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00de\n\t\t\tpublic const int TextAppearance_AppCompat = 2131427550;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00df\n\t\t\tpublic const int TextAppearance_AppCompat_Body1 = 2131427551;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e0\n\t\t\tpublic const int TextAppearance_AppCompat_Body2 = 2131427552;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e1\n\t\t\tpublic const int TextAppearance_AppCompat_Button = 2131427553;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e2\n\t\t\tpublic const int TextAppearance_AppCompat_Caption = 2131427554;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e3\n\t\t\tpublic const int TextAppearance_AppCompat_Display1 = 2131427555;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e4\n\t\t\tpublic const int TextAppearance_AppCompat_Display2 = 2131427556;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e5\n\t\t\tpublic const int TextAppearance_AppCompat_Display3 = 2131427557;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e6\n\t\t\tpublic const int TextAppearance_AppCompat_Display4 = 2131427558;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e7\n\t\t\tpublic const int TextAppearance_AppCompat_Headline = 2131427559;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e8\n\t\t\tpublic const int TextAppearance_AppCompat_Inverse = 2131427560;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00e9\n\t\t\tpublic const int TextAppearance_AppCompat_Large = 2131427561;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ea\n\t\t\tpublic const int TextAppearance_AppCompat_Large_Inverse = 2131427562;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00eb\n\t\t\tpublic const int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 2131427563;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ec\n\t\t\tpublic const int TextAppearance_AppCompat_Light_SearchResult_Title = 2131427564;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ed\n\t\t\tpublic const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131427565;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ee\n\t\t\tpublic const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131427566;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ef\n\t\t\tpublic const int TextAppearance_AppCompat_Medium = 2131427567;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f0\n\t\t\tpublic const int TextAppearance_AppCompat_Medium_Inverse = 2131427568;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f1\n\t\t\tpublic const int TextAppearance_AppCompat_Menu = 2131427569;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0093\n\t\t\tpublic const int TextAppearance_AppCompat_Notification = 2131427475;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0094\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Info = 2131427476;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0095\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Info_Media = 2131427477;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f2\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Line2 = 2131427570;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f3\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Line2_Media = 2131427571;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0096\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Media = 2131427478;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0097\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Time = 2131427479;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0098\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Time_Media = 2131427480;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0099\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Title = 2131427481;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b009a\n\t\t\tpublic const int TextAppearance_AppCompat_Notification_Title_Media = 2131427482;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f4\n\t\t\tpublic const int TextAppearance_AppCompat_SearchResult_Subtitle = 2131427572;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f5\n\t\t\tpublic const int TextAppearance_AppCompat_SearchResult_Title = 2131427573;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f6\n\t\t\tpublic const int TextAppearance_AppCompat_Small = 2131427574;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f7\n\t\t\tpublic const int TextAppearance_AppCompat_Small_Inverse = 2131427575;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f8\n\t\t\tpublic const int TextAppearance_AppCompat_Subhead = 2131427576;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00f9\n\t\t\tpublic const int TextAppearance_AppCompat_Subhead_Inverse = 2131427577;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00fa\n\t\t\tpublic const int TextAppearance_AppCompat_Title = 2131427578;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00fb\n\t\t\tpublic const int TextAppearance_AppCompat_Title_Inverse = 2131427579;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0039\n\t\t\tpublic const int TextAppearance_AppCompat_Tooltip = 2131427385;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00fc\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131427580;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00fd\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131427581;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00fe\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131427582;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b00ff\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionBar_Title = 2131427583;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0100\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131427584;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0101\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131427585;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0102\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 2131427586;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0103\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionMode_Title = 2131427587;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0104\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 2131427588;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0105\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_Button = 2131427589;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0106\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131427590;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0107\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_Button_Colored = 2131427591;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0108\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_Button_Inverse = 2131427592;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0109\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_DropDownItem = 2131427593;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b010a\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131427594;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b010b\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131427595;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b010c\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131427596;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b010d\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_Switch = 2131427597;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b010e\n\t\t\tpublic const int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131427598;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0192\n\t\t\tpublic const int TextAppearance_Compat_Notification = 2131427730;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0193\n\t\t\tpublic const int TextAppearance_Compat_Notification_Info = 2131427731;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b016f\n\t\t\tpublic const int TextAppearance_Compat_Notification_Info_Media = 2131427695;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0198\n\t\t\tpublic const int TextAppearance_Compat_Notification_Line2 = 2131427736;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0173\n\t\t\tpublic const int TextAppearance_Compat_Notification_Line2_Media = 2131427699;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0170\n\t\t\tpublic const int TextAppearance_Compat_Notification_Media = 2131427696;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0194\n\t\t\tpublic const int TextAppearance_Compat_Notification_Time = 2131427732;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0171\n\t\t\tpublic const int TextAppearance_Compat_Notification_Time_Media = 2131427697;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0195\n\t\t\tpublic const int TextAppearance_Compat_Notification_Title = 2131427733;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0172\n\t\t\tpublic const int TextAppearance_Compat_Notification_Title_Media = 2131427698;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b017b\n\t\t\tpublic const int TextAppearance_Design_CollapsingToolbar_Expanded = 2131427707;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b017c\n\t\t\tpublic const int TextAppearance_Design_Counter = 2131427708;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b017d\n\t\t\tpublic const int TextAppearance_Design_Counter_Overflow = 2131427709;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b017e\n\t\t\tpublic const int TextAppearance_Design_Error = 2131427710;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b017f\n\t\t\tpublic const int TextAppearance_Design_Hint = 2131427711;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0180\n\t\t\tpublic const int TextAppearance_Design_Snackbar_Message = 2131427712;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0181\n\t\t\tpublic const int TextAppearance_Design_Tab = 2131427713;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0000\n\t\t\tpublic const int TextAppearance_MediaRouter_PrimaryText = 2131427328;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0001\n\t\t\tpublic const int TextAppearance_MediaRouter_SecondaryText = 2131427329;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0002\n\t\t\tpublic const int TextAppearance_MediaRouter_Title = 2131427330;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b010f\n\t\t\tpublic const int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131427599;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0110\n\t\t\tpublic const int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131427600;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0111\n\t\t\tpublic const int TextAppearance_Widget_AppCompat_Toolbar_Title = 2131427601;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0112\n\t\t\tpublic const int Theme_AppCompat = 2131427602;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0113\n\t\t\tpublic const int Theme_AppCompat_CompactMenu = 2131427603;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0013\n\t\t\tpublic const int Theme_AppCompat_DayNight = 2131427347;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0014\n\t\t\tpublic const int Theme_AppCompat_DayNight_DarkActionBar = 2131427348;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0015\n\t\t\tpublic const int Theme_AppCompat_DayNight_Dialog = 2131427349;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0016\n\t\t\tpublic const int Theme_AppCompat_DayNight_Dialog_Alert = 2131427350;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0017\n\t\t\tpublic const int Theme_AppCompat_DayNight_Dialog_MinWidth = 2131427351;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0018\n\t\t\tpublic const int Theme_AppCompat_DayNight_DialogWhenLarge = 2131427352;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0019\n\t\t\tpublic const int Theme_AppCompat_DayNight_NoActionBar = 2131427353;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0114\n\t\t\tpublic const int Theme_AppCompat_Dialog = 2131427604;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0115\n\t\t\tpublic const int Theme_AppCompat_Dialog_Alert = 2131427605;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0116\n\t\t\tpublic const int Theme_AppCompat_Dialog_MinWidth = 2131427606;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0117\n\t\t\tpublic const int Theme_AppCompat_DialogWhenLarge = 2131427607;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0118\n\t\t\tpublic const int Theme_AppCompat_Light = 2131427608;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0119\n\t\t\tpublic const int Theme_AppCompat_Light_DarkActionBar = 2131427609;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b011a\n\t\t\tpublic const int Theme_AppCompat_Light_Dialog = 2131427610;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b011b\n\t\t\tpublic const int Theme_AppCompat_Light_Dialog_Alert = 2131427611;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b011c\n\t\t\tpublic const int Theme_AppCompat_Light_Dialog_MinWidth = 2131427612;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b011d\n\t\t\tpublic const int Theme_AppCompat_Light_DialogWhenLarge = 2131427613;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b011e\n\t\t\tpublic const int Theme_AppCompat_Light_NoActionBar = 2131427614;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b011f\n\t\t\tpublic const int Theme_AppCompat_NoActionBar = 2131427615;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0182\n\t\t\tpublic const int Theme_Design = 2131427714;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0183\n\t\t\tpublic const int Theme_Design_BottomSheetDialog = 2131427715;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0184\n\t\t\tpublic const int Theme_Design_Light = 2131427716;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0185\n\t\t\tpublic const int Theme_Design_Light_BottomSheetDialog = 2131427717;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0186\n\t\t\tpublic const int Theme_Design_Light_NoActionBar = 2131427718;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0187\n\t\t\tpublic const int Theme_Design_NoActionBar = 2131427719;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0003\n\t\t\tpublic const int Theme_MediaRouter = 2131427331;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0004\n\t\t\tpublic const int Theme_MediaRouter_Light = 2131427332;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0005\n\t\t\tpublic const int Theme_MediaRouter_Light_DarkControlPanel = 2131427333;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0006\n\t\t\tpublic const int Theme_MediaRouter_LightControlPanel = 2131427334;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0120\n\t\t\tpublic const int ThemeOverlay_AppCompat = 2131427616;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0121\n\t\t\tpublic const int ThemeOverlay_AppCompat_ActionBar = 2131427617;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0122\n\t\t\tpublic const int ThemeOverlay_AppCompat_Dark = 2131427618;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0123\n\t\t\tpublic const int ThemeOverlay_AppCompat_Dark_ActionBar = 2131427619;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0124\n\t\t\tpublic const int ThemeOverlay_AppCompat_Dialog = 2131427620;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0125\n\t\t\tpublic const int ThemeOverlay_AppCompat_Dialog_Alert = 2131427621;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0126\n\t\t\tpublic const int ThemeOverlay_AppCompat_Light = 2131427622;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0007\n\t\t\tpublic const int ThemeOverlay_MediaRouter_Dark = 2131427335;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0008\n\t\t\tpublic const int ThemeOverlay_MediaRouter_Light = 2131427336;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0127\n\t\t\tpublic const int Widget_AppCompat_ActionBar = 2131427623;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0128\n\t\t\tpublic const int Widget_AppCompat_ActionBar_Solid = 2131427624;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0129\n\t\t\tpublic const int Widget_AppCompat_ActionBar_TabBar = 2131427625;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b012a\n\t\t\tpublic const int Widget_AppCompat_ActionBar_TabText = 2131427626;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b012b\n\t\t\tpublic const int Widget_AppCompat_ActionBar_TabView = 2131427627;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b012c\n\t\t\tpublic const int Widget_AppCompat_ActionButton = 2131427628;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b012d\n\t\t\tpublic const int Widget_AppCompat_ActionButton_CloseMode = 2131427629;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b012e\n\t\t\tpublic const int Widget_AppCompat_ActionButton_Overflow = 2131427630;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b012f\n\t\t\tpublic const int Widget_AppCompat_ActionMode = 2131427631;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0130\n\t\t\tpublic const int Widget_AppCompat_ActivityChooserView = 2131427632;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0131\n\t\t\tpublic const int Widget_AppCompat_AutoCompleteTextView = 2131427633;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0132\n\t\t\tpublic const int Widget_AppCompat_Button = 2131427634;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0133\n\t\t\tpublic const int Widget_AppCompat_Button_Borderless = 2131427635;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0134\n\t\t\tpublic const int Widget_AppCompat_Button_Borderless_Colored = 2131427636;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0135\n\t\t\tpublic const int Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131427637;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0136\n\t\t\tpublic const int Widget_AppCompat_Button_Colored = 2131427638;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0137\n\t\t\tpublic const int Widget_AppCompat_Button_Small = 2131427639;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0138\n\t\t\tpublic const int Widget_AppCompat_ButtonBar = 2131427640;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0139\n\t\t\tpublic const int Widget_AppCompat_ButtonBar_AlertDialog = 2131427641;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b013a\n\t\t\tpublic const int Widget_AppCompat_CompoundButton_CheckBox = 2131427642;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b013b\n\t\t\tpublic const int Widget_AppCompat_CompoundButton_RadioButton = 2131427643;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b013c\n\t\t\tpublic const int Widget_AppCompat_CompoundButton_Switch = 2131427644;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b013d\n\t\t\tpublic const int Widget_AppCompat_DrawerArrowToggle = 2131427645;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b013e\n\t\t\tpublic const int Widget_AppCompat_DropDownItem_Spinner = 2131427646;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b013f\n\t\t\tpublic const int Widget_AppCompat_EditText = 2131427647;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0140\n\t\t\tpublic const int Widget_AppCompat_ImageButton = 2131427648;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0141\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar = 2131427649;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0142\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_Solid = 2131427650;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0143\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 2131427651;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0144\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_TabBar = 2131427652;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0145\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 2131427653;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0146\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_TabText = 2131427654;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0147\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131427655;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0148\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_TabView = 2131427656;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0149\n\t\t\tpublic const int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 2131427657;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b014a\n\t\t\tpublic const int Widget_AppCompat_Light_ActionButton = 2131427658;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b014b\n\t\t\tpublic const int Widget_AppCompat_Light_ActionButton_CloseMode = 2131427659;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b014c\n\t\t\tpublic const int Widget_AppCompat_Light_ActionButton_Overflow = 2131427660;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b014d\n\t\t\tpublic const int Widget_AppCompat_Light_ActionMode_Inverse = 2131427661;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b014e\n\t\t\tpublic const int Widget_AppCompat_Light_ActivityChooserView = 2131427662;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b014f\n\t\t\tpublic const int Widget_AppCompat_Light_AutoCompleteTextView = 2131427663;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0150\n\t\t\tpublic const int Widget_AppCompat_Light_DropDownItem_Spinner = 2131427664;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0151\n\t\t\tpublic const int Widget_AppCompat_Light_ListPopupWindow = 2131427665;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0152\n\t\t\tpublic const int Widget_AppCompat_Light_ListView_DropDown = 2131427666;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0153\n\t\t\tpublic const int Widget_AppCompat_Light_PopupMenu = 2131427667;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0154\n\t\t\tpublic const int Widget_AppCompat_Light_PopupMenu_Overflow = 2131427668;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0155\n\t\t\tpublic const int Widget_AppCompat_Light_SearchView = 2131427669;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0156\n\t\t\tpublic const int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 2131427670;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0157\n\t\t\tpublic const int Widget_AppCompat_ListMenuView = 2131427671;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0158\n\t\t\tpublic const int Widget_AppCompat_ListPopupWindow = 2131427672;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0159\n\t\t\tpublic const int Widget_AppCompat_ListView = 2131427673;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b015a\n\t\t\tpublic const int Widget_AppCompat_ListView_DropDown = 2131427674;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b015b\n\t\t\tpublic const int Widget_AppCompat_ListView_Menu = 2131427675;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b015c\n\t\t\tpublic const int Widget_AppCompat_PopupMenu = 2131427676;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b015d\n\t\t\tpublic const int Widget_AppCompat_PopupMenu_Overflow = 2131427677;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b015e\n\t\t\tpublic const int Widget_AppCompat_PopupWindow = 2131427678;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b015f\n\t\t\tpublic const int Widget_AppCompat_ProgressBar = 2131427679;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0160\n\t\t\tpublic const int Widget_AppCompat_ProgressBar_Horizontal = 2131427680;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0161\n\t\t\tpublic const int Widget_AppCompat_RatingBar = 2131427681;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0162\n\t\t\tpublic const int Widget_AppCompat_RatingBar_Indicator = 2131427682;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0163\n\t\t\tpublic const int Widget_AppCompat_RatingBar_Small = 2131427683;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0164\n\t\t\tpublic const int Widget_AppCompat_SearchView = 2131427684;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0165\n\t\t\tpublic const int Widget_AppCompat_SearchView_ActionBar = 2131427685;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0166\n\t\t\tpublic const int Widget_AppCompat_SeekBar = 2131427686;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0167\n\t\t\tpublic const int Widget_AppCompat_SeekBar_Discrete = 2131427687;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0168\n\t\t\tpublic const int Widget_AppCompat_Spinner = 2131427688;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0169\n\t\t\tpublic const int Widget_AppCompat_Spinner_DropDown = 2131427689;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b016a\n\t\t\tpublic const int Widget_AppCompat_Spinner_DropDown_ActionBar = 2131427690;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b016b\n\t\t\tpublic const int Widget_AppCompat_Spinner_Underlined = 2131427691;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b016c\n\t\t\tpublic const int Widget_AppCompat_TextView_SpinnerItem = 2131427692;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b016d\n\t\t\tpublic const int Widget_AppCompat_Toolbar = 2131427693;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b016e\n\t\t\tpublic const int Widget_AppCompat_Toolbar_Button_Navigation = 2131427694;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0196\n\t\t\tpublic const int Widget_Compat_NotificationActionContainer = 2131427734;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0197\n\t\t\tpublic const int Widget_Compat_NotificationActionText = 2131427735;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0188\n\t\t\tpublic const int Widget_Design_AppBarLayout = 2131427720;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0189\n\t\t\tpublic const int Widget_Design_BottomNavigationView = 2131427721;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b018a\n\t\t\tpublic const int Widget_Design_BottomSheet_Modal = 2131427722;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b018b\n\t\t\tpublic const int Widget_Design_CollapsingToolbar = 2131427723;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b018c\n\t\t\tpublic const int Widget_Design_CoordinatorLayout = 2131427724;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b018d\n\t\t\tpublic const int Widget_Design_FloatingActionButton = 2131427725;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b018e\n\t\t\tpublic const int Widget_Design_NavigationView = 2131427726;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b018f\n\t\t\tpublic const int Widget_Design_ScrimInsetsFrameLayout = 2131427727;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0190\n\t\t\tpublic const int Widget_Design_Snackbar = 2131427728;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0174\n\t\t\tpublic const int Widget_Design_TabLayout = 2131427700;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0191\n\t\t\tpublic const int Widget_Design_TextInputLayout = 2131427729;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b0009\n\t\t\tpublic const int Widget_MediaRouter_Light_MediaRouteButton = 2131427337;\n\t\t\t\n\t\t\t// aapt resource value: 0x7f0b000a\n\t\t\tpublic const int Widget_MediaRouter_MediaRouteButton = 2131427338;\n\t\t\t\n\t\t\tstatic Style()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Styleable\n\t\t{\n\t\t\t\n\t\t\tpublic static int[] ActionBar = new int[] {\n\t\t\t\t\t2130772003,\n\t\t\t\t\t2130772005,\n\t\t\t\t\t2130772006,\n\t\t\t\t\t2130772007,\n\t\t\t\t\t2130772008,\n\t\t\t\t\t2130772009,\n\t\t\t\t\t2130772010,\n\t\t\t\t\t2130772011,\n\t\t\t\t\t2130772012,\n\t\t\t\t\t2130772013,\n\t\t\t\t\t2130772014,\n\t\t\t\t\t2130772015,\n\t\t\t\t\t2130772016,\n\t\t\t\t\t2130772017,\n\t\t\t\t\t2130772018,\n\t\t\t\t\t2130772019,\n\t\t\t\t\t2130772020,\n\t\t\t\t\t2130772021,\n\t\t\t\t\t2130772022,\n\t\t\t\t\t2130772023,\n\t\t\t\t\t2130772024,\n\t\t\t\t\t2130772025,\n\t\t\t\t\t2130772026,\n\t\t\t\t\t2130772027,\n\t\t\t\t\t2130772028,\n\t\t\t\t\t2130772029,\n\t\t\t\t\t2130772030,\n\t\t\t\t\t2130772031,\n\t\t\t\t\t2130772101};\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int ActionBar_background = 10;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int ActionBar_backgroundSplit = 12;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int ActionBar_backgroundStacked = 11;\n\t\t\t\n\t\t\t// aapt resource value: 21\n\t\t\tpublic const int ActionBar_contentInsetEnd = 21;\n\t\t\t\n\t\t\t// aapt resource value: 25\n\t\t\tpublic const int ActionBar_contentInsetEndWithActions = 25;\n\t\t\t\n\t\t\t// aapt resource value: 22\n\t\t\tpublic const int ActionBar_contentInsetLeft = 22;\n\t\t\t\n\t\t\t// aapt resource value: 23\n\t\t\tpublic const int ActionBar_contentInsetRight = 23;\n\t\t\t\n\t\t\t// aapt resource value: 20\n\t\t\tpublic const int ActionBar_contentInsetStart = 20;\n\t\t\t\n\t\t\t// aapt resource value: 24\n\t\t\tpublic const int ActionBar_contentInsetStartWithNavigation = 24;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int ActionBar_customNavigationLayout = 13;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int ActionBar_displayOptions = 3;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int ActionBar_divider = 9;\n\t\t\t\n\t\t\t// aapt resource value: 26\n\t\t\tpublic const int ActionBar_elevation = 26;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ActionBar_height = 0;\n\t\t\t\n\t\t\t// aapt resource value: 19\n\t\t\tpublic const int ActionBar_hideOnContentScroll = 19;\n\t\t\t\n\t\t\t// aapt resource value: 28\n\t\t\tpublic const int ActionBar_homeAsUpIndicator = 28;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int ActionBar_homeLayout = 14;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int ActionBar_icon = 7;\n\t\t\t\n\t\t\t// aapt resource value: 16\n\t\t\tpublic const int ActionBar_indeterminateProgressStyle = 16;\n\t\t\t\n\t\t\t// aapt resource value: 18\n\t\t\tpublic const int ActionBar_itemPadding = 18;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int ActionBar_logo = 8;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int ActionBar_navigationMode = 2;\n\t\t\t\n\t\t\t// aapt resource value: 27\n\t\t\tpublic const int ActionBar_popupTheme = 27;\n\t\t\t\n\t\t\t// aapt resource value: 17\n\t\t\tpublic const int ActionBar_progressBarPadding = 17;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int ActionBar_progressBarStyle = 15;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int ActionBar_subtitle = 4;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int ActionBar_subtitleTextStyle = 6;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ActionBar_title = 1;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int ActionBar_titleTextStyle = 5;\n\t\t\t\n\t\t\tpublic static int[] ActionBarLayout = new int[] {\n\t\t\t\t\t16842931};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ActionBarLayout_android_layout_gravity = 0;\n\t\t\t\n\t\t\tpublic static int[] ActionMenuItemView = new int[] {\n\t\t\t\t\t16843071};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ActionMenuItemView_android_minWidth = 0;\n\t\t\t\n\t\t\tpublic static int[] ActionMenuView;\n\t\t\t\n\t\t\tpublic static int[] ActionMode = new int[] {\n\t\t\t\t\t2130772003,\n\t\t\t\t\t2130772009,\n\t\t\t\t\t2130772010,\n\t\t\t\t\t2130772014,\n\t\t\t\t\t2130772016,\n\t\t\t\t\t2130772032};\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int ActionMode_background = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int ActionMode_backgroundSplit = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int ActionMode_closeItemLayout = 5;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ActionMode_height = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int ActionMode_subtitleTextStyle = 2;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ActionMode_titleTextStyle = 1;\n\t\t\t\n\t\t\tpublic static int[] ActivityChooserView = new int[] {\n\t\t\t\t\t2130772033,\n\t\t\t\t\t2130772034};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ActivityChooserView_expandActivityOverflowButtonDrawable = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ActivityChooserView_initialActivityCount = 0;\n\t\t\t\n\t\t\tpublic static int[] AlertDialog = new int[] {\n\t\t\t\t\t16842994,\n\t\t\t\t\t2130772035,\n\t\t\t\t\t2130772036,\n\t\t\t\t\t2130772037,\n\t\t\t\t\t2130772038,\n\t\t\t\t\t2130772039,\n\t\t\t\t\t2130772040};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AlertDialog_android_layout = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AlertDialog_buttonPanelSideLayout = 1;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int AlertDialog_listItemLayout = 5;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AlertDialog_listLayout = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AlertDialog_multiChoiceItemLayout = 3;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int AlertDialog_showTitle = 6;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int AlertDialog_singleChoiceItemLayout = 4;\n\t\t\t\n\t\t\tpublic static int[] AppBarLayout = new int[] {\n\t\t\t\t\t16842964,\n\t\t\t\t\t16843919,\n\t\t\t\t\t16844096,\n\t\t\t\t\t2130772030,\n\t\t\t\t\t2130772248};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppBarLayout_android_background = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AppBarLayout_android_keyboardNavigationCluster = 2;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppBarLayout_android_touchscreenBlocksFocus = 1;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AppBarLayout_elevation = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int AppBarLayout_expanded = 4;\n\t\t\t\n\t\t\tpublic static int[] AppBarLayoutStates = new int[] {\n\t\t\t\t\t2130772249,\n\t\t\t\t\t2130772250};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppBarLayoutStates_state_collapsed = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppBarLayoutStates_state_collapsible = 1;\n\t\t\t\n\t\t\tpublic static int[] AppBarLayout_Layout = new int[] {\n\t\t\t\t\t2130772251,\n\t\t\t\t\t2130772252};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppBarLayout_Layout_layout_scrollFlags = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppBarLayout_Layout_layout_scrollInterpolator = 1;\n\t\t\t\n\t\t\tpublic static int[] AppCompatImageView = new int[] {\n\t\t\t\t\t16843033,\n\t\t\t\t\t2130772041,\n\t\t\t\t\t2130772042,\n\t\t\t\t\t2130772043};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppCompatImageView_android_src = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppCompatImageView_srcCompat = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AppCompatImageView_tint = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AppCompatImageView_tintMode = 3;\n\t\t\t\n\t\t\tpublic static int[] AppCompatSeekBar = new int[] {\n\t\t\t\t\t16843074,\n\t\t\t\t\t2130772044,\n\t\t\t\t\t2130772045,\n\t\t\t\t\t2130772046};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppCompatSeekBar_android_thumb = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppCompatSeekBar_tickMark = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AppCompatSeekBar_tickMarkTint = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AppCompatSeekBar_tickMarkTintMode = 3;\n\t\t\t\n\t\t\tpublic static int[] AppCompatTextHelper = new int[] {\n\t\t\t\t\t16842804,\n\t\t\t\t\t16843117,\n\t\t\t\t\t16843118,\n\t\t\t\t\t16843119,\n\t\t\t\t\t16843120,\n\t\t\t\t\t16843666,\n\t\t\t\t\t16843667};\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AppCompatTextHelper_android_drawableBottom = 2;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int AppCompatTextHelper_android_drawableEnd = 6;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AppCompatTextHelper_android_drawableLeft = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int AppCompatTextHelper_android_drawableRight = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int AppCompatTextHelper_android_drawableStart = 5;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppCompatTextHelper_android_drawableTop = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppCompatTextHelper_android_textAppearance = 0;\n\t\t\t\n\t\t\tpublic static int[] AppCompatTextView = new int[] {\n\t\t\t\t\t16842804,\n\t\t\t\t\t2130772047,\n\t\t\t\t\t2130772048,\n\t\t\t\t\t2130772049,\n\t\t\t\t\t2130772050,\n\t\t\t\t\t2130772051,\n\t\t\t\t\t2130772052,\n\t\t\t\t\t2130772053};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppCompatTextView_android_textAppearance = 0;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int AppCompatTextView_autoSizeMaxTextSize = 6;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int AppCompatTextView_autoSizeMinTextSize = 5;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int AppCompatTextView_autoSizePresetSizes = 4;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AppCompatTextView_autoSizeStepGranularity = 3;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AppCompatTextView_autoSizeTextType = 2;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int AppCompatTextView_fontFamily = 7;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppCompatTextView_textAllCaps = 1;\n\t\t\t\n\t\t\tpublic static int[] AppCompatTheme = new int[] {\n\t\t\t\t\t16842839,\n\t\t\t\t\t16842926,\n\t\t\t\t\t2130772054,\n\t\t\t\t\t2130772055,\n\t\t\t\t\t2130772056,\n\t\t\t\t\t2130772057,\n\t\t\t\t\t2130772058,\n\t\t\t\t\t2130772059,\n\t\t\t\t\t2130772060,\n\t\t\t\t\t2130772061,\n\t\t\t\t\t2130772062,\n\t\t\t\t\t2130772063,\n\t\t\t\t\t2130772064,\n\t\t\t\t\t2130772065,\n\t\t\t\t\t2130772066,\n\t\t\t\t\t2130772067,\n\t\t\t\t\t2130772068,\n\t\t\t\t\t2130772069,\n\t\t\t\t\t2130772070,\n\t\t\t\t\t2130772071,\n\t\t\t\t\t2130772072,\n\t\t\t\t\t2130772073,\n\t\t\t\t\t2130772074,\n\t\t\t\t\t2130772075,\n\t\t\t\t\t2130772076,\n\t\t\t\t\t2130772077,\n\t\t\t\t\t2130772078,\n\t\t\t\t\t2130772079,\n\t\t\t\t\t2130772080,\n\t\t\t\t\t2130772081,\n\t\t\t\t\t2130772082,\n\t\t\t\t\t2130772083,\n\t\t\t\t\t2130772084,\n\t\t\t\t\t2130772085,\n\t\t\t\t\t2130772086,\n\t\t\t\t\t2130772087,\n\t\t\t\t\t2130772088,\n\t\t\t\t\t2130772089,\n\t\t\t\t\t2130772090,\n\t\t\t\t\t2130772091,\n\t\t\t\t\t2130772092,\n\t\t\t\t\t2130772093,\n\t\t\t\t\t2130772094,\n\t\t\t\t\t2130772095,\n\t\t\t\t\t2130772096,\n\t\t\t\t\t2130772097,\n\t\t\t\t\t2130772098,\n\t\t\t\t\t2130772099,\n\t\t\t\t\t2130772100,\n\t\t\t\t\t2130772101,\n\t\t\t\t\t2130772102,\n\t\t\t\t\t2130772103,\n\t\t\t\t\t2130772104,\n\t\t\t\t\t2130772105,\n\t\t\t\t\t2130772106,\n\t\t\t\t\t2130772107,\n\t\t\t\t\t2130772108,\n\t\t\t\t\t2130772109,\n\t\t\t\t\t2130772110,\n\t\t\t\t\t2130772111,\n\t\t\t\t\t2130772112,\n\t\t\t\t\t2130772113,\n\t\t\t\t\t2130772114,\n\t\t\t\t\t2130772115,\n\t\t\t\t\t2130772116,\n\t\t\t\t\t2130772117,\n\t\t\t\t\t2130772118,\n\t\t\t\t\t2130772119,\n\t\t\t\t\t2130772120,\n\t\t\t\t\t2130772121,\n\t\t\t\t\t2130772122,\n\t\t\t\t\t2130772123,\n\t\t\t\t\t2130772124,\n\t\t\t\t\t2130772125,\n\t\t\t\t\t2130772126,\n\t\t\t\t\t2130772127,\n\t\t\t\t\t2130772128,\n\t\t\t\t\t2130772129,\n\t\t\t\t\t2130772130,\n\t\t\t\t\t2130772131,\n\t\t\t\t\t2130772132,\n\t\t\t\t\t2130772133,\n\t\t\t\t\t2130772134,\n\t\t\t\t\t2130772135,\n\t\t\t\t\t2130772136,\n\t\t\t\t\t2130772137,\n\t\t\t\t\t2130772138,\n\t\t\t\t\t2130772139,\n\t\t\t\t\t2130772140,\n\t\t\t\t\t2130772141,\n\t\t\t\t\t2130772142,\n\t\t\t\t\t2130772143,\n\t\t\t\t\t2130772144,\n\t\t\t\t\t2130772145,\n\t\t\t\t\t2130772146,\n\t\t\t\t\t2130772147,\n\t\t\t\t\t2130772148,\n\t\t\t\t\t2130772149,\n\t\t\t\t\t2130772150,\n\t\t\t\t\t2130772151,\n\t\t\t\t\t2130772152,\n\t\t\t\t\t2130772153,\n\t\t\t\t\t2130772154,\n\t\t\t\t\t2130772155,\n\t\t\t\t\t2130772156,\n\t\t\t\t\t2130772157,\n\t\t\t\t\t2130772158,\n\t\t\t\t\t2130772159,\n\t\t\t\t\t2130772160,\n\t\t\t\t\t2130772161,\n\t\t\t\t\t2130772162,\n\t\t\t\t\t2130772163,\n\t\t\t\t\t2130772164,\n\t\t\t\t\t2130772165,\n\t\t\t\t\t2130772166,\n\t\t\t\t\t2130772167,\n\t\t\t\t\t2130772168,\n\t\t\t\t\t2130772169,\n\t\t\t\t\t2130772170};\n\t\t\t\n\t\t\t// aapt resource value: 23\n\t\t\tpublic const int AppCompatTheme_actionBarDivider = 23;\n\t\t\t\n\t\t\t// aapt resource value: 24\n\t\t\tpublic const int AppCompatTheme_actionBarItemBackground = 24;\n\t\t\t\n\t\t\t// aapt resource value: 17\n\t\t\tpublic const int AppCompatTheme_actionBarPopupTheme = 17;\n\t\t\t\n\t\t\t// aapt resource value: 22\n\t\t\tpublic const int AppCompatTheme_actionBarSize = 22;\n\t\t\t\n\t\t\t// aapt resource value: 19\n\t\t\tpublic const int AppCompatTheme_actionBarSplitStyle = 19;\n\t\t\t\n\t\t\t// aapt resource value: 18\n\t\t\tpublic const int AppCompatTheme_actionBarStyle = 18;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int AppCompatTheme_actionBarTabBarStyle = 13;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int AppCompatTheme_actionBarTabStyle = 12;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int AppCompatTheme_actionBarTabTextStyle = 14;\n\t\t\t\n\t\t\t// aapt resource value: 20\n\t\t\tpublic const int AppCompatTheme_actionBarTheme = 20;\n\t\t\t\n\t\t\t// aapt resource value: 21\n\t\t\tpublic const int AppCompatTheme_actionBarWidgetTheme = 21;\n\t\t\t\n\t\t\t// aapt resource value: 50\n\t\t\tpublic const int AppCompatTheme_actionButtonStyle = 50;\n\t\t\t\n\t\t\t// aapt resource value: 46\n\t\t\tpublic const int AppCompatTheme_actionDropDownStyle = 46;\n\t\t\t\n\t\t\t// aapt resource value: 25\n\t\t\tpublic const int AppCompatTheme_actionMenuTextAppearance = 25;\n\t\t\t\n\t\t\t// aapt resource value: 26\n\t\t\tpublic const int AppCompatTheme_actionMenuTextColor = 26;\n\t\t\t\n\t\t\t// aapt resource value: 29\n\t\t\tpublic const int AppCompatTheme_actionModeBackground = 29;\n\t\t\t\n\t\t\t// aapt resource value: 28\n\t\t\tpublic const int AppCompatTheme_actionModeCloseButtonStyle = 28;\n\t\t\t\n\t\t\t// aapt resource value: 31\n\t\t\tpublic const int AppCompatTheme_actionModeCloseDrawable = 31;\n\t\t\t\n\t\t\t// aapt resource value: 33\n\t\t\tpublic const int AppCompatTheme_actionModeCopyDrawable = 33;\n\t\t\t\n\t\t\t// aapt resource value: 32\n\t\t\tpublic const int AppCompatTheme_actionModeCutDrawable = 32;\n\t\t\t\n\t\t\t// aapt resource value: 37\n\t\t\tpublic const int AppCompatTheme_actionModeFindDrawable = 37;\n\t\t\t\n\t\t\t// aapt resource value: 34\n\t\t\tpublic const int AppCompatTheme_actionModePasteDrawable = 34;\n\t\t\t\n\t\t\t// aapt resource value: 39\n\t\t\tpublic const int AppCompatTheme_actionModePopupWindowStyle = 39;\n\t\t\t\n\t\t\t// aapt resource value: 35\n\t\t\tpublic const int AppCompatTheme_actionModeSelectAllDrawable = 35;\n\t\t\t\n\t\t\t// aapt resource value: 36\n\t\t\tpublic const int AppCompatTheme_actionModeShareDrawable = 36;\n\t\t\t\n\t\t\t// aapt resource value: 30\n\t\t\tpublic const int AppCompatTheme_actionModeSplitBackground = 30;\n\t\t\t\n\t\t\t// aapt resource value: 27\n\t\t\tpublic const int AppCompatTheme_actionModeStyle = 27;\n\t\t\t\n\t\t\t// aapt resource value: 38\n\t\t\tpublic const int AppCompatTheme_actionModeWebSearchDrawable = 38;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int AppCompatTheme_actionOverflowButtonStyle = 15;\n\t\t\t\n\t\t\t// aapt resource value: 16\n\t\t\tpublic const int AppCompatTheme_actionOverflowMenuStyle = 16;\n\t\t\t\n\t\t\t// aapt resource value: 58\n\t\t\tpublic const int AppCompatTheme_activityChooserViewStyle = 58;\n\t\t\t\n\t\t\t// aapt resource value: 95\n\t\t\tpublic const int AppCompatTheme_alertDialogButtonGroupStyle = 95;\n\t\t\t\n\t\t\t// aapt resource value: 96\n\t\t\tpublic const int AppCompatTheme_alertDialogCenterButtons = 96;\n\t\t\t\n\t\t\t// aapt resource value: 94\n\t\t\tpublic const int AppCompatTheme_alertDialogStyle = 94;\n\t\t\t\n\t\t\t// aapt resource value: 97\n\t\t\tpublic const int AppCompatTheme_alertDialogTheme = 97;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int AppCompatTheme_android_windowAnimationStyle = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int AppCompatTheme_android_windowIsFloating = 0;\n\t\t\t\n\t\t\t// aapt resource value: 102\n\t\t\tpublic const int AppCompatTheme_autoCompleteTextViewStyle = 102;\n\t\t\t\n\t\t\t// aapt resource value: 55\n\t\t\tpublic const int AppCompatTheme_borderlessButtonStyle = 55;\n\t\t\t\n\t\t\t// aapt resource value: 52\n\t\t\tpublic const int AppCompatTheme_buttonBarButtonStyle = 52;\n\t\t\t\n\t\t\t// aapt resource value: 100\n\t\t\tpublic const int AppCompatTheme_buttonBarNegativeButtonStyle = 100;\n\t\t\t\n\t\t\t// aapt resource value: 101\n\t\t\tpublic const int AppCompatTheme_buttonBarNeutralButtonStyle = 101;\n\t\t\t\n\t\t\t// aapt resource value: 99\n\t\t\tpublic const int AppCompatTheme_buttonBarPositiveButtonStyle = 99;\n\t\t\t\n\t\t\t// aapt resource value: 51\n\t\t\tpublic const int AppCompatTheme_buttonBarStyle = 51;\n\t\t\t\n\t\t\t// aapt resource value: 103\n\t\t\tpublic const int AppCompatTheme_buttonStyle = 103;\n\t\t\t\n\t\t\t// aapt resource value: 104\n\t\t\tpublic const int AppCompatTheme_buttonStyleSmall = 104;\n\t\t\t\n\t\t\t// aapt resource value: 105\n\t\t\tpublic const int AppCompatTheme_checkboxStyle = 105;\n\t\t\t\n\t\t\t// aapt resource value: 106\n\t\t\tpublic const int AppCompatTheme_checkedTextViewStyle = 106;\n\t\t\t\n\t\t\t// aapt resource value: 86\n\t\t\tpublic const int AppCompatTheme_colorAccent = 86;\n\t\t\t\n\t\t\t// aapt resource value: 93\n\t\t\tpublic const int AppCompatTheme_colorBackgroundFloating = 93;\n\t\t\t\n\t\t\t// aapt resource value: 90\n\t\t\tpublic const int AppCompatTheme_colorButtonNormal = 90;\n\t\t\t\n\t\t\t// aapt resource value: 88\n\t\t\tpublic const int AppCompatTheme_colorControlActivated = 88;\n\t\t\t\n\t\t\t// aapt resource value: 89\n\t\t\tpublic const int AppCompatTheme_colorControlHighlight = 89;\n\t\t\t\n\t\t\t// aapt resource value: 87\n\t\t\tpublic const int AppCompatTheme_colorControlNormal = 87;\n\t\t\t\n\t\t\t// aapt resource value: 118\n\t\t\tpublic const int AppCompatTheme_colorError = 118;\n\t\t\t\n\t\t\t// aapt resource value: 84\n\t\t\tpublic const int AppCompatTheme_colorPrimary = 84;\n\t\t\t\n\t\t\t// aapt resource value: 85\n\t\t\tpublic const int AppCompatTheme_colorPrimaryDark = 85;\n\t\t\t\n\t\t\t// aapt resource value: 91\n\t\t\tpublic const int AppCompatTheme_colorSwitchThumbNormal = 91;\n\t\t\t\n\t\t\t// aapt resource value: 92\n\t\t\tpublic const int AppCompatTheme_controlBackground = 92;\n\t\t\t\n\t\t\t// aapt resource value: 44\n\t\t\tpublic const int AppCompatTheme_dialogPreferredPadding = 44;\n\t\t\t\n\t\t\t// aapt resource value: 43\n\t\t\tpublic const int AppCompatTheme_dialogTheme = 43;\n\t\t\t\n\t\t\t// aapt resource value: 57\n\t\t\tpublic const int AppCompatTheme_dividerHorizontal = 57;\n\t\t\t\n\t\t\t// aapt resource value: 56\n\t\t\tpublic const int AppCompatTheme_dividerVertical = 56;\n\t\t\t\n\t\t\t// aapt resource value: 75\n\t\t\tpublic const int AppCompatTheme_dropDownListViewStyle = 75;\n\t\t\t\n\t\t\t// aapt resource value: 47\n\t\t\tpublic const int AppCompatTheme_dropdownListPreferredItemHeight = 47;\n\t\t\t\n\t\t\t// aapt resource value: 64\n\t\t\tpublic const int AppCompatTheme_editTextBackground = 64;\n\t\t\t\n\t\t\t// aapt resource value: 63\n\t\t\tpublic const int AppCompatTheme_editTextColor = 63;\n\t\t\t\n\t\t\t// aapt resource value: 107\n\t\t\tpublic const int AppCompatTheme_editTextStyle = 107;\n\t\t\t\n\t\t\t// aapt resource value: 49\n\t\t\tpublic const int AppCompatTheme_homeAsUpIndicator = 49;\n\t\t\t\n\t\t\t// aapt resource value: 65\n\t\t\tpublic const int AppCompatTheme_imageButtonStyle = 65;\n\t\t\t\n\t\t\t// aapt resource value: 83\n\t\t\tpublic const int AppCompatTheme_listChoiceBackgroundIndicator = 83;\n\t\t\t\n\t\t\t// aapt resource value: 45\n\t\t\tpublic const int AppCompatTheme_listDividerAlertDialog = 45;\n\t\t\t\n\t\t\t// aapt resource value: 115\n\t\t\tpublic const int AppCompatTheme_listMenuViewStyle = 115;\n\t\t\t\n\t\t\t// aapt resource value: 76\n\t\t\tpublic const int AppCompatTheme_listPopupWindowStyle = 76;\n\t\t\t\n\t\t\t// aapt resource value: 70\n\t\t\tpublic const int AppCompatTheme_listPreferredItemHeight = 70;\n\t\t\t\n\t\t\t// aapt resource value: 72\n\t\t\tpublic const int AppCompatTheme_listPreferredItemHeightLarge = 72;\n\t\t\t\n\t\t\t// aapt resource value: 71\n\t\t\tpublic const int AppCompatTheme_listPreferredItemHeightSmall = 71;\n\t\t\t\n\t\t\t// aapt resource value: 73\n\t\t\tpublic const int AppCompatTheme_listPreferredItemPaddingLeft = 73;\n\t\t\t\n\t\t\t// aapt resource value: 74\n\t\t\tpublic const int AppCompatTheme_listPreferredItemPaddingRight = 74;\n\t\t\t\n\t\t\t// aapt resource value: 80\n\t\t\tpublic const int AppCompatTheme_panelBackground = 80;\n\t\t\t\n\t\t\t// aapt resource value: 82\n\t\t\tpublic const int AppCompatTheme_panelMenuListTheme = 82;\n\t\t\t\n\t\t\t// aapt resource value: 81\n\t\t\tpublic const int AppCompatTheme_panelMenuListWidth = 81;\n\t\t\t\n\t\t\t// aapt resource value: 61\n\t\t\tpublic const int AppCompatTheme_popupMenuStyle = 61;\n\t\t\t\n\t\t\t// aapt resource value: 62\n\t\t\tpublic const int AppCompatTheme_popupWindowStyle = 62;\n\t\t\t\n\t\t\t// aapt resource value: 108\n\t\t\tpublic const int AppCompatTheme_radioButtonStyle = 108;\n\t\t\t\n\t\t\t// aapt resource value: 109\n\t\t\tpublic const int AppCompatTheme_ratingBarStyle = 109;\n\t\t\t\n\t\t\t// aapt resource value: 110\n\t\t\tpublic const int AppCompatTheme_ratingBarStyleIndicator = 110;\n\t\t\t\n\t\t\t// aapt resource value: 111\n\t\t\tpublic const int AppCompatTheme_ratingBarStyleSmall = 111;\n\t\t\t\n\t\t\t// aapt resource value: 69\n\t\t\tpublic const int AppCompatTheme_searchViewStyle = 69;\n\t\t\t\n\t\t\t// aapt resource value: 112\n\t\t\tpublic const int AppCompatTheme_seekBarStyle = 112;\n\t\t\t\n\t\t\t// aapt resource value: 53\n\t\t\tpublic const int AppCompatTheme_selectableItemBackground = 53;\n\t\t\t\n\t\t\t// aapt resource value: 54\n\t\t\tpublic const int AppCompatTheme_selectableItemBackgroundBorderless = 54;\n\t\t\t\n\t\t\t// aapt resource value: 48\n\t\t\tpublic const int AppCompatTheme_spinnerDropDownItemStyle = 48;\n\t\t\t\n\t\t\t// aapt resource value: 113\n\t\t\tpublic const int AppCompatTheme_spinnerStyle = 113;\n\t\t\t\n\t\t\t// aapt resource value: 114\n\t\t\tpublic const int AppCompatTheme_switchStyle = 114;\n\t\t\t\n\t\t\t// aapt resource value: 40\n\t\t\tpublic const int AppCompatTheme_textAppearanceLargePopupMenu = 40;\n\t\t\t\n\t\t\t// aapt resource value: 77\n\t\t\tpublic const int AppCompatTheme_textAppearanceListItem = 77;\n\t\t\t\n\t\t\t// aapt resource value: 78\n\t\t\tpublic const int AppCompatTheme_textAppearanceListItemSecondary = 78;\n\t\t\t\n\t\t\t// aapt resource value: 79\n\t\t\tpublic const int AppCompatTheme_textAppearanceListItemSmall = 79;\n\t\t\t\n\t\t\t// aapt resource value: 42\n\t\t\tpublic const int AppCompatTheme_textAppearancePopupMenuHeader = 42;\n\t\t\t\n\t\t\t// aapt resource value: 67\n\t\t\tpublic const int AppCompatTheme_textAppearanceSearchResultSubtitle = 67;\n\t\t\t\n\t\t\t// aapt resource value: 66\n\t\t\tpublic const int AppCompatTheme_textAppearanceSearchResultTitle = 66;\n\t\t\t\n\t\t\t// aapt resource value: 41\n\t\t\tpublic const int AppCompatTheme_textAppearanceSmallPopupMenu = 41;\n\t\t\t\n\t\t\t// aapt resource value: 98\n\t\t\tpublic const int AppCompatTheme_textColorAlertDialogListItem = 98;\n\t\t\t\n\t\t\t// aapt resource value: 68\n\t\t\tpublic const int AppCompatTheme_textColorSearchUrl = 68;\n\t\t\t\n\t\t\t// aapt resource value: 60\n\t\t\tpublic const int AppCompatTheme_toolbarNavigationButtonStyle = 60;\n\t\t\t\n\t\t\t// aapt resource value: 59\n\t\t\tpublic const int AppCompatTheme_toolbarStyle = 59;\n\t\t\t\n\t\t\t// aapt resource value: 117\n\t\t\tpublic const int AppCompatTheme_tooltipForegroundColor = 117;\n\t\t\t\n\t\t\t// aapt resource value: 116\n\t\t\tpublic const int AppCompatTheme_tooltipFrameBackground = 116;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int AppCompatTheme_windowActionBar = 2;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int AppCompatTheme_windowActionBarOverlay = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int AppCompatTheme_windowActionModeOverlay = 5;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int AppCompatTheme_windowFixedHeightMajor = 9;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int AppCompatTheme_windowFixedHeightMinor = 7;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int AppCompatTheme_windowFixedWidthMajor = 6;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int AppCompatTheme_windowFixedWidthMinor = 8;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int AppCompatTheme_windowMinWidthMajor = 10;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int AppCompatTheme_windowMinWidthMinor = 11;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int AppCompatTheme_windowNoTitle = 3;\n\t\t\t\n\t\t\tpublic static int[] BottomNavigationView = new int[] {\n\t\t\t\t\t2130772030,\n\t\t\t\t\t2130772291,\n\t\t\t\t\t2130772292,\n\t\t\t\t\t2130772293,\n\t\t\t\t\t2130772294};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int BottomNavigationView_elevation = 0;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int BottomNavigationView_itemBackground = 4;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int BottomNavigationView_itemIconTint = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int BottomNavigationView_itemTextColor = 3;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int BottomNavigationView_menu = 1;\n\t\t\t\n\t\t\tpublic static int[] BottomSheetBehavior_Layout = new int[] {\n\t\t\t\t\t2130772253,\n\t\t\t\t\t2130772254,\n\t\t\t\t\t2130772255};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int BottomSheetBehavior_Layout_behavior_hideable = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int BottomSheetBehavior_Layout_behavior_peekHeight = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int BottomSheetBehavior_Layout_behavior_skipCollapsed = 2;\n\t\t\t\n\t\t\tpublic static int[] ButtonBarLayout = new int[] {\n\t\t\t\t\t2130772171};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ButtonBarLayout_allowStacking = 0;\n\t\t\t\n\t\t\tpublic static int[] CardView = new int[] {\n\t\t\t\t\t16843071,\n\t\t\t\t\t16843072,\n\t\t\t\t\t2130771991,\n\t\t\t\t\t2130771992,\n\t\t\t\t\t2130771993,\n\t\t\t\t\t2130771994,\n\t\t\t\t\t2130771995,\n\t\t\t\t\t2130771996,\n\t\t\t\t\t2130771997,\n\t\t\t\t\t2130771998,\n\t\t\t\t\t2130771999,\n\t\t\t\t\t2130772000,\n\t\t\t\t\t2130772001};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int CardView_android_minHeight = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int CardView_android_minWidth = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int CardView_cardBackgroundColor = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int CardView_cardCornerRadius = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int CardView_cardElevation = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int CardView_cardMaxElevation = 5;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int CardView_cardPreventCornerOverlap = 7;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int CardView_cardUseCompatPadding = 6;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int CardView_contentPadding = 8;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int CardView_contentPaddingBottom = 12;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int CardView_contentPaddingLeft = 9;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int CardView_contentPaddingRight = 10;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int CardView_contentPaddingTop = 11;\n\t\t\t\n\t\t\tpublic static int[] CollapsingToolbarLayout = new int[] {\n\t\t\t\t\t2130772005,\n\t\t\t\t\t2130772256,\n\t\t\t\t\t2130772257,\n\t\t\t\t\t2130772258,\n\t\t\t\t\t2130772259,\n\t\t\t\t\t2130772260,\n\t\t\t\t\t2130772261,\n\t\t\t\t\t2130772262,\n\t\t\t\t\t2130772263,\n\t\t\t\t\t2130772264,\n\t\t\t\t\t2130772265,\n\t\t\t\t\t2130772266,\n\t\t\t\t\t2130772267,\n\t\t\t\t\t2130772268,\n\t\t\t\t\t2130772269,\n\t\t\t\t\t2130772270};\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int CollapsingToolbarLayout_collapsedTitleGravity = 13;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int CollapsingToolbarLayout_collapsedTitleTextAppearance = 7;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int CollapsingToolbarLayout_contentScrim = 8;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleGravity = 14;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleMargin = 1;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleMarginBottom = 5;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleMarginEnd = 4;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleMarginStart = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleMarginTop = 3;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int CollapsingToolbarLayout_expandedTitleTextAppearance = 6;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int CollapsingToolbarLayout_scrimAnimationDuration = 12;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 11;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int CollapsingToolbarLayout_statusBarScrim = 9;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int CollapsingToolbarLayout_title = 0;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int CollapsingToolbarLayout_titleEnabled = 15;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int CollapsingToolbarLayout_toolbarId = 10;\n\t\t\t\n\t\t\tpublic static int[] CollapsingToolbarLayout_Layout = new int[] {\n\t\t\t\t\t2130772271,\n\t\t\t\t\t2130772272};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int CollapsingToolbarLayout_Layout_layout_collapseMode = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 1;\n\t\t\t\n\t\t\tpublic static int[] ColorStateListItem = new int[] {\n\t\t\t\t\t16843173,\n\t\t\t\t\t16843551,\n\t\t\t\t\t2130772172};\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int ColorStateListItem_alpha = 2;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ColorStateListItem_android_alpha = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ColorStateListItem_android_color = 0;\n\t\t\t\n\t\t\tpublic static int[] CompoundButton = new int[] {\n\t\t\t\t\t16843015,\n\t\t\t\t\t2130772173,\n\t\t\t\t\t2130772174};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int CompoundButton_android_button = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int CompoundButton_buttonTint = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int CompoundButton_buttonTintMode = 2;\n\t\t\t\n\t\t\tpublic static int[] CoordinatorLayout = new int[] {\n\t\t\t\t\t2130772273,\n\t\t\t\t\t2130772274};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int CoordinatorLayout_keylines = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int CoordinatorLayout_statusBarBackground = 1;\n\t\t\t\n\t\t\tpublic static int[] CoordinatorLayout_Layout = new int[] {\n\t\t\t\t\t16842931,\n\t\t\t\t\t2130772275,\n\t\t\t\t\t2130772276,\n\t\t\t\t\t2130772277,\n\t\t\t\t\t2130772278,\n\t\t\t\t\t2130772279,\n\t\t\t\t\t2130772280};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int CoordinatorLayout_Layout_android_layout_gravity = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int CoordinatorLayout_Layout_layout_anchor = 2;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int CoordinatorLayout_Layout_layout_anchorGravity = 4;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int CoordinatorLayout_Layout_layout_behavior = 1;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 6;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int CoordinatorLayout_Layout_layout_insetEdge = 5;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int CoordinatorLayout_Layout_layout_keyline = 3;\n\t\t\t\n\t\t\tpublic static int[] DesignTheme = new int[] {\n\t\t\t\t\t2130772281,\n\t\t\t\t\t2130772282,\n\t\t\t\t\t2130772283};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int DesignTheme_bottomSheetDialogTheme = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int DesignTheme_bottomSheetStyle = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int DesignTheme_textColorError = 2;\n\t\t\t\n\t\t\tpublic static int[] DrawerArrowToggle = new int[] {\n\t\t\t\t\t2130772175,\n\t\t\t\t\t2130772176,\n\t\t\t\t\t2130772177,\n\t\t\t\t\t2130772178,\n\t\t\t\t\t2130772179,\n\t\t\t\t\t2130772180,\n\t\t\t\t\t2130772181,\n\t\t\t\t\t2130772182};\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int DrawerArrowToggle_arrowHeadLength = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int DrawerArrowToggle_arrowShaftLength = 5;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int DrawerArrowToggle_barLength = 6;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int DrawerArrowToggle_color = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int DrawerArrowToggle_drawableSize = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int DrawerArrowToggle_gapBetweenBars = 3;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int DrawerArrowToggle_spinBars = 1;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int DrawerArrowToggle_thickness = 7;\n\t\t\t\n\t\t\tpublic static int[] FloatingActionButton = new int[] {\n\t\t\t\t\t2130772030,\n\t\t\t\t\t2130772246,\n\t\t\t\t\t2130772247,\n\t\t\t\t\t2130772284,\n\t\t\t\t\t2130772285,\n\t\t\t\t\t2130772286,\n\t\t\t\t\t2130772287,\n\t\t\t\t\t2130772288};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int FloatingActionButton_backgroundTint = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int FloatingActionButton_backgroundTintMode = 2;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int FloatingActionButton_borderWidth = 6;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int FloatingActionButton_elevation = 0;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int FloatingActionButton_fabSize = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int FloatingActionButton_pressedTranslationZ = 5;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int FloatingActionButton_rippleColor = 3;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int FloatingActionButton_useCompatPadding = 7;\n\t\t\t\n\t\t\tpublic static int[] FloatingActionButton_Behavior_Layout = new int[] {\n\t\t\t\t\t2130772289};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0;\n\t\t\t\n\t\t\tpublic static int[] FontFamily = new int[] {\n\t\t\t\t\t2130772330,\n\t\t\t\t\t2130772331,\n\t\t\t\t\t2130772332,\n\t\t\t\t\t2130772333,\n\t\t\t\t\t2130772334,\n\t\t\t\t\t2130772335};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int FontFamily_fontProviderAuthority = 0;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int FontFamily_fontProviderCerts = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int FontFamily_fontProviderFetchStrategy = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int FontFamily_fontProviderFetchTimeout = 5;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int FontFamily_fontProviderPackage = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int FontFamily_fontProviderQuery = 2;\n\t\t\t\n\t\t\tpublic static int[] FontFamilyFont = new int[] {\n\t\t\t\t\t2130772336,\n\t\t\t\t\t2130772337,\n\t\t\t\t\t2130772338};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int FontFamilyFont_font = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int FontFamilyFont_fontStyle = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int FontFamilyFont_fontWeight = 2;\n\t\t\t\n\t\t\tpublic static int[] ForegroundLinearLayout = new int[] {\n\t\t\t\t\t16843017,\n\t\t\t\t\t16843264,\n\t\t\t\t\t2130772290};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ForegroundLinearLayout_android_foreground = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ForegroundLinearLayout_android_foregroundGravity = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int ForegroundLinearLayout_foregroundInsidePadding = 2;\n\t\t\t\n\t\t\tpublic static int[] LinearLayoutCompat = new int[] {\n\t\t\t\t\t16842927,\n\t\t\t\t\t16842948,\n\t\t\t\t\t16843046,\n\t\t\t\t\t16843047,\n\t\t\t\t\t16843048,\n\t\t\t\t\t2130772013,\n\t\t\t\t\t2130772183,\n\t\t\t\t\t2130772184,\n\t\t\t\t\t2130772185};\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int LinearLayoutCompat_android_baselineAligned = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int LinearLayoutCompat_android_baselineAlignedChildIndex = 3;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int LinearLayoutCompat_android_gravity = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int LinearLayoutCompat_android_orientation = 1;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int LinearLayoutCompat_android_weightSum = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int LinearLayoutCompat_divider = 5;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int LinearLayoutCompat_dividerPadding = 8;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int LinearLayoutCompat_measureWithLargestChild = 6;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int LinearLayoutCompat_showDividers = 7;\n\t\t\t\n\t\t\tpublic static int[] LinearLayoutCompat_Layout = new int[] {\n\t\t\t\t\t16842931,\n\t\t\t\t\t16842996,\n\t\t\t\t\t16842997,\n\t\t\t\t\t16843137};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int LinearLayoutCompat_Layout_android_layout_gravity = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int LinearLayoutCompat_Layout_android_layout_height = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int LinearLayoutCompat_Layout_android_layout_weight = 3;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int LinearLayoutCompat_Layout_android_layout_width = 1;\n\t\t\t\n\t\t\tpublic static int[] ListPopupWindow = new int[] {\n\t\t\t\t\t16843436,\n\t\t\t\t\t16843437};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ListPopupWindow_android_dropDownHorizontalOffset = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ListPopupWindow_android_dropDownVerticalOffset = 1;\n\t\t\t\n\t\t\tpublic static int[] MediaRouteButton = new int[] {\n\t\t\t\t\t16843071,\n\t\t\t\t\t16843072,\n\t\t\t\t\t2130771989,\n\t\t\t\t\t2130771990};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int MediaRouteButton_android_minHeight = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int MediaRouteButton_android_minWidth = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int MediaRouteButton_externalRouteEnabledDrawable = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int MediaRouteButton_mediaRouteButtonTint = 3;\n\t\t\t\n\t\t\tpublic static int[] MenuGroup = new int[] {\n\t\t\t\t\t16842766,\n\t\t\t\t\t16842960,\n\t\t\t\t\t16843156,\n\t\t\t\t\t16843230,\n\t\t\t\t\t16843231,\n\t\t\t\t\t16843232};\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int MenuGroup_android_checkableBehavior = 5;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int MenuGroup_android_enabled = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int MenuGroup_android_id = 1;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int MenuGroup_android_menuCategory = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int MenuGroup_android_orderInCategory = 4;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int MenuGroup_android_visible = 2;\n\t\t\t\n\t\t\tpublic static int[] MenuItem = new int[] {\n\t\t\t\t\t16842754,\n\t\t\t\t\t16842766,\n\t\t\t\t\t16842960,\n\t\t\t\t\t16843014,\n\t\t\t\t\t16843156,\n\t\t\t\t\t16843230,\n\t\t\t\t\t16843231,\n\t\t\t\t\t16843233,\n\t\t\t\t\t16843234,\n\t\t\t\t\t16843235,\n\t\t\t\t\t16843236,\n\t\t\t\t\t16843237,\n\t\t\t\t\t16843375,\n\t\t\t\t\t2130772186,\n\t\t\t\t\t2130772187,\n\t\t\t\t\t2130772188,\n\t\t\t\t\t2130772189,\n\t\t\t\t\t2130772190,\n\t\t\t\t\t2130772191,\n\t\t\t\t\t2130772192,\n\t\t\t\t\t2130772193,\n\t\t\t\t\t2130772194,\n\t\t\t\t\t2130772195};\n\t\t\t\n\t\t\t// aapt resource value: 16\n\t\t\tpublic const int MenuItem_actionLayout = 16;\n\t\t\t\n\t\t\t// aapt resource value: 18\n\t\t\tpublic const int MenuItem_actionProviderClass = 18;\n\t\t\t\n\t\t\t// aapt resource value: 17\n\t\t\tpublic const int MenuItem_actionViewClass = 17;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int MenuItem_alphabeticModifiers = 13;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int MenuItem_android_alphabeticShortcut = 9;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int MenuItem_android_checkable = 11;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int MenuItem_android_checked = 3;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int MenuItem_android_enabled = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int MenuItem_android_icon = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int MenuItem_android_id = 2;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int MenuItem_android_menuCategory = 5;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int MenuItem_android_numericShortcut = 10;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int MenuItem_android_onClick = 12;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int MenuItem_android_orderInCategory = 6;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int MenuItem_android_title = 7;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int MenuItem_android_titleCondensed = 8;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int MenuItem_android_visible = 4;\n\t\t\t\n\t\t\t// aapt resource value: 19\n\t\t\tpublic const int MenuItem_contentDescription = 19;\n\t\t\t\n\t\t\t// aapt resource value: 21\n\t\t\tpublic const int MenuItem_iconTint = 21;\n\t\t\t\n\t\t\t// aapt resource value: 22\n\t\t\tpublic const int MenuItem_iconTintMode = 22;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int MenuItem_numericModifiers = 14;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int MenuItem_showAsAction = 15;\n\t\t\t\n\t\t\t// aapt resource value: 20\n\t\t\tpublic const int MenuItem_tooltipText = 20;\n\t\t\t\n\t\t\tpublic static int[] MenuView = new int[] {\n\t\t\t\t\t16842926,\n\t\t\t\t\t16843052,\n\t\t\t\t\t16843053,\n\t\t\t\t\t16843054,\n\t\t\t\t\t16843055,\n\t\t\t\t\t16843056,\n\t\t\t\t\t16843057,\n\t\t\t\t\t2130772196,\n\t\t\t\t\t2130772197};\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int MenuView_android_headerBackground = 4;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int MenuView_android_horizontalDivider = 2;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int MenuView_android_itemBackground = 5;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int MenuView_android_itemIconDisabledAlpha = 6;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int MenuView_android_itemTextAppearance = 1;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int MenuView_android_verticalDivider = 3;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int MenuView_android_windowAnimationStyle = 0;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int MenuView_preserveIconSpacing = 7;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int MenuView_subMenuArrow = 8;\n\t\t\t\n\t\t\tpublic static int[] NavigationView = new int[] {\n\t\t\t\t\t16842964,\n\t\t\t\t\t16842973,\n\t\t\t\t\t16843039,\n\t\t\t\t\t2130772030,\n\t\t\t\t\t2130772291,\n\t\t\t\t\t2130772292,\n\t\t\t\t\t2130772293,\n\t\t\t\t\t2130772294,\n\t\t\t\t\t2130772295,\n\t\t\t\t\t2130772296};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int NavigationView_android_background = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int NavigationView_android_fitsSystemWindows = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int NavigationView_android_maxWidth = 2;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int NavigationView_elevation = 3;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int NavigationView_headerLayout = 9;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int NavigationView_itemBackground = 7;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int NavigationView_itemIconTint = 5;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int NavigationView_itemTextAppearance = 8;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int NavigationView_itemTextColor = 6;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int NavigationView_menu = 4;\n\t\t\t\n\t\t\tpublic static int[] PopupWindow = new int[] {\n\t\t\t\t\t16843126,\n\t\t\t\t\t16843465,\n\t\t\t\t\t2130772198};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int PopupWindow_android_popupAnimationStyle = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int PopupWindow_android_popupBackground = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int PopupWindow_overlapAnchor = 2;\n\t\t\t\n\t\t\tpublic static int[] PopupWindowBackgroundState = new int[] {\n\t\t\t\t\t2130772199};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int PopupWindowBackgroundState_state_above_anchor = 0;\n\t\t\t\n\t\t\tpublic static int[] RecycleListView = new int[] {\n\t\t\t\t\t2130772200,\n\t\t\t\t\t2130772201};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int RecycleListView_paddingBottomNoButtons = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int RecycleListView_paddingTopNoTitle = 1;\n\t\t\t\n\t\t\tpublic static int[] RecyclerView = new int[] {\n\t\t\t\t\t16842948,\n\t\t\t\t\t16842993,\n\t\t\t\t\t2130771968,\n\t\t\t\t\t2130771969,\n\t\t\t\t\t2130771970,\n\t\t\t\t\t2130771971,\n\t\t\t\t\t2130771972,\n\t\t\t\t\t2130771973,\n\t\t\t\t\t2130771974,\n\t\t\t\t\t2130771975,\n\t\t\t\t\t2130771976};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int RecyclerView_android_descendantFocusability = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int RecyclerView_android_orientation = 0;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int RecyclerView_fastScrollEnabled = 6;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int RecyclerView_fastScrollHorizontalThumbDrawable = 9;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int RecyclerView_fastScrollHorizontalTrackDrawable = 10;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int RecyclerView_fastScrollVerticalThumbDrawable = 7;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int RecyclerView_fastScrollVerticalTrackDrawable = 8;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int RecyclerView_layoutManager = 2;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int RecyclerView_reverseLayout = 4;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int RecyclerView_spanCount = 3;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int RecyclerView_stackFromEnd = 5;\n\t\t\t\n\t\t\tpublic static int[] ScrimInsetsFrameLayout = new int[] {\n\t\t\t\t\t2130772297};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ScrimInsetsFrameLayout_insetForeground = 0;\n\t\t\t\n\t\t\tpublic static int[] ScrollingViewBehavior_Layout = new int[] {\n\t\t\t\t\t2130772298};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ScrollingViewBehavior_Layout_behavior_overlapTop = 0;\n\t\t\t\n\t\t\tpublic static int[] SearchView = new int[] {\n\t\t\t\t\t16842970,\n\t\t\t\t\t16843039,\n\t\t\t\t\t16843296,\n\t\t\t\t\t16843364,\n\t\t\t\t\t2130772202,\n\t\t\t\t\t2130772203,\n\t\t\t\t\t2130772204,\n\t\t\t\t\t2130772205,\n\t\t\t\t\t2130772206,\n\t\t\t\t\t2130772207,\n\t\t\t\t\t2130772208,\n\t\t\t\t\t2130772209,\n\t\t\t\t\t2130772210,\n\t\t\t\t\t2130772211,\n\t\t\t\t\t2130772212,\n\t\t\t\t\t2130772213,\n\t\t\t\t\t2130772214};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int SearchView_android_focusable = 0;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int SearchView_android_imeOptions = 3;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int SearchView_android_inputType = 2;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int SearchView_android_maxWidth = 1;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int SearchView_closeIcon = 8;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int SearchView_commitIcon = 13;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int SearchView_defaultQueryHint = 7;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int SearchView_goIcon = 9;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int SearchView_iconifiedByDefault = 5;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int SearchView_layout = 4;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int SearchView_queryBackground = 15;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int SearchView_queryHint = 6;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int SearchView_searchHintIcon = 11;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int SearchView_searchIcon = 10;\n\t\t\t\n\t\t\t// aapt resource value: 16\n\t\t\tpublic const int SearchView_submitBackground = 16;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int SearchView_suggestionRowLayout = 14;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int SearchView_voiceIcon = 12;\n\t\t\t\n\t\t\tpublic static int[] SnackbarLayout = new int[] {\n\t\t\t\t\t16843039,\n\t\t\t\t\t2130772030,\n\t\t\t\t\t2130772299};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int SnackbarLayout_android_maxWidth = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int SnackbarLayout_elevation = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int SnackbarLayout_maxActionInlineWidth = 2;\n\t\t\t\n\t\t\tpublic static int[] Spinner = new int[] {\n\t\t\t\t\t16842930,\n\t\t\t\t\t16843126,\n\t\t\t\t\t16843131,\n\t\t\t\t\t16843362,\n\t\t\t\t\t2130772031};\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int Spinner_android_dropDownWidth = 3;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int Spinner_android_entries = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int Spinner_android_popupBackground = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int Spinner_android_prompt = 2;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int Spinner_popupTheme = 4;\n\t\t\t\n\t\t\tpublic static int[] SwitchCompat = new int[] {\n\t\t\t\t\t16843044,\n\t\t\t\t\t16843045,\n\t\t\t\t\t16843074,\n\t\t\t\t\t2130772215,\n\t\t\t\t\t2130772216,\n\t\t\t\t\t2130772217,\n\t\t\t\t\t2130772218,\n\t\t\t\t\t2130772219,\n\t\t\t\t\t2130772220,\n\t\t\t\t\t2130772221,\n\t\t\t\t\t2130772222,\n\t\t\t\t\t2130772223,\n\t\t\t\t\t2130772224,\n\t\t\t\t\t2130772225};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int SwitchCompat_android_textOff = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int SwitchCompat_android_textOn = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int SwitchCompat_android_thumb = 2;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int SwitchCompat_showText = 13;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int SwitchCompat_splitTrack = 12;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int SwitchCompat_switchMinWidth = 10;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int SwitchCompat_switchPadding = 11;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int SwitchCompat_switchTextAppearance = 9;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int SwitchCompat_thumbTextPadding = 8;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int SwitchCompat_thumbTint = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int SwitchCompat_thumbTintMode = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int SwitchCompat_track = 5;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int SwitchCompat_trackTint = 6;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int SwitchCompat_trackTintMode = 7;\n\t\t\t\n\t\t\tpublic static int[] TabItem = new int[] {\n\t\t\t\t\t16842754,\n\t\t\t\t\t16842994,\n\t\t\t\t\t16843087};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int TabItem_android_icon = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int TabItem_android_layout = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int TabItem_android_text = 2;\n\t\t\t\n\t\t\tpublic static int[] TabLayout = new int[] {\n\t\t\t\t\t2130772300,\n\t\t\t\t\t2130772301,\n\t\t\t\t\t2130772302,\n\t\t\t\t\t2130772303,\n\t\t\t\t\t2130772304,\n\t\t\t\t\t2130772305,\n\t\t\t\t\t2130772306,\n\t\t\t\t\t2130772307,\n\t\t\t\t\t2130772308,\n\t\t\t\t\t2130772309,\n\t\t\t\t\t2130772310,\n\t\t\t\t\t2130772311,\n\t\t\t\t\t2130772312,\n\t\t\t\t\t2130772313,\n\t\t\t\t\t2130772314,\n\t\t\t\t\t2130772315};\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int TabLayout_tabBackground = 3;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int TabLayout_tabContentStart = 2;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int TabLayout_tabGravity = 5;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int TabLayout_tabIndicatorColor = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int TabLayout_tabIndicatorHeight = 1;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int TabLayout_tabMaxWidth = 7;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int TabLayout_tabMinWidth = 6;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int TabLayout_tabMode = 4;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int TabLayout_tabPadding = 15;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int TabLayout_tabPaddingBottom = 14;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int TabLayout_tabPaddingEnd = 13;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int TabLayout_tabPaddingStart = 11;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int TabLayout_tabPaddingTop = 12;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int TabLayout_tabSelectedTextColor = 10;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int TabLayout_tabTextAppearance = 8;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int TabLayout_tabTextColor = 9;\n\t\t\t\n\t\t\tpublic static int[] TextAppearance = new int[] {\n\t\t\t\t\t16842901,\n\t\t\t\t\t16842902,\n\t\t\t\t\t16842903,\n\t\t\t\t\t16842904,\n\t\t\t\t\t16842906,\n\t\t\t\t\t16842907,\n\t\t\t\t\t16843105,\n\t\t\t\t\t16843106,\n\t\t\t\t\t16843107,\n\t\t\t\t\t16843108,\n\t\t\t\t\t16843692,\n\t\t\t\t\t2130772047,\n\t\t\t\t\t2130772053};\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int TextAppearance_android_fontFamily = 10;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int TextAppearance_android_shadowColor = 6;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int TextAppearance_android_shadowDx = 7;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int TextAppearance_android_shadowDy = 8;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int TextAppearance_android_shadowRadius = 9;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int TextAppearance_android_textColor = 3;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int TextAppearance_android_textColorHint = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int TextAppearance_android_textColorLink = 5;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int TextAppearance_android_textSize = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int TextAppearance_android_textStyle = 2;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int TextAppearance_android_typeface = 1;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int TextAppearance_fontFamily = 12;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int TextAppearance_textAllCaps = 11;\n\t\t\t\n\t\t\tpublic static int[] TextInputLayout = new int[] {\n\t\t\t\t\t16842906,\n\t\t\t\t\t16843088,\n\t\t\t\t\t2130772316,\n\t\t\t\t\t2130772317,\n\t\t\t\t\t2130772318,\n\t\t\t\t\t2130772319,\n\t\t\t\t\t2130772320,\n\t\t\t\t\t2130772321,\n\t\t\t\t\t2130772322,\n\t\t\t\t\t2130772323,\n\t\t\t\t\t2130772324,\n\t\t\t\t\t2130772325,\n\t\t\t\t\t2130772326,\n\t\t\t\t\t2130772327,\n\t\t\t\t\t2130772328,\n\t\t\t\t\t2130772329};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int TextInputLayout_android_hint = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int TextInputLayout_android_textColorHint = 0;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int TextInputLayout_counterEnabled = 6;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int TextInputLayout_counterMaxLength = 7;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int TextInputLayout_counterOverflowTextAppearance = 9;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int TextInputLayout_counterTextAppearance = 8;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int TextInputLayout_errorEnabled = 4;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int TextInputLayout_errorTextAppearance = 5;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int TextInputLayout_hintAnimationEnabled = 10;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int TextInputLayout_hintEnabled = 3;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int TextInputLayout_hintTextAppearance = 2;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int TextInputLayout_passwordToggleContentDescription = 13;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int TextInputLayout_passwordToggleDrawable = 12;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int TextInputLayout_passwordToggleEnabled = 11;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int TextInputLayout_passwordToggleTint = 14;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int TextInputLayout_passwordToggleTintMode = 15;\n\t\t\t\n\t\t\tpublic static int[] Toolbar = new int[] {\n\t\t\t\t\t16842927,\n\t\t\t\t\t16843072,\n\t\t\t\t\t2130772005,\n\t\t\t\t\t2130772008,\n\t\t\t\t\t2130772012,\n\t\t\t\t\t2130772024,\n\t\t\t\t\t2130772025,\n\t\t\t\t\t2130772026,\n\t\t\t\t\t2130772027,\n\t\t\t\t\t2130772028,\n\t\t\t\t\t2130772029,\n\t\t\t\t\t2130772031,\n\t\t\t\t\t2130772226,\n\t\t\t\t\t2130772227,\n\t\t\t\t\t2130772228,\n\t\t\t\t\t2130772229,\n\t\t\t\t\t2130772230,\n\t\t\t\t\t2130772231,\n\t\t\t\t\t2130772232,\n\t\t\t\t\t2130772233,\n\t\t\t\t\t2130772234,\n\t\t\t\t\t2130772235,\n\t\t\t\t\t2130772236,\n\t\t\t\t\t2130772237,\n\t\t\t\t\t2130772238,\n\t\t\t\t\t2130772239,\n\t\t\t\t\t2130772240,\n\t\t\t\t\t2130772241,\n\t\t\t\t\t2130772242};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int Toolbar_android_gravity = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int Toolbar_android_minHeight = 1;\n\t\t\t\n\t\t\t// aapt resource value: 21\n\t\t\tpublic const int Toolbar_buttonGravity = 21;\n\t\t\t\n\t\t\t// aapt resource value: 23\n\t\t\tpublic const int Toolbar_collapseContentDescription = 23;\n\t\t\t\n\t\t\t// aapt resource value: 22\n\t\t\tpublic const int Toolbar_collapseIcon = 22;\n\t\t\t\n\t\t\t// aapt resource value: 6\n\t\t\tpublic const int Toolbar_contentInsetEnd = 6;\n\t\t\t\n\t\t\t// aapt resource value: 10\n\t\t\tpublic const int Toolbar_contentInsetEndWithActions = 10;\n\t\t\t\n\t\t\t// aapt resource value: 7\n\t\t\tpublic const int Toolbar_contentInsetLeft = 7;\n\t\t\t\n\t\t\t// aapt resource value: 8\n\t\t\tpublic const int Toolbar_contentInsetRight = 8;\n\t\t\t\n\t\t\t// aapt resource value: 5\n\t\t\tpublic const int Toolbar_contentInsetStart = 5;\n\t\t\t\n\t\t\t// aapt resource value: 9\n\t\t\tpublic const int Toolbar_contentInsetStartWithNavigation = 9;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int Toolbar_logo = 4;\n\t\t\t\n\t\t\t// aapt resource value: 26\n\t\t\tpublic const int Toolbar_logoDescription = 26;\n\t\t\t\n\t\t\t// aapt resource value: 20\n\t\t\tpublic const int Toolbar_maxButtonHeight = 20;\n\t\t\t\n\t\t\t// aapt resource value: 25\n\t\t\tpublic const int Toolbar_navigationContentDescription = 25;\n\t\t\t\n\t\t\t// aapt resource value: 24\n\t\t\tpublic const int Toolbar_navigationIcon = 24;\n\t\t\t\n\t\t\t// aapt resource value: 11\n\t\t\tpublic const int Toolbar_popupTheme = 11;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int Toolbar_subtitle = 3;\n\t\t\t\n\t\t\t// aapt resource value: 13\n\t\t\tpublic const int Toolbar_subtitleTextAppearance = 13;\n\t\t\t\n\t\t\t// aapt resource value: 28\n\t\t\tpublic const int Toolbar_subtitleTextColor = 28;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int Toolbar_title = 2;\n\t\t\t\n\t\t\t// aapt resource value: 14\n\t\t\tpublic const int Toolbar_titleMargin = 14;\n\t\t\t\n\t\t\t// aapt resource value: 18\n\t\t\tpublic const int Toolbar_titleMarginBottom = 18;\n\t\t\t\n\t\t\t// aapt resource value: 16\n\t\t\tpublic const int Toolbar_titleMarginEnd = 16;\n\t\t\t\n\t\t\t// aapt resource value: 15\n\t\t\tpublic const int Toolbar_titleMarginStart = 15;\n\t\t\t\n\t\t\t// aapt resource value: 17\n\t\t\tpublic const int Toolbar_titleMarginTop = 17;\n\t\t\t\n\t\t\t// aapt resource value: 19\n\t\t\tpublic const int Toolbar_titleMargins = 19;\n\t\t\t\n\t\t\t// aapt resource value: 12\n\t\t\tpublic const int Toolbar_titleTextAppearance = 12;\n\t\t\t\n\t\t\t// aapt resource value: 27\n\t\t\tpublic const int Toolbar_titleTextColor = 27;\n\t\t\t\n\t\t\tpublic static int[] View = new int[] {\n\t\t\t\t\t16842752,\n\t\t\t\t\t16842970,\n\t\t\t\t\t2130772243,\n\t\t\t\t\t2130772244,\n\t\t\t\t\t2130772245};\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int View_android_focusable = 1;\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int View_android_theme = 0;\n\t\t\t\n\t\t\t// aapt resource value: 3\n\t\t\tpublic const int View_paddingEnd = 3;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int View_paddingStart = 2;\n\t\t\t\n\t\t\t// aapt resource value: 4\n\t\t\tpublic const int View_theme = 4;\n\t\t\t\n\t\t\tpublic static int[] ViewBackgroundHelper = new int[] {\n\t\t\t\t\t16842964,\n\t\t\t\t\t2130772246,\n\t\t\t\t\t2130772247};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ViewBackgroundHelper_android_background = 0;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ViewBackgroundHelper_backgroundTint = 1;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int ViewBackgroundHelper_backgroundTintMode = 2;\n\t\t\t\n\t\t\tpublic static int[] ViewStubCompat = new int[] {\n\t\t\t\t\t16842960,\n\t\t\t\t\t16842994,\n\t\t\t\t\t16842995};\n\t\t\t\n\t\t\t// aapt resource value: 0\n\t\t\tpublic const int ViewStubCompat_android_id = 0;\n\t\t\t\n\t\t\t// aapt resource value: 2\n\t\t\tpublic const int ViewStubCompat_android_inflatedId = 2;\n\t\t\t\n\t\t\t// aapt resource value: 1\n\t\t\tpublic const int ViewStubCompat_android_layout = 1;\n\t\t\t\n\t\t\tstatic Styleable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Styleable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/layout/Main.axml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:orientation=\"vertical\" android:layout_width=\"match_parent\" android:layout_height=\"match_parent\">\n\t<Button android:id=\"@+id/myButton\" android:layout_width=\"match_parent\" android:layout_height=\"wrap_content\" android:text=\"@string/hello\" />\n</LinearLayout>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/layout/Tabbar.axml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.TabLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/sliding_tabs\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"?attr/colorPrimary\"\n    android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n    app:tabIndicatorColor=\"@android:color/white\"\n    app:tabGravity=\"fill\"\n    app:tabMode=\"fixed\" />\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/layout/Toolbar.axml",
    "content": "<android.support.v7.widget.Toolbar\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/toolbar\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"?attr/colorPrimary\"\n    android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n    android:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\" />\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/values/Strings.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"hello\">Hello World, Click Me!</string>\n\t<string name=\"app_name\">NetStd.Droid</string>\n</resources>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.Android/Resources/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<resources>\n\n  <style name=\"MainTheme\" parent=\"MainTheme.Base\">\n  </style>\n  <!-- Base theme applied no matter what API -->\n  <style name=\"MainTheme.Base\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n    <!--If you are using revision 22.1 please use just windowNoTitle. Without android:-->\n    <item name=\"windowNoTitle\">true</item>\n    <!--We will be using the toolbar so no need to show ActionBar-->\n    <item name=\"windowActionBar\">false</item>\n    <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette -->\n    <!-- colorPrimary is used for the default action bar background -->\n    <item name=\"colorPrimary\">#2196F3</item>\n    <!-- colorPrimaryDark is used for the status bar -->\n    <item name=\"colorPrimaryDark\">#1976D2</item>\n    <!-- colorAccent is used as the default value for colorControlActivated\n         which is used to tint widgets -->\n    <item name=\"colorAccent\">#FF4081</item>\n    <!-- You can also set colorControlNormal, colorControlActivated\n         colorControlHighlight and colorSwitchThumbNormal. -->\n    <item name=\"windowActionModeOverlay\">true</item>\n\n    <item name=\"android:datePickerDialogTheme\">@style/AppCompatDialogStyle</item>\n  </style>\n\n  <style name=\"AppCompatDialogStyle\" parent=\"Theme.AppCompat.Light.Dialog\">\n    <item name=\"colorAccent\">#FF4081</item>\n  </style>\n</resources>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/App.xaml",
    "content": "﻿<Application\n    x:Class=\"NetStd.UWP.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:NetStd.UWP\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace NetStd.UWP\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                Xamarin.Forms.Forms.Init(e);\n\n                Xamarin.Forms.DependencyService.Register<LinqToTwitterUniversalAuthorizer>();\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (rootFrame.Content == null)\n            {\n                // When the navigation stack isn't restored navigate to the first page,\n                // configuring the new page by passing required information as a navigation\n                // parameter\n                rootFrame.Navigate(typeof(MainPage), e.Arguments);\n            }\n            // Ensure the current window is active\n            Window.Current.Activate();\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/LinqToTwitterUniversalAuthorizer.cs",
    "content": "﻿using LinqToTwitter;\nusing NetStd.Models;\n\nnamespace NetStd.UWP\n{\n    public class LinqToTwitterUniversalAuthorizer : ILinqToTwitterAuthorizer\n    {\n        public IAuthorizer GetAuthorizer(string consumerKey, string consumerSecret)\n        {\n            return new UniversalAuthorizer\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = consumerKey,\n                    ConsumerSecret = consumerSecret\n                }\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/MainPage.xaml",
    "content": "﻿<forms:WindowsPage\n    x:Class=\"NetStd.UWP.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:forms=\"using:Xamarin.Forms.Platform.UWP\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:NetStd.UWP\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n\n    </Grid>\n</forms:WindowsPage>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/MainPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace NetStd.UWP\n{\n    public sealed partial class MainPage\n    {\n        public MainPage()\n        {\n            this.InitializeComponent();\n\n            LoadApplication(new NetStd.App());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/NetStd.UWP.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{541ED871-7352-4E2B-A421-E3C63148E36D}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>NetStd.UWP</RootNamespace>\n    <AssemblyName>NetStd.UWP</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion>10.0.17763.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>NetStd.UWP_TemporaryKey.pfx</PackageCertificateKeyFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"LinqToTwitterUniversalAuthorizer.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"NetStd.UWP_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-100.png\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-125.png\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-150.png\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-400.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-100.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-125.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-150.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-400.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-100.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-125.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-150.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-400.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-100.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-125.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-150.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-400.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-16_altform-unplated.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-32_altform-unplated.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-48_altform-unplated.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-256_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-100.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-125.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-150.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-400.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>13.0.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Core\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Linq\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.PlatformServices\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"Xamarin.Forms\" Version=\"2.5.0.121934\" />\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\" Version=\"6.0.6\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\NetStd\\NetStd.csproj\">\n      <Project>{6BDE94CA-4ACB-4E4D-886B-7EEC591ED9BE}</Project>\n      <Name>NetStd</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitter.netstandard, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.netstandard\\bin\\Debug\\netstandard2.0\\LinqToTwitter.netstandard.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.Uwp, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.Uwp\\bin\\Debug\\LinqToTwitter.Uwp.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"ec0cc741-fd3e-485c-81be-68815c480690\"\n    Publisher=\"CN=Pierce Boggan\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"ec0cc741-fd3e-485c-81be-68815c480690\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>NetStd.UWP</DisplayName>\n    <PublisherDisplayName>Pierce Boggan</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"NetStd.UWP.App\">\n      <uap:VisualElements\n        DisplayName=\"NetStd.UWP\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"NetStd.UWP\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"NetStd.UWP\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"NetStd.UWP\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.UWP/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Seralize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/AppDelegate.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Foundation;\nusing UIKit;\n\nnamespace NetStd.iOS\n{\n    // The UIApplicationDelegate for the application. This class is responsible for launching the \n    // User Interface of the application, as well as listening (and optionally responding) to \n    // application events from iOS.\n    [Register(\"AppDelegate\")]\n    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate\n    {\n        //\n        // This method is invoked when the application has loaded and is ready to run. In this \n        // method you should instantiate the window, load the UI into it and then make the window\n        // visible.\n        //\n        // You have 17 seconds to return from this method, or iOS will terminate your application.\n        //\n        public override bool FinishedLaunching(UIApplication app, NSDictionary options)\n        {\n            global::Xamarin.Forms.Forms.Init();\n            LoadApplication(new App());\n\n            return base.FinishedLaunching(app, options);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/Entitlements.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n</dict>\n</plist>\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t\t<integer>2</integer>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>MinimumOSVersion</key>\n\t<string>11.2</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>NetStd</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.yourcompany.NetStd</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>CFBundleIconFiles</key>\n\t<array>\n\t\t<string>Icon-60@2x</string>\n\t\t<string>Icon-60@3x</string>\n\t\t<string>Icon-76</string>\n\t\t<string>Icon-76@2x</string>\n\t\t<string>Default</string>\n\t\t<string>Default@2x</string>\n\t\t<string>Default-568h@2x</string>\n\t\t<string>Default-Portrait</string>\n\t\t<string>Default-Portrait@2x</string>\n\t\t<string>Icon-Small-40</string>\n\t\t<string>Icon-Small-40@2x</string>\n\t\t<string>Icon-Small-40@3x</string>\n\t\t<string>Icon-Small</string>\n\t\t<string>Icon-Small@2x</string>\n\t\t<string>Icon-Small@3x</string>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>CFBundleName</key>\n\t<string>NetStd</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/LinqToTwitterApplicationOnlyAuthorizer.cs",
    "content": "﻿using LinqToTwitter;\nusing NetStd.iOS;\nusing NetStd.Models;\n\n[assembly: Xamarin.Forms.Dependency(typeof(LinqToTwitterApplicationOnlyAuthorizer))]\nnamespace NetStd.iOS\n{\n    public class LinqToTwitterApplicationOnlyAuthorizer : ILinqToTwitterAuthorizer\n    {\n        public IAuthorizer GetAuthorizer(string consumerKey, string consumerSecret)\n        {\n            return new ApplicationOnlyAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = consumerKey,\n                    ConsumerSecret = consumerSecret,\n                },\n            };\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/Main.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Foundation;\nusing UIKit;\n\nnamespace NetStd.iOS\n{\n    public class Application\n    {\n        // This is the main entry point of the application.\n        static void Main(string[] args)\n        {\n            // if you want to use a different Application Delegate class from \"AppDelegate\"\n            // you can specify it here.\n            UIApplication.Main(args, null, \"AppDelegate\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/NetStd.iOS.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">iPhoneSimulator</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{332AEA91-6862-4E1F-BB28-04962C487604}</ProjectGuid>\n    <ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>NetStd.iOS</RootNamespace>\n    <IPhoneResourcePrefix>Resources</IPhoneResourcePrefix>\n    <AssemblyName>NetStd.iOS</AssemblyName>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchArch>x86_64</MtouchArch>\n    <MtouchLink>None</MtouchLink>\n    <MtouchDebug>true</MtouchDebug>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhoneSimulator\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchLink>None</MtouchLink>\n    <MtouchArch>x86_64</MtouchArch>\n    <ConsolePause>false</ConsolePause>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|iPhone' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\iPhone\\Debug</OutputPath>\n    <DefineConstants>DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>false</ConsolePause>\n    <MtouchArch>ARM64</MtouchArch>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <MtouchDebug>true</MtouchDebug>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\iPhone\\Release</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <MtouchArch>ARM64</MtouchArch>\n    <ConsolePause>false</ConsolePause>\n    <CodesignKey>iPhone Developer</CodesignKey>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>True</Optimize>\n    <OutputPath>bin\\iPhone\\Ad-Hoc</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>False</ConsolePause>\n    <MtouchArch>ARM64</MtouchArch>\n    <BuildIpa>True</BuildIpa>\n    <CodesignProvision>Automatic:AdHoc</CodesignProvision>\n    <CodesignKey>iPhone Distribution</CodesignKey>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' \">\n    <DebugType>none</DebugType>\n    <Optimize>True</Optimize>\n    <OutputPath>bin\\iPhone\\AppStore</OutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <ConsolePause>False</ConsolePause>\n    <MtouchArch>ARM64</MtouchArch>\n    <CodesignProvision>Automatic:AppStore</CodesignProvision>\n    <CodesignKey>iPhone Distribution</CodesignKey>\n    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"LinqToTwitterApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"Main.cs\" />\n    <Compile Include=\"AppDelegate.cs\" />\n    <None Include=\"Entitlements.plist\" />\n    <None Include=\"Info.plist\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BundleResource Include=\"Resources\\Default-568h%402x.png\" />\n    <BundleResource Include=\"Resources\\Default-Portrait.png\" />\n    <BundleResource Include=\"Resources\\Default-Portrait%402x.png\" />\n    <BundleResource Include=\"Resources\\Default.png\" />\n    <BundleResource Include=\"Resources\\Default%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-60%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-60%403x.png\" />\n    <BundleResource Include=\"Resources\\Icon-76.png\" />\n    <BundleResource Include=\"Resources\\Icon-76%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small-40.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small-40%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small-40%403x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small%402x.png\" />\n    <BundleResource Include=\"Resources\\Icon-Small%403x.png\" />\n    <InterfaceDefinition Include=\"Resources\\LaunchScreen.storyboard\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitter.netstandard\">\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.netstandard\\bin\\Debug\\netstandard2.0\\LinqToTwitter.netstandard.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Xamarin.iOS\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>13.0.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Core\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Interfaces\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Linq\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.PlatformServices\">\n      <Version>3.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"Xamarin.Forms\" Version=\"2.5.0.121934\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Xamarin\\iOS\\Xamarin.iOS.CSharp.targets\" />\n  <ItemGroup>\n    <ProjectReference Include=\"..\\NetStd\\NetStd.csproj\">\n      <Project>{6BDE94CA-4ACB-4E4D-886B-7EEC591ED9BE}</Project>\n      <Name>NetStd</Name>\n    </ProjectReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"NetStd.iOS\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"NetStd.iOS\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"72bdc44f-c588-44f3-b6df-9aace7daafdd\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/Resources/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"6245\" systemVersion=\"13F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"X5k-f2-b5h\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6238\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"gAE-YM-kbH\">\n            <objects>\n                <viewController id=\"X5k-f2-b5h\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Y8P-hJ-Z43\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"9ZL-r4-8FZ\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"yd7-JS-zBw\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" image=\"Icon-60.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"23\">\n                                <rect key=\"frame\" x=\"270\" y=\"270\" width=\"60\" height=\"60\"/>\n                                <rect key=\"contentStretch\" x=\"0.0\" y=\"0.0\" width=\"0.0\" height=\"0.0\"/>\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.20392156862745098\" green=\"0.59607843137254901\" blue=\"0.85882352941176465\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"23\" firstAttribute=\"centerY\" secondItem=\"yd7-JS-zBw\" secondAttribute=\"centerY\" priority=\"1\" id=\"39\"/>\n                            <constraint firstItem=\"23\" firstAttribute=\"centerX\" secondItem=\"yd7-JS-zBw\" secondAttribute=\"centerX\" priority=\"1\" id=\"41\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"XAI-xm-WK6\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"349\" y=\"339\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"Icon-60.png\" width=\"180\" height=\"180\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd/NetStd.iOS/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Xamarin.Forms\" version=\"2.4.0.266-pre1\" targetFramework=\"xamarinios10\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter5/Xamarin/NetStd/NetStd.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27130.2010\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"NetStd.Android\", \"NetStd\\NetStd.Android\\NetStd.Android.csproj\", \"{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"NetStd.iOS\", \"NetStd\\NetStd.iOS\\NetStd.iOS.csproj\", \"{332AEA91-6862-4E1F-BB28-04962C487604}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"NetStd.UWP\", \"NetStd\\NetStd.UWP\\NetStd.UWP.csproj\", \"{541ED871-7352-4E2B-A421-E3C63148E36D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"NetStd\", \"NetStd\\NetStd\\NetStd.csproj\", \"{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tAd-Hoc|Any CPU = Ad-Hoc|Any CPU\n\t\tAd-Hoc|ARM = Ad-Hoc|ARM\n\t\tAd-Hoc|iPhone = Ad-Hoc|iPhone\n\t\tAd-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator\n\t\tAd-Hoc|x64 = Ad-Hoc|x64\n\t\tAd-Hoc|x86 = Ad-Hoc|x86\n\t\tAppStore|Any CPU = AppStore|Any CPU\n\t\tAppStore|ARM = AppStore|ARM\n\t\tAppStore|iPhone = AppStore|iPhone\n\t\tAppStore|iPhoneSimulator = AppStore|iPhoneSimulator\n\t\tAppStore|x64 = AppStore|x64\n\t\tAppStore|x86 = AppStore|x86\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|iPhone = Debug|iPhone\n\t\tDebug|iPhoneSimulator = Debug|iPhoneSimulator\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|iPhone = Release|iPhone\n\t\tRelease|iPhoneSimulator = Release|iPhoneSimulator\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|ARM.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|ARM.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|iPhone.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|x64.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|x64.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|x86.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Ad-Hoc|x86.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|ARM.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|ARM.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|ARM.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|iPhone.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|x64.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|x64.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|x64.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|x86.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|x86.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.AppStore|x86.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|ARM.Deploy.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|iPhone.Deploy.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|x64.Deploy.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Debug|x86.Deploy.0 = Debug|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|ARM.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|iPhone.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|x64.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|x64.Deploy.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|x86.Build.0 = Release|Any CPU\n\t\t{504C2D41-F6F8-4444-BDB9-F1DCBE2E9027}.Release|x86.Deploy.0 = Release|Any CPU\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|ARM.ActiveCfg = AppStore|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|iPhone.ActiveCfg = AppStore|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|iPhone.Build.0 = AppStore|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|x64.ActiveCfg = AppStore|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.AppStore|x86.ActiveCfg = AppStore|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|Any CPU.ActiveCfg = Debug|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|ARM.ActiveCfg = Debug|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|iPhone.ActiveCfg = Debug|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|iPhone.Build.0 = Debug|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|x64.ActiveCfg = Debug|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Debug|x86.ActiveCfg = Debug|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|Any CPU.ActiveCfg = Release|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|ARM.ActiveCfg = Release|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|iPhone.ActiveCfg = Release|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|iPhone.Build.0 = Release|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|x64.ActiveCfg = Release|iPhone\n\t\t{332AEA91-6862-4E1F-BB28-04962C487604}.Release|x86.ActiveCfg = Release|iPhone\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|Any CPU.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|Any CPU.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|Any CPU.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|ARM.ActiveCfg = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|ARM.Build.0 = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|ARM.Deploy.0 = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|iPhone.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|iPhone.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|iPhone.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|x64.ActiveCfg = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|x64.Build.0 = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|x64.Deploy.0 = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|x86.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|x86.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Ad-Hoc|x86.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|Any CPU.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|Any CPU.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|Any CPU.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|ARM.ActiveCfg = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|ARM.Build.0 = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|ARM.Deploy.0 = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|iPhone.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|iPhone.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|iPhone.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|iPhoneSimulator.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|iPhoneSimulator.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|iPhoneSimulator.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|x64.ActiveCfg = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|x64.Build.0 = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|x64.Deploy.0 = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|x86.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|x86.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.AppStore|x86.Deploy.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|iPhone.ActiveCfg = Debug|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|x64.Build.0 = Debug|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|x86.Build.0 = Debug|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|ARM.Build.0 = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|iPhone.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|iPhoneSimulator.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|x64.ActiveCfg = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|x64.Build.0 = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|x64.Deploy.0 = Release|x64\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|x86.ActiveCfg = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|x86.Build.0 = Release|x86\n\t\t{541ED871-7352-4E2B-A421-E3C63148E36D}.Release|x86.Deploy.0 = Release|x86\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|x64.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Ad-Hoc|x86.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|Any CPU.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|ARM.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|ARM.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|iPhone.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|x64.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|x64.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|x86.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.AppStore|x86.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|x64.Build.0 = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{14B6B13C-6BD4-4306-A2D5-3EAB25F94F53}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {B8F6585D-BA47-44FA-B39C-30A824D9F64F}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/AccountActivityDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props\" Condition=\"Exists('..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')\" />\n  <Import Project=\"..\\packages\\Microsoft.Net.Compilers.2.4.0\\build\\Microsoft.Net.Compilers.props\" Condition=\"Exists('..\\packages\\Microsoft.Net.Compilers.2.4.0\\build\\Microsoft.Net.Compilers.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AccountActivityDemo</RootNamespace>\n    <AssemblyName>AccountActivityDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>true</UseIISExpress>\n    <Use64BitIISExpress />\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <UseGlobalApplicationHostFile />\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.AspNet, Version=5.0.0.14073, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\linqtotwitter.5.0.0\\lib\\net461\\LinqToTwitter.AspNet.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.netstandard, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\linqtotwitter.5.0.0\\lib\\net461\\LinqToTwitter.netstandard.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AI.Agent.Intercept, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.Agent.Intercept.2.4.0\\lib\\net45\\Microsoft.AI.Agent.Intercept.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AI.DependencyCollector, Version=2.4.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.DependencyCollector.2.4.1\\lib\\net45\\Microsoft.AI.DependencyCollector.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AI.PerfCounterCollector, Version=2.4.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.PerfCounterCollector.2.4.1\\lib\\net45\\Microsoft.AI.PerfCounterCollector.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AI.ServerTelemetryChannel, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.2.4.0\\lib\\net45\\Microsoft.AI.ServerTelemetryChannel.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AI.Web, Version=2.4.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.Web.2.4.1\\lib\\net45\\Microsoft.AI.Web.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AI.WindowsServer, Version=2.4.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.WindowsServer.2.4.1\\lib\\net45\\Microsoft.AI.WindowsServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.ApplicationInsights, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.ApplicationInsights.2.4.0\\lib\\net46\\Microsoft.ApplicationInsights.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.TelemetryCorrelation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.TelemetryCorrelation.1.0.0\\lib\\net45\\Microsoft.AspNet.TelemetryCorrelation.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\lib\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.10.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Diagnostics.DiagnosticSource, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Diagnostics.DiagnosticSource.4.4.0\\lib\\net46\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Core.3.1.1\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Interfaces.3.1.1\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Linq.3.1.1\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.PlatformServices.3.1.1\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n    </Reference>\n    <Reference Include=\"System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Client.5.2.3\\lib\\net45\\System.Net.Http.Formatting.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\">\n    </Reference>\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.Core.5.2.3\\lib\\net45\\System.Web.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebApi.WebHost.5.2.3\\lib\\net45\\System.Web.Http.WebHost.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.Mvc.5.2.3\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.Razor.3.2.3\\lib\\net45\\System.Web.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"App_Start\\FilterConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\WebApiConfig.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ApiDescriptionExtensions.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\App_Start\\HelpPageConfig.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\Controllers\\HelpController.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\HelpPageAreaRegistration.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\HelpPageConfigurationExtensions.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\CollectionModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ComplexTypeModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\DictionaryModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\EnumTypeModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\EnumValueDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\IModelDocumentationProvider.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\KeyValuePairModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelDescriptionGenerator.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelNameAttribute.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ModelNameHelper.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ParameterAnnotation.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\ParameterDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\ModelDescriptions\\SimpleTypeModelDescription.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\Models\\HelpPageApiModel.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\HelpPageSampleGenerator.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\HelpPageSampleKey.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\ImageSample.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\InvalidSample.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\ObjectGenerator.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\SampleDirection.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\SampleGeneration\\TextSample.cs\" />\n    <Compile Include=\"Areas\\HelpPage\\XmlDocumentationProvider.cs\" />\n    <Compile Include=\"Controllers\\HomeController.cs\" />\n    <Compile Include=\"Controllers\\AccountActivityController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Areas\\HelpPage\\HelpPage.css\" />\n    <Content Include=\"Content\\bootstrap-theme.css\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css\" />\n    <Content Include=\"Content\\bootstrap.css\" />\n    <Content Include=\"Content\\bootstrap.min.css\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.svg\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Web.config\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\ResourceModel.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\Index.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\TextSample.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\SimpleTypeModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\Samples.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\Parameters.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ModelDescriptionLink.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\KeyValuePairModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\InvalidSample.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ImageSample.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\HelpPageApiModel.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\EnumTypeModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\DictionaryModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ComplexTypeModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\CollectionModelDescription.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\DisplayTemplates\\ApiGroup.cshtml\" />\n    <Content Include=\"Areas\\HelpPage\\Views\\Help\\Api.cshtml\" />\n    <Content Include=\"ApplicationInsights.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff2\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.ttf\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.eot\" />\n    <Content Include=\"Content\\bootstrap.min.css.map\" />\n    <Content Include=\"Content\\bootstrap.css.map\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css.map\" />\n    <Content Include=\"Content\\bootstrap-theme.css.map\" />\n    <None Include=\"Properties\\PublishProfiles\\AccountActivityDemo - Web Deploy.pubxml\" />\n    <None Include=\"Scripts\\jquery-3.2.1.intellisense.js\" />\n    <Content Include=\"Scripts\\bootstrap.js\" />\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\n    <Content Include=\"Scripts\\jquery-3.2.1.js\" />\n    <Content Include=\"Scripts\\jquery-3.2.1.min.js\" />\n    <Content Include=\"Scripts\\jquery-3.2.1.slim.js\" />\n    <Content Include=\"Scripts\\jquery-3.2.1.slim.min.js\" />\n    <Content Include=\"Scripts\\modernizr-2.8.3.js\" />\n    <Content Include=\"Scripts\\respond.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.min.js\" />\n    <Content Include=\"Scripts\\respond.min.js\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Areas\\HelpPage\\Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"Views\\Web.config\" />\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\n    <Content Include=\"Scripts\\jquery-3.2.1.slim.min.map\" />\n    <Content Include=\"Scripts\\jquery-3.2.1.min.map\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n    <Folder Include=\"Models\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>10291</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:10291/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Net.Compilers.2.4.0\\build\\Microsoft.Net.Compilers.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.Net.Compilers.2.4.0\\build\\Microsoft.Net.Compilers.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/App_Start/BundleConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Optimization;\n\nnamespace AccountActivityDemo\n{\n    public class BundleConfig\n    {\n        // For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/jquery\").Include(\n                        \"~/Scripts/jquery-{version}.js\"));\n\n            // Use the development version of Modernizr to develop with and learn from. Then, when you're\n            // ready for production, use the build tool at https://modernizr.com to pick only the tests you need.\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                        \"~/Scripts/modernizr-*\"));\n\n            bundles.Add(new ScriptBundle(\"~/bundles/bootstrap\").Include(\n                      \"~/Scripts/bootstrap.js\",\n                      \"~/Scripts/respond.js\"));\n\n            bundles.Add(new StyleBundle(\"~/Content/css\").Include(\n                      \"~/Content/bootstrap.css\",\n                      \"~/Content/site.css\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/App_Start/FilterConfig.cs",
    "content": "﻿using System.Web;\nusing System.Web.Mvc;\n\nnamespace AccountActivityDemo\n{\n    public class FilterConfig\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters)\n        {\n            filters.Add(new HandleErrorAttribute());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/App_Start/RouteConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\nusing System.Web.Routing;\n\nnamespace AccountActivityDemo\n{\n    public class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            routes.MapRoute(\n                name: \"Default\",\n                url: \"{controller}/{action}/{id}\",\n                defaults: new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/App_Start/WebApiConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web.Http;\n\nnamespace AccountActivityDemo\n{\n    public static class WebApiConfig\n    {\n        public static void Register(HttpConfiguration config)\n        {\n            // Web API configuration and services\n\n            // Web API routes\n            config.MapHttpAttributeRoutes();\n\n            config.Routes.MapHttpRoute(\n                name: \"DefaultApi\",\n                routeTemplate: \"api/{controller}/{id}\",\n                defaults: new { id = RouteParameter.Optional }\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/ApplicationInsights.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ApplicationInsights xmlns=\"http://schemas.microsoft.com/ApplicationInsights/2013/Settings\">\n\t<TelemetryInitializers>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.AzureRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.AzureWebAppRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.AI.WindowsServer\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.WebTestTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.SyntheticUserAgentTelemetryInitializer, Microsoft.AI.Web\">\n\t\t\t<!-- Extended list of bots:\n            search|spider|crawl|Bot|Monitor|BrowserMob|BingPreview|PagePeeker|WebThumb|URL2PNG|ZooShot|GomezA|Google SketchUp|Read Later|KTXN|KHTE|Keynote|Pingdom|AlwaysOn|zao|borg|oegp|silk|Xenu|zeal|NING|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|Java|JNLP|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|vortex|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|voyager|archiver|Icarus6j|mogimogi|Netvibes|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|wsr-agent|http client|Python-urllib|AppEngine-Google|semanticdiscovery|facebookexternalhit|web/snippet|Google-HTTP-Java-Client-->\n\t\t\t<Filters>search|spider|crawl|Bot|Monitor|AlwaysOn</Filters>\n\t\t</Add>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.ClientIpHeaderTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.OperationNameTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.UserTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.AuthenticatedUserIdTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.AccountIdTelemetryInitializer, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.SessionTelemetryInitializer, Microsoft.AI.Web\"/>\n\t</TelemetryInitializers>\n\t<TelemetryModules>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector\">\n\t\t\t<ExcludeComponentCorrelationHttpHeadersOnDomains>\n\t\t\t\t<!-- \n        Requests to the following hostnames will not be modified by adding correlation headers. \n        This is only applicable if Profiler is installed via either StatusMonitor or Azure Extension.\n        Add entries here to exclude additional hostnames.\n        NOTE: this configuration will be lost upon NuGet upgrade.\n        -->\n\t\t\t\t<Add>core.windows.net</Add>\n\t\t\t\t<Add>core.chinacloudapi.cn</Add>\n\t\t\t\t<Add>core.cloudapi.de</Add>\n\t\t\t\t<Add>core.usgovcloudapi.net</Add>\n\t\t\t\t<Add>localhost</Add>\n\t\t\t\t<Add>127.0.0.1</Add>\n\t\t\t</ExcludeComponentCorrelationHttpHeadersOnDomains>\n\t\t</Add>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector\">\n\t\t\t<!--\n      Use the following syntax here to collect additional performance counters:\n      \n      <Counters>\n        <Add PerformanceCounter=\"\\Process(??APP_WIN32_PROC??)\\Handle Count\" ReportAs=\"Process handle count\" />\n        ...\n      </Counters>\n      \n      PerformanceCounter must be either \\CategoryName(InstanceName)\\CounterName or \\CategoryName\\CounterName\n      \n      NOTE: performance counters configuration will be lost upon NuGet upgrade.\n      \n      The following placeholders are supported as InstanceName:\n        ??APP_WIN32_PROC?? - instance name of the application process  for Win32 counters.\n        ??APP_W3SVC_PROC?? - instance name of the application IIS worker process for IIS/ASP.NET counters.\n        ??APP_CLR_PROC?? - instance name of the application CLR process for .NET counters.\n      -->\n\t\t</Add>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.AI.WindowsServer\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModule, Microsoft.AI.WindowsServer\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule, Microsoft.AI.WindowsServer\">\n\t\t\t<!--</Add>\n    <Add Type=\"Microsoft.ApplicationInsights.WindowsServer.FirstChanceExceptionStatisticsTelemetryModule, Microsoft.AI.WindowsServer\">-->\n\t\t</Add>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web\">\n\t\t\t<Handlers>\n\t\t\t\t<!-- \n        Add entries here to filter out additional handlers: \n        \n        NOTE: handler configuration will be lost upon NuGet upgrade.\n        -->\n\t\t\t\t<Add>System.Web.Handlers.TransferRequestHandler</Add>\n\t\t\t\t<Add>Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataHttpHandler</Add>\n\t\t\t\t<Add>System.Web.StaticFileHandler</Add>\n\t\t\t\t<Add>System.Web.Handlers.AssemblyResourceLoader</Add>\n\t\t\t\t<Add>System.Web.Optimization.BundleHandler</Add>\n\t\t\t\t<Add>System.Web.Script.Services.ScriptHandlerFactory</Add>\n\t\t\t\t<Add>System.Web.Handlers.TraceHandler</Add>\n\t\t\t\t<Add>System.Web.Services.Discovery.DiscoveryRequestHandler</Add>\n\t\t\t\t<Add>System.Web.HttpDebugHandler</Add>\n\t\t\t</Handlers>\n\t\t</Add>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule, Microsoft.AI.Web\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web\"/>\n\t</TelemetryModules>\n\t<TelemetryProcessors>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights\"/>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel\">\n\t\t\t<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>\n\t\t\t<ExcludedTypes>Event</ExcludedTypes>\n\t\t</Add>\n\t\t<Add Type=\"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel\">\n\t\t\t<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>\n\t\t\t<IncludedTypes>Event</IncludedTypes>\n\t\t</Add>\n\t</TelemetryProcessors>\n\t<TelemetryChannel Type=\"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel\"/>\n<!-- \n    Learn more about Application Insights configuration with ApplicationInsights.config here: \n    http://go.microsoft.com/fwlink/?LinkID=513840\n    \n    Note: If not present, please add <InstrumentationKey>Your Key</InstrumentationKey> to the top of this file.\n  --></ApplicationInsights>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ApiDescriptionExtensions.cs",
    "content": "using System;\nusing System.Text;\nusing System.Web;\nusing System.Web.Http.Description;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    public static class ApiDescriptionExtensions\n    {\n        /// <summary>\n        /// Generates an URI-friendly ID for the <see cref=\"ApiDescription\"/>. E.g. \"Get-Values-id_name\" instead of \"GetValues/{id}?name={name}\"\n        /// </summary>\n        /// <param name=\"description\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The ID as a string.</returns>\n        public static string GetFriendlyId(this ApiDescription description)\n        {\n            string path = description.RelativePath;\n            string[] urlParts = path.Split('?');\n            string localPath = urlParts[0];\n            string queryKeyString = null;\n            if (urlParts.Length > 1)\n            {\n                string query = urlParts[1];\n                string[] queryKeys = HttpUtility.ParseQueryString(query).AllKeys;\n                queryKeyString = String.Join(\"_\", queryKeys);\n            }\n\n            StringBuilder friendlyPath = new StringBuilder();\n            friendlyPath.AppendFormat(\"{0}-{1}\",\n                description.HttpMethod.Method,\n                localPath.Replace(\"/\", \"-\").Replace(\"{\", String.Empty).Replace(\"}\", String.Empty));\n            if (queryKeyString != null)\n            {\n                friendlyPath.AppendFormat(\"_{0}\", queryKeyString.Replace('.', '-'));\n            }\n            return friendlyPath.ToString();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/App_Start/HelpPageConfig.cs",
    "content": "// Uncomment the following to provide samples for PageResult<T>. Must also add the Microsoft.AspNet.WebApi.OData\n// package to your project.\n////#define Handle_PageResultOfT\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Net.Http.Headers;\nusing System.Reflection;\nusing System.Web;\nusing System.Web.Http;\n#if Handle_PageResultOfT\nusing System.Web.Http.OData;\n#endif\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// Use this class to customize the Help Page.\n    /// For example you can set a custom <see cref=\"System.Web.Http.Description.IDocumentationProvider\"/> to supply the documentation\n    /// or you can provide the samples for the requests/responses.\n    /// </summary>\n    public static class HelpPageConfig\n    {\n        [SuppressMessage(\"Microsoft.Globalization\", \"CA1303:Do not pass literals as localized parameters\",\n            MessageId = \"AccountActivityDemo.Areas.HelpPage.TextSample.#ctor(System.String)\",\n            Justification = \"End users may choose to merge this string with existing localized resources.\")]\n        [SuppressMessage(\"Microsoft.Naming\", \"CA2204:Literals should be spelled correctly\",\n            MessageId = \"bsonspec\",\n            Justification = \"Part of a URI.\")]\n        public static void Register(HttpConfiguration config)\n        {\n            //// Uncomment the following to use the documentation from XML documentation file.\n            //config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath(\"~/App_Data/XmlDocument.xml\")));\n\n            //// Uncomment the following to use \"sample string\" as the sample for all actions that have string as the body parameter or return type.\n            //// Also, the string arrays will be used for IEnumerable<string>. The sample objects will be serialized into different media type \n            //// formats by the available formatters.\n            //config.SetSampleObjects(new Dictionary<Type, object>\n            //{\n            //    {typeof(string), \"sample string\"},\n            //    {typeof(IEnumerable<string>), new string[]{\"sample 1\", \"sample 2\"}}\n            //});\n\n            // Extend the following to provide factories for types not handled automatically (those lacking parameterless\n            // constructors) or for which you prefer to use non-default property values. Line below provides a fallback\n            // since automatic handling will fail and GeneratePageResult handles only a single type.\n#if Handle_PageResultOfT\n            config.GetHelpPageSampleGenerator().SampleObjectFactories.Add(GeneratePageResult);\n#endif\n\n            // Extend the following to use a preset object directly as the sample for all actions that support a media\n            // type, regardless of the body parameter or return type. The lines below avoid display of binary content.\n            // The BsonMediaTypeFormatter (if available) is not used to serialize the TextSample object.\n            config.SetSampleForMediaType(\n                new TextSample(\"Binary JSON content. See http://bsonspec.org for details.\"),\n                new MediaTypeHeaderValue(\"application/bson\"));\n\n            //// Uncomment the following to use \"[0]=foo&[1]=bar\" directly as the sample for all actions that support form URL encoded format\n            //// and have IEnumerable<string> as the body parameter or return type.\n            //config.SetSampleForType(\"[0]=foo&[1]=bar\", new MediaTypeHeaderValue(\"application/x-www-form-urlencoded\"), typeof(IEnumerable<string>));\n\n            //// Uncomment the following to use \"1234\" directly as the request sample for media type \"text/plain\" on the controller named \"Values\"\n            //// and action named \"Put\".\n            //config.SetSampleRequest(\"1234\", new MediaTypeHeaderValue(\"text/plain\"), \"Values\", \"Put\");\n\n            //// Uncomment the following to use the image on \"../images/aspNetHome.png\" directly as the response sample for media type \"image/png\"\n            //// on the controller named \"Values\" and action named \"Get\" with parameter \"id\".\n            //config.SetSampleResponse(new ImageSample(\"../images/aspNetHome.png\"), new MediaTypeHeaderValue(\"image/png\"), \"Values\", \"Get\", \"id\");\n\n            //// Uncomment the following to correct the sample request when the action expects an HttpRequestMessage with ObjectContent<string>.\n            //// The sample will be generated as if the controller named \"Values\" and action named \"Get\" were having string as the body parameter.\n            //config.SetActualRequestType(typeof(string), \"Values\", \"Get\");\n\n            //// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>.\n            //// The sample will be generated as if the controller named \"Values\" and action named \"Post\" were returning a string.\n            //config.SetActualResponseType(typeof(string), \"Values\", \"Post\");\n        }\n\n#if Handle_PageResultOfT\n        private static object GeneratePageResult(HelpPageSampleGenerator sampleGenerator, Type type)\n        {\n            if (type.IsGenericType)\n            {\n                Type openGenericType = type.GetGenericTypeDefinition();\n                if (openGenericType == typeof(PageResult<>))\n                {\n                    // Get the T in PageResult<T>\n                    Type[] typeParameters = type.GetGenericArguments();\n                    Debug.Assert(typeParameters.Length == 1);\n\n                    // Create an enumeration to pass as the first parameter to the PageResult<T> constuctor\n                    Type itemsType = typeof(List<>).MakeGenericType(typeParameters);\n                    object items = sampleGenerator.GetSampleObject(itemsType);\n\n                    // Fill in the other information needed to invoke the PageResult<T> constuctor\n                    Type[] parameterTypes = new Type[] { itemsType, typeof(Uri), typeof(long?), };\n                    object[] parameters = new object[] { items, null, (long)ObjectGenerator.DefaultCollectionSize, };\n\n                    // Call PageResult(IEnumerable<T> items, Uri nextPageLink, long? count) constructor\n                    ConstructorInfo constructor = type.GetConstructor(parameterTypes);\n                    return constructor.Invoke(parameters);\n                }\n            }\n\n            return null;\n        }\n#endif\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Controllers/HelpController.cs",
    "content": "using System;\nusing System.Web.Http;\nusing System.Web.Mvc;\nusing AccountActivityDemo.Areas.HelpPage.ModelDescriptions;\nusing AccountActivityDemo.Areas.HelpPage.Models;\n\nnamespace AccountActivityDemo.Areas.HelpPage.Controllers\n{\n    /// <summary>\n    /// The controller that will handle requests for the help page.\n    /// </summary>\n    public class HelpController : Controller\n    {\n        private const string ErrorViewName = \"Error\";\n\n        public HelpController()\n            : this(GlobalConfiguration.Configuration)\n        {\n        }\n\n        public HelpController(HttpConfiguration config)\n        {\n            Configuration = config;\n        }\n\n        public HttpConfiguration Configuration { get; private set; }\n\n        public ActionResult Index()\n        {\n            ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();\n            return View(Configuration.Services.GetApiExplorer().ApiDescriptions);\n        }\n\n        public ActionResult Api(string apiId)\n        {\n            if (!String.IsNullOrEmpty(apiId))\n            {\n                HelpPageApiModel apiModel = Configuration.GetHelpPageApiModel(apiId);\n                if (apiModel != null)\n                {\n                    return View(apiModel);\n                }\n            }\n\n            return View(ErrorViewName);\n        }\n\n        public ActionResult ResourceModel(string modelName)\n        {\n            if (!String.IsNullOrEmpty(modelName))\n            {\n                ModelDescriptionGenerator modelDescriptionGenerator = Configuration.GetModelDescriptionGenerator();\n                ModelDescription modelDescription;\n                if (modelDescriptionGenerator.GeneratedModels.TryGetValue(modelName, out modelDescription))\n                {\n                    return View(modelDescription);\n                }\n            }\n\n            return View(ErrorViewName);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/HelpPage.css",
    "content": ".help-page h1,\n.help-page .h1,\n.help-page h2,\n.help-page .h2,\n.help-page h3,\n.help-page .h3,\n#body.help-page,\n.help-page-table th,\n.help-page-table pre,\n.help-page-table p {\n    font-family: \"Segoe UI Light\", Frutiger, \"Frutiger Linotype\", \"Dejavu Sans\", \"Helvetica Neue\", Arial, sans-serif;\n}\n\n.help-page pre.wrapped {\n    white-space: -moz-pre-wrap;\n    white-space: -pre-wrap;\n    white-space: -o-pre-wrap;\n    white-space: pre-wrap;\n}\n\n.help-page .warning-message-container {\n    margin-top: 20px;\n    padding: 0 10px;\n    color: #525252;\n    background: #EFDCA9; \n    border: 1px solid #CCCCCC;\n}\n\n.help-page-table {\n    width: 100%;\n    border-collapse: collapse;\n    text-align: left;\n    margin: 0px 0px 20px 0px;\n    border-top: 1px solid #D4D4D4;\n}\n\n.help-page-table th {\n    text-align: left;\n    font-weight: bold;\n    border-bottom: 1px solid #D4D4D4;\n    padding: 5px 6px 5px 6px;\n}\n\n.help-page-table td {\n    border-bottom: 1px solid #D4D4D4;\n    padding: 10px 8px 10px 8px;\n    vertical-align: top;\n}\n\n.help-page-table pre,\n.help-page-table p {\n    margin: 0px;\n    padding: 0px;\n    font-family: inherit;\n    font-size: 100%;\n}\n\n.help-page-table tbody tr:hover td {\n    background-color: #F3F3F3;\n}\n\n.help-page a:hover {\n    background-color: transparent;\n}\n\n.help-page .sample-header {\n    border: 2px solid #D4D4D4;\n    background: #00497E;\n    color: #FFFFFF;\n    padding: 8px 15px;\n    border-bottom: none;\n    display: inline-block;\n    margin: 10px 0px 0px 0px;\n}\n\n.help-page .sample-content {\n    display: block;\n    border-width: 0;\n    padding: 15px 20px;\n    background: #FFFFFF;\n    border: 2px solid #D4D4D4;\n    margin: 0px 0px 10px 0px;\n}\n\n.help-page .api-name {\n    width: 40%;\n}\n\n.help-page .api-documentation {\n    width: 60%;\n}\n\n.help-page .parameter-name {\n    width: 20%;\n}\n\n.help-page .parameter-documentation {\n    width: 40%;\n}\n\n.help-page .parameter-type {\n    width: 20%;\n}\n\n.help-page .parameter-annotations {\n    width: 20%;\n}\n\n.help-page h1,\n.help-page .h1 {\n    font-size: 36px;\n    line-height: normal;\n}\n\n.help-page h2,\n.help-page .h2 {\n    font-size: 24px;\n}\n\n.help-page h3,\n.help-page .h3 {\n    font-size: 20px;\n}\n\n#body.help-page {\n    font-size: 14px;\n    line-height: 143%;\n    color: #333;\n}\n\n.help-page a {\n    color: #0000EE;\n    text-decoration: none;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/HelpPageAreaRegistration.cs",
    "content": "using System.Web.Http;\nusing System.Web.Mvc;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    public class HelpPageAreaRegistration : AreaRegistration\n    {\n        public override string AreaName\n        {\n            get\n            {\n                return \"HelpPage\";\n            }\n        }\n\n        public override void RegisterArea(AreaRegistrationContext context)\n        {\n            context.MapRoute(\n                \"HelpPage_Default\",\n                \"Help/{action}/{apiId}\",\n                new { controller = \"Help\", action = \"Index\", apiId = UrlParameter.Optional });\n\n            HelpPageConfig.Register(GlobalConfiguration.Configuration);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/HelpPageConfigurationExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Web.Http;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.Description;\nusing AccountActivityDemo.Areas.HelpPage.ModelDescriptions;\nusing AccountActivityDemo.Areas.HelpPage.Models;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    public static class HelpPageConfigurationExtensions\n    {\n        private const string ApiModelPrefix = \"MS_HelpPageApiModel_\";\n\n        /// <summary>\n        /// Sets the documentation provider for help page.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"documentationProvider\">The documentation provider.</param>\n        public static void SetDocumentationProvider(this HttpConfiguration config, IDocumentationProvider documentationProvider)\n        {\n            config.Services.Replace(typeof(IDocumentationProvider), documentationProvider);\n        }\n\n        /// <summary>\n        /// Sets the objects that will be used by the formatters to produce sample requests/responses.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sampleObjects\">The sample objects.</param>\n        public static void SetSampleObjects(this HttpConfiguration config, IDictionary<Type, object> sampleObjects)\n        {\n            config.GetHelpPageSampleGenerator().SampleObjects = sampleObjects;\n        }\n\n        /// <summary>\n        /// Sets the sample request directly for the specified media type and action.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample request.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, new[] { \"*\" }), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample request directly for the specified media type and action with parameters.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample request.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetSampleRequest(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Request, controllerName, actionName, parameterNames), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample request directly for the specified media type of the action.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample response.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, new[] { \"*\" }), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample response directly for the specified media type of the action with specific parameters.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample response.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetSampleResponse(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, SampleDirection.Response, controllerName, actionName, parameterNames), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample directly for all actions with the specified media type.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        public static void SetSampleForMediaType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType), sample);\n        }\n\n        /// <summary>\n        /// Sets the sample directly for all actions with the specified type and media type.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sample\">The sample.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"type\">The parameter type or return type of an action.</param>\n        public static void SetSampleForType(this HttpConfiguration config, object sample, MediaTypeHeaderValue mediaType, Type type)\n        {\n            config.GetHelpPageSampleGenerator().ActionSamples.Add(new HelpPageSampleKey(mediaType, type), sample);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> passed to the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate request samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, new[] { \"*\" }), type);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> passed to the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate request samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetActualRequestType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Request, controllerName, actionName, parameterNames), type);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> returned as part of the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate response samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, new[] { \"*\" }), type);\n        }\n\n        /// <summary>\n        /// Specifies the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> returned as part of the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// The help page will use this information to produce more accurate response samples.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public static void SetActualResponseType(this HttpConfiguration config, Type type, string controllerName, string actionName, params string[] parameterNames)\n        {\n            config.GetHelpPageSampleGenerator().ActualHttpMessageTypes.Add(new HelpPageSampleKey(SampleDirection.Response, controllerName, actionName, parameterNames), type);\n        }\n\n        /// <summary>\n        /// Gets the help page sample generator.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <returns>The help page sample generator.</returns>\n        public static HelpPageSampleGenerator GetHelpPageSampleGenerator(this HttpConfiguration config)\n        {\n            return (HelpPageSampleGenerator)config.Properties.GetOrAdd(\n                typeof(HelpPageSampleGenerator),\n                k => new HelpPageSampleGenerator());\n        }\n\n        /// <summary>\n        /// Sets the help page sample generator.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"sampleGenerator\">The help page sample generator.</param>\n        public static void SetHelpPageSampleGenerator(this HttpConfiguration config, HelpPageSampleGenerator sampleGenerator)\n        {\n            config.Properties.AddOrUpdate(\n                typeof(HelpPageSampleGenerator),\n                k => sampleGenerator,\n                (k, o) => sampleGenerator);\n        }\n\n        /// <summary>\n        /// Gets the model description generator.\n        /// </summary>\n        /// <param name=\"config\">The configuration.</param>\n        /// <returns>The <see cref=\"ModelDescriptionGenerator\"/></returns>\n        public static ModelDescriptionGenerator GetModelDescriptionGenerator(this HttpConfiguration config)\n        {\n            return (ModelDescriptionGenerator)config.Properties.GetOrAdd(\n                typeof(ModelDescriptionGenerator),\n                k => InitializeModelDescriptionGenerator(config));\n        }\n\n        /// <summary>\n        /// Gets the model that represents an API displayed on the help page. The model is initialized on the first call and cached for subsequent calls.\n        /// </summary>\n        /// <param name=\"config\">The <see cref=\"HttpConfiguration\"/>.</param>\n        /// <param name=\"apiDescriptionId\">The <see cref=\"ApiDescription\"/> ID.</param>\n        /// <returns>\n        /// An <see cref=\"HelpPageApiModel\"/>\n        /// </returns>\n        public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)\n        {\n            object model;\n            string modelId = ApiModelPrefix + apiDescriptionId;\n            if (!config.Properties.TryGetValue(modelId, out model))\n            {\n                Collection<ApiDescription> apiDescriptions = config.Services.GetApiExplorer().ApiDescriptions;\n                ApiDescription apiDescription = apiDescriptions.FirstOrDefault(api => String.Equals(api.GetFriendlyId(), apiDescriptionId, StringComparison.OrdinalIgnoreCase));\n                if (apiDescription != null)\n                {\n                    model = GenerateApiModel(apiDescription, config);\n                    config.Properties.TryAdd(modelId, model);\n                }\n            }\n\n            return (HelpPageApiModel)model;\n        }\n\n        private static HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HttpConfiguration config)\n        {\n            HelpPageApiModel apiModel = new HelpPageApiModel()\n            {\n                ApiDescription = apiDescription,\n            };\n\n            ModelDescriptionGenerator modelGenerator = config.GetModelDescriptionGenerator();\n            HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();\n            GenerateUriParameters(apiModel, modelGenerator);\n            GenerateRequestModelDescription(apiModel, modelGenerator, sampleGenerator);\n            GenerateResourceDescription(apiModel, modelGenerator);\n            GenerateSamples(apiModel, sampleGenerator);\n\n            return apiModel;\n        }\n\n        private static void GenerateUriParameters(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)\n        {\n            ApiDescription apiDescription = apiModel.ApiDescription;\n            foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)\n            {\n                if (apiParameter.Source == ApiParameterSource.FromUri)\n                {\n                    HttpParameterDescriptor parameterDescriptor = apiParameter.ParameterDescriptor;\n                    Type parameterType = null;\n                    ModelDescription typeDescription = null;\n                    ComplexTypeModelDescription complexTypeDescription = null;\n                    if (parameterDescriptor != null)\n                    {\n                        parameterType = parameterDescriptor.ParameterType;\n                        typeDescription = modelGenerator.GetOrCreateModelDescription(parameterType);\n                        complexTypeDescription = typeDescription as ComplexTypeModelDescription;\n                    }\n\n                    // Example:\n                    // [TypeConverter(typeof(PointConverter))]\n                    // public class Point\n                    // {\n                    //     public Point(int x, int y)\n                    //     {\n                    //         X = x;\n                    //         Y = y;\n                    //     }\n                    //     public int X { get; set; }\n                    //     public int Y { get; set; }\n                    // }\n                    // Class Point is bindable with a TypeConverter, so Point will be added to UriParameters collection.\n                    // \n                    // public class Point\n                    // {\n                    //     public int X { get; set; }\n                    //     public int Y { get; set; }\n                    // }\n                    // Regular complex class Point will have properties X and Y added to UriParameters collection.\n                    if (complexTypeDescription != null\n                        && !IsBindableWithTypeConverter(parameterType))\n                    {\n                        foreach (ParameterDescription uriParameter in complexTypeDescription.Properties)\n                        {\n                            apiModel.UriParameters.Add(uriParameter);\n                        }\n                    }\n                    else if (parameterDescriptor != null)\n                    {\n                        ParameterDescription uriParameter =\n                            AddParameterDescription(apiModel, apiParameter, typeDescription);\n\n                        if (!parameterDescriptor.IsOptional)\n                        {\n                            uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = \"Required\" });\n                        }\n\n                        object defaultValue = parameterDescriptor.DefaultValue;\n                        if (defaultValue != null)\n                        {\n                            uriParameter.Annotations.Add(new ParameterAnnotation() { Documentation = \"Default value is \" + Convert.ToString(defaultValue, CultureInfo.InvariantCulture) });\n                        }\n                    }\n                    else\n                    {\n                        Debug.Assert(parameterDescriptor == null);\n\n                        // If parameterDescriptor is null, this is an undeclared route parameter which only occurs\n                        // when source is FromUri. Ignored in request model and among resource parameters but listed\n                        // as a simple string here.\n                        ModelDescription modelDescription = modelGenerator.GetOrCreateModelDescription(typeof(string));\n                        AddParameterDescription(apiModel, apiParameter, modelDescription);\n                    }\n                }\n            }\n        }\n\n        private static bool IsBindableWithTypeConverter(Type parameterType)\n        {\n            if (parameterType == null)\n            {\n                return false;\n            }\n\n            return TypeDescriptor.GetConverter(parameterType).CanConvertFrom(typeof(string));\n        }\n\n        private static ParameterDescription AddParameterDescription(HelpPageApiModel apiModel,\n            ApiParameterDescription apiParameter, ModelDescription typeDescription)\n        {\n            ParameterDescription parameterDescription = new ParameterDescription\n            {\n                Name = apiParameter.Name,\n                Documentation = apiParameter.Documentation,\n                TypeDescription = typeDescription,\n            };\n\n            apiModel.UriParameters.Add(parameterDescription);\n            return parameterDescription;\n        }\n\n        private static void GenerateRequestModelDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator, HelpPageSampleGenerator sampleGenerator)\n        {\n            ApiDescription apiDescription = apiModel.ApiDescription;\n            foreach (ApiParameterDescription apiParameter in apiDescription.ParameterDescriptions)\n            {\n                if (apiParameter.Source == ApiParameterSource.FromBody)\n                {\n                    Type parameterType = apiParameter.ParameterDescriptor.ParameterType;\n                    apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);\n                    apiModel.RequestDocumentation = apiParameter.Documentation;\n                }\n                else if (apiParameter.ParameterDescriptor != null &&\n                    apiParameter.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage))\n                {\n                    Type parameterType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);\n\n                    if (parameterType != null)\n                    {\n                        apiModel.RequestModelDescription = modelGenerator.GetOrCreateModelDescription(parameterType);\n                    }\n                }\n            }\n        }\n\n        private static void GenerateResourceDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)\n        {\n            ResponseDescription response = apiModel.ApiDescription.ResponseDescription;\n            Type responseType = response.ResponseType ?? response.DeclaredType;\n            if (responseType != null && responseType != typeof(void))\n            {\n                apiModel.ResourceDescription = modelGenerator.GetOrCreateModelDescription(responseType);\n            }\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"The exception is recorded as ErrorMessages.\")]\n        private static void GenerateSamples(HelpPageApiModel apiModel, HelpPageSampleGenerator sampleGenerator)\n        {\n            try\n            {\n                foreach (var item in sampleGenerator.GetSampleRequests(apiModel.ApiDescription))\n                {\n                    apiModel.SampleRequests.Add(item.Key, item.Value);\n                    LogInvalidSampleAsError(apiModel, item.Value);\n                }\n\n                foreach (var item in sampleGenerator.GetSampleResponses(apiModel.ApiDescription))\n                {\n                    apiModel.SampleResponses.Add(item.Key, item.Value);\n                    LogInvalidSampleAsError(apiModel, item.Value);\n                }\n            }\n            catch (Exception e)\n            {\n                apiModel.ErrorMessages.Add(String.Format(CultureInfo.CurrentCulture,\n                    \"An exception has occurred while generating the sample. Exception message: {0}\",\n                    HelpPageSampleGenerator.UnwrapException(e).Message));\n            }\n        }\n\n        private static bool TryGetResourceParameter(ApiDescription apiDescription, HttpConfiguration config, out ApiParameterDescription parameterDescription, out Type resourceType)\n        {\n            parameterDescription = apiDescription.ParameterDescriptions.FirstOrDefault(\n                p => p.Source == ApiParameterSource.FromBody ||\n                    (p.ParameterDescriptor != null && p.ParameterDescriptor.ParameterType == typeof(HttpRequestMessage)));\n\n            if (parameterDescription == null)\n            {\n                resourceType = null;\n                return false;\n            }\n\n            resourceType = parameterDescription.ParameterDescriptor.ParameterType;\n\n            if (resourceType == typeof(HttpRequestMessage))\n            {\n                HelpPageSampleGenerator sampleGenerator = config.GetHelpPageSampleGenerator();\n                resourceType = sampleGenerator.ResolveHttpRequestMessageType(apiDescription);\n            }\n\n            if (resourceType == null)\n            {\n                parameterDescription = null;\n                return false;\n            }\n\n            return true;\n        }\n\n        private static ModelDescriptionGenerator InitializeModelDescriptionGenerator(HttpConfiguration config)\n        {\n            ModelDescriptionGenerator modelGenerator = new ModelDescriptionGenerator(config);\n            Collection<ApiDescription> apis = config.Services.GetApiExplorer().ApiDescriptions;\n            foreach (ApiDescription api in apis)\n            {\n                ApiParameterDescription parameterDescription;\n                Type parameterType;\n                if (TryGetResourceParameter(api, config, out parameterDescription, out parameterType))\n                {\n                    modelGenerator.GetOrCreateModelDescription(parameterType);\n                }\n            }\n            return modelGenerator;\n        }\n\n        private static void LogInvalidSampleAsError(HelpPageApiModel apiModel, object sample)\n        {\n            InvalidSample invalidSample = sample as InvalidSample;\n            if (invalidSample != null)\n            {\n                apiModel.ErrorMessages.Add(invalidSample.ErrorMessage);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/CollectionModelDescription.cs",
    "content": "namespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class CollectionModelDescription : ModelDescription\n    {\n        public ModelDescription ElementDescription { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ComplexTypeModelDescription.cs",
    "content": "using System.Collections.ObjectModel;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class ComplexTypeModelDescription : ModelDescription\n    {\n        public ComplexTypeModelDescription()\n        {\n            Properties = new Collection<ParameterDescription>();\n        }\n\n        public Collection<ParameterDescription> Properties { get; private set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/DictionaryModelDescription.cs",
    "content": "namespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class DictionaryModelDescription : KeyValuePairModelDescription\n    {\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/EnumTypeModelDescription.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class EnumTypeModelDescription : ModelDescription\n    {\n        public EnumTypeModelDescription()\n        {\n            Values = new Collection<EnumValueDescription>();\n        }\n\n        public Collection<EnumValueDescription> Values { get; private set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/EnumValueDescription.cs",
    "content": "namespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class EnumValueDescription\n    {\n        public string Documentation { get; set; }\n\n        public string Name { get; set; }\n\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/IModelDocumentationProvider.cs",
    "content": "using System;\nusing System.Reflection;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public interface IModelDocumentationProvider\n    {\n        string GetDocumentation(MemberInfo member);\n\n        string GetDocumentation(Type type);\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/KeyValuePairModelDescription.cs",
    "content": "namespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class KeyValuePairModelDescription : ModelDescription\n    {\n        public ModelDescription KeyModelDescription { get; set; }\n\n        public ModelDescription ValueModelDescription { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ModelDescription.cs",
    "content": "using System;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Describes a type model.\n    /// </summary>\n    public abstract class ModelDescription\n    {\n        public string Documentation { get; set; }\n\n        public Type ModelType { get; set; }\n\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ModelDescriptionGenerator.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.ComponentModel.DataAnnotations;\nusing System.Globalization;\nusing System.Reflection;\nusing System.Runtime.Serialization;\nusing System.Web.Http;\nusing System.Web.Http.Description;\nusing System.Xml.Serialization;\nusing Newtonsoft.Json;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Generates model descriptions for given types.\n    /// </summary>\n    public class ModelDescriptionGenerator\n    {\n        // Modify this to support more data annotation attributes.\n        private readonly IDictionary<Type, Func<object, string>> AnnotationTextGenerator = new Dictionary<Type, Func<object, string>>\n        {\n            { typeof(RequiredAttribute), a => \"Required\" },\n            { typeof(RangeAttribute), a =>\n                {\n                    RangeAttribute range = (RangeAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Range: inclusive between {0} and {1}\", range.Minimum, range.Maximum);\n                }\n            },\n            { typeof(MaxLengthAttribute), a =>\n                {\n                    MaxLengthAttribute maxLength = (MaxLengthAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Max length: {0}\", maxLength.Length);\n                }\n            },\n            { typeof(MinLengthAttribute), a =>\n                {\n                    MinLengthAttribute minLength = (MinLengthAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Min length: {0}\", minLength.Length);\n                }\n            },\n            { typeof(StringLengthAttribute), a =>\n                {\n                    StringLengthAttribute strLength = (StringLengthAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"String length: inclusive between {0} and {1}\", strLength.MinimumLength, strLength.MaximumLength);\n                }\n            },\n            { typeof(DataTypeAttribute), a =>\n                {\n                    DataTypeAttribute dataType = (DataTypeAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Data type: {0}\", dataType.CustomDataType ?? dataType.DataType.ToString());\n                }\n            },\n            { typeof(RegularExpressionAttribute), a =>\n                {\n                    RegularExpressionAttribute regularExpression = (RegularExpressionAttribute)a;\n                    return String.Format(CultureInfo.CurrentCulture, \"Matching regular expression pattern: {0}\", regularExpression.Pattern);\n                }\n            },\n        };\n\n        // Modify this to add more default documentations.\n        private readonly IDictionary<Type, string> DefaultTypeDocumentation = new Dictionary<Type, string>\n        {\n            { typeof(Int16), \"integer\" },\n            { typeof(Int32), \"integer\" },\n            { typeof(Int64), \"integer\" },\n            { typeof(UInt16), \"unsigned integer\" },\n            { typeof(UInt32), \"unsigned integer\" },\n            { typeof(UInt64), \"unsigned integer\" },\n            { typeof(Byte), \"byte\" },\n            { typeof(Char), \"character\" },\n            { typeof(SByte), \"signed byte\" },\n            { typeof(Uri), \"URI\" },\n            { typeof(Single), \"decimal number\" },\n            { typeof(Double), \"decimal number\" },\n            { typeof(Decimal), \"decimal number\" },\n            { typeof(String), \"string\" },\n            { typeof(Guid), \"globally unique identifier\" },\n            { typeof(TimeSpan), \"time interval\" },\n            { typeof(DateTime), \"date\" },\n            { typeof(DateTimeOffset), \"date\" },\n            { typeof(Boolean), \"boolean\" },\n        };\n\n        private Lazy<IModelDocumentationProvider> _documentationProvider;\n\n        public ModelDescriptionGenerator(HttpConfiguration config)\n        {\n            if (config == null)\n            {\n                throw new ArgumentNullException(\"config\");\n            }\n\n            _documentationProvider = new Lazy<IModelDocumentationProvider>(() => config.Services.GetDocumentationProvider() as IModelDocumentationProvider);\n            GeneratedModels = new Dictionary<string, ModelDescription>(StringComparer.OrdinalIgnoreCase);\n        }\n\n        public Dictionary<string, ModelDescription> GeneratedModels { get; private set; }\n\n        private IModelDocumentationProvider DocumentationProvider\n        {\n            get\n            {\n                return _documentationProvider.Value;\n            }\n        }\n\n        public ModelDescription GetOrCreateModelDescription(Type modelType)\n        {\n            if (modelType == null)\n            {\n                throw new ArgumentNullException(\"modelType\");\n            }\n\n            Type underlyingType = Nullable.GetUnderlyingType(modelType);\n            if (underlyingType != null)\n            {\n                modelType = underlyingType;\n            }\n\n            ModelDescription modelDescription;\n            string modelName = ModelNameHelper.GetModelName(modelType);\n            if (GeneratedModels.TryGetValue(modelName, out modelDescription))\n            {\n                if (modelType != modelDescription.ModelType)\n                {\n                    throw new InvalidOperationException(\n                        String.Format(\n                            CultureInfo.CurrentCulture,\n                            \"A model description could not be created. Duplicate model name '{0}' was found for types '{1}' and '{2}'. \" +\n                            \"Use the [ModelName] attribute to change the model name for at least one of the types so that it has a unique name.\",\n                            modelName,\n                            modelDescription.ModelType.FullName,\n                            modelType.FullName));\n                }\n\n                return modelDescription;\n            }\n\n            if (DefaultTypeDocumentation.ContainsKey(modelType))\n            {\n                return GenerateSimpleTypeModelDescription(modelType);\n            }\n\n            if (modelType.IsEnum)\n            {\n                return GenerateEnumTypeModelDescription(modelType);\n            }\n\n            if (modelType.IsGenericType)\n            {\n                Type[] genericArguments = modelType.GetGenericArguments();\n\n                if (genericArguments.Length == 1)\n                {\n                    Type enumerableType = typeof(IEnumerable<>).MakeGenericType(genericArguments);\n                    if (enumerableType.IsAssignableFrom(modelType))\n                    {\n                        return GenerateCollectionModelDescription(modelType, genericArguments[0]);\n                    }\n                }\n                if (genericArguments.Length == 2)\n                {\n                    Type dictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments);\n                    if (dictionaryType.IsAssignableFrom(modelType))\n                    {\n                        return GenerateDictionaryModelDescription(modelType, genericArguments[0], genericArguments[1]);\n                    }\n\n                    Type keyValuePairType = typeof(KeyValuePair<,>).MakeGenericType(genericArguments);\n                    if (keyValuePairType.IsAssignableFrom(modelType))\n                    {\n                        return GenerateKeyValuePairModelDescription(modelType, genericArguments[0], genericArguments[1]);\n                    }\n                }\n            }\n\n            if (modelType.IsArray)\n            {\n                Type elementType = modelType.GetElementType();\n                return GenerateCollectionModelDescription(modelType, elementType);\n            }\n\n            if (modelType == typeof(NameValueCollection))\n            {\n                return GenerateDictionaryModelDescription(modelType, typeof(string), typeof(string));\n            }\n\n            if (typeof(IDictionary).IsAssignableFrom(modelType))\n            {\n                return GenerateDictionaryModelDescription(modelType, typeof(object), typeof(object));\n            }\n\n            if (typeof(IEnumerable).IsAssignableFrom(modelType))\n            {\n                return GenerateCollectionModelDescription(modelType, typeof(object));\n            }\n\n            return GenerateComplexTypeModelDescription(modelType);\n        }\n\n        // Change this to provide different name for the member.\n        private static string GetMemberName(MemberInfo member, bool hasDataContractAttribute)\n        {\n            JsonPropertyAttribute jsonProperty = member.GetCustomAttribute<JsonPropertyAttribute>();\n            if (jsonProperty != null && !String.IsNullOrEmpty(jsonProperty.PropertyName))\n            {\n                return jsonProperty.PropertyName;\n            }\n\n            if (hasDataContractAttribute)\n            {\n                DataMemberAttribute dataMember = member.GetCustomAttribute<DataMemberAttribute>();\n                if (dataMember != null && !String.IsNullOrEmpty(dataMember.Name))\n                {\n                    return dataMember.Name;\n                }\n            }\n\n            return member.Name;\n        }\n\n        private static bool ShouldDisplayMember(MemberInfo member, bool hasDataContractAttribute)\n        {\n            JsonIgnoreAttribute jsonIgnore = member.GetCustomAttribute<JsonIgnoreAttribute>();\n            XmlIgnoreAttribute xmlIgnore = member.GetCustomAttribute<XmlIgnoreAttribute>();\n            IgnoreDataMemberAttribute ignoreDataMember = member.GetCustomAttribute<IgnoreDataMemberAttribute>();\n            NonSerializedAttribute nonSerialized = member.GetCustomAttribute<NonSerializedAttribute>();\n            ApiExplorerSettingsAttribute apiExplorerSetting = member.GetCustomAttribute<ApiExplorerSettingsAttribute>();\n\n            bool hasMemberAttribute = member.DeclaringType.IsEnum ?\n                member.GetCustomAttribute<EnumMemberAttribute>() != null :\n                member.GetCustomAttribute<DataMemberAttribute>() != null;\n\n            // Display member only if all the followings are true:\n            // no JsonIgnoreAttribute\n            // no XmlIgnoreAttribute\n            // no IgnoreDataMemberAttribute\n            // no NonSerializedAttribute\n            // no ApiExplorerSettingsAttribute with IgnoreApi set to true\n            // no DataContractAttribute without DataMemberAttribute or EnumMemberAttribute\n            return jsonIgnore == null &&\n                xmlIgnore == null &&\n                ignoreDataMember == null &&\n                nonSerialized == null &&\n                (apiExplorerSetting == null || !apiExplorerSetting.IgnoreApi) &&\n                (!hasDataContractAttribute || hasMemberAttribute);\n        }\n\n        private string CreateDefaultDocumentation(Type type)\n        {\n            string documentation;\n            if (DefaultTypeDocumentation.TryGetValue(type, out documentation))\n            {\n                return documentation;\n            }\n            if (DocumentationProvider != null)\n            {\n                documentation = DocumentationProvider.GetDocumentation(type);\n            }\n\n            return documentation;\n        }\n\n        private void GenerateAnnotations(MemberInfo property, ParameterDescription propertyModel)\n        {\n            List<ParameterAnnotation> annotations = new List<ParameterAnnotation>();\n\n            IEnumerable<Attribute> attributes = property.GetCustomAttributes();\n            foreach (Attribute attribute in attributes)\n            {\n                Func<object, string> textGenerator;\n                if (AnnotationTextGenerator.TryGetValue(attribute.GetType(), out textGenerator))\n                {\n                    annotations.Add(\n                        new ParameterAnnotation\n                        {\n                            AnnotationAttribute = attribute,\n                            Documentation = textGenerator(attribute)\n                        });\n                }\n            }\n\n            // Rearrange the annotations\n            annotations.Sort((x, y) =>\n            {\n                // Special-case RequiredAttribute so that it shows up on top\n                if (x.AnnotationAttribute is RequiredAttribute)\n                {\n                    return -1;\n                }\n                if (y.AnnotationAttribute is RequiredAttribute)\n                {\n                    return 1;\n                }\n\n                // Sort the rest based on alphabetic order of the documentation\n                return String.Compare(x.Documentation, y.Documentation, StringComparison.OrdinalIgnoreCase);\n            });\n\n            foreach (ParameterAnnotation annotation in annotations)\n            {\n                propertyModel.Annotations.Add(annotation);\n            }\n        }\n\n        private CollectionModelDescription GenerateCollectionModelDescription(Type modelType, Type elementType)\n        {\n            ModelDescription collectionModelDescription = GetOrCreateModelDescription(elementType);\n            if (collectionModelDescription != null)\n            {\n                return new CollectionModelDescription\n                {\n                    Name = ModelNameHelper.GetModelName(modelType),\n                    ModelType = modelType,\n                    ElementDescription = collectionModelDescription\n                };\n            }\n\n            return null;\n        }\n\n        private ModelDescription GenerateComplexTypeModelDescription(Type modelType)\n        {\n            ComplexTypeModelDescription complexModelDescription = new ComplexTypeModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                Documentation = CreateDefaultDocumentation(modelType)\n            };\n\n            GeneratedModels.Add(complexModelDescription.Name, complexModelDescription);\n            bool hasDataContractAttribute = modelType.GetCustomAttribute<DataContractAttribute>() != null;\n            PropertyInfo[] properties = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n            foreach (PropertyInfo property in properties)\n            {\n                if (ShouldDisplayMember(property, hasDataContractAttribute))\n                {\n                    ParameterDescription propertyModel = new ParameterDescription\n                    {\n                        Name = GetMemberName(property, hasDataContractAttribute)\n                    };\n\n                    if (DocumentationProvider != null)\n                    {\n                        propertyModel.Documentation = DocumentationProvider.GetDocumentation(property);\n                    }\n\n                    GenerateAnnotations(property, propertyModel);\n                    complexModelDescription.Properties.Add(propertyModel);\n                    propertyModel.TypeDescription = GetOrCreateModelDescription(property.PropertyType);\n                }\n            }\n\n            FieldInfo[] fields = modelType.GetFields(BindingFlags.Public | BindingFlags.Instance);\n            foreach (FieldInfo field in fields)\n            {\n                if (ShouldDisplayMember(field, hasDataContractAttribute))\n                {\n                    ParameterDescription propertyModel = new ParameterDescription\n                    {\n                        Name = GetMemberName(field, hasDataContractAttribute)\n                    };\n\n                    if (DocumentationProvider != null)\n                    {\n                        propertyModel.Documentation = DocumentationProvider.GetDocumentation(field);\n                    }\n\n                    complexModelDescription.Properties.Add(propertyModel);\n                    propertyModel.TypeDescription = GetOrCreateModelDescription(field.FieldType);\n                }\n            }\n\n            return complexModelDescription;\n        }\n\n        private DictionaryModelDescription GenerateDictionaryModelDescription(Type modelType, Type keyType, Type valueType)\n        {\n            ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType);\n            ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType);\n\n            return new DictionaryModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                KeyModelDescription = keyModelDescription,\n                ValueModelDescription = valueModelDescription\n            };\n        }\n\n        private EnumTypeModelDescription GenerateEnumTypeModelDescription(Type modelType)\n        {\n            EnumTypeModelDescription enumDescription = new EnumTypeModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                Documentation = CreateDefaultDocumentation(modelType)\n            };\n            bool hasDataContractAttribute = modelType.GetCustomAttribute<DataContractAttribute>() != null;\n            foreach (FieldInfo field in modelType.GetFields(BindingFlags.Public | BindingFlags.Static))\n            {\n                if (ShouldDisplayMember(field, hasDataContractAttribute))\n                {\n                    EnumValueDescription enumValue = new EnumValueDescription\n                    {\n                        Name = field.Name,\n                        Value = field.GetRawConstantValue().ToString()\n                    };\n                    if (DocumentationProvider != null)\n                    {\n                        enumValue.Documentation = DocumentationProvider.GetDocumentation(field);\n                    }\n                    enumDescription.Values.Add(enumValue);\n                }\n            }\n            GeneratedModels.Add(enumDescription.Name, enumDescription);\n\n            return enumDescription;\n        }\n\n        private KeyValuePairModelDescription GenerateKeyValuePairModelDescription(Type modelType, Type keyType, Type valueType)\n        {\n            ModelDescription keyModelDescription = GetOrCreateModelDescription(keyType);\n            ModelDescription valueModelDescription = GetOrCreateModelDescription(valueType);\n\n            return new KeyValuePairModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                KeyModelDescription = keyModelDescription,\n                ValueModelDescription = valueModelDescription\n            };\n        }\n\n        private ModelDescription GenerateSimpleTypeModelDescription(Type modelType)\n        {\n            SimpleTypeModelDescription simpleModelDescription = new SimpleTypeModelDescription\n            {\n                Name = ModelNameHelper.GetModelName(modelType),\n                ModelType = modelType,\n                Documentation = CreateDefaultDocumentation(modelType)\n            };\n            GeneratedModels.Add(simpleModelDescription.Name, simpleModelDescription);\n\n            return simpleModelDescription;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ModelNameAttribute.cs",
    "content": "using System;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    /// <summary>\n    /// Use this attribute to change the name of the <see cref=\"ModelDescription\"/> generated for a type.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum, AllowMultiple = false, Inherited = false)]\n    public sealed class ModelNameAttribute : Attribute\n    {\n        public ModelNameAttribute(string name)\n        {\n            Name = name;\n        }\n\n        public string Name { get; private set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ModelNameHelper.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    internal static class ModelNameHelper\n    {\n        // Modify this to provide custom model name mapping.\n        public static string GetModelName(Type type)\n        {\n            ModelNameAttribute modelNameAttribute = type.GetCustomAttribute<ModelNameAttribute>();\n            if (modelNameAttribute != null && !String.IsNullOrEmpty(modelNameAttribute.Name))\n            {\n                return modelNameAttribute.Name;\n            }\n\n            string modelName = type.Name;\n            if (type.IsGenericType)\n            {\n                // Format the generic type name to something like: GenericOfAgurment1AndArgument2\n                Type genericType = type.GetGenericTypeDefinition();\n                Type[] genericArguments = type.GetGenericArguments();\n                string genericTypeName = genericType.Name;\n\n                // Trim the generic parameter counts from the name\n                genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`'));\n                string[] argumentTypeNames = genericArguments.Select(t => GetModelName(t)).ToArray();\n                modelName = String.Format(CultureInfo.InvariantCulture, \"{0}Of{1}\", genericTypeName, String.Join(\"And\", argumentTypeNames));\n            }\n\n            return modelName;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ParameterAnnotation.cs",
    "content": "using System;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class ParameterAnnotation\n    {\n        public Attribute AnnotationAttribute { get; set; }\n\n        public string Documentation { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/ParameterDescription.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class ParameterDescription\n    {\n        public ParameterDescription()\n        {\n            Annotations = new Collection<ParameterAnnotation>();\n        }\n\n        public Collection<ParameterAnnotation> Annotations { get; private set; }\n\n        public string Documentation { get; set; }\n\n        public string Name { get; set; }\n\n        public ModelDescription TypeDescription { get; set; }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/ModelDescriptions/SimpleTypeModelDescription.cs",
    "content": "namespace AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n{\n    public class SimpleTypeModelDescription : ModelDescription\n    {\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Models/HelpPageApiModel.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Net.Http.Headers;\nusing System.Web.Http.Description;\nusing AccountActivityDemo.Areas.HelpPage.ModelDescriptions;\n\nnamespace AccountActivityDemo.Areas.HelpPage.Models\n{\n    /// <summary>\n    /// The model that represents an API displayed on the help page.\n    /// </summary>\n    public class HelpPageApiModel\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"HelpPageApiModel\"/> class.\n        /// </summary>\n        public HelpPageApiModel()\n        {\n            UriParameters = new Collection<ParameterDescription>();\n            SampleRequests = new Dictionary<MediaTypeHeaderValue, object>();\n            SampleResponses = new Dictionary<MediaTypeHeaderValue, object>();\n            ErrorMessages = new Collection<string>();\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ApiDescription\"/> that describes the API.\n        /// </summary>\n        public ApiDescription ApiDescription { get; set; }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ParameterDescription\"/> collection that describes the URI parameters for the API.\n        /// </summary>\n        public Collection<ParameterDescription> UriParameters { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the documentation for the request.\n        /// </summary>\n        public string RequestDocumentation { get; set; }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ModelDescription\"/> that describes the request body.\n        /// </summary>\n        public ModelDescription RequestModelDescription { get; set; }\n\n        /// <summary>\n        /// Gets the request body parameter descriptions.\n        /// </summary>\n        public IList<ParameterDescription> RequestBodyParameters\n        {\n            get\n            {\n                return GetParameterDescriptions(RequestModelDescription);\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"ModelDescription\"/> that describes the resource.\n        /// </summary>\n        public ModelDescription ResourceDescription { get; set; }\n\n        /// <summary>\n        /// Gets the resource property descriptions.\n        /// </summary>\n        public IList<ParameterDescription> ResourceProperties\n        {\n            get\n            {\n                return GetParameterDescriptions(ResourceDescription);\n            }\n        }\n\n        /// <summary>\n        /// Gets the sample requests associated with the API.\n        /// </summary>\n        public IDictionary<MediaTypeHeaderValue, object> SampleRequests { get; private set; }\n\n        /// <summary>\n        /// Gets the sample responses associated with the API.\n        /// </summary>\n        public IDictionary<MediaTypeHeaderValue, object> SampleResponses { get; private set; }\n\n        /// <summary>\n        /// Gets the error messages associated with this model.\n        /// </summary>\n        public Collection<string> ErrorMessages { get; private set; }\n\n        private static IList<ParameterDescription> GetParameterDescriptions(ModelDescription modelDescription)\n        {\n            ComplexTypeModelDescription complexTypeModelDescription = modelDescription as ComplexTypeModelDescription;\n            if (complexTypeModelDescription != null)\n            {\n                return complexTypeModelDescription.Properties;\n            }\n\n            CollectionModelDescription collectionModelDescription = modelDescription as CollectionModelDescription;\n            if (collectionModelDescription != null)\n            {\n                complexTypeModelDescription = collectionModelDescription.ElementDescription as ComplexTypeModelDescription;\n                if (complexTypeModelDescription != null)\n                {\n                    return complexTypeModelDescription.Properties;\n                }\n            }\n\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/HelpPageSampleGenerator.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Net.Http.Formatting;\nusing System.Net.Http.Headers;\nusing System.Web.Http.Description;\nusing System.Xml.Linq;\nusing Newtonsoft.Json;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// This class will generate the samples for the help page.\n    /// </summary>\n    public class HelpPageSampleGenerator\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"HelpPageSampleGenerator\"/> class.\n        /// </summary>\n        public HelpPageSampleGenerator()\n        {\n            ActualHttpMessageTypes = new Dictionary<HelpPageSampleKey, Type>();\n            ActionSamples = new Dictionary<HelpPageSampleKey, object>();\n            SampleObjects = new Dictionary<Type, object>();\n            SampleObjectFactories = new List<Func<HelpPageSampleGenerator, Type, object>>\n            {\n                DefaultSampleObjectFactory,\n            };\n        }\n\n        /// <summary>\n        /// Gets CLR types that are used as the content of <see cref=\"HttpRequestMessage\"/> or <see cref=\"HttpResponseMessage\"/>.\n        /// </summary>\n        public IDictionary<HelpPageSampleKey, Type> ActualHttpMessageTypes { get; internal set; }\n\n        /// <summary>\n        /// Gets the objects that are used directly as samples for certain actions.\n        /// </summary>\n        public IDictionary<HelpPageSampleKey, object> ActionSamples { get; internal set; }\n\n        /// <summary>\n        /// Gets the objects that are serialized as samples by the supported formatters.\n        /// </summary>\n        public IDictionary<Type, object> SampleObjects { get; internal set; }\n\n        /// <summary>\n        /// Gets factories for the objects that the supported formatters will serialize as samples. Processed in order,\n        /// stopping when the factory successfully returns a non-<see langref=\"null\"/> object.\n        /// </summary>\n        /// <remarks>\n        /// Collection includes just <see cref=\"ObjectGenerator.GenerateObject(Type)\"/> initially. Use\n        /// <code>SampleObjectFactories.Insert(0, func)</code> to provide an override and\n        /// <code>SampleObjectFactories.Add(func)</code> to provide a fallback.</remarks>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1006:DoNotNestGenericTypesInMemberSignatures\",\n            Justification = \"This is an appropriate nesting of generic types\")]\n        public IList<Func<HelpPageSampleGenerator, Type, object>> SampleObjectFactories { get; private set; }\n\n        /// <summary>\n        /// Gets the request body samples for a given <see cref=\"ApiDescription\"/>.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The samples keyed by media type.</returns>\n        public IDictionary<MediaTypeHeaderValue, object> GetSampleRequests(ApiDescription api)\n        {\n            return GetSample(api, SampleDirection.Request);\n        }\n\n        /// <summary>\n        /// Gets the response body samples for a given <see cref=\"ApiDescription\"/>.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The samples keyed by media type.</returns>\n        public IDictionary<MediaTypeHeaderValue, object> GetSampleResponses(ApiDescription api)\n        {\n            return GetSample(api, SampleDirection.Response);\n        }\n\n        /// <summary>\n        /// Gets the request or response body samples.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <param name=\"sampleDirection\">The value indicating whether the sample is for a request or for a response.</param>\n        /// <returns>The samples keyed by media type.</returns>\n        public virtual IDictionary<MediaTypeHeaderValue, object> GetSample(ApiDescription api, SampleDirection sampleDirection)\n        {\n            if (api == null)\n            {\n                throw new ArgumentNullException(\"api\");\n            }\n            string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName;\n            string actionName = api.ActionDescriptor.ActionName;\n            IEnumerable<string> parameterNames = api.ParameterDescriptions.Select(p => p.Name);\n            Collection<MediaTypeFormatter> formatters;\n            Type type = ResolveType(api, controllerName, actionName, parameterNames, sampleDirection, out formatters);\n            var samples = new Dictionary<MediaTypeHeaderValue, object>();\n\n            // Use the samples provided directly for actions\n            var actionSamples = GetAllActionSamples(controllerName, actionName, parameterNames, sampleDirection);\n            foreach (var actionSample in actionSamples)\n            {\n                samples.Add(actionSample.Key.MediaType, WrapSampleIfString(actionSample.Value));\n            }\n\n            // Do the sample generation based on formatters only if an action doesn't return an HttpResponseMessage.\n            // Here we cannot rely on formatters because we don't know what's in the HttpResponseMessage, it might not even use formatters.\n            if (type != null && !typeof(HttpResponseMessage).IsAssignableFrom(type))\n            {\n                object sampleObject = GetSampleObject(type);\n                foreach (var formatter in formatters)\n                {\n                    foreach (MediaTypeHeaderValue mediaType in formatter.SupportedMediaTypes)\n                    {\n                        if (!samples.ContainsKey(mediaType))\n                        {\n                            object sample = GetActionSample(controllerName, actionName, parameterNames, type, formatter, mediaType, sampleDirection);\n\n                            // If no sample found, try generate sample using formatter and sample object\n                            if (sample == null && sampleObject != null)\n                            {\n                                sample = WriteSampleObjectUsingFormatter(formatter, sampleObject, type, mediaType);\n                            }\n\n                            samples.Add(mediaType, WrapSampleIfString(sample));\n                        }\n                    }\n                }\n            }\n\n            return samples;\n        }\n\n        /// <summary>\n        /// Search for samples that are provided directly through <see cref=\"ActionSamples\"/>.\n        /// </summary>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        /// <param name=\"type\">The CLR type.</param>\n        /// <param name=\"formatter\">The formatter.</param>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"sampleDirection\">The value indicating whether the sample is for a request or for a response.</param>\n        /// <returns>The sample that matches the parameters.</returns>\n        public virtual object GetActionSample(string controllerName, string actionName, IEnumerable<string> parameterNames, Type type, MediaTypeFormatter formatter, MediaTypeHeaderValue mediaType, SampleDirection sampleDirection)\n        {\n            object sample;\n\n            // First, try to get the sample provided for the specified mediaType, sampleDirection, controllerName, actionName and parameterNames.\n            // If not found, try to get the sample provided for the specified mediaType, sampleDirection, controllerName and actionName regardless of the parameterNames.\n            // If still not found, try to get the sample provided for the specified mediaType and type.\n            // Finally, try to get the sample provided for the specified mediaType.\n            if (ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, parameterNames), out sample) ||\n                ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, sampleDirection, controllerName, actionName, new[] { \"*\" }), out sample) ||\n                ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType, type), out sample) ||\n                ActionSamples.TryGetValue(new HelpPageSampleKey(mediaType), out sample))\n            {\n                return sample;\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Gets the sample object that will be serialized by the formatters. \n        /// First, it will look at the <see cref=\"SampleObjects\"/>. If no sample object is found, it will try to create\n        /// one using <see cref=\"DefaultSampleObjectFactory\"/> (which wraps an <see cref=\"ObjectGenerator\"/>) and other\n        /// factories in <see cref=\"SampleObjectFactories\"/>.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>The sample object.</returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\",\n            Justification = \"Even if all items in SampleObjectFactories throw, problem will be visible as missing sample.\")]\n        public virtual object GetSampleObject(Type type)\n        {\n            object sampleObject;\n\n            if (!SampleObjects.TryGetValue(type, out sampleObject))\n            {\n                // No specific object available, try our factories.\n                foreach (Func<HelpPageSampleGenerator, Type, object> factory in SampleObjectFactories)\n                {\n                    if (factory == null)\n                    {\n                        continue;\n                    }\n\n                    try\n                    {\n                        sampleObject = factory(this, type);\n                        if (sampleObject != null)\n                        {\n                            break;\n                        }\n                    }\n                    catch\n                    {\n                        // Ignore any problems encountered in the factory; go on to the next one (if any).\n                    }\n                }\n            }\n\n            return sampleObject;\n        }\n\n        /// <summary>\n        /// Resolves the actual type of <see cref=\"System.Net.Http.ObjectContent{T}\"/> passed to the <see cref=\"System.Net.Http.HttpRequestMessage\"/> in an action.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <returns>The type.</returns>\n        public virtual Type ResolveHttpRequestMessageType(ApiDescription api)\n        {\n            string controllerName = api.ActionDescriptor.ControllerDescriptor.ControllerName;\n            string actionName = api.ActionDescriptor.ActionName;\n            IEnumerable<string> parameterNames = api.ParameterDescriptions.Select(p => p.Name);\n            Collection<MediaTypeFormatter> formatters;\n            return ResolveType(api, controllerName, actionName, parameterNames, SampleDirection.Request, out formatters);\n        }\n\n        /// <summary>\n        /// Resolves the type of the action parameter or return value when <see cref=\"HttpRequestMessage\"/> or <see cref=\"HttpResponseMessage\"/> is used.\n        /// </summary>\n        /// <param name=\"api\">The <see cref=\"ApiDescription\"/>.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        /// <param name=\"sampleDirection\">The value indicating whether the sample is for a request or a response.</param>\n        /// <param name=\"formatters\">The formatters.</param>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1021:AvoidOutParameters\", Justification = \"This is only used in advanced scenarios.\")]\n        public virtual Type ResolveType(ApiDescription api, string controllerName, string actionName, IEnumerable<string> parameterNames, SampleDirection sampleDirection, out Collection<MediaTypeFormatter> formatters)\n        {\n            if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))\n            {\n                throw new InvalidEnumArgumentException(\"sampleDirection\", (int)sampleDirection, typeof(SampleDirection));\n            }\n            if (api == null)\n            {\n                throw new ArgumentNullException(\"api\");\n            }\n            Type type;\n            if (ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, parameterNames), out type) ||\n                ActualHttpMessageTypes.TryGetValue(new HelpPageSampleKey(sampleDirection, controllerName, actionName, new[] { \"*\" }), out type))\n            {\n                // Re-compute the supported formatters based on type\n                Collection<MediaTypeFormatter> newFormatters = new Collection<MediaTypeFormatter>();\n                foreach (var formatter in api.ActionDescriptor.Configuration.Formatters)\n                {\n                    if (IsFormatSupported(sampleDirection, formatter, type))\n                    {\n                        newFormatters.Add(formatter);\n                    }\n                }\n                formatters = newFormatters;\n            }\n            else\n            {\n                switch (sampleDirection)\n                {\n                    case SampleDirection.Request:\n                        ApiParameterDescription requestBodyParameter = api.ParameterDescriptions.FirstOrDefault(p => p.Source == ApiParameterSource.FromBody);\n                        type = requestBodyParameter == null ? null : requestBodyParameter.ParameterDescriptor.ParameterType;\n                        formatters = api.SupportedRequestBodyFormatters;\n                        break;\n                    case SampleDirection.Response:\n                    default:\n                        type = api.ResponseDescription.ResponseType ?? api.ResponseDescription.DeclaredType;\n                        formatters = api.SupportedResponseFormatters;\n                        break;\n                }\n            }\n\n            return type;\n        }\n\n        /// <summary>\n        /// Writes the sample object using formatter.\n        /// </summary>\n        /// <param name=\"formatter\">The formatter.</param>\n        /// <param name=\"value\">The value.</param>\n        /// <param name=\"type\">The type.</param>\n        /// <param name=\"mediaType\">Type of the media.</param>\n        /// <returns></returns>\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"The exception is recorded as InvalidSample.\")]\n        public virtual object WriteSampleObjectUsingFormatter(MediaTypeFormatter formatter, object value, Type type, MediaTypeHeaderValue mediaType)\n        {\n            if (formatter == null)\n            {\n                throw new ArgumentNullException(\"formatter\");\n            }\n            if (mediaType == null)\n            {\n                throw new ArgumentNullException(\"mediaType\");\n            }\n\n            object sample = String.Empty;\n            MemoryStream ms = null;\n            HttpContent content = null;\n            try\n            {\n                if (formatter.CanWriteType(type))\n                {\n                    ms = new MemoryStream();\n                    content = new ObjectContent(type, value, formatter, mediaType);\n                    formatter.WriteToStreamAsync(type, value, ms, content, null).Wait();\n                    ms.Position = 0;\n                    StreamReader reader = new StreamReader(ms);\n                    string serializedSampleString = reader.ReadToEnd();\n                    if (mediaType.MediaType.ToUpperInvariant().Contains(\"XML\"))\n                    {\n                        serializedSampleString = TryFormatXml(serializedSampleString);\n                    }\n                    else if (mediaType.MediaType.ToUpperInvariant().Contains(\"JSON\"))\n                    {\n                        serializedSampleString = TryFormatJson(serializedSampleString);\n                    }\n\n                    sample = new TextSample(serializedSampleString);\n                }\n                else\n                {\n                    sample = new InvalidSample(String.Format(\n                        CultureInfo.CurrentCulture,\n                        \"Failed to generate the sample for media type '{0}'. Cannot use formatter '{1}' to write type '{2}'.\",\n                        mediaType,\n                        formatter.GetType().Name,\n                        type.Name));\n                }\n            }\n            catch (Exception e)\n            {\n                sample = new InvalidSample(String.Format(\n                    CultureInfo.CurrentCulture,\n                    \"An exception has occurred while using the formatter '{0}' to generate sample for media type '{1}'. Exception message: {2}\",\n                    formatter.GetType().Name,\n                    mediaType.MediaType,\n                    UnwrapException(e).Message));\n            }\n            finally\n            {\n                if (ms != null)\n                {\n                    ms.Dispose();\n                }\n                if (content != null)\n                {\n                    content.Dispose();\n                }\n            }\n\n            return sample;\n        }\n\n        internal static Exception UnwrapException(Exception exception)\n        {\n            AggregateException aggregateException = exception as AggregateException;\n            if (aggregateException != null)\n            {\n                return aggregateException.Flatten().InnerException;\n            }\n            return exception;\n        }\n\n        // Default factory for sample objects\n        private static object DefaultSampleObjectFactory(HelpPageSampleGenerator sampleGenerator, Type type)\n        {\n            // Try to create a default sample object\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            return objectGenerator.GenerateObject(type);\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"Handling the failure by returning the original string.\")]\n        private static string TryFormatJson(string str)\n        {\n            try\n            {\n                object parsedJson = JsonConvert.DeserializeObject(str);\n                return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);\n            }\n            catch\n            {\n                // can't parse JSON, return the original string\n                return str;\n            }\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"Handling the failure by returning the original string.\")]\n        private static string TryFormatXml(string str)\n        {\n            try\n            {\n                XDocument xml = XDocument.Parse(str);\n                return xml.ToString();\n            }\n            catch\n            {\n                // can't parse XML, return the original string\n                return str;\n            }\n        }\n\n        private static bool IsFormatSupported(SampleDirection sampleDirection, MediaTypeFormatter formatter, Type type)\n        {\n            switch (sampleDirection)\n            {\n                case SampleDirection.Request:\n                    return formatter.CanReadType(type);\n                case SampleDirection.Response:\n                    return formatter.CanWriteType(type);\n            }\n            return false;\n        }\n\n        private IEnumerable<KeyValuePair<HelpPageSampleKey, object>> GetAllActionSamples(string controllerName, string actionName, IEnumerable<string> parameterNames, SampleDirection sampleDirection)\n        {\n            HashSet<string> parameterNamesSet = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);\n            foreach (var sample in ActionSamples)\n            {\n                HelpPageSampleKey sampleKey = sample.Key;\n                if (String.Equals(controllerName, sampleKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&\n                    String.Equals(actionName, sampleKey.ActionName, StringComparison.OrdinalIgnoreCase) &&\n                    (sampleKey.ParameterNames.SetEquals(new[] { \"*\" }) || parameterNamesSet.SetEquals(sampleKey.ParameterNames)) &&\n                    sampleDirection == sampleKey.SampleDirection)\n                {\n                    yield return sample;\n                }\n            }\n        }\n\n        private static object WrapSampleIfString(object sample)\n        {\n            string stringSample = sample as string;\n            if (stringSample != null)\n            {\n                return new TextSample(stringSample);\n            }\n\n            return sample;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/HelpPageSampleKey.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Net.Http.Headers;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// This is used to identify the place where the sample should be applied.\n    /// </summary>\n    public class HelpPageSampleKey\n    {\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on media type.\n        /// </summary>\n        /// <param name=\"mediaType\">The media type.</param>\n        public HelpPageSampleKey(MediaTypeHeaderValue mediaType)\n        {\n            if (mediaType == null)\n            {\n                throw new ArgumentNullException(\"mediaType\");\n            }\n\n            ActionName = String.Empty;\n            ControllerName = String.Empty;\n            MediaType = mediaType;\n            ParameterNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on media type and CLR type.\n        /// </summary>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"type\">The CLR type.</param>\n        public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type)\n            : this(mediaType)\n        {\n            if (type == null)\n            {\n                throw new ArgumentNullException(\"type\");\n            }\n\n            ParameterType = type;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on <see cref=\"SampleDirection\"/>, controller name, action name and parameter names.\n        /// </summary>\n        /// <param name=\"sampleDirection\">The <see cref=\"SampleDirection\"/>.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public HelpPageSampleKey(SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)\n        {\n            if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))\n            {\n                throw new InvalidEnumArgumentException(\"sampleDirection\", (int)sampleDirection, typeof(SampleDirection));\n            }\n            if (controllerName == null)\n            {\n                throw new ArgumentNullException(\"controllerName\");\n            }\n            if (actionName == null)\n            {\n                throw new ArgumentNullException(\"actionName\");\n            }\n            if (parameterNames == null)\n            {\n                throw new ArgumentNullException(\"parameterNames\");\n            }\n\n            ControllerName = controllerName;\n            ActionName = actionName;\n            ParameterNames = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);\n            SampleDirection = sampleDirection;\n        }\n\n        /// <summary>\n        /// Creates a new <see cref=\"HelpPageSampleKey\"/> based on media type, <see cref=\"SampleDirection\"/>, controller name, action name and parameter names.\n        /// </summary>\n        /// <param name=\"mediaType\">The media type.</param>\n        /// <param name=\"sampleDirection\">The <see cref=\"SampleDirection\"/>.</param>\n        /// <param name=\"controllerName\">Name of the controller.</param>\n        /// <param name=\"actionName\">Name of the action.</param>\n        /// <param name=\"parameterNames\">The parameter names.</param>\n        public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)\n            : this(sampleDirection, controllerName, actionName, parameterNames)\n        {\n            if (mediaType == null)\n            {\n                throw new ArgumentNullException(\"mediaType\");\n            }\n\n            MediaType = mediaType;\n        }\n\n        /// <summary>\n        /// Gets the name of the controller.\n        /// </summary>\n        /// <value>\n        /// The name of the controller.\n        /// </value>\n        public string ControllerName { get; private set; }\n\n        /// <summary>\n        /// Gets the name of the action.\n        /// </summary>\n        /// <value>\n        /// The name of the action.\n        /// </value>\n        public string ActionName { get; private set; }\n\n        /// <summary>\n        /// Gets the media type.\n        /// </summary>\n        /// <value>\n        /// The media type.\n        /// </value>\n        public MediaTypeHeaderValue MediaType { get; private set; }\n\n        /// <summary>\n        /// Gets the parameter names.\n        /// </summary>\n        public HashSet<string> ParameterNames { get; private set; }\n\n        public Type ParameterType { get; private set; }\n\n        /// <summary>\n        /// Gets the <see cref=\"SampleDirection\"/>.\n        /// </summary>\n        public SampleDirection? SampleDirection { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            HelpPageSampleKey otherKey = obj as HelpPageSampleKey;\n            if (otherKey == null)\n            {\n                return false;\n            }\n\n            return String.Equals(ControllerName, otherKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&\n                String.Equals(ActionName, otherKey.ActionName, StringComparison.OrdinalIgnoreCase) &&\n                (MediaType == otherKey.MediaType || (MediaType != null && MediaType.Equals(otherKey.MediaType))) &&\n                ParameterType == otherKey.ParameterType &&\n                SampleDirection == otherKey.SampleDirection &&\n                ParameterNames.SetEquals(otherKey.ParameterNames);\n        }\n\n        public override int GetHashCode()\n        {\n            int hashCode = ControllerName.ToUpperInvariant().GetHashCode() ^ ActionName.ToUpperInvariant().GetHashCode();\n            if (MediaType != null)\n            {\n                hashCode ^= MediaType.GetHashCode();\n            }\n            if (SampleDirection != null)\n            {\n                hashCode ^= SampleDirection.GetHashCode();\n            }\n            if (ParameterType != null)\n            {\n                hashCode ^= ParameterType.GetHashCode();\n            }\n            foreach (string parameterName in ParameterNames)\n            {\n                hashCode ^= parameterName.ToUpperInvariant().GetHashCode();\n            }\n\n            return hashCode;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/ImageSample.cs",
    "content": "using System;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents an image sample on the help page. There's a display template named ImageSample associated with this class.\n    /// </summary>\n    public class ImageSample\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ImageSample\"/> class.\n        /// </summary>\n        /// <param name=\"src\">The URL of an image.</param>\n        public ImageSample(string src)\n        {\n            if (src == null)\n            {\n                throw new ArgumentNullException(\"src\");\n            }\n            Src = src;\n        }\n\n        public string Src { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            ImageSample other = obj as ImageSample;\n            return other != null && Src == other.Src;\n        }\n\n        public override int GetHashCode()\n        {\n            return Src.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return Src;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/InvalidSample.cs",
    "content": "using System;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents an invalid sample on the help page. There's a display template named InvalidSample associated with this class.\n    /// </summary>\n    public class InvalidSample\n    {\n        public InvalidSample(string errorMessage)\n        {\n            if (errorMessage == null)\n            {\n                throw new ArgumentNullException(\"errorMessage\");\n            }\n            ErrorMessage = errorMessage;\n        }\n\n        public string ErrorMessage { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            InvalidSample other = obj as InvalidSample;\n            return other != null && ErrorMessage == other.ErrorMessage;\n        }\n\n        public override int GetHashCode()\n        {\n            return ErrorMessage.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return ErrorMessage;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/ObjectGenerator.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// This class will create an object of a given type and populate it with sample data.\n    /// </summary>\n    public class ObjectGenerator\n    {\n        internal const int DefaultCollectionSize = 2;\n        private readonly SimpleTypeObjectGenerator SimpleObjectGenerator = new SimpleTypeObjectGenerator();\n\n        /// <summary>\n        /// Generates an object for a given type. The type needs to be public, have a public default constructor and settable public properties/fields. Currently it supports the following types:\n        /// Simple types: <see cref=\"int\"/>, <see cref=\"string\"/>, <see cref=\"Enum\"/>, <see cref=\"DateTime\"/>, <see cref=\"Uri\"/>, etc.\n        /// Complex types: POCO types.\n        /// Nullables: <see cref=\"Nullable{T}\"/>.\n        /// Arrays: arrays of simple types or complex types.\n        /// Key value pairs: <see cref=\"KeyValuePair{TKey,TValue}\"/>\n        /// Tuples: <see cref=\"Tuple{T1}\"/>, <see cref=\"Tuple{T1,T2}\"/>, etc\n        /// Dictionaries: <see cref=\"IDictionary{TKey,TValue}\"/> or anything deriving from <see cref=\"IDictionary{TKey,TValue}\"/>.\n        /// Collections: <see cref=\"IList{T}\"/>, <see cref=\"IEnumerable{T}\"/>, <see cref=\"ICollection{T}\"/>, <see cref=\"IList\"/>, <see cref=\"IEnumerable\"/>, <see cref=\"ICollection\"/> or anything deriving from <see cref=\"ICollection{T}\"/> or <see cref=\"IList\"/>.\n        /// Queryables: <see cref=\"IQueryable\"/>, <see cref=\"IQueryable{T}\"/>.\n        /// </summary>\n        /// <param name=\"type\">The type.</param>\n        /// <returns>An object of the given type.</returns>\n        public object GenerateObject(Type type)\n        {\n            return GenerateObject(type, new Dictionary<Type, object>());\n        }\n\n        [SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\", Justification = \"Here we just want to return null if anything goes wrong.\")]\n        private object GenerateObject(Type type, Dictionary<Type, object> createdObjectReferences)\n        {\n            try\n            {\n                if (SimpleTypeObjectGenerator.CanGenerateObject(type))\n                {\n                    return SimpleObjectGenerator.GenerateObject(type);\n                }\n\n                if (type.IsArray)\n                {\n                    return GenerateArray(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type.IsGenericType)\n                {\n                    return GenerateGenericType(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type == typeof(IDictionary))\n                {\n                    return GenerateDictionary(typeof(Hashtable), DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (typeof(IDictionary).IsAssignableFrom(type))\n                {\n                    return GenerateDictionary(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type == typeof(IList) ||\n                    type == typeof(IEnumerable) ||\n                    type == typeof(ICollection))\n                {\n                    return GenerateCollection(typeof(ArrayList), DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (typeof(IList).IsAssignableFrom(type))\n                {\n                    return GenerateCollection(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type == typeof(IQueryable))\n                {\n                    return GenerateQueryable(type, DefaultCollectionSize, createdObjectReferences);\n                }\n\n                if (type.IsEnum)\n                {\n                    return GenerateEnum(type);\n                }\n\n                if (type.IsPublic || type.IsNestedPublic)\n                {\n                    return GenerateComplexObject(type, createdObjectReferences);\n                }\n            }\n            catch\n            {\n                // Returns null if anything fails\n                return null;\n            }\n\n            return null;\n        }\n\n        private static object GenerateGenericType(Type type, int collectionSize, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type genericTypeDefinition = type.GetGenericTypeDefinition();\n            if (genericTypeDefinition == typeof(Nullable<>))\n            {\n                return GenerateNullable(type, createdObjectReferences);\n            }\n\n            if (genericTypeDefinition == typeof(KeyValuePair<,>))\n            {\n                return GenerateKeyValuePair(type, createdObjectReferences);\n            }\n\n            if (IsTuple(genericTypeDefinition))\n            {\n                return GenerateTuple(type, createdObjectReferences);\n            }\n\n            Type[] genericArguments = type.GetGenericArguments();\n            if (genericArguments.Length == 1)\n            {\n                if (genericTypeDefinition == typeof(IList<>) ||\n                    genericTypeDefinition == typeof(IEnumerable<>) ||\n                    genericTypeDefinition == typeof(ICollection<>))\n                {\n                    Type collectionType = typeof(List<>).MakeGenericType(genericArguments);\n                    return GenerateCollection(collectionType, collectionSize, createdObjectReferences);\n                }\n\n                if (genericTypeDefinition == typeof(IQueryable<>))\n                {\n                    return GenerateQueryable(type, collectionSize, createdObjectReferences);\n                }\n\n                Type closedCollectionType = typeof(ICollection<>).MakeGenericType(genericArguments[0]);\n                if (closedCollectionType.IsAssignableFrom(type))\n                {\n                    return GenerateCollection(type, collectionSize, createdObjectReferences);\n                }\n            }\n\n            if (genericArguments.Length == 2)\n            {\n                if (genericTypeDefinition == typeof(IDictionary<,>))\n                {\n                    Type dictionaryType = typeof(Dictionary<,>).MakeGenericType(genericArguments);\n                    return GenerateDictionary(dictionaryType, collectionSize, createdObjectReferences);\n                }\n\n                Type closedDictionaryType = typeof(IDictionary<,>).MakeGenericType(genericArguments[0], genericArguments[1]);\n                if (closedDictionaryType.IsAssignableFrom(type))\n                {\n                    return GenerateDictionary(type, collectionSize, createdObjectReferences);\n                }\n            }\n\n            if (type.IsPublic || type.IsNestedPublic)\n            {\n                return GenerateComplexObject(type, createdObjectReferences);\n            }\n\n            return null;\n        }\n\n        private static object GenerateTuple(Type type, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type[] genericArgs = type.GetGenericArguments();\n            object[] parameterValues = new object[genericArgs.Length];\n            bool failedToCreateTuple = true;\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < genericArgs.Length; i++)\n            {\n                parameterValues[i] = objectGenerator.GenerateObject(genericArgs[i], createdObjectReferences);\n                failedToCreateTuple &= parameterValues[i] == null;\n            }\n            if (failedToCreateTuple)\n            {\n                return null;\n            }\n            object result = Activator.CreateInstance(type, parameterValues);\n            return result;\n        }\n\n        private static bool IsTuple(Type genericTypeDefinition)\n        {\n            return genericTypeDefinition == typeof(Tuple<>) ||\n                genericTypeDefinition == typeof(Tuple<,>) ||\n                genericTypeDefinition == typeof(Tuple<,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,,,>) ||\n                genericTypeDefinition == typeof(Tuple<,,,,,,,>);\n        }\n\n        private static object GenerateKeyValuePair(Type keyValuePairType, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type[] genericArgs = keyValuePairType.GetGenericArguments();\n            Type typeK = genericArgs[0];\n            Type typeV = genericArgs[1];\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            object keyObject = objectGenerator.GenerateObject(typeK, createdObjectReferences);\n            object valueObject = objectGenerator.GenerateObject(typeV, createdObjectReferences);\n            if (keyObject == null && valueObject == null)\n            {\n                // Failed to create key and values\n                return null;\n            }\n            object result = Activator.CreateInstance(keyValuePairType, keyObject, valueObject);\n            return result;\n        }\n\n        private static object GenerateArray(Type arrayType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type type = arrayType.GetElementType();\n            Array result = Array.CreateInstance(type, size);\n            bool areAllElementsNull = true;\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < size; i++)\n            {\n                object element = objectGenerator.GenerateObject(type, createdObjectReferences);\n                result.SetValue(element, i);\n                areAllElementsNull &= element == null;\n            }\n\n            if (areAllElementsNull)\n            {\n                return null;\n            }\n\n            return result;\n        }\n\n        private static object GenerateDictionary(Type dictionaryType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type typeK = typeof(object);\n            Type typeV = typeof(object);\n            if (dictionaryType.IsGenericType)\n            {\n                Type[] genericArgs = dictionaryType.GetGenericArguments();\n                typeK = genericArgs[0];\n                typeV = genericArgs[1];\n            }\n\n            object result = Activator.CreateInstance(dictionaryType);\n            MethodInfo addMethod = dictionaryType.GetMethod(\"Add\") ?? dictionaryType.GetMethod(\"TryAdd\");\n            MethodInfo containsMethod = dictionaryType.GetMethod(\"Contains\") ?? dictionaryType.GetMethod(\"ContainsKey\");\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < size; i++)\n            {\n                object newKey = objectGenerator.GenerateObject(typeK, createdObjectReferences);\n                if (newKey == null)\n                {\n                    // Cannot generate a valid key\n                    return null;\n                }\n\n                bool containsKey = (bool)containsMethod.Invoke(result, new object[] { newKey });\n                if (!containsKey)\n                {\n                    object newValue = objectGenerator.GenerateObject(typeV, createdObjectReferences);\n                    addMethod.Invoke(result, new object[] { newKey, newValue });\n                }\n            }\n\n            return result;\n        }\n\n        private static object GenerateEnum(Type enumType)\n        {\n            Array possibleValues = Enum.GetValues(enumType);\n            if (possibleValues.Length > 0)\n            {\n                return possibleValues.GetValue(0);\n            }\n            return null;\n        }\n\n        private static object GenerateQueryable(Type queryableType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            bool isGeneric = queryableType.IsGenericType;\n            object list;\n            if (isGeneric)\n            {\n                Type listType = typeof(List<>).MakeGenericType(queryableType.GetGenericArguments());\n                list = GenerateCollection(listType, size, createdObjectReferences);\n            }\n            else\n            {\n                list = GenerateArray(typeof(object[]), size, createdObjectReferences);\n            }\n            if (list == null)\n            {\n                return null;\n            }\n            if (isGeneric)\n            {\n                Type argumentType = typeof(IEnumerable<>).MakeGenericType(queryableType.GetGenericArguments());\n                MethodInfo asQueryableMethod = typeof(Queryable).GetMethod(\"AsQueryable\", new[] { argumentType });\n                return asQueryableMethod.Invoke(null, new[] { list });\n            }\n\n            return Queryable.AsQueryable((IEnumerable)list);\n        }\n\n        private static object GenerateCollection(Type collectionType, int size, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type type = collectionType.IsGenericType ?\n                collectionType.GetGenericArguments()[0] :\n                typeof(object);\n            object result = Activator.CreateInstance(collectionType);\n            MethodInfo addMethod = collectionType.GetMethod(\"Add\");\n            bool areAllElementsNull = true;\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            for (int i = 0; i < size; i++)\n            {\n                object element = objectGenerator.GenerateObject(type, createdObjectReferences);\n                addMethod.Invoke(result, new object[] { element });\n                areAllElementsNull &= element == null;\n            }\n\n            if (areAllElementsNull)\n            {\n                return null;\n            }\n\n            return result;\n        }\n\n        private static object GenerateNullable(Type nullableType, Dictionary<Type, object> createdObjectReferences)\n        {\n            Type type = nullableType.GetGenericArguments()[0];\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            return objectGenerator.GenerateObject(type, createdObjectReferences);\n        }\n\n        private static object GenerateComplexObject(Type type, Dictionary<Type, object> createdObjectReferences)\n        {\n            object result = null;\n\n            if (createdObjectReferences.TryGetValue(type, out result))\n            {\n                // The object has been created already, just return it. This will handle the circular reference case.\n                return result;\n            }\n\n            if (type.IsValueType)\n            {\n                result = Activator.CreateInstance(type);\n            }\n            else\n            {\n                ConstructorInfo defaultCtor = type.GetConstructor(Type.EmptyTypes);\n                if (defaultCtor == null)\n                {\n                    // Cannot instantiate the type because it doesn't have a default constructor\n                    return null;\n                }\n\n                result = defaultCtor.Invoke(new object[0]);\n            }\n            createdObjectReferences.Add(type, result);\n            SetPublicProperties(type, result, createdObjectReferences);\n            SetPublicFields(type, result, createdObjectReferences);\n            return result;\n        }\n\n        private static void SetPublicProperties(Type type, object obj, Dictionary<Type, object> createdObjectReferences)\n        {\n            PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            foreach (PropertyInfo property in properties)\n            {\n                if (property.CanWrite)\n                {\n                    object propertyValue = objectGenerator.GenerateObject(property.PropertyType, createdObjectReferences);\n                    property.SetValue(obj, propertyValue, null);\n                }\n            }\n        }\n\n        private static void SetPublicFields(Type type, object obj, Dictionary<Type, object> createdObjectReferences)\n        {\n            FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);\n            ObjectGenerator objectGenerator = new ObjectGenerator();\n            foreach (FieldInfo field in fields)\n            {\n                object fieldValue = objectGenerator.GenerateObject(field.FieldType, createdObjectReferences);\n                field.SetValue(obj, fieldValue);\n            }\n        }\n\n        private class SimpleTypeObjectGenerator\n        {\n            private long _index = 0;\n            private static readonly Dictionary<Type, Func<long, object>> DefaultGenerators = InitializeGenerators();\n\n            [SuppressMessage(\"Microsoft.Maintainability\", \"CA1502:AvoidExcessiveComplexity\", Justification = \"These are simple type factories and cannot be split up.\")]\n            private static Dictionary<Type, Func<long, object>> InitializeGenerators()\n            {\n                return new Dictionary<Type, Func<long, object>>\n                {\n                    { typeof(Boolean), index => true },\n                    { typeof(Byte), index => (Byte)64 },\n                    { typeof(Char), index => (Char)65 },\n                    { typeof(DateTime), index => DateTime.Now },\n                    { typeof(DateTimeOffset), index => new DateTimeOffset(DateTime.Now) },\n                    { typeof(DBNull), index => DBNull.Value },\n                    { typeof(Decimal), index => (Decimal)index },\n                    { typeof(Double), index => (Double)(index + 0.1) },\n                    { typeof(Guid), index => Guid.NewGuid() },\n                    { typeof(Int16), index => (Int16)(index % Int16.MaxValue) },\n                    { typeof(Int32), index => (Int32)(index % Int32.MaxValue) },\n                    { typeof(Int64), index => (Int64)index },\n                    { typeof(Object), index => new object() },\n                    { typeof(SByte), index => (SByte)64 },\n                    { typeof(Single), index => (Single)(index + 0.1) },\n                    { \n                        typeof(String), index =>\n                        {\n                            return String.Format(CultureInfo.CurrentCulture, \"sample string {0}\", index);\n                        }\n                    },\n                    { \n                        typeof(TimeSpan), index =>\n                        {\n                            return TimeSpan.FromTicks(1234567);\n                        }\n                    },\n                    { typeof(UInt16), index => (UInt16)(index % UInt16.MaxValue) },\n                    { typeof(UInt32), index => (UInt32)(index % UInt32.MaxValue) },\n                    { typeof(UInt64), index => (UInt64)index },\n                    { \n                        typeof(Uri), index =>\n                        {\n                            return new Uri(String.Format(CultureInfo.CurrentCulture, \"http://webapihelppage{0}.com\", index));\n                        }\n                    },\n                };\n            }\n\n            public static bool CanGenerateObject(Type type)\n            {\n                return DefaultGenerators.ContainsKey(type);\n            }\n\n            public object GenerateObject(Type type)\n            {\n                return DefaultGenerators[type](++_index);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/SampleDirection.cs",
    "content": "namespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// Indicates whether the sample is used for request or response\n    /// </summary>\n    public enum SampleDirection\n    {\n        Request = 0,\n        Response\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/SampleGeneration/TextSample.cs",
    "content": "using System;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// This represents a preformatted text sample on the help page. There's a display template named TextSample associated with this class.\n    /// </summary>\n    public class TextSample\n    {\n        public TextSample(string text)\n        {\n            if (text == null)\n            {\n                throw new ArgumentNullException(\"text\");\n            }\n            Text = text;\n        }\n\n        public string Text { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            TextSample other = obj as TextSample;\n            return other != null && Text == other.Text;\n        }\n\n        public override int GetHashCode()\n        {\n            return Text.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return Text;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/Api.cshtml",
    "content": "@using System.Web.Http\n@using AccountActivityDemo.Areas.HelpPage.Models\n@model HelpPageApiModel\n\n@{\n    var description = Model.ApiDescription;\n    ViewBag.Title = description.HttpMethod.Method + \" \" + description.RelativePath;\n}\n\n<link type=\"text/css\" href=\"~/Areas/HelpPage/HelpPage.css\" rel=\"stylesheet\" />\n<div id=\"body\" class=\"help-page\">\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <p>\n                @Html.ActionLink(\"Help Page Home\", \"Index\")\n            </p>\n        </div>\n    </section>\n    <section class=\"content-wrapper main-content clear-fix\">\n        @Html.DisplayForModel()\n    </section>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml",
    "content": "@using System.Web.Http\n@using System.Web.Http.Controllers\n@using System.Web.Http.Description\n@using AccountActivityDemo.Areas.HelpPage\n@using AccountActivityDemo.Areas.HelpPage.Models\n@model IGrouping<HttpControllerDescriptor, ApiDescription>\n\n@{\n    var controllerDocumentation = ViewBag.DocumentationProvider != null ? \n        ViewBag.DocumentationProvider.GetDocumentation(Model.Key) : \n        null;\n}\n\n<h2 id=\"@Model.Key.ControllerName\">@Model.Key.ControllerName</h2>\n@if (!String.IsNullOrEmpty(controllerDocumentation))\n{\n    <p>@controllerDocumentation</p>\n}\n<table class=\"help-page-table\">\n    <thead>\n        <tr><th>API</th><th>Description</th></tr>\n    </thead>\n    <tbody>\n    @foreach (var api in Model)\n    {\n        <tr>\n            <td class=\"api-name\"><a href=\"@Url.Action(\"Api\", \"Help\", new { apiId = api.GetFriendlyId() })\">@api.HttpMethod.Method @api.RelativePath</a></td>\n            <td class=\"api-documentation\">\n            @if (api.Documentation != null)\n            {\n                <p>@api.Documentation</p>\n            }\n            else\n            {\n                <p>No documentation available.</p>\n            }\n            </td>\n        </tr>\n    }\n    </tbody>\n</table>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model CollectionModelDescription\n@if (Model.ElementDescription is ComplexTypeModelDescription)\n{\n    @Html.DisplayFor(m => m.ElementDescription)\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model ComplexTypeModelDescription\n@Html.DisplayFor(m => m.Properties, \"Parameters\")"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model DictionaryModelDescription\nDictionary of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.KeyModelDescription }) [key]\nand @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.ValueModelDescription }) [value]"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model EnumTypeModelDescription\n\n<p>Possible enumeration values:</p>\n\n<table class=\"help-page-table\">\n    <thead>\n        <tr><th>Name</th><th>Value</th><th>Description</th></tr>\n    </thead>\n    <tbody>\n        @foreach (EnumValueDescription value in Model.Values)\n        {\n            <tr>\n                <td class=\"enum-name\"><b>@value.Name</b></td>\n                <td class=\"enum-value\">\n                    <p>@value.Value</p>\n                </td>\n                <td class=\"enum-description\">\n                    <p>@value.Documentation</p>\n                </td>\n            </tr>\n        }\n    </tbody>\n</table>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml",
    "content": "@using System.Web.Http\n@using System.Web.Http.Description\n@using AccountActivityDemo.Areas.HelpPage.Models\n@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model HelpPageApiModel\n\n@{\n    ApiDescription description = Model.ApiDescription;\n}\n<h1>@description.HttpMethod.Method @description.RelativePath</h1>\n<div>\n    <p>@description.Documentation</p>\n\n    <h2>Request Information</h2>\n\n    <h3>URI Parameters</h3>\n    @Html.DisplayFor(m => m.UriParameters, \"Parameters\")\n\n    <h3>Body Parameters</h3>\n\n    <p>@Model.RequestDocumentation</p>\n\n    @if (Model.RequestModelDescription != null)\n    {\n        @Html.DisplayFor(m => m.RequestModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.RequestModelDescription })\n        if (Model.RequestBodyParameters != null)\n        {\n            @Html.DisplayFor(m => m.RequestBodyParameters, \"Parameters\")\n        }\n    }\n    else\n    {\n        <p>None.</p>\n    }\n\n    @if (Model.SampleRequests.Count > 0)\n    {\n        <h3>Request Formats</h3>\n        @Html.DisplayFor(m => m.SampleRequests, \"Samples\")\n    }\n\n    <h2>Response Information</h2>\n\n    <h3>Resource Description</h3>\n\n    <p>@description.ResponseDescription.Documentation</p>\n\n    @if (Model.ResourceDescription != null)\n    {\n        @Html.DisplayFor(m => m.ResourceDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.ResourceDescription })\n        if (Model.ResourceProperties != null)\n        {\n            @Html.DisplayFor(m => m.ResourceProperties, \"Parameters\")\n        }\n    }\n    else\n    {\n        <p>None.</p>\n    }\n\n    @if (Model.SampleResponses.Count > 0)\n    {\n        <h3>Response Formats</h3>\n        @Html.DisplayFor(m => m.SampleResponses, \"Samples\")\n    }\n\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage\n@model ImageSample\n\n<img src=\"@Model.Src\" />"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage\n@model InvalidSample\n\n@if (HttpContext.Current.IsDebuggingEnabled)\n{\n    <div class=\"warning-message-container\">\n        <p>@Model.ErrorMessage</p>\n    </div>\n}\nelse\n{\n    <p>Sample not available.</p>\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model KeyValuePairModelDescription\nPair of @Html.DisplayFor(m => Model.KeyModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.KeyModelDescription }) [key]\nand @Html.DisplayFor(m => Model.ValueModelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = Model.ValueModelDescription }) [value]"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model Type\n@{\n    ModelDescription modelDescription = ViewBag.modelDescription;\n    if (modelDescription is ComplexTypeModelDescription || modelDescription is EnumTypeModelDescription)\n    {\n        if (Model == typeof(Object))\n        {\n            @:Object\n        }\n        else\n        {\n            @Html.ActionLink(modelDescription.Name, \"ResourceModel\", \"Help\", new { modelName = modelDescription.Name }, null)\n        }\n    }\n    else if (modelDescription is CollectionModelDescription)\n    {\n        var collectionDescription = modelDescription as CollectionModelDescription;\n        var elementDescription = collectionDescription.ElementDescription;\n        @:Collection of @Html.DisplayFor(m => elementDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = elementDescription })\n    }\n    else\n    {\n        @Html.DisplayFor(m => modelDescription)\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml",
    "content": "@using System.Collections.Generic\n@using System.Collections.ObjectModel\n@using System.Web.Http.Description\n@using System.Threading\n@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model IList<ParameterDescription>\n\n@if (Model.Count > 0)\n{\n    <table class=\"help-page-table\">\n        <thead>\n            <tr><th>Name</th><th>Description</th><th>Type</th><th>Additional information</th></tr>\n        </thead>\n        <tbody>\n            @foreach (ParameterDescription parameter in Model)\n            {\n                ModelDescription modelDescription = parameter.TypeDescription;\n                <tr>\n                    <td class=\"parameter-name\">@parameter.Name</td>\n                    <td class=\"parameter-documentation\">\n                        <p>@parameter.Documentation</p>\n                    </td>\n                    <td class=\"parameter-type\">\n                        @Html.DisplayFor(m => modelDescription.ModelType, \"ModelDescriptionLink\", new { modelDescription = modelDescription })\n                    </td>\n                    <td class=\"parameter-annotations\">\n                        @if (parameter.Annotations.Count > 0)\n                        {\n                            foreach (var annotation in parameter.Annotations)\n                            {\n                                <p>@annotation.Documentation</p>\n                            }\n                        }\n                        else\n                        {\n                            <p>None.</p>\n                        }\n                    </td>\n                </tr>\n            }\n        </tbody>\n    </table>\n}\nelse\n{\n    <p>None.</p>\n}\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml",
    "content": "@using System.Net.Http.Headers\n@model Dictionary<MediaTypeHeaderValue, object>\n\n@{\n    // Group the samples into a single tab if they are the same.\n    Dictionary<string, object> samples = Model.GroupBy(pair => pair.Value).ToDictionary(\n        pair => String.Join(\", \", pair.Select(m => m.Key.ToString()).ToArray()), \n        pair => pair.Key);\n    var mediaTypes = samples.Keys;\n}\n<div>\n    @foreach (var mediaType in mediaTypes)\n    {\n        <h4 class=\"sample-header\">@mediaType</h4>\n        <div class=\"sample-content\">\n            <span><b>Sample:</b></span>\n            @{\n                var sample = samples[mediaType];\n                if (sample == null)\n                {\n                    <p>Sample not available.</p>\n                }\n                else\n                {\n                    @Html.DisplayFor(s => sample);\n                }\n            }\n        </div>\n    }\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model SimpleTypeModelDescription\n@Model.Documentation"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml",
    "content": "@using AccountActivityDemo.Areas.HelpPage\n@model TextSample\n\n<pre class=\"wrapped\">\n@Model.Text\n</pre>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/Index.cshtml",
    "content": "@using System.Web.Http\n@using System.Web.Http.Controllers\n@using System.Web.Http.Description\n@using System.Collections.ObjectModel\n@using AccountActivityDemo.Areas.HelpPage.Models\n@model Collection<ApiDescription>\n\n@{\n    ViewBag.Title = \"ASP.NET Web API Help Page\";\n\n    // Group APIs by controller\n    ILookup<HttpControllerDescriptor, ApiDescription> apiGroups = Model.ToLookup(api => api.ActionDescriptor.ControllerDescriptor);\n}\n\n<link type=\"text/css\" href=\"~/Areas/HelpPage/HelpPage.css\" rel=\"stylesheet\" />\n<header class=\"help-page\">\n    <div class=\"content-wrapper\">\n        <div class=\"float-left\">\n            <h1>@ViewBag.Title</h1>\n        </div>\n    </div>\n</header>\n<div id=\"body\" class=\"help-page\">\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <h2>Introduction</h2>\n            <p>\n                Provide a general description of your APIs here.\n            </p>\n        </div>\n    </section>\n    <section class=\"content-wrapper main-content clear-fix\">\n        @foreach (var group in apiGroups)\n        {\n            @Html.DisplayFor(m => group, \"ApiGroup\")\n        }\n    </section>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Help/ResourceModel.cshtml",
    "content": "@using System.Web.Http\n@using AccountActivityDemo.Areas.HelpPage.ModelDescriptions\n@model ModelDescription\n\n<link type=\"text/css\" href=\"~/Areas/HelpPage/HelpPage.css\" rel=\"stylesheet\" />\n<div id=\"body\" class=\"help-page\">\n    <section class=\"featured\">\n        <div class=\"content-wrapper\">\n            <p>\n                @Html.ActionLink(\"Help Page Home\", \"Index\")\n            </p>\n        </div>\n    </section>\n    <h1>@Model.Name</h1>\n    <p>@Model.Documentation</p>\n    <section class=\"content-wrapper main-content clear-fix\">\n        @Html.DisplayFor(m => Model)\n    </section>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Shared/_Layout.cshtml",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title>@ViewBag.Title</title>\n    @RenderSection(\"scripts\", required: false)\n</head>\n<body>\n    @RenderBody()\n</body>\n</html>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Routing\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <compilation debug=\"true\">\n      <assemblies>\n        <add assembly=\"System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n      </assemblies>\n    </compilation>\n  </system.web>\n\n  <system.webServer>\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    // Change the Layout path below to blend the look and feel of the help page with your existing web pages\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Areas/HelpPage/XmlDocumentationProvider.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing System.Web.Http.Controllers;\nusing System.Web.Http.Description;\nusing System.Xml.XPath;\nusing AccountActivityDemo.Areas.HelpPage.ModelDescriptions;\n\nnamespace AccountActivityDemo.Areas.HelpPage\n{\n    /// <summary>\n    /// A custom <see cref=\"IDocumentationProvider\"/> that reads the API documentation from an XML documentation file.\n    /// </summary>\n    public class XmlDocumentationProvider : IDocumentationProvider, IModelDocumentationProvider\n    {\n        private XPathNavigator _documentNavigator;\n        private const string TypeExpression = \"/doc/members/member[@name='T:{0}']\";\n        private const string MethodExpression = \"/doc/members/member[@name='M:{0}']\";\n        private const string PropertyExpression = \"/doc/members/member[@name='P:{0}']\";\n        private const string FieldExpression = \"/doc/members/member[@name='F:{0}']\";\n        private const string ParameterExpression = \"param[@name='{0}']\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"XmlDocumentationProvider\"/> class.\n        /// </summary>\n        /// <param name=\"documentPath\">The physical path to XML document.</param>\n        public XmlDocumentationProvider(string documentPath)\n        {\n            if (documentPath == null)\n            {\n                throw new ArgumentNullException(\"documentPath\");\n            }\n            XPathDocument xpath = new XPathDocument(documentPath);\n            _documentNavigator = xpath.CreateNavigator();\n        }\n\n        public string GetDocumentation(HttpControllerDescriptor controllerDescriptor)\n        {\n            XPathNavigator typeNode = GetTypeNode(controllerDescriptor.ControllerType);\n            return GetTagValue(typeNode, \"summary\");\n        }\n\n        public virtual string GetDocumentation(HttpActionDescriptor actionDescriptor)\n        {\n            XPathNavigator methodNode = GetMethodNode(actionDescriptor);\n            return GetTagValue(methodNode, \"summary\");\n        }\n\n        public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor)\n        {\n            ReflectedHttpParameterDescriptor reflectedParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor;\n            if (reflectedParameterDescriptor != null)\n            {\n                XPathNavigator methodNode = GetMethodNode(reflectedParameterDescriptor.ActionDescriptor);\n                if (methodNode != null)\n                {\n                    string parameterName = reflectedParameterDescriptor.ParameterInfo.Name;\n                    XPathNavigator parameterNode = methodNode.SelectSingleNode(String.Format(CultureInfo.InvariantCulture, ParameterExpression, parameterName));\n                    if (parameterNode != null)\n                    {\n                        return parameterNode.Value.Trim();\n                    }\n                }\n            }\n\n            return null;\n        }\n\n        public string GetResponseDocumentation(HttpActionDescriptor actionDescriptor)\n        {\n            XPathNavigator methodNode = GetMethodNode(actionDescriptor);\n            return GetTagValue(methodNode, \"returns\");\n        }\n\n        public string GetDocumentation(MemberInfo member)\n        {\n            string memberName = String.Format(CultureInfo.InvariantCulture, \"{0}.{1}\", GetTypeName(member.DeclaringType), member.Name);\n            string expression = member.MemberType == MemberTypes.Field ? FieldExpression : PropertyExpression;\n            string selectExpression = String.Format(CultureInfo.InvariantCulture, expression, memberName);\n            XPathNavigator propertyNode = _documentNavigator.SelectSingleNode(selectExpression);\n            return GetTagValue(propertyNode, \"summary\");\n        }\n\n        public string GetDocumentation(Type type)\n        {\n            XPathNavigator typeNode = GetTypeNode(type);\n            return GetTagValue(typeNode, \"summary\");\n        }\n\n        private XPathNavigator GetMethodNode(HttpActionDescriptor actionDescriptor)\n        {\n            ReflectedHttpActionDescriptor reflectedActionDescriptor = actionDescriptor as ReflectedHttpActionDescriptor;\n            if (reflectedActionDescriptor != null)\n            {\n                string selectExpression = String.Format(CultureInfo.InvariantCulture, MethodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo));\n                return _documentNavigator.SelectSingleNode(selectExpression);\n            }\n\n            return null;\n        }\n\n        private static string GetMemberName(MethodInfo method)\n        {\n            string name = String.Format(CultureInfo.InvariantCulture, \"{0}.{1}\", GetTypeName(method.DeclaringType), method.Name);\n            ParameterInfo[] parameters = method.GetParameters();\n            if (parameters.Length != 0)\n            {\n                string[] parameterTypeNames = parameters.Select(param => GetTypeName(param.ParameterType)).ToArray();\n                name += String.Format(CultureInfo.InvariantCulture, \"({0})\", String.Join(\",\", parameterTypeNames));\n            }\n\n            return name;\n        }\n\n        private static string GetTagValue(XPathNavigator parentNode, string tagName)\n        {\n            if (parentNode != null)\n            {\n                XPathNavigator node = parentNode.SelectSingleNode(tagName);\n                if (node != null)\n                {\n                    return node.Value.Trim();\n                }\n            }\n\n            return null;\n        }\n\n        private XPathNavigator GetTypeNode(Type type)\n        {\n            string controllerTypeName = GetTypeName(type);\n            string selectExpression = String.Format(CultureInfo.InvariantCulture, TypeExpression, controllerTypeName);\n            return _documentNavigator.SelectSingleNode(selectExpression);\n        }\n\n        private static string GetTypeName(Type type)\n        {\n            string name = type.FullName;\n            if (type.IsGenericType)\n            {\n                // Format the generic type name to something like: Generic{System.Int32,System.String}\n                Type genericType = type.GetGenericTypeDefinition();\n                Type[] genericArguments = type.GetGenericArguments();\n                string genericTypeName = genericType.FullName;\n\n                // Trim the generic parameter counts from the name\n                genericTypeName = genericTypeName.Substring(0, genericTypeName.IndexOf('`'));\n                string[] argumentTypeNames = genericArguments.Select(t => GetTypeName(t)).ToArray();\n                name = String.Format(CultureInfo.InvariantCulture, \"{0}{{{1}}}\", genericTypeName, String.Join(\",\", argumentTypeNames));\n            }\n            if (type.IsNested)\n            {\n                // Changing the nested type name from OuterType+InnerType to OuterType.InnerType to match the XML documentation syntax.\n                name = name.Replace(\"+\", \".\");\n            }\n\n            return name;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Content/Site.css",
    "content": "﻿body {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Set padding to keep content from hitting the edges */\n.body-content {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n/* Set width on the form input elements since they're 100% wide by default */\ninput,\nselect,\ntextarea {\n    max-width: 280px;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Content/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  text-shadow: 0 1px 0 #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n  background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n  background-color: #2e6da4;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Content/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  -moz-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: \"Glyphicons Halflings\";\n  src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: \"Glyphicons Halflings\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: 400;\n  line-height: 1;\n  color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: \"\\00A0 \\2014\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11,\n  .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11,\n  .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11,\n  .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: 0.01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 700;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eeeeee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  opacity: 0.65;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  background-image: none;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  background-image: none;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  background-image: none;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  background-image: none;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  background-image: none;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  background-image: none;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: 400;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-property: height, visibility;\n  -o-transition-property: height, visibility;\n  transition-property: height, visibility;\n  -webkit-transition-duration: 0.35s;\n  -o-transition-duration: 0.35s;\n  transition-duration: 0.35s;\n  -webkit-transition-timing-function: ease;\n  -o-transition-timing-function: ease;\n  transition-timing-function: ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: 400;\n  line-height: 1.42857143;\n  color: #333333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n  color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: 15px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eeeeee;\n  border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: 0.2em 0.6em 0.3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border 0.2s ease-in-out;\n  -o-transition: border 0.2s ease-in-out;\n  transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n  -ms-transform: translate(0, -25%);\n  -o-transform: translate(0, -25%);\n  transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.42857143;\n  line-break: auto;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  font-size: 12px;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: 0.9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.42857143;\n  line-break: auto;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  font-size: 14px;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n  -o-transition: 0.6s ease-in-out left;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform 0.6s ease-in-out;\n    -o-transition: -o-transform 0.6s ease-in-out;\n    transition: -webkit-transform 0.6s ease-in-out;\n    transition: transform 0.6s ease-in-out;\n    transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n    perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    left: 0;\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    left: 0;\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    left: 0;\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  filter: alpha(opacity=90);\n  opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n  content: \"\\203a\";\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Controllers/AccountActivityController.cs",
    "content": "﻿using LinqToTwitter;\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Web.Http;\n\nnamespace AccountActivityDemo.Controllers\n{\n    public class AccountActivityController : ApiController\n    {\n        ulong chatbotID = 15411837;\n\n        public object Get(string crc_token)\n        {\n            return new\n            {\n                response_token = new AccountActivity().BuildCrcResponse(crc_token, ConfigurationManager.AppSettings[\"consumerSecret\"])\n            };\n        }\n\n        static object dmReadLock = new object();\n\n        public async Task<HttpResponseMessage> Post(HttpRequestMessage request)\n        {\n            try\n            {\n                Monitor.Enter(dmReadLock);\n                string response = await request.Content.ReadAsStringAsync();\n\n                if (!new AccountActivity().IsValidPostSignature(request, response, ConfigurationManager.AppSettings[\"consumerSecret\"]))\n                    return request.CreateResponse(HttpStatusCode.Unauthorized);\n\n                JObject content = JObject.Parse(response);\n\n                if (IsDuplicate(content))\n                    return request.CreateResponse(HttpStatusCode.OK);\n\n                JToken messageCreate = content[\"direct_message_events\"][0][\"message_create\"];\n\n                string recipientIDStr = (string)messageCreate[\"sender_id\"];\n                ulong.TryParse(recipientIDStr, out ulong recipientID);\n\n                var authorizer = new SingleUserAuthorizer\n                {\n                    CredentialStore = new InMemoryCredentialStore\n                    {\n                        ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                        ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"],\n                        OAuthToken = ConfigurationManager.AppSettings[\"accessToken\"],\n                        OAuthTokenSecret = ConfigurationManager.AppSettings[\"accessTokenSecret\"]\n                    }\n                };\n                var twitterCtx = new TwitterContext(authorizer);\n\n                if (recipientID != chatbotID)\n                {\n                    string text = (string)messageCreate[\"message_data\"][\"text\"];\n\n                    await twitterCtx.NewDirectMessageEventAsync(\n                        recipientID, $\"You said: {text}, which is {text.Length} characters.\");\n                }\n\n                return request.CreateResponse(HttpStatusCode.OK);\n            }\n            catch (Exception ex)\n            {\n                return request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);\n            }\n            finally\n            {\n                Monitor.Exit(dmReadLock);\n            }\n        }\n\n        static List<string> previousMessageIDs = new List<string>();\n        bool IsDuplicate(JObject content)\n        {\n            string msgID = content[\"direct_message_events\"][0][\"id\"].Value<string>();\n            bool isDuplicate = previousMessageIDs.IndexOf(msgID) > -1;\n            previousMessageIDs.Add(msgID);\n            return isDuplicate;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Mvc;\n\nnamespace AccountActivityDemo.Controllers\n{\n    public class HomeController : Controller\n    {\n        public ActionResult Index()\n        {\n            ViewBag.Title = \"Home Page\";\n\n            return View();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"AccountActivityDemo.WebApiApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Http;\nusing System.Web.Mvc;\nusing System.Web.Optimization;\nusing System.Web.Routing;\n\nnamespace AccountActivityDemo\n{\n    public class WebApiApplication : System.Web.HttpApplication\n    {\n        protected void Application_Start()\n        {\n            AreaRegistration.RegisterAllAreas();\n            GlobalConfiguration.Configure(WebApiConfig.Register);\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AccountActivityDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"AccountActivityDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2017\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"de187a72-84e4-4e01-9fb6-6a1aa4731b88\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers\n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Properties/PublishProfiles/AccountActivityDemo - Web Deploy.pubxml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nThis file is used by the publish/package process of your Web project. You can customize the behavior of this process\nby editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <WebPublishMethod>MSDeploy</WebPublishMethod>\n    <ResourceId>/subscriptions/67963947-8b9b-4bfe-b752-31738f16f437/resourcegroups/TwitterChatbots/providers/Microsoft.Web/sites/AccountActivityDemo</ResourceId>\n    <ResourceGroup>TwitterChatbots</ResourceGroup>\n    <PublishProvider>AzureWebSite</PublishProvider>\n    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>\n    <LastUsedPlatform>Any CPU</LastUsedPlatform>\n    <SiteUrlToLaunchAfterPublish>http://accountactivitydemo.azurewebsites.net</SiteUrlToLaunchAfterPublish>\n    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>\n    <ExcludeApp_Data>False</ExcludeApp_Data>\n    <MSDeployServiceURL>accountactivitydemo.scm.azurewebsites.net:443</MSDeployServiceURL>\n    <DeployIisAppPath>AccountActivityDemo</DeployIisAppPath>\n    <RemoteSitePhysicalPath />\n    <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>\n    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>\n    <EnableMSDeployBackup>True</EnableMSDeployBackup>\n    <UserName>$AccountActivityDemo</UserName>\n    <_SavePWD>True</_SavePWD>\n    <_DestinationType>AzureWebSite</_DestinationType>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  }\n\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml)\n    }\n\n    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/jquery-3.2.1.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to return the new transport object to use with the data type provided in the first argument.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead.</summary>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'fn.extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>\n    ///   <param name=\"object\" type=\"Object\">An object to merge onto the jQuery prototype.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">Document element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"\">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"htmlString\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked or selected.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"htmlString\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the           index position of the element in the set and the old HTML value as arguments.           jQuery empties the element before calling the function;           use the oldhtml argument to reference the previous content.           Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"PlainObject\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"\">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"newContent\" type=\"\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <summary>Selects the element that is the root of the document.</summary>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/jquery-3.2.1.js",
    "content": "/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.2.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( \">tbody\", elem )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with computed style\n\tvar valueIsBorderBox,\n\t\tstyles = getStyles( elem ),\n\t\tval = curCSS( elem, name, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test( val ) ) {\n\t\treturn val;\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = isBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t// Fall back to offsetWidth/Height when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\tif ( val === \"auto\" ) {\n\t\tval = elem[ \"offset\" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar doc, docElem, rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\tdoc = elem.ownerDocument;\n\t\tdocElem = doc.documentElement;\n\t\twin = doc.defaultView;\n\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/jquery-3.2.1.slim.js",
    "content": "/*!\n * jQuery JavaScript Library v3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T19:00Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( \">tbody\", elem )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with computed style\n\tvar valueIsBorderBox,\n\t\tstyles = getStyles( elem ),\n\t\tval = curCSS( elem, name, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test( val ) ) {\n\t\treturn val;\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = isBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t// Fall back to offsetWidth/Height when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\tif ( val === \"auto\" ) {\n\t\tval = elem[ \"offset\" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar doc, docElem, rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\tdoc = elem.ownerDocument;\n\t\tdocElem = doc.documentElement;\n\t\twin = doc.defaultView;\n\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/modernizr-2.8.3.js",
    "content": "/*!\n * Modernizr v2.8.3\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.8.3',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq) && matchMedia(mq).matches || false;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   goo.gl/v3V4Gp\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /**\n     * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n     */\n    ;(function(window, document) {\n        /*jshint evil:true */\n        /** version */\n        var version = '3.7.0';\n\n        /** Preset options */\n        var options = window.html5 || {};\n\n        /** Used to skip problem elements */\n        var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n        /** Not all elements can be cloned in IE **/\n        var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n        /** Detect whether the browser supports default html5 styles */\n        var supportsHtml5Styles;\n\n        /** Name of the expando, to work with multiple documents or to re-shiv one document */\n        var expando = '_html5shiv';\n\n        /** The id for the the documents expando */\n        var expanID = 0;\n\n        /** Cached data for each document */\n        var expandoData = {};\n\n        /** Detect whether the browser supports unknown elements */\n        var supportsUnknownElements;\n\n        (function() {\n          try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n          } catch(e) {\n            // assign a false positive if detection fails => unable to shiv\n            supportsHtml5Styles = true;\n            supportsUnknownElements = true;\n          }\n\n        }());\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Creates a style sheet with the given CSS text and adds it to the document.\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @param {String} cssText The CSS text.\n         * @returns {StyleSheet} The style element.\n         */\n        function addStyleSheet(ownerDocument, cssText) {\n          var p = ownerDocument.createElement('p'),\n          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n          p.innerHTML = 'x<style>' + cssText + '</style>';\n          return parent.insertBefore(p.lastChild, parent.firstChild);\n        }\n\n        /**\n         * Returns the value of `html5.elements` as an array.\n         * @private\n         * @returns {Array} An array of shived element node names.\n         */\n        function getElements() {\n          var elements = html5.elements;\n          return typeof elements == 'string' ? elements.split(' ') : elements;\n        }\n\n        /**\n         * Returns the data associated to the given document\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @returns {Object} An object of data.\n         */\n        function getExpandoData(ownerDocument) {\n          var data = expandoData[ownerDocument[expando]];\n          if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n          }\n          return data;\n        }\n\n        /**\n         * returns a shived element for the given nodeName and document\n         * @memberOf html5\n         * @param {String} nodeName name of the element\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived element.\n         */\n        function createElement(nodeName, ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n          }\n          if (!data) {\n            data = getExpandoData(ownerDocument);\n          }\n          var node;\n\n          if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n          } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n          } else {\n            node = data.createElem(nodeName);\n          }\n\n          // Avoid adding some elements to fragments in IE < 9 because\n          // * Attributes like `name` or `type` cannot be set/changed once an element\n          //   is inserted into a document/fragment\n          // * Link elements with `src` attributes that are inaccessible, as with\n          //   a 403 response, will cause the tab/window to crash\n          // * Script elements appended to fragments will execute when their `src`\n          //   or `text` property is set\n          return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n        }\n\n        /**\n         * returns a shived DocumentFragment for the given document\n         * @memberOf html5\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived DocumentFragment.\n         */\n        function createDocumentFragment(ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n          }\n          data = data || getExpandoData(ownerDocument);\n          var clone = data.frag.cloneNode(),\n          i = 0,\n          elems = getElements(),\n          l = elems.length;\n          for(;i<l;i++){\n            clone.createElement(elems[i]);\n          }\n          return clone;\n        }\n\n        /**\n         * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n         * @private\n         * @param {Document|DocumentFragment} ownerDocument The document.\n         * @param {Object} data of the document.\n         */\n        function shivMethods(ownerDocument, data) {\n          if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n          }\n\n\n          ownerDocument.createElement = function(nodeName) {\n            //abort shiv\n            if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n            }\n            return createElement(nodeName, ownerDocument, data);\n          };\n\n          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n                                                          'var n=f.cloneNode(),c=n.createElement;' +\n                                                          'h.shivMethods&&(' +\n                                                          // unroll the `createElement` calls\n                                                          getElements().join().replace(/[\\w\\-]+/g, function(nodeName) {\n            data.createElem(nodeName);\n            data.frag.createElement(nodeName);\n            return 'c(\"' + nodeName + '\")';\n          }) +\n            ');return n}'\n                                                         )(html5, data.frag);\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Shivs the given document.\n         * @memberOf html5\n         * @param {Document} ownerDocument The document to shiv.\n         * @returns {Document} The shived document.\n         */\n        function shivDocument(ownerDocument) {\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          var data = getExpandoData(ownerDocument);\n\n          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n            data.hasCSS = !!addStyleSheet(ownerDocument,\n                                          // corrects block display not defined in IE6/7/8/9\n                                          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +\n                                            // adds styling not present in IE6/7/8/9\n                                            'mark{background:#FF0;color:#000}' +\n                                            // hides non-rendered elements\n                                            'template{display:none}'\n                                         );\n          }\n          if (!supportsUnknownElements) {\n            shivMethods(ownerDocument, data);\n          }\n          return ownerDocument;\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * The `html5` object is exposed so that more elements can be shived and\n         * existing shiving can be detected on iframes.\n         * @type Object\n         * @example\n         *\n         * // options can be changed before the script is included\n         * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n         */\n        var html5 = {\n\n          /**\n           * An array or space separated string of node names of the elements to shiv.\n           * @memberOf html5\n           * @type Array|String\n           */\n          'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',\n\n          /**\n           * current version of html5shiv\n           */\n          'version': version,\n\n          /**\n           * A flag to indicate that the HTML5 style sheet should be inserted.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivCSS': (options.shivCSS !== false),\n\n          /**\n           * Is equal to true if a browser supports creating unknown/HTML5 elements\n           * @memberOf html5\n           * @type boolean\n           */\n          'supportsUnknownElements': supportsUnknownElements,\n\n          /**\n           * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n           * methods should be overwritten.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivMethods': (options.shivMethods !== false),\n\n          /**\n           * A string to describe the type of `html5` object (\"default\" or \"default print\").\n           * @memberOf html5\n           * @type String\n           */\n          'type': 'default',\n\n          // shivs the document according to the specified `html5` object options\n          'shivDocument': shivDocument,\n\n          //creates a shived element\n          createElement: createElement,\n\n          //creates a shived documentFragment\n          createDocumentFragment: createDocumentFragment\n        };\n\n        /*--------------------------------------------------------------------------*/\n\n        // expose html5\n        window.html5 = html5;\n\n        // shiv the document\n        shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/respond.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Scripts/respond.matchmedia.addListener.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n(function(w) {\n  \"use strict\";\n  if (w.matchMedia && w.matchMedia(\"all\").addListener) {\n    return false;\n  }\n  var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia(\"only all\").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) {\n    w.clearTimeout(timeoutID);\n    timeoutID = w.setTimeout(function() {\n      for (var i = 0, il = queries.length; i < il; i++) {\n        var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches;\n        if (matches !== mql.matches) {\n          mql.matches = matches;\n          for (var j = 0, jl = listeners.length; j < jl; j++) {\n            listeners[j].call(w, mql);\n          }\n        }\n      }\n    }, 30);\n  };\n  w.matchMedia = function(media) {\n    var mql = localMatchMedia(media), listeners = [], index = 0;\n    mql.addListener = function(listener) {\n      if (!hasMediaQueries) {\n        return;\n      }\n      if (!isListening) {\n        isListening = true;\n        w.addEventListener(\"resize\", handleChange, true);\n      }\n      if (index === 0) {\n        index = queries.push({\n          mql: mql,\n          listeners: listeners\n        });\n      }\n      listeners.push(listener);\n    };\n    mql.removeListener = function(listener) {\n      for (var i = 0, il = listeners.length; i < il; i++) {\n        if (listeners[i] === listener) {\n          listeners.splice(i, 1);\n        }\n      }\n    };\n    return mql;\n  };\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Views/Home/Index.cshtml",
    "content": "﻿<div class=\"jumbotron\">\n    <h1>ASP.NET</h1>\n    <p class=\"lead\">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS, and JavaScript.</p>\n    <p><a href=\"https://asp.net\" class=\"btn btn-primary btn-lg\">Learn more &raquo;</a></p>\n</div>\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>Getting started</h2>\n        <p>ASP.NET Web API is a framework that makes it easy to build HTTP services that reach\n        a broad range of clients, including browsers and mobile devices. ASP.NET Web API\n        is an ideal platform for building RESTful applications on the .NET Framework.</p>\n        <p><a class=\"btn btn-default\" href=\"https://go.microsoft.com/fwlink/?LinkId=301870\">Learn more &raquo;</a></p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get more libraries</h2>\n        <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>\n        <p><a class=\"btn btn-default\" href=\"https://go.microsoft.com/fwlink/?LinkId=301871\">Learn more &raquo;</a></p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Web Hosting</h2>\n        <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p>\n        <p><a class=\"btn btn-default\" href=\"https://go.microsoft.com/fwlink/?LinkId=301872\">Learn more &raquo;</a></p>\n    </div>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Views/Shared/Error.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title>Error</title>\n</head>\n<body>\n    <hgroup>\n        <h1>Error.</h1>\n        <h2>An error occurred while processing your request.</h2>\n    </hgroup>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title>@ViewBag.Title</title>\n    @Styles.Render(\"~/Content/css\")\n    @Scripts.Render(\"~/bundles/modernizr\")\n</head>\n<body>\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n        <div class=\"container\">\n            <div class=\"navbar-header\">\n                <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                    <span class=\"icon-bar\"></span>\n                </button>\n                @Html.ActionLink(\"Application name\", \"Index\", \"Home\", new { area = \"\" }, new { @class = \"navbar-brand\" })\n            </div>\n            <div class=\"navbar-collapse collapse\">\n                <ul class=\"nav navbar-nav\">\n                    <li>@Html.ActionLink(\"Home\", \"Index\", \"Home\", new { area = \"\" }, null)</li>\n                    <li>@Html.ActionLink(\"API\", \"Index\", \"Help\", new { area = \"\" }, null)</li>\n                </ul>\n            </div>\n        </div>\n    </div>\n    <div class=\"container body-content\">\n        @RenderBody()\n        <hr />\n        <footer>\n            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>\n        </footer>\n    </div>\n\n    @Scripts.Render(\"~/bundles/jquery\")\n    @Scripts.Render(\"~/bundles/bootstrap\")\n    @RenderSection(\"scripts\", required: false)\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Optimization\"/>\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"AccountActivityDemo\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.webServer>\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n\n  <system.web>\n    <compilation>\n      <assemblies>\n        <add assembly=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n      </assemblies>\n    </compilation>\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an attribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using Web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=301874 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator\n    finds an attribute \"name\" that has a value of \"MyDB\".\n\n    <connectionStrings>\n      <add name=\"MyDB\"\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\"\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire\n      <customErrors> section of your Web.config file.\n      Note that because there is only one customErrors section under the\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n\n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  https://go.microsoft.com/fwlink/?LinkId=301879\n  -->\n<configuration>\n  <appSettings>\n    <add key=\"webpages:Version\" value=\"3.0.0.0\" />\n    <add key=\"webpages:Enabled\" value=\"false\" />\n    <add key=\"ClientValidationEnabled\" value=\"true\" />\n    <add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n    <add key=\"apiKey\" value=\"\" />\n  </appSettings>\n  <!--\n    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.\n\n    The following attributes can be set on the <httpRuntime> tag.\n      <system.Web>\n        <httpRuntime targetFramework=\"4.8\" />\n      </system.Web>\n  -->\n  <system.web>\n    <compilation debug=\"true\" targetFramework=\"4.8\" />\n    <httpRuntime targetFramework=\"4.6.1\" />\n    <httpModules>\n      <add name=\"ApplicationInsightsWebTracking\" type=\"Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web\" />\n    </httpModules>\n  </system.web>\n  <system.webServer>\n    <handlers>\n      <remove name=\"ExtensionlessUrlHandler-Integrated-4.0\" />\n      <remove name=\"OPTIONSVerbHandler\" />\n      <remove name=\"TRACEVerbHandler\" />\n      <add name=\"ExtensionlessUrlHandler-Integrated-4.0\" path=\"*.\" verb=\"*\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n    </handlers>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n    <modules>\n      <remove name=\"TelemetryCorrelationHttpModule\" />\n      <add name=\"TelemetryCorrelationHttpModule\" type=\"Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation\" preCondition=\"integratedMode,managedHandler\" />\n      <remove name=\"ApplicationInsightsWebTracking\" />\n      <add name=\"ApplicationInsightsWebTracking\" type=\"Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web\" preCondition=\"managedHandler\" />\n    </modules>\n  </system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" culture=\"neutral\" publicKeyToken=\"30ad4fe6b2a6aeed\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-10.0.0.0\" newVersion=\"10.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Optimization\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-1.1.0.0\" newVersion=\"1.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <system.codedom>\n    <compilers>\n      <compiler language=\"c#;cs;csharp\" extension=\".cs\" type=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" warningLevel=\"4\" compilerOptions=\"/langversion:default /nowarn:1659;1699;1701\" />\n      <compiler language=\"vb;vbs;visualbasic;vbscript\" extension=\".vb\" type=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" warningLevel=\"4\" compilerOptions=\"/langversion:default /nowarn:41008 /define:_MYTYPE=\\&quot;Web\\&quot; /optionInfer+\" />\n    </compilers>\n  </system.codedom>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AccountActivityDemo/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net461\" />\n  <package id=\"bootstrap\" version=\"3.4.1\" targetFramework=\"net48\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net461\" />\n  <package id=\"linqtotwitter\" version=\"5.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights\" version=\"2.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights.Agent.Intercept\" version=\"2.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights.DependencyCollector\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights.PerfCounterCollector\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights.Web\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights.WindowsServer\" version=\"2.4.1\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel\" version=\"2.4.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.TelemetryCorrelation\" version=\"1.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.Core\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.HelpPage\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebApi.WebHost\" version=\"5.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.3\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform\" version=\"1.0.8\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Net.Compilers\" version=\"2.4.0\" targetFramework=\"net461\" developmentDependency=\"true\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net461\" />\n  <package id=\"Modernizr\" version=\"2.8.3\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net461\" />\n  <package id=\"Respond\" version=\"1.4.2\" targetFramework=\"net461\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"net461\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"net461\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"net461\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"net461\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"net461\" />\n  <package id=\"System.Diagnostics.DiagnosticSource\" version=\"4.4.0\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.Core\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.Interfaces\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.Linq\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.PlatformServices\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/AspNetSamples.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.29806.167\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"WebFormsDemo\", \"WebFormsDemo\\WebFormsDemo.csproj\", \"{2B50862D-1D21-4B8A-978E-DC289FC196EA}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AccountActivityDemo\", \"AccountActivityDemo\\AccountActivityDemo.csproj\", \"{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Release|x64.Build.0 = Release|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2B50862D-1D21-4B8A-978E-DC289FC196EA}.Release|x86.Build.0 = Release|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Release|x64.Build.0 = Release|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{C2BC4014-A430-4B61-AC2E-5006BC2CE01D}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {88AC7B4E-5462-4639-868A-BC344E93A4D1}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/About.aspx",
    "content": "﻿<%@ Page Title=\"About\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"About.aspx.cs\" Inherits=\"WebFormsDemo.About\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n    <h3>Your application description page.</h3>\n    <p>Use this area to provide additional information.</p>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/About.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace WebFormsDemo\n{\n    public partial class About : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/About.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo\n{\n\n\n    public partial class About\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/AddPhoneNumber.aspx",
    "content": "﻿<%@ Page Title=\"Phone Number\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"AddPhoneNumber.aspx.cs\" Inherits=\"WebFormsDemo.Account.AddPhoneNumber\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n\n    <div class=\"form-horizontal\">\n        <h4>Add a phone number</h4>\n        <hr />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <p class=\"text-danger\">\n            <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n        </p>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"PhoneNumber\" CssClass=\"col-md-2 control-label\">Phone Number</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"PhoneNumber\" CssClass=\"form-control\" TextMode=\"Phone\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"PhoneNumber\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The PhoneNumber field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"PhoneNumber_Click\"\n                    Text=\"Submit\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/AddPhoneNumber.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing System.Threading.Tasks;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class AddPhoneNumber : System.Web.UI.Page\n    {\n        protected void PhoneNumber_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var code = manager.GenerateChangePhoneNumberToken(User.Identity.GetUserId(), PhoneNumber.Text);\n            if (manager.SmsService != null)\n            {\n                var message = new IdentityMessage\n                {\n                    Destination = PhoneNumber.Text,\n                    Body = \"Your security code is \" + code\n                };\n\n                manager.SmsService.Send(message);\n            }\n\n            Response.Redirect(\"/Account/VerifyPhoneNumber?PhoneNumber=\" + HttpUtility.UrlEncode(PhoneNumber.Text));\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/AddPhoneNumber.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class AddPhoneNumber {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// PhoneNumber control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox PhoneNumber;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Confirm.aspx",
    "content": "﻿<%@ Page Title=\"Account Confirmation\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Confirm.aspx.cs\" Inherits=\"WebFormsDemo.Account.Confirm\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n\n    <div>\n        <asp:PlaceHolder runat=\"server\" ID=\"successPanel\" ViewStateMode=\"Disabled\" Visible=\"true\">\n            <p>\n                Thank you for confirming your account. Click <asp:HyperLink ID=\"login\" runat=\"server\" NavigateUrl=\"~/Account/Login\">here</asp:HyperLink>  to login             \n            </p>\n        </asp:PlaceHolder>\n        <asp:PlaceHolder runat=\"server\" ID=\"errorPanel\" ViewStateMode=\"Disabled\" Visible=\"false\">\n            <p class=\"text-danger\">\n                An error has occurred.\n            </p>\n        </asp:PlaceHolder>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Confirm.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class Confirm : Page\n    {\n        protected string StatusMessage\n        {\n            get;\n            private set;\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            string code = IdentityHelper.GetCodeFromRequest(Request);\n            string userId = IdentityHelper.GetUserIdFromRequest(Request);\n            if (code != null && userId != null)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var result = manager.ConfirmEmail(userId, code);\n                if (result.Succeeded)\n                {\n                    successPanel.Visible = true;\n                    return;\n                }\n            }\n            successPanel.Visible = false;\n            errorPanel.Visible = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Confirm.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class Confirm {\n        \n        /// <summary>\n        /// successPanel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder successPanel;\n        \n        /// <summary>\n        /// login control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink login;\n        \n        /// <summary>\n        /// errorPanel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder errorPanel;\n\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Forgot.aspx",
    "content": "﻿<%@ Page Title=\"Forgot password\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Forgot.aspx.cs\" Inherits=\"WebFormsDemo.Account.ForgotPassword\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            <asp:PlaceHolder id=\"loginForm\" runat=\"server\">\n                <div class=\"form-horizontal\">\n                    <h4>Forgot your password?</h4>\n                    <hr />\n                    <asp:PlaceHolder runat=\"server\" ID=\"ErrorMessage\" Visible=\"false\">\n                        <p class=\"text-danger\">\n                            <asp:Literal runat=\"server\" ID=\"FailureText\" />\n                        </p>\n                    </asp:PlaceHolder>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" OnClick=\"Forgot\" Text=\"Email Link\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n            </asp:PlaceHolder>\n            <asp:PlaceHolder runat=\"server\" ID=\"DisplayEmail\" Visible=\"false\">\n                <p class=\"text-info\">\n                    Please check your email to reset your password.\n                </p>\n            </asp:PlaceHolder>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Forgot.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class ForgotPassword : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n        }\n\n        protected void Forgot(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                // Validate the user's email address\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                ApplicationUser user = manager.FindByName(Email.Text);\n                if (user == null || !manager.IsEmailConfirmed(user.Id))\n                {\n                    FailureText.Text = \"The user either does not exist or is not confirmed.\";\n                    ErrorMessage.Visible = true;\n                    return;\n                }\n                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                // Send email with the code and the redirect to reset password page\n                //string code = manager.GeneratePasswordResetToken(user.Id);\n                //string callbackUrl = IdentityHelper.GetResetPasswordRedirectUrl(code, Request);\n                //manager.SendEmail(user.Id, \"Reset Password\", \"Please reset your password by clicking <a href=\\\"\" + callbackUrl + \"\\\">here</a>.\");\n                loginForm.Visible = false;\n                DisplayEmail.Visible = true;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Forgot.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class ForgotPassword {\n        \n        /// <summary>\n        /// loginForm control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder loginForm;\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;\n        \n        /// <summary>\n        /// FailureText control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal FailureText;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// DisplayEmail control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder DisplayEmail;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Lockout.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Lockout.aspx.cs\" Inherits=\"WebFormsDemo.Account.Lockout\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <hgroup>\n        <h1>Locked out.</h1>\n        <h2 class=\"text-danger\">This account has been locked out, please try again later.</h2>\n    </hgroup>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Lockout.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class Lockout : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Lockout.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account\n{\n\n\n    public partial class Lockout\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Login.aspx",
    "content": "﻿<%@ Page Title=\"Log in\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Login.aspx.cs\" Inherits=\"WebFormsDemo.Account.Login\" Async=\"true\" %>\n\n<%@ Register Src=\"~/Account/OpenAuthProviders.ascx\" TagPrefix=\"uc\" TagName=\"OpenAuthProviders\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            <section id=\"loginForm\">\n                <div class=\"form-horizontal\">\n                    <h4>Use a local account to log in.</h4>\n                    <hr />\n                    <asp:PlaceHolder runat=\"server\" ID=\"ErrorMessage\" Visible=\"false\">\n                        <p class=\"text-danger\">\n                            <asp:Literal runat=\"server\" ID=\"FailureText\" />\n                        </p>\n                    </asp:PlaceHolder>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"Password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"Password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Password\" CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <div class=\"checkbox\">\n                                <asp:CheckBox runat=\"server\" ID=\"RememberMe\" />\n                                <asp:Label runat=\"server\" AssociatedControlID=\"RememberMe\">Remember me?</asp:Label>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" OnClick=\"LogIn\" Text=\"Log in\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n                <p>\n                    <asp:HyperLink runat=\"server\" ID=\"RegisterHyperLink\" ViewStateMode=\"Disabled\">Register as a new user</asp:HyperLink>\n                </p>\n                <p>\n                    <%-- Enable this once you have account confirmation enabled for password reset functionality\n                    <asp:HyperLink runat=\"server\" ID=\"ForgotPasswordHyperLink\" ViewStateMode=\"Disabled\">Forgot your password?</asp:HyperLink>\n                    --%>\n                </p>\n            </section>\n        </div>\n\n        <div class=\"col-md-4\">\n            <section id=\"socialLoginForm\">\n                <uc:OpenAuthProviders runat=\"server\" ID=\"OpenAuthLogin\" />\n            </section>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Login.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class Login : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            RegisterHyperLink.NavigateUrl = \"Register\";\n            // Enable this once you have account confirmation enabled for password reset functionality\n            //ForgotPasswordHyperLink.NavigateUrl = \"Forgot\";\n            OpenAuthLogin.ReturnUrl = Request.QueryString[\"ReturnUrl\"];\n            var returnUrl = HttpUtility.UrlEncode(Request.QueryString[\"ReturnUrl\"]);\n            if (!String.IsNullOrEmpty(returnUrl))\n            {\n                RegisterHyperLink.NavigateUrl += \"?ReturnUrl=\" + returnUrl;\n            }\n        }\n\n        protected void LogIn(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                // Validate the user password\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();\n\n                // This doen't count login failures towards account lockout\n                // To enable password failures to trigger lockout, change to shouldLockout: true\n                var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: false);\n\n                switch (result)\n                {\n                    case SignInStatus.Success:\n                        IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                        break;\n                    case SignInStatus.LockedOut:\n                        Response.Redirect(\"/Account/Lockout\");\n                        break;\n                    case SignInStatus.RequiresVerification:\n                        Response.Redirect(String.Format(\"/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}\", \n                                                        Request.QueryString[\"ReturnUrl\"],\n                                                        RememberMe.Checked),\n                                          true);\n                        break;\n                    case SignInStatus.Failure:\n                    default:\n                        FailureText.Text = \"Invalid login attempt\";\n                        ErrorMessage.Visible = true;\n                        break;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Login.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class Login {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;\n        \n        /// <summary>\n        /// FailureText control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal FailureText;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// Password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Password;\n        \n        /// <summary>\n        /// RememberMe control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.CheckBox RememberMe;\n        \n        /// <summary>\n        /// RegisterHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink RegisterHyperLink;\n        \n        /// <summary>\n        /// OpenAuthLogin control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::WebFormsDemo.Account.OpenAuthProviders OpenAuthLogin;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Manage.aspx",
    "content": "﻿<%@ Page Title=\"Manage Account\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Manage.aspx.cs\" Inherits=\"WebFormsDemo.Account.Manage\" %>\n\n<%@ Register Src=\"~/Account/OpenAuthProviders.ascx\" TagPrefix=\"uc\" TagName=\"OpenAuthProviders\" %>\n\n<asp:Content ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n\n    <div>\n        <asp:PlaceHolder runat=\"server\" ID=\"successMessage\" Visible=\"false\" ViewStateMode=\"Disabled\">\n            <p class=\"text-success\"><%: SuccessMessage %></p>\n        </asp:PlaceHolder>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"form-horizontal\">\n                <h4>Change your account settings</h4>\n                <hr />\n                <dl class=\"dl-horizontal\">\n                    <dt>Password:</dt>\n                    <dd>\n                        <asp:HyperLink NavigateUrl=\"/Account/ManagePassword\" Text=\"[Change]\" Visible=\"false\" ID=\"ChangePassword\" runat=\"server\" />\n                        <asp:HyperLink NavigateUrl=\"/Account/ManagePassword\" Text=\"[Create]\" Visible=\"false\" ID=\"CreatePassword\" runat=\"server\" />\n                    </dd>\n                    <dt>External Logins:</dt>\n                    <dd><%: LoginsCount %>\n                        <asp:HyperLink NavigateUrl=\"/Account/ManageLogins\" Text=\"[Manage]\" runat=\"server\" />\n\n                    </dd>\n                    <%--\n                        Phone Numbers can used as a second factor of verification in a two-factor authentication system.\n                        See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                        for details on setting up this ASP.NET application to support two-factor authentication using SMS.\n                        Uncomment the following blocks after you have set up two-factor authentication\n                    --%>\n                    <%--\n                    <dt>Phone Number:</dt>\n                    <% if (HasPhoneNumber)\n                       { %>\n                    <dd>\n                        <asp:HyperLink NavigateUrl=\"/Account/AddPhoneNumber\" runat=\"server\" Text=\"[Add]\" />\n                    </dd>\n                    <% }\n                       else\n                       { %>\n                    <dd>\n                        <asp:Label Text=\"\" ID=\"PhoneNumber\" runat=\"server\" />\n                        <asp:HyperLink NavigateUrl=\"/Account/AddPhoneNumber\" runat=\"server\" Text=\"[Change]\" /> &nbsp;|&nbsp;\n                        <asp:LinkButton Text=\"[Remove]\" OnClick=\"RemovePhone_Click\" runat=\"server\" />\n                    </dd>\n                    <% } %>\n                    --%>\n\n                    <dt>Two-Factor Authentication:</dt>\n                    <dd>\n                        <p>\n                            There are no two-factor authentication providers configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=403804\">this article</a>\n                            for details on setting up this ASP.NET application to support two-factor authentication.\n                        </p>\n                        <% if (TwoFactorEnabled)\n                          { %> \n                        <%--\n                        Enabled\n                        <asp:LinkButton Text=\"[Disable]\" runat=\"server\" CommandArgument=\"false\" OnClick=\"TwoFactorDisable_Click\" />\n                        --%>\n                        <% }\n                          else\n                          { %> \n                        <%--\n                        Disabled\n                        <asp:LinkButton Text=\"[Enable]\" CommandArgument=\"true\" OnClick=\"TwoFactorEnable_Click\" runat=\"server\" />\n                        --%>\n                        <% } %>\n                    </dd>\n                </dl>\n            </div>\n        </div>\n    </div>\n\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Manage.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class Manage : System.Web.UI.Page\n    {\n        protected string SuccessMessage\n        {\n            get;\n            private set;\n        }\n\n        private bool HasPassword(ApplicationUserManager manager)\n        {\n            return manager.HasPassword(User.Identity.GetUserId());\n        }\n\n        public bool HasPhoneNumber { get; private set; }\n\n        public bool TwoFactorEnabled { get; private set; }\n\n        public bool TwoFactorBrowserRemembered { get; private set; }\n\n        public int LoginsCount { get; set; }\n\n        protected void Page_Load()\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n\n            HasPhoneNumber = String.IsNullOrEmpty(manager.GetPhoneNumber(User.Identity.GetUserId()));\n\n            // Enable this after setting up two-factor authentientication\n            //PhoneNumber.Text = manager.GetPhoneNumber(User.Identity.GetUserId()) ?? String.Empty;\n\n            TwoFactorEnabled = manager.GetTwoFactorEnabled(User.Identity.GetUserId());\n\n            LoginsCount = manager.GetLogins(User.Identity.GetUserId()).Count;\n\n            var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;\n\n            if (!IsPostBack)\n            {\n                // Determine the sections to render\n                if (HasPassword(manager))\n                {\n                    ChangePassword.Visible = true;\n                }\n                else\n                {\n                    CreatePassword.Visible = true;\n                    ChangePassword.Visible = false;\n                }\n\n                // Render success message\n                var message = Request.QueryString[\"m\"];\n                if (message != null)\n                {\n                    // Strip the query string from action\n                    Form.Action = ResolveUrl(\"~/Account/Manage\");\n\n                    SuccessMessage =\n                        message == \"ChangePwdSuccess\" ? \"Your password has been changed.\"\n                        : message == \"SetPwdSuccess\" ? \"Your password has been set.\"\n                        : message == \"RemoveLoginSuccess\" ? \"The account was removed.\"\n                        : message == \"AddPhoneNumberSuccess\" ? \"Phone number has been added\"\n                        : message == \"RemovePhoneNumberSuccess\" ? \"Phone number was removed\"\n                        : String.Empty;\n                    successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);\n                }\n            }\n        }\n\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n\n        // Remove phonenumber from user\n        protected void RemovePhone_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n            var result = manager.SetPhoneNumber(User.Identity.GetUserId(), null);\n            if (!result.Succeeded)\n            {\n                return;\n            }\n            var user = manager.FindById(User.Identity.GetUserId());\n            if (user != null)\n            {\n                signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                Response.Redirect(\"/Account/Manage?m=RemovePhoneNumberSuccess\");\n            }\n        }\n\n        // DisableTwoFactorAuthentication\n        protected void TwoFactorDisable_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            manager.SetTwoFactorEnabled(User.Identity.GetUserId(), false);\n\n            Response.Redirect(\"/Account/Manage\");\n        }\n\n        //EnableTwoFactorAuthentication \n        protected void TwoFactorEnable_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            manager.SetTwoFactorEnabled(User.Identity.GetUserId(), true);\n\n            Response.Redirect(\"/Account/Manage\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Manage.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class Manage {\n        \n        /// <summary>\n        /// successMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder successMessage;\n        \n        /// <summary>\n        /// ChangePassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink ChangePassword;\n        \n        /// <summary>\n        /// CreatePassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink CreatePassword;\n        \n        /// <summary>\n        /// PhoneNumber control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label PhoneNumber;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ManageLogins.aspx",
    "content": "﻿<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ManageLogins.aspx.cs\" Inherits=\"WebFormsDemo.Account.ManageLogins\" %>\n<%@ Register Src=\"~/Account/OpenAuthProviders.ascx\" TagPrefix=\"uc\" TagName=\"OpenAuthProviders\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2>Manage your external logins.</h2>\n    <asp:PlaceHolder runat=\"server\" ID=\"successMessage\" Visible=\"false\" ViewStateMode=\"Disabled\">\n            <p class=\"text-success\"><%: SuccessMessage %></p>\n        </asp:PlaceHolder>\n    <div>\n        <section id=\"externalLoginsForm\">\n\n            <asp:ListView runat=\"server\"\n                ItemType=\"Microsoft.AspNet.Identity.UserLoginInfo\"\n                SelectMethod=\"GetLogins\" DeleteMethod=\"RemoveLogin\" DataKeyNames=\"LoginProvider,ProviderKey\">\n\n                <LayoutTemplate>\n                    <h4>Registered Logins</h4>\n                    <table class=\"table\">\n                        <tbody>\n                            <tr runat=\"server\" id=\"itemPlaceholder\"></tr>\n                        </tbody>\n                    </table>\n\n                </LayoutTemplate>\n                <ItemTemplate>\n                    <tr>\n                        <td><%#: Item.LoginProvider %></td>\n                        <td>\n                            <asp:Button runat=\"server\" Text=\"Remove\" CommandName=\"Delete\" CausesValidation=\"false\"\n                                ToolTip='<%# \"Remove this \" + Item.LoginProvider + \" login from your account\" %>'\n                                Visible=\"<%# CanRemoveExternalLogins %>\" CssClass=\"btn btn-default\" />\n                        </td>\n                    </tr>\n                </ItemTemplate>\n            </asp:ListView>\n\n        </section>\n    </div>\n    <div>\n        <uc:OpenAuthProviders runat=\"server\" ReturnUrl=\"~/Account/ManageLogins\" />\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ManageLogins.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class ManageLogins : System.Web.UI.Page\n    {\n        protected string SuccessMessage\n        {\n            get;\n            private set;\n        }\n        protected bool CanRemoveExternalLogins\n        {\n            get;\n            private set;\n        }\n\n        private bool HasPassword(ApplicationUserManager manager)\n        {\n            return manager.HasPassword(User.Identity.GetUserId());\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            CanRemoveExternalLogins = manager.GetLogins(User.Identity.GetUserId()).Count() > 1;\n\n            SuccessMessage = String.Empty;\n            successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage);\n        }\n\n        public IEnumerable<UserLoginInfo> GetLogins()\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var accounts = manager.GetLogins(User.Identity.GetUserId());\n            CanRemoveExternalLogins = accounts.Count() > 1 || HasPassword(manager);\n            return accounts;\n        }\n\n        public void RemoveLogin(string loginProvider, string providerKey)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n            var result = manager.RemoveLogin(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));\n            string msg = String.Empty;\n            if (result.Succeeded)\n            {\n                var user = manager.FindById(User.Identity.GetUserId());\n                signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                msg = \"?m=RemoveLoginSuccess\";\n            }\n            Response.Redirect(\"~/Account/ManageLogins\" + msg);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ManageLogins.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class ManageLogins {\n        \n        /// <summary>\n        /// successMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder successMessage;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ManagePassword.aspx",
    "content": "﻿<%@ Page Title=\"Manage Password\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ManagePassword.aspx.cs\" Inherits=\"WebFormsDemo.Account.ManagePassword\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n    <div class=\"form-horizontal\">\n        <section id=\"passwordForm\">\n            <asp:PlaceHolder runat=\"server\" ID=\"setPassword\" Visible=\"false\">\n                <p>\n                    You do not have a local password for this site. Add a local\n                        password so you can log in without an external login.\n                </p>\n                <div class=\"form-horizontal\">\n                    <h4>Set Password Form</h4>\n                    <asp:ValidationSummary runat=\"server\" ShowModelStateErrors=\"true\" CssClass=\"text-danger\" />\n                    <hr />\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"password\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\"\n                                Display=\"Dynamic\" ValidationGroup=\"SetPassword\" />\n                            <asp:ModelErrorMessage runat=\"server\" ModelStateKey=\"NewPassword\" AssociatedControlID=\"password\"\n                                CssClass=\"text-danger\" SetFocusOnError=\"true\" />\n                        </div>\n                    </div>\n\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" AssociatedControlID=\"confirmPassword\" CssClass=\"col-md-2 control-label\">Confirm password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"confirmPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"confirmPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The confirm password field is required.\"\n                                ValidationGroup=\"SetPassword\" />\n                            <asp:CompareValidator runat=\"server\" ControlToCompare=\"Password\" ControlToValidate=\"confirmPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The password and confirmation password do not match.\"\n                                ValidationGroup=\"SetPassword\" />\n\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" Text=\"Set Password\" ValidationGroup=\"SetPassword\" OnClick=\"SetPassword_Click\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n            </asp:PlaceHolder>\n\n            <asp:PlaceHolder runat=\"server\" ID=\"changePasswordHolder\" Visible=\"false\">\n                <div class=\"form-horizontal\">\n                    <h4>Change Password Form</h4>\n                    <hr />\n                    <asp:ValidationSummary runat=\"server\" ShowModelStateErrors=\"true\" CssClass=\"text-danger\" />\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" ID=\"CurrentPasswordLabel\" AssociatedControlID=\"CurrentPassword\" CssClass=\"col-md-2 control-label\">Current password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"CurrentPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"CurrentPassword\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The current password field is required.\"\n                                ValidationGroup=\"ChangePassword\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" ID=\"NewPasswordLabel\" AssociatedControlID=\"NewPassword\" CssClass=\"col-md-2 control-label\">New password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"NewPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"NewPassword\"\n                                CssClass=\"text-danger\" ErrorMessage=\"The new password is required.\"\n                                ValidationGroup=\"ChangePassword\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <asp:Label runat=\"server\" ID=\"ConfirmNewPasswordLabel\" AssociatedControlID=\"ConfirmNewPassword\" CssClass=\"col-md-2 control-label\">Confirm new password</asp:Label>\n                        <div class=\"col-md-10\">\n                            <asp:TextBox runat=\"server\" ID=\"ConfirmNewPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                            <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"ConfirmNewPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"Confirm new password is required.\"\n                                ValidationGroup=\"ChangePassword\" />\n                            <asp:CompareValidator runat=\"server\" ControlToCompare=\"NewPassword\" ControlToValidate=\"ConfirmNewPassword\"\n                                CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The new password and confirmation password do not match.\"\n                                ValidationGroup=\"ChangePassword\" />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div class=\"col-md-offset-2 col-md-10\">\n                            <asp:Button runat=\"server\" Text=\"Change Password\" ValidationGroup=\"ChangePassword\" OnClick=\"ChangePassword_Click\" CssClass=\"btn btn-default\" />\n                        </div>\n                    </div>\n                </div>\n            </asp:PlaceHolder>\n        </section>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ManagePassword.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class ManagePassword : System.Web.UI.Page\n    {\n        protected string SuccessMessage\n        {\n            get;\n            private set;\n        }\n\n        private bool HasPassword(ApplicationUserManager manager)\n        {\n            return manager.HasPassword(User.Identity.GetUserId());\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n\n            if (!IsPostBack)\n            {\n                // Determine the sections to render\n                if (HasPassword(manager))\n                {\n                    changePasswordHolder.Visible = true;\n                }\n                else\n                {\n                    setPassword.Visible = true;\n                    changePasswordHolder.Visible = false;\n                }\n\n                // Render success message\n                var message = Request.QueryString[\"m\"];\n                if (message != null)\n                {\n                    // Strip the query string from action\n                    Form.Action = ResolveUrl(\"~/Account/Manage\");\n                }\n            }\n        }\n\n        protected void ChangePassword_Click(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n                IdentityResult result = manager.ChangePassword(User.Identity.GetUserId(), CurrentPassword.Text, NewPassword.Text);\n                if (result.Succeeded)\n                {\n                    var user = manager.FindById(User.Identity.GetUserId());\n                    signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);\n                    Response.Redirect(\"~/Account/Manage?m=ChangePwdSuccess\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n        }\n\n        protected void SetPassword_Click(object sender, EventArgs e)\n        {\n            if (IsValid)\n            {\n                // Create the local login info and link the local account to the user\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                IdentityResult result = manager.AddPassword(User.Identity.GetUserId(), password.Text);\n                if (result.Succeeded)\n                {\n                    Response.Redirect(\"~/Account/Manage?m=SetPwdSuccess\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ManagePassword.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class ManagePassword {\n        \n        /// <summary>\n        /// setPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder setPassword;\n        \n        /// <summary>\n        /// password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox password;\n        \n        /// <summary>\n        /// confirmPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox confirmPassword;\n        \n        /// <summary>\n        /// changePasswordHolder control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder changePasswordHolder;\n        \n        /// <summary>\n        /// CurrentPasswordLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label CurrentPasswordLabel;\n        \n        /// <summary>\n        /// CurrentPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox CurrentPassword;\n        \n        /// <summary>\n        /// NewPasswordLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label NewPasswordLabel;\n        \n        /// <summary>\n        /// NewPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox NewPassword;\n        \n        /// <summary>\n        /// ConfirmNewPasswordLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label ConfirmNewPasswordLabel;\n        \n        /// <summary>\n        /// ConfirmNewPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox ConfirmNewPassword;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/OpenAuthProviders.ascx",
    "content": "﻿<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"OpenAuthProviders.ascx.cs\" Inherits=\"WebFormsDemo.Account.OpenAuthProviders\" %>\n\n<div id=\"socialLoginList\">\n    <h4>Use another service to log in.</h4>\n    <hr />\n    <asp:ListView runat=\"server\" ID=\"providerDetails\" ItemType=\"System.String\"\n        SelectMethod=\"GetProviderNames\" ViewStateMode=\"Disabled\">\n        <ItemTemplate>\n            <p>\n                <button type=\"submit\" class=\"btn btn-default\" name=\"provider\" value=\"<%#: Item %>\"\n                    title=\"Log in using your <%#: Item %> account.\">\n                    <%#: Item %>\n                </button>\n            </p>\n        </ItemTemplate>\n        <EmptyDataTemplate>\n            <div>\n                <p>There are no external authentication services configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkId=252803\">this article</a> for details on setting up this ASP.NET application to support logging in via external services.</p>\n            </div>\n        </EmptyDataTemplate>\n    </asp:ListView>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/OpenAuthProviders.ascx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.Owin.Security;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class OpenAuthProviders : System.Web.UI.UserControl\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            if (IsPostBack)\n            {\n                var provider = Request.Form[\"provider\"];\n                if (provider == null)\n                {\n                    return;\n                }\n                // Request a redirect to the external login provider\n                string redirectUrl = ResolveUrl(String.Format(CultureInfo.InvariantCulture, \"~/Account/RegisterExternalLogin?{0}={1}&returnUrl={2}\", IdentityHelper.ProviderNameKey, provider, ReturnUrl));\n                var properties = new AuthenticationProperties() { RedirectUri = redirectUrl };\n                // Add xsrf verification when linking accounts\n                if (Context.User.Identity.IsAuthenticated)\n                {\n                    properties.Dictionary[IdentityHelper.XsrfKey] = Context.User.Identity.GetUserId();\n                }\n                Context.GetOwinContext().Authentication.Challenge(properties, provider);\n                Response.StatusCode = 401;\n                Response.End();\n            }\n        }\n\n        public string ReturnUrl { get; set; }\n\n        public IEnumerable<string> GetProviderNames()\n        {\n            return Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes().Select(t => t.AuthenticationType);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/OpenAuthProviders.ascx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class OpenAuthProviders {\n        \n        /// <summary>\n        /// providerDetails control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ListView providerDetails;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Register.aspx",
    "content": "﻿<%@ Page Title=\"Register\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Register.aspx.cs\" Inherits=\"WebFormsDemo.Account.Register\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n    <p class=\"text-danger\">\n        <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n    </p>\n\n    <div class=\"form-horizontal\">\n        <h4>Create a new account</h4>\n        <hr />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Password\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"ConfirmPassword\" CssClass=\"col-md-2 control-label\">Confirm password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"ConfirmPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The confirm password field is required.\" />\n                <asp:CompareValidator runat=\"server\" ControlToCompare=\"Password\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The password and confirmation password do not match.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"CreateUser_Click\" Text=\"Register\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Register.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class Register : Page\n    {\n        protected void CreateUser_Click(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n            var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };\n            IdentityResult result = manager.Create(user, Password.Text);\n            if (result.Succeeded)\n            {\n                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                //string code = manager.GenerateEmailConfirmationToken(user.Id);\n                //string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);\n                //manager.SendEmail(user.Id, \"Confirm your account\", \"Please confirm your account by clicking <a href=\\\"\" + callbackUrl + \"\\\">here</a>.\");\n\n                signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);\n                IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n            }\n            else \n            {\n                ErrorMessage.Text = result.Errors.FirstOrDefault();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Register.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class Register {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// Password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Password;\n        \n        /// <summary>\n        /// ConfirmPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox ConfirmPassword;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/RegisterExternalLogin.aspx",
    "content": "﻿<%@ Page Title=\"Register an external login\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"RegisterExternalLogin.aspx.cs\" Inherits=\"WebFormsDemo.Account.RegisterExternalLogin\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n<h3>Register with your <%: ProviderName %> account</h3>\n\n    <asp:PlaceHolder runat=\"server\">\n        <div class=\"form-horizontal\">\n            <h4>Association Form</h4>\n            <hr />\n            <asp:ValidationSummary runat=\"server\" ShowModelStateErrors=\"true\" CssClass=\"text-danger\" />\n            <p class=\"text-info\">\n                You've authenticated with <strong><%: ProviderName %></strong>. Please enter an email below for the current site\n                and click the Log in button.\n            </p>\n\n            <div class=\"form-group\">\n                <asp:Label runat=\"server\" AssociatedControlID=\"email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n                <div class=\"col-md-10\">\n                    <asp:TextBox runat=\"server\" ID=\"email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                    <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"email\"\n                        Display=\"Dynamic\" CssClass=\"text-danger\" ErrorMessage=\"Email is required\" />\n                    <asp:ModelErrorMessage runat=\"server\" ModelStateKey=\"email\" CssClass=\"text-error\" />\n                </div>\n            </div>\n\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <asp:Button runat=\"server\" Text=\"Log in\" CssClass=\"btn btn-default\" OnClick=\"LogIn_Click\" />\n                </div>\n            </div>\n        </div>\n    </asp:PlaceHolder>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/RegisterExternalLogin.aspx.cs",
    "content": "﻿using System;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class RegisterExternalLogin : System.Web.UI.Page\n    {\n        protected string ProviderName\n        {\n            get { return (string)ViewState[\"ProviderName\"] ?? String.Empty; }\n            private set { ViewState[\"ProviderName\"] = value; }\n        }\n\n        protected string ProviderAccountKey\n        {\n            get { return (string)ViewState[\"ProviderAccountKey\"] ?? String.Empty; }\n            private set { ViewState[\"ProviderAccountKey\"] = value; }\n        }\n\n        private void RedirectOnFail()\n        {\n            Response.Redirect((User.Identity.IsAuthenticated) ? \"~/Account/Manage\" : \"~/Account/Login\");\n        }\n\n        protected void Page_Load()\n        {\n            // Process the result from an auth provider in the request\n            ProviderName = IdentityHelper.GetProviderNameFromRequest(Request);\n            if (String.IsNullOrEmpty(ProviderName))\n            {\n                RedirectOnFail();\n                return;\n            }\n            if (!IsPostBack)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n                var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n                var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();\n                if (loginInfo == null)\n                {\n                    RedirectOnFail();\n                    return;\n                }\n                var user = manager.Find(loginInfo.Login);\n                if (user != null)\n                {\n                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                    IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                }\n                else if (User.Identity.IsAuthenticated)\n                {\n                    // Apply Xsrf check when linking\n                    var verifiedloginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo(IdentityHelper.XsrfKey, User.Identity.GetUserId());\n                    if (verifiedloginInfo == null)\n                    {\n                        RedirectOnFail();\n                        return;\n                    }\n\n                    var result = manager.AddLogin(User.Identity.GetUserId(), verifiedloginInfo.Login);\n                    if (result.Succeeded)\n                    {\n                        IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                    }\n                    else\n                    {\n                        AddErrors(result);\n                        return;\n                    }\n                }\n                else\n                {\n                    email.Text = loginInfo.Email;\n                }\n            }\n        }        \n        \n        protected void LogIn_Click(object sender, EventArgs e)\n        {\n            CreateAndLoginUser();\n        }\n\n        private void CreateAndLoginUser()\n        {\n            if (!IsValid)\n            {\n                return;\n            }\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();\n            var user = new ApplicationUser() { UserName = email.Text, Email = email.Text };\n            IdentityResult result = manager.Create(user);\n            if (result.Succeeded)\n            {\n                var loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo();\n                if (loginInfo == null)\n                {\n                    RedirectOnFail();\n                    return;\n                }\n                result = manager.AddLogin(user.Id, loginInfo.Login);\n                if (result.Succeeded)\n                {\n                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n\n                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771\n                    // var code = manager.GenerateEmailConfirmationToken(user.Id);\n                    // Send this link via email: IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id)\n\n                    IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                    return;\n                }\n            }\n            AddErrors(result);\n        }\n\n        private void AddErrors(IdentityResult result) \n        {\n            foreach (var error in result.Errors) \n            {\n                ModelState.AddModelError(\"\", error);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/RegisterExternalLogin.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class RegisterExternalLogin {\n        \n        /// <summary>\n        /// email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox email;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ResetPassword.aspx",
    "content": "﻿<%@ Page Title=\"Reset Password\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ResetPassword.aspx.cs\" Inherits=\"WebFormsDemo.Account.ResetPassword\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n    <p class=\"text-danger\">\n        <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n    </p>\n\n    <div class=\"form-horizontal\">\n        <h4>Enter your new password</h4>\n        <hr />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Email\" CssClass=\"col-md-2 control-label\">Email</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Email\" CssClass=\"form-control\" TextMode=\"Email\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Email\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The email field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Password\" CssClass=\"col-md-2 control-label\">Password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Password\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Password\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The password field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"ConfirmPassword\" CssClass=\"col-md-2 control-label\">Confirm password</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"ConfirmPassword\" TextMode=\"Password\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The confirm password field is required.\" />\n                <asp:CompareValidator runat=\"server\" ControlToCompare=\"Password\" ControlToValidate=\"ConfirmPassword\"\n                    CssClass=\"text-danger\" Display=\"Dynamic\" ErrorMessage=\"The password and confirmation password do not match.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"Reset_Click\" Text=\"Reset\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ResetPassword.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class ResetPassword : Page\n    {\n        protected string StatusMessage\n        {\n            get;\n            private set;\n        }\n\n        protected void Reset_Click(object sender, EventArgs e)\n        {\n            string code = IdentityHelper.GetCodeFromRequest(Request);\n            if (code != null)\n            {\n                var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n\n                var user = manager.FindByName(Email.Text);\n                if (user == null)\n                {\n                    ErrorMessage.Text = \"No user found\";\n                    return;\n                }\n                var result = manager.ResetPassword(user.Id, code, Password.Text);\n                if (result.Succeeded)\n                {\n                    Response.Redirect(\"~/Account/ResetPasswordConfirmation\");\n                    return;\n                }\n                ErrorMessage.Text = result.Errors.FirstOrDefault();\n                return;\n            }\n\n            ErrorMessage.Text = \"An error has occurred\";\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ResetPassword.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class ResetPassword {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// Email control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Email;\n        \n        /// <summary>\n        /// Password control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Password;\n        \n        /// <summary>\n        /// ConfirmPassword control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox ConfirmPassword;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ResetPasswordConfirmation.aspx",
    "content": "﻿<%@ Page Title=\"Password Changed\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"ResetPasswordConfirmation.aspx.cs\" Inherits=\"WebFormsDemo.Account.ResetPasswordConfirmation\" Async=\"true\" %>\n\n<asp:Content runat=\"server\" ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\">\n    <h2><%: Title %>.</h2>\n    <div>\n        <p>Your password has been changed. Click <asp:HyperLink ID=\"login\" runat=\"server\" NavigateUrl=\"~/Account/Login\">here</asp:HyperLink> to login </p>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ResetPasswordConfirmation.aspx.cs",
    "content": "﻿using System.Web.UI;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class ResetPasswordConfirmation : Page\n    {\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/ResetPasswordConfirmation.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class ResetPasswordConfirmation {\n\n        /// <summary>\n        /// login control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink login;    \n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/TwoFactorAuthenticationSignIn.aspx",
    "content": "﻿<%@ Page Title=\"Two-Factor Authentication\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"TwoFactorAuthenticationSignIn.aspx.cs\" Inherits=\"WebFormsDemo.Account.TwoFactorAuthenticationSignIn\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n        <h2><%: Title %>.</h2>\n    <asp:PlaceHolder runat=\"server\" ID=\"sendcode\">\n        <section>\n            <h4>Send verification code</h4>\n            <hr />\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    Select Two-Factor Authentication Provider:\n            <asp:DropDownList runat=\"server\" ID=\"Providers\">\n            </asp:DropDownList>\n                    <asp:Button Text=\"Submit\" ID=\"ProviderSubmit\" OnClick=\"ProviderSubmit_Click\" CssClass=\"btn btn-default\" runat=\"server\" />\n                </div>\n            </div>\n        </section>\n    </asp:PlaceHolder>\n    <asp:PlaceHolder runat=\"server\" ID=\"verifycode\" Visible=\"false\">\n        <section>\n            <h4>Enter verification code</h4>\n            <hr />\n            <asp:HiddenField ID=\"SelectedProvider\" runat=\"server\" />\n            <asp:PlaceHolder runat=\"server\" ID=\"ErrorMessage\" Visible=\"false\">\n                <p class=\"text-danger\">\n                    <asp:Literal runat=\"server\" ID=\"FailureText\" />\n                </p>\n            </asp:PlaceHolder>\n            <div class=\"form-group\">\n                <asp:Label Text=\"Code:\" runat=\"server\" AssociatedControlID=\"Code\" CssClass=\"col-md-2 control-label\" />\n                <div class=\"col-md-10\">\n                    <asp:TextBox runat=\"server\" ID=\"Code\" CssClass=\"form-control\" />\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <div class=\"checkbox\">\n                        <asp:Label Text=\"Remember Browser\" runat=\"server\" />\n                        <asp:CheckBox Text=\"\" ID=\"RememberBrowser\" runat=\"server\" />\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <asp:Button Text=\"Submit\" ID=\"CodeSubmit\" OnClick=\"CodeSubmit_Click\" CssClass=\"btn btn-default\" runat=\"server\" />\n                </div>\n            </div>\n        </section>\n    </asp:PlaceHolder>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/TwoFactorAuthenticationSignIn.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class TwoFactorAuthenticationSignIn : System.Web.UI.Page\n    {\n        private ApplicationSignInManager signinManager;\n        private ApplicationUserManager manager;\n\n        public TwoFactorAuthenticationSignIn()\n        {\n            manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var userId = signinManager.GetVerifiedUserId<ApplicationUser, string>();\n            if (userId == null)\n            {\n                Response.Redirect(\"/Account/Error\", true);\n            }\n            var userFactors = manager.GetValidTwoFactorProviders(userId);\n            Providers.DataSource = userFactors.Select(x => x).ToList();\n            Providers.DataBind();            \n        }\n\n        protected void CodeSubmit_Click(object sender, EventArgs e)\n        {\n            bool rememberMe = false;\n            bool.TryParse(Request.QueryString[\"RememberMe\"], out rememberMe);\n            \n            var result = signinManager.TwoFactorSignIn<ApplicationUser, string>(SelectedProvider.Value, Code.Text, isPersistent: rememberMe, rememberBrowser: RememberBrowser.Checked);\n            switch (result)\n            {\n                case SignInStatus.Success:\n                    IdentityHelper.RedirectToReturnUrl(Request.QueryString[\"ReturnUrl\"], Response);\n                    break;\n                case SignInStatus.LockedOut:\n                    Response.Redirect(\"/Account/Lockout\");\n                    break;\n                case SignInStatus.Failure:\n                default:\n                    FailureText.Text = \"Invalid code\";\n                    ErrorMessage.Visible = true;\n                    break;\n            }\n        }\n\n        protected void ProviderSubmit_Click(object sender, EventArgs e)\n        {\n            if (!signinManager.SendTwoFactorCode(Providers.SelectedValue))\n            {\n                Response.Redirect(\"/Account/Error\");\n            }\n\n            var user = manager.FindById(signinManager.GetVerifiedUserId<ApplicationUser, string>());\n            if (user != null)\n            {\n                var code = manager.GenerateTwoFactorToken(user.Id, Providers.SelectedValue);\n            }\n\n            SelectedProvider.Value = Providers.SelectedValue;\n            sendcode.Visible = false;\n            verifycode.Visible = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/TwoFactorAuthenticationSignIn.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class TwoFactorAuthenticationSignIn {\n        \n        /// <summary>\n        /// sendcode control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder sendcode;\n        \n        /// <summary>\n        /// Providers control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.DropDownList Providers;\n        \n        /// <summary>\n        /// ProviderSubmit control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button ProviderSubmit;\n        \n        /// <summary>\n        /// verifycode control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder verifycode;\n        \n        /// <summary>\n        /// SelectedProvider control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HiddenField SelectedProvider;\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.PlaceHolder ErrorMessage;\n        \n        /// <summary>\n        /// FailureText control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal FailureText;\n        \n        /// <summary>\n        /// Code control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Code;\n        \n        /// <summary>\n        /// RememberBrowser control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.CheckBox RememberBrowser;\n        \n        /// <summary>\n        /// CodeSubmit control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button CodeSubmit;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/VerifyPhoneNumber.aspx",
    "content": "﻿<%@ Page Title=\"Verify Phone Number\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"VerifyPhoneNumber.aspx.cs\" Inherits=\"WebFormsDemo.Account.VerifyPhoneNumber\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n <h2><%: Title %>.</h2>\n    <p class=\"text-danger\">\n        <asp:Literal runat=\"server\" ID=\"ErrorMessage\" />\n    </p>\n    <div class=\"form-horizontal\">\n        <h4>Enter verification code</h4>\n        <hr />\n        <asp:HiddenField runat=\"server\" ID=\"PhoneNumber\" />\n        <asp:ValidationSummary runat=\"server\" CssClass=\"text-danger\" />\n        <div class=\"form-group\">\n            <asp:Label runat=\"server\" AssociatedControlID=\"Code\" CssClass=\"col-md-2 control-label\">Code</asp:Label>\n            <div class=\"col-md-10\">\n                <asp:TextBox runat=\"server\" ID=\"Code\" CssClass=\"form-control\" />\n                <asp:RequiredFieldValidator runat=\"server\" ControlToValidate=\"Code\"\n                    CssClass=\"text-danger\" ErrorMessage=\"The Code field is required.\" />\n            </div>\n        </div>\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <asp:Button runat=\"server\" OnClick=\"Code_Click\"\n                    Text=\"Submit\" CssClass=\"btn btn-default\" />\n            </div>\n        </div>\n    </div>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/VerifyPhoneNumber.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.Owin;\n\nnamespace WebFormsDemo.Account\n{\n    public partial class VerifyPhoneNumber : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var phonenumber = Request.QueryString[\"PhoneNumber\"];\n            var code = manager.GenerateChangePhoneNumberToken(User.Identity.GetUserId(), phonenumber);           \n            PhoneNumber.Value = phonenumber;\n        }\n\n        protected void Code_Click(object sender, EventArgs e)\n        {\n            if (!ModelState.IsValid)\n            {\n                ModelState.AddModelError(\"\", \"Invalid code\");\n                return;\n            }\n\n            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();\n            var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();\n\n            var result = manager.ChangePhoneNumber(User.Identity.GetUserId(), PhoneNumber.Value, Code.Text);\n\n            if (result.Succeeded)\n            {\n                var user = manager.FindById(User.Identity.GetUserId());\n\n                if (user != null)\n                {\n                    signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);\n                    Response.Redirect(\"/Account/Manage?m=AddPhoneNumberSuccess\");\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            ModelState.AddModelError(\"\", \"Failed to verify phone\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/VerifyPhoneNumber.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.Account {\n    \n    \n    public partial class VerifyPhoneNumber {\n        \n        /// <summary>\n        /// ErrorMessage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Literal ErrorMessage;\n        \n        /// <summary>\n        /// PhoneNumber control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HiddenField PhoneNumber;\n        \n        /// <summary>\n        /// Code control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox Code;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Account/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n<configuration>\n\n  <location path=\"Manage.aspx\">\n    <system.web>\n      <authorization>\n        <deny users=\"?\"/>\n      </authorization>\n    </system.web>\n  </location>\n\n</configuration>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/App_Start/BundleConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Optimization;\nusing System.Web.UI;\n\nnamespace WebFormsDemo\n{\n    public class BundleConfig\n    {\n        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkID=303951\n        public static void RegisterBundles(BundleCollection bundles)\n        {\n            bundles.Add(new ScriptBundle(\"~/bundles/WebFormsJs\").Include(\n                            \"~/Scripts/WebForms/WebForms.js\",\n                            \"~/Scripts/WebForms/WebUIValidation.js\",\n                            \"~/Scripts/WebForms/MenuStandards.js\",\n                            \"~/Scripts/WebForms/Focus.js\",\n                            \"~/Scripts/WebForms/GridView.js\",\n                            \"~/Scripts/WebForms/DetailsView.js\",\n                            \"~/Scripts/WebForms/TreeView.js\",\n                            \"~/Scripts/WebForms/WebParts.js\"));\n\n            // Order is very important for these files to work, they have explicit dependencies\n            bundles.Add(new ScriptBundle(\"~/bundles/MsAjaxJs\").Include(\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjax.js\",\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjaxApplicationServices.js\",\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjaxTimer.js\",\n                    \"~/Scripts/WebForms/MsAjax/MicrosoftAjaxWebForms.js\"));\n\n            // Use the Development version of Modernizr to develop with and learn from. Then, when you’re\n            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need\n            bundles.Add(new ScriptBundle(\"~/bundles/modernizr\").Include(\n                            \"~/Scripts/modernizr-*\"));\n\n            ScriptManager.ScriptResourceMapping.AddDefinition(\n                \"respond\",\n                new ScriptResourceDefinition\n                {\n                    Path = \"~/Scripts/respond.min.js\",\n                    DebugPath = \"~/Scripts/respond.js\",\n                });\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/App_Start/IdentityConfig.cs",
    "content": "﻿using System;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo\n{\n    public class EmailService : IIdentityMessageService\n    {\n        public Task SendAsync(IdentityMessage message)\n        {\n            // Plug in your email service here to send an email.\n            return Task.FromResult(0);\n        }\n    }\n\n    public class SmsService : IIdentityMessageService\n    {\n        public Task SendAsync(IdentityMessage message)\n        {\n            // Plug in your SMS service here to send a text message.\n            return Task.FromResult(0);\n        }\n    }\n\n    // Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.\n    public class ApplicationUserManager : UserManager<ApplicationUser>\n    {\n        public ApplicationUserManager(IUserStore<ApplicationUser> store)\n            : base(store)\n        {\n        }\n\n        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)\n        {\n            var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));\n            // Configure validation logic for usernames\n            manager.UserValidator = new UserValidator<ApplicationUser>(manager)\n            {\n                AllowOnlyAlphanumericUserNames = false,\n                RequireUniqueEmail = true\n            };\n\n            // Configure validation logic for passwords\n            manager.PasswordValidator = new PasswordValidator\n            {\n                RequiredLength = 6,\n                RequireNonLetterOrDigit = true,\n                RequireDigit = true,\n                RequireLowercase = true,\n                RequireUppercase = true,\n            };\n\n            // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user\n            // You can write your own provider and plug it in here.\n            manager.RegisterTwoFactorProvider(\"Phone Code\", new PhoneNumberTokenProvider<ApplicationUser>\n            {\n                MessageFormat = \"Your security code is {0}\"\n            });\n            manager.RegisterTwoFactorProvider(\"Email Code\", new EmailTokenProvider<ApplicationUser>\n            {\n                Subject = \"Security Code\",\n                BodyFormat = \"Your security code is {0}\"\n            });\n\n            // Configure user lockout defaults\n            manager.UserLockoutEnabledByDefault = true;\n            manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);\n            manager.MaxFailedAccessAttemptsBeforeLockout = 5;\n\n            manager.EmailService = new EmailService();\n            manager.SmsService = new SmsService();\n            var dataProtectionProvider = options.DataProtectionProvider;\n            if (dataProtectionProvider != null)\n            {\n                manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create(\"ASP.NET Identity\"));\n            }\n            return manager;\n        }\n    }\n\n    public class ApplicationSignInManager : SignInManager<ApplicationUser, string>\n    {\n        public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager) :\n            base(userManager, authenticationManager) { }\n\n        public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user)\n        {\n            return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager);\n        }\n\n        public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, IOwinContext context)\n        {\n            return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), context.Authentication);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/App_Start/RouteConfig.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Web;\nusing System.Web.Routing;\nusing Microsoft.AspNet.FriendlyUrls;\n\nnamespace WebFormsDemo\n{\n    public static class RouteConfig\n    {\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            var settings = new FriendlyUrlSettings();\n            settings.AutoRedirectMode = RedirectMode.Permanent;\n            routes.EnableFriendlyUrls(settings);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/App_Start/Startup.Auth.cs",
    "content": "﻿using System;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin;\nusing Microsoft.Owin.Security.Cookies;\nusing Microsoft.Owin.Security.DataProtection;\nusing Microsoft.Owin.Security.Google;\nusing Owin;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo\n{\n    public partial class Startup {\n\n        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301883\n        public void ConfigureAuth(IAppBuilder app)\n        {\n            // Configure the db context, user manager and signin manager to use a single instance per request\n            app.CreatePerOwinContext(ApplicationDbContext.Create);\n            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);\n            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);\n\n            // Enable the application to use a cookie to store information for the signed in user\n            // and to use a cookie to temporarily store information about a user logging in with a third party login provider\n            // Configure the sign in cookie\n            app.UseCookieAuthentication(new CookieAuthenticationOptions\n            {\n                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,\n                LoginPath = new PathString(\"/Account/Login\"),\n                Provider = new CookieAuthenticationProvider\n                {\n                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(\n                        validateInterval: TimeSpan.FromMinutes(30),\n                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))\n                }\n            });\n            // Use a cookie to temporarily store information about a user logging in with a third party login provider\n            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);\n\n            // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.\n            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));\n\n            // Enables the application to remember the second login verification factor such as phone or email.\n            // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.\n            // This is similar to the RememberMe option when you log in.\n            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);\n\n            // Uncomment the following lines to enable logging in with third party login providers\n            //app.UseMicrosoftAccountAuthentication(\n            //    clientId: \"\",\n            //    clientSecret: \"\");\n\n            //app.UseTwitterAuthentication(\n            //   consumerKey: \"\",\n            //   consumerSecret: \"\");\n\n            //app.UseFacebookAuthentication(\n            //   appId: \"\",\n            //   appSecret: \"\");\n\n            //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()\n            //{\n            //    ClientId = \"\",\n            //    ClientSecret = \"\"\n            //});\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Bundle.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<bundles version=\"1.0\">\n  <styleBundle path=\"~/Content/css\">\n    <include path=\"~/Content/bootstrap.css\" />\n    <include path=\"~/Content/Site.css\" />\n  </styleBundle>\n</bundles>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Contact.aspx",
    "content": "﻿<%@ Page Title=\"Contact\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Contact.aspx.cs\" Inherits=\"WebFormsDemo.Contact\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h2><%: Title %>.</h2>\n    <h3>Your contact page.</h3>\n    <address>\n        One Microsoft Way<br />\n        Redmond, WA 98052-6399<br />\n        <abbr title=\"Phone\">P:</abbr>\n        425.555.0100\n    </address>\n\n    <address>\n        <strong>Support:</strong>   <a href=\"mailto:Support@example.com\">Support@example.com</a><br />\n        <strong>Marketing:</strong> <a href=\"mailto:Marketing@example.com\">Marketing@example.com</a>\n    </address>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Contact.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace WebFormsDemo\n{\n    public partial class Contact : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Contact.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo\n{\n\n\n    public partial class Contact\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Content/Site.css",
    "content": "﻿/* Move down content because we have a fixed navbar that is 50px tall */\nbody {\n    padding-top: 50px;\n    padding-bottom: 20px;\n}\n\n/* Wrapping element */\n/* Set some basic padding to keep content from hitting the edges */\n.body-content {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n/* Override the default bootstrap behavior where horizontal description lists \n   will truncate terms that are too long to fit in the left column \n*/\n.dl-horizontal dt {\n    white-space: normal;\n}\n\n/* Set widths on the form inputs since otherwise they're 100% wide */\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"tel\"],\ninput[type=\"select\"] {\n    max-width: 280px;\n}\n\n/* Responsive: Portrait tablets and up */\n@media screen and (min-width: 768px) {\n    .jumbotron {\n        margin-top: 20px;\n    }\n    .body-content {\n        padding: 0;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Content/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  text-shadow: 0 1px 0 #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n  background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n  background-color: #2e6da4;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Content/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  -moz-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: \"Glyphicons Halflings\";\n  src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: \"Glyphicons Halflings\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: 400;\n  line-height: 1;\n  color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: \"\\00A0 \\2014\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11,\n  .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11,\n  .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11,\n  .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: 0.01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 700;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eeeeee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  opacity: 0.65;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  background-image: none;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  background-image: none;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  background-image: none;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  background-image: none;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  background-image: none;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  background-image: none;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: 400;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-property: height, visibility;\n  -o-transition-property: height, visibility;\n  transition-property: height, visibility;\n  -webkit-transition-duration: 0.35s;\n  -o-transition-duration: 0.35s;\n  transition-duration: 0.35s;\n  -webkit-transition-timing-function: ease;\n  -o-transition-timing-function: ease;\n  transition-timing-function: ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: 400;\n  line-height: 1.42857143;\n  color: #333333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n  color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: 15px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eeeeee;\n  border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: 0.2em 0.6em 0.3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border 0.2s ease-in-out;\n  -o-transition: border 0.2s ease-in-out;\n  transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n  -ms-transform: translate(0, -25%);\n  -o-transform: translate(0, -25%);\n  transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.42857143;\n  line-break: auto;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  font-size: 12px;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: 0.9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.42857143;\n  line-break: auto;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  font-size: 14px;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n  -o-transition: 0.6s ease-in-out left;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform 0.6s ease-in-out;\n    -o-transition: -o-transform 0.6s ease-in-out;\n    transition: -webkit-transform 0.6s ease-in-out;\n    transition: transform 0.6s ease-in-out;\n    transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n    perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    left: 0;\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    left: 0;\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    left: 0;\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  filter: alpha(opacity=90);\n  opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n  content: \"\\203a\";\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Default.aspx",
    "content": "﻿<%@ Page Title=\"Home Page\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"Default.aspx.cs\" Inherits=\"WebFormsDemo._Default\" %>\n\n<asp:Content ID=\"BodyContent\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n\n    <div class=\"jumbotron\">\n        <h1>LINQ to Twitter</h1>\n        <p class=\"lead\">LINQ to Twitter is an open-source 3rd party library for working with the Twitter API. Please select a menu item to view demos for how LINQ to Twitter supports each category of the Twitter API.</p>\n        <p><a href=\"https://github.com/JoeMayo/LinqToTwitter\" class=\"btn btn-primary btn-large\">Learn more &raquo;</a></p>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-4\">\n            <h2>Getting started</h2>\n            <p>\n                LINQ to Twitter has extensive documentation. You can get basic guidance, security info, and specifications for each API. Be sure to check out the FAQ too.\n            </p>\n            <p>\n                <a class=\"btn btn-default\" href=\"https://linqtotwitter.codeplex.com/documentation\">Learn more &raquo;</a>\n            </p>\n        </div>\n        <div class=\"col-md-4\">\n            <h2>Get help</h2>\n            <p>\n                When these demos don't have the info you need, you can visit Stack Overflow and use the [linq-to-twitter] and [twitter] tags. \n            </p>\n            <p>\n                <a class=\"btn btn-default\" href=\"http://stackoverflow.com/questions/tagged/linq-to-twitter\">Learn more &raquo;</a>\n            </p>\n        </div>\n        <div class=\"col-md-4\">\n            <h2>Get the code</h2>\n            <p>\n                You can download/clone the code from the LINQ to Twitter site on GitHub.com, but the most convenient way to use LINQ to Twitter is via NuGet.\n            </p>\n            <p>\n                <a class=\"btn btn-default\" href=\"http://www.nuget.org/packages/linqtotwitter\">Learn more &raquo;</a>\n            </p>\n        </div>\n    </div>\n\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Default.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web.UI;\nusing LinqToTwitter;\n\nnamespace WebFormsDemo\n{\n    public partial class _Default : Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            if (!new SessionStateCredentialStore().HasAllCredentials())\n                Response.Redirect(\"~/Oauth.aspx\", false);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Default.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo\n{\n\n\n    public partial class _Default\n    {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"WebFormsDemo.Global\" Language=\"C#\" %>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Optimization;\nusing System.Web.Routing;\nusing System.Web.Security;\nusing System.Web.SessionState;\n\nnamespace WebFormsDemo\n{\n    public class Global : HttpApplication\n    {\n        void Application_Start(object sender, EventArgs e)\n        {\n            // Code that runs on application startup\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\n            BundleConfig.RegisterBundles(BundleTable.Bundles);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Models/IdentityModels.cs",
    "content": "﻿using System;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing System.Web;\nusing Microsoft.AspNet.Identity;\nusing Microsoft.AspNet.Identity.EntityFramework;\nusing Microsoft.AspNet.Identity.Owin;\nusing Microsoft.Owin.Security;\nusing WebFormsDemo.Models;\n\nnamespace WebFormsDemo.Models\n{\n    // You can add User data for the user by adding more properties to your User class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.\n    public class ApplicationUser : IdentityUser\n    {\n        public ClaimsIdentity GenerateUserIdentity(ApplicationUserManager manager)\n        {\n            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType\n            var userIdentity = manager.CreateIdentity(this, DefaultAuthenticationTypes.ApplicationCookie);\n            // Add custom user claims here\n            return userIdentity;\n        }\n\n        public Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)\n        {\n            return Task.FromResult(GenerateUserIdentity(manager));\n        }\n    }\n\n    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>\n    {\n        public ApplicationDbContext()\n            : base(\"DefaultConnection\", throwIfV1Schema: false)\n        {\n        }\n\n        public static ApplicationDbContext Create()\n        {\n            return new ApplicationDbContext();\n        }\n    }\n}\n\n#region Helpers\nnamespace WebFormsDemo\n{\n    public static class IdentityHelper\n    {\n        // Used for XSRF when linking external logins\n        public const string XsrfKey = \"XsrfId\";\n\n        public const string ProviderNameKey = \"providerName\";\n        public static string GetProviderNameFromRequest(HttpRequest request)\n        {\n            return request.QueryString[ProviderNameKey];\n        }\n\n        public const string CodeKey = \"code\";\n        public static string GetCodeFromRequest(HttpRequest request)\n        {\n            return request.QueryString[CodeKey];\n        }\n\n        public const string UserIdKey = \"userId\";\n        public static string GetUserIdFromRequest(HttpRequest request)\n        {\n            return HttpUtility.UrlDecode(request.QueryString[UserIdKey]);\n        }\n\n        public static string GetResetPasswordRedirectUrl(string code, HttpRequest request)\n        {\n            var absoluteUri = \"/Account/ResetPassword?\" + CodeKey + \"=\" + HttpUtility.UrlEncode(code);\n            return new Uri(request.Url, absoluteUri).AbsoluteUri.ToString();\n        }\n\n        public static string GetUserConfirmationRedirectUrl(string code, string userId, HttpRequest request)\n        {\n            var absoluteUri = \"/Account/Confirm?\" + CodeKey + \"=\" + HttpUtility.UrlEncode(code) + \"&\" + UserIdKey + \"=\" + HttpUtility.UrlEncode(userId);\n            return new Uri(request.Url, absoluteUri).AbsoluteUri.ToString();\n        }\n\n        private static bool IsLocalUrl(string url)\n        {\n            return !string.IsNullOrEmpty(url) && ((url[0] == '/' && (url.Length == 1 || (url[1] != '/' && url[1] != '\\\\'))) || (url.Length > 1 && url[0] == '~' && url[1] == '/'));\n        }\n\n        public static void RedirectToReturnUrl(string returnUrl, HttpResponse response)\n        {\n            if (!String.IsNullOrEmpty(returnUrl) && IsLocalUrl(returnUrl))\n            {\n                response.Redirect(returnUrl);\n            }\n            else\n            {\n                response.Redirect(\"~/\");\n            }\n        }\n    }\n}\n#endregion\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/OAuth.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"OAuth.aspx.cs\" Inherits=\"WebFormsDemos.OAuth\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <p></p>\n    <p>\n        Please press this button to start the Twitter OAuth authorization process:\n    </p>\n    <p>\n        <asp:Button ID=\"AuthorizeButton\" runat=\"server\" OnClick=\"AuthorizeButton_Click\" Text=\"Authorize\" />\n    </p>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/OAuth.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing LinqToTwitter;\nusing System.Configuration;\n\nnamespace WebFormsDemos\n{\n    public partial class OAuth : System.Web.UI.Page\n    {\n        AspNetAuthorizer auth;\n\n        protected async void Page_Load(object sender, EventArgs e)\n        {\n            auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore\n                {\n                    ConsumerKey = ConfigurationManager.AppSettings[\"consumerKey\"],\n                    ConsumerSecret = ConfigurationManager.AppSettings[\"consumerSecret\"]\n                },\n                GoToTwitterAuthorization =\n                    twitterUrl => Response.Redirect(twitterUrl, false)\n            };\n\n            if (!Page.IsPostBack && Request.QueryString[\"oauth_token\"] != null)\n            {\n                await auth.CompleteAuthorizeAsync(Request.Url);\n\n                // This is how you access credentials after authorization.\n                // The oauthToken and oauthTokenSecret do not expire.\n                // You can use the userID to associate the credentials with the user.\n                // You can save credentials any way you want - database, isolated \n                //   storage, etc. - it's up to you.\n                // You can retrieve and load all 4 credentials on subsequent queries \n                //   to avoid the need to re-authorize.\n                // When you've loaded all 4 credentials, LINQ to Twitter will let you \n                //   make queries without re-authorizing.\n                //\n                //var credentials = auth.CredentialStore;\n                //string oauthToken = credentials.OAuthToken;\n                //string oauthTokenSecret = credentials.OAuthTokenSecret;\n                //string screenName = credentials.ScreenName;\n                //ulong userID = credentials.UserID;\n                //\n\n                Response.Redirect(\"~/Default.aspx\", false);\n            }\n        }\n\n        protected async void AuthorizeButton_Click(object sender, EventArgs e)\n        {\n            await auth.BeginAuthorizeAsync(Request.Url);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/OAuth.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemos {\n    \n    \n    public partial class OAuth {\n        \n        /// <summary>\n        /// AuthorizeButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button AuthorizeButton;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Project_Readme.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Your ASP.NET application</title>\n    <style>\n        body {\n            background: #fff;\n            color: #505050;\n            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;\n            margin: 20px;\n            padding: 0;\n        }\n\n        #header {\n            background: #efefef;\n            padding: 0;\n        }\n\n        h1 {\n            font-size: 48px;\n            font-weight: normal;\n            margin: 0;\n            padding: 0 30px;\n            line-height: 150px;\n        }\n\n        p {\n            font-size: 20px;\n            color: #fff;\n            background: #969696;\n            padding: 0 30px;\n            line-height: 50px;\n        }\n\n        #main {\n            padding: 5px 30px;\n        }\n\n        .section {\n            width: 21.7%;\n            float: left;\n            margin: 0 0 0 4%;\n        }\n\n            .section h2 {\n                font-size: 13px;\n                text-transform: uppercase;\n                margin: 0;\n                border-bottom: 1px solid silver;\n                padding-bottom: 12px;\n                margin-bottom: 8px;\n            }\n\n            .section.first {\n                margin-left: 0;\n            }\n\n                .section.first h2 {\n                    font-size: 24px;\n                    text-transform: none;\n                    margin-bottom: 25px;\n                    border: none;\n                }\n\n                .section.first li {\n                    border-top: 1px solid silver;\n                    padding: 8px 0;\n                }\n\n            .section.last {\n                margin-right: 0;\n            }\n\n        ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n            line-height: 20px;\n        }\n\n        li {\n            padding: 4px 0;\n        }\n\n        a {\n            color: #267cb2;\n            text-decoration: none;\n        }\n\n            a:hover {\n                text-decoration: underline;\n            }\n    </style>\n</head>\n<body>\n\n    <div id=\"header\">\n        <h1>Your ASP.NET application</h1>\n        <p>Congratulations! You've created a project</p>\n    </div>\n\n    <div id=\"main\">\n        <div class=\"section first\">\n            <h2>This application consists of:</h2>\n            <ul>\n                <li>Sample pages showing basic nav between Home, About, and Contact.</li>\n                <li>Theming using <a href=\"http://go.microsoft.com/fwlink/?LinkID=615519\">Bootstrap</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615520\">Authentication</a>, if selected, shows how to register and sign in</li>\n                <li>ASP.NET features managed using <a href=\"http://go.microsoft.com/fwlink/?LinkID=615521\">NuGet</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Customize app</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615522\">Get started with ASP.NET Web Forms</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615523\">Change the site's theme</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615524\">Add more libraries using NuGet</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615525\">Configure authentication</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615526\">Customize information about the website users</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615527\">Get information from social providers</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615528\">Add HTTP services using ASP.NET Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615529\">Secure the Web API</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615530\">Add real-time web with ASP.NET SignalR</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615531\">Add components using Scaffolding</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615532\">Test app with Browser Link</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615533\">Share your project</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section\">\n            <h2>Deploy</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615534\">Ensure your app is ready for production</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615535\">Microsoft Azure</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615536\">Hosting providers</a></li>\n            </ul>\n        </div>\n\n        <div class=\"section last\">\n            <h2>Get help</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615537\">Get help</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=615538\">Get more templates</a></li>\n            </ul>\n        </div>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"WebFormsDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"WebFormsDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"2b50862d-1d21-4b8a-978e-dc289fc196ea\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/DetailsView.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/DetailsView.js\nfunction DetailsView() {\n    this.pageIndex = null;\n    this.dataKeys = null;\n    this.createPropertyString = DetailsView_createPropertyString;\n    this.setStateField = DetailsView_setStateValue;\n    this.getHiddenFieldContents = DetailsView_getHiddenFieldContents;\n    this.stateField = null;\n    this.panelElement = null;\n    this.callback = null;\n}\nfunction DetailsView_createPropertyString() {\n    return createPropertyStringFromValues_DetailsView(this.pageIndex, this.dataKeys);\n}\nfunction DetailsView_setStateValue() {\n    this.stateField.value = this.createPropertyString();\n}\nfunction DetailsView_OnCallback (result, context) {\n    var value = new String(result);\n    var valsArray = value.split(\"|\");\n    var innerHtml = valsArray[2];\n    for (var i = 3; i < valsArray.length; i++) {\n        innerHtml += \"|\" + valsArray[i];\n    }\n    context.panelElement.innerHTML = innerHtml;\n    context.stateField.value = createPropertyStringFromValues_DetailsView(valsArray[0], valsArray[1]);\n}\nfunction DetailsView_getHiddenFieldContents(arg) {\n    return arg + \"|\" + this.stateField.value;\n}\nfunction createPropertyStringFromValues_DetailsView(pageIndex, dataKeys) {\n    var value = new Array(pageIndex, dataKeys);\n    return value.join(\"|\");\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/Focus.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebForms.js\nfunction WebForm_FindFirstFocusableChild(control) {\n    if (!control || !(control.tagName)) {\n        return null;\n    }\n    var tagName = control.tagName.toLowerCase();\n    if (tagName == \"undefined\") {\n        return null;\n    }\n    var children = control.childNodes;\n    if (children) {\n        for (var i = 0; i < children.length; i++) {\n            try {\n                if (WebForm_CanFocus(children[i])) {\n                    return children[i];\n                }\n                else {\n                    var focused = WebForm_FindFirstFocusableChild(children[i]);\n                    if (WebForm_CanFocus(focused)) {\n                        return focused;\n                    }\n                }\n            } catch (e) {\n            }\n        }\n    }\n    return null;\n}\nfunction WebForm_AutoFocus(focusId) {\n    var targetControl;\n    if (__nonMSDOMBrowser) {\n        targetControl = document.getElementById(focusId);\n    }\n    else {\n        targetControl = document.all[focusId];\n    }\n    var focused = targetControl;\n    if (targetControl && (!WebForm_CanFocus(targetControl)) ) {\n        focused = WebForm_FindFirstFocusableChild(targetControl);\n    }\n    if (focused) {\n        try {\n            focused.focus();\n            if (__nonMSDOMBrowser) {\n                focused.scrollIntoView(false);\n            }\n            if (window.__smartNav) {\n                window.__smartNav.ae = focused.id;\n            }\n        }\n        catch (e) {\n        }\n    }\n}\nfunction WebForm_CanFocus(element) {\n    if (!element || !(element.tagName)) return false;\n    var tagName = element.tagName.toLowerCase();\n    return (!(element.disabled) &&\n            (!(element.type) || element.type.toLowerCase() != \"hidden\") &&\n            WebForm_IsFocusableTag(tagName) &&\n            WebForm_IsInVisibleContainer(element)\n            );\n}\nfunction WebForm_IsFocusableTag(tagName) {\n    return (tagName == \"input\" ||\n            tagName == \"textarea\" ||\n            tagName == \"select\" ||\n            tagName == \"button\" ||\n            tagName == \"a\");\n}\nfunction WebForm_IsInVisibleContainer(ctrl) {\n    var current = ctrl;\n    while((typeof(current) != \"undefined\") && (current != null)) {\n        if (current.disabled ||\n            ( typeof(current.style) != \"undefined\" &&\n            ( ( typeof(current.style.display) != \"undefined\" &&\n                current.style.display == \"none\") ||\n                ( typeof(current.style.visibility) != \"undefined\" &&\n                current.style.visibility == \"hidden\") ) ) ) {\n            return false;\n        }\n        if (typeof(current.parentNode) != \"undefined\" &&\n                current.parentNode != null &&\n                current.parentNode != current &&\n                current.parentNode.tagName.toLowerCase() != \"body\") {\n            current = current.parentNode;\n        }\n        else {\n            return true;\n        }\n    }\n    return true;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/GridView.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/GridView.js\nfunction GridView() {\n    this.pageIndex = null;\n    this.sortExpression = null;\n    this.sortDirection = null;\n    this.dataKeys = null;\n    this.createPropertyString = GridView_createPropertyString;\n    this.setStateField = GridView_setStateValue;\n    this.getHiddenFieldContents = GridView_getHiddenFieldContents;\n    this.stateField = null;\n    this.panelElement = null;\n    this.callback = null;\n}\nfunction GridView_createPropertyString() {\n    return createPropertyStringFromValues_GridView(this.pageIndex, this.sortDirection, this.sortExpression, this.dataKeys);\n}\nfunction GridView_setStateValue() {\n    this.stateField.value = this.createPropertyString();\n}\nfunction GridView_OnCallback (result, context) {\n    var value = new String(result);\n    var valsArray = value.split(\"|\");\n    var innerHtml = valsArray[4];\n    for (var i = 5; i < valsArray.length; i++) {\n        innerHtml += \"|\" + valsArray[i];\n    }\n    context.panelElement.innerHTML = innerHtml;\n    context.stateField.value = createPropertyStringFromValues_GridView(valsArray[0], valsArray[1], valsArray[2], valsArray[3]);\n}\nfunction GridView_getHiddenFieldContents(arg) {\n    return arg + \"|\" + this.stateField.value;\n}\nfunction createPropertyStringFromValues_GridView(pageIndex, sortDirection, sortExpression, dataKeys) {\n    var value = new Array(pageIndex, sortDirection, sortExpression, dataKeys);\n    return value.join(\"|\");\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjax.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjax.js\nFunction.__typeName=\"Function\";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c<e;c++)d[c]=arguments[c];d[e]=a;return b.apply(this,d)}return b.call(this,a)}};Function.createDelegate=function(a,b){return function(){return b.apply(a,arguments)}};Function.emptyFunction=Function.emptyMethod=function(){};Function.validateParameters=function(c,b,a){return Function._validateParams(c,b,a)};Function._validateParams=function(g,e,c){var a,d=e.length;c=c||typeof c===\"undefined\";a=Function._validateParameterCount(g,e,c);if(a){a.popStackFrame();return a}for(var b=0,i=g.length;b<i;b++){var f=e[Math.min(b,d-1)],h=f.name;if(f.parameterArray)h+=\"[\"+(b-d+1)+\"]\";else if(!c&&b>=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(e<b){var f=b;for(a=0;a<b;a++){var g=d[a];if(g.optional||g.parameterArray)f--}if(e<f)c=true}else if(i&&e>b){c=true;for(a=0;a<b;a++)if(d[a].parameterArray){c=false;break}}if(c){var h=Error.parameterCount();h.popStackFrame();return h}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!==\"undefined\"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d<c.length;d++){var n=c[d];b=Function._validateParameterType(n,e,j,i,f,h+\"[\"+d+\"]\");if(b){b.popStackFrame();return b}}}return null};Function._validateParameterType=function(b,c,k,j,h,d){var a,g;if(typeof b===\"undefined\")if(h)return null;else{a=Error.argumentUndefined(d);a.popStackFrame();return a}if(b===null)if(h)return null;else{a=Error.argumentNull(d);a.popStackFrame();return a}if(c&&c.__enum){if(typeof b!==\"number\"){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(b%1===0){var e=c.prototype;if(!c.__flags||b===0){for(g in e)if(e[g]===b)return null}else{var i=b;for(g in e){var f=e[g];if(f===0)continue;if((f&b)===f)i-=f;if(i===0)return null}}}a=Error.argumentOutOfRange(d,b,String.format(Sys.Res.enumInvalidValue,b,c.getName()));a.popStackFrame();return a}if(j&&(!Sys._isDomElement(b)||b.nodeType===3)){a=Error.argument(d,Sys.Res.argumentDomElement);a.popStackFrame();return a}if(c&&!Sys._isInstanceOfType(c,b)){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(c===Number&&k)if(b%1!==0){a=Error.argumentOutOfRange(d,b,Sys.Res.argumentInteger);a.popStackFrame();return a}return null};Error.__typeName=\"Error\";Error.__class=true;Error.create=function(d,b){var a=new Error(d);a.message=d;if(b)for(var c in b)a[c]=b[c];a.popStackFrame();return a};Error.argument=function(a,c){var b=\"Sys.ArgumentException: \"+(c?c:Sys.Res.argument);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentException\",paramName:a});d.popStackFrame();return d};Error.argumentNull=function(a,c){var b=\"Sys.ArgumentNullException: \"+(c?c:Sys.Res.argumentNull);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentNullException\",paramName:a});d.popStackFrame();return d};Error.argumentOutOfRange=function(c,a,d){var b=\"Sys.ArgumentOutOfRangeException: \"+(d?d:Sys.Res.argumentOutOfRange);if(c)b+=\"\\n\"+String.format(Sys.Res.paramName,c);if(typeof a!==\"undefined\"&&a!==null)b+=\"\\n\"+String.format(Sys.Res.actualValue,a);var e=Error.create(b,{name:\"Sys.ArgumentOutOfRangeException\",paramName:c,actualValue:a});e.popStackFrame();return e};Error.argumentType=function(d,c,b,e){var a=\"Sys.ArgumentTypeException: \";if(e)a+=e;else if(c&&b)a+=String.format(Sys.Res.argumentTypeWithTypes,c.getName(),b.getName());else a+=Sys.Res.argumentType;if(d)a+=\"\\n\"+String.format(Sys.Res.paramName,d);var f=Error.create(a,{name:\"Sys.ArgumentTypeException\",paramName:d,actualType:c,expectedType:b});f.popStackFrame();return f};Error.argumentUndefined=function(a,c){var b=\"Sys.ArgumentUndefinedException: \"+(c?c:Sys.Res.argumentUndefined);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentUndefinedException\",paramName:a});d.popStackFrame();return d};Error.format=function(a){var c=\"Sys.FormatException: \"+(a?a:Sys.Res.format),b=Error.create(c,{name:\"Sys.FormatException\"});b.popStackFrame();return b};Error.invalidOperation=function(a){var c=\"Sys.InvalidOperationException: \"+(a?a:Sys.Res.invalidOperation),b=Error.create(c,{name:\"Sys.InvalidOperationException\"});b.popStackFrame();return b};Error.notImplemented=function(a){var c=\"Sys.NotImplementedException: \"+(a?a:Sys.Res.notImplemented),b=Error.create(c,{name:\"Sys.NotImplementedException\"});b.popStackFrame();return b};Error.parameterCount=function(a){var c=\"Sys.ParameterCountException: \"+(a?a:Sys.Res.parameterCount),b=Error.create(c,{name:\"Sys.ParameterCountException\"});b.popStackFrame();return b};Error.prototype.popStackFrame=function(){if(typeof this.stack===\"undefined\"||this.stack===null||typeof this.fileName===\"undefined\"||this.fileName===null||typeof this.lineNumber===\"undefined\"||this.lineNumber===null)return;var a=this.stack.split(\"\\n\"),c=a[0],e=this.fileName+\":\"+this.lineNumber;while(typeof c!==\"undefined\"&&c!==null&&c.indexOf(e)===-1){a.shift();c=a[0]}var d=a[1];if(typeof d===\"undefined\"||d===null)return;var b=d.match(/@(.*):(\\d+)$/);if(typeof b===\"undefined\"||b===null)return;this.fileName=b[1];this.lineNumber=parseInt(b[2]);a.shift();this.stack=a.join(\"\\n\")};Object.__typeName=\"Object\";Object.__class=true;Object.getType=function(b){var a=b.constructor;if(!a||typeof a!==\"function\"||!a.__typeName||a.__typeName===\"Object\")return Object;return a};Object.getTypeName=function(a){return Object.getType(a).getName()};String.__typeName=\"String\";String.__class=true;String.prototype.endsWith=function(a){return this.substr(this.length-a.length)===a};String.prototype.startsWith=function(a){return this.substr(0,a.length)===a};String.prototype.trim=function(){return this.replace(/^\\s+|\\s+$/g,\"\")};String.prototype.trimEnd=function(){return this.replace(/\\s+$/,\"\")};String.prototype.trimStart=function(){return this.replace(/^\\s+/,\"\")};String.format=function(){return String._toFormattedString(false,arguments)};String._toFormattedString=function(l,j){var c=\"\",e=j[0];for(var a=0;true;){var f=e.indexOf(\"{\",a),d=e.indexOf(\"}\",a);if(f<0&&d<0){c+=e.slice(a);break}if(d>0&&(d<f||f<0)){c+=e.slice(a,d+1);a=d+2;continue}c+=e.slice(a,f);a=f+1;if(e.charAt(a)===\"{\"){c+=\"{\";a++;continue}if(d<0)break;var h=e.substring(a,d),g=h.indexOf(\":\"),k=parseInt(g<0?h:h.substring(0,g),10)+1,i=g<0?\"\":h.substring(g+1),b=j[k];if(typeof b===\"undefined\"||b===null)b=\"\";if(b.toFormattedString)c+=b.toFormattedString(i);else if(l&&b.localeFormat)c+=b.localeFormat(i);else if(b.format)c+=b.format(i);else c+=b.toString();a=d+1}return c};Boolean.__typeName=\"Boolean\";Boolean.__class=true;Boolean.parse=function(b){var a=b.trim().toLowerCase();if(a===\"false\")return false;if(a===\"true\")return true};Date.__typeName=\"Date\";Date.__class=true;Number.__typeName=\"Number\";Number.__class=true;RegExp.__typeName=\"RegExp\";RegExp.__class=true;if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=Sys._getBaseMethod(this,a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(a,b){return Sys._getBaseMethod(this,a,b)};Type.prototype.getBaseType=function(){return typeof this.__baseType===\"undefined\"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Array.contains(a,e))a[a.length]=e}b=b.__baseType}return a};Type.prototype.getName=function(){return typeof this.__typeName===\"undefined\"?\"\":this.__typeName};Type.prototype.implementsInterface=function(d){this.resolveInheritance();var c=d.getName(),a=this.__interfaceCache;if(a){var e=a[c];if(typeof e!==\"undefined\")return e}else a=this.__interfaceCache={};var b=this;while(b){var f=b.__interfaces;if(f)if(Array.indexOf(f,d)!==-1)return a[c]=true;b=b.__baseType}return a[c]=false};Type.prototype.inheritsFrom=function(b){this.resolveInheritance();var a=this.__baseType;while(a){if(a===b)return true;a=a.__baseType}return false};Type.prototype.initializeBase=function(a,b){this.resolveInheritance();if(this.__baseType)if(!b)this.__baseType.apply(a);else this.__baseType.apply(a,b);return a};Type.prototype.isImplementedBy=function(a){if(typeof a===\"undefined\"||a===null)return false;var b=Object.getType(a);return !!(b.implementsInterface&&b.implementsInterface(this))};Type.prototype.isInstanceOfType=function(a){return Sys._isInstanceOfType(this,a)};Type.prototype.registerClass=function(c,b,d){this.prototype.constructor=this;this.__typeName=c;this.__class=true;if(b){this.__baseType=b;this.__basePrototypePending=true}Sys.__upperCaseTypes[c.toUpperCase()]=this;if(d){this.__interfaces=[];for(var a=2,f=arguments.length;a<f;a++){var e=arguments[a];this.__interfaces.push(e)}}return this};Type.prototype.registerInterface=function(a){Sys.__upperCaseTypes[a.toUpperCase()]=this;this.prototype.constructor=this;this.__typeName=a;this.__interface=true;return this};Type.prototype.resolveInheritance=function(){if(this.__basePrototypePending){var b=this.__baseType;b.resolveInheritance();for(var a in b.prototype){var c=b.prototype[a];if(!this.prototype[a])this.prototype[a]=c}delete this.__basePrototypePending}};Type.getRootNamespaces=function(){return Array.clone(Sys.__rootNamespaces)};Type.isClass=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__class};Type.isInterface=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__interface};Type.isNamespace=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__namespace};Type.parse=function(typeName,ns){var fn;if(ns){fn=Sys.__upperCaseTypes[ns.getName().toUpperCase()+\".\"+typeName.toUpperCase()];return fn||null}if(!typeName)return null;if(!Type.__htClasses)Type.__htClasses={};fn=Type.__htClasses[typeName];if(!fn){fn=eval(typeName);Type.__htClasses[typeName]=fn}return fn};Type.registerNamespace=function(e){var d=window,c=e.split(\".\");for(var b=0;b<c.length;b++){var f=c[b],a=d[f];if(!a)a=d[f]={};if(!a.__namespace){if(b===0&&e!==\"Sys\")Sys.__rootNamespaces[Sys.__rootNamespaces.length]=a;a.__namespace=true;a.__typeName=c.slice(0,b+1).join(\".\");a.getName=function(){return this.__typeName}}d=a}};Type._checkDependency=function(c,a){var d=Type._registerScript._scripts,b=d?!!d[c]:false;if(typeof a!==\"undefined\"&&!b)throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded,a,c));return b};Type._registerScript=function(a,c){var b=Type._registerScript._scripts;if(!b)Type._registerScript._scripts=b={};if(b[a])throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded,a));b[a]=true;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Type._checkDependency(e))throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound,a,e))}};Type.registerNamespace(\"Sys\");Sys.__upperCaseTypes={};Sys.__rootNamespaces=[Sys];Sys._isInstanceOfType=function(c,b){if(typeof b===\"undefined\"||b===null)return false;if(b instanceof c)return true;var a=Object.getType(b);return !!(a===c)||a.inheritsFrom&&a.inheritsFrom(c)||a.implementsInterface&&a.implementsInterface(c)};Sys._getBaseMethod=function(d,e,c){var b=d.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Sys._isDomElement=function(a){var c=false;if(typeof a.nodeType!==\"number\"){var b=a.ownerDocument||a.document||a;if(b!=a){var d=b.defaultView||b.parentWindow;c=d!=a}else c=typeof b.body===\"undefined\"}return !c};Array.__typeName=\"Array\";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Sys._indexOf(a,b)>=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a<f;a++){var c=b[a];if(typeof c!==\"undefined\")e.call(d,c,a,b)}};Array.indexOf=function(a,c,b){return Sys._indexOf(a,c,b)};Array.insert=function(a,b,c){a.splice(b,0,c)};Array.parse=function(value){if(!value)return [];return eval(value)};Array.remove=function(b,c){var a=Sys._indexOf(b,c);if(a>=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e===\"undefined\")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b<c;b++)if(typeof d[b]!==\"undefined\"&&d[b]===e)return b}return -1};Type._registerScript._scripts={\"MicrosoftAjaxCore.js\":true,\"MicrosoftAjaxGlobalization.js\":true,\"MicrosoftAjaxSerialization.js\":true,\"MicrosoftAjaxComponentModel.js\":true,\"MicrosoftAjaxHistory.js\":true,\"MicrosoftAjaxNetwork.js\":true,\"MicrosoftAjaxWebServices.js\":true};Sys.IDisposable=function(){};Sys.IDisposable.prototype={};Sys.IDisposable.registerInterface(\"Sys.IDisposable\");Sys.StringBuilder=function(a){this._parts=typeof a!==\"undefined\"&&a!==null&&a!==\"\"?[a.toString()]:[];this._value={};this._len=0};Sys.StringBuilder.prototype={append:function(a){this._parts[this._parts.length]=a},appendLine:function(a){this._parts[this._parts.length]=typeof a===\"undefined\"||a===null||a===\"\"?\"\\r\\n\":a+\"\\r\\n\"},clear:function(){this._parts=[];this._value={};this._len=0},isEmpty:function(){if(this._parts.length===0)return true;return this.toString()===\"\"},toString:function(a){a=a||\"\";var b=this._parts;if(this._len!==b.length){this._value={};this._len=b.length}var d=this._value;if(typeof d[a]===\"undefined\"){if(a!==\"\")for(var c=0;c<b.length;)if(typeof b[c]===\"undefined\"||b[c]===\"\"||b[c]===null)b.splice(c,1);else c++;d[a]=this._parts.join(a)}return d[a]}};Sys.StringBuilder.registerClass(\"Sys.StringBuilder\");Sys.Browser={};Sys.Browser.InternetExplorer={};Sys.Browser.Firefox={};Sys.Browser.Safari={};Sys.Browser.Opera={};Sys.Browser.agent=null;Sys.Browser.hasDebuggerStatement=false;Sys.Browser.name=navigator.appName;Sys.Browser.version=parseFloat(navigator.appVersion);Sys.Browser.documentMode=0;if(navigator.userAgent.indexOf(\" MSIE \")>-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\\d+\\.\\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" Firefox/\")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\\/(\\d+\\.\\d+)/)[1]);Sys.Browser.name=\"Firefox\";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" AppleWebKit/\")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\\/(\\d+(\\.\\d+)?)/)[1]);Sys.Browser.name=\"Safari\"}else if(navigator.userAgent.indexOf(\"Opera/\")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass(\"Sys.EventArgs\");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass(\"Sys.CancelEventArgs\",Sys.EventArgs);Type.registerNamespace(\"Sys.UI\");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!==\"undefined\"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value+=b+\"\\n\"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value=\"\"},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval(\"debugger\")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:\"traceDump\";b=b?b:\"\";if(a===null){this.trace(b+c+\": null\");return}switch(typeof a){case \"undefined\":this.trace(b+c+\": Undefined\");break;case \"number\":case \"string\":case \"boolean\":this.trace(b+c+\": \"+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+\": \"+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+\": ...\");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName===\"string\"){var k=a.tagName?a.tagName:\"DomElement\";if(a.id)k+=\" - \"+a.id;this.trace(b+c+\" {\"+k+\"}\")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i===\"string\"?\" {\"+i+\"}\":\"\"));if(b===\"\"||f){b+=\"    \";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e<j;e++)this._traceDump(a[e],\"[\"+e+\"]\",f,b,d)}else for(g in a){h=a[g];if(!Function.isInstanceOfType(h))this._traceDump(h,g,f,b,d)}}}Array.remove(d,a)}}};Sys._Debug.registerClass(\"Sys._Debug\");Sys.Debug=new Sys._Debug;Sys.Debug.isDebug=false;function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if(!a){this.__lowerCaseValues=a={};var g=this.prototype;for(var f in g)a[f.toLowerCase()]=g[f]}}else a=this.prototype;if(!this.__flags){i=e?c.toLowerCase():c;b=a[i.trim()];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c,this.__typeName));return b}else{var h=(e?c.toLowerCase():c).split(\",\"),j=0;for(var d=h.length-1;d>=0;d--){var k=h[d].trim();b=a[k];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c.split(\",\")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c===\"undefined\"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(\", \")}return \"\"}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!==\"number\")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!==\"number\")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass(\"Sys.CollectionChange\");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum(\"Sys.NotifyCollectionChangedAction\");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass(\"Sys.NotifyCollectionChangedEventArgs\",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass(\"Sys.Observer\");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,\"propertyChanged\",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"propertyChanged\",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,\"\")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(\".\");for(var i=0,m=d.length-1;i<m;i++){var l=d[i];b=a[\"get_\"+l];if(typeof b===\"function\")a=b.call(a);else a=a[l];var n=typeof a;if(a===null||n===\"undefined\")throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath,j))}var e,c=d[m];b=a[\"get_\"+c];f=a[\"set_\"+c];if(typeof b===\"function\")e=b.call(a);else e=a[c];if(typeof f===\"function\")f.call(a,g);else a[c]=g;if(e!==g){var h=Sys.Observer._getContext(k);if(h&&h.updating){h.dirty=true;return}Sys.Observer.raisePropertyChanged(k,d[0])}};Sys.Observer.setValue=function(b,a,c){Sys.Observer._setValue(b,a,c)};Sys.Observer.raisePropertyChanged=function(b,a){Sys.Observer.raiseEvent(b,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))};Sys.Observer.addCollectionChanged=function(b,a){Sys.Observer._addEventHandler(b,\"collectionChanged\",a)};Sys.Observer.removeCollectionChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"collectionChanged\",a)};Sys.Observer._collectionChange=function(d,c){var a=Sys.Observer._getContext(d);if(a&&a.updating){a.dirty=true;var b=a.changes;if(!b)a.changes=b=[c];else b.push(c)}else{Sys.Observer.raiseCollectionChanged(d,[c]);Sys.Observer.raisePropertyChanged(d,\"length\")}};Sys.Observer.add=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[b],a.length);Array.add(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.addRange=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,b,a.length);Array.addRange(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.clear=function(a){var b=Array.clone(a);Array.clear(a);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset,null,-1,b,0))};Sys.Observer.insert=function(a,b,c){Array.insert(a,b,c);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[c],b))};Sys.Observer.remove=function(a,b){var c=Array.indexOf(a,b);if(c!==-1){Array.remove(a,b);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[b],c));return true}return false};Sys.Observer.removeAt=function(b,a){if(a>-1&&a<b.length){var c=b[a];Array.removeAt(b,a);Sys.Observer._collectionChange(b,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[c],a))}};Sys.Observer.raiseCollectionChanged=function(b,a){Sys.Observer.raiseEvent(b,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))};Sys.Observer._observeMethods={add_propertyChanged:function(a){Sys.Observer._addEventHandler(this,\"propertyChanged\",a)},remove_propertyChanged:function(a){Sys.Observer._removeEventHandler(this,\"propertyChanged\",a)},addEventHandler:function(a,b){Sys.Observer._addEventHandler(this,a,b)},removeEventHandler:function(a,b){Sys.Observer._removeEventHandler(this,a,b)},get_isUpdating:function(){return Sys.Observer.isUpdating(this)},beginUpdate:function(){Sys.Observer.beginUpdate(this)},endUpdate:function(){Sys.Observer.endUpdate(this)},setValue:function(b,a){Sys.Observer._setValue(this,b,a)},raiseEvent:function(b,a){Sys.Observer.raiseEvent(this,b,a)},raisePropertyChanged:function(a){Sys.Observer.raiseEvent(this,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))}};Sys.Observer._arrayMethods={add_collectionChanged:function(a){Sys.Observer._addEventHandler(this,\"collectionChanged\",a)},remove_collectionChanged:function(a){Sys.Observer._removeEventHandler(this,\"collectionChanged\",a)},add:function(a){Sys.Observer.add(this,a)},addRange:function(a){Sys.Observer.addRange(this,a)},clear:function(){Sys.Observer.clear(this)},insert:function(a,b){Sys.Observer.insert(this,a,b)},remove:function(a){return Sys.Observer.remove(this,a)},removeAt:function(a){Sys.Observer.removeAt(this,a)},raiseCollectionChanged:function(a){Sys.Observer.raiseEvent(this,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))}};Sys.Observer._getContext=function(b,c){var a=b._observerContext;if(a)return a();if(c)return (b._observerContext=Sys.Observer._createContext())();return null};Sys.Observer._createContext=function(){var a={events:new Sys.EventHandlerList};return function(){return a}};Date._appendPreOrPostMatch=function(e,b){var d=0,a=false;for(var c=0,g=e.length;c<g;c++){var f=e.charAt(c);switch(f){case \"'\":if(a)b.append(\"'\");else d++;a=false;break;case \"\\\\\":if(a)b.append(\"\\\\\");a=!a;break;default:b.append(f);a=false}}return d};Date._expandFormat=function(a,b){if(!b)b=\"F\";var c=b.length;if(c===1)switch(b){case \"d\":return a.ShortDatePattern;case \"D\":return a.LongDatePattern;case \"t\":return a.ShortTimePattern;case \"T\":return a.LongTimePattern;case \"f\":return a.LongDatePattern+\" \"+a.ShortTimePattern;case \"F\":return a.FullDateTimePattern;case \"M\":case \"m\":return a.MonthDayPattern;case \"s\":return a.SortableDateTimePattern;case \"Y\":case \"y\":return a.YearMonthPattern;default:throw Error.format(Sys.Res.formatInvalidString)}else if(c===2&&b.charAt(0)===\"%\")b=b.charAt(1);return b};Date._expandYear=function(c,a){var d=new Date,e=Date._getEra(d);if(a<100){var b=Date._getEraYear(d,c,e);a+=b-b%100;if(a>c.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a<f;a+=4){b=c[a+2];if(b===null||d>=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g,\"\\\\\\\\$1\");var a=new Sys.StringBuilder(\"^\"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case \"dddd\":case \"ddd\":case \"MMMM\":case \"MMM\":case \"gg\":case \"g\":a.append(\"(\\\\D+)\");break;case \"tt\":case \"t\":a.append(\"(\\\\D*)\");break;case \"yyyy\":a.append(\"(\\\\d{4})\");break;case \"fff\":a.append(\"(\\\\d{3})\");break;case \"ff\":a.append(\"(\\\\d{2})\");break;case \"f\":a.append(\"(\\\\d)\");break;case \"dd\":case \"d\":case \"MM\":case \"M\":case \"yy\":case \"y\":case \"HH\":case \"H\":case \"hh\":case \"h\":case \"mm\":case \"m\":case \"ss\":case \"s\":a.append(\"(\\\\d\\\\d?)\");break;case \"zzz\":a.append(\"([+-]?\\\\d\\\\d?:\\\\d{2})\");break;case \"zz\":case \"z\":a.append(\"([+-]?\\\\d\\\\d?)\");break;case \"/\":a.append(\"(\\\\\"+b.DateSeparator+\")\")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append(\"$\");var k=a.toString().replace(/\\s+/g,\"\\\\s+\"),g={\"regExp\":k,\"groups\":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a<c;a++){f=i[a];if(f){g=true;b=Date._parseExact(h,f,d);if(b)return b}}if(!g){e=d._getDateTimeFormats();for(a=0,c=e.length;a<c;a++){b=Date._parseExact(h,e[a],d);if(b)return b}}return null};Date._parseExact=function(w,D,k){w=w.trim();var g=k.dateTimeFormat,A=Date._getParseRegExp(g,D),C=(new RegExp(A.regExp)).exec(w);if(C===null)return null;var B=A.groups,x=null,e=null,c=null,j=null,i=null,d=0,h,p=0,q=0,f=0,l=null,v=false;for(var s=0,E=B.length;s<E;s++){var a=C[s+1];if(a)switch(B[s]){case \"dd\":case \"d\":j=parseInt(a,10);if(j<1||j>31)return null;break;case \"MMMM\":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case \"MMM\":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case \"M\":case \"MM\":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case \"y\":case \"yy\":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case \"yyyy\":e=parseInt(a,10);if(e<0||e>9999)return null;break;case \"h\":case \"hh\":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case \"H\":case \"HH\":d=parseInt(a,10);if(d<0||d>23)return null;break;case \"m\":case \"mm\":p=parseInt(a,10);if(p<0||p>59)return null;break;case \"s\":case \"ss\":q=parseInt(a,10);if(q<0||q>59)return null;break;case \"tt\":case \"t\":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case \"f\":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case \"ff\":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case \"fff\":f=parseInt(a,10);if(f<0||f>999)return null;break;case \"dddd\":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case \"ddd\":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case \"zzz\":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var m=parseInt(u[1],10);if(m<0||m>59)return null;l=h*60+(a.startsWith(\"-\")?-m:m);break;case \"z\":case \"zz\":h=parseInt(a,10);if(h<-12||h>13)return null;l=h*60;break;case \"g\":case \"gg\":var o=a;if(!o||!g.eras)return null;o=o.toLowerCase().trim();for(var r=0,F=g.eras.length;r<F;r+=4)if(o===g.eras[r+1].toLowerCase()){x=r;break}if(x===null)return null}}var b=new Date,t,n=g.Calendar.convert;if(n)t=n.fromGregorian(b)[0];else t=b.getFullYear();if(e===null)e=t;else if(g.eras)e+=g.eras[(x||0)+3];if(c===null)c=0;if(j===null)j=1;if(n){b=n.toGregorian(e,c,j);if(b===null)return null}else{b.setFullYear(e,c,j);if(b.getDate()!==j)return null;if(i!==null&&b.getDay()!==i)return null}if(v&&d<12)d+=12;b.setHours(d,p,q,f);if(l!==null){var y=b.getMinutes()-(l+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(y/60,10),y%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,j){var b=j.dateTimeFormat,n=b.Calendar.convert;if(!e||!e.length||e===\"i\")if(j&&j.name.length)if(n)return this._toFormattedString(b.FullDateTimePattern,j);else{var r=new Date(this.getTime()),x=Date._getEra(this,b.eras);r.setFullYear(Date._getEraYear(this,b,x));return r.toLocaleString()}else return this.toString();var l=b.eras,k=e===\"s\";e=Date._expandFormat(b,e);var a=new Sys.StringBuilder,c;function d(a){if(a<10)return \"0\"+a;return a.toString()}function m(a){if(a<10)return \"00\"+a;if(a<100)return \"0\"+a;return a.toString()}function v(a){if(a<10)return \"000\"+a;else if(a<100)return \"00\"+a;else if(a<1000)return \"0\"+a;return a.toString()}var h,p,t=/([^d]|^)(d|dd)([^d]|$)/g;function s(){if(h||p)return h;h=t.test(e);p=true;return h}var q=0,o=Date._getTokenRegExp(),f;if(!k&&n)f=n.fromGregorian(this);for(;true;){var w=o.lastIndex,i=o.exec(e),u=e.slice(w,i?i.index:e.length);q+=Date._appendPreOrPostMatch(u,a);if(!i)break;if(q%2===1){a.append(i[0]);continue}function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear();case 1:return a.getMonth();case 2:return a.getDate()}}switch(i[0]){case \"dddd\":a.append(b.DayNames[this.getDay()]);break;case \"ddd\":a.append(b.AbbreviatedDayNames[this.getDay()]);break;case \"dd\":h=true;a.append(d(g(this,2)));break;case \"d\":h=true;a.append(g(this,2));break;case \"MMMM\":a.append(b.MonthGenitiveNames&&s()?b.MonthGenitiveNames[g(this,1)]:b.MonthNames[g(this,1)]);break;case \"MMM\":a.append(b.AbbreviatedMonthGenitiveNames&&s()?b.AbbreviatedMonthGenitiveNames[g(this,1)]:b.AbbreviatedMonthNames[g(this,1)]);break;case \"MM\":a.append(d(g(this,1)+1));break;case \"M\":a.append(g(this,1)+1);break;case \"yyyy\":a.append(v(f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k)));break;case \"yy\":a.append(d((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100));break;case \"y\":a.append((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100);break;case \"hh\":c=this.getHours()%12;if(c===0)c=12;a.append(d(c));break;case \"h\":c=this.getHours()%12;if(c===0)c=12;a.append(c);break;case \"HH\":a.append(d(this.getHours()));break;case \"H\":a.append(this.getHours());break;case \"mm\":a.append(d(this.getMinutes()));break;case \"m\":a.append(this.getMinutes());break;case \"ss\":a.append(d(this.getSeconds()));break;case \"s\":a.append(this.getSeconds());break;case \"tt\":a.append(this.getHours()<12?b.AMDesignator:b.PMDesignator);break;case \"t\":a.append((this.getHours()<12?b.AMDesignator:b.PMDesignator).charAt(0));break;case \"f\":a.append(m(this.getMilliseconds()).charAt(0));break;case \"ff\":a.append(m(this.getMilliseconds()).substr(0,2));break;case \"fff\":a.append(m(this.getMilliseconds()));break;case \"z\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+Math.floor(Math.abs(c)));break;case \"zz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c))));break;case \"zzz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c)))+\":\"+d(Math.abs(this.getTimezoneOffset()%60)));break;case \"g\":case \"gg\":if(b.eras)a.append(b.eras[Date._getEra(this,l)+1]);break;case \"/\":a.append(b.DateSeparator)}}return a.toString()};String.localeFormat=function(){return String._toFormattedString(true,arguments)};Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===\"\"&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h===\"\")h=\"+\";var j,d,f=e.indexOf(\"e\");if(f<0)f=e.indexOf(\"E\");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join(\"\");var n=a.NumberGroupSeparator.replace(/\\u00A0/g,\" \");if(a.NumberGroupSeparator!==n)c=c.split(n).join(\"\");var l=h+c;if(k!==null)l+=\".\"+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]===\"\")i[0]=\"+\";l+=\"e\"+i[0]+i[1]}if(l.match(/^[+-]?\\d*\\.?\\d*(e[+-]?\\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=\" \"+b;c=\" \"+c;case 3:if(a.endsWith(b))return [\"-\",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return [\"+\",a.substr(0,a.length-c.length)];break;case 2:b+=\" \";c+=\" \";case 1:if(a.startsWith(b))return [\"-\",a.substr(b.length)];else if(a.startsWith(c))return [\"+\",a.substr(c.length)];break;case 0:if(a.startsWith(\"(\")&&a.endsWith(\")\"))return [\"-\",a.substr(1,a.length-2)]}return [\"\",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(e,j){if(!e||e.length===0||e===\"i\")if(j&&j.name.length>0)return this.toLocaleString();else return this.toString();var o=[\"n %\",\"n%\",\"%n\"],n=[\"-n %\",\"-n%\",\"-%n\"],p=[\"(n)\",\"-n\",\"- n\",\"n-\",\"n -\"],m=[\"$n\",\"n$\",\"$ n\",\"n $\"],l=[\"($n)\",\"-$n\",\"$-n\",\"$n-\",\"(n$)\",\"-n$\",\"n-$\",\"n$-\",\"-n $\",\"-$ n\",\"n $-\",\"$ n-\",\"$ -n\",\"n- $\",\"($ n)\",\"(n $)\"];function g(a,c,d){for(var b=a.length;b<c;b++)a=d?\"0\"+a:a+\"0\";return a}function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/o;if(!isFinite(m))m=j;j=m;var b=j.toString(),a=\"\",c,e=b.split(/e/i);b=e[0];c=e.length>1?parseInt(e[1]):0;e=b.split(\".\");b=e[0];a=e.length>1?e[1]:\"\";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a=\"\";var d=b.length-1,f=\"\";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k<l.length){h=l[k];k++}}return b.slice(0,d+1)+n+f+a}var a=j.numberFormat,d=Math.abs(this);if(!e)e=\"D\";var b=-1;if(e.length>1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case \"d\":case \"D\":c=\"n\";if(b!==-1)d=g(\"\"+d,b,true);if(this<0)d=-d;break;case \"c\":case \"C\":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case \"n\":case \"N\":if(this<0)c=p[a.NumberNegativePattern];else c=\"n\";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case \"p\":case \"P\":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\\$|-|%/g,f=\"\";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case \"n\":f+=d;break;case \"$\":f+=a.CurrencySymbol;break;case \"-\":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case \"%\":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a<d;a++)b[a]=this._toUpper(c[a]);return b},_toUpper:function(a){return a.split(\"\\u00a0\").join(\" \").toUpperCase()}};Sys.CultureInfo.registerClass(\"Sys.CultureInfo\");Sys.CultureInfo._parse=function(a){var b=a.dateTimeFormat;if(b&&!b.eras)b.eras=a.eras;return new Sys.CultureInfo(a.name,a.numberFormat,b)};Sys.CultureInfo.InvariantCulture=Sys.CultureInfo._parse({\"name\":\"\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":true,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"\\u00a4\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":true},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, dd MMMM yyyy HH:mm:ss\",\"LongDatePattern\":\"dddd, dd MMMM yyyy\",\"LongTimePattern\":\"HH:mm:ss\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"MM/dd/yyyy\",\"ShortTimePattern\":\"HH:mm\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"yyyy MMMM\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":true,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});if(typeof __cultureInfo===\"object\"){Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse(__cultureInfo);delete __cultureInfo}else Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse({\"name\":\"en-US\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":false,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"$\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":false},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, MMMM dd, yyyy h:mm:ss tt\",\"LongDatePattern\":\"dddd, MMMM dd, yyyy\",\"LongTimePattern\":\"h:mm:ss tt\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"M/d/yyyy\",\"ShortTimePattern\":\"h:mm tt\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"MMMM, yyyy\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":false,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});Type.registerNamespace(\"Sys.Serialization\");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass(\"Sys.Serialization.JavaScriptSerializer\");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\\\\\])\\\\\"\\\\\\\\/Date\\\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\\\+|-)[0-9]{4})?\\\\)\\\\\\\\/\\\\\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"i\");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"g\");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp(\"[^,:{}\\\\[\\\\]0-9.\\\\-+Eaeflnr-u \\\\n\\\\r\\\\t]\",\"g\");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('\"(\\\\\\\\.|[^\"\\\\\\\\])*\"',\"g\");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName=\"__type\";Sys.Serialization.JavaScriptSerializer._init=function(){var c=[\"\\\\u0000\",\"\\\\u0001\",\"\\\\u0002\",\"\\\\u0003\",\"\\\\u0004\",\"\\\\u0005\",\"\\\\u0006\",\"\\\\u0007\",\"\\\\b\",\"\\\\t\",\"\\\\n\",\"\\\\u000b\",\"\\\\f\",\"\\\\r\",\"\\\\u000e\",\"\\\\u000f\",\"\\\\u0010\",\"\\\\u0011\",\"\\\\u0012\",\"\\\\u0013\",\"\\\\u0014\",\"\\\\u0015\",\"\\\\u0016\",\"\\\\u0017\",\"\\\\u0018\",\"\\\\u0019\",\"\\\\u001a\",\"\\\\u001b\",\"\\\\u001c\",\"\\\\u001d\",\"\\\\u001e\",\"\\\\u001f\"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]=\"\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[\"\\\\\"]=new RegExp(\"\\\\\\\\\",\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[\"\\\\\"]=\"\\\\\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='\"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\"']=new RegExp('\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars['\"']='\\\\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('\"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('\"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case \"object\":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append(\"[\");for(c=0;c<b.length;++c){if(c>0)a.append(\",\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append(\"]\")}else{if(Date.isInstanceOfType(b)){a.append('\"\\\\/Date(');a.append(b.getTime());a.append(')\\\\/\"');break}var d=[],f=0;for(var e in b){if(e.startsWith(\"$\"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append(\"{\");var j=false;for(c=0;c<f;c++){var h=b[d[c]];if(typeof h!==\"undefined\"&&typeof h!==\"function\"){if(j)a.append(\",\");else j=true;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(d[c],a,i,g);a.append(\":\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(h,a,i,g)}}a.append(\"}\")}else a.append(\"null\");break;case \"number\":Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);break;case \"string\":Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);break;case \"boolean\":Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);break;default:a.append(\"null\")}};Sys.Serialization.JavaScriptSerializer.serialize=function(b){var a=new Sys.StringBuilder;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b,a,false);return a.toString()};Sys.Serialization.JavaScriptSerializer.deserialize=function(data,secure){if(data.length===0)throw Error.argument(\"data\",Sys.Res.cannotDeserializeEmptyString);try{var exp=data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx,\"$1new Date($2)\");if(secure&&Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx,\"\")))throw null;return eval(\"(\"+exp+\")\")}catch(a){throw Error.argument(\"data\",Sys.Res.cannotDeserializeInvalidJson)}};Type.registerNamespace(\"Sys.UI\");Sys.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={_addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},addHandler:function(b,a){this._addHandler(b,a)},_removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},removeHandler:function(b,a){this._removeHandler(b,a)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b<e;b++)a[b](c,d)}},_getEvent:function(a,b){if(!this._list[a]){if(!b)return null;this._list[a]=[]}return this._list[a]}};Sys.EventHandlerList.registerClass(\"Sys.EventHandlerList\");Sys.CommandEventArgs=function(c,a,b){Sys.CommandEventArgs.initializeBase(this);this._commandName=c;this._commandArgument=a;this._commandSource=b};Sys.CommandEventArgs.prototype={_commandName:null,_commandArgument:null,_commandSource:null,get_commandName:function(){return this._commandName},get_commandArgument:function(){return this._commandArgument},get_commandSource:function(){return this._commandSource}};Sys.CommandEventArgs.registerClass(\"Sys.CommandEventArgs\",Sys.CancelEventArgs);Sys.INotifyPropertyChange=function(){};Sys.INotifyPropertyChange.prototype={};Sys.INotifyPropertyChange.registerInterface(\"Sys.INotifyPropertyChange\");Sys.PropertyChangedEventArgs=function(a){Sys.PropertyChangedEventArgs.initializeBase(this);this._propertyName=a};Sys.PropertyChangedEventArgs.prototype={get_propertyName:function(){return this._propertyName}};Sys.PropertyChangedEventArgs.registerClass(\"Sys.PropertyChangedEventArgs\",Sys.EventArgs);Sys.INotifyDisposing=function(){};Sys.INotifyDisposing.prototype={};Sys.INotifyDisposing.registerInterface(\"Sys.INotifyDisposing\");Sys.Component=function(){if(Sys.Application)Sys.Application.registerDisposableObject(this)};Sys.Component.prototype={_id:null,_initialized:false,_updating:false,get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_id:function(){return this._id},set_id:function(a){this._id=a},get_isInitialized:function(){return this._initialized},get_isUpdating:function(){return this._updating},add_disposing:function(a){this.get_events().addHandler(\"disposing\",a)},remove_disposing:function(a){this.get_events().removeHandler(\"disposing\",a)},add_propertyChanged:function(a){this.get_events().addHandler(\"propertyChanged\",a)},remove_propertyChanged:function(a){this.get_events().removeHandler(\"propertyChanged\",a)},beginUpdate:function(){this._updating=true},dispose:function(){if(this._events){var a=this._events.getHandler(\"disposing\");if(a)a(this,Sys.EventArgs.Empty)}delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},endUpdate:function(){this._updating=false;if(!this._initialized)this.initialize();this.updated()},initialize:function(){this._initialized=true},raisePropertyChanged:function(b){if(!this._events)return;var a=this._events.getHandler(\"propertyChanged\");if(a)a(this,new Sys.PropertyChangedEventArgs(b))},updated:function(){}};Sys.Component.registerClass(\"Sys.Component\",null,Sys.IDisposable,Sys.INotifyPropertyChange,Sys.INotifyDisposing);function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j===Object||j===Sys.UI.DomElement,h=Sys.Component.isInstanceOfType(a)&&!a.get_isUpdating();if(h)a.beginUpdate();for(var c in i){var b=i[c],f=e?null:a[\"get_\"+c];if(e||typeof f!==\"function\"){var k=a[c];if(!b||typeof b!==\"object\"||e&&!k)a[c]=b;else Sys$Component$_setProperties(k,b)}else{var l=a[\"set_\"+c];if(typeof l===\"function\")l.apply(a,[b]);else if(b instanceof Array){d=f.apply(a);for(var g=0,m=d.length,n=b.length;g<n;g++,m++)d[m]=b[g]}else if(typeof b===\"object\"&&Object.getType(b)===Object){d=f.apply(a);Sys$Component$_setProperties(d,b)}}}if(h)a.endUpdate()}function Sys$Component$_setReferences(c,b){for(var a in b){var e=c[\"set_\"+a],d=$find(b[a]);e.apply(c,[d])}}var $create=Sys.Component.create=function(h,f,d,c,g){var a=g?new h(g):new h,b=Sys.Application,i=b.get_isCreatingComponents();a.beginUpdate();if(f)Sys$Component$_setProperties(a,f);if(d)for(var e in d)a[\"add_\"+e](d[e]);if(a.get_id())b.addComponent(a);if(i){b._createdComponents[b._createdComponents.length]=a;if(c)b._addComponentToSecondPass(a,c);else a.endUpdate()}else{if(c)Sys$Component$_setReferences(a,c);a.endUpdate()}return a};Sys.UI.MouseButton=function(){throw Error.notImplemented()};Sys.UI.MouseButton.prototype={leftButton:0,middleButton:1,rightButton:2};Sys.UI.MouseButton.registerEnum(\"Sys.UI.MouseButton\");Sys.UI.Key=function(){throw Error.notImplemented()};Sys.UI.Key.prototype={backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127};Sys.UI.Key.registerEnum(\"Sys.UI.Key\");Sys.UI.Point=function(a,b){this.rawX=a;this.rawY=b;this.x=Math.round(a);this.y=Math.round(b)};Sys.UI.Point.registerClass(\"Sys.UI.Point\");Sys.UI.Bounds=function(c,d,b,a){this.x=c;this.y=d;this.height=a;this.width=b};Sys.UI.Bounds.registerClass(\"Sys.UI.Bounds\");Sys.UI.DomEvent=function(e){var a=e,b=this.type=a.type.toLowerCase();this.rawEvent=a;this.altKey=a.altKey;if(typeof a.button!==\"undefined\")this.button=typeof a.which!==\"undefined\"?a.button:a.button===4?Sys.UI.MouseButton.middleButton:a.button===2?Sys.UI.MouseButton.rightButton:Sys.UI.MouseButton.leftButton;if(b===\"keypress\")this.charCode=a.charCode||a.keyCode;else if(a.keyCode&&a.keyCode===46)this.keyCode=127;else this.keyCode=a.keyCode;this.clientX=a.clientX;this.clientY=a.clientY;this.ctrlKey=a.ctrlKey;this.target=a.target?a.target:a.srcElement;if(!b.startsWith(\"key\"))if(typeof a.offsetX!==\"undefined\"&&typeof a.offsetY!==\"undefined\"){this.offsetX=a.offsetX;this.offsetY=a.offsetY}else if(this.target&&this.target.nodeType!==3&&typeof a.clientX===\"number\"){var c=Sys.UI.DomElement.getLocation(this.target),d=Sys.UI.DomElement._getWindow(this.target);this.offsetX=(d.pageXOffset||0)+a.clientX-c.x;this.offsetY=(d.pageYOffset||0)+a.clientY-c.y}this.screenX=a.screenX;this.screenY=a.screenY;this.shiftKey=a.shiftKey};Sys.UI.DomEvent.prototype={preventDefault:function(){if(this.rawEvent.preventDefault)this.rawEvent.preventDefault();else if(window.event)this.rawEvent.returnValue=false},stopPropagation:function(){if(this.rawEvent.stopPropagation)this.rawEvent.stopPropagation();else if(window.event)this.rawEvent.cancelBubble=true}};Sys.UI.DomEvent.registerClass(\"Sys.UI.DomEvent\");var $addHandler=Sys.UI.DomEvent.addHandler=function(a,d,e,g){if(!a._events)a._events={};var c=a._events[d];if(!c)a._events[d]=c=[];var b;if(a.addEventListener){b=function(b){return e.call(a,new Sys.UI.DomEvent(b))};a.addEventListener(d,b,false)}else if(a.attachEvent){b=function(){var b={};try{b=Sys.UI.DomElement._getWindow(a).event}catch(c){}return e.call(a,new Sys.UI.DomEvent(b))};a.attachEvent(\"on\"+d,b)}c[c.length]={handler:e,browserHandler:b,autoRemove:g};if(g){var f=a.dispose;if(f!==Sys.UI.DomEvent._disposeHandlers){a.dispose=Sys.UI.DomEvent._disposeHandlers;if(typeof f!==\"undefined\")a._chainDispose=f}}},$addHandlers=Sys.UI.DomEvent.addHandlers=function(f,d,c,e){for(var b in d){var a=d[b];if(c)a=Function.createDelegate(c,a);$addHandler(f,b,a,e||false)}},$clearHandlers=Sys.UI.DomEvent.clearHandlers=function(a){Sys.UI.DomEvent._clearHandlers(a,false)};Sys.UI.DomEvent._clearHandlers=function(a,g){if(a._events){var e=a._events;for(var b in e){var d=e[b];for(var c=d.length-1;c>=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!==\"undefined\"){this.dispose=b;this._chainDispose=null;if(a===\"function\")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b<g;b++)if(c[b].handler===f){d=c[b].browserHandler;break}if(a.removeEventListener)a.removeEventListener(e,d,false);else if(a.detachEvent)a.detachEvent(\"on\"+e,d);c.splice(b,1)};Sys.UI.DomElement=function(){};Sys.UI.DomElement.registerClass(\"Sys.UI.DomElement\");Sys.UI.DomElement.addCssClass=function(a,b){if(!Sys.UI.DomElement.containsCssClass(a,b))if(a.className===\"\")a.className=b;else a.className+=\" \"+b};Sys.UI.DomElement.containsCssClass=function(b,a){return Array.contains(b.className.split(\" \"),a)};Sys.UI.DomElement.getBounds=function(a){var b=Sys.UI.DomElement.getLocation(a);return new Sys.UI.Bounds(b.x,b.y,a.offsetWidth||0,a.offsetHeight||0)};var $get=Sys.UI.DomElement.getElementById=function(f,e){if(!e)return document.getElementById(f);if(e.getElementById)return e.getElementById(f);var c=[],d=e.childNodes;for(var b=0;b<d.length;b++){var a=d[b];if(a.nodeType==1)c[c.length]=a}while(c.length){a=c.shift();if(a.id==f)return a;d=a.childNodes;for(b=0;b<d.length;b++){a=d[b];if(a.nodeType==1)c[c.length]=a}}return null};if(document.documentElement.getBoundingClientRect)Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9||a===document.documentElement||a.parentNode===a.ownerDocument.documentElement)return new Sys.UI.Point(0,0);var f=a.getBoundingClientRect();if(!f)return new Sys.UI.Point(0,0);var e=a.ownerDocument.documentElement,h=a.ownerDocument.body,l,c=Math.round(f.left)+(e.scrollLeft||h.scrollLeft),d=Math.round(f.top)+(e.scrollTop||h.scrollTop);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){try{var g=a.ownerDocument.parentWindow.frameElement||null;if(g){var i=g.frameBorder===\"0\"||g.frameBorder===\"no\"?2:0;c+=i;d+=i}}catch(m){}if(Sys.Browser.version===7&&!document.documentMode){var j=document.body,k=j.getBoundingClientRect(),b=(k.right-k.left)/j.clientWidth;b=Math.round(b*100);b=(b-b%5)/100;if(!isNaN(b)&&b!==1){c=Math.round(c/b);d=Math.round(d/b)}}if((document.documentMode||0)<8){c-=e.clientLeft;d-=e.clientTop}}return new Sys.UI.Point(c,d)};else if(Sys.Browser.agent===Sys.Browser.Safari)Sys.UI.DomElement.getLocation=function(c){if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);var d=0,e=0,a,j=null,g=null,b;for(a=c;a;j=a,(g=b,a=a.offsetParent)){b=Sys.UI.DomElement._getCurrentStyle(a);var f=a.tagName?a.tagName.toUpperCase():null;if((a.offsetLeft||a.offsetTop)&&(f!==\"BODY\"||(!g||g.position!==\"absolute\"))){d+=a.offsetLeft;e+=a.offsetTop}if(j&&Sys.Browser.version>=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!==\"BODY\"&&f!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i===\"absolute\")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c===\"BODY\"&&(!g||g.position!==\"absolute\"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!==\"TABLE\"&&c!==\"TD\"&&c!==\"HTML\"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c===\"TABLE\"&&(b.position===\"relative\"||b.position===\"absolute\")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!==\"BODY\"&&c!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=\" \"+d.className+\" \",b=a.indexOf(\" \"+c+\" \");if(b>=0)d.className=(a.substr(0,b)+\" \"+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a===\"string\")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position=\"absolute\";a.left=c+\"px\";a.top=d+\"px\"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!==\"hidden\"&&a.display!==\"none\"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?\"visible\":\"hidden\";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode===\"none\")switch(a.tagName.toUpperCase()){case \"DIV\":case \"P\":case \"ADDRESS\":case \"BLOCKQUOTE\":case \"BODY\":case \"COL\":case \"COLGROUP\":case \"DD\":case \"DL\":case \"DT\":case \"FIELDSET\":case \"FORM\":case \"H1\":case \"H2\":case \"H3\":case \"H4\":case \"H5\":case \"H6\":case \"HR\":case \"IFRAME\":case \"LEGEND\":case \"OL\":case \"PRE\":case \"TABLE\":case \"TD\":case \"TH\":case \"TR\":case \"UL\":a._oldDisplayMode=\"block\";break;case \"LI\":a._oldDisplayMode=\"list-item\";break;default:a._oldDisplayMode=\"inline\"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position=\"absolute\";a.style.display=\"block\";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display=\"none\"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface(\"Sys.IContainer\");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass(\"Sys.ApplicationLoadEventArgs\",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,\"unload\",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler(\"init\",a)},remove_init:function(a){this.get_events().removeHandler(\"init\",a)},add_load:function(a){this.get_events().addHandler(\"load\",a)},remove_load:function(a){this.get_events().removeHandler(\"load\",a)},add_unload:function(a){this.get_events().addHandler(\"unload\",a)},remove_unload:function(a){this.get_events().removeHandler(\"unload\",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler(\"unload\");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a<f;a++){var d=b[a];if(typeof d!==\"undefined\")d.dispose()}Array.clear(this._disposableObjects);Sys.UI.DomEvent.removeHandler(window,\"unload\",this._unloadHandlerDelegate);if(Sys._ScriptLoader){var e=Sys._ScriptLoader.getInstance();if(e)e.dispose()}Sys._Application.callBaseMethod(this,\"dispose\")}},disposeElement:function(c,j){if(c.nodeType===1){var b,h=c.getElementsByTagName(\"*\"),g=h.length,i=new Array(g);for(b=0;b<g;b++)i[b]=h[b];for(b=g-1;b>=0;b--){var d=i[b],f=d.dispose;if(f&&typeof f===\"function\")d.dispose();else{var e=d.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=d._behaviors;if(a)this._disposeComponents(a);a=d._components;if(a){this._disposeComponents(a);d._components=null}}if(!j){var f=c.dispose;if(f&&typeof f===\"function\")c.dispose();else{var e=c.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=c._behaviors;if(a)this._disposeComponents(a);a=c._components;if(a){this._disposeComponents(a);c._components=null}}}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a<d;a++){var c=b[a].component;Sys$Component$_setReferences(c,b[a].references);c.endUpdate()}this._secondPassComponents=[];this._creatingComponents=false},findComponent:function(b,a){return a?Sys.IContainer.isInstanceOfType(a)?a.findComponent(b):a[b]||null:Sys.Application._components[b]||null},getComponents:function(){var a=[],b=this._components;for(var c in b)a[a.length]=b[c];return a},initialize:function(){if(!this.get_isInitialized()&&!this._disposing){Sys._Application.callBaseMethod(this,\"initialize\");this._raiseInit();if(this.get_stateString){if(Sys.WebForms&&Sys.WebForms.PageRequestManager){this._beginRequestHandler=Function.createDelegate(this,this._onPageRequestManagerBeginRequest);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);this._endRequestHandler=Function.createDelegate(this,this._onPageRequestManagerEndRequest);Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler)}var a=this.get_stateString();if(a!==this._currentEntry)this._navigate(a);else this._ensureHistory()}this.raiseLoad()}},notifyScriptLoaded:function(){},registerDisposableObject:function(b){if(!this._disposing){var a=this._disposableObjects,c=a.length;a[c]=b;b.__msdisposeindex=c}},raiseLoad:function(){var b=this.get_events().getHandler(\"load\"),a=new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents),!!this._loaded);this._loaded=true;if(b)b(this,a);if(window.pageLoad)window.pageLoad(this,a);this._createdComponents=[]},removeComponent:function(b){var a=b.get_id();if(a)delete this._components[a]},unregisterDisposableObject:function(a){if(!this._disposing){var e=a.__msdisposeindex;if(typeof e===\"number\"){var b=this._disposableObjects;delete b[e];delete a.__msdisposeindex;if(++this._deleteCount>1000){var c=[];for(var d=0,f=b.length;d<f;d++){a=b[d];if(typeof a!==\"undefined\"){a.__msdisposeindex=c.length;c.push(a)}}this._disposableObjects=c;this._deleteCount=0}}}},_addComponentToSecondPass:function(b,a){this._secondPassComponents[this._secondPassComponents.length]={component:b,references:a}},_disposeComponents:function(a){if(a)for(var b=a.length-1;b>=0;b--){var c=a[b];if(typeof c.dispose===\"function\")c.dispose()}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,\"load\",c);b()};Sys.UI.DomEvent.addHandler(window,\"load\",c);if(document.addEventListener)try{document.addEventListener(\"DOMContentLoaded\",a=function(){document.removeEventListener(\"DOMContentLoaded\",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement(\"div\");a=function(){try{d.doScroll(\"left\")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent(\"onreadystatechange\",a=function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler(\"init\");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass(\"Sys._Application\",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,\"get_id\");if(a)return a;if(!this._element||!this._element.id)return \"\";return this._element.id+\"$\"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(\".\");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,\"initialize\");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,\"dispose\");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass(\"Sys.UI.Behavior\",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b<f;b++)if(e.isInstanceOfType(a[b]))c[c.length]=a[b];return c};Sys.UI.VisibilityMode=function(){throw Error.notImplemented()};Sys.UI.VisibilityMode.prototype={hide:0,collapse:1};Sys.UI.VisibilityMode.registerEnum(\"Sys.UI.VisibilityMode\");Sys.UI.Control=function(a){Sys.UI.Control.initializeBase(this);this._element=a;a.control=this;var b=this.get_role();if(b)a.setAttribute(\"role\",b)};Sys.UI.Control.prototype={_parent:null,_visibilityMode:Sys.UI.VisibilityMode.hide,get_element:function(){return this._element},get_id:function(){if(!this._element)return \"\";return this._element.id},set_id:function(){throw Error.invalidOperation(Sys.Res.cantSetId)},get_parent:function(){if(this._parent)return this._parent;if(!this._element)return null;var a=this._element.parentNode;while(a){if(a.control)return a.control;a=a.parentNode}return null},set_parent:function(a){this._parent=a},get_role:function(){return null},get_visibilityMode:function(){return Sys.UI.DomElement.getVisibilityMode(this._element)},set_visibilityMode:function(a){Sys.UI.DomElement.setVisibilityMode(this._element,a)},get_visible:function(){return Sys.UI.DomElement.getVisible(this._element)},set_visible:function(a){Sys.UI.DomElement.setVisible(this._element,a)},addCssClass:function(a){Sys.UI.DomElement.addCssClass(this._element,a)},dispose:function(){Sys.UI.Control.callBaseMethod(this,\"dispose\");if(this._element){this._element.control=null;delete this._element}if(this._parent)delete this._parent},onBubbleEvent:function(){return false},raiseBubbleEvent:function(a,b){this._raiseBubbleEvent(a,b)},_raiseBubbleEvent:function(b,c){var a=this.get_parent();while(a){if(a.onBubbleEvent(b,c))return;a=a.get_parent()}},removeCssClass:function(a){Sys.UI.DomElement.removeCssClass(this._element,a)},toggleCssClass:function(a){Sys.UI.DomElement.toggleCssClass(this._element,a)}};Sys.UI.Control.registerClass(\"Sys.UI.Control\",Sys.Component);Sys.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass(\"Sys.HistoryEventArgs\",Sys.EventArgs);Sys.Application._appLoadHandler=null;Sys.Application._beginRequestHandler=null;Sys.Application._clientId=null;Sys.Application._currentEntry=\"\";Sys.Application._endRequestHandler=null;Sys.Application._history=null;Sys.Application._enableHistory=false;Sys.Application._historyFrame=null;Sys.Application._historyInitialized=false;Sys.Application._historyPointIsNew=false;Sys.Application._ignoreTimer=false;Sys.Application._initialState=null;Sys.Application._state={};Sys.Application._timerCookie=0;Sys.Application._timerHandler=null;Sys.Application._uniqueId=null;Sys._Application.prototype.get_stateString=function(){var a=null;if(Sys.Browser.agent===Sys.Browser.Firefox){var c=window.location.href,b=c.indexOf(\"#\");if(b!==-1)a=c.substring(b+1);else a=\"\";return a}else a=window.location.hash;if(a.length>0&&a.charAt(0)===\"#\")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler(\"navigate\",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler(\"navigate\",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!==\"undefined\")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||\"\";var b=a.indexOf(\"&&\");if(b!==-1&&b+2<a.length){e.__s=a.substr(b+2);a=a.substr(0,b)}var g=a.split(\"&\");for(var f=0,j=g.length;f<j;f++){var d=g[f],c=d.indexOf(\"=\");if(c!==-1&&c+1<d.length){var i=d.substr(0,c),h=d.substr(c+1);e[i]=decodeURIComponent(h)}}return e};Sys._Application.prototype._enableHistoryInScriptManager=function(){this._enableHistory=true};Sys._Application.prototype._ensureHistory=function(){if(!this._historyInitialized&&this._enableHistory){if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&document.documentMode<8){this._historyFrame=document.getElementById(\"__historyFrame\");this._ignoreIFrame=true}this._timerHandler=Function.createDelegate(this,this._onIdle);this._timerCookie=window.setTimeout(this._timerHandler,100);try{this._initialState=this._deserializeState(this.get_stateString())}catch(a){}this._historyInitialized=true}};Sys._Application.prototype._navigate=function(c){this._ensureHistory();var b=this._deserializeState(c);if(this._uniqueId){var d=this._state.__s||\"\",a=b.__s||\"\";if(a!==d){this._updateHiddenField(a);__doPostBack(this._uniqueId,a);this._state=b;return}}this._setState(c);this._state=b;this._raiseNavigate()};Sys._Application.prototype._onIdle=function(){delete this._timerCookie;var a=this.get_stateString();if(a!==this._currentEntry){if(!this._ignoreTimer){this._historyPointIsNew=false;this._navigate(a)}}else this._ignoreTimer=false;this._timerCookie=window.setTimeout(this._timerHandler,100)};Sys._Application.prototype._onIFrameLoad=function(a){if(document.documentMode<8){this._ensureHistory();if(!this._ignoreIFrame){this._historyPointIsNew=false;this._navigate(a)}this._ignoreIFrame=false}};Sys._Application.prototype._onPageRequestManagerBeginRequest=function(){this._ignoreTimer=true;this._originalTitle=document.title};Sys._Application.prototype._onPageRequestManagerEndRequest=function(g,f){var d=f.get_dataItems()[this._clientId],c=this._originalTitle;this._originalTitle=null;var b=document.getElementById(\"__EVENTTARGET\");if(b&&b.value===this._uniqueId)b.value=\"\";if(typeof d!==\"undefined\"){this.setServerState(d);this._historyPointIsNew=true}else this._ignoreTimer=false;var a=this._serializeState(this._state);if(a!==this._currentEntry){this._ignoreTimer=true;if(typeof c===\"string\"){if(Sys.Browser.agent!==Sys.Browser.InternetExplorer||Sys.Browser.version>7){var e=document.title;document.title=c;this._setState(a);document.title=e}else this._setState(a);this._raiseNavigate()}else{this._setState(a);this._raiseNavigate()}}};Sys._Application.prototype._raiseNavigate=function(){var d=this._historyPointIsNew,c=this.get_events().getHandler(\"navigate\"),b={};for(var a in this._state)if(a!==\"__s\")b[a]=this._state[a];var e=new Sys.HistoryEventArgs(b);if(c)c(this,e);if(!d){var f;try{if(Sys.Browser.agent===Sys.Browser.Firefox&&window.location.hash&&(!window.frameElement||window.top.location.hash))Sys.Browser.version<3.5?window.history.go(0):(location.hash=this.get_stateString())}catch(g){}}};Sys._Application.prototype._serializeState=function(d){var b=[];for(var a in d){var e=d[a];if(a===\"__s\")var c=e;else b[b.length]=a+\"=\"+encodeURIComponent(e)}return b.join(\"&\")+(c?\"&&\"+c:\"\")};Sys._Application.prototype._setState=function(a,b){if(this._enableHistory){a=a||\"\";if(a!==this._currentEntry){if(window.theForm){var d=window.theForm.action,e=d.indexOf(\"#\");window.theForm.action=(e!==-1?d.substring(0,e):d)+\"#\"+a}if(this._historyFrame&&this._historyPointIsNew){var f=document.createElement(\"div\");f.appendChild(document.createTextNode(b||document.title));var g=f.innerHTML;this._ignoreIFrame=true;var c=this._historyFrame.contentWindow.document;c.open(\"javascript:'<html></html>'\");c.write(\"<html><head><title>\"+g+\"</title><scri\"+'pt type=\"text/javascript\">parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+\");</scri\"+\"pt></head><body></body></html>\");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var h=this.get_stateString();if(a!==h){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!==\"undefined\"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=[\"Msxml2.XMLHTTP.3.0\",\"Msxml2.XMLHTTP\"];for(var a=0,c=b.length;a<c;a++)try{return new ActiveXObject(b[a])}catch(d){}return null};Type.registerNamespace(\"Sys.Net\");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass(\"Sys.Net.WebRequestExecutor\");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=[\"Msxml2.DOMDocument.3.0\",\"Msxml2.DOMDocument\"];for(var b=0,f=c.length;b<f;b++)try{var a=new ActiveXObject(c[b]);a.async=false;a.loadXML(d);a.setProperty(\"SelectionLanguage\",\"XPath\");return a}catch(g){}}else try{var e=new window.DOMParser;return e.parseFromString(d,\"text/xml\")}catch(g){}return null};Sys.Net.XMLHttpExecutor=function(){Sys.Net.XMLHttpExecutor.initializeBase(this);var a=this;this._xmlHttpRequest=null;this._webRequest=null;this._responseAvailable=false;this._timedOut=false;this._timer=null;this._aborted=false;this._started=false;this._onReadyStateChange=function(){if(a._xmlHttpRequest.readyState===4){try{if(typeof a._xmlHttpRequest.status===\"undefined\")return}catch(b){return}a._clearTimer();a._responseAvailable=true;try{a._webRequest.completed(Sys.EventArgs.Empty)}finally{if(a._xmlHttpRequest!=null){a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest=null}}}};this._clearTimer=function(){if(a._timer!=null){window.clearTimeout(a._timer);a._timer=null}};this._onTimeout=function(){if(!a._responseAvailable){a._clearTimer();a._timedOut=true;a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest.abort();a._webRequest.completed(Sys.EventArgs.Empty);a._xmlHttpRequest=null}}};Sys.Net.XMLHttpExecutor.prototype={get_timedOut:function(){return this._timedOut},get_started:function(){return this._started},get_responseAvailable:function(){return this._responseAvailable},get_aborted:function(){return this._aborted},executeRequest:function(){this._webRequest=this.get_webRequest();var c=this._webRequest.get_body(),a=this._webRequest.get_headers();this._xmlHttpRequest=new XMLHttpRequest;this._xmlHttpRequest.onreadystatechange=this._onReadyStateChange;var e=this._webRequest.get_httpVerb();this._xmlHttpRequest.open(e,this._webRequest.getResolvedUrl(),true);this._xmlHttpRequest.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");if(a)for(var b in a){var f=a[b];if(typeof f!==\"function\")this._xmlHttpRequest.setRequestHeader(b,f)}if(e.toLowerCase()===\"post\"){if(a===null||!a[\"Content-Type\"])this._xmlHttpRequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=utf-8\");if(!c)c=\"\"}var d=this._webRequest.get_timeout();if(d>0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a=\"\";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf(\"MSIE\")!==-1&&typeof a.setProperty!=\"undefined\")a.setProperty(\"SelectionLanguage\",\"XPath\");if(a.documentElement.namespaceURI===\"http://www.mozilla.org/newlayout/xml/parsererror.xml\"&&a.documentElement.tagName===\"parsererror\")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName===\"parsererror\")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass(\"Sys.Net.XMLHttpExecutor\",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType=\"Sys.Net.XMLHttpExecutor\"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler(\"invokingRequest\",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler(\"invokingRequest\",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler(\"completedRequest\",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler(\"completedRequest\",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler(\"invokingRequest\");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass(\"Sys.Net._WebRequestManager\");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass(\"Sys.Net.NetworkRequestEventArgs\",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url=\"\";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler(\"completed\",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler(\"completed\",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler(\"completedRequest\");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler(\"completed\");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return \"GET\";return \"POST\"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf(\"://\")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName(\"base\")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf(\"?\");if(c!==-1)a=a.substr(0,c);c=a.indexOf(\"#\");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf(\"/\")+1);if(!b||b.length===0)return a;if(b.charAt(0)===\"/\"){var e=a.indexOf(\"://\"),g=a.indexOf(\"/\",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf(\"/\");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e===\"function\")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append(\"&\");a.append(d);a.append(\"=\");a.append(b(g))}if(f){if(h)a.append(\"&\");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf(\"?\")>=0?\"&\":\"?\")+d:a};Sys.Net.WebRequest.registerClass(\"Sys.Net.WebRequest\");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){if(this._ensureReadyStateLoaded())this._executeInternal()},_executeInternal:function(){this._addScriptElementHandlers();document.getElementsByTagName(\"head\")[0].appendChild(this._scriptElement)},_ensureReadyStateLoaded:function(){if(this._useReadyState()&&this._scriptElement.readyState!==\"loaded\"&&this._scriptElement.readyState!==\"complete\"){this._scriptDownloadDelegate=Function.createDelegate(this,this._executeInternal);$addHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);return false}return true},_addScriptElementHandlers:function(){if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(this._useReadyState())$addHandler(this._scriptElement,\"readystatechange\",this._scriptLoadDelegate);else $addHandler(this._scriptElement,\"load\",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener(\"error\",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}if(this._useReadyState()&&this._scriptLoadDelegate)$removeHandler(a,\"readystatechange\",this._scriptLoadDelegate);else $removeHandler(a,\"load\",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener(\"error\",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(this._useReadyState()&&a.readyState!==\"complete\")return;this._completedCallback(a,true)},_useReadyState:function(){return Sys.Browser.agent===Sys.Browser.InternetExplorer&&(Sys.Browser.version<9||(document.documentMode||0)<9)}};Sys._ScriptLoaderTask.registerClass(\"Sys._ScriptLoaderTask\",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug&&a.parentNode)a.parentNode.removeChild(a)};Type.registerNamespace(\"Sys.Net\");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange(\"value\",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext===\"undefined\"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||\"callback\"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a===\"undefined\")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass(\"Sys.Net.WebServiceProxy\");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||\"callback\";c=\"_jsonp\"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+\"/\"+encodeURIComponent(a):q,r,n?p+\"=Sys.\"+c:null);if(n){s=document.createElement(\"script\");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!==\"undefined\"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()[\"Content-Type\"]=\"application/json; charset=utf-8\";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o===\"{}\")o=\"\"}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader(\"Content-Type\");if(e.startsWith(\"application/json\"))c=d.get_object();else if(e.startsWith(\"text/xml\"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader(\"jsonerror\"),h=k===\"true\";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith(\"application/json\"))c=!c||typeof c.d===\"undefined\"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,\"\",\"\"),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\\s*([a-zA-Z0-9\\+\\-\\.]+\\:)\\/\\/([^?#\\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||\"\"},get_exceptionType:function(){return this._exceptionType||\"\"},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass(\"Sys.Net.WebServiceError\");"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxApplicationServices.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxApplicationServices.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxApplicationServices.js\nType._registerScript(\"MicrosoftAjaxApplicationServices.js\",[\"MicrosoftAjaxWebServices.js\"]);Type.registerNamespace(\"Sys.Services\");Sys.Services._ProfileService=function(){Sys.Services._ProfileService.initializeBase(this);this.properties={}};Sys.Services._ProfileService.DefaultWebServicePath=\"\";Sys.Services._ProfileService.prototype={_defaultLoadCompletedCallback:null,_defaultSaveCompletedCallback:null,_path:\"\",_timeout:0,get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_defaultSaveCompletedCallback:function(){return this._defaultSaveCompletedCallback},set_defaultSaveCompletedCallback:function(a){this._defaultSaveCompletedCallback=a},get_path:function(){return this._path||\"\"},load:function(c,d,e,f){var b,a;if(!c){a=\"GetAllPropertiesForCurrentUser\";b={authenticatedUserOnly:false}}else{a=\"GetPropertiesForCurrentUser\";b={properties:this._clonePropertyNames(c),authenticatedUserOnly:false}}this._invoke(this._get_path(),a,false,b,Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[d,e,f])},save:function(d,b,c,e){var a=this._flattenProperties(d,this.properties);this._invoke(this._get_path(),\"SetPropertiesForCurrentUser\",false,{values:a.value,authenticatedUserOnly:false},Function.createDelegate(this,this._onSaveComplete),Function.createDelegate(this,this._onSaveFailed),[b,c,e,a.count])},_clonePropertyNames:function(e){var c=[],d={};for(var b=0;b<e.length;b++){var a=e[b];if(!d[a]){Array.add(c,a);d[a]=true}}return c},_flattenProperties:function(a,i,j){var b={},e,d,g=0;if(a&&a.length===0)return {value:b,count:0};for(var c in i){e=i[c];d=j?j+\".\"+c:c;if(Sys.Services.ProfileGroup.isInstanceOfType(e)){var k=this._flattenProperties(a,e,d),h=k.value;g+=k.count;for(var f in h){var l=h[f];b[f]=l}}else if(!a||Array.indexOf(a,d)!==-1){b[d]=e;g++}}return {value:b,count:g}},_get_path:function(){var a=this.get_path();if(!a.length)a=Sys.Services._ProfileService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_onLoadComplete:function(a,e,g){if(typeof a!==\"object\")throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,g,\"Object\"));var c=this._unflattenProperties(a);for(var b in c)this.properties[b]=c[b];var d=e[0]||this.get_defaultLoadCompletedCallback()||this.get_defaultSucceededCallback();if(d){var f=e[2]||this.get_defaultUserContext();d(a.length,f,\"Sys.Services.ProfileService.load\")}},_onLoadFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,\"Sys.Services.ProfileService.load\")}},_onSaveComplete:function(a,b,f){var c=b[3];if(a!==null)if(a instanceof Array)c-=a.length;else if(typeof a===\"number\")c=a;else throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,\"Array\"));var d=b[0]||this.get_defaultSaveCompletedCallback()||this.get_defaultSucceededCallback();if(d){var e=b[2]||this.get_defaultUserContext();d(c,e,\"Sys.Services.ProfileService.save\")}},_onSaveFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,\"Sys.Services.ProfileService.save\")}},_unflattenProperties:function(e){var c={},d,f,h=0;for(var a in e){h++;f=e[a];d=a.indexOf(\".\");if(d!==-1){var g=a.substr(0,d);a=a.substr(d+1);var b=c[g];if(!b||!Sys.Services.ProfileGroup.isInstanceOfType(b)){b=new Sys.Services.ProfileGroup;c[g]=b}b[a]=f}else c[a]=f}e.length=h;return c}};Sys.Services._ProfileService.registerClass(\"Sys.Services._ProfileService\",Sys.Net.WebServiceProxy);Sys.Services.ProfileService=new Sys.Services._ProfileService;Sys.Services.ProfileGroup=function(a){if(a)for(var b in a)this[b]=a[b]};Sys.Services.ProfileGroup.registerClass(\"Sys.Services.ProfileGroup\");Sys.Services._AuthenticationService=function(){Sys.Services._AuthenticationService.initializeBase(this)};Sys.Services._AuthenticationService.DefaultWebServicePath=\"\";Sys.Services._AuthenticationService.prototype={_defaultLoginCompletedCallback:null,_defaultLogoutCompletedCallback:null,_path:\"\",_timeout:0,_authenticated:false,get_defaultLoginCompletedCallback:function(){return this._defaultLoginCompletedCallback},set_defaultLoginCompletedCallback:function(a){this._defaultLoginCompletedCallback=a},get_defaultLogoutCompletedCallback:function(){return this._defaultLogoutCompletedCallback},set_defaultLogoutCompletedCallback:function(a){this._defaultLogoutCompletedCallback=a},get_isLoggedIn:function(){return this._authenticated},get_path:function(){return this._path||\"\"},login:function(c,b,a,h,f,d,e,g){this._invoke(this._get_path(),\"Login\",false,{userName:c,password:b,createPersistentCookie:a},Function.createDelegate(this,this._onLoginComplete),Function.createDelegate(this,this._onLoginFailed),[c,b,a,h,f,d,e,g])},logout:function(c,a,b,d){this._invoke(this._get_path(),\"Logout\",false,{},Function.createDelegate(this,this._onLogoutComplete),Function.createDelegate(this,this._onLogoutFailed),[c,a,b,d])},_get_path:function(){var a=this.get_path();if(!a.length)a=Sys.Services._AuthenticationService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_onLoginComplete:function(e,c,f){if(typeof e!==\"boolean\")throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,\"Boolean\"));var b=c[4],d=c[7]||this.get_defaultUserContext(),a=c[5]||this.get_defaultLoginCompletedCallback()||this.get_defaultSucceededCallback();if(e){this._authenticated=true;if(a)a(true,d,\"Sys.Services.AuthenticationService.login\");if(typeof b!==\"undefined\"&&b!==null)window.location.href=b}else if(a)a(false,d,\"Sys.Services.AuthenticationService.login\")},_onLoginFailed:function(d,b){var a=b[6]||this.get_defaultFailedCallback();if(a){var c=b[7]||this.get_defaultUserContext();a(d,c,\"Sys.Services.AuthenticationService.login\")}},_onLogoutComplete:function(f,a,e){if(f!==null)throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,e,\"null\"));var b=a[0],d=a[3]||this.get_defaultUserContext(),c=a[1]||this.get_defaultLogoutCompletedCallback()||this.get_defaultSucceededCallback();this._authenticated=false;if(c)c(null,d,\"Sys.Services.AuthenticationService.logout\");if(!b)window.location.reload();else window.location.href=b},_onLogoutFailed:function(c,b){var a=b[2]||this.get_defaultFailedCallback();if(a)a(c,b[3],\"Sys.Services.AuthenticationService.logout\")},_setAuthenticated:function(a){this._authenticated=a}};Sys.Services._AuthenticationService.registerClass(\"Sys.Services._AuthenticationService\",Sys.Net.WebServiceProxy);Sys.Services.AuthenticationService=new Sys.Services._AuthenticationService;Sys.Services._RoleService=function(){Sys.Services._RoleService.initializeBase(this);this._roles=[]};Sys.Services._RoleService.DefaultWebServicePath=\"\";Sys.Services._RoleService.prototype={_defaultLoadCompletedCallback:null,_rolesIndex:null,_timeout:0,_path:\"\",get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_path:function(){return this._path||\"\"},get_roles:function(){return Array.clone(this._roles)},isUserInRole:function(a){var b=this._get_rolesIndex()[a.trim().toLowerCase()];return !!b},load:function(a,b,c){Sys.Net.WebServiceProxy.invoke(this._get_path(),\"GetRolesForCurrentUser\",false,{},Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[a,b,c],this.get_timeout())},_get_path:function(){var a=this.get_path();if(!a||!a.length)a=Sys.Services._RoleService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_get_rolesIndex:function(){if(!this._rolesIndex){var b={};for(var a=0;a<this._roles.length;a++)b[this._roles[a].toLowerCase()]=true;this._rolesIndex=b}return this._rolesIndex},_onLoadComplete:function(a,c,f){if(a&&!(a instanceof Array))throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,\"Array\"));this._roles=a;this._rolesIndex=null;var b=c[0]||this.get_defaultLoadCompletedCallback()||this.get_defaultSucceededCallback();if(b){var e=c[2]||this.get_defaultUserContext(),d=Array.clone(a);b(d,e,\"Sys.Services.RoleService.load\")}},_onLoadFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,\"Sys.Services.RoleService.load\")}}};Sys.Services._RoleService.registerClass(\"Sys.Services._RoleService\",Sys.Net.WebServiceProxy);Sys.Services.RoleService=new Sys.Services._RoleService;"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxComponentModel.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxComponentModel.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxComponentModel.js\nType._registerScript(\"MicrosoftAjaxComponentModel.js\",[\"MicrosoftAjaxCore.js\"]);Type.registerNamespace(\"Sys.UI\");Sys.CommandEventArgs=function(c,a,b){Sys.CommandEventArgs.initializeBase(this);this._commandName=c;this._commandArgument=a;this._commandSource=b};Sys.CommandEventArgs.prototype={_commandName:null,_commandArgument:null,_commandSource:null,get_commandName:function(){return this._commandName},get_commandArgument:function(){return this._commandArgument},get_commandSource:function(){return this._commandSource}};Sys.CommandEventArgs.registerClass(\"Sys.CommandEventArgs\",Sys.CancelEventArgs);Sys.INotifyDisposing=function(){};Sys.INotifyDisposing.prototype={};Sys.INotifyDisposing.registerInterface(\"Sys.INotifyDisposing\");Sys.Component=function(){if(Sys.Application)Sys.Application.registerDisposableObject(this)};Sys.Component.prototype={_id:null,_initialized:false,_updating:false,get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_id:function(){return this._id},set_id:function(a){this._id=a},get_isInitialized:function(){return this._initialized},get_isUpdating:function(){return this._updating},add_disposing:function(a){this.get_events().addHandler(\"disposing\",a)},remove_disposing:function(a){this.get_events().removeHandler(\"disposing\",a)},add_propertyChanged:function(a){this.get_events().addHandler(\"propertyChanged\",a)},remove_propertyChanged:function(a){this.get_events().removeHandler(\"propertyChanged\",a)},beginUpdate:function(){this._updating=true},dispose:function(){if(this._events){var a=this._events.getHandler(\"disposing\");if(a)a(this,Sys.EventArgs.Empty)}delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},endUpdate:function(){this._updating=false;if(!this._initialized)this.initialize();this.updated()},initialize:function(){this._initialized=true},raisePropertyChanged:function(b){if(!this._events)return;var a=this._events.getHandler(\"propertyChanged\");if(a)a(this,new Sys.PropertyChangedEventArgs(b))},updated:function(){}};Sys.Component.registerClass(\"Sys.Component\",null,Sys.IDisposable,Sys.INotifyPropertyChange,Sys.INotifyDisposing);function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j===Object||j===Sys.UI.DomElement,h=Sys.Component.isInstanceOfType(a)&&!a.get_isUpdating();if(h)a.beginUpdate();for(var c in i){var b=i[c],f=e?null:a[\"get_\"+c];if(e||typeof f!==\"function\"){var k=a[c];if(!b||typeof b!==\"object\"||e&&!k)a[c]=b;else Sys$Component$_setProperties(k,b)}else{var l=a[\"set_\"+c];if(typeof l===\"function\")l.apply(a,[b]);else if(b instanceof Array){d=f.apply(a);for(var g=0,m=d.length,n=b.length;g<n;g++,m++)d[m]=b[g]}else if(typeof b===\"object\"&&Object.getType(b)===Object){d=f.apply(a);Sys$Component$_setProperties(d,b)}}}if(h)a.endUpdate()}function Sys$Component$_setReferences(c,b){for(var a in b){var e=c[\"set_\"+a],d=$find(b[a]);e.apply(c,[d])}}var $create=Sys.Component.create=function(h,f,d,c,g){var a=g?new h(g):new h,b=Sys.Application,i=b.get_isCreatingComponents();a.beginUpdate();if(f)Sys$Component$_setProperties(a,f);if(d)for(var e in d)a[\"add_\"+e](d[e]);if(a.get_id())b.addComponent(a);if(i){b._createdComponents[b._createdComponents.length]=a;if(c)b._addComponentToSecondPass(a,c);else a.endUpdate()}else{if(c)Sys$Component$_setReferences(a,c);a.endUpdate()}return a};Sys.UI.MouseButton=function(){throw Error.notImplemented()};Sys.UI.MouseButton.prototype={leftButton:0,middleButton:1,rightButton:2};Sys.UI.MouseButton.registerEnum(\"Sys.UI.MouseButton\");Sys.UI.Key=function(){throw Error.notImplemented()};Sys.UI.Key.prototype={backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127};Sys.UI.Key.registerEnum(\"Sys.UI.Key\");Sys.UI.Point=function(a,b){this.rawX=a;this.rawY=b;this.x=Math.round(a);this.y=Math.round(b)};Sys.UI.Point.registerClass(\"Sys.UI.Point\");Sys.UI.Bounds=function(c,d,b,a){this.x=c;this.y=d;this.height=a;this.width=b};Sys.UI.Bounds.registerClass(\"Sys.UI.Bounds\");Sys.UI.DomEvent=function(e){var a=e,b=this.type=a.type.toLowerCase();this.rawEvent=a;this.altKey=a.altKey;if(typeof a.button!==\"undefined\")this.button=typeof a.which!==\"undefined\"?a.button:a.button===4?Sys.UI.MouseButton.middleButton:a.button===2?Sys.UI.MouseButton.rightButton:Sys.UI.MouseButton.leftButton;if(b===\"keypress\")this.charCode=a.charCode||a.keyCode;else if(a.keyCode&&a.keyCode===46)this.keyCode=127;else this.keyCode=a.keyCode;this.clientX=a.clientX;this.clientY=a.clientY;this.ctrlKey=a.ctrlKey;this.target=a.target?a.target:a.srcElement;if(!b.startsWith(\"key\"))if(typeof a.offsetX!==\"undefined\"&&typeof a.offsetY!==\"undefined\"){this.offsetX=a.offsetX;this.offsetY=a.offsetY}else if(this.target&&this.target.nodeType!==3&&typeof a.clientX===\"number\"){var c=Sys.UI.DomElement.getLocation(this.target),d=Sys.UI.DomElement._getWindow(this.target);this.offsetX=(d.pageXOffset||0)+a.clientX-c.x;this.offsetY=(d.pageYOffset||0)+a.clientY-c.y}this.screenX=a.screenX;this.screenY=a.screenY;this.shiftKey=a.shiftKey};Sys.UI.DomEvent.prototype={preventDefault:function(){if(this.rawEvent.preventDefault)this.rawEvent.preventDefault();else if(window.event)this.rawEvent.returnValue=false},stopPropagation:function(){if(this.rawEvent.stopPropagation)this.rawEvent.stopPropagation();else if(window.event)this.rawEvent.cancelBubble=true}};Sys.UI.DomEvent.registerClass(\"Sys.UI.DomEvent\");var $addHandler=Sys.UI.DomEvent.addHandler=function(a,d,e,g){if(!a._events)a._events={};var c=a._events[d];if(!c)a._events[d]=c=[];var b;if(a.addEventListener){b=function(b){return e.call(a,new Sys.UI.DomEvent(b))};a.addEventListener(d,b,false)}else if(a.attachEvent){b=function(){var b={};try{b=Sys.UI.DomElement._getWindow(a).event}catch(c){}return e.call(a,new Sys.UI.DomEvent(b))};a.attachEvent(\"on\"+d,b)}c[c.length]={handler:e,browserHandler:b,autoRemove:g};if(g){var f=a.dispose;if(f!==Sys.UI.DomEvent._disposeHandlers){a.dispose=Sys.UI.DomEvent._disposeHandlers;if(typeof f!==\"undefined\")a._chainDispose=f}}},$addHandlers=Sys.UI.DomEvent.addHandlers=function(f,d,c,e){for(var b in d){var a=d[b];if(c)a=Function.createDelegate(c,a);$addHandler(f,b,a,e||false)}},$clearHandlers=Sys.UI.DomEvent.clearHandlers=function(a){Sys.UI.DomEvent._clearHandlers(a,false)};Sys.UI.DomEvent._clearHandlers=function(a,g){if(a._events){var e=a._events;for(var b in e){var d=e[b];for(var c=d.length-1;c>=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!==\"undefined\"){this.dispose=b;this._chainDispose=null;if(a===\"function\")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b<g;b++)if(c[b].handler===f){d=c[b].browserHandler;break}if(a.removeEventListener)a.removeEventListener(e,d,false);else if(a.detachEvent)a.detachEvent(\"on\"+e,d);c.splice(b,1)};Sys.UI.DomElement=function(){};Sys.UI.DomElement.registerClass(\"Sys.UI.DomElement\");Sys.UI.DomElement.addCssClass=function(a,b){if(!Sys.UI.DomElement.containsCssClass(a,b))if(a.className===\"\")a.className=b;else a.className+=\" \"+b};Sys.UI.DomElement.containsCssClass=function(b,a){return Array.contains(b.className.split(\" \"),a)};Sys.UI.DomElement.getBounds=function(a){var b=Sys.UI.DomElement.getLocation(a);return new Sys.UI.Bounds(b.x,b.y,a.offsetWidth||0,a.offsetHeight||0)};var $get=Sys.UI.DomElement.getElementById=function(f,e){if(!e)return document.getElementById(f);if(e.getElementById)return e.getElementById(f);var c=[],d=e.childNodes;for(var b=0;b<d.length;b++){var a=d[b];if(a.nodeType==1)c[c.length]=a}while(c.length){a=c.shift();if(a.id==f)return a;d=a.childNodes;for(b=0;b<d.length;b++){a=d[b];if(a.nodeType==1)c[c.length]=a}}return null};if(document.documentElement.getBoundingClientRect)Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9||a===document.documentElement||a.parentNode===a.ownerDocument.documentElement)return new Sys.UI.Point(0,0);var f=a.getBoundingClientRect();if(!f)return new Sys.UI.Point(0,0);var e=a.ownerDocument.documentElement,h=a.ownerDocument.body,l,c=Math.round(f.left)+(e.scrollLeft||h.scrollLeft),d=Math.round(f.top)+(e.scrollTop||h.scrollTop);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){try{var g=a.ownerDocument.parentWindow.frameElement||null;if(g){var i=g.frameBorder===\"0\"||g.frameBorder===\"no\"?2:0;c+=i;d+=i}}catch(m){}if(Sys.Browser.version===7&&!document.documentMode){var j=document.body,k=j.getBoundingClientRect(),b=(k.right-k.left)/j.clientWidth;b=Math.round(b*100);b=(b-b%5)/100;if(!isNaN(b)&&b!==1){c=Math.round(c/b);d=Math.round(d/b)}}if((document.documentMode||0)<8){c-=e.clientLeft;d-=e.clientTop}}return new Sys.UI.Point(c,d)};else if(Sys.Browser.agent===Sys.Browser.Safari)Sys.UI.DomElement.getLocation=function(c){if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);var d=0,e=0,a,j=null,g=null,b;for(a=c;a;j=a,(g=b,a=a.offsetParent)){b=Sys.UI.DomElement._getCurrentStyle(a);var f=a.tagName?a.tagName.toUpperCase():null;if((a.offsetLeft||a.offsetTop)&&(f!==\"BODY\"||(!g||g.position!==\"absolute\"))){d+=a.offsetLeft;e+=a.offsetTop}if(j&&Sys.Browser.version>=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!==\"BODY\"&&f!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i===\"absolute\")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c===\"BODY\"&&(!g||g.position!==\"absolute\"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!==\"TABLE\"&&c!==\"TD\"&&c!==\"HTML\"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c===\"TABLE\"&&(b.position===\"relative\"||b.position===\"absolute\")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!==\"absolute\")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!==\"BODY\"&&c!==\"HTML\"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=\" \"+d.className+\" \",b=a.indexOf(\" \"+c+\" \");if(b>=0)d.className=(a.substr(0,b)+\" \"+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a===\"string\")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position=\"absolute\";a.left=c+\"px\";a.top=d+\"px\"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!==\"hidden\"&&a.display!==\"none\"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?\"visible\":\"hidden\";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display=\"none\"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode===\"none\")switch(a.tagName.toUpperCase()){case \"DIV\":case \"P\":case \"ADDRESS\":case \"BLOCKQUOTE\":case \"BODY\":case \"COL\":case \"COLGROUP\":case \"DD\":case \"DL\":case \"DT\":case \"FIELDSET\":case \"FORM\":case \"H1\":case \"H2\":case \"H3\":case \"H4\":case \"H5\":case \"H6\":case \"HR\":case \"IFRAME\":case \"LEGEND\":case \"OL\":case \"PRE\":case \"TABLE\":case \"TD\":case \"TH\":case \"TR\":case \"UL\":a._oldDisplayMode=\"block\";break;case \"LI\":a._oldDisplayMode=\"list-item\";break;default:a._oldDisplayMode=\"inline\"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position=\"absolute\";a.style.display=\"block\";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display=\"none\"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface(\"Sys.IContainer\");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass(\"Sys.ApplicationLoadEventArgs\",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,\"unload\",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler(\"init\",a)},remove_init:function(a){this.get_events().removeHandler(\"init\",a)},add_load:function(a){this.get_events().addHandler(\"load\",a)},remove_load:function(a){this.get_events().removeHandler(\"load\",a)},add_unload:function(a){this.get_events().addHandler(\"unload\",a)},remove_unload:function(a){this.get_events().removeHandler(\"unload\",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler(\"unload\");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a<f;a++){var d=b[a];if(typeof d!==\"undefined\")d.dispose()}Array.clear(this._disposableObjects);Sys.UI.DomEvent.removeHandler(window,\"unload\",this._unloadHandlerDelegate);if(Sys._ScriptLoader){var e=Sys._ScriptLoader.getInstance();if(e)e.dispose()}Sys._Application.callBaseMethod(this,\"dispose\")}},disposeElement:function(c,j){if(c.nodeType===1){var b,h=c.getElementsByTagName(\"*\"),g=h.length,i=new Array(g);for(b=0;b<g;b++)i[b]=h[b];for(b=g-1;b>=0;b--){var d=i[b],f=d.dispose;if(f&&typeof f===\"function\")d.dispose();else{var e=d.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=d._behaviors;if(a)this._disposeComponents(a);a=d._components;if(a){this._disposeComponents(a);d._components=null}}if(!j){var f=c.dispose;if(f&&typeof f===\"function\")c.dispose();else{var e=c.control;if(e&&typeof e.dispose===\"function\")e.dispose()}var a=c._behaviors;if(a)this._disposeComponents(a);a=c._components;if(a){this._disposeComponents(a);c._components=null}}}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a<d;a++){var c=b[a].component;Sys$Component$_setReferences(c,b[a].references);c.endUpdate()}this._secondPassComponents=[];this._creatingComponents=false},findComponent:function(b,a){return a?Sys.IContainer.isInstanceOfType(a)?a.findComponent(b):a[b]||null:Sys.Application._components[b]||null},getComponents:function(){var a=[],b=this._components;for(var c in b)a[a.length]=b[c];return a},initialize:function(){if(!this.get_isInitialized()&&!this._disposing){Sys._Application.callBaseMethod(this,\"initialize\");this._raiseInit();if(this.get_stateString){if(Sys.WebForms&&Sys.WebForms.PageRequestManager){this._beginRequestHandler=Function.createDelegate(this,this._onPageRequestManagerBeginRequest);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);this._endRequestHandler=Function.createDelegate(this,this._onPageRequestManagerEndRequest);Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler)}var a=this.get_stateString();if(a!==this._currentEntry)this._navigate(a);else this._ensureHistory()}this.raiseLoad()}},notifyScriptLoaded:function(){},registerDisposableObject:function(b){if(!this._disposing){var a=this._disposableObjects,c=a.length;a[c]=b;b.__msdisposeindex=c}},raiseLoad:function(){var b=this.get_events().getHandler(\"load\"),a=new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents),!!this._loaded);this._loaded=true;if(b)b(this,a);if(window.pageLoad)window.pageLoad(this,a);this._createdComponents=[]},removeComponent:function(b){var a=b.get_id();if(a)delete this._components[a]},unregisterDisposableObject:function(a){if(!this._disposing){var e=a.__msdisposeindex;if(typeof e===\"number\"){var b=this._disposableObjects;delete b[e];delete a.__msdisposeindex;if(++this._deleteCount>1000){var c=[];for(var d=0,f=b.length;d<f;d++){a=b[d];if(typeof a!==\"undefined\"){a.__msdisposeindex=c.length;c.push(a)}}this._disposableObjects=c;this._deleteCount=0}}}},_addComponentToSecondPass:function(b,a){this._secondPassComponents[this._secondPassComponents.length]={component:b,references:a}},_disposeComponents:function(a){if(a)for(var b=a.length-1;b>=0;b--){var c=a[b];if(typeof c.dispose===\"function\")c.dispose()}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,\"load\",c);b()};Sys.UI.DomEvent.addHandler(window,\"load\",c);if(document.addEventListener)try{document.addEventListener(\"DOMContentLoaded\",a=function(){document.removeEventListener(\"DOMContentLoaded\",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement(\"div\");a=function(){try{d.doScroll(\"left\")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent(\"onreadystatechange\",a=function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler(\"init\");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass(\"Sys._Application\",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,\"get_id\");if(a)return a;if(!this._element||!this._element.id)return \"\";return this._element.id+\"$\"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(\".\");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,\"initialize\");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,\"dispose\");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass(\"Sys.UI.Behavior\",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b<f;b++)if(e.isInstanceOfType(a[b]))c[c.length]=a[b];return c};Sys.UI.VisibilityMode=function(){throw Error.notImplemented()};Sys.UI.VisibilityMode.prototype={hide:0,collapse:1};Sys.UI.VisibilityMode.registerEnum(\"Sys.UI.VisibilityMode\");Sys.UI.Control=function(a){Sys.UI.Control.initializeBase(this);this._element=a;a.control=this;var b=this.get_role();if(b)a.setAttribute(\"role\",b)};Sys.UI.Control.prototype={_parent:null,_visibilityMode:Sys.UI.VisibilityMode.hide,get_element:function(){return this._element},get_id:function(){if(!this._element)return \"\";return this._element.id},set_id:function(){throw Error.invalidOperation(Sys.Res.cantSetId)},get_parent:function(){if(this._parent)return this._parent;if(!this._element)return null;var a=this._element.parentNode;while(a){if(a.control)return a.control;a=a.parentNode}return null},set_parent:function(a){this._parent=a},get_role:function(){return null},get_visibilityMode:function(){return Sys.UI.DomElement.getVisibilityMode(this._element)},set_visibilityMode:function(a){Sys.UI.DomElement.setVisibilityMode(this._element,a)},get_visible:function(){return Sys.UI.DomElement.getVisible(this._element)},set_visible:function(a){Sys.UI.DomElement.setVisible(this._element,a)},addCssClass:function(a){Sys.UI.DomElement.addCssClass(this._element,a)},dispose:function(){Sys.UI.Control.callBaseMethod(this,\"dispose\");if(this._element){this._element.control=null;delete this._element}if(this._parent)delete this._parent},onBubbleEvent:function(){return false},raiseBubbleEvent:function(a,b){this._raiseBubbleEvent(a,b)},_raiseBubbleEvent:function(b,c){var a=this.get_parent();while(a){if(a.onBubbleEvent(b,c))return;a=a.get_parent()}},removeCssClass:function(a){Sys.UI.DomElement.removeCssClass(this._element,a)},toggleCssClass:function(a){Sys.UI.DomElement.toggleCssClass(this._element,a)}};Sys.UI.Control.registerClass(\"Sys.UI.Control\",Sys.Component);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxCore.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxCore.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxCore.js\nFunction.__typeName=\"Function\";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c<e;c++)d[c]=arguments[c];d[e]=a;return b.apply(this,d)}return b.call(this,a)}};Function.createDelegate=function(a,b){return function(){return b.apply(a,arguments)}};Function.emptyFunction=Function.emptyMethod=function(){};Function.validateParameters=function(c,b,a){return Function._validateParams(c,b,a)};Function._validateParams=function(g,e,c){var a,d=e.length;c=c||typeof c===\"undefined\";a=Function._validateParameterCount(g,e,c);if(a){a.popStackFrame();return a}for(var b=0,i=g.length;b<i;b++){var f=e[Math.min(b,d-1)],h=f.name;if(f.parameterArray)h+=\"[\"+(b-d+1)+\"]\";else if(!c&&b>=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(e<b){var f=b;for(a=0;a<b;a++){var g=d[a];if(g.optional||g.parameterArray)f--}if(e<f)c=true}else if(i&&e>b){c=true;for(a=0;a<b;a++)if(d[a].parameterArray){c=false;break}}if(c){var h=Error.parameterCount();h.popStackFrame();return h}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!==\"undefined\"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d<c.length;d++){var n=c[d];b=Function._validateParameterType(n,e,j,i,f,h+\"[\"+d+\"]\");if(b){b.popStackFrame();return b}}}return null};Function._validateParameterType=function(b,c,k,j,h,d){var a,g;if(typeof b===\"undefined\")if(h)return null;else{a=Error.argumentUndefined(d);a.popStackFrame();return a}if(b===null)if(h)return null;else{a=Error.argumentNull(d);a.popStackFrame();return a}if(c&&c.__enum){if(typeof b!==\"number\"){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(b%1===0){var e=c.prototype;if(!c.__flags||b===0){for(g in e)if(e[g]===b)return null}else{var i=b;for(g in e){var f=e[g];if(f===0)continue;if((f&b)===f)i-=f;if(i===0)return null}}}a=Error.argumentOutOfRange(d,b,String.format(Sys.Res.enumInvalidValue,b,c.getName()));a.popStackFrame();return a}if(j&&(!Sys._isDomElement(b)||b.nodeType===3)){a=Error.argument(d,Sys.Res.argumentDomElement);a.popStackFrame();return a}if(c&&!Sys._isInstanceOfType(c,b)){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(c===Number&&k)if(b%1!==0){a=Error.argumentOutOfRange(d,b,Sys.Res.argumentInteger);a.popStackFrame();return a}return null};Error.__typeName=\"Error\";Error.__class=true;Error.create=function(d,b){var a=new Error(d);a.message=d;if(b)for(var c in b)a[c]=b[c];a.popStackFrame();return a};Error.argument=function(a,c){var b=\"Sys.ArgumentException: \"+(c?c:Sys.Res.argument);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentException\",paramName:a});d.popStackFrame();return d};Error.argumentNull=function(a,c){var b=\"Sys.ArgumentNullException: \"+(c?c:Sys.Res.argumentNull);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentNullException\",paramName:a});d.popStackFrame();return d};Error.argumentOutOfRange=function(c,a,d){var b=\"Sys.ArgumentOutOfRangeException: \"+(d?d:Sys.Res.argumentOutOfRange);if(c)b+=\"\\n\"+String.format(Sys.Res.paramName,c);if(typeof a!==\"undefined\"&&a!==null)b+=\"\\n\"+String.format(Sys.Res.actualValue,a);var e=Error.create(b,{name:\"Sys.ArgumentOutOfRangeException\",paramName:c,actualValue:a});e.popStackFrame();return e};Error.argumentType=function(d,c,b,e){var a=\"Sys.ArgumentTypeException: \";if(e)a+=e;else if(c&&b)a+=String.format(Sys.Res.argumentTypeWithTypes,c.getName(),b.getName());else a+=Sys.Res.argumentType;if(d)a+=\"\\n\"+String.format(Sys.Res.paramName,d);var f=Error.create(a,{name:\"Sys.ArgumentTypeException\",paramName:d,actualType:c,expectedType:b});f.popStackFrame();return f};Error.argumentUndefined=function(a,c){var b=\"Sys.ArgumentUndefinedException: \"+(c?c:Sys.Res.argumentUndefined);if(a)b+=\"\\n\"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:\"Sys.ArgumentUndefinedException\",paramName:a});d.popStackFrame();return d};Error.format=function(a){var c=\"Sys.FormatException: \"+(a?a:Sys.Res.format),b=Error.create(c,{name:\"Sys.FormatException\"});b.popStackFrame();return b};Error.invalidOperation=function(a){var c=\"Sys.InvalidOperationException: \"+(a?a:Sys.Res.invalidOperation),b=Error.create(c,{name:\"Sys.InvalidOperationException\"});b.popStackFrame();return b};Error.notImplemented=function(a){var c=\"Sys.NotImplementedException: \"+(a?a:Sys.Res.notImplemented),b=Error.create(c,{name:\"Sys.NotImplementedException\"});b.popStackFrame();return b};Error.parameterCount=function(a){var c=\"Sys.ParameterCountException: \"+(a?a:Sys.Res.parameterCount),b=Error.create(c,{name:\"Sys.ParameterCountException\"});b.popStackFrame();return b};Error.prototype.popStackFrame=function(){if(typeof this.stack===\"undefined\"||this.stack===null||typeof this.fileName===\"undefined\"||this.fileName===null||typeof this.lineNumber===\"undefined\"||this.lineNumber===null)return;var a=this.stack.split(\"\\n\"),c=a[0],e=this.fileName+\":\"+this.lineNumber;while(typeof c!==\"undefined\"&&c!==null&&c.indexOf(e)===-1){a.shift();c=a[0]}var d=a[1];if(typeof d===\"undefined\"||d===null)return;var b=d.match(/@(.*):(\\d+)$/);if(typeof b===\"undefined\"||b===null)return;this.fileName=b[1];this.lineNumber=parseInt(b[2]);a.shift();this.stack=a.join(\"\\n\")};Object.__typeName=\"Object\";Object.__class=true;Object.getType=function(b){var a=b.constructor;if(!a||typeof a!==\"function\"||!a.__typeName||a.__typeName===\"Object\")return Object;return a};Object.getTypeName=function(a){return Object.getType(a).getName()};String.__typeName=\"String\";String.__class=true;String.prototype.endsWith=function(a){return this.substr(this.length-a.length)===a};String.prototype.startsWith=function(a){return this.substr(0,a.length)===a};String.prototype.trim=function(){return this.replace(/^\\s+|\\s+$/g,\"\")};String.prototype.trimEnd=function(){return this.replace(/\\s+$/,\"\")};String.prototype.trimStart=function(){return this.replace(/^\\s+/,\"\")};String.format=function(){return String._toFormattedString(false,arguments)};String._toFormattedString=function(l,j){var c=\"\",e=j[0];for(var a=0;true;){var f=e.indexOf(\"{\",a),d=e.indexOf(\"}\",a);if(f<0&&d<0){c+=e.slice(a);break}if(d>0&&(d<f||f<0)){c+=e.slice(a,d+1);a=d+2;continue}c+=e.slice(a,f);a=f+1;if(e.charAt(a)===\"{\"){c+=\"{\";a++;continue}if(d<0)break;var h=e.substring(a,d),g=h.indexOf(\":\"),k=parseInt(g<0?h:h.substring(0,g),10)+1,i=g<0?\"\":h.substring(g+1),b=j[k];if(typeof b===\"undefined\"||b===null)b=\"\";if(b.toFormattedString)c+=b.toFormattedString(i);else if(l&&b.localeFormat)c+=b.localeFormat(i);else if(b.format)c+=b.format(i);else c+=b.toString();a=d+1}return c};Boolean.__typeName=\"Boolean\";Boolean.__class=true;Boolean.parse=function(b){var a=b.trim().toLowerCase();if(a===\"false\")return false;if(a===\"true\")return true};Date.__typeName=\"Date\";Date.__class=true;Number.__typeName=\"Number\";Number.__class=true;RegExp.__typeName=\"RegExp\";RegExp.__class=true;if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=Sys._getBaseMethod(this,a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(a,b){return Sys._getBaseMethod(this,a,b)};Type.prototype.getBaseType=function(){return typeof this.__baseType===\"undefined\"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Array.contains(a,e))a[a.length]=e}b=b.__baseType}return a};Type.prototype.getName=function(){return typeof this.__typeName===\"undefined\"?\"\":this.__typeName};Type.prototype.implementsInterface=function(d){this.resolveInheritance();var c=d.getName(),a=this.__interfaceCache;if(a){var e=a[c];if(typeof e!==\"undefined\")return e}else a=this.__interfaceCache={};var b=this;while(b){var f=b.__interfaces;if(f)if(Array.indexOf(f,d)!==-1)return a[c]=true;b=b.__baseType}return a[c]=false};Type.prototype.inheritsFrom=function(b){this.resolveInheritance();var a=this.__baseType;while(a){if(a===b)return true;a=a.__baseType}return false};Type.prototype.initializeBase=function(a,b){this.resolveInheritance();if(this.__baseType)if(!b)this.__baseType.apply(a);else this.__baseType.apply(a,b);return a};Type.prototype.isImplementedBy=function(a){if(typeof a===\"undefined\"||a===null)return false;var b=Object.getType(a);return !!(b.implementsInterface&&b.implementsInterface(this))};Type.prototype.isInstanceOfType=function(a){return Sys._isInstanceOfType(this,a)};Type.prototype.registerClass=function(c,b,d){this.prototype.constructor=this;this.__typeName=c;this.__class=true;if(b){this.__baseType=b;this.__basePrototypePending=true}Sys.__upperCaseTypes[c.toUpperCase()]=this;if(d){this.__interfaces=[];for(var a=2,f=arguments.length;a<f;a++){var e=arguments[a];this.__interfaces.push(e)}}return this};Type.prototype.registerInterface=function(a){Sys.__upperCaseTypes[a.toUpperCase()]=this;this.prototype.constructor=this;this.__typeName=a;this.__interface=true;return this};Type.prototype.resolveInheritance=function(){if(this.__basePrototypePending){var b=this.__baseType;b.resolveInheritance();for(var a in b.prototype){var c=b.prototype[a];if(!this.prototype[a])this.prototype[a]=c}delete this.__basePrototypePending}};Type.getRootNamespaces=function(){return Array.clone(Sys.__rootNamespaces)};Type.isClass=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__class};Type.isInterface=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__interface};Type.isNamespace=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__namespace};Type.parse=function(typeName,ns){var fn;if(ns){fn=Sys.__upperCaseTypes[ns.getName().toUpperCase()+\".\"+typeName.toUpperCase()];return fn||null}if(!typeName)return null;if(!Type.__htClasses)Type.__htClasses={};fn=Type.__htClasses[typeName];if(!fn){fn=eval(typeName);Type.__htClasses[typeName]=fn}return fn};Type.registerNamespace=function(e){var d=window,c=e.split(\".\");for(var b=0;b<c.length;b++){var f=c[b],a=d[f];if(!a)a=d[f]={};if(!a.__namespace){if(b===0&&e!==\"Sys\")Sys.__rootNamespaces[Sys.__rootNamespaces.length]=a;a.__namespace=true;a.__typeName=c.slice(0,b+1).join(\".\");a.getName=function(){return this.__typeName}}d=a}};Type._checkDependency=function(c,a){var d=Type._registerScript._scripts,b=d?!!d[c]:false;if(typeof a!==\"undefined\"&&!b)throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded,a,c));return b};Type._registerScript=function(a,c){var b=Type._registerScript._scripts;if(!b)Type._registerScript._scripts=b={};if(b[a])throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded,a));b[a]=true;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Type._checkDependency(e))throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound,a,e))}};Type.registerNamespace(\"Sys\");Sys.__upperCaseTypes={};Sys.__rootNamespaces=[Sys];Sys._isInstanceOfType=function(c,b){if(typeof b===\"undefined\"||b===null)return false;if(b instanceof c)return true;var a=Object.getType(b);return !!(a===c)||a.inheritsFrom&&a.inheritsFrom(c)||a.implementsInterface&&a.implementsInterface(c)};Sys._getBaseMethod=function(d,e,c){var b=d.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Sys._isDomElement=function(a){var c=false;if(typeof a.nodeType!==\"number\"){var b=a.ownerDocument||a.document||a;if(b!=a){var d=b.defaultView||b.parentWindow;c=d!=a}else c=typeof b.body===\"undefined\"}return !c};Array.__typeName=\"Array\";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Sys._indexOf(a,b)>=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a<f;a++){var c=b[a];if(typeof c!==\"undefined\")e.call(d,c,a,b)}};Array.indexOf=function(a,c,b){return Sys._indexOf(a,c,b)};Array.insert=function(a,b,c){a.splice(b,0,c)};Array.parse=function(value){if(!value)return [];return eval(value)};Array.remove=function(b,c){var a=Sys._indexOf(b,c);if(a>=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e===\"undefined\")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b<c;b++)if(typeof d[b]!==\"undefined\"&&d[b]===e)return b}return -1};Type._registerScript(\"MicrosoftAjaxCore.js\");Sys.IDisposable=function(){};Sys.IDisposable.prototype={};Sys.IDisposable.registerInterface(\"Sys.IDisposable\");Sys.StringBuilder=function(a){this._parts=typeof a!==\"undefined\"&&a!==null&&a!==\"\"?[a.toString()]:[];this._value={};this._len=0};Sys.StringBuilder.prototype={append:function(a){this._parts[this._parts.length]=a},appendLine:function(a){this._parts[this._parts.length]=typeof a===\"undefined\"||a===null||a===\"\"?\"\\r\\n\":a+\"\\r\\n\"},clear:function(){this._parts=[];this._value={};this._len=0},isEmpty:function(){if(this._parts.length===0)return true;return this.toString()===\"\"},toString:function(a){a=a||\"\";var b=this._parts;if(this._len!==b.length){this._value={};this._len=b.length}var d=this._value;if(typeof d[a]===\"undefined\"){if(a!==\"\")for(var c=0;c<b.length;)if(typeof b[c]===\"undefined\"||b[c]===\"\"||b[c]===null)b.splice(c,1);else c++;d[a]=this._parts.join(a)}return d[a]}};Sys.StringBuilder.registerClass(\"Sys.StringBuilder\");Sys.Browser={};Sys.Browser.InternetExplorer={};Sys.Browser.Firefox={};Sys.Browser.Safari={};Sys.Browser.Opera={};Sys.Browser.agent=null;Sys.Browser.hasDebuggerStatement=false;Sys.Browser.name=navigator.appName;Sys.Browser.version=parseFloat(navigator.appVersion);Sys.Browser.documentMode=0;if(navigator.userAgent.indexOf(\" MSIE \")>-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\\d+\\.\\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" Firefox/\")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\\/(\\d+\\.\\d+)/)[1]);Sys.Browser.name=\"Firefox\";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(\" AppleWebKit/\")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\\/(\\d+(\\.\\d+)?)/)[1]);Sys.Browser.name=\"Safari\"}else if(navigator.userAgent.indexOf(\"Opera/\")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass(\"Sys.EventArgs\");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass(\"Sys.CancelEventArgs\",Sys.EventArgs);Sys.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={_addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},addHandler:function(b,a){this._addHandler(b,a)},_removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},removeHandler:function(b,a){this._removeHandler(b,a)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b<e;b++)a[b](c,d)}},_getEvent:function(a,b){if(!this._list[a]){if(!b)return null;this._list[a]=[]}return this._list[a]}};Sys.EventHandlerList.registerClass(\"Sys.EventHandlerList\");Type.registerNamespace(\"Sys.UI\");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!==\"undefined\"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value+=b+\"\\n\"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById(\"TraceConsole\");if(a&&a.tagName.toUpperCase()===\"TEXTAREA\")a.value=\"\"},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval(\"debugger\")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:\"traceDump\";b=b?b:\"\";if(a===null){this.trace(b+c+\": null\");return}switch(typeof a){case \"undefined\":this.trace(b+c+\": Undefined\");break;case \"number\":case \"string\":case \"boolean\":this.trace(b+c+\": \"+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+\": \"+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+\": ...\");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName===\"string\"){var k=a.tagName?a.tagName:\"DomElement\";if(a.id)k+=\" - \"+a.id;this.trace(b+c+\" {\"+k+\"}\")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i===\"string\"?\" {\"+i+\"}\":\"\"));if(b===\"\"||f){b+=\"    \";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e<j;e++)this._traceDump(a[e],\"[\"+e+\"]\",f,b,d)}else for(g in a){h=a[g];if(!Function.isInstanceOfType(h))this._traceDump(h,g,f,b,d)}}}Array.remove(d,a)}}};Sys._Debug.registerClass(\"Sys._Debug\");Sys.Debug=new Sys._Debug;Sys.Debug.isDebug=false;function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if(!a){this.__lowerCaseValues=a={};var g=this.prototype;for(var f in g)a[f.toLowerCase()]=g[f]}}else a=this.prototype;if(!this.__flags){i=e?c.toLowerCase():c;b=a[i.trim()];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c,this.__typeName));return b}else{var h=(e?c.toLowerCase():c).split(\",\"),j=0;for(var d=h.length-1;d>=0;d--){var k=h[d].trim();b=a[k];if(typeof b!==\"number\")throw Error.argument(\"value\",String.format(Sys.Res.enumInvalidValue,c.split(\",\")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c===\"undefined\"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(\", \")}return \"\"}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a===\"undefined\"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!==\"number\")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!==\"number\")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass(\"Sys.CollectionChange\");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum(\"Sys.NotifyCollectionChangedAction\");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass(\"Sys.NotifyCollectionChangedEventArgs\",Sys.EventArgs);Sys.INotifyPropertyChange=function(){};Sys.INotifyPropertyChange.prototype={};Sys.INotifyPropertyChange.registerInterface(\"Sys.INotifyPropertyChange\");Sys.PropertyChangedEventArgs=function(a){Sys.PropertyChangedEventArgs.initializeBase(this);this._propertyName=a};Sys.PropertyChangedEventArgs.prototype={get_propertyName:function(){return this._propertyName}};Sys.PropertyChangedEventArgs.registerClass(\"Sys.PropertyChangedEventArgs\",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass(\"Sys.Observer\");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,\"propertyChanged\",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"propertyChanged\",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,\"\")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(\".\");for(var i=0,m=d.length-1;i<m;i++){var l=d[i];b=a[\"get_\"+l];if(typeof b===\"function\")a=b.call(a);else a=a[l];var n=typeof a;if(a===null||n===\"undefined\")throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath,j))}var e,c=d[m];b=a[\"get_\"+c];f=a[\"set_\"+c];if(typeof b===\"function\")e=b.call(a);else e=a[c];if(typeof f===\"function\")f.call(a,g);else a[c]=g;if(e!==g){var h=Sys.Observer._getContext(k);if(h&&h.updating){h.dirty=true;return}Sys.Observer.raisePropertyChanged(k,d[0])}};Sys.Observer.setValue=function(b,a,c){Sys.Observer._setValue(b,a,c)};Sys.Observer.raisePropertyChanged=function(b,a){Sys.Observer.raiseEvent(b,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))};Sys.Observer.addCollectionChanged=function(b,a){Sys.Observer._addEventHandler(b,\"collectionChanged\",a)};Sys.Observer.removeCollectionChanged=function(b,a){Sys.Observer._removeEventHandler(b,\"collectionChanged\",a)};Sys.Observer._collectionChange=function(d,c){var a=Sys.Observer._getContext(d);if(a&&a.updating){a.dirty=true;var b=a.changes;if(!b)a.changes=b=[c];else b.push(c)}else{Sys.Observer.raiseCollectionChanged(d,[c]);Sys.Observer.raisePropertyChanged(d,\"length\")}};Sys.Observer.add=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[b],a.length);Array.add(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.addRange=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,b,a.length);Array.addRange(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.clear=function(a){var b=Array.clone(a);Array.clear(a);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset,null,-1,b,0))};Sys.Observer.insert=function(a,b,c){Array.insert(a,b,c);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[c],b))};Sys.Observer.remove=function(a,b){var c=Array.indexOf(a,b);if(c!==-1){Array.remove(a,b);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[b],c));return true}return false};Sys.Observer.removeAt=function(b,a){if(a>-1&&a<b.length){var c=b[a];Array.removeAt(b,a);Sys.Observer._collectionChange(b,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[c],a))}};Sys.Observer.raiseCollectionChanged=function(b,a){Sys.Observer.raiseEvent(b,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))};Sys.Observer._observeMethods={add_propertyChanged:function(a){Sys.Observer._addEventHandler(this,\"propertyChanged\",a)},remove_propertyChanged:function(a){Sys.Observer._removeEventHandler(this,\"propertyChanged\",a)},addEventHandler:function(a,b){Sys.Observer._addEventHandler(this,a,b)},removeEventHandler:function(a,b){Sys.Observer._removeEventHandler(this,a,b)},get_isUpdating:function(){return Sys.Observer.isUpdating(this)},beginUpdate:function(){Sys.Observer.beginUpdate(this)},endUpdate:function(){Sys.Observer.endUpdate(this)},setValue:function(b,a){Sys.Observer._setValue(this,b,a)},raiseEvent:function(b,a){Sys.Observer.raiseEvent(this,b,a)},raisePropertyChanged:function(a){Sys.Observer.raiseEvent(this,\"propertyChanged\",new Sys.PropertyChangedEventArgs(a))}};Sys.Observer._arrayMethods={add_collectionChanged:function(a){Sys.Observer._addEventHandler(this,\"collectionChanged\",a)},remove_collectionChanged:function(a){Sys.Observer._removeEventHandler(this,\"collectionChanged\",a)},add:function(a){Sys.Observer.add(this,a)},addRange:function(a){Sys.Observer.addRange(this,a)},clear:function(){Sys.Observer.clear(this)},insert:function(a,b){Sys.Observer.insert(this,a,b)},remove:function(a){return Sys.Observer.remove(this,a)},removeAt:function(a){Sys.Observer.removeAt(this,a)},raiseCollectionChanged:function(a){Sys.Observer.raiseEvent(this,\"collectionChanged\",new Sys.NotifyCollectionChangedEventArgs(a))}};Sys.Observer._getContext=function(b,c){var a=b._observerContext;if(a)return a();if(c)return (b._observerContext=Sys.Observer._createContext())();return null};Sys.Observer._createContext=function(){var a={events:new Sys.EventHandlerList};return function(){return a}};"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxGlobalization.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxGlobalization.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxGlobalization.js\nType._registerScript(\"MicrosoftAjaxGlobalization.js\",[\"MicrosoftAjaxCore.js\"]);Date._appendPreOrPostMatch=function(e,b){var d=0,a=false;for(var c=0,g=e.length;c<g;c++){var f=e.charAt(c);switch(f){case \"'\":if(a)b.append(\"'\");else d++;a=false;break;case \"\\\\\":if(a)b.append(\"\\\\\");a=!a;break;default:b.append(f);a=false}}return d};Date._expandFormat=function(a,b){if(!b)b=\"F\";var c=b.length;if(c===1)switch(b){case \"d\":return a.ShortDatePattern;case \"D\":return a.LongDatePattern;case \"t\":return a.ShortTimePattern;case \"T\":return a.LongTimePattern;case \"f\":return a.LongDatePattern+\" \"+a.ShortTimePattern;case \"F\":return a.FullDateTimePattern;case \"M\":case \"m\":return a.MonthDayPattern;case \"s\":return a.SortableDateTimePattern;case \"Y\":case \"y\":return a.YearMonthPattern;default:throw Error.format(Sys.Res.formatInvalidString)}else if(c===2&&b.charAt(0)===\"%\")b=b.charAt(1);return b};Date._expandYear=function(c,a){var d=new Date,e=Date._getEra(d);if(a<100){var b=Date._getEraYear(d,c,e);a+=b-b%100;if(a>c.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a<f;a+=4){b=c[a+2];if(b===null||d>=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g,\"\\\\\\\\$1\");var a=new Sys.StringBuilder(\"^\"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case \"dddd\":case \"ddd\":case \"MMMM\":case \"MMM\":case \"gg\":case \"g\":a.append(\"(\\\\D+)\");break;case \"tt\":case \"t\":a.append(\"(\\\\D*)\");break;case \"yyyy\":a.append(\"(\\\\d{4})\");break;case \"fff\":a.append(\"(\\\\d{3})\");break;case \"ff\":a.append(\"(\\\\d{2})\");break;case \"f\":a.append(\"(\\\\d)\");break;case \"dd\":case \"d\":case \"MM\":case \"M\":case \"yy\":case \"y\":case \"HH\":case \"H\":case \"hh\":case \"h\":case \"mm\":case \"m\":case \"ss\":case \"s\":a.append(\"(\\\\d\\\\d?)\");break;case \"zzz\":a.append(\"([+-]?\\\\d\\\\d?:\\\\d{2})\");break;case \"zz\":case \"z\":a.append(\"([+-]?\\\\d\\\\d?)\");break;case \"/\":a.append(\"(\\\\\"+b.DateSeparator+\")\")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append(\"$\");var k=a.toString().replace(/\\s+/g,\"\\\\s+\"),g={\"regExp\":k,\"groups\":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a<c;a++){f=i[a];if(f){g=true;b=Date._parseExact(h,f,d);if(b)return b}}if(!g){e=d._getDateTimeFormats();for(a=0,c=e.length;a<c;a++){b=Date._parseExact(h,e[a],d);if(b)return b}}return null};Date._parseExact=function(w,D,k){w=w.trim();var g=k.dateTimeFormat,A=Date._getParseRegExp(g,D),C=(new RegExp(A.regExp)).exec(w);if(C===null)return null;var B=A.groups,x=null,e=null,c=null,j=null,i=null,d=0,h,p=0,q=0,f=0,l=null,v=false;for(var s=0,E=B.length;s<E;s++){var a=C[s+1];if(a)switch(B[s]){case \"dd\":case \"d\":j=parseInt(a,10);if(j<1||j>31)return null;break;case \"MMMM\":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case \"MMM\":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case \"M\":case \"MM\":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case \"y\":case \"yy\":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case \"yyyy\":e=parseInt(a,10);if(e<0||e>9999)return null;break;case \"h\":case \"hh\":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case \"H\":case \"HH\":d=parseInt(a,10);if(d<0||d>23)return null;break;case \"m\":case \"mm\":p=parseInt(a,10);if(p<0||p>59)return null;break;case \"s\":case \"ss\":q=parseInt(a,10);if(q<0||q>59)return null;break;case \"tt\":case \"t\":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case \"f\":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case \"ff\":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case \"fff\":f=parseInt(a,10);if(f<0||f>999)return null;break;case \"dddd\":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case \"ddd\":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case \"zzz\":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var m=parseInt(u[1],10);if(m<0||m>59)return null;l=h*60+(a.startsWith(\"-\")?-m:m);break;case \"z\":case \"zz\":h=parseInt(a,10);if(h<-12||h>13)return null;l=h*60;break;case \"g\":case \"gg\":var o=a;if(!o||!g.eras)return null;o=o.toLowerCase().trim();for(var r=0,F=g.eras.length;r<F;r+=4)if(o===g.eras[r+1].toLowerCase()){x=r;break}if(x===null)return null}}var b=new Date,t,n=g.Calendar.convert;if(n)t=n.fromGregorian(b)[0];else t=b.getFullYear();if(e===null)e=t;else if(g.eras)e+=g.eras[(x||0)+3];if(c===null)c=0;if(j===null)j=1;if(n){b=n.toGregorian(e,c,j);if(b===null)return null}else{b.setFullYear(e,c,j);if(b.getDate()!==j)return null;if(i!==null&&b.getDay()!==i)return null}if(v&&d<12)d+=12;b.setHours(d,p,q,f);if(l!==null){var y=b.getMinutes()-(l+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(y/60,10),y%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,j){var b=j.dateTimeFormat,n=b.Calendar.convert;if(!e||!e.length||e===\"i\")if(j&&j.name.length)if(n)return this._toFormattedString(b.FullDateTimePattern,j);else{var r=new Date(this.getTime()),x=Date._getEra(this,b.eras);r.setFullYear(Date._getEraYear(this,b,x));return r.toLocaleString()}else return this.toString();var l=b.eras,k=e===\"s\";e=Date._expandFormat(b,e);var a=new Sys.StringBuilder,c;function d(a){if(a<10)return \"0\"+a;return a.toString()}function m(a){if(a<10)return \"00\"+a;if(a<100)return \"0\"+a;return a.toString()}function v(a){if(a<10)return \"000\"+a;else if(a<100)return \"00\"+a;else if(a<1000)return \"0\"+a;return a.toString()}var h,p,t=/([^d]|^)(d|dd)([^d]|$)/g;function s(){if(h||p)return h;h=t.test(e);p=true;return h}var q=0,o=Date._getTokenRegExp(),f;if(!k&&n)f=n.fromGregorian(this);for(;true;){var w=o.lastIndex,i=o.exec(e),u=e.slice(w,i?i.index:e.length);q+=Date._appendPreOrPostMatch(u,a);if(!i)break;if(q%2===1){a.append(i[0]);continue}function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear();case 1:return a.getMonth();case 2:return a.getDate()}}switch(i[0]){case \"dddd\":a.append(b.DayNames[this.getDay()]);break;case \"ddd\":a.append(b.AbbreviatedDayNames[this.getDay()]);break;case \"dd\":h=true;a.append(d(g(this,2)));break;case \"d\":h=true;a.append(g(this,2));break;case \"MMMM\":a.append(b.MonthGenitiveNames&&s()?b.MonthGenitiveNames[g(this,1)]:b.MonthNames[g(this,1)]);break;case \"MMM\":a.append(b.AbbreviatedMonthGenitiveNames&&s()?b.AbbreviatedMonthGenitiveNames[g(this,1)]:b.AbbreviatedMonthNames[g(this,1)]);break;case \"MM\":a.append(d(g(this,1)+1));break;case \"M\":a.append(g(this,1)+1);break;case \"yyyy\":a.append(v(f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k)));break;case \"yy\":a.append(d((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100));break;case \"y\":a.append((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100);break;case \"hh\":c=this.getHours()%12;if(c===0)c=12;a.append(d(c));break;case \"h\":c=this.getHours()%12;if(c===0)c=12;a.append(c);break;case \"HH\":a.append(d(this.getHours()));break;case \"H\":a.append(this.getHours());break;case \"mm\":a.append(d(this.getMinutes()));break;case \"m\":a.append(this.getMinutes());break;case \"ss\":a.append(d(this.getSeconds()));break;case \"s\":a.append(this.getSeconds());break;case \"tt\":a.append(this.getHours()<12?b.AMDesignator:b.PMDesignator);break;case \"t\":a.append((this.getHours()<12?b.AMDesignator:b.PMDesignator).charAt(0));break;case \"f\":a.append(m(this.getMilliseconds()).charAt(0));break;case \"ff\":a.append(m(this.getMilliseconds()).substr(0,2));break;case \"fff\":a.append(m(this.getMilliseconds()));break;case \"z\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+Math.floor(Math.abs(c)));break;case \"zz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c))));break;case \"zzz\":c=this.getTimezoneOffset()/60;a.append((c<=0?\"+\":\"-\")+d(Math.floor(Math.abs(c)))+\":\"+d(Math.abs(this.getTimezoneOffset()%60)));break;case \"g\":case \"gg\":if(b.eras)a.append(b.eras[Date._getEra(this,l)+1]);break;case \"/\":a.append(b.DateSeparator)}}return a.toString()};String.localeFormat=function(){return String._toFormattedString(true,arguments)};Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===\"\"&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h===\"\")h=\"+\";var j,d,f=e.indexOf(\"e\");if(f<0)f=e.indexOf(\"E\");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join(\"\");var n=a.NumberGroupSeparator.replace(/\\u00A0/g,\" \");if(a.NumberGroupSeparator!==n)c=c.split(n).join(\"\");var l=h+c;if(k!==null)l+=\".\"+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]===\"\")i[0]=\"+\";l+=\"e\"+i[0]+i[1]}if(l.match(/^[+-]?\\d*\\.?\\d*(e[+-]?\\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=\" \"+b;c=\" \"+c;case 3:if(a.endsWith(b))return [\"-\",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return [\"+\",a.substr(0,a.length-c.length)];break;case 2:b+=\" \";c+=\" \";case 1:if(a.startsWith(b))return [\"-\",a.substr(b.length)];else if(a.startsWith(c))return [\"+\",a.substr(c.length)];break;case 0:if(a.startsWith(\"(\")&&a.endsWith(\")\"))return [\"-\",a.substr(1,a.length-2)]}return [\"\",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(e,j){if(!e||e.length===0||e===\"i\")if(j&&j.name.length>0)return this.toLocaleString();else return this.toString();var o=[\"n %\",\"n%\",\"%n\"],n=[\"-n %\",\"-n%\",\"-%n\"],p=[\"(n)\",\"-n\",\"- n\",\"n-\",\"n -\"],m=[\"$n\",\"n$\",\"$ n\",\"n $\"],l=[\"($n)\",\"-$n\",\"$-n\",\"$n-\",\"(n$)\",\"-n$\",\"n-$\",\"n$-\",\"-n $\",\"-$ n\",\"n $-\",\"$ n-\",\"$ -n\",\"n- $\",\"($ n)\",\"(n $)\"];function g(a,c,d){for(var b=a.length;b<c;b++)a=d?\"0\"+a:a+\"0\";return a}function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/o;if(!isFinite(m))m=j;j=m;var b=j.toString(),a=\"\",c,e=b.split(/e/i);b=e[0];c=e.length>1?parseInt(e[1]):0;e=b.split(\".\");b=e[0];a=e.length>1?e[1]:\"\";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a=\"\";var d=b.length-1,f=\"\";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k<l.length){h=l[k];k++}}return b.slice(0,d+1)+n+f+a}var a=j.numberFormat,d=Math.abs(this);if(!e)e=\"D\";var b=-1;if(e.length>1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case \"d\":case \"D\":c=\"n\";if(b!==-1)d=g(\"\"+d,b,true);if(this<0)d=-d;break;case \"c\":case \"C\":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case \"n\":case \"N\":if(this<0)c=p[a.NumberNegativePattern];else c=\"n\";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case \"p\":case \"P\":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\\$|-|%/g,f=\"\";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case \"n\":f+=d;break;case \"$\":f+=a.CurrencySymbol;break;case \"-\":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case \"%\":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a<d;a++)b[a]=this._toUpper(c[a]);return b},_toUpper:function(a){return a.split(\"\\u00a0\").join(\" \").toUpperCase()}};Sys.CultureInfo.registerClass(\"Sys.CultureInfo\");Sys.CultureInfo._parse=function(a){var b=a.dateTimeFormat;if(b&&!b.eras)b.eras=a.eras;return new Sys.CultureInfo(a.name,a.numberFormat,b)};Sys.CultureInfo.InvariantCulture=Sys.CultureInfo._parse({\"name\":\"\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":true,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"\\u00a4\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":true},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, dd MMMM yyyy HH:mm:ss\",\"LongDatePattern\":\"dddd, dd MMMM yyyy\",\"LongTimePattern\":\"HH:mm:ss\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"MM/dd/yyyy\",\"ShortTimePattern\":\"HH:mm\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"yyyy MMMM\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":true,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});if(typeof __cultureInfo===\"object\"){Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse(__cultureInfo);delete __cultureInfo}else Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse({\"name\":\"en-US\",\"numberFormat\":{\"CurrencyDecimalDigits\":2,\"CurrencyDecimalSeparator\":\".\",\"IsReadOnly\":false,\"CurrencyGroupSizes\":[3],\"NumberGroupSizes\":[3],\"PercentGroupSizes\":[3],\"CurrencyGroupSeparator\":\",\",\"CurrencySymbol\":\"$\",\"NaNSymbol\":\"NaN\",\"CurrencyNegativePattern\":0,\"NumberNegativePattern\":1,\"PercentPositivePattern\":0,\"PercentNegativePattern\":0,\"NegativeInfinitySymbol\":\"-Infinity\",\"NegativeSign\":\"-\",\"NumberDecimalDigits\":2,\"NumberDecimalSeparator\":\".\",\"NumberGroupSeparator\":\",\",\"CurrencyPositivePattern\":0,\"PositiveInfinitySymbol\":\"Infinity\",\"PositiveSign\":\"+\",\"PercentDecimalDigits\":2,\"PercentDecimalSeparator\":\".\",\"PercentGroupSeparator\":\",\",\"PercentSymbol\":\"%\",\"PerMilleSymbol\":\"\\u2030\",\"NativeDigits\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],\"DigitSubstitution\":1},\"dateTimeFormat\":{\"AMDesignator\":\"AM\",\"Calendar\":{\"MinSupportedDateTime\":\"@-62135568000000@\",\"MaxSupportedDateTime\":\"@253402300799999@\",\"AlgorithmType\":1,\"CalendarType\":1,\"Eras\":[1],\"TwoDigitYearMax\":2029,\"IsReadOnly\":false},\"DateSeparator\":\"/\",\"FirstDayOfWeek\":0,\"CalendarWeekRule\":0,\"FullDateTimePattern\":\"dddd, MMMM dd, yyyy h:mm:ss tt\",\"LongDatePattern\":\"dddd, MMMM dd, yyyy\",\"LongTimePattern\":\"h:mm:ss tt\",\"MonthDayPattern\":\"MMMM dd\",\"PMDesignator\":\"PM\",\"RFC1123Pattern\":\"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'\",\"ShortDatePattern\":\"M/d/yyyy\",\"ShortTimePattern\":\"h:mm tt\",\"SortableDateTimePattern\":\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\"TimeSeparator\":\":\",\"UniversalSortableDateTimePattern\":\"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\"YearMonthPattern\":\"MMMM, yyyy\",\"AbbreviatedDayNames\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"ShortestDayNames\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"DayNames\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"AbbreviatedMonthNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],\"IsReadOnly\":false,\"NativeCalendarName\":\"Gregorian Calendar\",\"AbbreviatedMonthGenitiveNames\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"],\"MonthGenitiveNames\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"]},\"eras\":[1,\"A.D.\",null,0]});"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxHistory.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxHistory.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxHistory.js\nType._registerScript(\"MicrosoftAjaxHistory.js\",[\"MicrosoftAjaxComponentModel.js\",\"MicrosoftAjaxSerialization.js\"]);Sys.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass(\"Sys.HistoryEventArgs\",Sys.EventArgs);Sys.Application._appLoadHandler=null;Sys.Application._beginRequestHandler=null;Sys.Application._clientId=null;Sys.Application._currentEntry=\"\";Sys.Application._endRequestHandler=null;Sys.Application._history=null;Sys.Application._enableHistory=false;Sys.Application._historyFrame=null;Sys.Application._historyInitialized=false;Sys.Application._historyPointIsNew=false;Sys.Application._ignoreTimer=false;Sys.Application._initialState=null;Sys.Application._state={};Sys.Application._timerCookie=0;Sys.Application._timerHandler=null;Sys.Application._uniqueId=null;Sys._Application.prototype.get_stateString=function(){var a=null;if(Sys.Browser.agent===Sys.Browser.Firefox){var c=window.location.href,b=c.indexOf(\"#\");if(b!==-1)a=c.substring(b+1);else a=\"\";return a}else a=window.location.hash;if(a.length>0&&a.charAt(0)===\"#\")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler(\"navigate\",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler(\"navigate\",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!==\"undefined\")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||\"\";var b=a.indexOf(\"&&\");if(b!==-1&&b+2<a.length){e.__s=a.substr(b+2);a=a.substr(0,b)}var g=a.split(\"&\");for(var f=0,j=g.length;f<j;f++){var d=g[f],c=d.indexOf(\"=\");if(c!==-1&&c+1<d.length){var i=d.substr(0,c),h=d.substr(c+1);e[i]=decodeURIComponent(h)}}return e};Sys._Application.prototype._enableHistoryInScriptManager=function(){this._enableHistory=true};Sys._Application.prototype._ensureHistory=function(){if(!this._historyInitialized&&this._enableHistory){if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&document.documentMode<8){this._historyFrame=document.getElementById(\"__historyFrame\");this._ignoreIFrame=true}this._timerHandler=Function.createDelegate(this,this._onIdle);this._timerCookie=window.setTimeout(this._timerHandler,100);try{this._initialState=this._deserializeState(this.get_stateString())}catch(a){}this._historyInitialized=true}};Sys._Application.prototype._navigate=function(c){this._ensureHistory();var b=this._deserializeState(c);if(this._uniqueId){var d=this._state.__s||\"\",a=b.__s||\"\";if(a!==d){this._updateHiddenField(a);__doPostBack(this._uniqueId,a);this._state=b;return}}this._setState(c);this._state=b;this._raiseNavigate()};Sys._Application.prototype._onIdle=function(){delete this._timerCookie;var a=this.get_stateString();if(a!==this._currentEntry){if(!this._ignoreTimer){this._historyPointIsNew=false;this._navigate(a)}}else this._ignoreTimer=false;this._timerCookie=window.setTimeout(this._timerHandler,100)};Sys._Application.prototype._onIFrameLoad=function(a){if(document.documentMode<8){this._ensureHistory();if(!this._ignoreIFrame){this._historyPointIsNew=false;this._navigate(a)}this._ignoreIFrame=false}};Sys._Application.prototype._onPageRequestManagerBeginRequest=function(){this._ignoreTimer=true;this._originalTitle=document.title};Sys._Application.prototype._onPageRequestManagerEndRequest=function(g,f){var d=f.get_dataItems()[this._clientId],c=this._originalTitle;this._originalTitle=null;var b=document.getElementById(\"__EVENTTARGET\");if(b&&b.value===this._uniqueId)b.value=\"\";if(typeof d!==\"undefined\"){this.setServerState(d);this._historyPointIsNew=true}else this._ignoreTimer=false;var a=this._serializeState(this._state);if(a!==this._currentEntry){this._ignoreTimer=true;if(typeof c===\"string\"){if(Sys.Browser.agent!==Sys.Browser.InternetExplorer||Sys.Browser.version>7){var e=document.title;document.title=c;this._setState(a);document.title=e}else this._setState(a);this._raiseNavigate()}else{this._setState(a);this._raiseNavigate()}}};Sys._Application.prototype._raiseNavigate=function(){var d=this._historyPointIsNew,c=this.get_events().getHandler(\"navigate\"),b={};for(var a in this._state)if(a!==\"__s\")b[a]=this._state[a];var e=new Sys.HistoryEventArgs(b);if(c)c(this,e);if(!d){var f;try{if(Sys.Browser.agent===Sys.Browser.Firefox&&window.location.hash&&(!window.frameElement||window.top.location.hash))Sys.Browser.version<3.5?window.history.go(0):(location.hash=this.get_stateString())}catch(g){}}};Sys._Application.prototype._serializeState=function(d){var b=[];for(var a in d){var e=d[a];if(a===\"__s\")var c=e;else b[b.length]=a+\"=\"+encodeURIComponent(e)}return b.join(\"&\")+(c?\"&&\"+c:\"\")};Sys._Application.prototype._setState=function(a,b){if(this._enableHistory){a=a||\"\";if(a!==this._currentEntry){if(window.theForm){var d=window.theForm.action,e=d.indexOf(\"#\");window.theForm.action=(e!==-1?d.substring(0,e):d)+\"#\"+a}if(this._historyFrame&&this._historyPointIsNew){var f=document.createElement(\"div\");f.appendChild(document.createTextNode(b||document.title));var g=f.innerHTML;this._ignoreIFrame=true;var c=this._historyFrame.contentWindow.document;c.open(\"javascript:'<html></html>'\");c.write(\"<html><head><title>\"+g+\"</title><scri\"+'pt type=\"text/javascript\">parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+\");</scri\"+\"pt></head><body></body></html>\");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var h=this.get_stateString();if(a!==h){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!==\"undefined\"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxNetwork.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxNetwork.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxNetwork.js\nType._registerScript(\"MicrosoftAjaxNetwork.js\",[\"MicrosoftAjaxSerialization.js\"]);if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=[\"Msxml2.XMLHTTP.3.0\",\"Msxml2.XMLHTTP\"];for(var a=0,c=b.length;a<c;a++)try{return new ActiveXObject(b[a])}catch(d){}return null};Type.registerNamespace(\"Sys.Net\");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass(\"Sys.Net.WebRequestExecutor\");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=[\"Msxml2.DOMDocument.3.0\",\"Msxml2.DOMDocument\"];for(var b=0,f=c.length;b<f;b++)try{var a=new ActiveXObject(c[b]);a.async=false;a.loadXML(d);a.setProperty(\"SelectionLanguage\",\"XPath\");return a}catch(g){}}else try{var e=new window.DOMParser;return e.parseFromString(d,\"text/xml\")}catch(g){}return null};Sys.Net.XMLHttpExecutor=function(){Sys.Net.XMLHttpExecutor.initializeBase(this);var a=this;this._xmlHttpRequest=null;this._webRequest=null;this._responseAvailable=false;this._timedOut=false;this._timer=null;this._aborted=false;this._started=false;this._onReadyStateChange=function(){if(a._xmlHttpRequest.readyState===4){try{if(typeof a._xmlHttpRequest.status===\"undefined\")return}catch(b){return}a._clearTimer();a._responseAvailable=true;try{a._webRequest.completed(Sys.EventArgs.Empty)}finally{if(a._xmlHttpRequest!=null){a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest=null}}}};this._clearTimer=function(){if(a._timer!=null){window.clearTimeout(a._timer);a._timer=null}};this._onTimeout=function(){if(!a._responseAvailable){a._clearTimer();a._timedOut=true;a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest.abort();a._webRequest.completed(Sys.EventArgs.Empty);a._xmlHttpRequest=null}}};Sys.Net.XMLHttpExecutor.prototype={get_timedOut:function(){return this._timedOut},get_started:function(){return this._started},get_responseAvailable:function(){return this._responseAvailable},get_aborted:function(){return this._aborted},executeRequest:function(){this._webRequest=this.get_webRequest();var c=this._webRequest.get_body(),a=this._webRequest.get_headers();this._xmlHttpRequest=new XMLHttpRequest;this._xmlHttpRequest.onreadystatechange=this._onReadyStateChange;var e=this._webRequest.get_httpVerb();this._xmlHttpRequest.open(e,this._webRequest.getResolvedUrl(),true);this._xmlHttpRequest.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");if(a)for(var b in a){var f=a[b];if(typeof f!==\"function\")this._xmlHttpRequest.setRequestHeader(b,f)}if(e.toLowerCase()===\"post\"){if(a===null||!a[\"Content-Type\"])this._xmlHttpRequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=utf-8\");if(!c)c=\"\"}var d=this._webRequest.get_timeout();if(d>0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a=\"\";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf(\"MSIE\")!==-1&&typeof a.setProperty!=\"undefined\")a.setProperty(\"SelectionLanguage\",\"XPath\");if(a.documentElement.namespaceURI===\"http://www.mozilla.org/newlayout/xml/parsererror.xml\"&&a.documentElement.tagName===\"parsererror\")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName===\"parsererror\")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass(\"Sys.Net.XMLHttpExecutor\",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType=\"Sys.Net.XMLHttpExecutor\"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler(\"invokingRequest\",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler(\"invokingRequest\",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler(\"completedRequest\",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler(\"completedRequest\",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler(\"invokingRequest\");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass(\"Sys.Net._WebRequestManager\");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass(\"Sys.Net.NetworkRequestEventArgs\",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url=\"\";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler(\"completed\",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler(\"completed\",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler(\"completedRequest\");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler(\"completed\");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return \"GET\";return \"POST\"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf(\"://\")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName(\"base\")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf(\"?\");if(c!==-1)a=a.substr(0,c);c=a.indexOf(\"#\");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf(\"/\")+1);if(!b||b.length===0)return a;if(b.charAt(0)===\"/\"){var e=a.indexOf(\"://\"),g=a.indexOf(\"/\",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf(\"/\");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e===\"function\")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append(\"&\");a.append(d);a.append(\"=\");a.append(b(g))}if(f){if(h)a.append(\"&\");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf(\"?\")>=0?\"&\":\"?\")+d:a};Sys.Net.WebRequest.registerClass(\"Sys.Net.WebRequest\");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){if(this._ensureReadyStateLoaded())this._executeInternal()},_executeInternal:function(){this._addScriptElementHandlers();document.getElementsByTagName(\"head\")[0].appendChild(this._scriptElement)},_ensureReadyStateLoaded:function(){if(this._useReadyState()&&this._scriptElement.readyState!==\"loaded\"&&this._scriptElement.readyState!==\"complete\"){this._scriptDownloadDelegate=Function.createDelegate(this,this._executeInternal);$addHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);return false}return true},_addScriptElementHandlers:function(){if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(this._useReadyState())$addHandler(this._scriptElement,\"readystatechange\",this._scriptLoadDelegate);else $addHandler(this._scriptElement,\"load\",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener(\"error\",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,\"readystatechange\",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}if(this._useReadyState()&&this._scriptLoadDelegate)$removeHandler(a,\"readystatechange\",this._scriptLoadDelegate);else $removeHandler(a,\"load\",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener(\"error\",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(this._useReadyState()&&a.readyState!==\"complete\")return;this._completedCallback(a,true)},_useReadyState:function(){return Sys.Browser.agent===Sys.Browser.InternetExplorer&&(Sys.Browser.version<9||(document.documentMode||0)<9)}};Sys._ScriptLoaderTask.registerClass(\"Sys._ScriptLoaderTask\",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug&&a.parentNode)a.parentNode.removeChild(a)};"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxSerialization.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxSerialization.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxSerialization.js\nType._registerScript(\"MicrosoftAjaxSerialization.js\",[\"MicrosoftAjaxCore.js\"]);Type.registerNamespace(\"Sys.Serialization\");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass(\"Sys.Serialization.JavaScriptSerializer\");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\\\\\])\\\\\"\\\\\\\\/Date\\\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\\\+|-)[0-9]{4})?\\\\)\\\\\\\\/\\\\\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"i\");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('[\"\\\\\\\\\\\\x00-\\\\x1F]',\"g\");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp(\"[^,:{}\\\\[\\\\]0-9.\\\\-+Eaeflnr-u \\\\n\\\\r\\\\t]\",\"g\");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('\"(\\\\\\\\.|[^\"\\\\\\\\])*\"',\"g\");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName=\"__type\";Sys.Serialization.JavaScriptSerializer._init=function(){var c=[\"\\\\u0000\",\"\\\\u0001\",\"\\\\u0002\",\"\\\\u0003\",\"\\\\u0004\",\"\\\\u0005\",\"\\\\u0006\",\"\\\\u0007\",\"\\\\b\",\"\\\\t\",\"\\\\n\",\"\\\\u000b\",\"\\\\f\",\"\\\\r\",\"\\\\u000e\",\"\\\\u000f\",\"\\\\u0010\",\"\\\\u0011\",\"\\\\u0012\",\"\\\\u0013\",\"\\\\u0014\",\"\\\\u0015\",\"\\\\u0016\",\"\\\\u0017\",\"\\\\u0018\",\"\\\\u0019\",\"\\\\u001a\",\"\\\\u001b\",\"\\\\u001c\",\"\\\\u001d\",\"\\\\u001e\",\"\\\\u001f\"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]=\"\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[\"\\\\\"]=new RegExp(\"\\\\\\\\\",\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[\"\\\\\"]=\"\\\\\\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='\"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\"']=new RegExp('\"',\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars['\"']='\\\\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,\"g\");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('\"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('\"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case \"object\":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append(\"[\");for(c=0;c<b.length;++c){if(c>0)a.append(\",\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append(\"]\")}else{if(Date.isInstanceOfType(b)){a.append('\"\\\\/Date(');a.append(b.getTime());a.append(')\\\\/\"');break}var d=[],f=0;for(var e in b){if(e.startsWith(\"$\"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append(\"{\");var j=false;for(c=0;c<f;c++){var h=b[d[c]];if(typeof h!==\"undefined\"&&typeof h!==\"function\"){if(j)a.append(\",\");else j=true;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(d[c],a,i,g);a.append(\":\");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(h,a,i,g)}}a.append(\"}\")}else a.append(\"null\");break;case \"number\":Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);break;case \"string\":Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);break;case \"boolean\":Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);break;default:a.append(\"null\")}};Sys.Serialization.JavaScriptSerializer.serialize=function(b){var a=new Sys.StringBuilder;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b,a,false);return a.toString()};Sys.Serialization.JavaScriptSerializer.deserialize=function(data,secure){if(data.length===0)throw Error.argument(\"data\",Sys.Res.cannotDeserializeEmptyString);try{var exp=data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx,\"$1new Date($2)\");if(secure&&Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx,\"\")))throw null;return eval(\"(\"+exp+\")\")}catch(a){throw Error.argument(\"data\",Sys.Res.cannotDeserializeInvalidJson)}};"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxTimer.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxTimer.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxTimer.js\nType._registerScript(\"Timer.js\",[\"MicrosoftAjaxComponentModel.js\"]);Sys.UI._Timer=function(a){Sys.UI._Timer.initializeBase(this,[a]);this._interval=60000;this._enabled=true;this._postbackPending=false;this._raiseTickDelegate=null;this._endRequestHandlerDelegate=null;this._timer=null;this._pageRequestManager=null;this._uniqueID=null};Sys.UI._Timer.prototype={get_enabled:function(){return this._enabled},set_enabled:function(a){this._enabled=a},get_interval:function(){return this._interval},set_interval:function(a){this._interval=a},get_uniqueID:function(){return this._uniqueID},set_uniqueID:function(a){this._uniqueID=a},dispose:function(){this._stopTimer();if(this._pageRequestManager!==null)this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);Sys.UI._Timer.callBaseMethod(this,\"dispose\")},_doPostback:function(){__doPostBack(this.get_uniqueID(),\"\")},_handleEndRequest:function(c,b){var a=b.get_dataItems()[this.get_id()];if(a)this._update(a[0],a[1]);if(this._postbackPending===true&&this._pageRequestManager!==null&&this._pageRequestManager.get_isInAsyncPostBack()===false){this._postbackPending=false;this._doPostback()}},initialize:function(){Sys.UI._Timer.callBaseMethod(this,\"initialize\");this._raiseTickDelegate=Function.createDelegate(this,this._raiseTick);this._endRequestHandlerDelegate=Function.createDelegate(this,this._handleEndRequest);if(Sys.WebForms&&Sys.WebForms.PageRequestManager)this._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(this._pageRequestManager!==null)this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate);if(this.get_enabled())this._startTimer()},_raiseTick:function(){this._startTimer();if(this._pageRequestManager===null||!this._pageRequestManager.get_isInAsyncPostBack()){this._doPostback();this._postbackPending=false}else this._postbackPending=true},_startTimer:function(){this._timer=window.setTimeout(Function.createDelegate(this,this._raiseTick),this.get_interval())},_stopTimer:function(){if(this._timer!==null){window.clearTimeout(this._timer);this._timer=null}},_update:function(c,b){var a=!this.get_enabled(),d=this.get_interval()!==b;if(!a&&(!c||d)){this._stopTimer();a=true}this.set_enabled(c);this.set_interval(b);if(this.get_enabled()&&a)this._startTimer()}};Sys.UI._Timer.registerClass(\"Sys.UI._Timer\",Sys.UI.Control);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxWebForms.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxWebForms.js\nType._registerScript(\"MicrosoftAjaxWebForms.js\",[\"MicrosoftAjaxCore.js\",\"MicrosoftAjaxSerialization.js\",\"MicrosoftAjaxNetwork.js\",\"MicrosoftAjaxComponentModel.js\"]);Type.registerNamespace(\"Sys.WebForms\");Sys.WebForms.BeginRequestEventArgs=function(c,b,a){Sys.WebForms.BeginRequestEventArgs.initializeBase(this);this._request=c;this._postBackElement=b;this._updatePanelsToUpdate=a};Sys.WebForms.BeginRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request},get_updatePanelsToUpdate:function(){return this._updatePanelsToUpdate?Array.clone(this._updatePanelsToUpdate):[]}};Sys.WebForms.BeginRequestEventArgs.registerClass(\"Sys.WebForms.BeginRequestEventArgs\",Sys.EventArgs);Sys.WebForms.EndRequestEventArgs=function(c,a,b){Sys.WebForms.EndRequestEventArgs.initializeBase(this);this._errorHandled=false;this._error=c;this._dataItems=a||{};this._response=b};Sys.WebForms.EndRequestEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_error:function(){return this._error},get_errorHandled:function(){return this._errorHandled},set_errorHandled:function(a){this._errorHandled=a},get_response:function(){return this._response}};Sys.WebForms.EndRequestEventArgs.registerClass(\"Sys.WebForms.EndRequestEventArgs\",Sys.EventArgs);Sys.WebForms.InitializeRequestEventArgs=function(c,b,a){Sys.WebForms.InitializeRequestEventArgs.initializeBase(this);this._request=c;this._postBackElement=b;this._updatePanelsToUpdate=a};Sys.WebForms.InitializeRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request},get_updatePanelsToUpdate:function(){return this._updatePanelsToUpdate?Array.clone(this._updatePanelsToUpdate):[]},set_updatePanelsToUpdate:function(a){this._updated=true;this._updatePanelsToUpdate=a}};Sys.WebForms.InitializeRequestEventArgs.registerClass(\"Sys.WebForms.InitializeRequestEventArgs\",Sys.CancelEventArgs);Sys.WebForms.PageLoadedEventArgs=function(b,a,c){Sys.WebForms.PageLoadedEventArgs.initializeBase(this);this._panelsUpdated=b;this._panelsCreated=a;this._dataItems=c||{}};Sys.WebForms.PageLoadedEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsCreated:function(){return this._panelsCreated},get_panelsUpdated:function(){return this._panelsUpdated}};Sys.WebForms.PageLoadedEventArgs.registerClass(\"Sys.WebForms.PageLoadedEventArgs\",Sys.EventArgs);Sys.WebForms.PageLoadingEventArgs=function(b,a,c){Sys.WebForms.PageLoadingEventArgs.initializeBase(this);this._panelsUpdating=b;this._panelsDeleting=a;this._dataItems=c||{}};Sys.WebForms.PageLoadingEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsDeleting:function(){return this._panelsDeleting},get_panelsUpdating:function(){return this._panelsUpdating}};Sys.WebForms.PageLoadingEventArgs.registerClass(\"Sys.WebForms.PageLoadingEventArgs\",Sys.EventArgs);Sys._ScriptLoader=function(){this._scriptsToLoad=null;this._sessions=[];this._scriptLoadedDelegate=Function.createDelegate(this,this._scriptLoadedHandler)};Sys._ScriptLoader.prototype={dispose:function(){this._stopSession();this._loading=false;if(this._events)delete this._events;this._sessions=null;this._currentSession=null;this._scriptLoadedDelegate=null},loadScripts:function(d,b,c,a){var e={allScriptsLoadedCallback:b,scriptLoadFailedCallback:c,scriptLoadTimeoutCallback:a,scriptsToLoad:this._scriptsToLoad,scriptTimeout:d};this._scriptsToLoad=null;this._sessions[this._sessions.length]=e;if(!this._loading)this._nextSession()},queueCustomScriptTag:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,a)},queueScriptBlock:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{text:a})},queueScriptReference:function(a,b){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{src:a,fallback:b})},_createScriptElement:function(c){var a=document.createElement(\"script\");a.type=\"text/javascript\";for(var b in c)a[b]=c[b];return a},_loadScriptsInternal:function(){var c=this._currentSession;if(c.scriptsToLoad&&c.scriptsToLoad.length>0){var b=Array.dequeue(c.scriptsToLoad),f=this._scriptLoadedDelegate;if(b.fallback){var g=b.fallback;delete b.fallback;var d=this;f=function(b,a){a||function(){var a=d._createScriptElement({src:g});d._currentTask=new Sys._ScriptLoaderTask(a,d._scriptLoadedDelegate);d._currentTask.execute()}()}}var a=this._createScriptElement(b);if(a.text&&Sys.Browser.agent===Sys.Browser.Safari){a.innerHTML=a.text;delete a.text}if(typeof b.src===\"string\"){this._currentTask=new Sys._ScriptLoaderTask(a,f);this._currentTask.execute()}else{document.getElementsByTagName(\"head\")[0].appendChild(a);Sys._ScriptLoaderTask._clearScript(a);this._loadScriptsInternal()}}else{this._stopSession();var e=c.allScriptsLoadedCallback;if(e)e(this);this._nextSession()}},_nextSession:function(){if(this._sessions.length===0){this._loading=false;this._currentSession=null;return}this._loading=true;var a=Array.dequeue(this._sessions);this._currentSession=a;if(a.scriptTimeout>0)this._timeoutCookie=window.setTimeout(Function.createDelegate(this,this._scriptLoadTimeoutHandler),a.scriptTimeout*1000);this._loadScriptsInternal()},_raiseError:function(){var b=this._currentSession.scriptLoadFailedCallback,a=this._currentTask.get_scriptElement();this._stopSession();if(b){b(this,a);this._nextSession()}else{this._loading=false;throw Sys._ScriptLoader._errorScriptLoadFailed(a.src)}},_scriptLoadedHandler:function(a,b){if(b){Array.add(Sys._ScriptLoader._getLoadedScripts(),a.src);this._currentTask.dispose();this._currentTask=null;this._loadScriptsInternal()}else this._raiseError()},_scriptLoadTimeoutHandler:function(){var a=this._currentSession.scriptLoadTimeoutCallback;this._stopSession();if(a)a(this);this._nextSession()},_stopSession:function(){if(this._timeoutCookie){window.clearTimeout(this._timeoutCookie);this._timeoutCookie=null}if(this._currentTask){this._currentTask.dispose();this._currentTask=null}}};Sys._ScriptLoader.registerClass(\"Sys._ScriptLoader\",null,Sys.IDisposable);Sys._ScriptLoader.getInstance=function(){var a=Sys._ScriptLoader._activeInstance;if(!a)a=Sys._ScriptLoader._activeInstance=new Sys._ScriptLoader;return a};Sys._ScriptLoader.isScriptLoaded=function(b){var a=document.createElement(\"script\");a.src=b;return Array.contains(Sys._ScriptLoader._getLoadedScripts(),a.src)};Sys._ScriptLoader.readLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){var c=Sys._ScriptLoader._referencedScripts=[],d=document.getElementsByTagName(\"script\");for(var b=d.length-1;b>=0;b--){var e=d[b],a=e.src;if(a.length)if(!Array.contains(c,a))Array.add(c,a)}}};Sys._ScriptLoader._errorScriptLoadFailed=function(b){var a;a=Sys.Res.scriptLoadFailed;var d=\"Sys.ScriptLoadFailedException: \"+String.format(a,b),c=Error.create(d,{name:\"Sys.ScriptLoadFailedException\",\"scriptUrl\":b});c.popStackFrame();return c};Sys._ScriptLoader._getLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){Sys._ScriptLoader._referencedScripts=[];Sys._ScriptLoader.readLoadedScripts()}return Sys._ScriptLoader._referencedScripts};Sys.WebForms.PageRequestManager=function(){this._form=null;this._activeDefaultButton=null;this._activeDefaultButtonClicked=false;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._updatePanelHasChildrenAsTriggers=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._scriptManagerID=null;this._pageLoadedHandler=null;this._additionalInput=null;this._onsubmit=null;this._onSubmitStatements=[];this._originalDoPostBack=null;this._originalDoPostBackWithOptions=null;this._originalFireDefaultButton=null;this._originalDoCallback=null;this._isCrossPost=false;this._postBackSettings=null;this._request=null;this._onFormSubmitHandler=null;this._onFormElementClickHandler=null;this._onWindowUnloadHandler=null;this._asyncPostBackTimeout=null;this._controlIDToFocus=null;this._scrollPosition=null;this._processingRequest=false;this._scriptDisposes={};this._transientFields=[\"__VIEWSTATEENCRYPTED\",\"__VIEWSTATEFIELDCOUNT\"];this._textTypes=/^(text|password|hidden|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i};Sys.WebForms.PageRequestManager.prototype={_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_isInAsyncPostBack:function(){return this._request!==null},add_beginRequest:function(a){this._get_eventHandlerList().addHandler(\"beginRequest\",a)},remove_beginRequest:function(a){this._get_eventHandlerList().removeHandler(\"beginRequest\",a)},add_endRequest:function(a){this._get_eventHandlerList().addHandler(\"endRequest\",a)},remove_endRequest:function(a){this._get_eventHandlerList().removeHandler(\"endRequest\",a)},add_initializeRequest:function(a){this._get_eventHandlerList().addHandler(\"initializeRequest\",a)},remove_initializeRequest:function(a){this._get_eventHandlerList().removeHandler(\"initializeRequest\",a)},add_pageLoaded:function(a){this._get_eventHandlerList().addHandler(\"pageLoaded\",a)},remove_pageLoaded:function(a){this._get_eventHandlerList().removeHandler(\"pageLoaded\",a)},add_pageLoading:function(a){this._get_eventHandlerList().addHandler(\"pageLoading\",a)},remove_pageLoading:function(a){this._get_eventHandlerList().removeHandler(\"pageLoading\",a)},abortPostBack:function(){if(!this._processingRequest&&this._request){this._request.get_executor().abort();this._request=null}},beginAsyncPostBack:function(c,a,f,d,e){if(d&&typeof Page_ClientValidate===\"function\"&&!Page_ClientValidate(e||null))return;this._postBackSettings=this._createPostBackSettings(true,c,a);var b=this._form;b.__EVENTTARGET.value=a||\"\";b.__EVENTARGUMENT.value=f||\"\";this._isCrossPost=false;this._additionalInput=null;this._onFormSubmit()},_cancelPendingCallbacks:function(){for(var a=0,e=window.__pendingCallbacks.length;a<e;a++){var c=window.__pendingCallbacks[a];if(c){if(!c.async)window.__synchronousCallBackIndex=-1;window.__pendingCallbacks[a]=null;var d=\"__CALLBACKFRAME\"+a,b=document.getElementById(d);if(b)b.parentNode.removeChild(b)}}},_commitControls:function(a,b){if(a){this._updatePanelIDs=a.updatePanelIDs;this._updatePanelClientIDs=a.updatePanelClientIDs;this._updatePanelHasChildrenAsTriggers=a.updatePanelHasChildrenAsTriggers;this._asyncPostBackControlIDs=a.asyncPostBackControlIDs;this._asyncPostBackControlClientIDs=a.asyncPostBackControlClientIDs;this._postBackControlIDs=a.postBackControlIDs;this._postBackControlClientIDs=a.postBackControlClientIDs}if(typeof b!==\"undefined\"&&b!==null)this._asyncPostBackTimeout=b*1000},_createHiddenField:function(c,d){var b,a=document.getElementById(c);if(a)if(!a._isContained)a.parentNode.removeChild(a);else b=a.parentNode;if(!b){b=document.createElement(\"span\");b.style.cssText=\"display:none !important\";this._form.appendChild(b)}b.innerHTML=\"<input type='hidden' />\";a=b.childNodes[0];a._isContained=true;a.id=a.name=c;a.value=d},_createPageRequestManagerTimeoutError:function(){var b=\"Sys.WebForms.PageRequestManagerTimeoutException: \"+Sys.WebForms.Res.PRM_TimeoutError,a=Error.create(b,{name:\"Sys.WebForms.PageRequestManagerTimeoutException\"});a.popStackFrame();return a},_createPageRequestManagerServerError:function(a,d){var c=\"Sys.WebForms.PageRequestManagerServerErrorException: \"+(d||String.format(Sys.WebForms.Res.PRM_ServerError,a)),b=Error.create(c,{name:\"Sys.WebForms.PageRequestManagerServerErrorException\",httpStatusCode:a});b.popStackFrame();return b},_createPageRequestManagerParserError:function(b){var c=\"Sys.WebForms.PageRequestManagerParserErrorException: \"+String.format(Sys.WebForms.Res.PRM_ParserError,b),a=Error.create(c,{name:\"Sys.WebForms.PageRequestManagerParserErrorException\"});a.popStackFrame();return a},_createPanelID:function(e,b){var c=b.asyncTarget,a=this._ensureUniqueIds(e||b.panelsToUpdate),d=a instanceof Array?a.join(\",\"):a||this._scriptManagerID;if(c)d+=\"|\"+c;return encodeURIComponent(this._scriptManagerID)+\"=\"+encodeURIComponent(d)+\"&\"},_createPostBackSettings:function(d,a,c,b){return {async:d,asyncTarget:c,panelsToUpdate:a,sourceElement:b}},_convertToClientIDs:function(a,f,e,d){if(a)for(var b=0,h=a.length;b<h;b+=d?2:1){var c=a[b],g=(d?a[b+1]:\"\")||this._uniqueIDToClientID(c);Array.add(f,c);Array.add(e,g)}},dispose:function(){if(this._form){Sys.UI.DomEvent.removeHandler(this._form,\"submit\",this._onFormSubmitHandler);Sys.UI.DomEvent.removeHandler(this._form,\"click\",this._onFormElementClickHandler);Sys.UI.DomEvent.removeHandler(window,\"unload\",this._onWindowUnloadHandler);Sys.UI.DomEvent.removeHandler(window,\"load\",this._pageLoadedHandler)}if(this._originalDoPostBack){window.__doPostBack=this._originalDoPostBack;this._originalDoPostBack=null}if(this._originalDoPostBackWithOptions){window.WebForm_DoPostBackWithOptions=this._originalDoPostBackWithOptions;this._originalDoPostBackWithOptions=null}if(this._originalFireDefaultButton){window.WebForm_FireDefaultButton=this._originalFireDefaultButton;this._originalFireDefaultButton=null}if(this._originalDoCallback){window.WebForm_DoCallback=this._originalDoCallback;this._originalDoCallback=null}this._form=null;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._asyncPostBackTimeout=null;this._scrollPosition=null;this._activeElement=null},_doCallback:function(d,b,c,f,a,e){if(!this.get_isInAsyncPostBack())this._originalDoCallback(d,b,c,f,a,e)},_doPostBack:function(a,k){var f=window.event;if(!f){var d=arguments.callee?arguments.callee.caller:null;if(d){var j=30;while(d.arguments.callee.caller&&--j)d=d.arguments.callee.caller;f=j&&d.arguments.length?d.arguments[0]:null}}this._additionalInput=null;var h=this._form;if(a===null||typeof a===\"undefined\"||this._isCrossPost){this._postBackSettings=this._createPostBackSettings(false);this._isCrossPost=false}else{var c=this._masterPageUniqueID,l=this._uniqueIDToClientID(a),g=document.getElementById(l);if(!g&&c)if(a.indexOf(c+\"$\")===0)g=document.getElementById(l.substr(c.length+1));if(!g)if(Array.contains(this._asyncPostBackControlIDs,a))this._postBackSettings=this._createPostBackSettings(true,null,a);else if(Array.contains(this._postBackControlIDs,a))this._postBackSettings=this._createPostBackSettings(false);else{var e=this._findNearestElement(a);if(e)this._postBackSettings=this._getPostBackSettings(e,a);else{if(c){c+=\"$\";if(a.indexOf(c)===0)e=this._findNearestElement(a.substr(c.length))}if(e)this._postBackSettings=this._getPostBackSettings(e,a);else{var b;try{b=f?f.target||f.srcElement:null}catch(n){}b=b||this._activeElement;var m=/__doPostBack\\(|WebForm_DoPostBackWithOptions\\(/;function i(b){b=b?b.toString():\"\";return m.test(b)&&b.indexOf(\"'\"+a+\"'\")!==-1||b.indexOf('\"'+a+'\"')!==-1}if(b&&(b.name===a||i(b.href)||i(b.onclick)||i(b.onchange)))this._postBackSettings=this._getPostBackSettings(b,a);else this._postBackSettings=this._createPostBackSettings(false)}}}else this._postBackSettings=this._getPostBackSettings(g,a)}if(!this._postBackSettings.async){h.onsubmit=this._onsubmit;this._originalDoPostBack(a,k);h.onsubmit=null;return}h.__EVENTTARGET.value=a;h.__EVENTARGUMENT.value=k;this._onFormSubmit()},_doPostBackWithOptions:function(a){this._isCrossPost=a&&a.actionUrl;var d=true;if(a.validation)if(typeof Page_ClientValidate==\"function\")d=Page_ClientValidate(a.validationGroup);if(d){if(typeof a.actionUrl!=\"undefined\"&&a.actionUrl!=null&&a.actionUrl.length>0)theForm.action=a.actionUrl;if(a.trackFocus){var c=theForm.elements[\"__LASTFOCUS\"];if(typeof c!=\"undefined\"&&c!=null)if(typeof document.activeElement==\"undefined\")c.value=a.eventTarget;else{var b=document.activeElement;if(typeof b!=\"undefined\"&&b!=null)if(typeof b.id!=\"undefined\"&&b.id!=null&&b.id.length>0)c.value=b.id;else if(typeof b.name!=\"undefined\")c.value=b.name}}}if(a.clientSubmit)this._doPostBack(a.eventTarget,a.eventArgument)},_elementContains:function(b,a){while(a){if(a===b)return true;a=a.parentNode}return false},_endPostBack:function(a,d,f){if(this._request===d.get_webRequest()){this._processingRequest=false;this._additionalInput=null;this._request=null}var e=this._get_eventHandlerList().getHandler(\"endRequest\"),b=false;if(e){var c=new Sys.WebForms.EndRequestEventArgs(a,f?f.dataItems:{},d);e(this,c);b=c.get_errorHandled()}if(a&&!b)throw a},_ensureUniqueIds:function(a){if(!a)return a;a=a instanceof Array?a:[a];var c=[];for(var b=0,f=a.length;b<f;b++){var e=a[b],d=Array.indexOf(this._updatePanelClientIDs,e);c.push(d>-1?this._updatePanelIDs[d]:e)}return c},_findNearestElement:function(a){while(a.length>0){var d=this._uniqueIDToClientID(a),c=document.getElementById(d);if(c)return c;var b=a.lastIndexOf(\"$\");if(b===-1)return null;a=a.substring(0,b)}return null},_findText:function(b,a){var c=Math.max(0,a-20),d=Math.min(b.length,a+20);return b.substring(c,d)},_fireDefaultButton:function(a,d){if(a.keyCode===13){var c=a.srcElement||a.target;if(!c||c.tagName.toLowerCase()!==\"textarea\"){var b=document.getElementById(d);if(b&&typeof b.click!==\"undefined\"){this._activeDefaultButton=b;this._activeDefaultButtonClicked=false;try{b.click()}finally{this._activeDefaultButton=null}a.cancelBubble=true;if(typeof a.stopPropagation===\"function\")a.stopPropagation();return false}}}return true},_getPageLoadedEventArgs:function(n,c){var m=[],l=[],k=c?c.version4:false,d=c?c.updatePanelData:null,e,g,h,b;if(!d){e=this._updatePanelIDs;g=this._updatePanelClientIDs;h=null;b=null}else{e=d.updatePanelIDs;g=d.updatePanelClientIDs;h=d.childUpdatePanelIDs;b=d.panelsToRefreshIDs}var a,f,j,i;if(b)for(a=0,f=b.length;a<f;a+=k?2:1){j=b[a];i=(k?b[a+1]:\"\")||this._uniqueIDToClientID(j);Array.add(m,document.getElementById(i))}for(a=0,f=e.length;a<f;a++)if(n||Array.indexOf(h,e[a])!==-1)Array.add(l,document.getElementById(g[a]));return new Sys.WebForms.PageLoadedEventArgs(m,l,c?c.dataItems:{})},_getPageLoadingEventArgs:function(f){var j=[],i=[],c=f.updatePanelData,k=c.oldUpdatePanelIDs,l=c.oldUpdatePanelClientIDs,n=c.updatePanelIDs,m=c.childUpdatePanelIDs,d=c.panelsToRefreshIDs,a,e,b,g,h=f.version4;for(a=0,e=d.length;a<e;a+=h?2:1){b=d[a];g=(h?d[a+1]:\"\")||this._uniqueIDToClientID(b);Array.add(j,document.getElementById(g))}for(a=0,e=k.length;a<e;a++){b=k[a];if(Array.indexOf(d,b)===-1&&(Array.indexOf(n,b)===-1||Array.indexOf(m,b)>-1))Array.add(i,document.getElementById(l[a]))}return new Sys.WebForms.PageLoadingEventArgs(j,i,f.dataItems)},_getPostBackSettings:function(a,c){var d=a,b=null;while(a){if(a.id){if(!b&&Array.contains(this._asyncPostBackControlClientIDs,a.id))b=this._createPostBackSettings(true,null,c,d);else if(!b&&Array.contains(this._postBackControlClientIDs,a.id))return this._createPostBackSettings(false);else{var e=Array.indexOf(this._updatePanelClientIDs,a.id);if(e!==-1)if(this._updatePanelHasChildrenAsTriggers[e])return this._createPostBackSettings(true,[this._updatePanelIDs[e]],c,d);else return this._createPostBackSettings(true,null,c,d)}if(!b&&this._matchesParentIDInList(a.id,this._asyncPostBackControlClientIDs))b=this._createPostBackSettings(true,null,c,d);else if(!b&&this._matchesParentIDInList(a.id,this._postBackControlClientIDs))return this._createPostBackSettings(false)}a=a.parentNode}if(!b)return this._createPostBackSettings(false);else return b},_getScrollPosition:function(){var a=document.documentElement;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else{a=document.body;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else if(this._validPosition(window.pageXOffset)||this._validPosition(window.pageYOffset))return {x:window.pageXOffset,y:window.pageYOffset};else return {x:0,y:0}}},_initializeInternal:function(f,g,a,b,e,c,d){if(this._prmInitialized)throw Error.invalidOperation(Sys.WebForms.Res.PRM_CannotRegisterTwice);this._prmInitialized=true;this._masterPageUniqueID=d;this._scriptManagerID=f;this._form=Sys.UI.DomElement.resolveElement(g);this._onsubmit=this._form.onsubmit;this._form.onsubmit=null;this._onFormSubmitHandler=Function.createDelegate(this,this._onFormSubmit);this._onFormElementClickHandler=Function.createDelegate(this,this._onFormElementClick);this._onWindowUnloadHandler=Function.createDelegate(this,this._onWindowUnload);Sys.UI.DomEvent.addHandler(this._form,\"submit\",this._onFormSubmitHandler);Sys.UI.DomEvent.addHandler(this._form,\"click\",this._onFormElementClickHandler);Sys.UI.DomEvent.addHandler(window,\"unload\",this._onWindowUnloadHandler);this._originalDoPostBack=window.__doPostBack;if(this._originalDoPostBack)window.__doPostBack=Function.createDelegate(this,this._doPostBack);this._originalDoPostBackWithOptions=window.WebForm_DoPostBackWithOptions;if(this._originalDoPostBackWithOptions)window.WebForm_DoPostBackWithOptions=Function.createDelegate(this,this._doPostBackWithOptions);this._originalFireDefaultButton=window.WebForm_FireDefaultButton;if(this._originalFireDefaultButton)window.WebForm_FireDefaultButton=Function.createDelegate(this,this._fireDefaultButton);this._originalDoCallback=window.WebForm_DoCallback;if(this._originalDoCallback)window.WebForm_DoCallback=Function.createDelegate(this,this._doCallback);this._pageLoadedHandler=Function.createDelegate(this,this._pageLoadedInitialLoad);Sys.UI.DomEvent.addHandler(window,\"load\",this._pageLoadedHandler);if(a)this._updateControls(a,b,e,c,true)},_matchesParentIDInList:function(c,b){for(var a=0,d=b.length;a<d;a++)if(c.startsWith(b[a]+\"_\"))return true;return false},_onFormElementActive:function(a,d,e){if(a.disabled)return;this._activeElement=a;this._postBackSettings=this._getPostBackSettings(a,a.name);if(a.name){var b=a.tagName.toUpperCase();if(b===\"INPUT\"){var c=a.type;if(c===\"submit\")this._additionalInput=encodeURIComponent(a.name)+\"=\"+encodeURIComponent(a.value);else if(c===\"image\")this._additionalInput=encodeURIComponent(a.name)+\".x=\"+d+\"&\"+encodeURIComponent(a.name)+\".y=\"+e}else if(b===\"BUTTON\"&&a.name.length!==0&&a.type===\"submit\")this._additionalInput=encodeURIComponent(a.name)+\"=\"+encodeURIComponent(a.value)}},_onFormElementClick:function(a){this._activeDefaultButtonClicked=a.target===this._activeDefaultButton;this._onFormElementActive(a.target,a.offsetX,a.offsetY)},_onFormSubmit:function(i){var f,x,h=true,z=this._isCrossPost;this._isCrossPost=false;if(this._onsubmit)h=this._onsubmit();if(h)for(f=0,x=this._onSubmitStatements.length;f<x;f++)if(!this._onSubmitStatements[f]()){h=false;break}if(!h){if(i)i.preventDefault();return}var w=this._form;if(z)return;if(this._activeDefaultButton&&!this._activeDefaultButtonClicked)this._onFormElementActive(this._activeDefaultButton,0,0);if(!this._postBackSettings||!this._postBackSettings.async)return;var b=new Sys.StringBuilder,s=w.elements,B=s.length,t=this._createPanelID(null,this._postBackSettings);b.append(t);for(f=0;f<B;f++){var e=s[f],g=e.name;if(typeof g===\"undefined\"||g===null||g.length===0||g===this._scriptManagerID)continue;var n=e.tagName.toUpperCase();if(n===\"INPUT\"){var p=e.type;if(this._textTypes.test(p)||(p===\"checkbox\"||p===\"radio\")&&e.checked){b.append(encodeURIComponent(g));b.append(\"=\");b.append(encodeURIComponent(e.value));b.append(\"&\")}}else if(n===\"SELECT\"){var A=e.options.length;for(var q=0;q<A;q++){var u=e.options[q];if(u.selected){b.append(encodeURIComponent(g));b.append(\"=\");b.append(encodeURIComponent(u.value));b.append(\"&\")}}}else if(n===\"TEXTAREA\"){b.append(encodeURIComponent(g));b.append(\"=\");b.append(encodeURIComponent(e.value));b.append(\"&\")}}b.append(\"__ASYNCPOST=true&\");if(this._additionalInput){b.append(this._additionalInput);this._additionalInput=null}var c=new Sys.Net.WebRequest,a=w.action;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var r=a.indexOf(\"#\");if(r!==-1)a=a.substr(0,r);var o=\"\",v=\"\",m=a.indexOf(\"?\");if(m!==-1){v=a.substr(m);a=a.substr(0,m)}if(/^https?\\:\\/\\/.*$/gi.test(a)){var y=a.indexOf(\"//\")+2,l=a.indexOf(\"/\",y);if(l===-1){o=a;a=\"\"}else{o=a.substr(0,l);a=a.substr(l)}}a=o+encodeURI(decodeURI(a))+v}c.set_url(a);c.get_headers()[\"X-MicrosoftAjax\"]=\"Delta=true\";c.get_headers()[\"Cache-Control\"]=\"no-cache\";c.set_timeout(this._asyncPostBackTimeout);c.add_completed(Function.createDelegate(this,this._onFormSubmitCompleted));c.set_body(b.toString());var j,d,k=this._get_eventHandlerList().getHandler(\"initializeRequest\");if(k){j=this._postBackSettings.panelsToUpdate;d=new Sys.WebForms.InitializeRequestEventArgs(c,this._postBackSettings.sourceElement,j);k(this,d);h=!d.get_cancel()}if(!h){if(i)i.preventDefault();return}if(d&&d._updated){j=d.get_updatePanelsToUpdate();c.set_body(c.get_body().replace(t,this._createPanelID(j,this._postBackSettings)))}this._scrollPosition=this._getScrollPosition();this.abortPostBack();k=this._get_eventHandlerList().getHandler(\"beginRequest\");if(k){d=new Sys.WebForms.BeginRequestEventArgs(c,this._postBackSettings.sourceElement,j||this._postBackSettings.panelsToUpdate);k(this,d)}if(this._originalDoCallback)this._cancelPendingCallbacks();this._request=c;this._processingRequest=false;c.invoke();if(i)i.preventDefault()},_onFormSubmitCompleted:function(c){this._processingRequest=true;if(c.get_timedOut()){this._endPostBack(this._createPageRequestManagerTimeoutError(),c,null);return}if(c.get_aborted()){this._endPostBack(null,c,null);return}if(!this._request||c.get_webRequest()!==this._request)return;if(c.get_statusCode()!==200){this._endPostBack(this._createPageRequestManagerServerError(c.get_statusCode()),c,null);return}var a=this._parseDelta(c);if(!a)return;var b,e;if(a.asyncPostBackControlIDsNode&&a.postBackControlIDsNode&&a.updatePanelIDsNode&&a.panelsToRefreshNode&&a.childUpdatePanelIDsNode){var r=this._updatePanelIDs,n=this._updatePanelClientIDs,i=a.childUpdatePanelIDsNode.content,p=i.length?i.split(\",\"):[],m=this._splitNodeIntoArray(a.asyncPostBackControlIDsNode),o=this._splitNodeIntoArray(a.postBackControlIDsNode),q=this._splitNodeIntoArray(a.updatePanelIDsNode),g=this._splitNodeIntoArray(a.panelsToRefreshNode),h=a.version4;for(b=0,e=g.length;b<e;b+=h?2:1){var j=(h?g[b+1]:\"\")||this._uniqueIDToClientID(g[b]);if(!document.getElementById(j)){this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel,j)),c,a);return}}var f=this._processUpdatePanelArrays(q,m,o,h);f.oldUpdatePanelIDs=r;f.oldUpdatePanelClientIDs=n;f.childUpdatePanelIDs=p;f.panelsToRefreshIDs=g;a.updatePanelData=f}a.dataItems={};var d;for(b=0,e=a.dataItemNodes.length;b<e;b++){d=a.dataItemNodes[b];a.dataItems[d.id]=d.content}for(b=0,e=a.dataItemJsonNodes.length;b<e;b++){d=a.dataItemJsonNodes[b];a.dataItems[d.id]=Sys.Serialization.JavaScriptSerializer.deserialize(d.content)}var l=this._get_eventHandlerList().getHandler(\"pageLoading\");if(l)l(this,this._getPageLoadingEventArgs(a));Sys._ScriptLoader.readLoadedScripts();Sys.Application.beginCreateComponents();var k=Sys._ScriptLoader.getInstance();this._queueScripts(k,a.scriptBlockNodes,true,false);this._processingRequest=true;k.loadScripts(0,Function.createDelegate(this,Function.createCallback(this._scriptIncludesLoadComplete,a)),Function.createDelegate(this,Function.createCallback(this._scriptIncludesLoadFailed,a)),null)},_onWindowUnload:function(){this.dispose()},_pageLoaded:function(a,c){var b=this._get_eventHandlerList().getHandler(\"pageLoaded\");if(b)b(this,this._getPageLoadedEventArgs(a,c));if(!a)Sys.Application.raiseLoad()},_pageLoadedInitialLoad:function(){this._pageLoaded(true,null)},_parseDelta:function(h){var c=h.get_responseData(),d,i,E,F,D,b=0,e=null,k=[];while(b<c.length){d=c.indexOf(\"|\",b);if(d===-1){e=this._findText(c,b);break}i=parseInt(c.substring(b,d),10);if(i%1!==0){e=this._findText(c,b);break}b=d+1;d=c.indexOf(\"|\",b);if(d===-1){e=this._findText(c,b);break}E=c.substring(b,d);b=d+1;d=c.indexOf(\"|\",b);if(d===-1){e=this._findText(c,b);break}F=c.substring(b,d);b=d+1;if(b+i>=c.length){e=this._findText(c,c.length);break}D=c.substr(b,i);b+=i;if(c.charAt(b)!==\"|\"){e=this._findText(c,b);break}b++;Array.add(k,{type:E,id:F,content:D})}if(e){this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_ParserErrorDetails,e)),h,null);return null}var x=[],w=[],q=[],j=[],t=[],C=[],A=[],z=[],v=[],s=[],m,p,u,n,o,r,y,g;for(var l=0,G=k.length;l<G;l++){var a=k[l];switch(a.type){case \"#\":g=a;break;case \"updatePanel\":Array.add(x,a);break;case \"hiddenField\":Array.add(w,a);break;case \"arrayDeclaration\":Array.add(q,a);break;case \"scriptBlock\":Array.add(j,a);break;case \"fallbackScript\":j[j.length-1].fallback=a.id;case \"scriptStartupBlock\":Array.add(t,a);break;case \"expando\":Array.add(C,a);break;case \"onSubmit\":Array.add(A,a);break;case \"asyncPostBackControlIDs\":m=a;break;case \"postBackControlIDs\":p=a;break;case \"updatePanelIDs\":u=a;break;case \"asyncPostBackTimeout\":n=a;break;case \"childUpdatePanelIDs\":o=a;break;case \"panelsToRefreshIDs\":r=a;break;case \"formAction\":y=a;break;case \"dataItem\":Array.add(z,a);break;case \"dataItemJson\":Array.add(v,a);break;case \"scriptDispose\":Array.add(s,a);break;case \"pageRedirect\":if(g&&parseFloat(g.content)>=4)a.content=unescape(a.content);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var f=document.createElement(\"a\");f.style.display=\"none\";f.attachEvent(\"onclick\",B);f.href=a.content;this._form.parentNode.insertBefore(f,this._form);f.click();f.detachEvent(\"onclick\",B);this._form.parentNode.removeChild(f);function B(a){a.cancelBubble=true}}else window.location.href=a.content;return null;case \"error\":this._endPostBack(this._createPageRequestManagerServerError(Number.parseInvariant(a.id),a.content),h,null);return null;case \"pageTitle\":document.title=a.content;break;case \"focus\":this._controlIDToFocus=a.content;break;default:this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_UnknownToken,a.type)),h,null);return null}}return {version4:g?parseFloat(g.content)>=4:false,executor:h,updatePanelNodes:x,hiddenFieldNodes:w,arrayDeclarationNodes:q,scriptBlockNodes:j,scriptStartupNodes:t,expandoNodes:C,onSubmitNodes:A,dataItemNodes:z,dataItemJsonNodes:v,scriptDisposeNodes:s,asyncPostBackControlIDsNode:m,postBackControlIDsNode:p,updatePanelIDsNode:u,asyncPostBackTimeoutNode:n,childUpdatePanelIDsNode:o,panelsToRefreshNode:r,formActionNode:y}},_processUpdatePanelArrays:function(e,q,r,f){var d,c,b;if(e){var i=e.length,j=f?2:1;d=new Array(i/j);c=new Array(i/j);b=new Array(i/j);for(var g=0,h=0;g<i;g+=j,h++){var p,a=e[g],k=f?e[g+1]:\"\";p=a.charAt(0)===\"t\";a=a.substr(1);if(!k)k=this._uniqueIDToClientID(a);b[h]=p;d[h]=a;c[h]=k}}else{d=[];c=[];b=[]}var n=[],l=[];this._convertToClientIDs(q,n,l,f);var o=[],m=[];this._convertToClientIDs(r,o,m,f);return {updatePanelIDs:d,updatePanelClientIDs:c,updatePanelHasChildrenAsTriggers:b,asyncPostBackControlIDs:n,asyncPostBackControlClientIDs:l,postBackControlIDs:o,postBackControlClientIDs:m}},_queueScripts:function(scriptLoader,scriptBlockNodes,queueIncludes,queueBlocks){for(var i=0,l=scriptBlockNodes.length;i<l;i++){var scriptBlockType=scriptBlockNodes[i].id;switch(scriptBlockType){case \"ScriptContentNoTags\":if(!queueBlocks)continue;scriptLoader.queueScriptBlock(scriptBlockNodes[i].content);break;case \"ScriptContentWithTags\":var scriptTagAttributes;eval(\"scriptTagAttributes = \"+scriptBlockNodes[i].content);if(scriptTagAttributes.src){if(!queueIncludes||Sys._ScriptLoader.isScriptLoaded(scriptTagAttributes.src))continue}else if(!queueBlocks)continue;scriptLoader.queueCustomScriptTag(scriptTagAttributes);break;case \"ScriptPath\":var script=scriptBlockNodes[i];if(!queueIncludes||Sys._ScriptLoader.isScriptLoaded(script.content))continue;scriptLoader.queueScriptReference(script.content,script.fallback)}}},_registerDisposeScript:function(a,b){if(!this._scriptDisposes[a])this._scriptDisposes[a]=[b];else Array.add(this._scriptDisposes[a],b)},_scriptIncludesLoadComplete:function(e,b){if(b.executor.get_webRequest()!==this._request)return;this._commitControls(b.updatePanelData,b.asyncPostBackTimeoutNode?b.asyncPostBackTimeoutNode.content:null);if(b.formActionNode)this._form.action=b.formActionNode.content;var a,d,c;for(a=0,d=b.updatePanelNodes.length;a<d;a++){c=b.updatePanelNodes[a];var j=document.getElementById(c.id);if(!j){this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel,c.id)),b.executor,b);return}this._updatePanel(j,c.content)}for(a=0,d=b.scriptDisposeNodes.length;a<d;a++){c=b.scriptDisposeNodes[a];this._registerDisposeScript(c.id,c.content)}for(a=0,d=this._transientFields.length;a<d;a++){var g=document.getElementById(this._transientFields[a]);if(g){var k=g._isContained?g.parentNode:g;k.parentNode.removeChild(k)}}for(a=0,d=b.hiddenFieldNodes.length;a<d;a++){c=b.hiddenFieldNodes[a];this._createHiddenField(c.id,c.content)}if(b.scriptsFailed)throw Sys._ScriptLoader._errorScriptLoadFailed(b.scriptsFailed.src,b.scriptsFailed.multipleCallbacks);this._queueScripts(e,b.scriptBlockNodes,false,true);var i=\"\";for(a=0,d=b.arrayDeclarationNodes.length;a<d;a++){c=b.arrayDeclarationNodes[a];i+=\"Sys.WebForms.PageRequestManager._addArrayElement('\"+c.id+\"', \"+c.content+\");\\r\\n\"}var h=\"\";for(a=0,d=b.expandoNodes.length;a<d;a++){c=b.expandoNodes[a];h+=c.id+\" = \"+c.content+\"\\r\\n\"}if(i.length)e.queueScriptBlock(i);if(h.length)e.queueScriptBlock(h);this._queueScripts(e,b.scriptStartupNodes,true,true);var f=\"\";for(a=0,d=b.onSubmitNodes.length;a<d;a++){if(a===0)f=\"Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, function() {\\r\\n\";f+=b.onSubmitNodes[a].content+\"\\r\\n\"}if(f.length){f+=\"\\r\\nreturn true;\\r\\n});\\r\\n\";e.queueScriptBlock(f)}e.loadScripts(0,Function.createDelegate(this,Function.createCallback(this._scriptsLoadComplete,b)),null,null)},_scriptIncludesLoadFailed:function(d,c,b,a){a.scriptsFailed={src:c.src,multipleCallbacks:b};this._scriptIncludesLoadComplete(d,a)},_scriptsLoadComplete:function(f,c){var e=c.executor;if(window.__theFormPostData)window.__theFormPostData=\"\";if(window.__theFormPostCollection)window.__theFormPostCollection=[];if(window.WebForm_InitCallback)window.WebForm_InitCallback();if(this._scrollPosition){if(window.scrollTo)window.scrollTo(this._scrollPosition.x,this._scrollPosition.y);this._scrollPosition=null}Sys.Application.endCreateComponents();this._pageLoaded(false,c);this._endPostBack(null,e,c);if(this._controlIDToFocus){var a,d;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var b=$get(this._controlIDToFocus);a=b;if(b&&!WebForm_CanFocus(b))a=WebForm_FindFirstFocusableChild(b);if(a&&typeof a.contentEditable!==\"undefined\"){d=a.contentEditable;a.contentEditable=false}else a=null}WebForm_AutoFocus(this._controlIDToFocus);if(a)a.contentEditable=d;this._controlIDToFocus=null}},_splitNodeIntoArray:function(b){var a=b.content,c=a.length?a.split(\",\"):[];return c},_uniqueIDToClientID:function(a){return a.replace(/\\$/g,\"_\")},_updateControls:function(d,a,c,b,e){this._commitControls(this._processUpdatePanelArrays(d,a,c,e),b)},_updatePanel:function(updatePanelElement,rendering){for(var updatePanelID in this._scriptDisposes)if(this._elementContains(updatePanelElement,document.getElementById(updatePanelID))){var disposeScripts=this._scriptDisposes[updatePanelID];for(var i=0,l=disposeScripts.length;i<l;i++)eval(disposeScripts[i]);delete this._scriptDisposes[updatePanelID]}Sys.Application.disposeElement(updatePanelElement,true);updatePanelElement.innerHTML=rendering},_validPosition:function(a){return typeof a!==\"undefined\"&&a!==null&&a!==0}};Sys.WebForms.PageRequestManager.getInstance=function(){var a=Sys.WebForms.PageRequestManager._instance;if(!a)a=Sys.WebForms.PageRequestManager._instance=new Sys.WebForms.PageRequestManager;return a};Sys.WebForms.PageRequestManager._addArrayElement=function(a){if(!window[a])window[a]=[];for(var b=1,c=arguments.length;b<c;b++)Array.add(window[a],arguments[b])};Sys.WebForms.PageRequestManager._initialize=function(){var a=Sys.WebForms.PageRequestManager.getInstance();a._initializeInternal.apply(a,arguments)};Sys.WebForms.PageRequestManager.registerClass(\"Sys.WebForms.PageRequestManager\");Sys.UI._UpdateProgress=function(a){Sys.UI._UpdateProgress.initializeBase(this,[a]);this._displayAfter=500;this._dynamicLayout=true;this._associatedUpdatePanelId=null;this._beginRequestHandlerDelegate=null;this._startDelegate=null;this._endRequestHandlerDelegate=null;this._pageRequestManager=null;this._timerCookie=null};Sys.UI._UpdateProgress.prototype={get_displayAfter:function(){return this._displayAfter},set_displayAfter:function(a){this._displayAfter=a},get_dynamicLayout:function(){return this._dynamicLayout},set_dynamicLayout:function(a){this._dynamicLayout=a},get_associatedUpdatePanelId:function(){return this._associatedUpdatePanelId},set_associatedUpdatePanelId:function(a){this._associatedUpdatePanelId=a},get_role:function(){return \"status\"},_clearTimeout:function(){if(this._timerCookie){window.clearTimeout(this._timerCookie);this._timerCookie=null}},_getUniqueID:function(b){var a=Array.indexOf(this._pageRequestManager._updatePanelClientIDs,b);return a===-1?null:this._pageRequestManager._updatePanelIDs[a]},_handleBeginRequest:function(f,e){var b=e.get_postBackElement(),a=true,d=this._associatedUpdatePanelId;if(this._associatedUpdatePanelId){var c=e.get_updatePanelsToUpdate();if(c&&c.length)a=Array.contains(c,d)||Array.contains(c,this._getUniqueID(d));else a=false}while(!a&&b){if(b.id&&this._associatedUpdatePanelId===b.id)a=true;b=b.parentNode}if(a)this._timerCookie=window.setTimeout(this._startDelegate,this._displayAfter)},_startRequest:function(){if(this._pageRequestManager.get_isInAsyncPostBack()){var a=this.get_element();if(this._dynamicLayout)a.style.display=\"block\";else a.style.visibility=\"visible\";if(this.get_role()===\"status\")a.setAttribute(\"aria-hidden\",\"false\")}this._timerCookie=null},_handleEndRequest:function(){var a=this.get_element();if(this._dynamicLayout)a.style.display=\"none\";else a.style.visibility=\"hidden\";if(this.get_role()===\"status\")a.setAttribute(\"aria-hidden\",\"true\");this._clearTimeout()},dispose:function(){if(this._beginRequestHandlerDelegate!==null){this._pageRequestManager.remove_beginRequest(this._beginRequestHandlerDelegate);this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);this._beginRequestHandlerDelegate=null;this._endRequestHandlerDelegate=null}this._clearTimeout();Sys.UI._UpdateProgress.callBaseMethod(this,\"dispose\")},initialize:function(){Sys.UI._UpdateProgress.callBaseMethod(this,\"initialize\");if(this.get_role()===\"status\")this.get_element().setAttribute(\"aria-hidden\",\"true\");this._beginRequestHandlerDelegate=Function.createDelegate(this,this._handleBeginRequest);this._endRequestHandlerDelegate=Function.createDelegate(this,this._handleEndRequest);this._startDelegate=Function.createDelegate(this,this._startRequest);if(Sys.WebForms&&Sys.WebForms.PageRequestManager)this._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(this._pageRequestManager!==null){this._pageRequestManager.add_beginRequest(this._beginRequestHandlerDelegate);this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate)}}};Sys.UI._UpdateProgress.registerClass(\"Sys.UI._UpdateProgress\",Sys.UI.Control);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MSAjax/MicrosoftAjaxWebServices.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjaxWebServices.js\n//----------------------------------------------------------\n// Copyright (C) Microsoft Corporation. All rights reserved.\n//----------------------------------------------------------\n// MicrosoftAjaxWebServices.js\nType._registerScript(\"MicrosoftAjaxWebServices.js\",[\"MicrosoftAjaxNetwork.js\"]);Type.registerNamespace(\"Sys.Net\");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange(\"value\",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext===\"undefined\"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||\"callback\"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a===\"undefined\")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass(\"Sys.Net.WebServiceProxy\");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||\"callback\";c=\"_jsonp\"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+\"/\"+encodeURIComponent(a):q,r,n?p+\"=Sys.\"+c:null);if(n){s=document.createElement(\"script\");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!==\"undefined\"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()[\"Content-Type\"]=\"application/json; charset=utf-8\";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o===\"{}\")o=\"\"}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader(\"Content-Type\");if(e.startsWith(\"application/json\"))c=d.get_object();else if(e.startsWith(\"text/xml\"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader(\"jsonerror\"),h=k===\"true\";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith(\"application/json\"))c=!c||typeof c.d===\"undefined\"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,\"\",\"\"),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\\s*([a-zA-Z0-9\\+\\-\\.]+\\:)\\/\\/([^?#\\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||\"\"},get_exceptionType:function(){return this._exceptionType||\"\"},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass(\"Sys.Net.WebServiceError\");"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/Menu.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/Menu.js\nvar __rootMenuItem;\nvar __menuInterval;\nvar __scrollPanel;\nvar __disappearAfter = 500;\nfunction Menu_ClearInterval() {\n    if (__menuInterval) {\n        window.clearInterval(__menuInterval);\n    }\n}\nfunction Menu_Collapse(item) {\n    Menu_SetRoot(item);\n    if (__rootMenuItem) {\n        Menu_ClearInterval();\n        if (__disappearAfter >= 0) {\n            __menuInterval = window.setInterval(\"Menu_HideItems()\", __disappearAfter);\n        }\n    }\n}\nfunction Menu_Expand(item, horizontalOffset, verticalOffset, hideScrollers) {\n    Menu_ClearInterval();\n    var tr = item.parentNode.parentNode.parentNode.parentNode.parentNode;\n    var horizontal = true;\n    if (!tr.id) {\n        horizontal = false;\n        tr = tr.parentNode;\n    }\n    var child = Menu_FindSubMenu(item);\n    if (child) {\n        var data = Menu_GetData(item);\n        if (!data) {\n            return null;\n        }\n        child.rel = tr.id;\n        child.x = horizontalOffset;\n        child.y = verticalOffset;\n        if (horizontal) child.pos = \"bottom\";\n        PopOut_Show(child.id, hideScrollers, data);\n    }\n    Menu_SetRoot(item);\n    if (child) {\n        if (!document.body.__oldOnClick && document.body.onclick) {\n            document.body.__oldOnClick = document.body.onclick;\n        }\n        if (__rootMenuItem) {\n            document.body.onclick = Menu_HideItems;\n        }\n    }\n    Menu_ResetSiblings(tr);\n    return child;\n}\nfunction Menu_FindMenu(item) {\n    if (item && item.menu) return item.menu;\n    var tr = item.parentNode.parentNode.parentNode.parentNode.parentNode;\n    if (!tr.id) {\n        tr = tr.parentNode;\n    }\n    for (var i = tr.id.length - 1; i >= 0; i--) {\n        if (tr.id.charAt(i) < '0' || tr.id.charAt(i) > '9') {\n            var menu = WebForm_GetElementById(tr.id.substr(0, i));\n            if (menu) {\n                item.menu = menu;\n                return menu;\n            }\n        }\n    }\n    return null;\n}\nfunction Menu_FindNext(item) {\n    var a = WebForm_GetElementByTagName(item, \"A\");\n    var parent = Menu_FindParentContainer(item);\n    var first = null;\n    if (parent) {\n        var links = WebForm_GetElementsByTagName(parent, \"A\");\n        var match = false;\n        for (var i = 0; i < links.length; i++) {\n            var link = links[i];\n            if (Menu_IsSelectable(link)) {\n                if (Menu_FindParentContainer(link) == parent) {\n                    if (match) {\n                        return link;\n                    }\n                    else if (!first) {\n                        first = link;\n                    }\n                }\n                if (!match && link == a) {\n                    match = true;\n                }\n            }\n        }\n    }\n    return first;\n}\nfunction Menu_FindParentContainer(item) {\n    if (item.menu_ParentContainerCache) return item.menu_ParentContainerCache;\n    var a = (item.tagName.toLowerCase() == \"a\") ? item : WebForm_GetElementByTagName(item, \"A\");\n    var menu = Menu_FindMenu(a);\n    if (menu) {\n        var parent = item;\n        while (parent && parent.tagName &&\n            parent.id != menu.id &&\n            parent.tagName.toLowerCase() != \"div\") {\n            parent = parent.parentNode;\n        }\n        item.menu_ParentContainerCache = parent;\n        return parent;\n    }\n}\nfunction Menu_FindParentItem(item) {\n    var parentContainer = Menu_FindParentContainer(item);\n    var parentContainerID = parentContainer.id;\n    var len = parentContainerID.length;\n    if (parentContainerID && parentContainerID.substr(len - 5) == \"Items\") {\n        var parentItemID = parentContainerID.substr(0, len - 5);\n        return WebForm_GetElementById(parentItemID);\n    }\n    return null;\n}\nfunction Menu_FindPrevious(item) {\n    var a = WebForm_GetElementByTagName(item, \"A\");\n    var parent = Menu_FindParentContainer(item);\n    var last = null;\n    if (parent) {\n        var links = WebForm_GetElementsByTagName(parent, \"A\");\n        for (var i = 0; i < links.length; i++) {\n            var link = links[i];\n            if (Menu_IsSelectable(link)) {\n                if (link == a && last) {\n                    return last;\n                }\n                if (Menu_FindParentContainer(link) == parent) {\n                    last = link;\n                }\n            }\n        }\n    }\n    return last;\n}\nfunction Menu_FindSubMenu(item) {\n    var tr = item.parentNode.parentNode.parentNode.parentNode.parentNode;\n    if (!tr.id) {\n        tr=tr.parentNode;\n    }\n    return WebForm_GetElementById(tr.id + \"Items\");\n}\nfunction Menu_Focus(item) {\n    if (item && item.focus) {\n        var pos = WebForm_GetElementPosition(item);\n        var parentContainer = Menu_FindParentContainer(item);\n        if (!parentContainer.offset) {\n            parentContainer.offset = 0;\n        }\n        var posParent = WebForm_GetElementPosition(parentContainer);\n        var delta;\n        if (pos.y + pos.height > posParent.y + parentContainer.offset + parentContainer.clippedHeight) {\n            delta = pos.y + pos.height - posParent.y - parentContainer.offset - parentContainer.clippedHeight;\n            PopOut_Scroll(parentContainer, delta);\n        }\n        else if (pos.y < posParent.y + parentContainer.offset) {\n            delta = posParent.y + parentContainer.offset - pos.y;\n            PopOut_Scroll(parentContainer, -delta);\n        }\n        PopOut_HideScrollers(parentContainer);\n        item.focus();\n    }\n}\nfunction Menu_GetData(item) {\n    if (!item.data) {\n        var a = (item.tagName.toLowerCase() == \"a\" ? item : WebForm_GetElementByTagName(item, \"a\"));\n        var menu = Menu_FindMenu(a);\n        try {\n            item.data = eval(menu.id + \"_Data\");\n        }\n        catch(e) {}\n    }\n    return item.data;\n}\nfunction Menu_HideItems(items) {\n    if (document.body.__oldOnClick) {\n        document.body.onclick = document.body.__oldOnClick;\n        document.body.__oldOnClick = null;\n    }\n    Menu_ClearInterval();\n    if (!items || ((typeof(items.tagName) == \"undefined\") && (items instanceof Event))) {\n        items = __rootMenuItem;\n    }\n    var table = items;\n    if ((typeof(table) == \"undefined\") || (table == null) || !table.tagName || (table.tagName.toLowerCase() != \"table\")) {\n        table = WebForm_GetElementByTagName(table, \"TABLE\");\n    }\n    if ((typeof(table) == \"undefined\") || (table == null) || !table.tagName || (table.tagName.toLowerCase() != \"table\")) {\n        return;\n    }\n    var rows = table.rows ? table.rows : table.firstChild.rows;\n    var isVertical = false;\n    for (var r = 0; r < rows.length; r++) {\n        if (rows[r].id) {\n            isVertical = true;\n            break;\n        }\n    }\n    var i, child, nextLevel;\n    if (isVertical) {\n        for(i = 0; i < rows.length; i++) {\n            if (rows[i].id) {\n                child = WebForm_GetElementById(rows[i].id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n            else if (rows[i].cells[0]) {\n                nextLevel = WebForm_GetElementByTagName(rows[i].cells[0], \"TABLE\");\n                if (nextLevel) {\n                    Menu_HideItems(nextLevel);\n                }\n            }\n        }\n    }\n    else if (rows[0]) {\n        for(i = 0; i < rows[0].cells.length; i++) {\n            if (rows[0].cells[i].id) {\n                child = WebForm_GetElementById(rows[0].cells[i].id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n            else {\n                nextLevel = WebForm_GetElementByTagName(rows[0].cells[i], \"TABLE\");\n                if (nextLevel) {\n                    Menu_HideItems(rows[0].cells[i].firstChild);\n                }\n            }\n        }\n    }\n    if (items && items.id) {\n        PopOut_Hide(items.id);\n    }\n}\nfunction Menu_HoverDisabled(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var data = Menu_GetData(item);\n    if (!data) return;\n    node = WebForm_GetElementByTagName(node, \"table\").rows[0].cells[0].childNodes[0];\n    if (data.disappearAfter >= 200) {\n        __disappearAfter = data.disappearAfter;\n    }\n    Menu_Expand(node, data.horizontalOffset, data.verticalOffset); \n}\nfunction Menu_HoverDynamic(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var data = Menu_GetData(item);\n    if (!data) return;\n    var nodeTable = WebForm_GetElementByTagName(node, \"table\");\n    if (data.hoverClass) {\n        nodeTable.hoverClass = data.hoverClass;\n        WebForm_AppendToClassName(nodeTable, data.hoverClass);\n    }\n    node = nodeTable.rows[0].cells[0].childNodes[0];\n    if (data.hoverHyperLinkClass) {\n        node.hoverHyperLinkClass = data.hoverHyperLinkClass;\n        WebForm_AppendToClassName(node, data.hoverHyperLinkClass);\n    }\n    if (data.disappearAfter >= 200) {\n        __disappearAfter = data.disappearAfter;\n    }\n    Menu_Expand(node, data.horizontalOffset, data.verticalOffset); \n}\nfunction Menu_HoverRoot(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var data = Menu_GetData(item);\n    if (!data) {\n        return null;\n    }\n    var nodeTable = WebForm_GetElementByTagName(node, \"table\");\n    if (data.staticHoverClass) {\n        nodeTable.hoverClass = data.staticHoverClass;\n        WebForm_AppendToClassName(nodeTable, data.staticHoverClass);\n    }\n    node = nodeTable.rows[0].cells[0].childNodes[0];\n    if (data.staticHoverHyperLinkClass) {\n        node.hoverHyperLinkClass = data.staticHoverHyperLinkClass;\n        WebForm_AppendToClassName(node, data.staticHoverHyperLinkClass);\n    }\n    return node;\n}\nfunction Menu_HoverStatic(item) {\n    var node = Menu_HoverRoot(item);\n    var data = Menu_GetData(item);\n    if (!data) return;\n    __disappearAfter = data.disappearAfter;\n    Menu_Expand(node, data.horizontalOffset, data.verticalOffset); \n}\nfunction Menu_IsHorizontal(item) {\n    if (item) {\n        var a = ((item.tagName && (item.tagName.toLowerCase == \"a\")) ? item : WebForm_GetElementByTagName(item, \"A\"));\n        if (!a) {\n            return false;\n        }\n        var td = a.parentNode.parentNode.parentNode.parentNode.parentNode;\n        if (td.id) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction Menu_IsSelectable(link) {\n    return (link && link.href)\n}\nfunction Menu_Key(item) {\n    var event;\n    if (item.currentTarget) {\n        event = item;\n        item = event.currentTarget;\n    }\n    else {\n        event = window.event;        \n    }\n    var key = (event ? event.keyCode : -1);\n    var data = Menu_GetData(item);\n    if (!data) return;\n    var horizontal = Menu_IsHorizontal(item);\n    var a = WebForm_GetElementByTagName(item, \"A\");\n    var nextItem, parentItem, previousItem;\n    if ((!horizontal && key == 38) || (horizontal && key == 37)) {\n        previousItem = Menu_FindPrevious(item);\n        while (previousItem && previousItem.disabled) {\n            previousItem = Menu_FindPrevious(previousItem);\n        }\n        if (previousItem) {\n            Menu_Focus(previousItem);\n            Menu_Expand(previousItem, data.horizontalOffset, data.verticalOffset, true);\n            event.cancelBubble = true;\n            if (event.stopPropagation) event.stopPropagation();\n            return;\n        }\n    }\n    if ((!horizontal && key == 40) || (horizontal && key == 39)) {\n        if (horizontal) {\n            var subMenu = Menu_FindSubMenu(a);\n            if (subMenu && subMenu.style && subMenu.style.visibility && \n                subMenu.style.visibility.toLowerCase() == \"hidden\") {\n                Menu_Expand(a, data.horizontalOffset, data.verticalOffset, true);\n                event.cancelBubble = true;\n                if (event.stopPropagation) event.stopPropagation();\n                return;\n            }\n        }\n        nextItem = Menu_FindNext(item);\n        while (nextItem && nextItem.disabled) {\n            nextItem = Menu_FindNext(nextItem);\n        }\n        if (nextItem) {\n            Menu_Focus(nextItem);\n            Menu_Expand(nextItem, data.horizontalOffset, data.verticalOffset, true);\n            event.cancelBubble = true;\n            if (event.stopPropagation) event.stopPropagation();\n            return;\n        }\n    }\n    if ((!horizontal && key == 39) || (horizontal && key == 40)) {\n        var children = Menu_Expand(a, data.horizontalOffset, data.verticalOffset, true);\n        if (children) {\n            var firstChild;\n            children = WebForm_GetElementsByTagName(children, \"A\");\n            for (var i = 0; i < children.length; i++) {\n                if (!children[i].disabled && Menu_IsSelectable(children[i])) {\n                    firstChild = children[i];\n                    break;\n                }\n            }\n            if (firstChild) {\n                Menu_Focus(firstChild);\n                Menu_Expand(firstChild, data.horizontalOffset, data.verticalOffset, true);\n                event.cancelBubble = true;\n                if (event.stopPropagation) event.stopPropagation();\n                return;\n            }\n        }\n        else {\n            parentItem = Menu_FindParentItem(item);\n            while (parentItem && !Menu_IsHorizontal(parentItem)) {\n                parentItem = Menu_FindParentItem(parentItem);\n            }\n            if (parentItem) {\n                nextItem = Menu_FindNext(parentItem);\n                while (nextItem && nextItem.disabled) {\n                    nextItem = Menu_FindNext(nextItem);\n                }\n                if (nextItem) {\n                    Menu_Focus(nextItem);\n                    Menu_Expand(nextItem, data.horizontalOffset, data.verticalOffset, true);\n                    event.cancelBubble = true;\n                    if (event.stopPropagation) event.stopPropagation();\n                    return;\n                }\n            }\n        }\n    }\n    if ((!horizontal && key == 37) || (horizontal && key == 38)) {\n        parentItem = Menu_FindParentItem(item);\n        if (parentItem) {\n            if (Menu_IsHorizontal(parentItem)) {\n                previousItem = Menu_FindPrevious(parentItem);\n                while (previousItem && previousItem.disabled) {\n                    previousItem = Menu_FindPrevious(previousItem);\n                }\n                if (previousItem) {\n                    Menu_Focus(previousItem);\n                    Menu_Expand(previousItem, data.horizontalOffset, data.verticalOffset, true);\n                    event.cancelBubble = true;\n                    if (event.stopPropagation) event.stopPropagation();\n                    return;\n                }\n            }\n            var parentA = WebForm_GetElementByTagName(parentItem, \"A\");\n            if (parentA) {\n                Menu_Focus(parentA);\n            }\n            Menu_ResetSiblings(parentItem);\n            event.cancelBubble = true;\n            if (event.stopPropagation) event.stopPropagation();\n            return;\n        }\n    }\n    if (key == 27) {\n        Menu_HideItems();\n        event.cancelBubble = true;\n        if (event.stopPropagation) event.stopPropagation();\n        return;\n    }\n}\nfunction Menu_ResetSiblings(item) {\n    var table = (item.tagName.toLowerCase() == \"td\") ?\n        item.parentNode.parentNode.parentNode :\n        item.parentNode.parentNode;\n    var isVertical = false;\n    for (var r = 0; r < table.rows.length; r++) {\n        if (table.rows[r].id) {\n            isVertical = true;\n            break;\n        }\n    }\n    var i, child, childNode;\n    if (isVertical) {\n        for(i = 0; i < table.rows.length; i++) {\n            childNode = table.rows[i];\n            if (childNode != item) {\n                child = WebForm_GetElementById(childNode.id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n        }\n    }\n    else {\n        for(i = 0; i < table.rows[0].cells.length; i++) {\n            childNode = table.rows[0].cells[i];\n            if (childNode != item) {\n                child = WebForm_GetElementById(childNode.id + \"Items\");\n                if (child) {\n                    Menu_HideItems(child);\n                }\n            }\n        }\n    }\n    Menu_ResetTopMenus(table, table, 0, true);\n}\nfunction Menu_ResetTopMenus(table, doNotReset, level, up) {\n    var i, child, childNode;\n    if (up && table.id == \"\") {\n        var parentTable = table.parentNode.parentNode.parentNode.parentNode;\n        if (parentTable.tagName.toLowerCase() == \"table\") {\n            Menu_ResetTopMenus(parentTable, doNotReset, level + 1, true);\n        }\n    }\n    else {\n        if (level == 0 && table != doNotReset) {\n            if (table.rows[0].id) {\n                for(i = 0; i < table.rows.length; i++) {\n                    childNode = table.rows[i];\n                    child = WebForm_GetElementById(childNode.id + \"Items\");\n                    if (child) {\n                        Menu_HideItems(child);\n                    }\n                }\n            }\n            else {\n                for(i = 0; i < table.rows[0].cells.length; i++) {\n                    childNode = table.rows[0].cells[i];\n                    child = WebForm_GetElementById(childNode.id + \"Items\");\n                    if (child) {\n                        Menu_HideItems(child);\n                    }\n                }\n            }\n        }\n        else if (level > 0) {\n            for (i = 0; i < table.rows.length; i++) {\n                for (var j = 0; j < table.rows[i].cells.length; j++) {\n                    var subTable = table.rows[i].cells[j].firstChild;\n                    if (subTable && subTable.tagName.toLowerCase() == \"table\") {\n                        Menu_ResetTopMenus(subTable, doNotReset, level - 1, false);\n                    }\n                }\n            }\n        }\n    }\n}\nfunction Menu_RestoreInterval() {\n    if (__menuInterval && __rootMenuItem) {\n        Menu_ClearInterval();\n        __menuInterval = window.setInterval(\"Menu_HideItems()\", __disappearAfter);\n    }\n}\nfunction Menu_SetRoot(item) {\n    var newRoot = Menu_FindMenu(item);\n    if (newRoot) {\n        if (__rootMenuItem && __rootMenuItem != newRoot) {\n            Menu_HideItems();\n        }\n        __rootMenuItem = newRoot;\n    }\n}\nfunction Menu_Unhover(item) {\n    var node = (item.tagName.toLowerCase() == \"td\") ?\n        item:\n        item.cells[0];\n    var nodeTable = WebForm_GetElementByTagName(node, \"table\");\n    if (nodeTable.hoverClass) {\n        WebForm_RemoveClassName(nodeTable, nodeTable.hoverClass);\n    }\n    node = nodeTable.rows[0].cells[0].childNodes[0];\n    if (node.hoverHyperLinkClass) {\n        WebForm_RemoveClassName(node, node.hoverHyperLinkClass);\n    }\n    Menu_Collapse(node);\n}\nfunction PopOut_Clip(element, y, height) {\n    if (element && element.style) {\n        element.style.clip = \"rect(\" + y + \"px auto \" + (y + height) + \"px auto)\";\n        element.style.overflow = \"hidden\";\n    }\n}\nfunction PopOut_Down(scroller) {\n    Menu_ClearInterval();\n    var panel;\n    if (scroller) {\n        panel = scroller.parentNode\n    }\n    else {\n        panel = __scrollPanel;\n    }\n    if (panel && ((panel.offset + panel.clippedHeight) < panel.physicalHeight)) {\n        PopOut_Scroll(panel, 2)\n        __scrollPanel = panel;\n        PopOut_ShowScrollers(panel);\n        PopOut_Stop();\n        __scrollPanel.interval = window.setInterval(\"PopOut_Down()\", 8);\n    }\n    else {\n        PopOut_ShowScrollers(panel);\n    }\n}\nfunction PopOut_Hide(panelId) {\n    var panel = WebForm_GetElementById(panelId);\n    if (panel && panel.tagName.toLowerCase() == \"div\") {\n        panel.style.visibility = \"hidden\";\n        panel.style.display = \"none\";\n        panel.offset = 0;\n        panel.scrollTop = 0;\n        var table = WebForm_GetElementByTagName(panel, \"TABLE\");\n        if (table) {\n            WebForm_SetElementY(table, 0);\n        }\n        if (window.navigator && window.navigator.appName == \"Microsoft Internet Explorer\" &&\n            !window.opera) {\n            var childFrameId = panel.id + \"_MenuIFrame\";\n            var childFrame = WebForm_GetElementById(childFrameId);\n            if (childFrame) {\n                childFrame.style.display = \"none\";\n            }\n        }\n    }\n}\nfunction PopOut_HideScrollers(panel) {\n    if (panel && panel.style) {\n        var up = WebForm_GetElementById(panel.id + \"Up\");\n        var dn = WebForm_GetElementById(panel.id + \"Dn\");\n        if (up) {\n            up.style.visibility = \"hidden\";\n            up.style.display = \"none\";\n        }\n        if (dn) {\n            dn.style.visibility = \"hidden\";\n            dn.style.display = \"none\";\n        }\n    }\n}\nfunction PopOut_Position(panel, hideScrollers) {\n    if (window.opera) {\n        panel.parentNode.removeChild(panel);\n        document.forms[0].appendChild(panel);\n    }\n    var rel = WebForm_GetElementById(panel.rel);\n    var relTable = WebForm_GetElementByTagName(rel, \"TABLE\");\n    var relCoordinates = WebForm_GetElementPosition(relTable ? relTable : rel);\n    var panelCoordinates = WebForm_GetElementPosition(panel);\n    var panelHeight = ((typeof(panel.physicalHeight) != \"undefined\") && (panel.physicalHeight != null)) ?\n        panel.physicalHeight :\n        panelCoordinates.height;\n    panel.physicalHeight = panelHeight;\n    var panelParentCoordinates;\n    if (panel.offsetParent) {\n        panelParentCoordinates = WebForm_GetElementPosition(panel.offsetParent);\n    }\n    else {\n        panelParentCoordinates = new Object();\n        panelParentCoordinates.x = 0;\n        panelParentCoordinates.y = 0;\n    }\n    var overflowElement = WebForm_GetElementById(\"__overFlowElement\");\n    if (!overflowElement) {\n        overflowElement = document.createElement(\"img\");\n        overflowElement.id=\"__overFlowElement\";\n        WebForm_SetElementWidth(overflowElement, 1);\n        document.body.appendChild(overflowElement);\n    }\n    WebForm_SetElementHeight(overflowElement, panelHeight + relCoordinates.y + parseInt(panel.y ? panel.y : 0));\n    overflowElement.style.visibility = \"visible\";\n    overflowElement.style.display = \"inline\";\n    var clientHeight = 0;\n    var clientWidth = 0;\n    if (window.innerHeight) {\n        clientHeight = window.innerHeight;\n        clientWidth = window.innerWidth;\n    }\n    else if (document.documentElement && document.documentElement.clientHeight) {\n        clientHeight = document.documentElement.clientHeight;\n        clientWidth = document.documentElement.clientWidth;\n    }\n    else if (document.body && document.body.clientHeight) {\n        clientHeight = document.body.clientHeight;\n        clientWidth = document.body.clientWidth;\n    }\n    var scrollTop = 0;\n    var scrollLeft = 0;\n    if (typeof(window.pageYOffset) != \"undefined\") {\n        scrollTop = window.pageYOffset;\n        scrollLeft = window.pageXOffset;\n    }\n    else if (document.documentElement && (typeof(document.documentElement.scrollTop) != \"undefined\")) {\n        scrollTop = document.documentElement.scrollTop;\n        scrollLeft = document.documentElement.scrollLeft;\n    }\n    else if (document.body && (typeof(document.body.scrollTop) != \"undefined\")) {\n        scrollTop = document.body.scrollTop;\n        scrollLeft = document.body.scrollLeft;\n    }\n    overflowElement.style.visibility = \"hidden\";\n    overflowElement.style.display = \"none\";\n    var bottomWindowBorder = clientHeight + scrollTop;\n    var rightWindowBorder = clientWidth + scrollLeft;\n    var position = panel.pos;\n    if ((typeof(position) == \"undefined\") || (position == null) || (position == \"\")) {\n        position = (WebForm_GetElementDir(rel) == \"rtl\" ? \"middleleft\" : \"middleright\");\n    }\n    position = position.toLowerCase();\n    var y = relCoordinates.y + parseInt(panel.y ? panel.y : 0) - panelParentCoordinates.y;\n    var borderParent = (rel && rel.parentNode && rel.parentNode.parentNode && rel.parentNode.parentNode.parentNode\n        && rel.parentNode.parentNode.parentNode.tagName.toLowerCase() == \"div\") ?\n        rel.parentNode.parentNode.parentNode : null;\n    WebForm_SetElementY(panel, y);\n    PopOut_SetPanelHeight(panel, panelHeight, true);\n    var clip = false;\n    var overflow;\n    if (position.indexOf(\"top\") != -1) {\n        y -= panelHeight;\n        WebForm_SetElementY(panel, y); \n        if (y < -panelParentCoordinates.y) {\n            y = -panelParentCoordinates.y;\n            WebForm_SetElementY(panel, y); \n            if (panelHeight > clientHeight - 2) {\n                clip = true;\n                PopOut_SetPanelHeight(panel, clientHeight - 2);\n            }\n        }\n    }\n    else {\n        if (position.indexOf(\"bottom\") != -1) {\n            y += relCoordinates.height;\n            WebForm_SetElementY(panel, y); \n        }\n        overflow = y + panelParentCoordinates.y + panelHeight - bottomWindowBorder;\n        if (overflow > 0) {\n            y -= overflow;\n            WebForm_SetElementY(panel, y); \n            if (y < -panelParentCoordinates.y) {\n                y = 2 - panelParentCoordinates.y + scrollTop;\n                WebForm_SetElementY(panel, y); \n                clip = true;\n                PopOut_SetPanelHeight(panel, clientHeight - 2);\n            }\n        }\n    }\n    if (!clip) {\n        PopOut_SetPanelHeight(panel, panel.clippedHeight, true);\n    }\n    var panelParentOffsetY = 0;\n    if (panel.offsetParent) {\n        panelParentOffsetY = WebForm_GetElementPosition(panel.offsetParent).y;\n    }\n    var panelY = ((typeof(panel.originY) != \"undefined\") && (panel.originY != null)) ?\n        panel.originY :\n        y - panelParentOffsetY;\n    panel.originY = panelY;\n    if (!hideScrollers) {\n        PopOut_ShowScrollers(panel);\n    }\n    else {\n        PopOut_HideScrollers(panel);\n    }\n    var x = relCoordinates.x + parseInt(panel.x ? panel.x : 0) - panelParentCoordinates.x;\n    if (borderParent && borderParent.clientLeft) {\n        x += 2 * borderParent.clientLeft;\n    }\n    WebForm_SetElementX(panel, x);\n    if (position.indexOf(\"left\") != -1) {\n        x -= panelCoordinates.width;\n        WebForm_SetElementX(panel, x);\n        if (x < -panelParentCoordinates.x) {\n            WebForm_SetElementX(panel, -panelParentCoordinates.x);\n        }\n    }\n    else {\n        if (position.indexOf(\"right\") != -1) {\n            x += relCoordinates.width;\n            WebForm_SetElementX(panel, x);\n        }\n        overflow = x + panelParentCoordinates.x + panelCoordinates.width - rightWindowBorder;\n        if (overflow > 0) {\n            if (position.indexOf(\"bottom\") == -1 && relCoordinates.x > panelCoordinates.width) {\n                x -= relCoordinates.width + panelCoordinates.width;\n            }\n            else {\n                x -= overflow;\n            }\n            WebForm_SetElementX(panel, x);\n            if (x < -panelParentCoordinates.x) {\n                WebForm_SetElementX(panel, -panelParentCoordinates.x);\n            }\n        }\n    }\n}\nfunction PopOut_Scroll(panel, offsetDelta) {\n    var table = WebForm_GetElementByTagName(panel, \"TABLE\");\n    if (!table) return;\n    table.style.position = \"relative\";\n    var tableY = (table.style.top ? parseInt(table.style.top) : 0);\n    panel.offset += offsetDelta;\n    WebForm_SetElementY(table, tableY - offsetDelta);\n}\nfunction PopOut_SetPanelHeight(element, height, doNotClip) {\n    if (element && element.style) {\n        var size = WebForm_GetElementPosition(element);\n        element.physicalWidth = size.width;\n        element.clippedHeight = height;\n        WebForm_SetElementHeight(element, height - (element.clientTop ? (2 * element.clientTop) : 0));\n        if (doNotClip && element.style) {\n            element.style.clip = \"rect(auto auto auto auto)\";\n        }\n        else {\n            PopOut_Clip(element, 0, height);\n        }\n    }\n}\nfunction PopOut_Show(panelId, hideScrollers, data) {\n    var panel = WebForm_GetElementById(panelId);\n    if (panel && panel.tagName.toLowerCase() == \"div\") {\n        panel.style.visibility = \"visible\";\n        panel.style.display = \"inline\";\n        if (!panel.offset || hideScrollers) {\n            panel.scrollTop = 0;\n            panel.offset = 0;\n            var table = WebForm_GetElementByTagName(panel, \"TABLE\");\n            if (table) {\n                WebForm_SetElementY(table, 0);\n            }\n        }\n        PopOut_Position(panel, hideScrollers);\n        var z = 1;\n        var isIE = window.navigator && window.navigator.appName == \"Microsoft Internet Explorer\" && !window.opera;\n        if (isIE && data) {\n            var childFrameId = panel.id + \"_MenuIFrame\";\n            var childFrame = WebForm_GetElementById(childFrameId);\n            var parent = panel.offsetParent;\n            if (!childFrame) {\n                childFrame = document.createElement(\"iframe\");\n                childFrame.id = childFrameId;\n                childFrame.src = (data.iframeUrl ? data.iframeUrl : \"about:blank\");\n                childFrame.style.position = \"absolute\";\n                childFrame.style.display = \"none\";\n                childFrame.scrolling = \"no\";\n                childFrame.frameBorder = \"0\";\n                if (parent.tagName.toLowerCase() == \"html\") {\n                    document.body.appendChild(childFrame);\n                }\n                else {\n                    parent.appendChild(childFrame);\n                }\n            }\n            var pos = WebForm_GetElementPosition(panel);\n            var parentPos = WebForm_GetElementPosition(parent);\n            WebForm_SetElementX(childFrame, pos.x - parentPos.x);\n            WebForm_SetElementY(childFrame, pos.y - parentPos.y);\n            WebForm_SetElementWidth(childFrame, pos.width);\n            WebForm_SetElementHeight(childFrame, pos.height);\n            childFrame.style.display = \"block\";\n            if (panel.currentStyle && panel.currentStyle.zIndex && panel.currentStyle.zIndex != \"auto\") {\n                z = panel.currentStyle.zIndex;\n            }\n            else if (panel.style.zIndex) {\n                z = panel.style.zIndex;\n            }\n        }\n        panel.style.zIndex = z;\n    }\n}\nfunction PopOut_ShowScrollers(panel) {\n    if (panel && panel.style) {\n        var up = WebForm_GetElementById(panel.id + \"Up\");\n        var dn = WebForm_GetElementById(panel.id + \"Dn\");\n        var cnt = 0;\n        if (up && dn) {\n            if (panel.offset && panel.offset > 0) {\n                up.style.visibility = \"visible\";\n                up.style.display = \"inline\";\n                cnt++;\n                if (panel.clientWidth) {\n                    WebForm_SetElementWidth(up, panel.clientWidth\n                        - (up.clientLeft ? (2 * up.clientLeft) : 0));\n                }\n                WebForm_SetElementY(up, 0);\n            }\n            else {\n                up.style.visibility = \"hidden\";\n                up.style.display = \"none\";\n            }\n            if (panel.offset + panel.clippedHeight + 2 <= panel.physicalHeight) {\n                dn.style.visibility = \"visible\";\n                dn.style.display = \"inline\";\n                cnt++;\n                if (panel.clientWidth) {\n                    WebForm_SetElementWidth(dn, panel.clientWidth\n                        - (dn.clientLeft ? (2 * dn.clientLeft) : 0));\n                }\n                WebForm_SetElementY(dn, panel.clippedHeight - WebForm_GetElementPosition(dn).height\n                    - (panel.clientTop ? (2 * panel.clientTop) : 0));\n            }\n            else {\n                dn.style.visibility = \"hidden\";\n                dn.style.display = \"none\";\n            }\n            if (cnt == 0) {\n                panel.style.clip = \"rect(auto auto auto auto)\";\n            }\n        }\n    }\n}\nfunction PopOut_Stop() {\n    if (__scrollPanel && __scrollPanel.interval) {\n        window.clearInterval(__scrollPanel.interval);\n    }\n    Menu_RestoreInterval();\n}\nfunction PopOut_Up(scroller) {\n    Menu_ClearInterval();\n    var panel;\n    if (scroller) {\n        panel = scroller.parentNode\n    }\n    else {\n        panel = __scrollPanel;\n    }\n    if (panel && panel.offset && panel.offset > 0) {\n        PopOut_Scroll(panel, -2);\n        __scrollPanel = panel;\n        PopOut_ShowScrollers(panel);\n        PopOut_Stop();\n        __scrollPanel.interval = window.setInterval(\"PopOut_Up()\", 8);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/MenuStandards.js",
    "content": "﻿//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/MenuStandards.js\nif (!window.Sys) { window.Sys = {}; }\nif (!Sys.WebForms) { Sys.WebForms = {}; }\nSys.WebForms.Menu = function(options) {\n    this.items = [];\n    this.depth = options.depth || 1;\n    this.parentMenuItem = options.parentMenuItem;\n    this.element = Sys.WebForms.Menu._domHelper.getElement(options.element);\n    if (this.element.tagName === 'DIV') {\n        var containerElement = this.element;\n        this.element = Sys.WebForms.Menu._domHelper.firstChild(containerElement);\n        this.element.tabIndex = options.tabIndex || 0;\n        options.element = containerElement;\n        options.menu = this;\n        this.container = new Sys.WebForms._MenuContainer(options);\n        Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? \"right\" : \"left\");\n    }\n    else {\n        this.container = options.container;\n        this.keyMap = options.keyMap;\n    }\n    Sys.WebForms.Menu._elementObjectMapper.map(this.element, this);\n    if (this.parentMenuItem && this.parentMenuItem.parentMenu) {\n        this.parentMenu = this.parentMenuItem.parentMenu;\n        this.rootMenu = this.parentMenu.rootMenu;\n        if (!this.element.id) {\n            this.element.id = (this.container.element.id || 'menu') + ':submenu:' + Sys.WebForms.Menu._elementObjectMapper._computedId;\n        }\n        if (this.depth > this.container.staticDisplayLevels) {\n            this.displayMode = \"dynamic\";\n            this.element.style.display = \"none\";\n            this.element.style.position = \"absolute\";\n            if (this.rootMenu && this.container.orientation === 'horizontal' && this.parentMenu.isStatic()) {\n                this.element.style.top = \"100%\";\n                if (this.container.rightToLeft) {\n                    this.element.style.right = \"0px\";\n                }\n                else {\n                    this.element.style.left = \"0px\";\n                }\n            }\n            else {\n                this.element.style.top = \"0px\";\n                if (this.container.rightToLeft) {\n                    this.element.style.right = \"100%\";\n                }\n                else {\n                    this.element.style.left = \"100%\";\n                }\n            }\n            if (this.container.rightToLeft) {\n                this.keyMap = Sys.WebForms.Menu._keyboardMapping.verticalRtl;\n            }\n            else {\n                this.keyMap = Sys.WebForms.Menu._keyboardMapping.vertical;\n            }\n        }\n        else {\n            this.displayMode = \"static\";\n            this.element.style.display = \"block\";\n            if (this.container.orientation === 'horizontal') {\n                Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? \"right\" : \"left\");\n            }\n        }\n    }\n    Sys.WebForms.Menu._domHelper.appendCssClass(this.element, this.displayMode);\n    var children = this.element.childNodes;\n    var count = children.length;\n    for (var i = 0; i < count; i++) {\n        var node = children[i];\n        if (node.nodeType !== 1) {   \n            continue;\n        }\n        var topLevelMenuItem = null;\n        if (this.parentMenuItem) {\n            topLevelMenuItem = this.parentMenuItem.topLevelMenuItem;\n        }\n        var menuItem = new Sys.WebForms.MenuItem(this, node, topLevelMenuItem);\n        var previousMenuItem = this.items[this.items.length - 1];\n        if (previousMenuItem) {\n            menuItem.previousSibling = previousMenuItem;\n            previousMenuItem.nextSibling = menuItem;\n        }\n        this.items[this.items.length] = menuItem;\n    }\n};\nSys.WebForms.Menu.prototype = {\n    blur: function() { if (this.container) this.container.blur(); },\n    collapse: function() {\n        this.each(function(menuItem) {\n            menuItem.hover(false);\n            menuItem.blur();\n            var childMenu = menuItem.childMenu;\n            if (childMenu) {\n                childMenu.collapse();\n            }\n        });\n        this.hide();\n    },\n    doDispose: function() { this.each(function(item) { item.doDispose(); }); },\n    each: function(fn) {\n        var count = this.items.length;\n        for (var i = 0; i < count; i++) {\n            fn(this.items[i]);\n        }\n    },\n    firstChild: function() { return this.items[0]; },\n    focus: function() { if (this.container) this.container.focus(); },\n    get_displayed: function() { return this.element.style.display !== 'none'; },\n    get_focused: function() {\n        if (this.container) {\n            return this.container.focused;\n        }\n        return false;\n    },\n    handleKeyPress: function(keyCode) {\n        if (this.keyMap.contains(keyCode)) {\n            if (this.container.focusedMenuItem) {\n                this.container.focusedMenuItem.navigate(keyCode);\n                return;\n            }\n            var firstChild = this.firstChild();\n            if (firstChild) {\n                this.container.navigateTo(firstChild);\n            }\n        }\n    },\n    hide: function() {\n        if (!this.get_displayed()) {\n            return;\n        }\n        this.each(function(item) {\n            if (item.childMenu) {\n                item.childMenu.hide();\n            }\n        });\n        if (!this.isRoot()) {\n            if (this.get_focused()) {\n                this.container.navigateTo(this.parentMenuItem);\n            }\n            this.element.style.display = 'none';\n        }\n    },\n    isRoot: function() { return this.rootMenu === this; },\n    isStatic: function() { return this.displayMode === 'static'; },\n    lastChild: function() { return this.items[this.items.length - 1]; },\n    show: function() { this.element.style.display = 'block'; }\n};\nif (Sys.WebForms.Menu.registerClass) {\n    Sys.WebForms.Menu.registerClass('Sys.WebForms.Menu');\n}\nSys.WebForms.MenuItem = function(parentMenu, listElement, topLevelMenuItem) {\n    this.keyMap = parentMenu.keyMap;\n    this.parentMenu = parentMenu;\n    this.container = parentMenu.container;\n    this.element = listElement;\n    this.topLevelMenuItem = topLevelMenuItem || this;\n    this._anchor = Sys.WebForms.Menu._domHelper.firstChild(listElement);\n    while (this._anchor && this._anchor.tagName !== 'A') {\n        this._anchor = Sys.WebForms.Menu._domHelper.nextSibling(this._anchor);\n    }\n    if (this._anchor) {\n        this._anchor.tabIndex = -1;\n        var subMenu = this._anchor;\n        while (subMenu && subMenu.tagName !== 'UL') {\n            subMenu = Sys.WebForms.Menu._domHelper.nextSibling(subMenu);\n        }\n        if (subMenu) {\n            this.childMenu = new Sys.WebForms.Menu({ element: subMenu, parentMenuItem: this, depth: parentMenu.depth + 1, container: this.container, keyMap: this.keyMap });\n            if (!this.childMenu.isStatic()) {\n                Sys.WebForms.Menu._domHelper.appendCssClass(this.element, 'has-popup');\n                Sys.WebForms.Menu._domHelper.appendAttributeValue(this.element, 'aria-haspopup', this.childMenu.element.id);\n            }\n        }\n    }\n    Sys.WebForms.Menu._elementObjectMapper.map(listElement, this);\n    Sys.WebForms.Menu._domHelper.appendAttributeValue(listElement, 'role', 'menuitem');\n    Sys.WebForms.Menu._domHelper.appendCssClass(listElement, parentMenu.displayMode);\n    if (this._anchor) {\n        Sys.WebForms.Menu._domHelper.appendCssClass(this._anchor, parentMenu.displayMode);\n    }\n    this.element.style.position = \"relative\";\n    if (this.parentMenu.depth == 1 && this.container.orientation == 'horizontal') {\n        Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? \"right\" : \"left\");\n    }\n    if (!this.container.disabled) {\n        Sys.WebForms.Menu._domHelper.addEvent(this.element, 'mouseover', Sys.WebForms.MenuItem._onmouseover);\n        Sys.WebForms.Menu._domHelper.addEvent(this.element, 'mouseout', Sys.WebForms.MenuItem._onmouseout);\n    }\n};\nSys.WebForms.MenuItem.prototype = {\n    applyUp: function(fn, condition) {\n        condition = condition || function(menuItem) { return menuItem; };\n        var menuItem = this;\n        var lastMenuItem = null;\n        while (condition(menuItem)) {\n            fn(menuItem);\n            lastMenuItem = menuItem;\n            menuItem = menuItem.parentMenu.parentMenuItem;\n        }\n        return lastMenuItem;\n    },\n    blur: function() { this.setTabIndex(-1); },\n    doDispose: function() {\n        Sys.WebForms.Menu._domHelper.removeEvent(this.element, 'mouseover', Sys.WebForms.MenuItem._onmouseover);\n        Sys.WebForms.Menu._domHelper.removeEvent(this.element, 'mouseout', Sys.WebForms.MenuItem._onmouseout);\n        if (this.childMenu) {\n            this.childMenu.doDispose();\n        }\n    },\n    focus: function() {\n        if (!this.parentMenu.get_displayed()) {\n            this.parentMenu.show();\n        }\n        this.setTabIndex(0);\n        this.container.focused = true;\n        this._anchor.focus();\n    },\n    get_highlighted: function() { return /(^|\\s)highlighted(\\s|$)/.test(this._anchor.className); },\n    getTabIndex: function() { return this._anchor.tabIndex; },\n    highlight: function(highlighting) {\n        if (highlighting) {\n            this.applyUp(function(menuItem) {\n                menuItem.parentMenu.parentMenuItem.highlight(true);\n            },\n            function(menuItem) {\n                return !menuItem.parentMenu.isStatic() && menuItem.parentMenu.parentMenuItem;\n            }\n        );\n            Sys.WebForms.Menu._domHelper.appendCssClass(this._anchor, 'highlighted');\n        }\n        else {\n            Sys.WebForms.Menu._domHelper.removeCssClass(this._anchor, 'highlighted');\n            this.setTabIndex(-1);\n        }\n    },\n    hover: function(hovering) {\n        if (hovering) {\n            var currentHoveredItem = this.container.hoveredMenuItem;\n            if (currentHoveredItem) {\n                currentHoveredItem.hover(false);\n            }\n            var currentFocusedItem = this.container.focusedMenuItem;\n            if (currentFocusedItem && currentFocusedItem !== this) {\n                currentFocusedItem.hover(false);\n            }\n            this.applyUp(function(menuItem) {\n                if (menuItem.childMenu && !menuItem.childMenu.get_displayed()) {\n                    menuItem.childMenu.show();\n                }\n            });\n            this.container.hoveredMenuItem = this;\n            this.highlight(true);\n        }\n        else {\n            var menuItem = this;\n            while (menuItem) {\n                menuItem.highlight(false);\n                if (menuItem.childMenu) {\n                    if (!menuItem.childMenu.isStatic()) {\n                        menuItem.childMenu.hide();\n                    }\n                }\n                menuItem = menuItem.parentMenu.parentMenuItem;\n            }\n        }\n    },\n    isSiblingOf: function(menuItem) { return menuItem.parentMenu === this.parentMenu; },\n    mouseout: function() {\n        var menuItem = this,\n            id = this.container.pendingMouseoutId,\n            disappearAfter = this.container.disappearAfter;\n        if (id) {\n            window.clearTimeout(id);\n        }\n        if (disappearAfter > -1) {\n            this.container.pendingMouseoutId =\n                window.setTimeout(function() { menuItem.hover(false); }, disappearAfter);\n        }\n    },\n    mouseover: function() {\n        var id = this.container.pendingMouseoutId;\n        if (id) {\n            window.clearTimeout(id);\n            this.container.pendingMouseoutId = null;\n        }\n        this.hover(true);\n        if (this.container.menu.get_focused()) {\n            this.container.navigateTo(this);\n        }\n    },\n    navigate: function(keyCode) {\n        switch (this.keyMap[keyCode]) {\n            case this.keyMap.next:\n                this.navigateNext();\n                break;\n            case this.keyMap.previous:\n                this.navigatePrevious();\n                break;\n            case this.keyMap.child:\n                this.navigateChild();\n                break;\n            case this.keyMap.parent:\n                this.navigateParent();\n                break;\n            case this.keyMap.tab:\n                this.navigateOut();\n                break;\n        }\n    },\n    navigateChild: function() {\n        var subMenu = this.childMenu;\n        if (subMenu) {\n            var firstChild = subMenu.firstChild();\n            if (firstChild) {\n                this.container.navigateTo(firstChild);\n            }\n        }\n        else {\n            if (this.container.orientation === 'horizontal') {\n                var nextItem = this.topLevelMenuItem.nextSibling || this.topLevelMenuItem.parentMenu.firstChild();\n                if (nextItem == this.topLevelMenuItem) {\n                    return;\n                }\n                this.topLevelMenuItem.childMenu.hide();\n                this.container.navigateTo(nextItem);\n                if (nextItem.childMenu) {\n                    this.container.navigateTo(nextItem.childMenu.firstChild());\n                }\n            }\n        }\n    },\n    navigateNext: function() {\n        if (this.childMenu) {\n            this.childMenu.hide();\n        }\n        var nextMenuItem = this.nextSibling;\n        if (!nextMenuItem && this.parentMenu.isRoot()) {\n            nextMenuItem = this.parentMenu.parentMenuItem;\n            if (nextMenuItem) {\n                nextMenuItem = nextMenuItem.nextSibling;\n            }\n        }\n        if (!nextMenuItem) {\n            nextMenuItem = this.parentMenu.firstChild();\n        }\n        if (nextMenuItem) {\n            this.container.navigateTo(nextMenuItem);\n        }\n    },\n    navigateOut: function() {\n        this.parentMenu.blur();\n    },\n    navigateParent: function() {\n        var parentMenu = this.parentMenu,\n            horizontal = this.container.orientation === 'horizontal';\n        if (!parentMenu) return;\n        if (horizontal && this.childMenu && parentMenu.isRoot()) {\n            this.navigateChild();\n            return;\n        }\n        if (parentMenu.parentMenuItem && !parentMenu.isRoot()) {\n            if (horizontal && this.parentMenu.depth === 2) {\n                var previousItem = this.parentMenu.parentMenuItem.previousSibling;\n                if (!previousItem) {\n                    previousItem = this.parentMenu.rootMenu.lastChild();\n                }\n                this.topLevelMenuItem.childMenu.hide();\n                this.container.navigateTo(previousItem);\n                if (previousItem.childMenu) {\n                    this.container.navigateTo(previousItem.childMenu.firstChild());\n                }\n            }\n            else {\n                this.parentMenu.hide();\n            }\n        }\n    },\n    navigatePrevious: function() {\n        if (this.childMenu) {\n            this.childMenu.hide();\n        }\n        var previousMenuItem = this.previousSibling;\n        if (previousMenuItem) {\n            var childMenu = previousMenuItem.childMenu;\n            if (childMenu && childMenu.isRoot()) {\n                previousMenuItem = childMenu.lastChild();\n            }\n        }\n        if (!previousMenuItem && this.parentMenu.isRoot()) {\n            previousMenuItem = this.parentMenu.parentMenuItem;\n        }\n        if (!previousMenuItem) {\n            previousMenuItem = this.parentMenu.lastChild();\n        }\n        if (previousMenuItem) {\n            this.container.navigateTo(previousMenuItem);\n        }\n    },\n    setTabIndex: function(index) { if (this._anchor) this._anchor.tabIndex = index; }\n};\nSys.WebForms.MenuItem._onmouseout = function(e) {\n    var menuItem = Sys.WebForms.Menu._elementObjectMapper.getMappedObject(this);\n    if (!menuItem) {\n        return;\n    }\n    menuItem.mouseout();\n    Sys.WebForms.Menu._domHelper.cancelEvent(e);\n};\nSys.WebForms.MenuItem._onmouseover = function(e) {\n    var menuItem = Sys.WebForms.Menu._elementObjectMapper.getMappedObject(this);\n    if (!menuItem) {\n        return;\n    }\n    menuItem.mouseover();\n    Sys.WebForms.Menu._domHelper.cancelEvent(e);\n};\nSys.WebForms.Menu._domHelper = {\n    addEvent: function(element, eventName, fn, useCapture) {\n        if (element.addEventListener) {\n            element.addEventListener(eventName, fn, !!useCapture);\n        }\n        else {\n            element['on' + eventName] = fn;\n        }\n    },\n    appendAttributeValue: function(element, name, value) {\n        this.updateAttributeValue('append', element, name, value);\n    },\n    appendCssClass: function(element, value) {\n        this.updateClassName('append', element, name, value);\n    },\n    appendString: function(getString, setString, value) {\n        var currentValue = getString();\n        if (!currentValue) {\n            setString(value);\n            return;\n        }\n        var regex = this._regexes.getRegex('(^| )' + value + '($| )');\n        if (regex.test(currentValue)) {\n            return;\n        }\n        setString(currentValue + ' ' + value);\n    },\n    cancelEvent: function(e) {\n        var event = e || window.event;\n        if (event) {\n            event.cancelBubble = true;\n            if (event.stopPropagation) {\n                event.stopPropagation();\n            }\n        }\n    },\n    contains: function(ancestor, descendant) {\n        for (; descendant && (descendant !== ancestor); descendant = descendant.parentNode) { }\n        return !!descendant;\n    },\n    firstChild: function(element) {\n        var child = element.firstChild;\n        if (child && child.nodeType !== 1) {   \n            child = this.nextSibling(child);\n        }\n        return child;\n    },\n    getElement: function(elementOrId) { return typeof elementOrId === 'string' ? document.getElementById(elementOrId) : elementOrId; },\n    getElementDirection: function(element) {\n        if (element) {\n            if (element.dir) {\n                return element.dir;\n            }\n            return this.getElementDirection(element.parentNode);\n        }\n        return \"ltr\";\n    },\n    getKeyCode: function(event) { return event.keyCode || event.charCode || 0; },\n    insertAfter: function(element, elementToInsert) {\n        var next = element.nextSibling;\n        if (next) {\n            element.parentNode.insertBefore(elementToInsert, next);\n        }\n        else if (element.parentNode) {\n            element.parentNode.appendChild(elementToInsert);\n        }\n    },\n    nextSibling: function(element) {\n        var sibling = element.nextSibling;\n        while (sibling) {\n            if (sibling.nodeType === 1) {   \n                return sibling;\n            }\n            sibling = sibling.nextSibling;\n        }\n    },\n    removeAttributeValue: function(element, name, value) {\n        this.updateAttributeValue('remove', element, name, value);\n    },\n    removeCssClass: function(element, value) {\n        this.updateClassName('remove', element, name, value);\n    },\n    removeEvent: function(element, eventName, fn, useCapture) {\n        if (element.removeEventListener) {\n            element.removeEventListener(eventName, fn, !!useCapture);\n        }\n        else if (element.detachEvent) {\n            element.detachEvent('on' + eventName, fn)\n        }\n        element['on' + eventName] = null;\n    },\n    removeString: function(getString, setString, valueToRemove) {\n        var currentValue = getString();\n        if (currentValue) {\n            var regex = this._regexes.getRegex('(\\\\s|\\\\b)' + valueToRemove + '$|\\\\b' + valueToRemove + '\\\\s+');\n            setString(currentValue.replace(regex, ''));\n        }\n    },\n    setFloat: function(element, direction) {\n        element.style.styleFloat = direction;\n        element.style.cssFloat = direction;\n    },\n    updateAttributeValue: function(operation, element, name, value) {\n        this[operation + 'String'](\n                function() {\n                    return element.getAttribute(name);\n                },\n                function(newValue) {\n                    element.setAttribute(name, newValue);\n                },\n                value\n            );\n    },\n    updateClassName: function(operation, element, name, value) {\n        this[operation + 'String'](\n                function() {\n                    return element.className;\n                },\n                function(newValue) {\n                    element.className = newValue;\n                },\n                value\n            );\n    },\n    _regexes: {\n        getRegex: function(pattern) {\n            var regex = this[pattern];\n            if (!regex) {\n                this[pattern] = regex = new RegExp(pattern);\n            }\n            return regex;\n        }\n    }\n};\nSys.WebForms.Menu._elementObjectMapper = {\n    _computedId: 0,\n    _mappings: {},\n    _mappingIdName: 'Sys.WebForms.Menu.Mapping',\n    getMappedObject: function(element) {\n        var id = element[this._mappingIdName];\n        if (id) {\n            return this._mappings[this._mappingIdName + ':' + id];\n        }\n    },\n    map: function(element, theObject) {\n        var mappedObject = element[this._mappingIdName];\n        if (mappedObject === theObject) {\n            return;\n        }\n        var objectId = element[this._mappingIdName] || element.id || '%' + (++this._computedId); \n        element[this._mappingIdName] = objectId;\n        this._mappings[this._mappingIdName + ':' + objectId] = theObject;\n        theObject.mappingId = objectId;\n    }\n};\nSys.WebForms.Menu._keyboardMapping = new (function() {\n    var LEFT_ARROW = 37;\n    var UP_ARROW = 38;\n    var RIGHT_ARROW = 39;\n    var DOWN_ARROW = 40;\n    var TAB = 9;\n    var ESCAPE = 27;\n    this.vertical = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.vertical[DOWN_ARROW] = this.vertical.next;\n    this.vertical[UP_ARROW] = this.vertical.previous;\n    this.vertical[RIGHT_ARROW] = this.vertical.child;\n    this.vertical[LEFT_ARROW] = this.vertical.parent;\n    this.vertical[TAB] = this.vertical[ESCAPE] = this.vertical.tab;\n    this.verticalRtl = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.verticalRtl[DOWN_ARROW] = this.verticalRtl.next;\n    this.verticalRtl[UP_ARROW] = this.verticalRtl.previous;\n    this.verticalRtl[LEFT_ARROW] = this.verticalRtl.child;\n    this.verticalRtl[RIGHT_ARROW] = this.verticalRtl.parent;\n    this.verticalRtl[TAB] = this.verticalRtl[ESCAPE] = this.verticalRtl.tab;\n    this.horizontal = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.horizontal[RIGHT_ARROW] = this.horizontal.next;\n    this.horizontal[LEFT_ARROW] = this.horizontal.previous;\n    this.horizontal[DOWN_ARROW] = this.horizontal.child;\n    this.horizontal[UP_ARROW] = this.horizontal.parent;\n    this.horizontal[TAB] = this.horizontal[ESCAPE] = this.horizontal.tab;\n    this.horizontalRtl = { next: 0, previous: 1, child: 2, parent: 3, tab: 4 };\n    this.horizontalRtl[RIGHT_ARROW] = this.horizontalRtl.previous;\n    this.horizontalRtl[LEFT_ARROW] = this.horizontalRtl.next;\n    this.horizontalRtl[DOWN_ARROW] = this.horizontalRtl.child;\n    this.horizontalRtl[UP_ARROW] = this.horizontalRtl.parent;\n    this.horizontalRtl[TAB] = this.horizontalRtl[ESCAPE] = this.horizontalRtl.tab;\n    this.horizontal.contains = this.horizontalRtl.contains = this.vertical.contains = this.verticalRtl.contains = function(keycode) {\n        return this[keycode] != null;\n    };\n})();\nSys.WebForms._MenuContainer = function(options) {\n    this.focused = false;\n    this.disabled = options.disabled;\n    this.staticDisplayLevels = options.staticDisplayLevels || 1;\n    this.element = options.element;\n    this.orientation = options.orientation || 'vertical';\n    this.disappearAfter = options.disappearAfter;\n    this.rightToLeft = Sys.WebForms.Menu._domHelper.getElementDirection(this.element) === 'rtl';\n    Sys.WebForms.Menu._elementObjectMapper.map(this.element, this);\n    this.menu = options.menu;\n    this.menu.rootMenu = this.menu;\n    this.menu.displayMode = 'static';\n    this.menu.element.style.position = 'relative';\n    this.menu.element.style.width = 'auto';\n    if (this.orientation === 'vertical') {\n        Sys.WebForms.Menu._domHelper.appendAttributeValue(this.menu.element, 'role', 'menu');\n        if (this.rightToLeft) {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.verticalRtl;\n        }\n        else {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.vertical;\n        }\n    }\n    else {\n        Sys.WebForms.Menu._domHelper.appendAttributeValue(this.menu.element, 'role', 'menubar');\n        if (this.rightToLeft) {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.horizontalRtl;\n        }\n        else {\n            this.menu.keyMap = Sys.WebForms.Menu._keyboardMapping.horizontal;\n        }\n    }\n    var floatBreak = document.createElement('div');\n    floatBreak.style.clear = this.rightToLeft ? \"right\" : \"left\";\n    this.element.appendChild(floatBreak);\n    Sys.WebForms.Menu._domHelper.setFloat(this.element, this.rightToLeft ? \"right\" : \"left\");\n    Sys.WebForms.Menu._domHelper.insertAfter(this.element, floatBreak);\n    if (!this.disabled) {\n        Sys.WebForms.Menu._domHelper.addEvent(this.menu.element, 'focus', this._onfocus, true);\n        Sys.WebForms.Menu._domHelper.addEvent(this.menu.element, 'keydown', this._onkeydown);\n        var menuContainer = this;\n        this.element.dispose = function() {\n            if (menuContainer.element.dispose) {\n                menuContainer.element.dispose = null;\n                Sys.WebForms.Menu._domHelper.removeEvent(menuContainer.menu.element, 'focus', menuContainer._onfocus, true);\n                Sys.WebForms.Menu._domHelper.removeEvent(menuContainer.menu.element, 'keydown', menuContainer._onkeydown);\n                menuContainer.menu.doDispose();\n            }\n        };\n        Sys.WebForms.Menu._domHelper.addEvent(window, 'unload', function() {\n            if (menuContainer.element.dispose) {\n                menuContainer.element.dispose();\n            }\n        });\n    }\n};\nSys.WebForms._MenuContainer.prototype = {\n    blur: function() {\n        this.focused = false;\n        this.isBlurring = false;\n        this.menu.collapse();\n        this.focusedMenuItem = null;\n    },\n    focus: function(e) { this.focused = true; },\n    navigateTo: function(menuItem) {\n        if (this.focusedMenuItem && this.focusedMenuItem !== this) {\n            this.focusedMenuItem.highlight(false);\n        }\n        menuItem.highlight(true);\n        menuItem.focus();\n        this.focusedMenuItem = menuItem;\n    },\n    _onfocus: function(e) {\n        var event = e || window.event;\n        if (event.srcElement && this) {\n            if (Sys.WebForms.Menu._domHelper.contains(this.element, event.srcElement)) {\n                if (!this.focused) {\n                    this.focus();\n                }\n            }\n        }\n    },\n    _onkeydown: function(e) {\n        var thisMenu = Sys.WebForms.Menu._elementObjectMapper.getMappedObject(this);\n        var keyCode = Sys.WebForms.Menu._domHelper.getKeyCode(e || window.event);\n        if (thisMenu) {\n            thisMenu.handleKeyPress(keyCode);\n        }\n    }\n};\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/SmartNav.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/SmartNav.js\nvar snSrc;\nif ((typeof(window.__smartNav) == \"undefined\") || (window.__smartNav == null))\n{\n    window.__smartNav = new Object();\n    window.__smartNav.update = function()\n    {\n        var sn = window.__smartNav;\n        var fd;\n        document.detachEvent(\"onstop\", sn.stopHif);\n        sn.inPost = false;\n        try { fd = frames[\"__hifSmartNav\"].document; } catch (e) {return;}\n        var fdr = fd.getElementsByTagName(\"asp_smartnav_rdir\");\n        if (fdr.length > 0)\n        {\n            if ((typeof(sn.sHif) == \"undefined\") || (sn.sHif == null))\n            {\n                sn.sHif = document.createElement(\"IFRAME\");\n                sn.sHif.name = \"__hifSmartNav\";\n                sn.sHif.style.display = \"none\";\n                sn.sHif.src = snSrc;\n            }\n            try {window.location = fdr[0].url;} catch (e) {};\n            return;\n        }\n        var fdurl = fd.location.href;\n        var index = fdurl.indexOf(snSrc);\n        if ((index != -1 && index == fdurl.length-snSrc.length)\n            || fdurl == \"about:blank\")\n            return;\n\t\tvar fdurlb = fdurl.split(\"?\")[0];\n\t\tif (document.location.href.indexOf(fdurlb) < 0)\n\t\t{\n            document.location.href=fdurl;\n\t\t    return;\n\t\t}\n\t\tsn._savedOnLoad = window.onload;\n\t\twindow.onload = null;\n\t\twindow.__smartNav.updateHelper();\n\t}\n\twindow.__smartNav.updateHelper = function()\n\t{\n\t\tif (document.readyState != \"complete\")\n\t\t{\n\t\t    window.setTimeout(window.__smartNav.updateHelper, 25);\n\t\t    return;\n\t\t}\n\t\twindow.__smartNav.loadNewContent();\n\t}\n\twindow.__smartNav.loadNewContent = function()\n\t{\n\t\tvar sn = window.__smartNav;\n\t\tvar fd;\n\t\ttry { fd = frames[\"__hifSmartNav\"].document; } catch (e) {return;}\n        if ((typeof(sn.sHif) != \"undefined\") && (sn.sHif != null))\n        {\n            sn.sHif.removeNode(true);\n            sn.sHif = null;\n        }\n        var hdm = document.getElementsByTagName(\"head\")[0];\n        var hk = hdm.childNodes;\n        var tt = null;\n        var i;\n        for (i = hk.length - 1; i>= 0; i--)\n        {\n            if (hk[i].tagName == \"TITLE\")\n            {\n                tt = hk[i].outerHTML;\n                continue;\n            }\n            if (hk[i].tagName != \"BASEFONT\" || hk[i].innerHTML.length == 0)\n                hdm.removeChild(hdm.childNodes[i]);\n        }\n        var kids = fd.getElementsByTagName(\"head\")[0].childNodes;\n        for (i = 0; i < kids.length; i++)\n        {\n            var tn = kids[i].tagName;\n            var k = document.createElement(tn);\n            k.id = kids[i].id;\n            k.mergeAttributes(kids[i]);\n            switch(tn)\n            {\n            case \"TITLE\":\n                if (tt == kids[i].outerHTML)\n                    continue;\n                k.innerText = kids[i].text;\n                hdm.insertAdjacentElement(\"afterbegin\", k);\n                continue;\n            case \"BASEFONT\" :\n                if (kids[i].innerHTML.length > 0)\n                    continue;\n                break;\n            default:\n                var o = document.createElement(\"BODY\");\n                o.innerHTML = \"<BODY>\" + kids[i].outerHTML + \"</BODY>\";\n                k = o.firstChild;\n                break;\n            }\n            if((typeof(k) != \"undefined\") && (k != null))\n                hdm.appendChild(k);\n        }\n        document.body.clearAttributes();\n        document.body.id = fd.body.id;\n        document.body.mergeAttributes(fd.body);\n        var newBodyLoad = fd.body.onload;\n        if ((typeof(newBodyLoad) != \"undefined\") && (newBodyLoad != null))\n            document.body.onload = newBodyLoad;\n        else\n            document.body.onload = sn._savedOnLoad;\n        var s = \"<BODY>\" + fd.body.innerHTML + \"</BODY>\";\n        if ((typeof(sn.hif) != \"undefined\") && (sn.hif != null))\n        {\n            var hifP = sn.hif.parentElement;\n            if ((typeof(hifP) != \"undefined\") && (hifP != null))\n                sn.sHif=hifP.removeChild(sn.hif);\n        }\n        document.body.innerHTML = s;\n        var sc = document.scripts;\n        for (i = 0; i < sc.length; i++)\n        {\n            sc[i].text = sc[i].text;\n        }\n        sn.hif = document.all(\"__hifSmartNav\");\n        if ((typeof(sn.hif) != \"undefined\") && (sn.hif != null))\n        {\n            var hif = sn.hif;\n            sn.hifName = \"__hifSmartNav\" + (new Date()).getTime();\n            frames[\"__hifSmartNav\"].name = sn.hifName;\n            sn.hifDoc = hif.contentWindow.document;\n            if (sn.ie5)\n                hif.parentElement.removeChild(hif);\n            window.setTimeout(sn.restoreFocus,0);\n        }\n        if (typeof(window.onload) == \"string\")\n        {\n            try { eval(window.onload) } catch (e) {};\n        }\n        else if ((typeof(window.onload) != \"undefined\") && (window.onload != null))\n        {\n            try { window.onload() } catch (e) {};\n        }\n        sn._savedOnLoad = null;\n        sn.attachForm();\n    };\n    window.__smartNav.restoreFocus = function()\n    {\n        if (window.__smartNav.inPost == true) return;\n        var curAe = document.activeElement;\n        var sAeId = window.__smartNav.ae;\n        if (((typeof(sAeId) == \"undefined\") || (sAeId == null)) ||\n            (typeof(curAe) != \"undefined\") && (curAe != null) && (curAe.id == sAeId || curAe.name == sAeId))\n            return;\n        var ae = document.all(sAeId);\n        if ((typeof(ae) == \"undefined\") || (ae == null)) return;\n        try { ae.focus(); } catch(e){};\n    }\n    window.__smartNav.saveHistory = function()\n    {\n        if ((typeof(window.__smartNav.hif) != \"undefined\") && (window.__smartNav.hif != null))\n            window.__smartNav.hif.removeNode();\n        if ((typeof(window.__smartNav.sHif) != \"undefined\") && (window.__smartNav.sHif != null)\n            && (typeof(document.all[window.__smartNav.siHif]) != \"undefined\")\n            && (document.all[window.__smartNav.siHif] != null)) {\n            document.all[window.__smartNav.siHif].insertAdjacentElement(\n                        \"BeforeBegin\", window.__smartNav.sHif);\n        }\n    }\n    window.__smartNav.stopHif = function()\n    {\n        document.detachEvent(\"onstop\", window.__smartNav.stopHif);\n        var sn = window.__smartNav;\n        if (((typeof(sn.hifDoc) == \"undefined\") || (sn.hifDoc == null)) &&\n            (typeof(sn.hif) != \"undefined\") && (sn.hif != null))\n        {\n            try {sn.hifDoc = sn.hif.contentWindow.document;}\n            catch(e){sn.hifDoc=null}\n        }\n        if (sn.hifDoc != null)\n        {\n            try {sn.hifDoc.execCommand(\"stop\");} catch (e){}\n        }\n    }\n    window.__smartNav.init =  function()\n    {\n        var sn = window.__smartNav;\n        window.__smartNav.form.__smartNavPostBack.value = 'true';\n        document.detachEvent(\"onstop\", sn.stopHif);\n        document.attachEvent(\"onstop\", sn.stopHif);\n        try { if (window.event.returnValue == false) return; } catch(e) {}\n        sn.inPost = true;\n        if ((typeof(document.activeElement) != \"undefined\") && (document.activeElement != null))\n        {\n            var ae = document.activeElement.id;\n            if (ae.length == 0)\n                ae = document.activeElement.name;\n            sn.ae = ae;\n        }\n        else\n            sn.ae = null;\n        try {document.selection.empty();} catch (e) {}\n        if ((typeof(sn.hif) == \"undefined\") || (sn.hif == null))\n        {\n            sn.hif = document.all(\"__hifSmartNav\");\n            sn.hifDoc = sn.hif.contentWindow.document;\n        }\n        if ((typeof(sn.hifDoc) != \"undefined\") && (sn.hifDoc != null))\n            try {sn.hifDoc.designMode = \"On\";} catch(e){};\n        if ((typeof(sn.hif.parentElement) == \"undefined\") || (sn.hif.parentElement == null))\n            document.body.appendChild(sn.hif);\n        var hif = sn.hif;\n        hif.detachEvent(\"onload\", sn.update);\n        hif.attachEvent(\"onload\", sn.update);\n        window.__smartNav.fInit = true;\n    };\n    window.__smartNav.submit = function()\n    {\n        window.__smartNav.fInit = false;\n        try { window.__smartNav.init(); } catch(e) {}\n        if (window.__smartNav.fInit) {\n            window.__smartNav.form._submit();\n        }\n    };\n    window.__smartNav.attachForm = function()\n    {\n        var cf = document.forms;\n        for (var i=0; i<cf.length; i++)\n        {\n            if ((typeof(cf[i].__smartNavEnabled) != \"undefined\") && (cf[i].__smartNavEnabled != null))\n            {\n                window.__smartNav.form = cf[i];\n                window.__smartNav.form.insertAdjacentHTML(\"beforeEnd\", \"<input type='hidden' name='__smartNavPostBack' value='false' />\");\n                break;\n            }\n        }\n        var snfm = window.__smartNav.form;\n        if ((typeof(snfm) == \"undefined\") || (snfm == null)) return false;\n        var sft = snfm.target;\n        if (sft.length != 0 && sft.indexOf(\"__hifSmartNav\") != 0) return false;\n        var sfc = snfm.action.split(\"?\")[0];\n        var url = window.location.href.split(\"?\")[0];\n        if (url.charAt(url.length-1) != '/' && url.lastIndexOf(sfc) + sfc.length != url.length) return false;\n        if (snfm.__formAttached == true) return true;\n        snfm.__formAttached = true;\n        snfm.attachEvent(\"onsubmit\", window.__smartNav.init);\n        snfm._submit = snfm.submit;\n        snfm.submit = window.__smartNav.submit;\n        snfm.target = window.__smartNav.hifName;\n        return true;\n    };\n    window.__smartNav.hifName = \"__hifSmartNav\" + (new Date()).getTime();\n    window.__smartNav.ie5 = navigator.appVersion.indexOf(\"MSIE 5\") > 0;\n    var rc = window.__smartNav.attachForm();\n    var hif = document.all(\"__hifSmartNav\");\n    if ((typeof(snSrc) == \"undefined\") || (snSrc == null)) {\n\t    if (typeof(window.dialogHeight) != \"undefined\") {\n\t            snSrc = \"IEsmartnav1\";\n\t\t    hif.src = snSrc;\n\t    } else {\n\t\t    snSrc = hif.src;\n\t    }\n    }\n    if (rc)\n    {\n        var fsn = frames[\"__hifSmartNav\"];\n        fsn.name = window.__smartNav.hifName;\n        window.__smartNav.siHif = hif.sourceIndex;\n        try {\n            if (fsn.document.location != snSrc)\n            {\n                fsn.document.designMode = \"On\";\n                hif.attachEvent(\"onload\",window.__smartNav.update);\n                window.__smartNav.hif = hif;\n            }\n        }\n        catch (e) { window.__smartNav.hif = hif; }\n        window.attachEvent(\"onbeforeunload\", window.__smartNav.saveHistory);\n    }\n    else\n        window.__smartNav = null;\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/TreeView.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/TreeView.js\nfunction TreeView_HoverNode(data, node) {\n    if (!data) {\n        return;\n    }\n    node.hoverClass = data.hoverClass;\n    WebForm_AppendToClassName(node, data.hoverClass);\n    if (__nonMSDOMBrowser) {\n        node = node.childNodes[node.childNodes.length - 1];\n    }\n    else {\n        node = node.children[node.children.length - 1];\n    }\n    node.hoverHyperLinkClass = data.hoverHyperLinkClass;\n    WebForm_AppendToClassName(node, data.hoverHyperLinkClass);\n}\nfunction TreeView_GetNodeText(node) {\n    var trNode = WebForm_GetParentByTagName(node, \"TR\");\n    var outerNodes;\n    if (trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName) {\n        outerNodes = trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName(\"A\");\n        if (!outerNodes || outerNodes.length == 0) {\n            outerNodes = trNode.childNodes[trNode.childNodes.length - 1].getElementsByTagName(\"SPAN\");\n        }\n    }\n    var textNode = (outerNodes && outerNodes.length > 0) ?\n        outerNodes[0].childNodes[0] :\n        trNode.childNodes[trNode.childNodes.length - 1].childNodes[0];\n    return (textNode && textNode.nodeValue) ? textNode.nodeValue : \"\";\n}\nfunction TreeView_PopulateNode(data, index, node, selectNode, selectImageNode, lineType, text, path, databound, datapath, parentIsLast) {\n    if (!data) {\n        return;\n    }\n    var context = new Object();\n    context.data = data;\n    context.node = node;\n    context.selectNode = selectNode;\n    context.selectImageNode = selectImageNode;\n    context.lineType = lineType;\n    context.index = index;\n    context.isChecked = \"f\";\n    var tr = WebForm_GetParentByTagName(node, \"TR\");\n    if (tr) {\n        var checkbox = tr.getElementsByTagName(\"INPUT\");\n        if (checkbox && (checkbox.length > 0)) {\n            for (var i = 0; i < checkbox.length; i++) {\n                if (checkbox[i].type.toLowerCase() == \"checkbox\") {\n                    if (checkbox[i].checked) {\n                        context.isChecked = \"t\";\n                    }\n                    break;\n                }\n            }\n        }\n    }\n    var param = index + \"|\" + data.lastIndex + \"|\" + databound + context.isChecked + parentIsLast + \"|\" +\n        text.length + \"|\" + text + datapath.length + \"|\" + datapath + path;\n    TreeView_PopulateNodeDoCallBack(context, param);\n}\nfunction TreeView_ProcessNodeData(result, context) {\n    var treeNode = context.node;\n    if (result.length > 0) {\n        var ci =  result.indexOf(\"|\", 0);\n        context.data.lastIndex = result.substring(0, ci);\n        ci = result.indexOf(\"|\", ci + 1);\n        var newExpandState = result.substring(context.data.lastIndex.length + 1, ci);\n        context.data.expandState.value += newExpandState;\n        var chunk = result.substr(ci + 1);\n        var newChildren, table;\n        if (__nonMSDOMBrowser) {\n            var newDiv = document.createElement(\"div\");\n            newDiv.innerHTML = chunk;\n            table = WebForm_GetParentByTagName(treeNode, \"TABLE\");\n            newChildren = null;\n            if ((typeof(table.nextSibling) == \"undefined\") || (table.nextSibling == null)) {\n                table.parentNode.insertBefore(newDiv.firstChild, table.nextSibling);\n                newChildren = table.previousSibling;\n            }\n            else {\n                table = table.nextSibling;\n                table.parentNode.insertBefore(newDiv.firstChild, table);\n                newChildren = table.previousSibling;\n            }\n            newChildren = document.getElementById(treeNode.id + \"Nodes\");\n        }\n        else {\n            table = WebForm_GetParentByTagName(treeNode, \"TABLE\");\n            table.insertAdjacentHTML(\"afterEnd\", chunk);\n            newChildren = document.all[treeNode.id + \"Nodes\"];\n        }\n        if ((typeof(newChildren) != \"undefined\") && (newChildren != null)) {\n            TreeView_ToggleNode(context.data, context.index, treeNode, context.lineType, newChildren);\n            treeNode.href = document.getElementById ?\n                \"javascript:TreeView_ToggleNode(\" + context.data.name + \",\" + context.index + \",document.getElementById('\" + treeNode.id + \"'),'\" + context.lineType + \"',document.getElementById('\" + newChildren.id + \"'))\" :\n                \"javascript:TreeView_ToggleNode(\" + context.data.name + \",\" + context.index + \",\" + treeNode.id + \",'\" + context.lineType + \"',\" + newChildren.id + \")\";\n            if ((typeof(context.selectNode) != \"undefined\") && (context.selectNode != null) && context.selectNode.href &&\n                (context.selectNode.href.indexOf(\"javascript:TreeView_PopulateNode\", 0) == 0)) {\n                context.selectNode.href = treeNode.href;\n            }\n            if ((typeof(context.selectImageNode) != \"undefined\") && (context.selectImageNode != null) && context.selectNode.href &&\n                (context.selectImageNode.href.indexOf(\"javascript:TreeView_PopulateNode\", 0) == 0)) {\n                context.selectImageNode.href = treeNode.href;\n            }\n        }\n        context.data.populateLog.value += context.index + \",\";\n    }\n    else {\n        var img = treeNode.childNodes ? treeNode.childNodes[0] : treeNode.children[0];\n        if ((typeof(img) != \"undefined\") && (img != null)) {\n            var lineType = context.lineType;\n            if (lineType == \"l\") {\n                img.src = context.data.images[13];\n            }\n            else if (lineType == \"t\") {\n                img.src = context.data.images[10];\n            }\n            else if (lineType == \"-\") {\n                img.src = context.data.images[16];\n            }\n            else {\n                img.src = context.data.images[3];\n            }\n            var pe;\n            if (__nonMSDOMBrowser) {\n                pe = treeNode.parentNode;\n                pe.insertBefore(img, treeNode);\n                pe.removeChild(treeNode);\n            }\n            else {\n                pe = treeNode.parentElement;\n                treeNode.style.visibility=\"hidden\";\n                treeNode.style.display=\"none\";\n                pe.insertAdjacentElement(\"afterBegin\", img);\n            }\n        }\n    }\n}\nfunction TreeView_SelectNode(data, node, nodeId) {\n    if (!data) {\n        return;\n    }\n    if ((typeof(data.selectedClass) != \"undefined\") && (data.selectedClass != null)) {\n        var id = data.selectedNodeID.value;\n        if (id.length > 0) {\n            var selectedNode = document.getElementById(id);\n            if ((typeof(selectedNode) != \"undefined\") && (selectedNode != null)) {\n                WebForm_RemoveClassName(selectedNode, data.selectedHyperLinkClass);\n                selectedNode = WebForm_GetParentByTagName(selectedNode, \"TD\");\n                WebForm_RemoveClassName(selectedNode, data.selectedClass);\n            }\n        }\n        WebForm_AppendToClassName(node, data.selectedHyperLinkClass);\n        node = WebForm_GetParentByTagName(node, \"TD\");\n        WebForm_AppendToClassName(node, data.selectedClass)\n    }\n    data.selectedNodeID.value = nodeId;\n}\nfunction TreeView_ToggleNode(data, index, node, lineType, children) {\n    if (!data) {\n        return;\n    }\n    var img = node.childNodes[0];\n    var newExpandState;\n    try {\n        if (children.style.display == \"none\") {\n            children.style.display = \"block\";\n            newExpandState = \"e\";\n            if ((typeof(img) != \"undefined\") && (img != null)) {\n                if (lineType == \"l\") {\n                    img.src = data.images[15];\n                }\n                else if (lineType == \"t\") {\n                    img.src = data.images[12];\n                }\n                else if (lineType == \"-\") {\n                    img.src = data.images[18];\n                }\n                else {\n                    img.src = data.images[5];\n                }\n                img.alt = data.collapseToolTip.replace(/\\{0\\}/, TreeView_GetNodeText(node));\n            }\n        }\n        else {\n            children.style.display = \"none\";\n            newExpandState = \"c\";\n            if ((typeof(img) != \"undefined\") && (img != null)) {\n                if (lineType == \"l\") {\n                    img.src = data.images[14];\n                }\n                else if (lineType == \"t\") {\n                    img.src = data.images[11];\n                }\n                else if (lineType == \"-\") {\n                    img.src = data.images[17];\n                }\n                else {\n                    img.src = data.images[4];\n                }\n                img.alt = data.expandToolTip.replace(/\\{0\\}/, TreeView_GetNodeText(node));\n            }\n        }\n    }\n    catch(e) {}\n    data.expandState.value =  data.expandState.value.substring(0, index) + newExpandState + data.expandState.value.slice(index + 1);\n}\nfunction TreeView_UnhoverNode(node) {\n    if (!node.hoverClass) {\n        return;\n    }\n    WebForm_RemoveClassName(node, node.hoverClass);\n    if (__nonMSDOMBrowser) {\n        node = node.childNodes[node.childNodes.length - 1];\n    }\n    else {\n        node = node.children[node.children.length - 1];\n    }\n    WebForm_RemoveClassName(node, node.hoverHyperLinkClass);\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/WebForms.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebForms.js\nfunction WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) {\n    this.eventTarget = eventTarget;\n    this.eventArgument = eventArgument;\n    this.validation = validation;\n    this.validationGroup = validationGroup;\n    this.actionUrl = actionUrl;\n    this.trackFocus = trackFocus;\n    this.clientSubmit = clientSubmit;\n}\nfunction WebForm_DoPostBackWithOptions(options) {\n    var validationResult = true;\n    if (options.validation) {\n        if (typeof(Page_ClientValidate) == 'function') {\n            validationResult = Page_ClientValidate(options.validationGroup);\n        }\n    }\n    if (validationResult) {\n        if ((typeof(options.actionUrl) != \"undefined\") && (options.actionUrl != null) && (options.actionUrl.length > 0)) {\n            theForm.action = options.actionUrl;\n        }\n        if (options.trackFocus) {\n            var lastFocus = theForm.elements[\"__LASTFOCUS\"];\n            if ((typeof(lastFocus) != \"undefined\") && (lastFocus != null)) {\n                if (typeof(document.activeElement) == \"undefined\") {\n                    lastFocus.value = options.eventTarget;\n                }\n                else {\n                    var active = document.activeElement;\n                    if ((typeof(active) != \"undefined\") && (active != null)) {\n                        if ((typeof(active.id) != \"undefined\") && (active.id != null) && (active.id.length > 0)) {\n                            lastFocus.value = active.id;\n                        }\n                        else if (typeof(active.name) != \"undefined\") {\n                            lastFocus.value = active.name;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    if (options.clientSubmit) {\n        __doPostBack(options.eventTarget, options.eventArgument);\n    }\n}\nvar __pendingCallbacks = new Array();\nvar __synchronousCallBackIndex = -1;\nfunction WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {\n    var postData = __theFormPostData +\n                \"__CALLBACKID=\" + WebForm_EncodeCallback(eventTarget) +\n                \"&__CALLBACKPARAM=\" + WebForm_EncodeCallback(eventArgument);\n    if (theForm[\"__EVENTVALIDATION\"]) {\n        postData += \"&__EVENTVALIDATION=\" + WebForm_EncodeCallback(theForm[\"__EVENTVALIDATION\"].value);\n    }\n    var xmlRequest,e;\n    try {\n        xmlRequest = new XMLHttpRequest();\n    }\n    catch(e) {\n        try {\n            xmlRequest = new ActiveXObject(\"Microsoft.XMLHTTP\");\n        }\n        catch(e) {\n        }\n    }\n    var setRequestHeaderMethodExists = true;\n    try {\n        setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);\n    }\n    catch(e) {}\n    var callback = new Object();\n    callback.eventCallback = eventCallback;\n    callback.context = context;\n    callback.errorCallback = errorCallback;\n    callback.async = useAsync;\n    var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);\n    if (!useAsync) {\n        if (__synchronousCallBackIndex != -1) {\n            __pendingCallbacks[__synchronousCallBackIndex] = null;\n        }\n        __synchronousCallBackIndex = callbackIndex;\n    }\n    if (setRequestHeaderMethodExists) {\n        xmlRequest.onreadystatechange = WebForm_CallbackComplete;\n        callback.xmlRequest = xmlRequest;\n        // e.g. http:\n        var action = theForm.action || document.location.pathname, fragmentIndex = action.indexOf('#');\n        if (fragmentIndex !== -1) {\n            action = action.substr(0, fragmentIndex);\n        }\n        if (!__nonMSDOMBrowser) {\n            var queryIndex = action.indexOf('?');\n            if (queryIndex !== -1) {\n                var path = action.substr(0, queryIndex);\n                if (path.indexOf(\"%\") === -1) {\n                    action = encodeURI(path) + action.substr(queryIndex);\n                }\n            }\n            else if (action.indexOf(\"%\") === -1) {\n                action = encodeURI(action);\n            }\n        }\n        xmlRequest.open(\"POST\", action, true);\n        xmlRequest.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\");\n        xmlRequest.send(postData);\n        return;\n    }\n    callback.xmlRequest = new Object();\n    var callbackFrameID = \"__CALLBACKFRAME\" + callbackIndex;\n    var xmlRequestFrame = document.frames[callbackFrameID];\n    if (!xmlRequestFrame) {\n        xmlRequestFrame = document.createElement(\"IFRAME\");\n        xmlRequestFrame.width = \"1\";\n        xmlRequestFrame.height = \"1\";\n        xmlRequestFrame.frameBorder = \"0\";\n        xmlRequestFrame.id = callbackFrameID;\n        xmlRequestFrame.name = callbackFrameID;\n        xmlRequestFrame.style.position = \"absolute\";\n        xmlRequestFrame.style.top = \"-100px\"\n        xmlRequestFrame.style.left = \"-100px\";\n        try {\n            if (callBackFrameUrl) {\n                xmlRequestFrame.src = callBackFrameUrl;\n            }\n        }\n        catch(e) {}\n        document.body.appendChild(xmlRequestFrame);\n    }\n    var interval = window.setInterval(function() {\n        xmlRequestFrame = document.frames[callbackFrameID];\n        if (xmlRequestFrame && xmlRequestFrame.document) {\n            window.clearInterval(interval);\n            xmlRequestFrame.document.write(\"\");\n            xmlRequestFrame.document.close();\n            xmlRequestFrame.document.write('<html><body><form method=\"post\"><input type=\"hidden\" name=\"__CALLBACKLOADSCRIPT\" value=\"t\"></form></body></html>');\n            xmlRequestFrame.document.close();\n            xmlRequestFrame.document.forms[0].action = theForm.action;\n            var count = __theFormPostCollection.length;\n            var element;\n            for (var i = 0; i < count; i++) {\n                element = __theFormPostCollection[i];\n                if (element) {\n                    var fieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n                    fieldElement.type = \"hidden\";\n                    fieldElement.name = element.name;\n                    fieldElement.value = element.value;\n                    xmlRequestFrame.document.forms[0].appendChild(fieldElement);\n                }\n            }\n            var callbackIdFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n            callbackIdFieldElement.type = \"hidden\";\n            callbackIdFieldElement.name = \"__CALLBACKID\";\n            callbackIdFieldElement.value = eventTarget;\n            xmlRequestFrame.document.forms[0].appendChild(callbackIdFieldElement);\n            var callbackParamFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n            callbackParamFieldElement.type = \"hidden\";\n            callbackParamFieldElement.name = \"__CALLBACKPARAM\";\n            callbackParamFieldElement.value = eventArgument;\n            xmlRequestFrame.document.forms[0].appendChild(callbackParamFieldElement);\n            if (theForm[\"__EVENTVALIDATION\"]) {\n                var callbackValidationFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n                callbackValidationFieldElement.type = \"hidden\";\n                callbackValidationFieldElement.name = \"__EVENTVALIDATION\";\n                callbackValidationFieldElement.value = theForm[\"__EVENTVALIDATION\"].value;\n                xmlRequestFrame.document.forms[0].appendChild(callbackValidationFieldElement);\n            }\n            var callbackIndexFieldElement = xmlRequestFrame.document.createElement(\"INPUT\");\n            callbackIndexFieldElement.type = \"hidden\";\n            callbackIndexFieldElement.name = \"__CALLBACKINDEX\";\n            callbackIndexFieldElement.value = callbackIndex;\n            xmlRequestFrame.document.forms[0].appendChild(callbackIndexFieldElement);\n            xmlRequestFrame.document.forms[0].submit();\n        }\n    }, 10);\n}\nfunction WebForm_CallbackComplete() {\n    for (var i = 0; i < __pendingCallbacks.length; i++) {\n        callbackObject = __pendingCallbacks[i];\n        if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {\n            if (!__pendingCallbacks[i].async) {\n                __synchronousCallBackIndex = -1;\n            }\n            __pendingCallbacks[i] = null;\n            var callbackFrameID = \"__CALLBACKFRAME\" + i;\n            var xmlRequestFrame = document.getElementById(callbackFrameID);\n            if (xmlRequestFrame) {\n                xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);\n            }\n            WebForm_ExecuteCallback(callbackObject);\n        }\n    }\n}\nfunction WebForm_ExecuteCallback(callbackObject) {\n    var response = callbackObject.xmlRequest.responseText;\n    if (response.charAt(0) == \"s\") {\n        if ((typeof(callbackObject.eventCallback) != \"undefined\") && (callbackObject.eventCallback != null)) {\n            callbackObject.eventCallback(response.substring(1), callbackObject.context);\n        }\n    }\n    else if (response.charAt(0) == \"e\") {\n        if ((typeof(callbackObject.errorCallback) != \"undefined\") && (callbackObject.errorCallback != null)) {\n            callbackObject.errorCallback(response.substring(1), callbackObject.context);\n        }\n    }\n    else {\n        var separatorIndex = response.indexOf(\"|\");\n        if (separatorIndex != -1) {\n            var validationFieldLength = parseInt(response.substring(0, separatorIndex));\n            if (!isNaN(validationFieldLength)) {\n                var validationField = response.substring(separatorIndex + 1, separatorIndex + validationFieldLength + 1);\n                if (validationField != \"\") {\n                    var validationFieldElement = theForm[\"__EVENTVALIDATION\"];\n                    if (!validationFieldElement) {\n                        validationFieldElement = document.createElement(\"INPUT\");\n                        validationFieldElement.type = \"hidden\";\n                        validationFieldElement.name = \"__EVENTVALIDATION\";\n                        theForm.appendChild(validationFieldElement);\n                    }\n                    validationFieldElement.value = validationField;\n                }\n                if ((typeof(callbackObject.eventCallback) != \"undefined\") && (callbackObject.eventCallback != null)) {\n                    callbackObject.eventCallback(response.substring(separatorIndex + validationFieldLength + 1), callbackObject.context);\n                }\n            }\n        }\n    }\n}\nfunction WebForm_FillFirstAvailableSlot(array, element) {\n    var i;\n    for (i = 0; i < array.length; i++) {\n        if (!array[i]) break;\n    }\n    array[i] = element;\n    return i;\n}\nvar __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);\nvar __theFormPostData = \"\";\nvar __theFormPostCollection = new Array();\nvar __callbackTextTypes = /^(text|password|hidden|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i;\nfunction WebForm_InitCallback() {\n    var formElements = theForm.elements,\n        count = formElements.length,\n        element;\n    for (var i = 0; i < count; i++) {\n        element = formElements[i];\n        var tagName = element.tagName.toLowerCase();\n        if (tagName == \"input\") {\n            var type = element.type;\n            if ((__callbackTextTypes.test(type) || ((type == \"checkbox\" || type == \"radio\") && element.checked))\n                && (element.id != \"__EVENTVALIDATION\")) {\n                WebForm_InitCallbackAddField(element.name, element.value);\n            }\n        }\n        else if (tagName == \"select\") {\n            var selectCount = element.options.length;\n            for (var j = 0; j < selectCount; j++) {\n                var selectChild = element.options[j];\n                if (selectChild.selected == true) {\n                    WebForm_InitCallbackAddField(element.name, element.value);\n                }\n            }\n        }\n        else if (tagName == \"textarea\") {\n            WebForm_InitCallbackAddField(element.name, element.value);\n        }\n    }\n}\nfunction WebForm_InitCallbackAddField(name, value) {\n    var nameValue = new Object();\n    nameValue.name = name;\n    nameValue.value = value;\n    __theFormPostCollection[__theFormPostCollection.length] = nameValue;\n    __theFormPostData += WebForm_EncodeCallback(name) + \"=\" + WebForm_EncodeCallback(value) + \"&\";\n}\nfunction WebForm_EncodeCallback(parameter) {\n    if (encodeURIComponent) {\n        return encodeURIComponent(parameter);\n    }\n    else {\n        return escape(parameter);\n    }\n}\nvar __disabledControlArray = new Array();\nfunction WebForm_ReEnableControls() {\n    if (typeof(__enabledControlArray) == 'undefined') {\n        return false;\n    }\n    var disabledIndex = 0;\n    for (var i = 0; i < __enabledControlArray.length; i++) {\n        var c;\n        if (__nonMSDOMBrowser) {\n            c = document.getElementById(__enabledControlArray[i]);\n        }\n        else {\n            c = document.all[__enabledControlArray[i]];\n        }\n        if ((typeof(c) != \"undefined\") && (c != null) && (c.disabled == true)) {\n            c.disabled = false;\n            __disabledControlArray[disabledIndex++] = c;\n        }\n    }\n    setTimeout(\"WebForm_ReDisableControls()\", 0);\n    return true;\n}\nfunction WebForm_ReDisableControls() {\n    for (var i = 0; i < __disabledControlArray.length; i++) {\n        __disabledControlArray[i].disabled = true;\n    }\n}\nfunction WebForm_SimulateClick(element, event) {\n    var clickEvent;\n    if (element) {\n        if (element.click) {\n            element.click();\n        } else { \n            clickEvent = document.createEvent(\"MouseEvents\");\n            clickEvent.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n            if (!element.dispatchEvent(clickEvent)) {\n                return true;\n            }\n        }\n        event.cancelBubble = true;\n        if (event.stopPropagation) {\n            event.stopPropagation();\n        }\n        return false;\n    }\n    return true;\n}\nfunction WebForm_FireDefaultButton(event, target) {\n    if (event.keyCode == 13) {\n        var src = event.srcElement || event.target;\n        if (src &&\n            ((src.tagName.toLowerCase() == \"input\") &&\n             (src.type.toLowerCase() == \"submit\" || src.type.toLowerCase() == \"button\")) ||\n            ((src.tagName.toLowerCase() == \"a\") &&\n             (src.href != null) && (src.href != \"\")) ||\n            (src.tagName.toLowerCase() == \"textarea\")) {\n            return true;\n        }\n        var defaultButton;\n        if (__nonMSDOMBrowser) {\n            defaultButton = document.getElementById(target);\n        }\n        else {\n            defaultButton = document.all[target];\n        }\n        if (defaultButton) {\n            return WebForm_SimulateClick(defaultButton, event);\n        } \n    }\n    return true;\n}\nfunction WebForm_GetScrollX() {\n    if (__nonMSDOMBrowser) {\n        return window.pageXOffset;\n    }\n    else {\n        if (document.documentElement && document.documentElement.scrollLeft) {\n            return document.documentElement.scrollLeft;\n        }\n        else if (document.body) {\n            return document.body.scrollLeft;\n        }\n    }\n    return 0;\n}\nfunction WebForm_GetScrollY() {\n    if (__nonMSDOMBrowser) {\n        return window.pageYOffset;\n    }\n    else {\n        if (document.documentElement && document.documentElement.scrollTop) {\n            return document.documentElement.scrollTop;\n        }\n        else if (document.body) {\n            return document.body.scrollTop;\n        }\n    }\n    return 0;\n}\nfunction WebForm_SaveScrollPositionSubmit() {\n    if (__nonMSDOMBrowser) {\n        theForm.elements['__SCROLLPOSITIONY'].value = window.pageYOffset;\n        theForm.elements['__SCROLLPOSITIONX'].value = window.pageXOffset;\n    }\n    else {\n        theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();\n        theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();\n    }\n    if ((typeof(this.oldSubmit) != \"undefined\") && (this.oldSubmit != null)) {\n        return this.oldSubmit();\n    }\n    return true;\n}\nfunction WebForm_SaveScrollPositionOnSubmit() {\n    theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();\n    theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();\n    if ((typeof(this.oldOnSubmit) != \"undefined\") && (this.oldOnSubmit != null)) {\n        return this.oldOnSubmit();\n    }\n    return true;\n}\nfunction WebForm_RestoreScrollPosition() {\n    if (__nonMSDOMBrowser) {\n        window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, theForm.elements['__SCROLLPOSITIONY'].value);\n    }\n    else {\n        window.scrollTo(theForm.__SCROLLPOSITIONX.value, theForm.__SCROLLPOSITIONY.value);\n    }\n    if ((typeof(theForm.oldOnLoad) != \"undefined\") && (theForm.oldOnLoad != null)) {\n        return theForm.oldOnLoad();\n    }\n    return true;\n}\nfunction WebForm_TextBoxKeyHandler(event) {\n    if (event.keyCode == 13) {\n        var target;\n        if (__nonMSDOMBrowser) {\n            target = event.target;\n        }\n        else {\n            target = event.srcElement;\n        }\n        if ((typeof(target) != \"undefined\") && (target != null)) {\n            if (typeof(target.onchange) != \"undefined\") {\n                target.onchange();\n                event.cancelBubble = true;\n                if (event.stopPropagation) event.stopPropagation();\n                return false;\n            }\n        }\n    }\n    return true;\n}\nfunction WebForm_TrimString(value) {\n    return value.replace(/^\\s+|\\s+$/g, '')\n}\nfunction WebForm_AppendToClassName(element, className) {\n    var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';\n    className = WebForm_TrimString(className);\n    var index = currentClassName.indexOf(' ' + className + ' ');\n    if (index === -1) {\n        element.className = (element.className === '') ? className : element.className + ' ' + className;\n    }\n}\nfunction WebForm_RemoveClassName(element, className) {\n    var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';\n    className = WebForm_TrimString(className);\n    var index = currentClassName.indexOf(' ' + className + ' ');\n    if (index >= 0) {\n        element.className = WebForm_TrimString(currentClassName.substring(0, index) + ' ' +\n            currentClassName.substring(index + className.length + 1, currentClassName.length));\n    }\n}\nfunction WebForm_GetElementById(elementId) {\n    if (document.getElementById) {\n        return document.getElementById(elementId);\n    }\n    else if (document.all) {\n        return document.all[elementId];\n    }\n    else return null;\n}\nfunction WebForm_GetElementByTagName(element, tagName) {\n    var elements = WebForm_GetElementsByTagName(element, tagName);\n    if (elements && elements.length > 0) {\n        return elements[0];\n    }\n    else return null;\n}\nfunction WebForm_GetElementsByTagName(element, tagName) {\n    if (element && tagName) {\n        if (element.getElementsByTagName) {\n            return element.getElementsByTagName(tagName);\n        }\n        if (element.all && element.all.tags) {\n            return element.all.tags(tagName);\n        }\n    }\n    return null;\n}\nfunction WebForm_GetElementDir(element) {\n    if (element) {\n        if (element.dir) {\n            return element.dir;\n        }\n        return WebForm_GetElementDir(element.parentNode);\n    }\n    return \"ltr\";\n}\nfunction WebForm_GetElementPosition(element) {\n    var result = new Object();\n    result.x = 0;\n    result.y = 0;\n    result.width = 0;\n    result.height = 0;\n    if (element.offsetParent) {\n        result.x = element.offsetLeft;\n        result.y = element.offsetTop;\n        var parent = element.offsetParent;\n        while (parent) {\n            result.x += parent.offsetLeft;\n            result.y += parent.offsetTop;\n            var parentTagName = parent.tagName.toLowerCase();\n            if (parentTagName != \"table\" &&\n                parentTagName != \"body\" && \n                parentTagName != \"html\" && \n                parentTagName != \"div\" && \n                parent.clientTop && \n                parent.clientLeft) {\n                result.x += parent.clientLeft;\n                result.y += parent.clientTop;\n            }\n            parent = parent.offsetParent;\n        }\n    }\n    else if (element.left && element.top) {\n        result.x = element.left;\n        result.y = element.top;\n    }\n    else {\n        if (element.x) {\n            result.x = element.x;\n        }\n        if (element.y) {\n            result.y = element.y;\n        }\n    }\n    if (element.offsetWidth && element.offsetHeight) {\n        result.width = element.offsetWidth;\n        result.height = element.offsetHeight;\n    }\n    else if (element.style && element.style.pixelWidth && element.style.pixelHeight) {\n        result.width = element.style.pixelWidth;\n        result.height = element.style.pixelHeight;\n    }\n    return result;\n}\nfunction WebForm_GetParentByTagName(element, tagName) {\n    var parent = element.parentNode;\n    var upperTagName = tagName.toUpperCase();\n    while (parent && (parent.tagName.toUpperCase() != upperTagName)) {\n        parent = parent.parentNode ? parent.parentNode : parent.parentElement;\n    }\n    return parent;\n}\nfunction WebForm_SetElementHeight(element, height) {\n    if (element && element.style) {\n        element.style.height = height + \"px\";\n    }\n}\nfunction WebForm_SetElementWidth(element, width) {\n    if (element && element.style) {\n        element.style.width = width + \"px\";\n    }\n}\nfunction WebForm_SetElementX(element, x) {\n    if (element && element.style) {\n        element.style.left = x + \"px\";\n    }\n}\nfunction WebForm_SetElementY(element, y) {\n    if (element && element.style) {\n        element.style.top = y + \"px\";\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/WebParts.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebParts.js\nvar __wpm = null;\nfunction Point(x, y) {\n    this.x = x;\n    this.y = y;\n}\nfunction __wpTranslateOffset(x, y, offsetElement, relativeToElement, includeScroll) {\n    while ((typeof(offsetElement) != \"undefined\") && (offsetElement != null) && (offsetElement != relativeToElement)) {\n        x += offsetElement.offsetLeft;\n        y += offsetElement.offsetTop;\n        var tagName = offsetElement.tagName;\n        if ((tagName != \"TABLE\") && (tagName != \"BODY\")) {\n            x += offsetElement.clientLeft;\n            y += offsetElement.clientTop;\n        }\n        if (includeScroll && (tagName != \"BODY\")) {\n            x -= offsetElement.scrollLeft;\n            y -= offsetElement.scrollTop;\n        }\n        offsetElement = offsetElement.offsetParent;\n    }\n    return new Point(x, y);\n}\nfunction __wpGetPageEventLocation(event, includeScroll) {\n    if ((typeof(event) == \"undefined\") || (event == null)) {\n        event = window.event;\n    }\n    return __wpTranslateOffset(event.offsetX, event.offsetY, event.srcElement, null, includeScroll);\n}\nfunction __wpClearSelection() {\n    document.selection.empty();\n}\nfunction WebPart(webPartElement, webPartTitleElement, zone, zoneIndex, allowZoneChange) {\n    this.webPartElement = webPartElement;\n    this.allowZoneChange = allowZoneChange;\n    this.zone = zone;\n    this.zoneIndex = zoneIndex;\n    this.title = ((typeof(webPartTitleElement) != \"undefined\") && (webPartTitleElement != null)) ?\n        webPartTitleElement.innerText : \"\";\n    webPartElement.__webPart = this;\n    if ((typeof(webPartTitleElement) != \"undefined\") && (webPartTitleElement != null)) {\n        webPartTitleElement.style.cursor = \"move\";\n        webPartTitleElement.attachEvent(\"onmousedown\", WebPart_OnMouseDown);\n        webPartElement.attachEvent(\"ondragstart\", WebPart_OnDragStart);\n        webPartElement.attachEvent(\"ondrag\", WebPart_OnDrag);\n        webPartElement.attachEvent(\"ondragend\", WebPart_OnDragEnd);\n    }\n    this.UpdatePosition = WebPart_UpdatePosition;\n    this.Dispose = WebPart_Dispose;\n}\nfunction WebPart_Dispose() {\n    this.webPartElement.__webPart = null    \n}\nfunction WebPart_OnMouseDown() {\n    var currentEvent = window.event;\n    var draggedWebPart = WebPart_GetParentWebPartElement(currentEvent.srcElement);\n    if ((typeof(draggedWebPart) == \"undefined\") || (draggedWebPart == null)) {\n        return;\n    }\n    document.selection.empty();\n    try {\n        __wpm.draggedWebPart = draggedWebPart;\n        __wpm.DragDrop();\n    }\n    catch (e) {\n        __wpm.draggedWebPart = draggedWebPart;\n        window.setTimeout(\"__wpm.DragDrop()\", 0);\n    }\n    currentEvent.returnValue = false;\n    currentEvent.cancelBubble = true;\n}\nfunction WebPart_OnDragStart() {\n    var currentEvent = window.event;\n    var webPartElement = currentEvent.srcElement;\n    if ((typeof(webPartElement.__webPart) == \"undefined\") || (webPartElement.__webPart == null)) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n        return;\n    }\n    var dataObject = currentEvent.dataTransfer;\n    dataObject.effectAllowed = __wpm.InitiateWebPartDragDrop(webPartElement);\n}\nfunction WebPart_OnDrag() {\n    __wpm.ContinueWebPartDragDrop();\n}\nfunction WebPart_OnDragEnd() {\n    __wpm.CompleteWebPartDragDrop();\n}\nfunction WebPart_GetParentWebPartElement(containedElement) {\n    var elem = containedElement;\n    while ((typeof(elem.__webPart) == \"undefined\") || (elem.__webPart == null)) {\n        elem = elem.parentElement;\n        if ((typeof(elem) == \"undefined\") || (elem == null)) {\n            break;\n        }\n    }\n    return elem;\n}\nfunction WebPart_UpdatePosition() {\n    var location = __wpTranslateOffset(0, 0, this.webPartElement, null, false);\n    this.middleX = location.x + this.webPartElement.offsetWidth / 2;\n    this.middleY = location.y + this.webPartElement.offsetHeight / 2;\n}\nfunction Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutChange, highlightColor) {\n    var webPartTable = null;\n    if (zoneElement.rows.length == 1) {\n        webPartTableContainer = zoneElement.rows[0].cells[0];\n    }\n    else {\n        webPartTableContainer = zoneElement.rows[1].cells[0];\n    }\n    var i;\n    for (i = 0; i < webPartTableContainer.childNodes.length; i++) {\n        var node = webPartTableContainer.childNodes[i];\n        if (node.tagName == \"TABLE\") {\n            webPartTable = node;\n            break;\n        }\n    }\n    this.zoneElement = zoneElement;\n    this.zoneIndex = zoneIndex;\n    this.webParts = new Array();\n    this.uniqueID = uniqueID;\n    this.isVertical = isVertical;\n    this.allowLayoutChange = allowLayoutChange;\n    this.allowDrop = false;\n    this.webPartTable = webPartTable;\n    this.highlightColor = highlightColor;\n    this.savedBorderColor = (webPartTable != null) ? webPartTable.style.borderColor : null;\n    this.dropCueElements = new Array();\n    if (webPartTable != null) {\n        if (isVertical) {\n            for (i = 0; i < webPartTable.rows.length; i += 2) {\n                this.dropCueElements[i / 2] = webPartTable.rows[i].cells[0].childNodes[0];\n            }\n        }\n        else {\n            for (i = 0; i < webPartTable.rows[0].cells.length; i += 2) {\n                this.dropCueElements[i / 2] = webPartTable.rows[0].cells[i].childNodes[0];\n            }\n        }\n    }\n    this.AddWebPart = Zone_AddWebPart;\n    this.GetWebPartIndex = Zone_GetWebPartIndex;\n    this.ToggleDropCues = Zone_ToggleDropCues;\n    this.UpdatePosition = Zone_UpdatePosition;\n    this.Dispose = Zone_Dispose;\n    webPartTable.__zone = this;\n    webPartTable.attachEvent(\"ondragenter\", Zone_OnDragEnter);\n    webPartTable.attachEvent(\"ondrop\", Zone_OnDrop);\n}\nfunction Zone_Dispose() {\n    for (var i = 0; i < this.webParts.length; i++) {\n        this.webParts[i].Dispose();\n    }\n    this.webPartTable.__zone = null;\n}\nfunction Zone_OnDragEnter() {\n    var handled = __wpm.ProcessWebPartDragEnter();\n    var currentEvent = window.event;\n    if (handled) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n    }\n}\nfunction Zone_OnDragOver() {\n    var handled = __wpm.ProcessWebPartDragOver();\n    var currentEvent = window.event;\n    if (handled) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n    }\n}\nfunction Zone_OnDrop() {\n    var handled = __wpm.ProcessWebPartDrop();\n    var currentEvent = window.event;\n    if (handled) {\n        currentEvent.returnValue = false;\n        currentEvent.cancelBubble = true;\n    }\n}\nfunction Zone_GetParentZoneElement(containedElement) {\n    var elem = containedElement;\n    while ((typeof(elem.__zone) == \"undefined\") || (elem.__zone == null)) {\n        elem = elem.parentElement;\n        if ((typeof(elem) == \"undefined\") || (elem == null)) {\n            break;\n        }\n    }\n    return elem;\n}\nfunction Zone_AddWebPart(webPartElement, webPartTitleElement, allowZoneChange) {\n    var webPart = null;\n    var zoneIndex = this.webParts.length;\n    if (this.allowLayoutChange && __wpm.IsDragDropEnabled()) {\n        webPart = new WebPart(webPartElement, webPartTitleElement, this, zoneIndex, allowZoneChange);\n    }\n    else {\n        webPart = new WebPart(webPartElement, null, this, zoneIndex, allowZoneChange);\n    }\n    this.webParts[zoneIndex] = webPart;\n    return webPart;\n}\nfunction Zone_ToggleDropCues(show, index, ignoreOutline) {\n    if (ignoreOutline == false) {\n        this.webPartTable.style.borderColor = (show ? this.highlightColor : this.savedBorderColor);\n    }\n    if (index == -1) {\n        return;\n    }\n    var dropCue = this.dropCueElements[index];\n    if (dropCue && dropCue.style) {\n        if (dropCue.style.height == \"100%\" && !dropCue.webPartZoneHorizontalCueResized) {\n            var oldParentHeight = dropCue.parentElement.clientHeight;\n            var realHeight = oldParentHeight - 10;\n            dropCue.style.height = realHeight + \"px\";\n            var dropCueVerticalBar = dropCue.getElementsByTagName(\"DIV\")[0];\n            if (dropCueVerticalBar && dropCueVerticalBar.style) {\n                dropCueVerticalBar.style.height = dropCue.style.height;\n                var heightDiff = (dropCue.parentElement.clientHeight - oldParentHeight);\n                if (heightDiff) {\n                    dropCue.style.height = (realHeight - heightDiff) + \"px\";\n                    dropCueVerticalBar.style.height = dropCue.style.height;\n                }\n            }\n            dropCue.webPartZoneHorizontalCueResized = true;\n        }\n        dropCue.style.visibility = (show ? \"visible\" : \"hidden\");\n    }\n}\nfunction Zone_GetWebPartIndex(location) {\n    var x = location.x;\n    var y = location.y;\n    if ((x < this.webPartTableLeft) || (x > this.webPartTableRight) ||\n        (y < this.webPartTableTop) || (y > this.webPartTableBottom)) {\n        return -1;\n    }\n    var vertical = this.isVertical;\n    var webParts = this.webParts;\n    var webPartsCount = webParts.length;\n    for (var i = 0; i < webPartsCount; i++) {\n        var webPart = webParts[i];\n        if (vertical) {\n            if (y < webPart.middleY) {\n                return i;\n            }\n        }\n        else {\n            if (x < webPart.middleX) {\n                return i;\n            }\n        }\n    }\n    return webPartsCount;\n}\nfunction Zone_UpdatePosition() {\n    var topLeft = __wpTranslateOffset(0, 0, this.webPartTable, null, false);\n    this.webPartTableLeft = topLeft.x;\n    this.webPartTableTop = topLeft.y;\n    this.webPartTableRight = (this.webPartTable != null) ? topLeft.x + this.webPartTable.offsetWidth : topLeft.x;\n    this.webPartTableBottom = (this.webPartTable != null) ? topLeft.y + this.webPartTable.offsetHeight : topLeft.y;\n    for (var i = 0; i < this.webParts.length; i++) {\n        this.webParts[i].UpdatePosition();\n    }\n}\nfunction WebPartDragState(webPartElement, effect) {\n    this.webPartElement = webPartElement;\n    this.dropZoneElement = null;\n    this.dropIndex = -1;\n    this.effect = effect;\n    this.dropped = false;\n}\nfunction WebPartMenu(menuLabelElement, menuDropDownElement, menuElement) {\n    this.menuLabelElement = menuLabelElement;\n    this.menuDropDownElement = menuDropDownElement;\n    this.menuElement = menuElement;\n    this.menuLabelElement.__menu = this;\n    this.menuLabelElement.attachEvent('onclick', WebPartMenu_OnClick);\n    this.menuLabelElement.attachEvent('onkeypress', WebPartMenu_OnKeyPress);\n    this.menuLabelElement.attachEvent('onmouseenter', WebPartMenu_OnMouseEnter);\n    this.menuLabelElement.attachEvent('onmouseleave', WebPartMenu_OnMouseLeave);\n    if ((typeof(this.menuDropDownElement) != \"undefined\") && (this.menuDropDownElement != null)) {\n        this.menuDropDownElement.__menu = this;\n    }\n    this.menuItemStyle = \"\";\n    this.menuItemHoverStyle = \"\";\n    this.popup = null;\n    this.hoverClassName = \"\";\n    this.hoverColor = \"\";\n    this.oldColor = this.menuLabelElement.style.color;\n    this.oldTextDecoration = this.menuLabelElement.style.textDecoration;\n    this.oldClassName = this.menuLabelElement.className;\n    this.Show = WebPartMenu_Show;\n    this.Hide = WebPartMenu_Hide;\n    this.Hover = WebPartMenu_Hover;\n    this.Unhover = WebPartMenu_Unhover;\n    this.Dispose = WebPartMenu_Dispose;\n    var menu = this;\n    this.disposeDelegate = function() { menu.Dispose(); };\n    window.attachEvent('onunload', this.disposeDelegate);\n}\nfunction WebPartMenu_Dispose() {\n    this.menuLabelElement.__menu = null;\n    this.menuDropDownElement.__menu = null;\n    window.detachEvent('onunload', this.disposeDelegate);\n}\nfunction WebPartMenu_Show() {\n    if ((typeof(__wpm.menu) != \"undefined\") && (__wpm.menu != null)) {\n        __wpm.menu.Hide();\n    }\n    var menuHTML =\n        \"<html><head><style>\" +\n        \"a.menuItem, a.menuItem:Link { display: block; padding: 1px; text-decoration: none; \" + this.itemStyle + \" }\" +\n        \"a.menuItem:Hover { \" + this.itemHoverStyle + \" }\" +\n        \"</style><body scroll=\\\"no\\\" style=\\\"border: none; margin: 0; padding: 0;\\\" ondragstart=\\\"window.event.returnValue=false;\\\" onclick=\\\"popup.hide()\\\">\" +\n        this.menuElement.innerHTML +\n        \"</body></html>\";\n    var width = 16;\n    var height = 16;\n    this.popup = window.createPopup();\n    __wpm.menu = this;\n    var popupDocument = this.popup.document;\n    popupDocument.write(menuHTML);\n    this.popup.show(0, 0, width, height);\n    var popupBody = popupDocument.body;\n    width = popupBody.scrollWidth;\n    height = popupBody.scrollHeight;\n    if (width < this.menuLabelElement.offsetWidth) {\n        width = this.menuLabelElement.offsetWidth + 16;\n    }\n    if (this.menuElement.innerHTML.indexOf(\"progid:DXImageTransform.Microsoft.Shadow\") != -1) {\n        popupBody.style.paddingRight = \"4px\";\n    }\n    popupBody.__wpm = __wpm;\n    popupBody.__wpmDeleteWarning = __wpmDeleteWarning;\n    popupBody.__wpmCloseProviderWarning = __wpmCloseProviderWarning;\n    popupBody.popup = this.popup;\n    this.popup.hide();\n    this.popup.show(0, this.menuLabelElement.offsetHeight, width, height, this.menuLabelElement);\n}\nfunction WebPartMenu_Hide() {\n    if (__wpm.menu == this) {\n        __wpm.menu = null;\n        if ((typeof(this.popup) != \"undefined\") && (this.popup != null)) {\n            this.popup.hide();\n            this.popup = null;\n        }\n    }\n}\nfunction WebPartMenu_Hover() {\n    if (this.labelHoverClassName != \"\") {\n        this.menuLabelElement.className = this.menuLabelElement.className + \" \" + this.labelHoverClassName;\n    }\n    if (this.labelHoverColor != \"\") {\n        this.menuLabelElement.style.color = this.labelHoverColor;\n    }\n}\nfunction WebPartMenu_Unhover() {\n    if (this.labelHoverClassName != \"\") {\n        this.menuLabelElement.style.textDecoration = this.oldTextDecoration;\n        this.menuLabelElement.className = this.oldClassName;\n    }\n    if (this.labelHoverColor != \"\") {\n        this.menuLabelElement.style.color = this.oldColor;\n    }\n}\nfunction WebPartMenu_OnClick() {\n    var menu = window.event.srcElement.__menu;\n    if ((typeof(menu) != \"undefined\") && (menu != null)) {\n        window.event.returnValue = false;\n        window.event.cancelBubble = true;\n        menu.Show();\n    }\n}\nfunction WebPartMenu_OnKeyPress() {\n    if (window.event.keyCode == 13) {\n        var menu = window.event.srcElement.__menu;\n        if ((typeof(menu) != \"undefined\") && (menu != null)) {\n            window.event.returnValue = false;\n            window.event.cancelBubble = true;\n            menu.Show();\n        }\n    }\n}\nfunction WebPartMenu_OnMouseEnter() {\n    var menu = window.event.srcElement.__menu;\n    if ((typeof(menu) != \"undefined\") && (menu != null)) {\n        menu.Hover();\n    }\n}\nfunction WebPartMenu_OnMouseLeave() {\n    var menu = window.event.srcElement.__menu;\n    if ((typeof(menu) != \"undefined\") && (menu != null)) {\n        menu.Unhover();\n    }\n}\nfunction WebPartManager() {\n    this.overlayContainerElement = null;\n    this.zones = new Array();\n    this.dragState = null;\n    this.menu = null;\n    this.draggedWebPart = null;\n    this.AddZone = WebPartManager_AddZone;\n    this.IsDragDropEnabled = WebPartManager_IsDragDropEnabled;\n    this.DragDrop = WebPartManager_DragDrop;\n    this.InitiateWebPartDragDrop = WebPartManager_InitiateWebPartDragDrop;\n    this.CompleteWebPartDragDrop = WebPartManager_CompleteWebPartDragDrop;\n    this.ContinueWebPartDragDrop = WebPartManager_ContinueWebPartDragDrop;\n    this.ProcessWebPartDragEnter = WebPartManager_ProcessWebPartDragEnter;\n    this.ProcessWebPartDragOver = WebPartManager_ProcessWebPartDragOver;\n    this.ProcessWebPartDrop = WebPartManager_ProcessWebPartDrop;\n    this.ShowHelp = WebPartManager_ShowHelp;\n    this.ExportWebPart = WebPartManager_ExportWebPart;\n    this.Execute = WebPartManager_Execute;\n    this.SubmitPage = WebPartManager_SubmitPage;\n    this.UpdatePositions = WebPartManager_UpdatePositions;\n    window.attachEvent(\"onunload\", WebPartManager_Dispose);\n}\nfunction WebPartManager_Dispose() {\n    for (var i = 0; i < __wpm.zones.length; i++) {\n        __wpm.zones[i].Dispose();\n    }\n    window.detachEvent(\"onunload\", WebPartManager_Dispose);\n}\nfunction WebPartManager_AddZone(zoneElement, uniqueID, isVertical, allowLayoutChange, highlightColor) {\n    var zoneIndex = this.zones.length;\n    var zone = new Zone(zoneElement, zoneIndex, uniqueID, isVertical, allowLayoutChange, highlightColor);\n    this.zones[zoneIndex] = zone;\n    return zone;\n}\nfunction WebPartManager_IsDragDropEnabled() {\n    return ((typeof(this.overlayContainerElement) != \"undefined\") && (this.overlayContainerElement != null));\n}\nfunction WebPartManager_DragDrop() {\n    if ((typeof(this.draggedWebPart) != \"undefined\") && (this.draggedWebPart != null)) {\n        var tempWebPart = this.draggedWebPart;\n        this.draggedWebPart = null;\n        tempWebPart.dragDrop();\n        window.setTimeout(\"__wpClearSelection()\", 0);\n    }\n}\nfunction WebPartManager_InitiateWebPartDragDrop(webPartElement) {\n    var webPart = webPartElement.__webPart;\n    this.UpdatePositions();\n    this.dragState = new WebPartDragState(webPartElement, \"move\");\n    var location = __wpGetPageEventLocation(window.event, true);\n    var overlayContainerElement = this.overlayContainerElement;\n    overlayContainerElement.style.left = location.x - webPartElement.offsetWidth / 2;\n    overlayContainerElement.style.top = location.y + 4 + (webPartElement.clientTop ? webPartElement.clientTop : 0);\n    overlayContainerElement.style.display = \"block\";\n    overlayContainerElement.style.width = webPartElement.offsetWidth;\n    overlayContainerElement.style.height = webPartElement.offsetHeight;\n    overlayContainerElement.appendChild(webPartElement.cloneNode(true));\n    if (webPart.allowZoneChange == false) {\n        webPart.zone.allowDrop = true;\n    }\n    else {\n        for (var i = 0; i < __wpm.zones.length; i++) {\n            var zone = __wpm.zones[i];\n            if (zone.allowLayoutChange) {\n                zone.allowDrop = true;\n            }\n        }\n    }\n    document.body.attachEvent(\"ondragover\", Zone_OnDragOver);\n    return \"move\";\n}\nfunction WebPartManager_CompleteWebPartDragDrop() {\n    var dragState = this.dragState;\n    this.dragState = null;\n    if ((typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n        dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, false);\n    }\n    document.body.detachEvent(\"ondragover\", Zone_OnDragOver);\n    for (var i = 0; i < __wpm.zones.length; i++) {\n        __wpm.zones[i].allowDrop = false;\n    }\n    this.overlayContainerElement.removeChild(this.overlayContainerElement.firstChild);\n    this.overlayContainerElement.style.display = \"none\";\n    if ((typeof(dragState) != \"undefined\") && (dragState != null) && (dragState.dropped == true)) {\n        var currentZone = dragState.webPartElement.__webPart.zone;\n        var currentZoneIndex = dragState.webPartElement.__webPart.zoneIndex;\n        if ((currentZone != dragState.dropZoneElement.__zone) ||\n            ((currentZoneIndex != dragState.dropIndex) &&\n             (currentZoneIndex != (dragState.dropIndex - 1)))) {\n            var eventTarget = dragState.dropZoneElement.__zone.uniqueID;\n            var eventArgument = \"Drag:\" + dragState.webPartElement.id + \":\" + dragState.dropIndex;\n            this.SubmitPage(eventTarget, eventArgument);\n        }\n    }\n}\nfunction WebPartManager_ContinueWebPartDragDrop() {\n    var dragState = this.dragState;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null)) {\n        var style = this.overlayContainerElement.style;\n        var location = __wpGetPageEventLocation(window.event, true);\n        style.left = location.x - dragState.webPartElement.offsetWidth / 2;\n        style.top = location.y + 4 + (dragState.webPartElement.clientTop ? dragState.webPartElement.clientTop : 0);\n    }\n}\nfunction WebPartManager_Execute(script) {\n    if (this.menu) {\n        this.menu.Hide();\n    }\n    var scriptReference = new Function(script);\n    return (scriptReference() != false);\n}\nfunction WebPartManager_ProcessWebPartDragEnter() {\n    var dragState = __wpm.dragState;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null)) {\n        var currentEvent = window.event;\n        var newDropZoneElement = Zone_GetParentZoneElement(currentEvent.srcElement);\n        if ((typeof(newDropZoneElement.__zone) == \"undefined\") || (newDropZoneElement.__zone == null) ||\n            (newDropZoneElement.__zone.allowDrop == false)) {\n            newDropZoneElement = null;\n        }\n        var newDropIndex = -1;\n        if ((typeof(newDropZoneElement) != \"undefined\") && (newDropZoneElement != null)) {\n            newDropIndex = newDropZoneElement.__zone.GetWebPartIndex(__wpGetPageEventLocation(currentEvent, false));\n            if (newDropIndex == -1) {\n                newDropZoneElement = null;\n            }\n        }\n        if (dragState.dropZoneElement != newDropZoneElement) {\n            if ((typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n                dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, false);\n            }\n            dragState.dropZoneElement = newDropZoneElement;\n            dragState.dropIndex = newDropIndex;\n            if ((typeof(newDropZoneElement) != \"undefined\") && (newDropZoneElement != null)) {\n                newDropZoneElement.__zone.ToggleDropCues(true, newDropIndex, false);\n            }\n        }\n        else if (dragState.dropIndex != newDropIndex) {\n            if (dragState.dropIndex != -1) {\n                dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, false);\n            }\n            dragState.dropIndex = newDropIndex;\n            if ((typeof(newDropZoneElement) != \"undefined\") && (newDropZoneElement != null)) {\n                newDropZoneElement.__zone.ToggleDropCues(true, newDropIndex, false);\n            }\n        }\n        if ((typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n            currentEvent.dataTransfer.effectAllowed = dragState.effect;\n        }\n        return true;\n    }\n    return false;\n}\nfunction WebPartManager_ProcessWebPartDragOver() {\n    var dragState = __wpm.dragState;\n    var currentEvent = window.event;\n    var handled = false;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null) &&\n        (typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n        var dropZoneElement = Zone_GetParentZoneElement(currentEvent.srcElement);\n        if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null) && (dropZoneElement.__zone.allowDrop == false)) {\n            dropZoneElement = null;\n        }\n        if (((typeof(dropZoneElement) == \"undefined\") || (dropZoneElement == null)) &&\n            (typeof(dragState.dropZoneElement) != \"undefined\") && (dragState.dropZoneElement != null)) {\n            dragState.dropZoneElement.__zone.ToggleDropCues(false, __wpm.dragState.dropIndex, false);\n            dragState.dropZoneElement = null;\n            dragState.dropIndex = -1;\n        }\n        else if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null)) {\n            var location = __wpGetPageEventLocation(currentEvent, false);\n            var newDropIndex = dropZoneElement.__zone.GetWebPartIndex(location);\n            if (newDropIndex == -1) {\n                dropZoneElement = null;\n            }\n            if (dragState.dropZoneElement != dropZoneElement) {\n                if ((dragState.dropIndex != -1) || (typeof(dropZoneElement) == \"undefined\") || (dropZoneElement == null)) {\n                    dragState.dropZoneElement.__zone.ToggleDropCues(false, __wpm.dragState.dropIndex, false);\n                }\n                dragState.dropZoneElement = dropZoneElement;\n            }\n            else {\n                dragState.dropZoneElement.__zone.ToggleDropCues(false, dragState.dropIndex, true);\n            }\n            dragState.dropIndex = newDropIndex;\n            if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null)) {\n                dropZoneElement.__zone.ToggleDropCues(true, newDropIndex, false);\n            }\n        }\n        handled = true;\n    }\n    if ((typeof(dragState) == \"undefined\") || (dragState == null) ||\n        (typeof(dragState.dropZoneElement) == \"undefined\") || (dragState.dropZoneElement == null)) {\n        currentEvent.dataTransfer.effectAllowed = \"none\";\n    }\n    return handled;\n}\nfunction WebPartManager_ProcessWebPartDrop() {\n    var dragState = this.dragState;\n    if ((typeof(dragState) != \"undefined\") && (dragState != null)) {\n        var currentEvent = window.event;\n        var dropZoneElement = Zone_GetParentZoneElement(currentEvent.srcElement);\n        if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null) && (dropZoneElement.__zone.allowDrop == false)) {\n            dropZoneElement = null;\n        }\n        if ((typeof(dropZoneElement) != \"undefined\") && (dropZoneElement != null) && (dragState.dropZoneElement == dropZoneElement)) {\n            dragState.dropped = true;\n        }\n        return true;\n    }\n    return false;\n}\nfunction WebPartManager_ShowHelp(helpUrl, helpMode) {\n    if ((typeof(this.menu) != \"undefined\") && (this.menu != null)) {\n        this.menu.Hide();\n    }\n    if (helpMode == 0 || helpMode == 1) {\n        if (helpMode == 0) {\n            var dialogInfo = \"edge: Sunken; center: yes; help: no; resizable: yes; status: no\";\n            window.showModalDialog(helpUrl, null, dialogInfo);\n        }\n        else {\n            window.open(helpUrl, null, \"scrollbars=yes,resizable=yes,status=no,toolbar=no,menubar=no,location=no\");\n        }\n    }\n    else if (helpMode == 2) {\n        window.location = helpUrl;\n    }\n}\nfunction WebPartManager_ExportWebPart(exportUrl, warn, confirmOnly) {\n    if (warn == true && __wpmExportWarning.length > 0 && this.personalizationScopeShared != true) {\n        if (confirm(__wpmExportWarning) == false) {\n            return false;\n        }\n    }\n    if (confirmOnly == false) {\n        window.location = exportUrl;\n    }\n    return true;\n}\nfunction WebPartManager_UpdatePositions() {\n    for (var i = 0; i < this.zones.length; i++) {\n        this.zones[i].UpdatePosition();\n    }\n}\nfunction WebPartManager_SubmitPage(eventTarget, eventArgument) {\n    if ((typeof(this.menu) != \"undefined\") && (this.menu != null)) {\n        this.menu.Hide();\n    }\n    __doPostBack(eventTarget, eventArgument);\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/WebForms/WebUIValidation.js",
    "content": "//CdnPath=http://ajax.aspnetcdn.com/ajax/4.5.1/1/WebUIValidation.js\nvar Page_ValidationVer = \"125\";\nvar Page_IsValid = true;\nvar Page_BlockSubmit = false;\nvar Page_InvalidControlToBeFocused = null;\nvar Page_TextTypes = /^(text|password|file|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i;\nfunction ValidatorUpdateDisplay(val) {\n    if (typeof(val.display) == \"string\") {\n        if (val.display == \"None\") {\n            return;\n        }\n        if (val.display == \"Dynamic\") {\n            val.style.display = val.isvalid ? \"none\" : \"inline\";\n            return;\n        }\n    }\n    if ((navigator.userAgent.indexOf(\"Mac\") > -1) &&\n        (navigator.userAgent.indexOf(\"MSIE\") > -1)) {\n        val.style.display = \"inline\";\n    }\n    val.style.visibility = val.isvalid ? \"hidden\" : \"visible\";\n}\nfunction ValidatorUpdateIsValid() {\n    Page_IsValid = AllValidatorsValid(Page_Validators);\n}\nfunction AllValidatorsValid(validators) {\n    if ((typeof(validators) != \"undefined\") && (validators != null)) {\n        var i;\n        for (i = 0; i < validators.length; i++) {\n            if (!validators[i].isvalid) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\nfunction ValidatorHookupControlID(controlID, val) {\n    if (typeof(controlID) != \"string\") {\n        return;\n    }\n    var ctrl = document.getElementById(controlID);\n    if ((typeof(ctrl) != \"undefined\") && (ctrl != null)) {\n        ValidatorHookupControl(ctrl, val);\n    }\n    else {\n        val.isvalid = true;\n        val.enabled = false;\n    }\n}\nfunction ValidatorHookupControl(control, val) {\n    if (typeof(control.tagName) != \"string\") {\n        return;  \n    }\n    if (control.tagName != \"INPUT\" && control.tagName != \"TEXTAREA\" && control.tagName != \"SELECT\") {\n        var i;\n        for (i = 0; i < control.childNodes.length; i++) {\n            ValidatorHookupControl(control.childNodes[i], val);\n        }\n        return;\n    }\n    else {\n        if (typeof(control.Validators) == \"undefined\") {\n            control.Validators = new Array;\n            var eventType;\n            if (control.type == \"radio\") {\n                eventType = \"onclick\";\n            } else {\n                eventType = \"onchange\";\n                if (typeof(val.focusOnError) == \"string\" && val.focusOnError == \"t\") {\n                    ValidatorHookupEvent(control, \"onblur\", \"ValidatedControlOnBlur(event); \");\n                }\n            }\n            ValidatorHookupEvent(control, eventType, \"ValidatorOnChange(event); \");\n            if (Page_TextTypes.test(control.type)) {\n                ValidatorHookupEvent(control, \"onkeypress\", \n                    \"event = event || window.event; if (!ValidatedTextBoxOnKeyPress(event)) { event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } \");\n            }\n        }\n        control.Validators[control.Validators.length] = val;\n    }\n}\nfunction ValidatorHookupEvent(control, eventType, functionPrefix) {\n    var ev = control[eventType];\n    if (typeof(ev) == \"function\") {\n        ev = ev.toString();\n        ev = ev.substring(ev.indexOf(\"{\") + 1, ev.lastIndexOf(\"}\"));\n    }\n    else {\n        ev = \"\";\n    }\n    control[eventType] = new Function(\"event\", functionPrefix + \" \" + ev);\n}\nfunction ValidatorGetValue(id) {\n    var control;\n    control = document.getElementById(id);\n    if (typeof(control.value) == \"string\") {\n        return control.value;\n    }\n    return ValidatorGetValueRecursive(control);\n}\nfunction ValidatorGetValueRecursive(control)\n{\n    if (typeof(control.value) == \"string\" && (control.type != \"radio\" || control.checked == true)) {\n        return control.value;\n    }\n    var i, val;\n    for (i = 0; i<control.childNodes.length; i++) {\n        val = ValidatorGetValueRecursive(control.childNodes[i]);\n        if (val != \"\") return val;\n    }\n    return \"\";\n}\nfunction Page_ClientValidate(validationGroup) {\n    Page_InvalidControlToBeFocused = null;\n    if (typeof(Page_Validators) == \"undefined\") {\n        return true;\n    }\n    var i;\n    for (i = 0; i < Page_Validators.length; i++) {\n        ValidatorValidate(Page_Validators[i], validationGroup, null);\n    }\n    ValidatorUpdateIsValid();\n    ValidationSummaryOnSubmit(validationGroup);\n    Page_BlockSubmit = !Page_IsValid;\n    return Page_IsValid;\n}\nfunction ValidatorCommonOnSubmit() {\n    Page_InvalidControlToBeFocused = null;\n    var result = !Page_BlockSubmit;\n    if ((typeof(window.event) != \"undefined\") && (window.event != null)) {\n        window.event.returnValue = result;\n    }\n    Page_BlockSubmit = false;\n    return result;\n}\nfunction ValidatorEnable(val, enable) {\n    val.enabled = (enable != false);\n    ValidatorValidate(val);\n    ValidatorUpdateIsValid();\n}\nfunction ValidatorOnChange(event) {\n    event = event || window.event;\n    Page_InvalidControlToBeFocused = null;\n    var targetedControl;\n    if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n        targetedControl = event.srcElement;\n    }\n    else {\n        targetedControl = event.target;\n    }\n    var vals;\n    if (typeof(targetedControl.Validators) != \"undefined\") {\n        vals = targetedControl.Validators;\n    }\n    else {\n        if (targetedControl.tagName.toLowerCase() == \"label\") {\n            targetedControl = document.getElementById(targetedControl.htmlFor);\n            vals = targetedControl.Validators;\n        }\n    }\n    if (vals) {\n        for (var i = 0; i < vals.length; i++) {\n            ValidatorValidate(vals[i], null, event);\n        }\n    }\n    ValidatorUpdateIsValid();\n}\nfunction ValidatedTextBoxOnKeyPress(event) {\n    event = event || window.event;\n    if (event.keyCode == 13) {\n        ValidatorOnChange(event);\n        var vals;\n        if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n            vals = event.srcElement.Validators;\n        }\n        else {\n            vals = event.target.Validators;\n        }\n        return AllValidatorsValid(vals);\n    }\n    return true;\n}\nfunction ValidatedControlOnBlur(event) {\n    event = event || window.event;\n    var control;\n    if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n        control = event.srcElement;\n    }\n    else {\n        control = event.target;\n    }\n    if ((typeof(control) != \"undefined\") && (control != null) && (Page_InvalidControlToBeFocused == control)) {\n        control.focus();\n        Page_InvalidControlToBeFocused = null;\n    }\n}\nfunction ValidatorValidate(val, validationGroup, event) {\n    val.isvalid = true;\n    if ((typeof(val.enabled) == \"undefined\" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {\n        if (typeof(val.evaluationfunction) == \"function\") {\n            val.isvalid = val.evaluationfunction(val);\n            if (!val.isvalid && Page_InvalidControlToBeFocused == null &&\n                typeof(val.focusOnError) == \"string\" && val.focusOnError == \"t\") {\n                ValidatorSetFocus(val, event);\n            }\n        }\n    }\n    ValidatorUpdateDisplay(val);\n}\nfunction ValidatorSetFocus(val, event) {\n    var ctrl;\n    if (typeof(val.controlhookup) == \"string\") {\n        var eventCtrl;\n        if ((typeof(event) != \"undefined\") && (event != null)) {\n            if ((typeof(event.srcElement) != \"undefined\") && (event.srcElement != null)) {\n                eventCtrl = event.srcElement;\n            }\n            else {\n                eventCtrl = event.target;\n            }\n        }\n        if ((typeof(eventCtrl) != \"undefined\") && (eventCtrl != null) &&\n            (typeof(eventCtrl.id) == \"string\") &&\n            (eventCtrl.id == val.controlhookup)) {\n            ctrl = eventCtrl;\n        }\n    }\n    if ((typeof(ctrl) == \"undefined\") || (ctrl == null)) {\n        ctrl = document.getElementById(val.controltovalidate);\n    }\n    if ((typeof(ctrl) != \"undefined\") && (ctrl != null) &&\n        (ctrl.tagName.toLowerCase() != \"table\" || (typeof(event) == \"undefined\") || (event == null)) && \n        ((ctrl.tagName.toLowerCase() != \"input\") || (ctrl.type.toLowerCase() != \"hidden\")) &&\n        (typeof(ctrl.disabled) == \"undefined\" || ctrl.disabled == null || ctrl.disabled == false) &&\n        (typeof(ctrl.visible) == \"undefined\" || ctrl.visible == null || ctrl.visible != false) &&\n        (IsInVisibleContainer(ctrl))) {\n        if ((ctrl.tagName.toLowerCase() == \"table\" && (typeof(__nonMSDOMBrowser) == \"undefined\" || __nonMSDOMBrowser)) ||\n            (ctrl.tagName.toLowerCase() == \"span\")) {\n            var inputElements = ctrl.getElementsByTagName(\"input\");\n            var lastInputElement  = inputElements[inputElements.length -1];\n            if (lastInputElement != null) {\n                ctrl = lastInputElement;\n            }\n        }\n        if (typeof(ctrl.focus) != \"undefined\" && ctrl.focus != null) {\n            ctrl.focus();\n            Page_InvalidControlToBeFocused = ctrl;\n        }\n    }\n}\nfunction IsInVisibleContainer(ctrl) {\n    if (typeof(ctrl.style) != \"undefined\" &&\n        ( ( typeof(ctrl.style.display) != \"undefined\" &&\n            ctrl.style.display == \"none\") ||\n          ( typeof(ctrl.style.visibility) != \"undefined\" &&\n            ctrl.style.visibility == \"hidden\") ) ) {\n        return false;\n    }\n    else if (typeof(ctrl.parentNode) != \"undefined\" &&\n             ctrl.parentNode != null &&\n             ctrl.parentNode != ctrl) {\n        return IsInVisibleContainer(ctrl.parentNode);\n    }\n    return true;\n}\nfunction IsValidationGroupMatch(control, validationGroup) {\n    if ((typeof(validationGroup) == \"undefined\") || (validationGroup == null)) {\n        return true;\n    }\n    var controlGroup = \"\";\n    if (typeof(control.validationGroup) == \"string\") {\n        controlGroup = control.validationGroup;\n    }\n    return (controlGroup == validationGroup);\n}\nfunction ValidatorOnLoad() {\n    if (typeof(Page_Validators) == \"undefined\")\n        return;\n    var i, val;\n    for (i = 0; i < Page_Validators.length; i++) {\n        val = Page_Validators[i];\n        if (typeof(val.evaluationfunction) == \"string\") {\n            eval(\"val.evaluationfunction = \" + val.evaluationfunction + \";\");\n        }\n        if (typeof(val.isvalid) == \"string\") {\n            if (val.isvalid == \"False\") {\n                val.isvalid = false;\n                Page_IsValid = false;\n            }\n            else {\n                val.isvalid = true;\n            }\n        } else {\n            val.isvalid = true;\n        }\n        if (typeof(val.enabled) == \"string\") {\n            val.enabled = (val.enabled != \"False\");\n        }\n        if (typeof(val.controltovalidate) == \"string\") {\n            ValidatorHookupControlID(val.controltovalidate, val);\n        }\n        if (typeof(val.controlhookup) == \"string\") {\n            ValidatorHookupControlID(val.controlhookup, val);\n        }\n    }\n    Page_ValidationActive = true;\n}\nfunction ValidatorConvert(op, dataType, val) {\n    function GetFullYear(year) {\n        var twoDigitCutoffYear = val.cutoffyear % 100;\n        var cutoffYearCentury = val.cutoffyear - twoDigitCutoffYear;\n        return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year));\n    }\n    var num, cleanInput, m, exp;\n    if (dataType == \"Integer\") {\n        exp = /^\\s*[-\\+]?\\d+\\s*$/;\n        if (op.match(exp) == null)\n            return null;\n        num = parseInt(op, 10);\n        return (isNaN(num) ? null : num);\n    }\n    else if(dataType == \"Double\") {\n        exp = new RegExp(\"^\\\\s*([-\\\\+])?(\\\\d*)\\\\\" + val.decimalchar + \"?(\\\\d*)\\\\s*$\");\n        m = op.match(exp);\n        if (m == null)\n            return null;\n        if (m[2].length == 0 && m[3].length == 0)\n            return null;\n        cleanInput = (m[1] != null ? m[1] : \"\") + (m[2].length>0 ? m[2] : \"0\") + (m[3].length>0 ? \".\" + m[3] : \"\");\n        num = parseFloat(cleanInput);\n        return (isNaN(num) ? null : num);\n    }\n    else if (dataType == \"Currency\") {\n        var hasDigits = (val.digits > 0);\n        var beginGroupSize, subsequentGroupSize;\n        var groupSizeNum = parseInt(val.groupsize, 10);\n        if (!isNaN(groupSizeNum) && groupSizeNum > 0) {\n            beginGroupSize = \"{1,\" + groupSizeNum + \"}\";\n            subsequentGroupSize = \"{\" + groupSizeNum + \"}\";\n        }\n        else {\n            beginGroupSize = subsequentGroupSize = \"+\";\n        }\n        exp = new RegExp(\"^\\\\s*([-\\\\+])?((\\\\d\" + beginGroupSize + \"(\\\\\" + val.groupchar + \"\\\\d\" + subsequentGroupSize + \")+)|\\\\d*)\"\n                        + (hasDigits ? \"\\\\\" + val.decimalchar + \"?(\\\\d{0,\" + val.digits + \"})\" : \"\")\n                        + \"\\\\s*$\");\n        m = op.match(exp);\n        if (m == null)\n            return null;\n        if (m[2].length == 0 && hasDigits && m[5].length == 0)\n            return null;\n        cleanInput = (m[1] != null ? m[1] : \"\") + m[2].replace(new RegExp(\"(\\\\\" + val.groupchar + \")\", \"g\"), \"\") + ((hasDigits && m[5].length > 0) ? \".\" + m[5] : \"\");\n        num = parseFloat(cleanInput);\n        return (isNaN(num) ? null : num);\n    }\n    else if (dataType == \"Date\") {\n        var yearFirstExp = new RegExp(\"^\\\\s*((\\\\d{4})|(\\\\d{2}))([-/]|\\\\. ?)(\\\\d{1,2})\\\\4(\\\\d{1,2})\\\\.?\\\\s*$\");\n        m = op.match(yearFirstExp);\n        var day, month, year;\n        if (m != null && (((typeof(m[2]) != \"undefined\") && (m[2].length == 4)) || val.dateorder == \"ymd\")) {\n            day = m[6];\n            month = m[5];\n            year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));\n        }\n        else {\n            if (val.dateorder == \"ymd\"){\n                return null;\n            }\n            var yearLastExp = new RegExp(\"^\\\\s*(\\\\d{1,2})([-/]|\\\\. ?)(\\\\d{1,2})(?:\\\\s|\\\\2)((\\\\d{4})|(\\\\d{2}))(?:\\\\s\\u0433\\\\.|\\\\.)?\\\\s*$\");\n            m = op.match(yearLastExp);\n            if (m == null) {\n                return null;\n            }\n            if (val.dateorder == \"mdy\") {\n                day = m[3];\n                month = m[1];\n            }\n            else {\n                day = m[1];\n                month = m[3];\n            }\n            year = ((typeof(m[5]) != \"undefined\") && (m[5].length == 4)) ? m[5] : GetFullYear(parseInt(m[6], 10));\n        }\n        month -= 1;\n        var date = new Date(year, month, day);\n        if (year < 100) {\n            date.setFullYear(year);\n        }\n        return (typeof(date) == \"object\" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;\n    }\n    else {\n        return op.toString();\n    }\n}\nfunction ValidatorCompare(operand1, operand2, operator, val) {\n    var dataType = val.type;\n    var op1, op2;\n    if ((op1 = ValidatorConvert(operand1, dataType, val)) == null)\n        return false;\n    if (operator == \"DataTypeCheck\")\n        return true;\n    if ((op2 = ValidatorConvert(operand2, dataType, val)) == null)\n        return true;\n    switch (operator) {\n        case \"NotEqual\":\n            return (op1 != op2);\n        case \"GreaterThan\":\n            return (op1 > op2);\n        case \"GreaterThanEqual\":\n            return (op1 >= op2);\n        case \"LessThan\":\n            return (op1 < op2);\n        case \"LessThanEqual\":\n            return (op1 <= op2);\n        default:\n            return (op1 == op2);\n    }\n}\nfunction CompareValidatorEvaluateIsValid(val) {\n    var value = ValidatorGetValue(val.controltovalidate);\n    if (ValidatorTrim(value).length == 0)\n        return true;\n    var compareTo = \"\";\n    if ((typeof(val.controltocompare) != \"string\") ||\n        (typeof(document.getElementById(val.controltocompare)) == \"undefined\") ||\n        (null == document.getElementById(val.controltocompare))) {\n        if (typeof(val.valuetocompare) == \"string\") {\n            compareTo = val.valuetocompare;\n        }\n    }\n    else {\n        compareTo = ValidatorGetValue(val.controltocompare);\n    }\n    var operator = \"Equal\";\n    if (typeof(val.operator) == \"string\") {\n        operator = val.operator;\n    }\n    return ValidatorCompare(value, compareTo, operator, val);\n}\nfunction CustomValidatorEvaluateIsValid(val) {\n    var value = \"\";\n    if (typeof(val.controltovalidate) == \"string\") {\n        value = ValidatorGetValue(val.controltovalidate);\n        if ((ValidatorTrim(value).length == 0) &&\n            ((typeof(val.validateemptytext) != \"string\") || (val.validateemptytext != \"true\"))) {\n            return true;\n        }\n    }\n    var args = { Value:value, IsValid:true };\n    if (typeof(val.clientvalidationfunction) == \"string\") {\n        eval(val.clientvalidationfunction + \"(val, args) ;\");\n    }\n    return args.IsValid;\n}\nfunction RegularExpressionValidatorEvaluateIsValid(val) {\n    var value = ValidatorGetValue(val.controltovalidate);\n    if (ValidatorTrim(value).length == 0)\n        return true;\n    var rx = new RegExp(val.validationexpression);\n    var matches = rx.exec(value);\n    return (matches != null && value == matches[0]);\n}\nfunction ValidatorTrim(s) {\n    var m = s.match(/^\\s*(\\S+(\\s+\\S+)*)\\s*$/);\n    return (m == null) ? \"\" : m[1];\n}\nfunction RequiredFieldValidatorEvaluateIsValid(val) {\n    return (ValidatorTrim(ValidatorGetValue(val.controltovalidate)) != ValidatorTrim(val.initialvalue))\n}\nfunction RangeValidatorEvaluateIsValid(val) {\n    var value = ValidatorGetValue(val.controltovalidate);\n    if (ValidatorTrim(value).length == 0)\n        return true;\n    return (ValidatorCompare(value, val.minimumvalue, \"GreaterThanEqual\", val) &&\n            ValidatorCompare(value, val.maximumvalue, \"LessThanEqual\", val));\n}\nfunction ValidationSummaryOnSubmit(validationGroup) {\n    if (typeof(Page_ValidationSummaries) == \"undefined\")\n        return;\n    var summary, sums, s;\n    var headerSep, first, pre, post, end;\n    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {\n        summary = Page_ValidationSummaries[sums];\n        if (!summary) continue;\n        summary.style.display = \"none\";\n        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {\n            var i;\n            if (summary.showsummary != \"False\") {\n                summary.style.display = \"\";\n                if (typeof(summary.displaymode) != \"string\") {\n                    summary.displaymode = \"BulletList\";\n                }\n                switch (summary.displaymode) {\n                    case \"List\":\n                        headerSep = \"<br>\";\n                        first = \"\";\n                        pre = \"\";\n                        post = \"<br>\";\n                        end = \"\";\n                        break;\n                    case \"BulletList\":\n                    default:\n                        headerSep = \"\";\n                        first = \"<ul>\";\n                        pre = \"<li>\";\n                        post = \"</li>\";\n                        end = \"</ul>\";\n                        break;\n                    case \"SingleParagraph\":\n                        headerSep = \" \";\n                        first = \"\";\n                        pre = \"\";\n                        post = \" \";\n                        end = \"<br>\";\n                        break;\n                }\n                s = \"\";\n                if (typeof(summary.headertext) == \"string\") {\n                    s += summary.headertext + headerSep;\n                }\n                s += first;\n                for (i=0; i<Page_Validators.length; i++) {\n                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == \"string\") {\n                        s += pre + Page_Validators[i].errormessage + post;\n                    }\n                }\n                s += end;\n                summary.innerHTML = s;\n                window.scrollTo(0,0);\n            }\n            if (summary.showmessagebox == \"True\") {\n                s = \"\";\n                if (typeof(summary.headertext) == \"string\") {\n                    s += summary.headertext + \"\\r\\n\";\n                }\n                var lastValIndex = Page_Validators.length - 1;\n                for (i=0; i<=lastValIndex; i++) {\n                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == \"string\") {\n                        switch (summary.displaymode) {\n                            case \"List\":\n                                s += Page_Validators[i].errormessage;\n                                if (i < lastValIndex) {\n                                    s += \"\\r\\n\";\n                                }\n                                break;\n                            case \"BulletList\":\n                            default:\n                                s += \"- \" + Page_Validators[i].errormessage;\n                                if (i < lastValIndex) {\n                                    s += \"\\r\\n\";\n                                }\n                                break;\n                            case \"SingleParagraph\":\n                                s += Page_Validators[i].errormessage + \" \";\n                                break;\n                        }\n                    }\n                }\n                alert(s);\n            }\n        }\n    }\n}\nif (window.jQuery) {\n    (function ($) {\n        var dataValidationAttribute = \"data-val\",\n            dataValidationSummaryAttribute = \"data-valsummary\",\n            normalizedAttributes = { validationgroup: \"validationGroup\", focusonerror: \"focusOnError\" };\n        function getAttributesWithPrefix(element, prefix) {\n            var i,\n                attribute,\n                list = {},\n                attributes = element.attributes,\n                length = attributes.length,\n                prefixLength = prefix.length;\n            prefix = prefix.toLowerCase();\n            for (i = 0; i < length; i++) {\n                attribute = attributes[i];\n                if (attribute.specified && attribute.name.substr(0, prefixLength).toLowerCase() === prefix) {\n                    list[attribute.name.substr(prefixLength)] = attribute.value;\n                }\n            }\n            return list;\n        }\n        function normalizeKey(key) {\n            key = key.toLowerCase();\n            return normalizedAttributes[key] === undefined ? key : normalizedAttributes[key];\n        }\n        function addValidationExpando(element) {\n            var attributes = getAttributesWithPrefix(element, dataValidationAttribute + \"-\");\n            $.each(attributes, function (key, value) {\n                element[normalizeKey(key)] = value;\n            });\n        }\n        function dispose(element) {\n            var index = $.inArray(element, Page_Validators);\n            if (index >= 0) {\n                Page_Validators.splice(index, 1);\n            }\n        }\n        function addNormalizedAttribute(name, normalizedName) {\n            normalizedAttributes[name.toLowerCase()] = normalizedName;\n        }\n        function parseSpecificAttribute(selector, attribute, validatorsArray) {\n            return $(selector).find(\"[\" + attribute + \"='true']\").each(function (index, element) {\n                addValidationExpando(element);\n                element.dispose = function () { dispose(element); element.dispose = null; };\n                if ($.inArray(element, validatorsArray) === -1) {\n                    validatorsArray.push(element);\n                }\n            }).length;\n        }\n        function parse(selector) {\n            var length = parseSpecificAttribute(selector, dataValidationAttribute, Page_Validators);\n            length += parseSpecificAttribute(selector, dataValidationSummaryAttribute, Page_ValidationSummaries);\n            return length;\n        }\n        function loadValidators() {\n            if (typeof (ValidatorOnLoad) === \"function\") {\n                ValidatorOnLoad();\n            }\n            if (typeof (ValidatorOnSubmit) === \"undefined\") {\n                window.ValidatorOnSubmit = function () {\n                    return Page_ValidationActive ? ValidatorCommonOnSubmit() : true;\n                };\n            }\n        }\n        function registerUpdatePanel() {\n            if (window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager) {\n                var prm = Sys.WebForms.PageRequestManager.getInstance(),\n                    postBackElement, endRequestHandler;\n                if (prm.get_isInAsyncPostBack()) {\n                    endRequestHandler = function (sender, args) {\n                        if (parse(document)) {\n                            loadValidators();\n                        }\n                        prm.remove_endRequest(endRequestHandler);\n                        endRequestHandler = null;\n                    };\n                    prm.add_endRequest(endRequestHandler);\n                }\n                prm.add_beginRequest(function (sender, args) {\n                    postBackElement = args.get_postBackElement();\n                });\n                prm.add_pageLoaded(function (sender, args) {\n                    var i, panels, valFound = 0;\n                    if (typeof (postBackElement) === \"undefined\") {\n                        return;\n                    }\n                    panels = args.get_panelsUpdated();\n                    for (i = 0; i < panels.length; i++) {\n                        valFound += parse(panels[i]);\n                    }\n                    panels = args.get_panelsCreated();\n                    for (i = 0; i < panels.length; i++) {\n                        valFound += parse(panels[i]);\n                    }\n                    if (valFound) {\n                        loadValidators();\n                    }\n                });\n            }\n        }\n        $(function () {\n            if (typeof (Page_Validators) === \"undefined\") {\n                window.Page_Validators = [];\n            }\n            if (typeof (Page_ValidationSummaries) === \"undefined\") {\n                window.Page_ValidationSummaries = [];\n            }\n            if (typeof (Page_ValidationActive) === \"undefined\") {\n                window.Page_ValidationActive = false;\n            }\n            $.WebFormValidator = {\n                addNormalizedAttribute: addNormalizedAttribute,\n                parse: parse\n            };\n            if (parse(document)) {\n                loadValidators();\n            }\n            registerUpdatePanel();\n        });\n    } (jQuery));\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/_references.js",
    "content": "﻿/// <reference path=\"jquery-3.1.1.js\" />\n/// <autosync enabled=\"true\" />\n/// <reference path=\"bootstrap.min.js\" />\n/// <reference path=\"jquery-2.2.4.min.js\" />\n/// <reference path=\"modernizr-2.8.3.js\" />\n/// <reference path=\"respond.matchmedia.addlistener.min.js\" />\n/// <reference path=\"respond.min.js\" />\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  }\n\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml)\n    }\n\n    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/jquery-3.1.1.intellisense.js",
    "content": "intellisense.annotate(jQuery, {\n  'ajax': function() {\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform an asynchronous HTTP (Ajax) request.</summary>\n    ///   <param name=\"settings\" type=\"PlainObject\">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'ajaxPrefilter': function() {\n    /// <signature>\n    ///   <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>\n    ///   <param name=\"dataTypes\" type=\"String\">An optional string containing one or more space-separated dataTypes</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to set default values for future Ajax requests.</param>\n    /// </signature>\n  },\n  'ajaxSetup': function() {\n    /// <signature>\n    ///   <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>\n    /// </signature>\n  },\n  'ajaxTransport': function() {\n    /// <signature>\n    ///   <summary>Creates an object that handles the actual transmission of Ajax data.</summary>\n    ///   <param name=\"dataType\" type=\"String\">A string identifying the data type to use</param>\n    ///   <param name=\"handler(options, originalOptions, jqXHR)\" type=\"Function\">A handler to return the new transport object to use with the data type provided in the first argument.</param>\n    /// </signature>\n  },\n  'boxModel': function() {\n    /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'browser': function() {\n    /// <summary>Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead.</summary>\n    /// <returns type=\"PlainObject\" />\n  },\n  'browser.version': function() {\n    /// <summary>The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin.</summary>\n    /// <returns type=\"String\" />\n  },\n  'Callbacks': function() {\n    /// <signature>\n    ///   <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>\n    ///   <param name=\"flags\" type=\"String\">An optional list of space-separated flags that change how the callback list behaves.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>\n    ///   <param name=\"container\" type=\"Element\">The DOM element that may contain the other element.</param>\n    ///   <param name=\"contained\" type=\"Element\">The DOM element that may be contained by (a descendant of) the other element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'cssHooks': function() {\n    /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <param name=\"key\" type=\"String\">Name of the data stored.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>\n    ///   <param name=\"element\" type=\"Element\">The DOM element to query for the data.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'Deferred': function() {\n    /// <signature>\n    ///   <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>\n    ///   <param name=\"beforeStart\" type=\"Function\">A function that is called just before the constructor returns.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove and execute a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    /// </signature>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>\n    ///   <param name=\"collection\" type=\"Object\">The object or array to iterate over.</param>\n    ///   <param name=\"callback(indexInArray, valueOfElement)\" type=\"Function\">The function that will be executed on every object.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Takes a string and throws an exception containing it.</summary>\n    ///   <param name=\"message\" type=\"String\">The message to send out.</param>\n    /// </signature>\n  },\n  'extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"target\" type=\"Object\">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Merge the contents of two or more objects together into the first object.</summary>\n    ///   <param name=\"deep\" type=\"Boolean\">If true, the merge becomes recursive (aka. deep copy).</param>\n    ///   <param name=\"target\" type=\"Object\">The object to extend. It will receive the new properties.</param>\n    ///   <param name=\"object1\" type=\"Object\">An object containing additional properties to merge in.</param>\n    ///   <param name=\"objectN\" type=\"Object\">Additional objects containing properties to merge in.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'fn.extend': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>\n    ///   <param name=\"object\" type=\"Object\">An object to merge onto the jQuery prototype.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP GET request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getJSON': function() {\n    /// <signature>\n    ///   <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'getScript': function() {\n    /// <signature>\n    ///   <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"success(script, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds.</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'globalEval': function() {\n    /// <signature>\n    ///   <summary>Execute some JavaScript code globally.</summary>\n    ///   <param name=\"code\" type=\"String\">The JavaScript code to execute.</param>\n    /// </signature>\n  },\n  'grep': function() {\n    /// <signature>\n    ///   <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>\n    ///   <param name=\"array\" type=\"Array\">The array to search through.</param>\n    ///   <param name=\"function(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the item, and the second argument is the index.  The function should return a Boolean value.  this will be the global window object.</param>\n    ///   <param name=\"invert\" type=\"Boolean\">If \"invert\" is false, or not provided, then the function returns an array consisting of all elements for which \"callback\" returns true.  If \"invert\" is true, then the function returns an array consisting of all elements for which \"callback\" returns false.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'hasData': function() {\n    /// <signature>\n    ///   <summary>Determine whether an element has any jQuery data associated with it.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to be checked for data.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'holdReady': function() {\n    /// <signature>\n    ///   <summary>Holds or releases the execution of jQuery's ready event.</summary>\n    ///   <param name=\"hold\" type=\"Boolean\">Indicates whether the ready hold is being requested or released</param>\n    /// </signature>\n  },\n  'inArray': function() {\n    /// <signature>\n    ///   <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>\n    ///   <param name=\"value\" type=\"Anything\">The value to search for.</param>\n    ///   <param name=\"array\" type=\"Array\">An array through which to search.</param>\n    ///   <param name=\"fromIndex\" type=\"Number\">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'isArray': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is an array.</summary>\n    ///   <param name=\"obj\" type=\"Object\">Object to test whether or not it is an array.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isEmptyObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is empty (contains no enumerable properties).</summary>\n    ///   <param name=\"object\" type=\"Object\">The object that will be checked to see if it's empty.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isFunction': function() {\n    /// <signature>\n    ///   <summary>Determine if the argument passed is a Javascript function object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a function.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isNumeric': function() {\n    /// <signature>\n    ///   <summary>Determines whether its argument is a number.</summary>\n    ///   <param name=\"value\" type=\"PlainObject\">The value to be tested.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isPlainObject': function() {\n    /// <signature>\n    ///   <summary>Check to see if an object is a plain object (created using \"{}\" or \"new Object\").</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">The object that will be checked to see if it's a plain object.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isWindow': function() {\n    /// <signature>\n    ///   <summary>Determine whether the argument is a window.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to test whether or not it is a window.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'isXMLDoc': function() {\n    /// <signature>\n    ///   <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>\n    ///   <param name=\"node\" type=\"Element\">The DOM node that will be checked to see if it's in an XML document.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'makeArray': function() {\n    /// <signature>\n    ///   <summary>Convert an array-like object into a true JavaScript array.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Any object to turn into a native Array.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array to translate.</param>\n    ///   <param name=\"callback(elementOfArray, indexInArray)\" type=\"Function\">The function to process each item against.  The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Translate all items in an array or object to new array of items.</summary>\n    ///   <param name=\"arrayOrObject\" type=\"\">The Array or Object to translate.</param>\n    ///   <param name=\"callback( value, indexOrKey )\" type=\"Function\">The function to process each item against.  The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'merge': function() {\n    /// <signature>\n    ///   <summary>Merge the contents of two arrays together into the first array.</summary>\n    ///   <param name=\"first\" type=\"Array\">The first array to merge, the elements of second added.</param>\n    ///   <param name=\"second\" type=\"Array\">The second array to merge into the first, unaltered.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'noConflict': function() {\n    /// <signature>\n    ///   <summary>Relinquish jQuery's control of the $ variable.</summary>\n    ///   <param name=\"removeAll\" type=\"Boolean\">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'noop': function() {\n    /// <summary>An empty function.</summary>\n  },\n  'now': function() {\n    /// <summary>Return a number representing the current time.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'param': function() {\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>\n    ///   <param name=\"obj\" type=\"\">An array or object to serialize.</param>\n    ///   <param name=\"traditional\" type=\"Boolean\">A Boolean indicating whether to perform a traditional \"shallow\" serialization.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'parseHTML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an array of DOM nodes.</summary>\n    ///   <param name=\"data\" type=\"String\">HTML string to be parsed</param>\n    ///   <param name=\"context\" type=\"Element\">Document element to serve as the context in which the HTML fragment will be created</param>\n    ///   <param name=\"keepScripts\" type=\"Boolean\">A Boolean indicating whether to include scripts passed in the HTML string</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'parseJSON': function() {\n    /// <signature>\n    ///   <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>\n    ///   <param name=\"json\" type=\"String\">The JSON string to parse.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'parseXML': function() {\n    /// <signature>\n    ///   <summary>Parses a string into an XML document.</summary>\n    ///   <param name=\"data\" type=\"String\">a well-formed XML string to be parsed</param>\n    ///   <returns type=\"XMLDocument\" />\n    /// </signature>\n  },\n  'post': function() {\n    /// <signature>\n    ///   <summary>Load data from the server using a HTTP POST request.</summary>\n    ///   <param name=\"url\" type=\"String\">A string containing the URL to which the request is sent.</param>\n    ///   <param name=\"data\" type=\"\">A plain object or string that is sent to the server with the request.</param>\n    ///   <param name=\"success(data, textStatus, jqXHR)\" type=\"Function\">A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.</param>\n    ///   <param name=\"dataType\" type=\"String\">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>\n    ///   <returns type=\"jqXHR\" />\n    /// </signature>\n  },\n  'proxy': function() {\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"function\" type=\"Function\">The function whose context will be changed.</param>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context (this) of the function should be set.</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function referenced in the function argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Takes a function and returns a new one that will always have a particular context.</summary>\n    ///   <param name=\"context\" type=\"PlainObject\">The object to which the context of the function should be set.</param>\n    ///   <param name=\"name\" type=\"String\">The name of the function whose context will be changed (should be a property of the context object).</param>\n    ///   <param name=\"additionalArguments\" type=\"Anything\">Any number of arguments to be passed to the function named in the name argument.</param>\n    ///   <returns type=\"Function\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element where the array of queued functions is attached.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed on the matched element.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element on which to add a queued function.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback()\" type=\"Function\">The new function to add to the queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element from which to remove data.</param>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'sub': function() {\n    /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'support': function() {\n    /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'trim': function() {\n    /// <signature>\n    ///   <summary>Remove the whitespace from the beginning and end of a string.</summary>\n    ///   <param name=\"str\" type=\"String\">The string to trim.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'type': function() {\n    /// <signature>\n    ///   <summary>Determine the internal JavaScript [[Class]] of an object.</summary>\n    ///   <param name=\"obj\" type=\"PlainObject\">Object to get the internal JavaScript [[Class]] of.</param>\n    ///   <returns type=\"String\" />\n    /// </signature>\n  },\n  'unique': function() {\n    /// <signature>\n    ///   <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>\n    ///   <param name=\"array\" type=\"Array\">The Array of DOM elements.</param>\n    ///   <returns type=\"Array\" />\n    /// </signature>\n  },\n  'when': function() {\n    /// <signature>\n    ///   <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>\n    ///   <param name=\"deferreds\" type=\"Deferred\">One or more Deferred objects, or plain JavaScript objects.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nvar _1228819969 = jQuery.Callbacks;\njQuery.Callbacks = function(flags) {\nvar _object = _1228819969(flags);\nintellisense.annotate(_object, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add a callback or a collection of callbacks to a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be added to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'disable': function() {\n    /// <summary>Disable a callback list from doing anything more.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'disabled': function() {\n    /// <summary>Determine if the callbacks list has been disabled.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'empty': function() {\n    /// <summary>Remove all of the callbacks from a list.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'fire': function() {\n    /// <signature>\n    ///   <summary>Call all of the callbacks with the given arguments</summary>\n    ///   <param name=\"arguments\" type=\"Anything\">The argument or list of arguments to pass back to the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'fired': function() {\n    /// <summary>Determine if the callbacks have already been called at least once.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'fireWith': function() {\n    /// <signature>\n    ///   <summary>Call all callbacks in a list with the given context and arguments.</summary>\n    ///   <param name=\"context\" type=\"\">A reference to the context in which the callbacks in the list should be fired.</param>\n    ///   <param name=\"args\" type=\"\">An argument, or array of arguments, to pass to the callbacks in the list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Determine whether a supplied callback is in a list</summary>\n    ///   <param name=\"callback\" type=\"Function\">The callback to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'lock': function() {\n    /// <summary>Lock a callback list in its current state.</summary>\n    /// <returns type=\"Callbacks\" />\n  },\n  'locked': function() {\n    /// <summary>Determine if the callbacks list has been locked.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove a callback or a collection of callbacks from a callback list.</summary>\n    ///   <param name=\"callbacks\" type=\"\">A function, or array of functions, that are to be removed from the callback list.</param>\n    ///   <returns type=\"Callbacks\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _1228819969);\n\nvar _731531622 = jQuery.Deferred;\njQuery.Deferred = function(func) {\nvar _object = _731531622(func);\nintellisense.annotate(_object, {\n  'always': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>\n    ///   <param name=\"alwaysCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'done': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is resolved.</param>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'fail': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is rejected.</summary>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, that are called when the Deferred is rejected.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'isRejected': function() {\n    /// <summary>Determine whether a Deferred object has been rejected.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isResolved': function() {\n    /// <summary>Determine whether a Deferred object has been resolved.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'notify': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'notifyWith': function() {\n    /// <signature>\n    ///   <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the progressCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Object\">Optional arguments that are passed to the progressCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'pipe': function() {\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Utility method to filter and/or chain Deferreds.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">An optional function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'progress': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>\n    ///   <param name=\"progressCallbacks\" type=\"\">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Deferred's Promise object.</summary>\n    ///   <param name=\"target\" type=\"Object\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'reject': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'rejectWith': function() {\n    /// <signature>\n    ///   <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the failCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the failCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolve': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>\n    ///   <param name=\"args\" type=\"Anything\">Optional arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'resolveWith': function() {\n    /// <signature>\n    ///   <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>\n    ///   <param name=\"context\" type=\"Object\">Context passed to the doneCallbacks as the this object.</param>\n    ///   <param name=\"args\" type=\"Array\">An optional array of arguments that are passed to the doneCallbacks.</param>\n    ///   <returns type=\"Deferred\" />\n    /// </signature>\n  },\n  'state': function() {\n    /// <summary>Determine the current state of a Deferred object.</summary>\n    /// <returns type=\"String\" />\n  },\n  'then': function() {\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneFilter\" type=\"Function\">A function that is called when the Deferred is resolved.</param>\n    ///   <param name=\"failFilter\" type=\"Function\">An optional function that is called when the Deferred is rejected.</param>\n    ///   <param name=\"progressFilter\" type=\"Function\">An optional function that is called when progress notifications are sent to the Deferred.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>\n    ///   <param name=\"doneCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is resolved.</param>\n    ///   <param name=\"failCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred is rejected.</param>\n    ///   <param name=\"progressCallbacks\" type=\"Function\">A function, or array of functions, called when the Deferred notifies progress.</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n});\n\nreturn _object;\n};\nintellisense.redirectDefinition(jQuery.Callbacks, _731531622);\n\nintellisense.annotate(jQuery.Event.prototype, {\n  'currentTarget': function() {\n    /// <summary>The current DOM element within the event bubbling phase.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'data': function() {\n    /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'delegateTarget': function() {\n    /// <summary>The element where the currently-called jQuery event handler was attached.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'isDefaultPrevented': function() {\n    /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isImmediatePropagationStopped': function() {\n    /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'isPropagationStopped': function() {\n    /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'metaKey': function() {\n    /// <summary>Indicates whether the META key was pressed when the event fired.</summary>\n    /// <returns type=\"Boolean\" />\n  },\n  'namespace': function() {\n    /// <summary>The namespace specified when the event was triggered.</summary>\n    /// <returns type=\"String\" />\n  },\n  'pageX': function() {\n    /// <summary>The mouse position relative to the left edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'pageY': function() {\n    /// <summary>The mouse position relative to the top edge of the document.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'preventDefault': function() {\n    /// <summary>If this method is called, the default action of the event will not be triggered.</summary>\n  },\n  'relatedTarget': function() {\n    /// <summary>The other DOM element involved in the event, if any.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'result': function() {\n    /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'stopImmediatePropagation': function() {\n    /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>\n  },\n  'stopPropagation': function() {\n    /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>\n  },\n  'target': function() {\n    /// <summary>The DOM element that initiated the event.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'timeStamp': function() {\n    /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'type': function() {\n    /// <summary>Describes the nature of the event.</summary>\n    /// <returns type=\"String\" />\n  },\n  'which': function() {\n    /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>\n    /// <returns type=\"Number\" />\n  },\n});\n\nintellisense.annotate(jQuery.fn, {\n  'add': function() {\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more elements to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"html\" type=\"htmlString\">An HTML fragment to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery object \">An existing jQuery object to add to the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add elements to the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>\n    ///   <param name=\"context\" type=\"Element\">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addBack': function() {\n    /// <signature>\n    ///   <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'addClass': function() {\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be added to the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adds the specified class(es) to each of the set of matched elements.</summary>\n    ///   <param name=\"function(index, currentClass)\" type=\"Function\">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'after': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxComplete': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxError': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxSettings, thrownError)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSend': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, jqXHR, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStart': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxStop': function() {\n    /// <signature>\n    ///   <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>\n    ///   <param name=\"handler()\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'ajaxSuccess': function() {\n    /// <signature>\n    ///   <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>\n    ///   <param name=\"handler(event, XMLHttpRequest, ajaxOptions)\" type=\"Function\">The function to be invoked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'all': function() {\n    /// <summary>Selects all elements.</summary>\n  },\n  'andSelf': function() {\n    /// <summary>Add the previous set of elements on the stack to the current set.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'animate': function() {\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Perform a custom animation of a set of CSS properties.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of CSS properties and values that the animation will move toward.</param>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'animated': function() {\n    /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>\n  },\n  'append': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'appendTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the end of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attr': function() {\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the attribute.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributes\" type=\"PlainObject\">An object of attribute-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more attributes for the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">The name of the attribute to set.</param>\n    ///   <param name=\"function(index, attr)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'attributeContains': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsPrefix': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeContainsWord': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEndsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeEquals': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeHas': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute, with any value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    /// </signature>\n  },\n  'attributeMultiple': function() {\n    /// <signature>\n    ///   <summary>Matches elements that match all of the specified attribute filters.</summary>\n    ///   <param name=\"attributeFilter1\" type=\"String\">An attribute filter.</param>\n    ///   <param name=\"attributeFilter2\" type=\"String\">Another attribute filter, reducing the selection even more</param>\n    ///   <param name=\"attributeFilterN\" type=\"String\">As many more attribute filters as necessary</param>\n    /// </signature>\n  },\n  'attributeNotEqual': function() {\n    /// <signature>\n    ///   <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'attributeStartsWith': function() {\n    /// <signature>\n    ///   <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>\n    ///   <param name=\"attribute\" type=\"String\">An attribute name.</param>\n    ///   <param name=\"value\" type=\"String\">An attribute value. Can be either an unquoted single word or a quoted string.</param>\n    /// </signature>\n  },\n  'before': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'bind': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more DOM event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"preventBubble\" type=\"Boolean\">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements.</summary>\n    ///   <param name=\"events\" type=\"Object\">An object containing one or more DOM event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'blur': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"blur\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'button': function() {\n    /// <summary>Selects all button elements and elements of type button.</summary>\n  },\n  'change': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"change\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'checkbox': function() {\n    /// <summary>Selects all elements of type checkbox.</summary>\n  },\n  'checked': function() {\n    /// <summary>Matches all elements that are checked or selected.</summary>\n  },\n  'child': function() {\n    /// <signature>\n    ///   <summary>Selects all direct child elements specified by \"child\" of elements specified by \"parent\".</summary>\n    ///   <param name=\"parent\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"child\" type=\"String\">A selector to filter the child elements.</param>\n    /// </signature>\n  },\n  'children': function() {\n    /// <signature>\n    ///   <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'class': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given class.</summary>\n    ///   <param name=\"class\" type=\"String\">A class to search for. An element can have multiple classes; only one of them must match.</param>\n    /// </signature>\n  },\n  'clearQueue': function() {\n    /// <signature>\n    ///   <summary>Remove from the queue all items that have not yet been run.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'click': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"click\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'clone': function() {\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Create a deep copy of the set of matched elements.</summary>\n    ///   <param name=\"withDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>\n    ///   <param name=\"deepWithDataAndEvents\" type=\"Boolean\">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'closest': function() {\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <param name=\"context\" type=\"Element\">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"jQuery object\" type=\"jQuery\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'contains': function() {\n    /// <signature>\n    ///   <summary>Select all elements that contain the specified text.</summary>\n    ///   <param name=\"text\" type=\"String\">A string of text to look for. It's case sensitive.</param>\n    /// </signature>\n  },\n  'contents': function() {\n    /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'context': function() {\n    /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>\n    /// <returns type=\"Element\" />\n  },\n  'css': function() {\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">A CSS property name.</param>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more CSS properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'data': function() {\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"key\" type=\"String\">A string naming the piece of data to set.</param>\n    ///   <param name=\"value\" type=\"Object\">The new data value; it can be any Javascript type including Array or Object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Store arbitrary data associated with the matched elements.</summary>\n    ///   <param name=\"obj\" type=\"Object\">An object of key-value pairs of data to update.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dblclick': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"dblclick\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delay': function() {\n    /// <signature>\n    ///   <summary>Set a timer to delay execution of subsequent items in the queue.</summary>\n    ///   <param name=\"duration\" type=\"Number\">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'delegate': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing one or more space-separated JavaScript event types, such as \"click\" or \"keydown,\" or custom event names.</param>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector to filter the elements that trigger the event.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'dequeue': function() {\n    /// <signature>\n    ///   <summary>Execute the next function on the queue for the matched elements.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'descendant': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are descendants of a given ancestor.</summary>\n    ///   <param name=\"ancestor\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"descendant\" type=\"String\">A selector to filter the descendant elements.</param>\n    /// </signature>\n  },\n  'detach': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'die': function() {\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or keydown.</param>\n    ///   <param name=\"handler\" type=\"String\">The function that is no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove event handlers previously attached using .live() from the elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'disabled': function() {\n    /// <summary>Selects all elements that are disabled.</summary>\n  },\n  'each': function() {\n    /// <signature>\n    ///   <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>\n    ///   <param name=\"function(index, Element)\" type=\"Function\">A function to execute for each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'element': function() {\n    /// <signature>\n    ///   <summary>Selects all elements with the given tag name.</summary>\n    ///   <param name=\"element\" type=\"String\">An element to search for. Refers to the tagName of DOM nodes.</param>\n    /// </signature>\n  },\n  'empty': function() {\n    /// <summary>Select all elements that have no children (including text nodes).</summary>\n  },\n  'enabled': function() {\n    /// <summary>Selects all elements that are enabled.</summary>\n  },\n  'end': function() {\n    /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'eq': function() {\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index of the element to match.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select the element at index n within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index of the element to match, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'error': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"error\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'even': function() {\n    /// <summary>Selects even elements, zero-indexed.  See also odd.</summary>\n  },\n  'fadeIn': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements by fading them to opaque.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeOut': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements by fading them to transparent.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeTo': function() {\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Adjust the opacity of the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"opacity\" type=\"Number\">A number between 0 and 1 denoting the target opacity.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'fadeToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements by animating their opacity.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'file': function() {\n    /// <summary>Selects all elements of type file.</summary>\n  },\n  'filter': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'find': function() {\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">A jQuery object to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'finish': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'first': function() {\n    /// <summary>Selects the first matched element.</summary>\n  },\n  'first-child': function() {\n    /// <summary>Selects all elements that are the first child of their parent.</summary>\n  },\n  'first-of-type': function() {\n    /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>\n  },\n  'focus': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focus\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusin': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusin\" event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'focusout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"focusout\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'get': function() {\n    /// <signature>\n    ///   <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>\n    ///   <param name=\"index\" type=\"Number\">A zero-based integer indicating which element to retrieve.</param>\n    ///   <returns type=\"Element\" />\n    /// </signature>\n  },\n  'gt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index greater than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'has': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>\n    ///   <param name=\"contained\" type=\"Element\">A DOM element to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hasClass': function() {\n    /// <signature>\n    ///   <summary>Determine whether any of the matched elements are assigned the given class.</summary>\n    ///   <param name=\"className\" type=\"String\">The class name to search for.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'header': function() {\n    /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>\n  },\n  'height': function() {\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS height of every matched element.</summary>\n    ///   <param name=\"function(index, height)\" type=\"Function\">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hidden': function() {\n    /// <summary>Selects all elements that are hidden.</summary>\n  },\n  'hide': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'hover': function() {\n    /// <signature>\n    ///   <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>\n    ///   <param name=\"handlerIn(eventObject)\" type=\"Function\">A function to execute when the mouse pointer enters the element.</param>\n    ///   <param name=\"handlerOut(eventObject)\" type=\"Function\">A function to execute when the mouse pointer leaves the element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'html': function() {\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"htmlString\" type=\"htmlString\">A string of HTML to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the HTML contents of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, oldhtml)\" type=\"Function\">A function returning the HTML content to set. Receives the           index position of the element in the set and the old HTML value as arguments.           jQuery empties the element before calling the function;           use the oldhtml argument to reference the previous content.           Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'id': function() {\n    /// <signature>\n    ///   <summary>Selects a single element with the given id attribute.</summary>\n    ///   <param name=\"id\" type=\"String\">An ID to search for, specified via the id attribute of an element.</param>\n    /// </signature>\n  },\n  'image': function() {\n    /// <summary>Selects all elements of type image.</summary>\n  },\n  'index': function() {\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector representing a jQuery collection in which to look for an element.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Search for a given element from among the matched elements.</summary>\n    ///   <param name=\"element\" type=\"\">The DOM element or first element within the jQuery object to look for.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'init': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'innerHeight': function() {\n    /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'innerWidth': function() {\n    /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'input': function() {\n    /// <summary>Selects all input, textarea, select and button elements.</summary>\n  },\n  'insertAfter': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements after the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'insertBefore': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements before the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'is': function() {\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"jQuery object\" type=\"Object\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>\n    ///   <param name=\"element\" type=\"Element\">An element to match the current set of elements against.</param>\n    ///   <returns type=\"Boolean\" />\n    /// </signature>\n  },\n  'jquery': function() {\n    /// <summary>A string containing the jQuery version number.</summary>\n    /// <returns type=\"String\" />\n  },\n  'keydown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keydown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keypress': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keypress\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'keyup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"keyup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lang': function() {\n    /// <signature>\n    ///   <summary>Selects all elements of the specified language.</summary>\n    ///   <param name=\"language\" type=\"String\">A language code.</param>\n    /// </signature>\n  },\n  'last': function() {\n    /// <summary>Selects the last matched element.</summary>\n  },\n  'last-child': function() {\n    /// <summary>Selects all elements that are the last child of their parent.</summary>\n  },\n  'last-of-type': function() {\n    /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>\n  },\n  'length': function() {\n    /// <summary>The number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'live': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown.\" As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">A plain object of one or more JavaScript event types and functions to execute for them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'load': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"load\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'lt': function() {\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"index\" type=\"Number\">Zero-based index.</param>\n    /// </signature>\n    /// <signature>\n    ///   <summary>Select all elements at an index less than index within the matched set.</summary>\n    ///   <param name=\"-index\" type=\"Number\">Zero-based index, counting backwards from the last element.</param>\n    /// </signature>\n  },\n  'map': function() {\n    /// <signature>\n    ///   <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>\n    ///   <param name=\"callback(index, domElement)\" type=\"Function\">A function object that will be invoked for each element in the current set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousedown': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousedown\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseenter': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseleave': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mousemove': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mousemove\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseout': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseout\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseover': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseover\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'mouseup': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"mouseup\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'multiple': function() {\n    /// <signature>\n    ///   <summary>Selects the combined results of all the specified selectors.</summary>\n    ///   <param name=\"selector1\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"selector2\" type=\"String\">Another valid selector.</param>\n    ///   <param name=\"selectorN\" type=\"String\">As many more valid selectors as you like.</param>\n    /// </signature>\n  },\n  'next': function() {\n    /// <signature>\n    ///   <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'next adjacent': function() {\n    /// <signature>\n    ///   <summary>Selects all next elements matching \"next\" that are immediately preceded by a sibling \"prev\".</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"next\" type=\"String\">A selector to match the element that is next to the first selector.</param>\n    /// </signature>\n  },\n  'next siblings': function() {\n    /// <signature>\n    ///   <summary>Selects all sibling elements that follow after the \"prev\" element, have the same parent, and match the filtering \"siblings\" selector.</summary>\n    ///   <param name=\"prev\" type=\"String\">Any valid selector.</param>\n    ///   <param name=\"siblings\" type=\"String\">A selector to filter elements that are the following siblings of the first selector.</param>\n    /// </signature>\n  },\n  'nextAll': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nextUntil': function() {\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'not': function() {\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"elements\" type=\"Array\">One or more DOM elements to remove from the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A function used as a test for each element in the set. this is the current DOM element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove elements from the set of matched elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to match the current set of elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'nth-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-child': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>\n    /// </signature>\n  },\n  'nth-last-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>\n    /// </signature>\n  },\n  'nth-of-type': function() {\n    /// <signature>\n    ///   <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>\n    ///   <param name=\"index\" type=\"String\">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>\n    /// </signature>\n  },\n  'odd': function() {\n    /// <summary>Selects odd elements, zero-indexed.  See also even.</summary>\n  },\n  'off': function() {\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, or just namespaces, such as \"click\", \"keydown.myPlugin\", or \".myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A handler function previously attached for the event(s), or the special value false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove an event handler.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector which should match the one originally passed to .on() when attaching event handlers.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offset': function() {\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"coordinates\" type=\"PlainObject\">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>\n    ///   <param name=\"function(index, coords)\" type=\"Function\">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'offsetParent': function() {\n    /// <summary>Get the closest ancestor element that is positioned.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'on': function() {\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach an event handler function for one or more events to the selected elements.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'one': function() {\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">A string containing one or more JavaScript event types, such as \"click\" or \"submit,\" or custom event names.</param>\n    ///   <param name=\"data\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"String\">One or more space-separated event types and optional namespaces, such as \"click\" or \"keydown.myPlugin\".</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event is triggered.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>\n    ///   <param name=\"events\" type=\"PlainObject\">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>\n    ///   <param name=\"selector\" type=\"String\">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>\n    ///   <param name=\"data\" type=\"Anything\">Data to be passed to the handler in event.data when an event occurs.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'only-child': function() {\n    /// <summary>Selects all elements that are the only child of their parent.</summary>\n  },\n  'only-of-type': function() {\n    /// <summary>Selects all elements that have no siblings with the same element name.</summary>\n  },\n  'outerHeight': function() {\n    /// <signature>\n    ///   <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without \"px\") representation of the value or null if called on an empty set of elements.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'outerWidth': function() {\n    /// <signature>\n    ///   <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>\n    ///   <param name=\"includeMargin\" type=\"Boolean\">A Boolean indicating whether to include the element's margin in the calculation.</param>\n    ///   <returns type=\"Number\" />\n    /// </signature>\n  },\n  'parent': function() {\n    /// <signature>\n    ///   <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parents': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'parentsUntil': function() {\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'password': function() {\n    /// <summary>Selects all elements of type password.</summary>\n  },\n  'position': function() {\n    /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>\n    /// <returns type=\"Object\" />\n  },\n  'prepend': function() {\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"content\" type=\"\">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <param name=\"content\" type=\"\">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, html)\" type=\"Function\">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prependTo': function() {\n    /// <signature>\n    ///   <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>\n    ///   <param name=\"target\" type=\"\">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prev': function() {\n    /// <signature>\n    ///   <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevAll': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'prevUntil': function() {\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>\n    ///   <param name=\"filter\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'promise': function() {\n    /// <signature>\n    ///   <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>\n    ///   <param name=\"type\" type=\"String\">The type of queue that needs to be observed.</param>\n    ///   <param name=\"target\" type=\"PlainObject\">Object onto which the promise methods have to be attached</param>\n    ///   <returns type=\"Promise\" />\n    /// </signature>\n  },\n  'prop': function() {\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"value\" type=\"\">A value to set for the property.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"properties\" type=\"PlainObject\">An object of property-value pairs to set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set one or more properties for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to set.</param>\n    ///   <param name=\"function(index, oldPropertyValue)\" type=\"Function\">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'pushStack': function() {\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add a collection of DOM elements onto the jQuery stack.</summary>\n    ///   <param name=\"elements\" type=\"Array\">An array of elements to push onto the stack and make into a new jQuery object.</param>\n    ///   <param name=\"name\" type=\"String\">The name of a jQuery method that generated the array of elements.</param>\n    ///   <param name=\"arguments\" type=\"Array\">The arguments that were passed in to the jQuery method (for serialization).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'queue': function() {\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"newQueue\" type=\"Array\">An array of functions to replace the current queue contents.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>\n    ///   <param name=\"queueName\" type=\"String\">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>\n    ///   <param name=\"callback( next )\" type=\"Function\">The new function to add to the queue, with a function to call that will dequeue the next item.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'radio': function() {\n    /// <summary>Selects all  elements of type radio.</summary>\n  },\n  'ready': function() {\n    /// <signature>\n    ///   <summary>Specify a function to execute when the DOM is fully loaded.</summary>\n    ///   <param name=\"handler\" type=\"Function\">A function to execute after the DOM is ready.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'remove': function() {\n    /// <signature>\n    ///   <summary>Remove the set of matched elements from the DOM.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector expression that filters the set of matched elements to be removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeAttr': function() {\n    /// <signature>\n    ///   <summary>Remove an attribute from each element in the set of matched elements.</summary>\n    ///   <param name=\"attributeName\" type=\"String\">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeClass': function() {\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more space-separated classes to be removed from the class attribute of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, class)\" type=\"Function\">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeData': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"name\" type=\"String\">A string naming the piece of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-stored piece of data.</summary>\n    ///   <param name=\"list\" type=\"\">An array or space-separated string naming the pieces of data to delete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'removeProp': function() {\n    /// <signature>\n    ///   <summary>Remove a property for the set of matched elements.</summary>\n    ///   <param name=\"propertyName\" type=\"String\">The name of the property to remove.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceAll': function() {\n    /// <signature>\n    ///   <summary>Replace each target element with the set of matched elements.</summary>\n    ///   <param name=\"target\" type=\"\">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'replaceWith': function() {\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"newContent\" type=\"\">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>\n    ///   <param name=\"function\" type=\"Function\">A function that returns content with which to replace the set of matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'reset': function() {\n    /// <summary>Selects all elements of type reset.</summary>\n  },\n  'resize': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"resize\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'root': function() {\n    /// <summary>Selects the element that is the root of the document.</summary>\n  },\n  'scroll': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"scroll\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollLeft': function() {\n    /// <signature>\n    ///   <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'scrollTop': function() {\n    /// <signature>\n    ///   <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"Number\">An integer indicating the new position to set the scroll bar to.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'select': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"select\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'selected': function() {\n    /// <summary>Selects all elements that are selected.</summary>\n  },\n  'selector': function() {\n    /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serialize': function() {\n    /// <summary>Encode a set of form elements as a string for submission.</summary>\n    /// <returns type=\"String\" />\n  },\n  'serializeArray': function() {\n    /// <summary>Encode a set of form elements as an array of names and values.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'show': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'siblings': function() {\n    /// <signature>\n    ///   <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression to match elements against.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'size': function() {\n    /// <summary>Return the number of elements in the jQuery object.</summary>\n    /// <returns type=\"Number\" />\n  },\n  'slice': function() {\n    /// <signature>\n    ///   <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>\n    ///   <param name=\"start\" type=\"Number\">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>\n    ///   <param name=\"end\" type=\"Number\">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideDown': function() {\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideToggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'slideUp': function() {\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Hide the matched elements with a sliding motion.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'stop': function() {\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Stop the currently-running animation on the matched elements.</summary>\n    ///   <param name=\"queue\" type=\"String\">The name of the queue in which to stop animations.</param>\n    ///   <param name=\"clearQueue\" type=\"Boolean\">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>\n    ///   <param name=\"jumpToEnd\" type=\"Boolean\">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'submit': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"submit\" JavaScript event, or trigger that event on an element.</summary>\n    ///   <param name=\"eventData\" type=\"PlainObject\">An object containing data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'target': function() {\n    /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>\n  },\n  'text': function() {\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"textString\" type=\"String\">A string of text to set as the content of each matched element.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the content of each element in the set of matched elements to the specified text.</summary>\n    ///   <param name=\"function(index, text)\" type=\"Function\">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toArray': function() {\n    /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>\n    /// <returns type=\"Array\" />\n  },\n  'toggle': function() {\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"options\" type=\"PlainObject\">A map of additional options to pass to the method.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"duration\" type=\"\">A string or number determining how long the animation will run.</param>\n    ///   <param name=\"easing\" type=\"String\">A string indicating which easing function to use for the transition.</param>\n    ///   <param name=\"complete\" type=\"Function\">A function to call once the animation is complete.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Display or hide the matched elements.</summary>\n    ///   <param name=\"showOrHide\" type=\"Boolean\">A Boolean indicating whether to show or hide the elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'toggleClass': function() {\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"className\" type=\"String\">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>\n    ///   <param name=\"function(index, class, switch)\" type=\"Function\">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>\n    ///   <param name=\"switch\" type=\"Boolean\">A boolean value to determine whether the class should be added or removed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'trigger': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>\n    ///   <param name=\"event\" type=\"Event\">A jQuery.Event object.</param>\n    ///   <param name=\"extraParameters\" type=\"\">Additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'triggerHandler': function() {\n    /// <signature>\n    ///   <summary>Execute all handlers attached to an element for an event.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"extraParameters\" type=\"Array\">An array of additional parameters to pass along to the event handler.</param>\n    ///   <returns type=\"Object\" />\n    /// </signature>\n  },\n  'unbind': function() {\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">The function that is to be no longer executed.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as click or submit.</param>\n    ///   <param name=\"false\" type=\"Boolean\">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a previously-attached event handler from the elements.</summary>\n    ///   <param name=\"event\" type=\"Object\">A JavaScript event object as passed to an event handler.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'undelegate': function() {\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"eventType\" type=\"String\">A string containing a JavaScript event type, such as \"click\" or \"keydown\"</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute at the time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A selector which will be used to filter the event results.</param>\n    ///   <param name=\"events\" type=\"PlainObject\">An object of one or more event types and previously bound functions to unbind from them.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>\n    ///   <param name=\"namespace\" type=\"String\">A string containing a namespace to unbind all events from.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unload': function() {\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute when the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Bind an event handler to the \"unload\" JavaScript event.</summary>\n    ///   <param name=\"eventData\" type=\"Object\">A plain object of data that will be passed to the event handler.</param>\n    ///   <param name=\"handler(eventObject)\" type=\"Function\">A function to execute each time the event is triggered.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'unwrap': function() {\n    /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>\n    /// <returns type=\"jQuery\" />\n  },\n  'val': function() {\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the value of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, value)\" type=\"Function\">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'visible': function() {\n    /// <summary>Selects all elements that are visible.</summary>\n  },\n  'width': function() {\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"value\" type=\"\">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Set the CSS width of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index, width)\" type=\"Function\">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrap': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapAll': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"\">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n  'wrapInner': function() {\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"wrappingElement\" type=\"String\">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>\n    ///   <param name=\"function(index)\" type=\"Function\">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\nintellisense.annotate(window, {\n  '$': function() {\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"selector\" type=\"String\">A string containing a selector expression</param>\n    ///   <param name=\"context\" type=\"\">A DOM Element, Document, or jQuery to use as context</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"element\" type=\"Element\">A DOM element to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"elementArray\" type=\"Array\">An array containing a set of DOM elements to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"object\" type=\"PlainObject\">A plain object to wrap in a jQuery object.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n    /// <signature>\n    ///   <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>\n    ///   <param name=\"jQuery object\" type=\"PlainObject\">An existing jQuery object to clone.</param>\n    ///   <returns type=\"jQuery\" />\n    /// </signature>\n  },\n});\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/jquery-3.1.1.js",
    "content": "/*!\n * jQuery JavaScript Library v3.1.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2016-09-22T22:30Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.1.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\tresolve.call( undefined, value );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.call( undefined, value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\nfunction manipulationTarget( elem, content ) {\n\tif ( jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn elem.getElementsByTagName( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE <=9 only\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar val,\n\t\tvalueIsBorderBox = true,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE <=11 only\n\t// Running getBoundingClientRect on a disconnected node\n\t// in IE throws an error.\n\tif ( elem.getClientRects().length ) {\n\t\tval = elem.getBoundingClientRect()[ name ];\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction raf() {\n\tif ( timerId ) {\n\t\twindow.requestAnimationFrame( raf );\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off or if document is hidden\n\tif ( jQuery.fx.off || document.hidden ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.requestAnimationFrame ?\n\t\t\twindow.requestAnimationFrame( raf ) :\n\t\t\twindow.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tif ( window.cancelAnimationFrame ) {\n\t\twindow.cancelAnimationFrame( timerId );\n\t} else {\n\t\twindow.clearInterval( timerId );\n\t}\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win, rect, doc,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\t// Make sure element is not hidden (display: none)\n\t\tif ( rect.width || rect.height ) {\n\t\t\tdoc = elem.ownerDocument;\n\t\t\twin = getWindow( doc );\n\t\t\tdocElem = doc.documentElement;\n\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t\t};\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden elements (gh-2310)\n\t\treturn rect;\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.parseJSON = JSON.parse;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/jquery-3.1.1.slim.js",
    "content": "/*!\n * jQuery JavaScript Library v3.1.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/animatedSelector,-effects/Tween,-deprecated\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2016-09-22T22:30Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.1.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/animatedSelector,-effects/Tween,-deprecated\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\tresolve.call( undefined, value );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.call( undefined, value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\nfunction manipulationTarget( elem, content ) {\n\tif ( jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn elem.getElementsByTagName( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE <=9 only\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar val,\n\t\tvalueIsBorderBox = true,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE <=11 only\n\t// Running getBoundingClientRect on a disconnected node\n\t// in IE throws an error.\n\tif ( elem.getClientRects().length ) {\n\t\tval = elem.getBoundingClientRect()[ name ];\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win, rect, doc,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\t// Make sure element is not hidden (display: none)\n\t\tif ( rect.width || rect.height ) {\n\t\t\tdoc = elem.ownerDocument;\n\t\t\twin = getWindow( doc );\n\t\t\tdocElem = doc.documentElement;\n\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t\t};\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden elements (gh-2310)\n\t\treturn rect;\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/modernizr-2.8.3.js",
    "content": "/*!\n * Modernizr v2.8.3\n * www.modernizr.com\n *\n * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton\n * Available under the BSD and MIT licenses: www.modernizr.com/license/\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in\n * the current UA and makes the results available to you in two ways:\n * as properties on a global Modernizr object, and as classes on the\n * <html> element. This information allows you to progressively enhance\n * your pages with a granular level of control over the experience.\n *\n * Modernizr has an optional (not included) conditional resource loader\n * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).\n * To get a build that includes Modernizr.load(), as well as choosing\n * which tests to include, go to www.modernizr.com/download/\n *\n * Authors        Faruk Ates, Paul Irish, Alex Sexton\n * Contributors   Ryan Seddon, Ben Alman\n */\n\nwindow.Modernizr = (function( window, document, undefined ) {\n\n    var version = '2.8.3',\n\n    Modernizr = {},\n\n    /*>>cssclasses*/\n    // option for enabling the HTML classes to be added\n    enableClasses = true,\n    /*>>cssclasses*/\n\n    docElement = document.documentElement,\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     */\n    mod = 'modernizr',\n    modElem = document.createElement(mod),\n    mStyle = modElem.style,\n\n    /**\n     * Create the input element for various Web Forms feature tests.\n     */\n    inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,\n\n    /*>>smile*/\n    smile = ':)',\n    /*>>smile*/\n\n    toString = {}.toString,\n\n    // TODO :: make the prefixes more granular\n    /*>>prefixes*/\n    // List of property values to set for css tests. See ticket #21\n    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),\n    /*>>prefixes*/\n\n    /*>>domprefixes*/\n    // Following spec is to expose vendor-specific style properties as:\n    //   elem.style.WebkitBorderRadius\n    // and the following would be incorrect:\n    //   elem.style.webkitBorderRadius\n\n    // Webkit ghosts their properties in lowercase but Opera & Moz do not.\n    // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n    //   erik.eae.net/archives/2008/03/10/21.48.10/\n\n    // More here: github.com/Modernizr/Modernizr/issues/issue/21\n    omPrefixes = 'Webkit Moz O ms',\n\n    cssomPrefixes = omPrefixes.split(' '),\n\n    domPrefixes = omPrefixes.toLowerCase().split(' '),\n    /*>>domprefixes*/\n\n    /*>>ns*/\n    ns = {'svg': 'http://www.w3.org/2000/svg'},\n    /*>>ns*/\n\n    tests = {},\n    inputs = {},\n    attrs = {},\n\n    classes = [],\n\n    slice = classes.slice,\n\n    featureName, // used in testing loop\n\n\n    /*>>teststyles*/\n    // Inject element with style element and some CSS rules\n    injectElementWithStyles = function( rule, callback, nodes, testnames ) {\n\n      var style, ret, node, docOverflow,\n          div = document.createElement('div'),\n          // After page load injecting a fake body doesn't work so check if body exists\n          body = document.body,\n          // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.\n          fakeBody = body || document.createElement('body');\n\n      if ( parseInt(nodes, 10) ) {\n          // In order not to give false positives we create a node for each test\n          // This also allows the method to scale for unspecified uses\n          while ( nodes-- ) {\n              node = document.createElement('div');\n              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n              div.appendChild(node);\n          }\n      }\n\n      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed\n      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element\n      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.\n      // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx\n      // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277\n      style = ['&#173;','<style id=\"s', mod, '\">', rule, '</style>'].join('');\n      div.id = mod;\n      // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n      // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n      (body ? div : fakeBody).innerHTML += style;\n      fakeBody.appendChild(div);\n      if ( !body ) {\n          //avoid crashing IE8, if background image is used\n          fakeBody.style.background = '';\n          //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n          fakeBody.style.overflow = 'hidden';\n          docOverflow = docElement.style.overflow;\n          docElement.style.overflow = 'hidden';\n          docElement.appendChild(fakeBody);\n      }\n\n      ret = callback(div, rule);\n      // If this is done after page load we don't want to remove the body so check if body exists\n      if ( !body ) {\n          fakeBody.parentNode.removeChild(fakeBody);\n          docElement.style.overflow = docOverflow;\n      } else {\n          div.parentNode.removeChild(div);\n      }\n\n      return !!ret;\n\n    },\n    /*>>teststyles*/\n\n    /*>>mq*/\n    // adapted from matchMedia polyfill\n    // by Scott Jehl and Paul Irish\n    // gist.github.com/786768\n    testMediaQuery = function( mq ) {\n\n      var matchMedia = window.matchMedia || window.msMatchMedia;\n      if ( matchMedia ) {\n        return matchMedia(mq) && matchMedia(mq).matches || false;\n      }\n\n      var bool;\n\n      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {\n        bool = (window.getComputedStyle ?\n                  getComputedStyle(node, null) :\n                  node.currentStyle)['position'] == 'absolute';\n      });\n\n      return bool;\n\n     },\n     /*>>mq*/\n\n\n    /*>>hasevent*/\n    //\n    // isEventSupported determines if a given element supports the given event\n    // kangax.github.com/iseventsupported/\n    //\n    // The following results are known incorrects:\n    //   Modernizr.hasEvent(\"webkitTransitionEnd\", elem) // false negative\n    //   Modernizr.hasEvent(\"textInput\") // in Webkit. github.com/Modernizr/Modernizr/issues/333\n    //   ...\n    isEventSupported = (function() {\n\n      var TAGNAMES = {\n        'select': 'input', 'change': 'input',\n        'submit': 'form', 'reset': 'form',\n        'error': 'img', 'load': 'img', 'abort': 'img'\n      };\n\n      function isEventSupported( eventName, element ) {\n\n        element = element || document.createElement(TAGNAMES[eventName] || 'div');\n        eventName = 'on' + eventName;\n\n        // When using `setAttribute`, IE skips \"unload\", WebKit skips \"unload\" and \"resize\", whereas `in` \"catches\" those\n        var isSupported = eventName in element;\n\n        if ( !isSupported ) {\n          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element\n          if ( !element.setAttribute ) {\n            element = document.createElement('div');\n          }\n          if ( element.setAttribute && element.removeAttribute ) {\n            element.setAttribute(eventName, '');\n            isSupported = is(element[eventName], 'function');\n\n            // If property was created, \"remove it\" (by setting value to `undefined`)\n            if ( !is(element[eventName], 'undefined') ) {\n              element[eventName] = undefined;\n            }\n            element.removeAttribute(eventName);\n          }\n        }\n\n        element = null;\n        return isSupported;\n      }\n      return isEventSupported;\n    })(),\n    /*>>hasevent*/\n\n    // TODO :: Add flag for hasownprop ? didn't last time\n\n    // hasOwnProperty shim by kangax needed for Safari 2.0 support\n    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;\n\n    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {\n      hasOwnProp = function (object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n\n    // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js\n    // es5.github.com/#x15.3.4.5\n\n    if (!Function.prototype.bind) {\n      Function.prototype.bind = function bind(that) {\n\n        var target = this;\n\n        if (typeof target != \"function\") {\n            throw new TypeError();\n        }\n\n        var args = slice.call(arguments, 1),\n            bound = function () {\n\n            if (this instanceof bound) {\n\n              var F = function(){};\n              F.prototype = target.prototype;\n              var self = new F();\n\n              var result = target.apply(\n                  self,\n                  args.concat(slice.call(arguments))\n              );\n              if (Object(result) === result) {\n                  return result;\n              }\n              return self;\n\n            } else {\n\n              return target.apply(\n                  that,\n                  args.concat(slice.call(arguments))\n              );\n\n            }\n\n        };\n\n        return bound;\n      };\n    }\n\n    /**\n     * setCss applies given styles to the Modernizr DOM node.\n     */\n    function setCss( str ) {\n        mStyle.cssText = str;\n    }\n\n    /**\n     * setCssAll extrapolates all vendor-specific css strings.\n     */\n    function setCssAll( str1, str2 ) {\n        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));\n    }\n\n    /**\n     * is returns a boolean for if typeof obj is exactly type.\n     */\n    function is( obj, type ) {\n        return typeof obj === type;\n    }\n\n    /**\n     * contains returns a boolean for if substr is found within str.\n     */\n    function contains( str, substr ) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    /*>>testprop*/\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Because the testing of the CSS property names (with \"-\", as\n    // opposed to the camelCase DOM properties) is non-portable and\n    // non-standard but works in WebKit and IE (but not Gecko or Opera),\n    // we explicitly reject properties with dashes so that authors\n    // developing in WebKit or IE first don't end up with\n    // browser-specific content by accident.\n\n    function testProps( props, prefixed ) {\n        for ( var i in props ) {\n            var prop = props[i];\n            if ( !contains(prop, \"-\") && mStyle[prop] !== undefined ) {\n                return prefixed == 'pfx' ? prop : true;\n            }\n        }\n        return false;\n    }\n    /*>>testprop*/\n\n    // TODO :: add testDOMProps\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     */\n    function testDOMProps( props, obj, elem ) {\n        for ( var i in props ) {\n            var item = obj[props[i]];\n            if ( item !== undefined) {\n\n                // return the property name as a string\n                if (elem === false) return props[i];\n\n                // let's bind a function\n                if (is(item, 'function')){\n                  // default to autobind unless override\n                  return item.bind(elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    /*>>testallprops*/\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     *   We specify literally ALL possible (known and/or likely) properties on\n     *   the element including the non-vendor prefixed one, for forward-\n     *   compatibility.\n     */\n    function testPropsAll( prop, prefixed, elem ) {\n\n        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if(is(prefixed, \"string\") || is(prefixed, \"undefined\")) {\n          return testProps(props, prefixed);\n\n        // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n          return testDOMProps(props, prefixed, elem);\n        }\n    }\n    /*>>testallprops*/\n\n\n    /**\n     * Tests\n     * -----\n     */\n\n    // The *new* flexbox\n    // dev.w3.org/csswg/css3-flexbox\n\n    tests['flexbox'] = function() {\n      return testPropsAll('flexWrap');\n    };\n\n    // The *old* flexbox\n    // www.w3.org/TR/2009/WD-css3-flexbox-20090723/\n\n    tests['flexboxlegacy'] = function() {\n        return testPropsAll('boxDirection');\n    };\n\n    // On the S60 and BB Storm, getContext exists, but always returns undefined\n    // so we actually have to call getContext() to verify\n    // github.com/Modernizr/Modernizr/issues/issue/97/\n\n    tests['canvas'] = function() {\n        var elem = document.createElement('canvas');\n        return !!(elem.getContext && elem.getContext('2d'));\n    };\n\n    tests['canvastext'] = function() {\n        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));\n    };\n\n    // webk.it/70117 is tracking a legit WebGL feature detect proposal\n\n    // We do a soft detect which may false positive in order to avoid\n    // an expensive context creation: bugzil.la/732441\n\n    tests['webgl'] = function() {\n        return !!window.WebGLRenderingContext;\n    };\n\n    /*\n     * The Modernizr.touch test only indicates if the browser supports\n     *    touch events, which does not necessarily reflect a touchscreen\n     *    device, as evidenced by tablets running Windows 7 or, alas,\n     *    the Palm Pre / WebOS (touch) phones.\n     *\n     * Additionally, Chrome (desktop) used to lie about its support on this,\n     *    but that has since been rectified: crbug.com/36415\n     *\n     * We also test for Firefox 4 Multitouch Support.\n     *\n     * For more info, see: modernizr.github.com/Modernizr/touch.html\n     */\n\n    tests['touch'] = function() {\n        var bool;\n\n        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n          bool = true;\n        } else {\n          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {\n            bool = node.offsetTop === 9;\n          });\n        }\n\n        return bool;\n    };\n\n\n    // geolocation is often considered a trivial feature detect...\n    // Turns out, it's quite tricky to get right:\n    //\n    // Using !!navigator.geolocation does two things we don't want. It:\n    //   1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513\n    //   2. Disables page caching in WebKit: webk.it/43956\n    //\n    // Meanwhile, in Firefox < 8, an about:config setting could expose\n    // a false positive that would throw an exception: bugzil.la/688158\n\n    tests['geolocation'] = function() {\n        return 'geolocation' in navigator;\n    };\n\n\n    tests['postmessage'] = function() {\n      return !!window.postMessage;\n    };\n\n\n    // Chrome incognito mode used to throw an exception when using openDatabase\n    // It doesn't anymore.\n    tests['websqldatabase'] = function() {\n      return !!window.openDatabase;\n    };\n\n    // Vendors had inconsistent prefixing with the experimental Indexed DB:\n    // - Webkit's implementation is accessible through webkitIndexedDB\n    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB\n    // For speed, we don't test the legacy (and beta-only) indexedDB\n    tests['indexedDB'] = function() {\n      return !!testPropsAll(\"indexedDB\", window);\n    };\n\n    // documentMode logic from YUI to filter out IE8 Compat Mode\n    //   which false positives.\n    tests['hashchange'] = function() {\n      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);\n    };\n\n    // Per 1.6:\n    // This used to be Modernizr.historymanagement but the longer\n    // name has been deprecated in favor of a shorter and property-matching one.\n    // The old API is still available in 1.6, but as of 2.0 will throw a warning,\n    // and in the first release thereafter disappear entirely.\n    tests['history'] = function() {\n      return !!(window.history && history.pushState);\n    };\n\n    tests['draganddrop'] = function() {\n        var div = document.createElement('div');\n        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);\n    };\n\n    // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10\n    // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.\n    // FF10 still uses prefixes, so check for it until then.\n    // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/\n    tests['websockets'] = function() {\n        return 'WebSocket' in window || 'MozWebSocket' in window;\n    };\n\n\n    // css-tricks.com/rgba-browser-support/\n    tests['rgba'] = function() {\n        // Set an rgba() color and check the returned value\n\n        setCss('background-color:rgba(150,255,150,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba');\n    };\n\n    tests['hsla'] = function() {\n        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,\n        //   except IE9 who retains it as hsla\n\n        setCss('background-color:hsla(120,40%,100%,.5)');\n\n        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');\n    };\n\n    tests['multiplebgs'] = function() {\n        // Setting multiple images AND a color on the background shorthand property\n        //  and then querying the style.background property value for the number of\n        //  occurrences of \"url(\" is a reliable method for detecting ACTUAL support for this!\n\n        setCss('background:url(https://),url(https://),red url(https://)');\n\n        // If the UA supports multiple backgrounds, there should be three occurrences\n        //   of the string \"url(\" in the return value for elemStyle.background\n\n        return (/(url\\s*\\(.*?){3}/).test(mStyle.background);\n    };\n\n\n\n    // this will false positive in Opera Mini\n    //   github.com/Modernizr/Modernizr/issues/396\n\n    tests['backgroundsize'] = function() {\n        return testPropsAll('backgroundSize');\n    };\n\n    tests['borderimage'] = function() {\n        return testPropsAll('borderImage');\n    };\n\n\n    // Super comprehensive table about all the unique implementations of\n    // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance\n\n    tests['borderradius'] = function() {\n        return testPropsAll('borderRadius');\n    };\n\n    // WebOS unfortunately false positives on this test.\n    tests['boxshadow'] = function() {\n        return testPropsAll('boxShadow');\n    };\n\n    // FF3.0 will false positive on this test\n    tests['textshadow'] = function() {\n        return document.createElement('div').style.textShadow === '';\n    };\n\n\n    tests['opacity'] = function() {\n        // Browsers that actually have CSS Opacity implemented have done so\n        //  according to spec, which means their return values are within the\n        //  range of [0.0,1.0] - including the leading zero.\n\n        setCssAll('opacity:.55');\n\n        // The non-literal . in this regex is intentional:\n        //   German Chrome returns this value as 0,55\n        // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n        return (/^0.55$/).test(mStyle.opacity);\n    };\n\n\n    // Note, Android < 4 will pass this test, but can only animate\n    //   a single property at a time\n    //   goo.gl/v3V4Gp\n    tests['cssanimations'] = function() {\n        return testPropsAll('animationName');\n    };\n\n\n    tests['csscolumns'] = function() {\n        return testPropsAll('columnCount');\n    };\n\n\n    tests['cssgradients'] = function() {\n        /**\n         * For CSS Gradients syntax, please see:\n         * webkit.org/blog/175/introducing-css-gradients/\n         * developer.mozilla.org/en/CSS/-moz-linear-gradient\n         * developer.mozilla.org/en/CSS/-moz-radial-gradient\n         * dev.w3.org/csswg/css3-images/#gradients-\n         */\n\n        var str1 = 'background-image:',\n            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',\n            str3 = 'linear-gradient(left top,#9f9, white);';\n\n        setCss(\n             // legacy webkit syntax (FIXME: remove when syntax not in use anymore)\n              (str1 + '-webkit- '.split(' ').join(str2 + str1) +\n             // standard syntax             // trailing 'background-image:'\n              prefixes.join(str3 + str1)).slice(0, -str1.length)\n        );\n\n        return contains(mStyle.backgroundImage, 'gradient');\n    };\n\n\n    tests['cssreflections'] = function() {\n        return testPropsAll('boxReflect');\n    };\n\n\n    tests['csstransforms'] = function() {\n        return !!testPropsAll('transform');\n    };\n\n\n    tests['csstransforms3d'] = function() {\n\n        var ret = !!testPropsAll('perspective');\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if ( ret && 'webkitPerspective' in docElement.style ) {\n\n          // Webkit allows this media query to succeed only if the feature is enabled.\n          // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n          injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {\n            ret = node.offsetLeft === 9 && node.offsetHeight === 3;\n          });\n        }\n        return ret;\n    };\n\n\n    tests['csstransitions'] = function() {\n        return testPropsAll('transition');\n    };\n\n\n    /*>>fontface*/\n    // @font-face detection routine by Diego Perini\n    // javascript.nwbox.com/CSSSupport/\n\n    // false positives:\n    //   WebOS github.com/Modernizr/Modernizr/issues/342\n    //   WP7   github.com/Modernizr/Modernizr/issues/538\n    tests['fontface'] = function() {\n        var bool;\n\n        injectElementWithStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function( node, rule ) {\n          var style = document.getElementById('smodernizr'),\n              sheet = style.sheet || style.styleSheet,\n              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n\n          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n        });\n\n        return bool;\n    };\n    /*>>fontface*/\n\n    // CSS generated content detection\n    tests['generatedcontent'] = function() {\n        var bool;\n\n        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:\"',smile,'\";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {\n          bool = node.offsetHeight >= 3;\n        });\n\n        return bool;\n    };\n\n\n\n    // These tests evaluate support of the video/audio elements, as well as\n    // testing what types of content they support.\n    //\n    // We're using the Boolean constructor here, so that we can extend the value\n    // e.g.  Modernizr.video     // true\n    //       Modernizr.video.ogg // 'probably'\n    //\n    // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845\n    //                     thx to NielsLeenheer and zcorpan\n\n    // Note: in some older browsers, \"no\" was a return value instead of empty string.\n    //   It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2\n    //   It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5\n\n    tests['video'] = function() {\n        var elem = document.createElement('video'),\n            bool = false;\n\n        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('video/ogg; codecs=\"theora\"')      .replace(/^no$/,'');\n\n                // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546\n                bool.h264 = elem.canPlayType('video/mp4; codecs=\"avc1.42E01E\"') .replace(/^no$/,'');\n\n                bool.webm = elem.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/^no$/,'');\n            }\n\n        } catch(e) { }\n\n        return bool;\n    };\n\n    tests['audio'] = function() {\n        var elem = document.createElement('audio'),\n            bool = false;\n\n        try {\n            if ( bool = !!elem.canPlayType ) {\n                bool      = new Boolean(bool);\n                bool.ogg  = elem.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,'');\n                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');\n\n                // Mimetypes accepted:\n                //   developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements\n                //   bit.ly/iphoneoscodecs\n                bool.wav  = elem.canPlayType('audio/wav; codecs=\"1\"')     .replace(/^no$/,'');\n                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||\n                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');\n            }\n        } catch(e) { }\n\n        return bool;\n    };\n\n\n    // In FF4, if disabled, window.localStorage should === null.\n\n    // Normally, we could not test that directly and need to do a\n    //   `('localStorage' in window) && ` test first because otherwise Firefox will\n    //   throw bugzil.la/365772 if cookies are disabled\n\n    // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n    // will throw the exception:\n    //   QUOTA_EXCEEDED_ERRROR DOM Exception 22.\n    // Peculiarly, getItem and removeItem calls do not throw.\n\n    // Because we are forced to try/catch this, we'll go aggressive.\n\n    // Just FWIW: IE8 Compat mode supports these features completely:\n    //   www.quirksmode.org/dom/html5.html\n    // But IE8 doesn't support either with local files\n\n    tests['localstorage'] = function() {\n        try {\n            localStorage.setItem(mod, mod);\n            localStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n    tests['sessionstorage'] = function() {\n        try {\n            sessionStorage.setItem(mod, mod);\n            sessionStorage.removeItem(mod);\n            return true;\n        } catch(e) {\n            return false;\n        }\n    };\n\n\n    tests['webworkers'] = function() {\n        return !!window.Worker;\n    };\n\n\n    tests['applicationcache'] = function() {\n        return !!window.applicationCache;\n    };\n\n\n    // Thanks to Erik Dahlstrom\n    tests['svg'] = function() {\n        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;\n    };\n\n    // specifically for SVG inline in HTML, not within XHTML\n    // test page: paulirish.com/demo/inline-svg\n    tests['inlinesvg'] = function() {\n      var div = document.createElement('div');\n      div.innerHTML = '<svg/>';\n      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;\n    };\n\n    // SVG SMIL animation\n    tests['smil'] = function() {\n        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));\n    };\n\n    // This test is only for clip paths in SVG proper, not clip paths on HTML content\n    // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\n\n    // However read the comments to dig into applying SVG clippaths to HTML content here:\n    //   github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491\n    tests['svgclippaths'] = function() {\n        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));\n    };\n\n    /*>>webforms*/\n    // input features and input types go directly onto the ret object, bypassing the tests loop.\n    // Hold this guy to execute in a moment.\n    function webforms() {\n        /*>>input*/\n        // Run through HTML5's new input attributes to see if the UA understands any.\n        // We're using f which is the <input> element created early on\n        // Mike Taylr has created a comprehensive resource for testing these attributes\n        //   when applied to all input types:\n        //   miketaylr.com/code/input-type-attr.html\n        // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n\n        // Only input placeholder is tested while textarea's placeholder is not.\n        // Currently Safari 4 and Opera 11 have support only for the input placeholder\n        // Both tests are available in feature-detects/forms-placeholder.js\n        Modernizr['input'] = (function( props ) {\n            for ( var i = 0, len = props.length; i < len; i++ ) {\n                attrs[ props[i] ] = !!(props[i] in inputElem);\n            }\n            if (attrs.list){\n              // safari false positive's on datalist: webk.it/74252\n              // see also github.com/Modernizr/Modernizr/issues/146\n              attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);\n            }\n            return attrs;\n        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));\n        /*>>input*/\n\n        /*>>inputtypes*/\n        // Run through HTML5's new input types to see if the UA understands any.\n        //   This is put behind the tests runloop because it doesn't return a\n        //   true/false like all the other tests; instead, it returns an object\n        //   containing each input type with its corresponding true/false value\n\n        // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/\n        Modernizr['inputtypes'] = (function(props) {\n\n            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {\n\n                inputElem.setAttribute('type', inputElemType = props[i]);\n                bool = inputElem.type !== 'text';\n\n                // We first check to see if the type we give it sticks..\n                // If the type does, we feed it a textual value, which shouldn't be valid.\n                // If the value doesn't stick, we know there's input sanitization which infers a custom UI\n                if ( bool ) {\n\n                    inputElem.value         = smile;\n                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';\n\n                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {\n\n                      docElement.appendChild(inputElem);\n                      defaultView = document.defaultView;\n\n                      // Safari 2-4 allows the smiley as a value, despite making a slider\n                      bool =  defaultView.getComputedStyle &&\n                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&\n                              // Mobile android web browser has false positive, so must\n                              // check the height to see if the widget is actually there.\n                              (inputElem.offsetHeight !== 0);\n\n                      docElement.removeChild(inputElem);\n\n                    } else if ( /^(search|tel)$/.test(inputElemType) ){\n                      // Spec doesn't define any special parsing or detectable UI\n                      //   behaviors so we pass these through as true\n\n                      // Interestingly, opera fails the earlier test, so it doesn't\n                      //  even make it here.\n\n                    } else if ( /^(url|email)$/.test(inputElemType) ) {\n                      // Real url and email support comes with prebaked validation.\n                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;\n\n                    } else {\n                      // If the upgraded input compontent rejects the :) text, we got a winner\n                      bool = inputElem.value != smile;\n                    }\n                }\n\n                inputs[ props[i] ] = !!bool;\n            }\n            return inputs;\n        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));\n        /*>>inputtypes*/\n    }\n    /*>>webforms*/\n\n\n    // End of test definitions\n    // -----------------------\n\n\n\n    // Run through all tests and detect their support in the current UA.\n    // todo: hypothetically we could be doing an array of tests and use a basic loop here.\n    for ( var feature in tests ) {\n        if ( hasOwnProp(tests, feature) ) {\n            // run the test, throw the return value into the Modernizr,\n            //   then based on that boolean, define an appropriate className\n            //   and push it into an array of classes we'll join later.\n            featureName  = feature.toLowerCase();\n            Modernizr[featureName] = tests[feature]();\n\n            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);\n        }\n    }\n\n    /*>>webforms*/\n    // input tests need to run.\n    Modernizr.input || webforms();\n    /*>>webforms*/\n\n\n    /**\n     * addTest allows the user to define their own feature tests\n     * the result will be added onto the Modernizr object,\n     * as well as an appropriate className set on the html element\n     *\n     * @param feature - String naming the feature\n     * @param test - Function returning true if feature is supported, false if not\n     */\n     Modernizr.addTest = function ( feature, test ) {\n       if ( typeof feature == 'object' ) {\n         for ( var key in feature ) {\n           if ( hasOwnProp( feature, key ) ) {\n             Modernizr.addTest( key, feature[ key ] );\n           }\n         }\n       } else {\n\n         feature = feature.toLowerCase();\n\n         if ( Modernizr[feature] !== undefined ) {\n           // we're going to quit if you're trying to overwrite an existing test\n           // if we were to allow it, we'd do this:\n           //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n           //   docElement.className = docElement.className.replace( re, '' );\n           // but, no rly, stuff 'em.\n           return Modernizr;\n         }\n\n         test = typeof test == 'function' ? test() : test;\n\n         if (typeof enableClasses !== \"undefined\" && enableClasses) {\n           docElement.className += ' ' + (test ? '' : 'no-') + feature;\n         }\n         Modernizr[feature] = test;\n\n       }\n\n       return Modernizr; // allow chaining.\n     };\n\n\n    // Reset modElem.cssText to nothing to reduce memory footprint.\n    setCss('');\n    modElem = inputElem = null;\n\n    /*>>shiv*/\n    /**\n     * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n     */\n    ;(function(window, document) {\n        /*jshint evil:true */\n        /** version */\n        var version = '3.7.0';\n\n        /** Preset options */\n        var options = window.html5 || {};\n\n        /** Used to skip problem elements */\n        var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n        /** Not all elements can be cloned in IE **/\n        var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n        /** Detect whether the browser supports default html5 styles */\n        var supportsHtml5Styles;\n\n        /** Name of the expando, to work with multiple documents or to re-shiv one document */\n        var expando = '_html5shiv';\n\n        /** The id for the the documents expando */\n        var expanID = 0;\n\n        /** Cached data for each document */\n        var expandoData = {};\n\n        /** Detect whether the browser supports unknown elements */\n        var supportsUnknownElements;\n\n        (function() {\n          try {\n            var a = document.createElement('a');\n            a.innerHTML = '<xyz></xyz>';\n            //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n            supportsHtml5Styles = ('hidden' in a);\n\n            supportsUnknownElements = a.childNodes.length == 1 || (function() {\n              // assign a false positive if unable to shiv\n              (document.createElement)('a');\n              var frag = document.createDocumentFragment();\n              return (\n                typeof frag.cloneNode == 'undefined' ||\n                typeof frag.createDocumentFragment == 'undefined' ||\n                typeof frag.createElement == 'undefined'\n              );\n            }());\n          } catch(e) {\n            // assign a false positive if detection fails => unable to shiv\n            supportsHtml5Styles = true;\n            supportsUnknownElements = true;\n          }\n\n        }());\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Creates a style sheet with the given CSS text and adds it to the document.\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @param {String} cssText The CSS text.\n         * @returns {StyleSheet} The style element.\n         */\n        function addStyleSheet(ownerDocument, cssText) {\n          var p = ownerDocument.createElement('p'),\n          parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n          p.innerHTML = 'x<style>' + cssText + '</style>';\n          return parent.insertBefore(p.lastChild, parent.firstChild);\n        }\n\n        /**\n         * Returns the value of `html5.elements` as an array.\n         * @private\n         * @returns {Array} An array of shived element node names.\n         */\n        function getElements() {\n          var elements = html5.elements;\n          return typeof elements == 'string' ? elements.split(' ') : elements;\n        }\n\n        /**\n         * Returns the data associated to the given document\n         * @private\n         * @param {Document} ownerDocument The document.\n         * @returns {Object} An object of data.\n         */\n        function getExpandoData(ownerDocument) {\n          var data = expandoData[ownerDocument[expando]];\n          if (!data) {\n            data = {};\n            expanID++;\n            ownerDocument[expando] = expanID;\n            expandoData[expanID] = data;\n          }\n          return data;\n        }\n\n        /**\n         * returns a shived element for the given nodeName and document\n         * @memberOf html5\n         * @param {String} nodeName name of the element\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived element.\n         */\n        function createElement(nodeName, ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createElement(nodeName);\n          }\n          if (!data) {\n            data = getExpandoData(ownerDocument);\n          }\n          var node;\n\n          if (data.cache[nodeName]) {\n            node = data.cache[nodeName].cloneNode();\n          } else if (saveClones.test(nodeName)) {\n            node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n          } else {\n            node = data.createElem(nodeName);\n          }\n\n          // Avoid adding some elements to fragments in IE < 9 because\n          // * Attributes like `name` or `type` cannot be set/changed once an element\n          //   is inserted into a document/fragment\n          // * Link elements with `src` attributes that are inaccessible, as with\n          //   a 403 response, will cause the tab/window to crash\n          // * Script elements appended to fragments will execute when their `src`\n          //   or `text` property is set\n          return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n        }\n\n        /**\n         * returns a shived DocumentFragment for the given document\n         * @memberOf html5\n         * @param {Document} ownerDocument The context document.\n         * @returns {Object} The shived DocumentFragment.\n         */\n        function createDocumentFragment(ownerDocument, data){\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          if(supportsUnknownElements){\n            return ownerDocument.createDocumentFragment();\n          }\n          data = data || getExpandoData(ownerDocument);\n          var clone = data.frag.cloneNode(),\n          i = 0,\n          elems = getElements(),\n          l = elems.length;\n          for(;i<l;i++){\n            clone.createElement(elems[i]);\n          }\n          return clone;\n        }\n\n        /**\n         * Shivs the `createElement` and `createDocumentFragment` methods of the document.\n         * @private\n         * @param {Document|DocumentFragment} ownerDocument The document.\n         * @param {Object} data of the document.\n         */\n        function shivMethods(ownerDocument, data) {\n          if (!data.cache) {\n            data.cache = {};\n            data.createElem = ownerDocument.createElement;\n            data.createFrag = ownerDocument.createDocumentFragment;\n            data.frag = data.createFrag();\n          }\n\n\n          ownerDocument.createElement = function(nodeName) {\n            //abort shiv\n            if (!html5.shivMethods) {\n              return data.createElem(nodeName);\n            }\n            return createElement(nodeName, ownerDocument, data);\n          };\n\n          ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +\n                                                          'var n=f.cloneNode(),c=n.createElement;' +\n                                                          'h.shivMethods&&(' +\n                                                          // unroll the `createElement` calls\n                                                          getElements().join().replace(/[\\w\\-]+/g, function(nodeName) {\n            data.createElem(nodeName);\n            data.frag.createElement(nodeName);\n            return 'c(\"' + nodeName + '\")';\n          }) +\n            ');return n}'\n                                                         )(html5, data.frag);\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * Shivs the given document.\n         * @memberOf html5\n         * @param {Document} ownerDocument The document to shiv.\n         * @returns {Document} The shived document.\n         */\n        function shivDocument(ownerDocument) {\n          if (!ownerDocument) {\n            ownerDocument = document;\n          }\n          var data = getExpandoData(ownerDocument);\n\n          if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {\n            data.hasCSS = !!addStyleSheet(ownerDocument,\n                                          // corrects block display not defined in IE6/7/8/9\n                                          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +\n                                            // adds styling not present in IE6/7/8/9\n                                            'mark{background:#FF0;color:#000}' +\n                                            // hides non-rendered elements\n                                            'template{display:none}'\n                                         );\n          }\n          if (!supportsUnknownElements) {\n            shivMethods(ownerDocument, data);\n          }\n          return ownerDocument;\n        }\n\n        /*--------------------------------------------------------------------------*/\n\n        /**\n         * The `html5` object is exposed so that more elements can be shived and\n         * existing shiving can be detected on iframes.\n         * @type Object\n         * @example\n         *\n         * // options can be changed before the script is included\n         * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };\n         */\n        var html5 = {\n\n          /**\n           * An array or space separated string of node names of the elements to shiv.\n           * @memberOf html5\n           * @type Array|String\n           */\n          'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',\n\n          /**\n           * current version of html5shiv\n           */\n          'version': version,\n\n          /**\n           * A flag to indicate that the HTML5 style sheet should be inserted.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivCSS': (options.shivCSS !== false),\n\n          /**\n           * Is equal to true if a browser supports creating unknown/HTML5 elements\n           * @memberOf html5\n           * @type boolean\n           */\n          'supportsUnknownElements': supportsUnknownElements,\n\n          /**\n           * A flag to indicate that the document's `createElement` and `createDocumentFragment`\n           * methods should be overwritten.\n           * @memberOf html5\n           * @type Boolean\n           */\n          'shivMethods': (options.shivMethods !== false),\n\n          /**\n           * A string to describe the type of `html5` object (\"default\" or \"default print\").\n           * @memberOf html5\n           * @type String\n           */\n          'type': 'default',\n\n          // shivs the document according to the specified `html5` object options\n          'shivDocument': shivDocument,\n\n          //creates a shived element\n          createElement: createElement,\n\n          //creates a shived documentFragment\n          createDocumentFragment: createDocumentFragment\n        };\n\n        /*--------------------------------------------------------------------------*/\n\n        // expose html5\n        window.html5 = html5;\n\n        // shiv the document\n        shivDocument(document);\n\n    }(this, document));\n    /*>>shiv*/\n\n    // Assign private properties to the return object with prefix\n    Modernizr._version      = version;\n\n    // expose these for the plugin API. Look in the source for how to join() them against your input\n    /*>>prefixes*/\n    Modernizr._prefixes     = prefixes;\n    /*>>prefixes*/\n    /*>>domprefixes*/\n    Modernizr._domPrefixes  = domPrefixes;\n    Modernizr._cssomPrefixes  = cssomPrefixes;\n    /*>>domprefixes*/\n\n    /*>>mq*/\n    // Modernizr.mq tests a given media query, live against the current state of the window\n    // A few important notes:\n    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false\n    //   * A max-width or orientation query will be evaluated against the current state, which may change later.\n    //   * You must specify values. Eg. If you are testing support for the min-width media query use:\n    //       Modernizr.mq('(min-width:0)')\n    // usage:\n    // Modernizr.mq('only screen and (max-width:768)')\n    Modernizr.mq            = testMediaQuery;\n    /*>>mq*/\n\n    /*>>hasevent*/\n    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on\n    // Modernizr.hasEvent('gesturestart', elem)\n    Modernizr.hasEvent      = isEventSupported;\n    /*>>hasevent*/\n\n    /*>>testprop*/\n    // Modernizr.testProp() investigates whether a given style property is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testProp('pointerEvents')\n    Modernizr.testProp      = function(prop){\n        return testProps([prop]);\n    };\n    /*>>testprop*/\n\n    /*>>testallprops*/\n    // Modernizr.testAllProps() investigates whether a given style property,\n    //   or any of its vendor-prefixed variants, is recognized\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    Modernizr.testAllProps  = testPropsAll;\n    /*>>testallprops*/\n\n\n    /*>>teststyles*/\n    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards\n    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })\n    Modernizr.testStyles    = injectElementWithStyles;\n    /*>>teststyles*/\n\n\n    /*>>prefixed*/\n    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input\n    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'\n\n    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.\n    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:\n    //\n    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');\n\n    // If you're trying to ascertain which transition end event to bind to, you might do something like...\n    //\n    //     var transEndEventNames = {\n    //       'WebkitTransition' : 'webkitTransitionEnd',\n    //       'MozTransition'    : 'transitionend',\n    //       'OTransition'      : 'oTransitionEnd',\n    //       'msTransition'     : 'MSTransitionEnd',\n    //       'transition'       : 'transitionend'\n    //     },\n    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n\n    Modernizr.prefixed      = function(prop, obj, elem){\n      if(!obj) {\n        return testPropsAll(prop, 'pfx');\n      } else {\n        // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n        return testPropsAll(prop, obj, elem);\n      }\n    };\n    /*>>prefixed*/\n\n\n    /*>>cssclasses*/\n    // Remove \"no-js\" class from <html> element, if it exists:\n    docElement.className = docElement.className.replace(/(^|\\s)no-js(\\s|$)/, '$1$2') +\n\n                            // Add the new classes to the <html> element.\n                            (enableClasses ? ' js ' + classes.join(' ') : '');\n    /*>>cssclasses*/\n\n    return Modernizr;\n\n})(this, this.document);\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/respond.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Scripts/respond.matchmedia.addListener.js",
    "content": "/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */\n/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */\n(function(w) {\n  \"use strict\";\n  w.matchMedia = w.matchMedia || function(doc, undefined) {\n    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement(\"body\"), div = doc.createElement(\"div\");\n    div.id = \"mq-test-1\";\n    div.style.cssText = \"position:absolute;top:-100em\";\n    fakeBody.style.background = \"none\";\n    fakeBody.appendChild(div);\n    return function(q) {\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n      docElem.insertBefore(fakeBody, refNode);\n      bool = div.offsetWidth === 42;\n      docElem.removeChild(fakeBody);\n      return {\n        matches: bool,\n        media: q\n      };\n    };\n  }(w.document);\n})(this);\n\n/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */\n(function(w) {\n  \"use strict\";\n  if (w.matchMedia && w.matchMedia(\"all\").addListener) {\n    return false;\n  }\n  var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia(\"only all\").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) {\n    w.clearTimeout(timeoutID);\n    timeoutID = w.setTimeout(function() {\n      for (var i = 0, il = queries.length; i < il; i++) {\n        var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches;\n        if (matches !== mql.matches) {\n          mql.matches = matches;\n          for (var j = 0, jl = listeners.length; j < jl; j++) {\n            listeners[j].call(w, mql);\n          }\n        }\n      }\n    }, 30);\n  };\n  w.matchMedia = function(media) {\n    var mql = localMatchMedia(media), listeners = [], index = 0;\n    mql.addListener = function(listener) {\n      if (!hasMediaQueries) {\n        return;\n      }\n      if (!isListening) {\n        isListening = true;\n        w.addEventListener(\"resize\", handleChange, true);\n      }\n      if (index === 0) {\n        index = queries.push({\n          mql: mql,\n          listeners: listeners\n        });\n      }\n      listeners.push(listener);\n    };\n    mql.removeListener = function(listener) {\n      for (var i = 0, il = listeners.length; i < il; i++) {\n        if (listeners[i] === listener) {\n          listeners.splice(i, 1);\n        }\n      }\n    };\n    return mql;\n  };\n})(this);\n\n/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */\n(function(w) {\n  \"use strict\";\n  var respond = {};\n  w.respond = respond;\n  respond.update = function() {};\n  var requestQueue = [], xmlHttp = function() {\n    var xmlhttpmethod = false;\n    try {\n      xmlhttpmethod = new w.XMLHttpRequest();\n    } catch (e) {\n      xmlhttpmethod = new w.ActiveXObject(\"Microsoft.XMLHTTP\");\n    }\n    return function() {\n      return xmlhttpmethod;\n    };\n  }(), ajax = function(url, callback) {\n    var req = xmlHttp();\n    if (!req) {\n      return;\n    }\n    req.open(\"GET\", url, true);\n    req.onreadystatechange = function() {\n      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {\n        return;\n      }\n      callback(req.responseText);\n    };\n    if (req.readyState === 4) {\n      return;\n    }\n    req.send(null);\n  };\n  respond.ajax = ajax;\n  respond.queue = requestQueue;\n  respond.regex = {\n    media: /@media[^\\{]+\\{([^\\{\\}]*\\{[^\\}\\{]*\\})+/gi,\n    keyframes: /@(?:\\-(?:o|moz|webkit)\\-)?keyframes[^\\{]+\\{(?:[^\\{\\}]*\\{[^\\}\\{]*\\})+[^\\}]*\\}/gi,\n    urls: /(url\\()['\"]?([^\\/\\)'\"][^:\\)'\"]+)['\"]?(\\))/g,\n    findStyles: /@media *([^\\{]+)\\{([\\S\\s]+?)$/,\n    only: /(only\\s+)?([a-zA-Z]+)\\s?/,\n    minw: /\\([\\s]*min\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/,\n    maxw: /\\([\\s]*max\\-width\\s*:[\\s]*([\\s]*[0-9\\.]+)(px|em)[\\s]*\\)/\n  };\n  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia(\"only all\") !== null && w.matchMedia(\"only all\").matches;\n  if (respond.mediaQueriesSupported) {\n    return;\n  }\n  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName(\"head\")[0] || docElem, base = doc.getElementsByTagName(\"base\")[0], links = head.getElementsByTagName(\"link\"), lastCall, resizeDefer, eminpx, getEmValue = function() {\n    var ret, div = doc.createElement(\"div\"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;\n    div.style.cssText = \"position:absolute;font-size:1em;width:1em\";\n    if (!body) {\n      body = fakeUsed = doc.createElement(\"body\");\n      body.style.background = \"none\";\n    }\n    docElem.style.fontSize = \"100%\";\n    body.style.fontSize = \"100%\";\n    body.appendChild(div);\n    if (fakeUsed) {\n      docElem.insertBefore(body, docElem.firstChild);\n    }\n    ret = div.offsetWidth;\n    if (fakeUsed) {\n      docElem.removeChild(body);\n    } else {\n      body.removeChild(div);\n    }\n    docElem.style.fontSize = originalHTMLFontSize;\n    if (originalBodyFontSize) {\n      body.style.fontSize = originalBodyFontSize;\n    }\n    ret = eminpx = parseFloat(ret);\n    return ret;\n  }, applyMedia = function(fromResize) {\n    var name = \"clientWidth\", docElemProp = docElem[name], currWidth = doc.compatMode === \"CSS1Compat\" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();\n    if (fromResize && lastCall && now - lastCall < resizeThrottle) {\n      w.clearTimeout(resizeDefer);\n      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);\n      return;\n    } else {\n      lastCall = now;\n    }\n    for (var i in mediastyles) {\n      if (mediastyles.hasOwnProperty(i)) {\n        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = \"em\";\n        if (!!min) {\n          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!!max) {\n          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);\n        }\n        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {\n          if (!styleBlocks[thisstyle.media]) {\n            styleBlocks[thisstyle.media] = [];\n          }\n          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);\n        }\n      }\n    }\n    for (var j in appendedEls) {\n      if (appendedEls.hasOwnProperty(j)) {\n        if (appendedEls[j] && appendedEls[j].parentNode === head) {\n          head.removeChild(appendedEls[j]);\n        }\n      }\n    }\n    appendedEls.length = 0;\n    for (var k in styleBlocks) {\n      if (styleBlocks.hasOwnProperty(k)) {\n        var ss = doc.createElement(\"style\"), css = styleBlocks[k].join(\"\\n\");\n        ss.type = \"text/css\";\n        ss.media = k;\n        head.insertBefore(ss, lastLink.nextSibling);\n        if (ss.styleSheet) {\n          ss.styleSheet.cssText = css;\n        } else {\n          ss.appendChild(doc.createTextNode(css));\n        }\n        appendedEls.push(ss);\n      }\n    }\n  }, translate = function(styles, href, media) {\n    var qs = styles.replace(respond.regex.keyframes, \"\").match(respond.regex.media), ql = qs && qs.length || 0;\n    href = href.substring(0, href.lastIndexOf(\"/\"));\n    var repUrls = function(css) {\n      return css.replace(respond.regex.urls, \"$1\" + href + \"$2$3\");\n    }, useMedia = !ql && media;\n    if (href.length) {\n      href += \"/\";\n    }\n    if (useMedia) {\n      ql = 1;\n    }\n    for (var i = 0; i < ql; i++) {\n      var fullq, thisq, eachq, eql;\n      if (useMedia) {\n        fullq = media;\n        rules.push(repUrls(styles));\n      } else {\n        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;\n        rules.push(RegExp.$2 && repUrls(RegExp.$2));\n      }\n      eachq = fullq.split(\",\");\n      eql = eachq.length;\n      for (var j = 0; j < eql; j++) {\n        thisq = eachq[j];\n        mediastyles.push({\n          media: thisq.split(\"(\")[0].match(respond.regex.only) && RegExp.$2 || \"all\",\n          rules: rules.length - 1,\n          hasquery: thisq.indexOf(\"(\") > -1,\n          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\"),\n          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || \"\")\n        });\n      }\n    }\n    applyMedia();\n  }, makeRequests = function() {\n    if (requestQueue.length) {\n      var thisRequest = requestQueue.shift();\n      ajax(thisRequest.href, function(styles) {\n        translate(styles, thisRequest.href, thisRequest.media);\n        parsedSheets[thisRequest.href] = true;\n        w.setTimeout(function() {\n          makeRequests();\n        }, 0);\n      });\n    }\n  }, ripCSS = function() {\n    for (var i = 0; i < links.length; i++) {\n      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === \"stylesheet\";\n      if (!!href && isCSS && !parsedSheets[href]) {\n        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {\n          translate(sheet.styleSheet.rawCssText, href, media);\n          parsedSheets[href] = true;\n        } else {\n          if (!/^([a-zA-Z:]*\\/\\/)/.test(href) && !base || href.replace(RegExp.$1, \"\").split(\"/\")[0] === w.location.host) {\n            if (href.substring(0, 2) === \"//\") {\n              href = w.location.protocol + href;\n            }\n            requestQueue.push({\n              href: href,\n              media: media\n            });\n          }\n        }\n      }\n    }\n    makeRequests();\n  };\n  ripCSS();\n  respond.update = ripCSS;\n  respond.getEmValue = getEmValue;\n  function callMedia() {\n    applyMedia(true);\n  }\n  if (w.addEventListener) {\n    w.addEventListener(\"resize\", callMedia, false);\n  } else if (w.attachEvent) {\n    w.attachEvent(\"onresize\", callMedia);\n  }\n})(this);"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Site.Master",
    "content": "﻿<%@ Master Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"Site.master.cs\" Inherits=\"WebFormsDemo.SiteMaster\" %>\n\n<!DOCTYPE html>\n\n<html lang=\"en\">\n<head runat=\"server\">\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title><%: Page.Title %> - My ASP.NET Application</title>\n\n    <asp:PlaceHolder runat=\"server\">\n        <%: Scripts.Render(\"~/bundles/modernizr\") %>\n    </asp:PlaceHolder>\n    <webopt:bundlereference runat=\"server\" path=\"~/Content/css\" />\n    <link href=\"~/favicon.ico\" rel=\"shortcut icon\" type=\"image/x-icon\" />\n\n</head>\n<body>\n    <form runat=\"server\">\n        <asp:ScriptManager runat=\"server\">\n            <Scripts>\n                <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>\n                <%--Framework Scripts--%>\n                <asp:ScriptReference Name=\"MsAjaxBundle\" />\n                <asp:ScriptReference Name=\"jquery\" />\n                <asp:ScriptReference Name=\"bootstrap\" />\n                <asp:ScriptReference Name=\"respond\" />\n                <asp:ScriptReference Name=\"WebForms.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/WebForms.js\" />\n                <asp:ScriptReference Name=\"WebUIValidation.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/WebUIValidation.js\" />\n                <asp:ScriptReference Name=\"MenuStandards.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/MenuStandards.js\" />\n                <asp:ScriptReference Name=\"GridView.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/GridView.js\" />\n                <asp:ScriptReference Name=\"DetailsView.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/DetailsView.js\" />\n                <asp:ScriptReference Name=\"TreeView.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/TreeView.js\" />\n                <asp:ScriptReference Name=\"WebParts.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/WebParts.js\" />\n                <asp:ScriptReference Name=\"Focus.js\" Assembly=\"System.Web\" Path=\"~/Scripts/WebForms/Focus.js\" />\n                <asp:ScriptReference Name=\"WebFormsBundle\" />\n                <%--Site Scripts--%>\n            </Scripts>\n        </asp:ScriptManager>\n\n        <div class=\"navbar navbar-inverse navbar-fixed-top\">\n            <div class=\"container\">\n                <div class=\"navbar-header\">\n                    <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                    </button>\n                    <a class=\"navbar-brand\" runat=\"server\" href=\"~/\">Application name</a>\n                </div>\n                <div class=\"navbar-collapse collapse\">\n                    <ul class=\"nav navbar-nav\">\n                        <li><a runat=\"server\" href=\"~/\">Home</a></li>\n                        <li><a runat=\"server\" href=\"~/StatusDemos/StatusDemos\">Status</a></li>\n                    </ul>\n                    <asp:LoginView runat=\"server\" ViewStateMode=\"Disabled\">\n                        <AnonymousTemplate>\n                            <ul class=\"nav navbar-nav navbar-right\">\n                                <li><a runat=\"server\" href=\"~/Account/Register\">Register</a></li>\n                                <li><a runat=\"server\" href=\"~/Account/Login\">Log in</a></li>\n                            </ul>\n                        </AnonymousTemplate>\n                        <LoggedInTemplate>\n                            <ul class=\"nav navbar-nav navbar-right\">\n                                <li><a runat=\"server\" href=\"~/Account/Manage\" title=\"Manage your account\">Hello, <%: Context.User.Identity.GetUserName()  %> !</a></li>\n                                <li>\n                                    <asp:LoginStatus runat=\"server\" LogoutAction=\"Redirect\" LogoutText=\"Log off\" LogoutPageUrl=\"~/\" OnLoggingOut=\"Unnamed_LoggingOut\" />\n                                </li>\n                            </ul>\n                        </LoggedInTemplate>\n                    </asp:LoginView>\n                </div>\n            </div>\n        </div>\n        <div class=\"container body-content\">\n            <asp:ContentPlaceHolder ID=\"MainContent\" runat=\"server\">\n            </asp:ContentPlaceHolder>\n            <hr />\n            <footer>\n                <p>&copy; <%: DateTime.Now.Year %> - My ASP.NET Application</p>\n            </footer>\n        </div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Site.Master.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Security.Claims;\nusing System.Security.Principal;\nusing System.Web;\nusing System.Web.Security;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.Identity;\n\nnamespace WebFormsDemo\n{\n    public partial class SiteMaster : MasterPage\n    {\n        private const string AntiXsrfTokenKey = \"__AntiXsrfToken\";\n        private const string AntiXsrfUserNameKey = \"__AntiXsrfUserName\";\n        private string _antiXsrfTokenValue;\n\n        protected void Page_Init(object sender, EventArgs e)\n        {\n            // The code below helps to protect against XSRF attacks\n            var requestCookie = Request.Cookies[AntiXsrfTokenKey];\n            Guid requestCookieGuidValue;\n            if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue))\n            {\n                // Use the Anti-XSRF token from the cookie\n                _antiXsrfTokenValue = requestCookie.Value;\n                Page.ViewStateUserKey = _antiXsrfTokenValue;\n            }\n            else\n            {\n                // Generate a new Anti-XSRF token and save to the cookie\n                _antiXsrfTokenValue = Guid.NewGuid().ToString(\"N\");\n                Page.ViewStateUserKey = _antiXsrfTokenValue;\n\n                var responseCookie = new HttpCookie(AntiXsrfTokenKey)\n                {\n                    HttpOnly = true,\n                    Value = _antiXsrfTokenValue\n                };\n                if (FormsAuthentication.RequireSSL && Request.IsSecureConnection)\n                {\n                    responseCookie.Secure = true;\n                }\n                Response.Cookies.Set(responseCookie);\n            }\n\n            Page.PreLoad += master_Page_PreLoad;\n        }\n\n        protected void master_Page_PreLoad(object sender, EventArgs e)\n        {\n            if (!IsPostBack)\n            {\n                // Set Anti-XSRF token\n                ViewState[AntiXsrfTokenKey] = Page.ViewStateUserKey;\n                ViewState[AntiXsrfUserNameKey] = Context.User.Identity.Name ?? String.Empty;\n            }\n            else\n            {\n                // Validate the Anti-XSRF token\n                if ((string)ViewState[AntiXsrfTokenKey] != _antiXsrfTokenValue\n                    || (string)ViewState[AntiXsrfUserNameKey] != (Context.User.Identity.Name ?? String.Empty))\n                {\n                    throw new InvalidOperationException(\"Validation of Anti-XSRF token failed.\");\n                }\n            }\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected void Unnamed_LoggingOut(object sender, LoginCancelEventArgs e)\n        {\n            Context.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);\n        }\n    }\n\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Site.Master.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo {\n    \n    \n    public partial class SiteMaster {\n        \n        /// <summary>\n        /// MainContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Site.Mobile.Master",
    "content": "<%@ Master Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"Site.Mobile.master.cs\" Inherits=\"WebFormsDemo.Site_Mobile\" %>\n<%@ Register Src=\"~/ViewSwitcher.ascx\" TagPrefix=\"friendlyUrls\" TagName=\"ViewSwitcher\" %>\n\n<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head runat=\"server\">\n    <meta name=\"viewport\" content=\"width=device-width\" />\n    <title></title>\n    <asp:ContentPlaceHolder runat=\"server\" ID=\"HeadContent\" />\n</head>\n<body>\n    <form id=\"form1\" runat=\"server\">\n    <div>\n        <h1>Mobile Master Page</h1>\n        <asp:ContentPlaceHolder runat=\"server\" ID=\"FeaturedContent\" />\n        <section class=\"content-wrapper main-content clear-fix\">\n            <asp:ContentPlaceHolder runat=\"server\" ID=\"MainContent\" />\n        </section>\n        <friendlyUrls:ViewSwitcher runat=\"server\" />\n    </div>\n    </form>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Site.Mobile.Master.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\n\nnamespace WebFormsDemo\n{\n    public partial class Site_Mobile : System.Web.UI.MasterPage\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Site.Mobile.Master.designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo {\n    \n    \n    public partial class Site_Mobile {\n        \n        /// <summary>\n        /// HeadContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder HeadContent;\n        \n        /// <summary>\n        /// form1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.HtmlControls.HtmlForm form1;\n        \n        /// <summary>\n        /// FeaturedContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder FeaturedContent;\n        \n        /// <summary>\n        /// MainContent control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContent;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Startup.cs",
    "content": "﻿using Microsoft.Owin;\nusing Owin;\n\n[assembly: OwinStartupAttribute(typeof(WebFormsDemo.Startup))]\nnamespace WebFormsDemo\n{\n    public partial class Startup {\n        public void Configuration(IAppBuilder app) {\n            ConfigureAuth(app);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/HomeTimelineDemo.aspx",
    "content": "﻿<%@Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"HomeTimelineDemo.aspx.cs\" Inherits=\"WebFormsDemos.StatusDemos.HomeTimelineDemo\" %>\n\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Home Timeline Demo</h1>\n    <p>\n        <asp:Button ID=\"RefreshButton\" runat=\"server\" Text=\"Refresh\" OnClick=\"RefreshButton_Click\" />\n    </p>\n    <asp:ListView ID=\"TwitterListView\" runat=\"server\">\n        <LayoutTemplate>\n            <table id=\"Table1\" runat=\"server\">\n                <tr id=\"Tr1\" runat=\"server\">\n                    <th>Picture </th>\n                    <th>Name </th>\n                    <th>Last Tweet </th>\n                    <th>Mentions </th>\n                </tr>\n                <tr id=\"itemPlaceholder\">\n                </tr>\n            </table>\n        </LayoutTemplate>\n        <ItemTemplate>\n            <tr id=\"Tr2\" runat=\"server\">\n                <td>\n                    <asp:Image ID=\"UserImage\" runat=\"server\" ImageUrl='<%#Eval(\"User.ProfileImageUrl\") %>' />\n                </td>\n                <td>\n                    <asp:Label ID=\"NameLabel\" runat=\"server\" Text='<%#Eval(\"User.ScreenNameResponse\") %>' />\n                </td>\n                <td>\n                    <asp:Label ID=\"TweetLabel\" runat=\"server\" Text='<%#Eval(\"Text\") %>' />\n                </td>\n                <td>\n                    <asp:Repeater runat=\"server\" DataSource='<%#Eval(\"Entities.UserMentionEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"ScreenName\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                    <asp:Repeater ID=\"Repeater1\" runat=\"server\" DataSource='<%#Eval(\"Entities.UrlEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Url\")%>,</ItemTemplate>\n                    </asp:Repeater>\n\n                    <asp:Repeater ID=\"Repeater2\" runat=\"server\" DataSource='<%#Eval(\"Entities.HashTagEntities\") %>'>\n                        <ItemTemplate><%# Eval(\"Tag\")%>,</ItemTemplate>\n                    </asp:Repeater>\n                </td>\n            </tr>\n        </ItemTemplate>\n    </asp:ListView>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/HomeTimelineDemo.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace WebFormsDemos.StatusDemos\n{\n    public partial class HomeTimelineDemo : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        protected async void RefreshButton_Click(object sender, EventArgs e)\n        {\n            var auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(),\n                GoToTwitterAuthorization = twitterUrl => { }\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            var tweets =\n                await\n                (from tweet in ctx.Status\n                 where tweet.Type == StatusType.Home\n                 select tweet)\n                .ToListAsync();\n\n            TwitterListView.DataSource = tweets;\n            TwitterListView.DataBind();\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/HomeTimelineDemo.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemos.StatusDemos {\n    \n    \n    public partial class HomeTimelineDemo {\n        \n        /// <summary>\n        /// RefreshButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button RefreshButton;\n        \n        /// <summary>\n        /// TwitterListView control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.ListView TwitterListView;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/StatusDemos.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"StatusDemos.aspx.cs\" Inherits=\"WebFormsDemos.StatusDemos.StatusDemos\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Status Demos</h1>\n    <p></p>\n    <p>\n        <asp:HyperLink ID=\"TweetDemoHyperLink\" runat=\"server\" NavigateUrl=\"~/StatusDemos/TweetDemo.aspx\">Tweet Demo</asp:HyperLink>\n    </p>\n    <p>\n        <asp:HyperLink ID=\"HomeTimelineDemoHyperLink\" runat=\"server\" NavigateUrl=\"~/StatusDemos/HomeTimelineDemo.aspx\">Home Timeline Demo</asp:HyperLink>\n    </p>\n    <p>\n        <asp:HyperLink ID=\"UploadImageDemoHyperLink\" runat=\"server\" NavigateUrl=\"~/StatusDemos/UploadImageDemo.aspx\">Upload Image Demo</asp:HyperLink>\n    </p>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/StatusDemos.aspx.cs",
    "content": "﻿using LinqToTwitter;\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebFormsDemos.StatusDemos\n{\n    public partial class StatusDemos : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/StatusDemos.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemos.StatusDemos {\n    \n    \n    public partial class StatusDemos {\n        \n        /// <summary>\n        /// TweetDemoHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink TweetDemoHyperLink;\n        \n        /// <summary>\n        /// HomeTimelineDemoHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink HomeTimelineDemoHyperLink;\n        \n        /// <summary>\n        /// UploadImageDemoHyperLink control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.HyperLink UploadImageDemoHyperLink;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/TweetDemo.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"TweetDemo.aspx.cs\" Inherits=\"WebFormsDemos.StatusDemos.TweetDemo\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Tweet Demo</h1>\n    <p></p>\n\t<p>Post an update:</p> \n    <p>\n        <asp:TextBox ID=\"UpdateTextBox\" runat=\"server\" Columns=\"70\" Rows=\"2\" />\n        <asp:RequiredFieldValidator ID=\"RequiredFieldValidator1\" runat=\"server\" ControlToValidate=\"UpdateTextBox\"\n            ErrorMessage=\"type in some message first\" />\n    </p>\n    <p>\n        <asp:Button ID=\"PostUpdateButton\" runat=\"server\" Text=\"Post update\" OnClick=\"PostUpdateButton_Click\" />\n    </p>\n    <p>\n        <asp:Label runat=\"server\" EnableViewState=\"false\" Text=\"Update posted.\" Visible=\"false\" ID=\"SuccessLabel\" />\n    </p>\n\t\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/TweetDemo.aspx.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\n\nnamespace WebFormsDemos.StatusDemos\n{\n    public partial class TweetDemo : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            UpdateTextBox.Text = \"Testing LINQ to Twitter WebForms Demo - \" + DateTime.Now;\n        }\n\n        protected async void PostUpdateButton_Click(object sender, EventArgs e)\n        {\n            var auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(),\n                GoToTwitterAuthorization = twitterUrl => { }\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            await ctx.TweetAsync(UpdateTextBox.Text);\n\n            SuccessLabel.Visible = true;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/TweetDemo.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemos.StatusDemos {\n    \n    \n    public partial class TweetDemo {\n        \n        /// <summary>\n        /// UpdateTextBox control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.TextBox UpdateTextBox;\n        \n        /// <summary>\n        /// RequiredFieldValidator1 control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;\n        \n        /// <summary>\n        /// PostUpdateButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button PostUpdateButton;\n        \n        /// <summary>\n        /// SuccessLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label SuccessLabel;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/UploadImageDemo.aspx",
    "content": "﻿<%@ Page Async=\"true\" Title=\"\" Language=\"C#\" MasterPageFile=\"~/Site.Master\" AutoEventWireup=\"true\" CodeBehind=\"UploadImageDemo.aspx.cs\" Inherits=\"WebFormsDemo.StatusDemos.UploadImageDemo\" %>\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"MainContent\" runat=\"server\">\n    <h1>Upload Image Demo</h1>\n    <p>\n        <asp:Button ID=\"RefreshButton\" runat=\"server\" Text=\"Refresh\" OnClick=\"UploadButton_Click\" />\n    </p>\n    <table>\n        <tr>\n            <td>\n                <asp:Image ID=\"UserImage\" runat=\"server\" />\n            </td>\n            <td>\n                <asp:Label ID=\"NameLabel\" runat=\"server\" />\n            </td>\n            <td>\n                <asp:Label ID=\"TweetLabel\" runat=\"server\" />\n            </td>\n        </tr>\n    </table>\n</asp:Content>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/UploadImageDemo.aspx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Web.UI.WebControls;\nusing LinqToTwitter;\n\nnamespace WebFormsDemo.StatusDemos\n{\n    public partial class UploadImageDemo : System.Web.UI.Page\n    {\n        protected void Page_Load(object sender, EventArgs e)\n        {\n        }\n\n        protected async void UploadButton_Click(object sender, EventArgs e)\n        {\n            var auth = new AspNetAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(),\n                GoToTwitterAuthorization = twitterUrl => { }\n            };\n\n            var twitterCtx = new TwitterContext(auth);\n\n            string status = $\"Testing multi-image tweet #Linq2Twitter £ {DateTime.Now}\";\n            string mediaCategory = \"tweet_image\";\n\n            string path = Server.MapPath(\"..\\\\Content\\\\200xColor_2.png\");\n            var imageUploadTasks =\n                new List<Task<Media>>\n                {\n                    twitterCtx.UploadMediaAsync(System.IO.File.ReadAllBytes(path), \"image/jpg\", mediaCategory),\n                };\n\n            await Task.WhenAll(imageUploadTasks);\n\n            List<ulong> mediaIds =\n                (from tsk in imageUploadTasks\n                 select tsk.Result.MediaID)\n                .ToList();\n\n            Status tweet = await twitterCtx.TweetAsync(status, mediaIds);\n\n            UserImage.ImageUrl = tweet.User.ProfileImageUrl;\n            NameLabel.Text = tweet.User.ScreenNameResponse;\n            TweetLabel.Text = tweet.Text;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/StatusDemos/UploadImageDemo.aspx.designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo.StatusDemos {\n    \n    \n    public partial class UploadImageDemo {\n        \n        /// <summary>\n        /// RefreshButton control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Button RefreshButton;\n        \n        /// <summary>\n        /// UserImage control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Image UserImage;\n        \n        /// <summary>\n        /// NameLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label NameLabel;\n        \n        /// <summary>\n        /// TweetLabel control.\n        /// </summary>\n        /// <remarks>\n        /// Auto-generated field.\n        /// To modify move field declaration from designer file to code-behind file.\n        /// </remarks>\n        protected global::System.Web.UI.WebControls.Label TweetLabel;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/ViewSwitcher.ascx",
    "content": "<%@ Control Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"ViewSwitcher.ascx.cs\" Inherits=\"WebFormsDemo.ViewSwitcher\" %>\n<div id=\"viewSwitcher\">\n    <%: CurrentView %> view | <a href=\"<%: SwitchUrl %>\" data-ajax=\"false\">Switch to <%: AlternateView %></a>\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/ViewSwitcher.ascx.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Routing;\nusing System.Web.UI;\nusing System.Web.UI.WebControls;\nusing Microsoft.AspNet.FriendlyUrls.Resolvers;\n\nnamespace WebFormsDemo\n{\n    public partial class ViewSwitcher : System.Web.UI.UserControl\n    {\n        protected string CurrentView { get; private set; }\n\n        protected string AlternateView { get; private set; }\n\n        protected string SwitchUrl { get; private set; }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            // Determine current view\n            var isMobile = WebFormsFriendlyUrlResolver.IsMobileView(new HttpContextWrapper(Context));\n            CurrentView = isMobile ? \"Mobile\" : \"Desktop\";\n\n            // Determine alternate view\n            AlternateView = isMobile ? \"Desktop\" : \"Mobile\";\n\n            // Create switch URL from the route, e.g. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page\n            var switchViewRouteName = \"AspNet.FriendlyUrls.SwitchView\";\n            var switchViewRoute = RouteTable.Routes[switchViewRouteName];\n            if (switchViewRoute == null)\n            {\n                // Friendly URLs is not enabled or the name of the switch view route is out of sync\n                this.Visible = false;\n                return;\n            }\n            var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView, __FriendlyUrls_SwitchViews = true });\n            url += \"?ReturnUrl=\" + HttpUtility.UrlEncode(Request.RawUrl);\n            SwitchUrl = url;\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/ViewSwitcher.ascx.designer.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated. \n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace WebFormsDemo {\n    \n    \n    public partial class ViewSwitcher {\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n<configuration>\n  <configSections>\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\" />\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n  </configSections>\n  <connectionStrings>\n    <add name=\"DefaultConnection\" connectionString=\"Data Source=(LocalDb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\aspnet-WebFormsDemo-20160820092724.mdf;Initial Catalog=aspnet-WebFormsDemo-20160820092724;Integrated Security=True\" providerName=\"System.Data.SqlClient\" />\n  </connectionStrings>\n  <appSettings>\n    <!-- Fill in your consumer key and secret here to make the OAuth sample work. -->\n    <!-- Twitter sign-up: https://dev.twitter.com/ -->\n    <add key=\"consumerKey\" value=\"\" />\n    <add key=\"consumerSecret\" value=\"\" />\n    <add key=\"oauthToken\" value=\"\" />\n    <add key=\"oauthTokenSecret\" value=\"\" />\n    <add key=\"accessToken\" value=\"\" />\n    <add key=\"accessTokenSecret\" value=\"\" />\n  </appSettings>\n  <!--\n    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.\n\n    The following attributes can be set on the <httpRuntime> tag.\n      <system.Web>\n        <httpRuntime targetFramework=\"4.6.1\" />\n      </system.Web>\n  -->\n  <system.web>\n    <authentication mode=\"None\" />\n    <compilation debug=\"true\" targetFramework=\"4.8\" />\n    <httpRuntime targetFramework=\"4.5.2\" />\n    <pages>\n      <namespaces>\n        <add namespace=\"System.Web.Optimization\" />\n        <add namespace=\"Microsoft.AspNet.Identity\" />\n      </namespaces>\n      <controls>\n        <add assembly=\"Microsoft.AspNet.Web.Optimization.WebForms\" namespace=\"Microsoft.AspNet.Web.Optimization.WebForms\" tagPrefix=\"webopt\" />\n      </controls>\n    </pages>\n    <membership>\n      <providers>\n        <!--\n        ASP.NET Membership is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template\n        -->\n        <clear />\n      </providers>\n    </membership>\n    <profile>\n      <providers>\n        <!--\n        ASP.NET Membership Profile is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template\n        -->\n        <clear />\n      </providers>\n    </profile>\n    <roleManager>\n      <!--\n          ASP.NET Membership Role is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template\n        -->\n      <providers>\n        <clear />\n      </providers>\n    </roleManager>\n    <!--\n            If you are deploying to a cloud environment that has multiple web server instances,\n            you should change session state mode from \"InProc\" to \"Custom\". In addition,\n            change the connection string named \"DefaultConnection\" to connect to an instance\n            of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.\n      -->\n    <sessionState mode=\"InProc\" customProvider=\"DefaultSessionProvider\">\n      <providers>\n        <add name=\"DefaultSessionProvider\" type=\"System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" connectionStringName=\"DefaultConnection\" />\n      </providers>\n    </sessionState>\n  </system.web>\n  <system.webServer>\n    <modules>\n      <remove name=\"FormsAuthentication\" />\n    </modules>\n  </system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Overlapped\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.Encoding.Extensions\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.Encoding\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Globalization\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Security.SecureString\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Timer\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices.RuntimeInformation\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Primitives\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Sockets\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.0\" newVersion=\"4.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Xml.ReaderWriter\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.IO\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Diagnostics.Debug\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Resources.ResourceManager\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Linq.Queryable\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.InteropServices\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Security.Cryptography.Algorithms\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.3.0.0\" newVersion=\"4.3.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Text.RegularExpressions\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.0\" newVersion=\"4.1.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.IO.Compression\" publicKeyToken=\"B77A5C561934E089\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.0\" newVersion=\"4.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Diagnostics.Contracts\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.Extensions\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.Numerics\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.EventBasedAsync\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Collections.Concurrent\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Diagnostics.Tracing\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.0\" newVersion=\"4.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Dynamic.Runtime\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection.Primitives\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Security.Principal\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Linq\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reflection.Extensions\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Linq.Parallel\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Diagnostics.StackTrace\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Xml.XmlSerializer\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.0\" newVersion=\"4.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Globalization.Extensions\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.NetworkInformation\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Xml.XDocument\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.Serialization.Json\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ObjectModel\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Xml.XPath.XDocument\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.0.0\" newVersion=\"4.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Linq.Expressions\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.2.0\" newVersion=\"4.1.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Parallel\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.Serialization.Primitives\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.0\" newVersion=\"4.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ValueTuple\" publicKeyToken=\"CC7B13FFCD2DDD51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.2.0\" newVersion=\"4.0.2.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Diagnostics.Tools\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.0\" newVersion=\"4.0.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Requests\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.11.0\" newVersion=\"4.0.11.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Data.Common\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.0\" newVersion=\"4.2.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.Serialization.Xml\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.3.0\" newVersion=\"4.1.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" culture=\"neutral\" publicKeyToken=\"30ad4fe6b2a6aeed\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-10.0.0.0\" newVersion=\"10.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"WebGrease\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-1.6.5135.21930\" newVersion=\"1.6.5135.21930\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"EntityFramework\" publicKeyToken=\"b77a5c561934e089\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.0.0\" newVersion=\"3.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.OAuth\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.0.0\" newVersion=\"3.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Cookies\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.0.0\" newVersion=\"3.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" culture=\"neutral\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.0.0\" newVersion=\"3.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Antlr3.Runtime\" publicKeyToken=\"eb42632606e9261f\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.5.0.2\" newVersion=\"3.5.0.2\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reactive.Core\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.2.5.0\" newVersion=\"2.2.5.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reactive.Interfaces\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.2.5.0\" newVersion=\"2.2.5.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Reactive.Linq\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-2.2.5.0\" newVersion=\"2.2.5.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Helpers\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.WebPages\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.2.3.0\" newVersion=\"5.2.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security.Twitter\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.0.0\" newVersion=\"3.1.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\" />\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\" />\n    </providers>\n  </entityFramework>\n  <system.codedom>\n    <compilers>\n      <compiler language=\"c#;cs;csharp\" extension=\".cs\" type=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" warningLevel=\"4\" compilerOptions=\"/langversion:default /nowarn:1659;1699;1701\" />\n      <compiler language=\"vb;vbs;visualbasic;vbscript\" extension=\".vb\" type=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" warningLevel=\"4\" compilerOptions=\"/langversion:default /nowarn:41008 /define:_MYTYPE=\\&quot;Web\\&quot; /optionInfer+\" />\n    </compilers>\n  </system.codedom>\n</configuration>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/WebFormsDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"..\\packages\\Microsoft.Net.Compilers.2.6.1\\build\\Microsoft.Net.Compilers.props\" Condition=\"Exists('..\\packages\\Microsoft.Net.Compilers.2.6.1\\build\\Microsoft.Net.Compilers.props')\" />\n  <Import Project=\"..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props\" Condition=\"Exists('..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{2B50862D-1D21-4B8A-978E-DC289FC196EA}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WebFormsDemo</RootNamespace>\n    <AssemblyName>WebFormsDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <UseGlobalApplicationHostFile />\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n    <Use64BitIISExpress />\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Antlr.3.5.0.2\\lib\\Antlr3.Runtime.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"AspNet.ScriptManager.bootstrap, Version=3.4.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\AspNet.ScriptManager.bootstrap.3.4.1\\lib\\net45\\AspNet.ScriptManager.bootstrap.dll</HintPath>\n    </Reference>\n    <Reference Include=\"AspNet.ScriptManager.jQuery, Version=3.1.1.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\AspNet.ScriptManager.jQuery.3.1.1\\lib\\net45\\AspNet.ScriptManager.jQuery.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\EntityFramework.6.2.0\\lib\\net45\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\EntityFramework.6.2.0\\lib\\net45\\EntityFramework.SqlServer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.AspNet, Version=5.0.0.14073, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\linqtotwitter.5.0.0\\lib\\net461\\LinqToTwitter.AspNet.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.netstandard, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\linqtotwitter.5.0.0\\lib\\net461\\LinqToTwitter.netstandard.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\lib\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Microsoft.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.3.1.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Host.SystemWeb, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Host.SystemWeb.3.1.0\\lib\\net45\\Microsoft.Owin.Host.SystemWeb.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.3.1.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Cookies, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Cookies.3.1.0\\lib\\net45\\Microsoft.Owin.Security.Cookies.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Facebook, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Facebook.3.1.0\\lib\\net45\\Microsoft.Owin.Security.Facebook.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Google, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Google.3.1.0\\lib\\net45\\Microsoft.Owin.Security.Google.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.MicrosoftAccount, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.MicrosoftAccount.3.1.0\\lib\\net45\\Microsoft.Owin.Security.MicrosoftAccount.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.OAuth, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.OAuth.3.1.0\\lib\\net45\\Microsoft.Owin.Security.OAuth.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Twitter.3.1.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.10.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Core.3.1.1\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Interfaces.3.1.1\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Linq.3.1.1\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.PlatformServices.3.1.1\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.Helpers.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Mvc.5.2.3\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Razor.3.2.3\\lib\\net45\\System.Web.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Deployment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.WebPages.3.2.3\\lib\\net45\\System.Web.WebPages.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.ScriptManager.MSAjax\">\n      <HintPath>..\\packages\\Microsoft.AspNet.ScriptManager.MSAjax.5.0.0\\lib\\net45\\Microsoft.ScriptManager.MSAjax.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.ScriptManager.WebForms\">\n      <HintPath>..\\packages\\Microsoft.AspNet.ScriptManager.WebForms.5.0.0\\lib\\net45\\Microsoft.ScriptManager.WebForms.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Web.Optimization.1.1.3\\lib\\net40\\System.Web.Optimization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Web.Optimization.WebForms\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.AspNet.Web.Optimization.WebForms.1.1.3\\lib\\net45\\Microsoft.AspNet.Web.Optimization.WebForms.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.FriendlyUrls\">\n      <HintPath>..\\packages\\Microsoft.AspNet.FriendlyUrls.Core.1.0.2\\lib\\net45\\Microsoft.AspNet.FriendlyUrls.dll</HintPath>\n    </Reference>\n    <Reference Include=\"WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\WebGrease.1.6.0\\lib\\WebGrease.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.AspNet.Identity.Core\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.Core.2.2.1\\lib\\net45\\Microsoft.AspNet.Identity.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.Owin\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.Owin.2.2.1\\lib\\net45\\Microsoft.AspNet.Identity.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNet.Identity.EntityFramework\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Identity.EntityFramework.2.2.1\\lib\\net45\\Microsoft.AspNet.Identity.EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web.Providers\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Providers.Core.2.0.0\\lib\\net40\\System.Web.Providers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin\">\n      <HintPath>..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"About.aspx\" />\n    <Content Include=\"Account\\AddPhoneNumber.aspx\" />\n    <Content Include=\"Account\\Confirm.aspx\" />\n    <Content Include=\"Account\\Forgot.aspx\" />\n    <Content Include=\"Account\\Lockout.aspx\" />\n    <Content Include=\"Account\\Login.aspx\" />\n    <Content Include=\"Account\\Manage.aspx\" />\n    <Content Include=\"Account\\ManageLogins.aspx\" />\n    <Content Include=\"Account\\ManagePassword.aspx\" />\n    <Content Include=\"Account\\OpenAuthProviders.ascx\" />\n    <Content Include=\"Account\\Register.aspx\" />\n    <Content Include=\"Account\\RegisterExternalLogin.aspx\" />\n    <Content Include=\"Account\\ResetPassword.aspx\" />\n    <Content Include=\"Account\\ResetPasswordConfirmation.aspx\" />\n    <Content Include=\"Account\\TwoFactorAuthenticationSignIn.aspx\" />\n    <Content Include=\"Account\\VerifyPhoneNumber.aspx\" />\n    <Content Include=\"Contact.aspx\" />\n    <Content Include=\"Content\\200xColor_2.png\" />\n    <Content Include=\"Content\\bootstrap-theme.css\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css\" />\n    <Content Include=\"Content\\bootstrap.css\" />\n    <Content Include=\"Content\\bootstrap.min.css\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"Account\\Web.config\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.svg\" />\n    <Content Include=\"OAuth.aspx\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff2\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.woff\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.ttf\" />\n    <Content Include=\"fonts\\glyphicons-halflings-regular.eot\" />\n    <Content Include=\"Content\\bootstrap.min.css.map\" />\n    <Content Include=\"Content\\bootstrap.css.map\" />\n    <Content Include=\"Content\\bootstrap-theme.min.css.map\" />\n    <Content Include=\"Content\\bootstrap-theme.css.map\" />\n    <None Include=\"Scripts\\jquery-3.1.1.intellisense.js\" />\n    <Content Include=\"Scripts\\bootstrap.js\" />\n    <Content Include=\"Scripts\\bootstrap.min.js\" />\n    <Content Include=\"Scripts\\jquery-3.1.1.js\" />\n    <Content Include=\"Scripts\\jquery-3.1.1.min.js\" />\n    <Content Include=\"Scripts\\jquery-3.1.1.slim.js\" />\n    <Content Include=\"Scripts\\jquery-3.1.1.slim.min.js\" />\n    <Content Include=\"Scripts\\modernizr-2.8.3.js\" />\n    <Content Include=\"Scripts\\respond.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.js\" />\n    <Content Include=\"Scripts\\respond.matchmedia.addListener.min.js\" />\n    <Content Include=\"Scripts\\respond.min.js\" />\n    <Content Include=\"Scripts\\WebForms\\DetailsView.js\" />\n    <Content Include=\"Scripts\\WebForms\\Focus.js\" />\n    <Content Include=\"Scripts\\WebForms\\GridView.js\" />\n    <Content Include=\"Scripts\\WebForms\\Menu.js\" />\n    <Content Include=\"Scripts\\WebForms\\MenuStandards.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjax.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxApplicationServices.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxComponentModel.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxCore.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxGlobalization.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxHistory.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxNetwork.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxSerialization.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxTimer.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxWebForms.js\" />\n    <Content Include=\"Scripts\\WebForms\\MSAjax\\MicrosoftAjaxWebServices.js\" />\n    <Content Include=\"Scripts\\WebForms\\SmartNav.js\" />\n    <Content Include=\"Scripts\\WebForms\\TreeView.js\" />\n    <Content Include=\"Scripts\\WebForms\\WebForms.js\" />\n    <Content Include=\"Scripts\\WebForms\\WebParts.js\" />\n    <Content Include=\"Scripts\\WebForms\\WebUIValidation.js\" />\n    <Content Include=\"Scripts\\_references.js\" />\n    <Content Include=\"Default.aspx\" />\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Site.Master\" />\n    <Content Include=\"StatusDemos\\HomeTimelineDemo.aspx\" />\n    <Content Include=\"StatusDemos\\StatusDemos.aspx\" />\n    <Content Include=\"StatusDemos\\TweetDemo.aspx\" />\n    <Content Include=\"StatusDemos\\UploadImageDemo.aspx\" />\n    <Content Include=\"ViewSwitcher.ascx\" />\n    <Content Include=\"Web.config\">\n      <SubType>Designer</SubType>\n    </Content>\n    <Content Include=\"Bundle.config\" />\n    <Content Include=\"packages.config\" />\n    <None Include=\"Project_Readme.html\" />\n    <Content Include=\"Site.Mobile.Master\" />\n    <Content Include=\"Scripts\\jquery-3.1.1.slim.min.map\" />\n    <Content Include=\"Scripts\\jquery-3.1.1.min.map\" />\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Account\\AddPhoneNumber.aspx.cs\">\n      <DependentUpon>AddPhoneNumber.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\AddPhoneNumber.aspx.designer.cs\">\n      <DependentUpon>AddPhoneNumber.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Confirm.aspx.cs\">\n      <DependentUpon>Confirm.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Confirm.aspx.designer.cs\">\n      <DependentUpon>Confirm.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Forgot.aspx.cs\">\n      <DependentUpon>Forgot.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Forgot.aspx.designer.cs\">\n      <DependentUpon>Forgot.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Lockout.aspx.cs\">\n      <DependentUpon>Lockout.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Lockout.aspx.designer.cs\">\n      <DependentUpon>Lockout.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Login.aspx.cs\">\n      <DependentUpon>Login.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Login.aspx.designer.cs\">\n      <DependentUpon>Login.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Manage.aspx.cs\">\n      <DependentUpon>Manage.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Manage.aspx.designer.cs\">\n      <DependentUpon>Manage.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ManageLogins.aspx.cs\">\n      <DependentUpon>ManageLogins.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ManageLogins.aspx.designer.cs\">\n      <DependentUpon>ManageLogins.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ManagePassword.aspx.cs\">\n      <DependentUpon>ManagePassword.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ManagePassword.aspx.designer.cs\">\n      <DependentUpon>ManagePassword.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\OpenAuthProviders.ascx.cs\">\n      <DependentUpon>OpenAuthProviders.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\OpenAuthProviders.ascx.designer.cs\">\n      <DependentUpon>OpenAuthProviders.ascx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\Register.aspx.cs\">\n      <DependentUpon>Register.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\Register.aspx.designer.cs\">\n      <DependentUpon>Register.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\RegisterExternalLogin.aspx.cs\">\n      <DependentUpon>RegisterExternalLogin.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\RegisterExternalLogin.aspx.designer.cs\">\n      <DependentUpon>RegisterExternalLogin.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ResetPassword.aspx.cs\">\n      <DependentUpon>ResetPassword.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ResetPassword.aspx.designer.cs\">\n      <DependentUpon>ResetPassword.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\ResetPasswordConfirmation.aspx.cs\">\n      <DependentUpon>ResetPasswordConfirmation.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\ResetPasswordConfirmation.aspx.designer.cs\">\n      <DependentUpon>ResetPasswordConfirmation.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\TwoFactorAuthenticationSignIn.aspx.cs\">\n      <DependentUpon>TwoFactorAuthenticationSignIn.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\TwoFactorAuthenticationSignIn.aspx.designer.cs\">\n      <DependentUpon>TwoFactorAuthenticationSignIn.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Account\\VerifyPhoneNumber.aspx.cs\">\n      <DependentUpon>VerifyPhoneNumber.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Account\\VerifyPhoneNumber.aspx.designer.cs\">\n      <DependentUpon>VerifyPhoneNumber.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"App_Start\\BundleConfig.cs\" />\n    <Compile Include=\"About.aspx.cs\">\n      <DependentUpon>About.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"About.aspx.designer.cs\">\n      <DependentUpon>About.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"App_Start\\IdentityConfig.cs\" />\n    <Compile Include=\"App_Start\\RouteConfig.cs\" />\n    <Compile Include=\"App_Start\\Startup.Auth.cs\" />\n    <Compile Include=\"Contact.aspx.cs\">\n      <DependentUpon>Contact.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Contact.aspx.designer.cs\">\n      <DependentUpon>Contact.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Default.aspx.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Default.aspx.designer.cs\">\n      <DependentUpon>Default.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Models\\IdentityModels.cs\" />\n    <Compile Include=\"OAuth.aspx.cs\">\n      <DependentUpon>OAuth.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"OAuth.aspx.designer.cs\">\n      <DependentUpon>OAuth.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Site.Master.cs\">\n      <DependentUpon>Site.Master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Site.Master.designer.cs\">\n      <DependentUpon>Site.Master</DependentUpon>\n    </Compile>\n    <Compile Include=\"Site.Mobile.Master.cs\">\n      <DependentUpon>Site.Mobile.Master</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"Site.Mobile.Master.designer.cs\">\n      <DependentUpon>Site.Mobile.Master</DependentUpon>\n    </Compile>\n    <Compile Include=\"Startup.cs\" />\n    <Compile Include=\"StatusDemos\\HomeTimelineDemo.aspx.cs\">\n      <DependentUpon>HomeTimelineDemo.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\HomeTimelineDemo.aspx.designer.cs\">\n      <DependentUpon>HomeTimelineDemo.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\StatusDemos.aspx.cs\">\n      <DependentUpon>StatusDemos.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\StatusDemos.aspx.designer.cs\">\n      <DependentUpon>StatusDemos.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\TweetDemo.aspx.cs\">\n      <DependentUpon>TweetDemo.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\TweetDemo.aspx.designer.cs\">\n      <DependentUpon>TweetDemo.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"StatusDemos\\UploadImageDemo.aspx.cs\">\n      <DependentUpon>UploadImageDemo.aspx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"StatusDemos\\UploadImageDemo.aspx.designer.cs\">\n      <DependentUpon>UploadImageDemo.aspx</DependentUpon>\n    </Compile>\n    <Compile Include=\"ViewSwitcher.ascx.cs\">\n      <DependentUpon>ViewSwitcher.ascx</DependentUpon>\n      <SubType>ASPXCodeBehind</SubType>\n    </Compile>\n    <Compile Include=\"ViewSwitcher.ascx.designer.cs\">\n      <DependentUpon>ViewSwitcher.ascx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\\" />\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>26310</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:17008/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\\build\\net45\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))\" />\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Net.Compilers.2.6.1\\build\\Microsoft.Net.Compilers.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.Net.Compilers.2.6.1\\build\\Microsoft.Net.Compilers.props'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter5/net46/CSharp/AspNetSamples/WebFormsDemo/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Antlr\" version=\"3.5.0.2\" targetFramework=\"net452\" />\n  <package id=\"AspNet.ScriptManager.bootstrap\" version=\"3.4.1\" targetFramework=\"net48\" />\n  <package id=\"AspNet.ScriptManager.jQuery\" version=\"3.1.1\" targetFramework=\"net452\" />\n  <package id=\"bootstrap\" version=\"3.4.1\" targetFramework=\"net48\" />\n  <package id=\"EntityFramework\" version=\"6.2.0\" targetFramework=\"net461\" />\n  <package id=\"jQuery\" version=\"3.5.0\" targetFramework=\"net452\" />\n  <package id=\"linqtotwitter\" version=\"5.0.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.FriendlyUrls\" version=\"1.0.2\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.FriendlyUrls.Core\" version=\"1.0.2\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Identity.Core\" version=\"2.2.1\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Identity.EntityFramework\" version=\"2.2.1\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Identity.Owin\" version=\"2.2.4\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.3\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Providers.Core\" version=\"2.0.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.3\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.ScriptManager.MSAjax\" version=\"5.0.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.ScriptManager.WebForms\" version=\"5.0.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization\" version=\"1.1.3\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.Web.Optimization.WebForms\" version=\"1.1.3\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.3\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.CodeDom.Providers.DotNetCompilerPlatform\" version=\"1.0.8\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Net.Compilers\" version=\"2.6.1\" targetFramework=\"net461\" developmentDependency=\"true\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Host.SystemWeb\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security.Cookies\" version=\"4.2.2\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security.Facebook\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security.Google\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security.MicrosoftAccount\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security.OAuth\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"3.1.0\" targetFramework=\"net452\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net452\" />\n  <package id=\"Modernizr\" version=\"2.8.3\" targetFramework=\"net452\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net452\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net452\" />\n  <package id=\"Respond\" version=\"1.4.2\" targetFramework=\"net452\" />\n  <package id=\"System.Reactive.Core\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.Interfaces\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.Linq\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive.PlatformServices\" version=\"3.1.1\" targetFramework=\"net461\" />\n  <package id=\"WebGrease\" version=\"1.6.0\" targetFramework=\"net452\" />\n</packages>"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/AspNetSamples.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.29926.136\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"CoreDemo\", \"CoreDemo\\CoreDemo.csproj\", \"{589AD110-3424-48E3-88EA-5E39BF1141B0}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MvcDemo\", \"MvcDemo\\MvcDemo.csproj\", \"{80E20BC0-3F39-4DB8-AB7A-571DEC8DC875}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"BlazorDemo\", \"BlazorDemo\\BlazorDemo.csproj\", \"{32C830C6-5275-4E9E-AAFA-9AD26E57FC20}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{589AD110-3424-48E3-88EA-5E39BF1141B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{589AD110-3424-48E3-88EA-5E39BF1141B0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{589AD110-3424-48E3-88EA-5E39BF1141B0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{589AD110-3424-48E3-88EA-5E39BF1141B0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{80E20BC0-3F39-4DB8-AB7A-571DEC8DC875}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{80E20BC0-3F39-4DB8-AB7A-571DEC8DC875}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{80E20BC0-3F39-4DB8-AB7A-571DEC8DC875}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{80E20BC0-3F39-4DB8-AB7A-571DEC8DC875}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{32C830C6-5275-4E9E-AAFA-9AD26E57FC20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{32C830C6-5275-4E9E-AAFA-9AD26E57FC20}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{32C830C6-5275-4E9E-AAFA-9AD26E57FC20}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{32C830C6-5275-4E9E-AAFA-9AD26E57FC20}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {8990DDB9-08DF-40E4-9AE4-A5F4830B15F5}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/App.razor",
    "content": "﻿\n<Router AppAssembly=\"@typeof(Program).Assembly\">\n    <Found Context=\"routeData\">\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\n    </Found>\n    <NotFound>\n        <LayoutView Layout=\"@typeof(MainLayout)\">\n            <p>Sorry, there's nothing at this address.</p>\n        </LayoutView>\n    </NotFound>\n</Router>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/BlazorDemo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Blazored.SessionStorage\" Version=\"1.0.12\" />\n    <PackageReference Include=\"linqtotwitter\" Version=\"5.1.2\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Http\" Version=\"2.2.2\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Session\" Version=\"2.2.0\" />\n    <PackageReference Include=\"System.Text.Json\" Version=\"8.0.4\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Classes/Extensions.cs",
    "content": "﻿using Microsoft.AspNetCore.Components;\nusing Microsoft.AspNetCore.WebUtilities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace BlazorDemo.Classes\n{\n    // From: Working with Query Strings in Blazor\n    // https://chrissainty.com/working-with-query-strings-in-blazor/\n    public static class NavigationManagerExtensions\n    {\n        public static bool TryGetQueryString<T>(this NavigationManager navManager, string key, out T value)\n        {\n            var uri = navManager.ToAbsoluteUri(navManager.Uri);\n\n            if (QueryHelpers.ParseQuery(uri.Query).TryGetValue(key, out var valueFromQueryString))\n            {\n                if (typeof(T) == typeof(int) && int.TryParse(valueFromQueryString, out var valueAsInt))\n                {\n                    value = (T)(object)valueAsInt;\n                    return true;\n                }\n\n                if (typeof(T) == typeof(string))\n                {\n                    value = (T)(object)valueFromQueryString.ToString();\n                    return true;\n                }\n\n                if (typeof(T) == typeof(decimal) && decimal.TryParse(valueFromQueryString, out var valueAsDecimal))\n                {\n                    value = (T)(object)valueAsDecimal;\n                    return true;\n                }\n            }\n\n            value = default;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Models/SendTweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BlazorDemo.Models\n{\n    public class SendTweetViewModel\n    {\n        [DisplayName(\"Tweet Text:\")]\n        [Required]\n        [DataType(DataType.MultilineText)]\n        public string Text { get; set; }\n\n\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Models/TweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BlazorDemo.Models\n{\n    public class TweetViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string ImageUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string ScreenName { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Pages/Error.razor",
    "content": "﻿@page \"/error\"\n\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n<h3>Development Mode</h3>\n<p>\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\n</p>\n<p>\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\n    It can result in displaying sensitive information from exceptions to end users.\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\n    and restarting the app.\n</p>"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Pages/Index.razor",
    "content": "﻿@page \"/\"\n@implements IDisposable\n@using LinqToTwitter\n@using BlazorDemo.Models\n@using System.Text.RegularExpressions\n@inject BlazorDemo.Services.BlazorAuthorizer BlazorAuthorizer\n\n<TwitterApplicationAuth />\n\n@if (BlazorAuthorizer.CredentialStore != null)\n{\n    <h4>Tweets for @BlazorAuthorizer.CredentialStore.ScreenName</h4>\n\n    <button class=\"btn btn-primary\" @onclick=\"GetTweets\">Get Tweets</button>\n    <button class=\"btn btn-primary\" @onclick=\"OpenPopup\">Send Tweet</button>\n    <br />\n    <br />\n    @foreach (var tweet in tweets)\n    {\n        <dl>\n            <dt><img src=\"@tweet.ImageUrl\" /> @@<a href=@(\"https://twitter.com/\"+@tweet.ScreenName) target=\"_blank\">@tweet.ScreenName</a></dt>\n            <dd>@((MarkupString)tweet.Text)</dd>\n        </dl>\n    }\n\n    @if (ShowPopup)\n    {\n        <div class=\"modal\" tabindex=\"-1\" style=\"display:block\" role=\"dialog\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h3 class=\"modal-title\">Send Tweet</h3>\n                        <!-- Button to close the popup -->\n                        <button type=\"button\" class=\"close\"\n                                @onclick=\"ClosePopup\">\n                            <span aria-hidden=\"true\">X</span>\n                        </button>\n                    </div>\n                    <div class=\"modal-body\">\n                        <input class=\"form-control\" type=\"text\"\n                               placeholder=\"Compose a Tweet...\"\n                               @bind=\"NewTweet\" />\n                        <br /><br />\n                        <button class=\"btn btn-primary\"\n                                @onclick=\"SendTweet\">\n                            Save\n                        </button>\n                        <br />\n                    </div>\n                </div>\n            </div>\n        </div>\n    }\n}\n\n@code {\n    public List<TweetViewModel> tweets = new List<TweetViewModel>();\n    bool ShowPopup = false;\n    string NewTweet = \"\";\n\n    protected override void OnInitialized()\n    {\n        // Subscribe to the StateChanged EventHandler\n        BlazorAuthorizer.StateChanged += OnBlazorAuthorizerStateChanged;\n    }\n\n    // This method is fired when the BlazorAuthorizer object\n    // invokes its StateHasChanged() method\n    // This will cause this control to invoke its own\n    // StateHasChanged() method\n    void OnBlazorAuthorizerStateChanged(object sender, EventArgs e)\n    {\n        StateHasChanged();\n    }\n\n    void IDisposable.Dispose()\n    {\n        // When this control is disposed of\n        // unsubscribe from the StateChanged EventHandler\n        BlazorAuthorizer.StateChanged -= OnBlazorAuthorizerStateChanged;\n    }\n\n    void OpenPopup()\n    {\n        NewTweet = \"\";\n        // Open the Popup\n        ShowPopup = true;\n    }\n\n    void ClosePopup()\n    {\n        // Close the Popup\n        ShowPopup = false;\n    }\n\n    async Task GetTweets()\n    {\n        var ctx = new TwitterContext(BlazorAuthorizer);\n\n        tweets = await (from tweet in ctx.Status\n                        where tweet.Type == StatusType.Home &&\n                              tweet.TweetMode == TweetMode.Extended\n                        select new TweetViewModel\n                        {\n                            ImageUrl = tweet.User.ProfileImageUrl,\n                            ScreenName = tweet.User.ScreenNameResponse,\n                            Text = CreateActiveLinks(tweet.FullText)\n                        }).ToListAsync();\n    }\n\n    async Task SendTweet()\n    {\n        var ctx = new TwitterContext(BlazorAuthorizer);\n\n        Status responseTweet = await ctx.TweetAsync(NewTweet);\n\n        await GetTweets();\n\n        ClosePopup();\n    }\n\n    // Utility\n\n    /// <summary>\n    /// From: https://www.mikesdotnetting.com/article/140/converting-urls-into-links-with-regex\n    /// Finds web and email addresses in a string and surrounds then with the appropriate HTML anchor tags \n    /// </summary>\n    /// <param name=\"s\"></param>\n    /// <returns>String</returns>\n    public string CreateActiveLinks(string s)\n    {\n        //Finds URLs with no protocol\n        var urlregex = new Regex(@\"\\b\\({0,1}(?<url>(www|ftp)\\.[^ ,\"\"\\s<)]*)\\b\",\n          RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        //Finds URLs with a protocol\n        var httpurlregex = new Regex(@\"\\b\\({0,1}(?<url>[^>](http://www\\.|http://|https://|ftp://)[^,\"\"\\s<)]*)\\b\",\n          RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        //Finds email addresses\n        var emailregex = new Regex(@\"\\b(?<mail>[a-zA-Z_0-9.-]+\\@[a-zA-Z_0-9.-]+\\.\\w+)\\b\",\n          RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        s = urlregex.Replace(s, \" <a href=\\\"http://${url}\\\" target=\\\"_blank\\\">${url}</a>\");\n        s = httpurlregex.Replace(s, \" <a href=\\\"${url}\\\" target=\\\"_blank\\\">${url}</a>\");\n        s = emailregex.Replace(s, \"<a href=\\\"mailto:${mail}\\\">${mail}</a>\");\n        return s;\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Pages/TwitterApplicationAuth.razor",
    "content": "﻿@using System.Net.Http\n@using Microsoft.AspNetCore.Mvc\n@using BlazorDemo.Classes\n@using LinqToTwitter\n@inject HttpClient Http\n@inject NavigationManager NavigationManager\n@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor\n@inject BlazorDemo.Services.BlazorAuthorizer BlazorAuthorizer\n@inject Blazored.SessionStorage.ISessionStorageService sessionStorage\n\n@if (Authenticated == \"false\")\n{\n    <button class=\"btn btn-primary\" @onclick=\"CallAuth\">Begin the Authorization Process</button>\n}\n\n@code {\n    string Authenticated = \"none\";\n\n    protected override async Task OnAfterRenderAsync(bool firstRender)\n    {\n        if (firstRender)\n        {\n            // Try to get the CredentialStore that would have been stored when the CallAuth() method was called\n            var CredentialStore = await sessionStorage.GetItemAsync<InMemoryCredentialStore>(\"CredentialStore\");\n\n            if (CredentialStore == null)\n            {\n                Authenticated = \"false\";\n                StateHasChanged();\n                return;\n            }\n\n            // Check to see if we have received the oauth_token and oauth_verifier\n            // from Twitter\n\n            string oauth_token = \"\";\n            NavigationManager.TryGetQueryString<string>(\"oauth_token\", out oauth_token);\n\n            string oauth_verifier = \"\";\n            NavigationManager.TryGetQueryString<string>(\"oauth_verifier\", out oauth_verifier);\n\n            if (oauth_token != null)\n            {\n                // Set CredentialStore because the contents were lost when the user was directed\n                // to Twitter to authorize this application\n                BlazorAuthorizer.CredentialStore = CredentialStore;\n\n                var responseUrl =\n                    $@\"{BlazorAuthorizer.GetPathBase()}?oauth_token={oauth_token}&oauth_verifier={oauth_verifier}\";\n\n                await BlazorAuthorizer.CompleteAuthorizeAsync(new Uri(responseUrl));\n\n                // Call StateHasChanged on BlazorAuthorizer to\n                // notify any other subscribed components\n                BlazorAuthorizer.StateHasChanged();\n\n                // This is how you access credentials after authorization.\n                // The oauthToken and oauthTokenSecret do not expire.\n                // You can use the userID to associate the credentials with the user.\n                // You can save credentials any way you want - database,\n                //   isolated storage, etc. - it's up to you.\n                // You can retrieve and load all 4 credentials on subsequent\n                //   queries to avoid the need to re-authorize.\n                // When you've loaded all 4 credentials, LINQ to Twitter will let\n                //   you make queries without re-authorizing.\n                //\n                //var credentials = BlazorAuthorizer.CredentialStore;\n                //string oauthToken = credentials.OAuthToken;\n                //string oauthTokenSecret = credentials.OAuthTokenSecret;\n                //string screenName = credentials.ScreenName;\n                //ulong userID = credentials.UserID;\n\n                // Save the updated CredentialStore\n                // await sessionStorage.SetItemAsync(\"CredentialStore\", BlazorAuthorizer.CredentialStore);\n\n                Authenticated = \"true\";\n\n                // Navigate to the main page so that the auth code in the url will go away\n                NavigationManager.NavigateTo(\"/\");\n            }\n        }\n    }\n\n    async Task CallAuth()\n    {\n        // Begin Twitter Authorization\n        RedirectResult result = (RedirectResult)await BlazorAuthorizer.Begin();\n\n        // Save CredentialStore\n        // CredentialStore was populated by calling BlazorAuthorizer.Begin()\n        await sessionStorage.SetItemAsync(\"CredentialStore\", BlazorAuthorizer.CredentialStore);\n\n        // Navigate to Twitter to authorize this application\n        NavigationManager.NavigateTo(result.Url, true);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Pages/_Host.cshtml",
    "content": "﻿@page \"/\"\n@namespace BlazorDemo.Pages\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n@{\n    Layout = null;\n}\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>BlazorDemo</title>\n    <base href=\"~/\" />\n    <link rel=\"stylesheet\" href=\"css/bootstrap/bootstrap.min.css\" />\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\n</head>\n<body>\n    <app>\n        <component type=\"typeof(App)\" render-mode=\"ServerPrerendered\" />\n    </app>\n\n    <div id=\"blazor-error-ui\">\n        <environment include=\"Staging,Production\">\n            An error has occurred. This application may no longer respond until reloaded.\n        </environment>\n        <environment include=\"Development\">\n            An unhandled exception has occurred. See browser dev tools for details.\n        </environment>\n        <a href=\"\" class=\"reload\">Reload</a>\n        <a class=\"dismiss\">🗙</a>\n    </div>\n\n    <script src=\"_framework/blazor.server.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Program.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\n\nnamespace BlazorDemo\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateHostBuilder(args).Build().Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:63842\",\n      \"sslPort\": 44379\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"BlazorDemo\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Services/BlazorAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\nusing LinqToTwitter;\nusing Microsoft.AspNetCore.Http;\n\nnamespace BlazorDemo.Services\n{\n    public class BlazorAuthorizer : AspNetAuthorizer\n    {\n        public HttpClient _httpClient;\n        HttpContextAccessor _httpContextAccessor;\n        private string _authUrl;\n\n        public BlazorAuthorizer(\n            HttpClient client, \n            HttpContextAccessor HttpContextAccessor\n            )\n        {\n            _httpClient = client;\n            _httpContextAccessor = HttpContextAccessor;\n        }\n\n        // StateChanged is an event handler other pages\n        // can subscribe to \n        public event EventHandler StateChanged;\n        public void StateHasChanged()\n        {\n            // This will update any subscribers\n            // that the state has changed\n            // so they can update themselves\n            StateChanged?.Invoke(this, EventArgs.Empty);\n        }\n\n        public string GetPathBase()\n        {\n            var request = _httpContextAccessor.HttpContext.Request;\n            var host = request.Host.ToUriComponent();\n            var pathBase = request.PathBase.ToUriComponent();\n            return $@\"{request.Scheme}://{host}{pathBase}/\";\n        }\n\n        public async Task<ActionResult> Begin()\n        {\n            this.CredentialStore = new InMemoryCredentialStore();\n            this.CredentialStore.ConsumerKey = Environment.GetEnvironmentVariable(\"TwitterConsumerKey\");\n            this.CredentialStore.ConsumerSecret = Environment.GetEnvironmentVariable(\"TwitterConsumerSecret\");\n\n            // to pass parameters that you can read in Complete(), via Request.QueryString, when Twitter returns\n            // var parameters = new Dictionary<string, string> { { \"my_custom_param\", \"val\" } };\n            // return await BeginAuthorizationAsync(new Uri(GetPathBase()), parameters);\n\n            return (RedirectResult)await BeginAuthorizationAsync(new Uri(GetPathBase()));\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(\n            Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { _authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback, parameters).ConfigureAwait(false);\n\n            return new RedirectResult(_authUrl,false);\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Shared/MainLayout.razor",
    "content": "﻿@inherits LayoutComponentBase\n\n<div class=\"sidebar\">\n    <NavMenu />\n</div>\n\n<div class=\"main\">\n    <div class=\"top-row px-4\">\n        <a href=\"https://github.com/JoeMayo/LinqToTwitter\" target=\"_blank\">About LinqToTwitter</a>\n    </div>\n\n    <div class=\"content px-4\">\n        @Body\n    </div>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Shared/NavMenu.razor",
    "content": "﻿<div class=\"top-row pl-4 navbar navbar-dark\">\n    <a class=\"navbar-brand\" href=\"\">BlazorDemo</a>\n    <button class=\"navbar-toggler\" @onclick=\"ToggleNavMenu\">\n        <span class=\"navbar-toggler-icon\"></span>\n    </button>\n</div>\n\n<div class=\"@NavMenuCssClass\" @onclick=\"ToggleNavMenu\">\n    <ul class=\"nav flex-column\">\n        <li class=\"nav-item px-3\">\n            <NavLink class=\"nav-link\" href=\"\" Match=\"NavLinkMatch.All\">\n                <span class=\"oi oi-home\" aria-hidden=\"true\"></span> Home\n            </NavLink>\n        </li>\n    </ul>\n</div>\n\n@code {\n    private bool collapseNavMenu = true;\n\n    private string NavMenuCssClass => collapseNavMenu ? \"collapse\" : null;\n\n    private void ToggleNavMenu()\n    {\n        collapseNavMenu = !collapseNavMenu;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/Startup.cs",
    "content": "using System.Net.Http;\nusing BlazorDemo.Services;\nusing Blazored.SessionStorage;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace BlazorDemo\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddRazorPages();\n            services.AddServerSideBlazor();\n\n            // Add HttpContextAccessor and HttpClient\n            services.AddHttpContextAccessor();\n            services.AddScoped<HttpContextAccessor>();\n            services.AddHttpClient();\n            services.AddScoped<HttpClient>();\n\n            // Add BlazorAuthorizer as a service\n            services.AddScoped<BlazorAuthorizer>();\n\n            // Add BlazoredSessionStorage\n            services.AddBlazoredSessionStorage(config => \n            config.JsonSerializerOptions.WriteIndented = true);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            else\n            {\n                app.UseExceptionHandler(\"/Error\");\n                // The default HSTS value is 30 days. \n                // You may want to change this for production scenarios, \n                // see https://aka.ms/aspnetcore-hsts.\n                app.UseHsts();\n            }\n\n            app.UseHttpsRedirection();\n            app.UseStaticFiles();\n\n            app.UseRouting();\n\n            app.UseEndpoints(endpoints =>\n            {\n                endpoints.MapBlazorHub();\n                endpoints.MapFallbackToPage(\"/_Host\");\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/_Imports.razor",
    "content": "﻿@using System.Net.Http\n@using Microsoft.AspNetCore.Authorization\n@using Microsoft.AspNetCore.Components.Authorization\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Routing\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.JSInterop\n@using BlazorDemo\n@using BlazorDemo.Shared\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/appsettings.Development.json",
    "content": "{\n  \"DetailedErrors\": true,\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/wwwroot/css/open-iconic/FONT-LICENSE",
    "content": "SIL OPEN FONT LICENSE Version 1.1\n\nCopyright (c) 2014 Waybury\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/wwwroot/css/open-iconic/ICON-LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Waybury\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/wwwroot/css/open-iconic/README.md",
    "content": "[Open Iconic v1.1.1](http://useiconic.com/open)\n===========\n\n### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint&mdash;ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)\n\n\n\n## What's in Open Iconic?\n\n* 223 icons designed to be legible down to 8 pixels\n* Super-light SVG files - 61.8 for the entire set \n* SVG sprite&mdash;the modern replacement for icon fonts\n* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats\n* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats\n* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.\n\n\n## Getting Started\n\n#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.\n\n### General Usage\n\n#### Using Open Iconic's SVGs\n\nWe like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).\n\n```\n<img src=\"/open-iconic/svg/icon-name.svg\" alt=\"icon name\">\n```\n\n#### Using Open Iconic's SVG Sprite\n\nOpen Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.\n\nAdding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `<svg>` *tag and a unique class name for each different icon in the* `<use>` *tag.*  \n\n```\n<svg class=\"icon\">\n  <use xlink:href=\"open-iconic.svg#account-login\" class=\"icon-account-login\"></use>\n</svg>\n```\n\nSizing icons only needs basic CSS. All the icons are in a square format, so just set the `<svg>` tag with equal width and height dimensions.\n\n```\n.icon {\n  width: 16px;\n  height: 16px;\n}\n```\n\nColoring icons is even easier. All you need to do is set the `fill` rule on the `<use>` tag.\n\n```\n.icon-account-login {\n  fill: #f00;\n}\n```\n\nTo learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).\n\n#### Using Open Iconic's Icon Font...\n\n\n##### …with Bootstrap\n\nYou can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`\n\n\n```\n<link href=\"/open-iconic/font/css/open-iconic-bootstrap.css\" rel=\"stylesheet\">\n```\n\n\n```\n<span class=\"oi oi-icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\n```\n\n##### …with Foundation\n\nYou can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`\n\n```\n<link href=\"/open-iconic/font/css/open-iconic-foundation.css\" rel=\"stylesheet\">\n```\n\n\n```\n<span class=\"fi-icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\n```\n\n##### …on its own\n\nYou can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`\n\n```\n<link href=\"/open-iconic/font/css/open-iconic.css\" rel=\"stylesheet\">\n```\n\n```\n<span class=\"oi\" data-glyph=\"icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\n```\n\n\n## License\n\n### Icons\n\nAll code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).\n\n### Fonts\n\nAll fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/BlazorDemo/wwwroot/css/site.css",
    "content": "@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');\n\nhtml, body {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\na, .btn-link {\n    color: #0366d6;\n}\n\n.btn-primary {\n    color: #fff;\n    background-color: #1b6ec2;\n    border-color: #1861ac;\n}\n\napp {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\n.top-row {\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n}\n\n.main {\n    flex: 1;\n}\n\n    .main .top-row {\n        background-color: #f7f7f7;\n        border-bottom: 1px solid #d6d5d5;\n        justify-content: flex-end;\n    }\n\n        .main .top-row > a, .main .top-row .btn-link {\n            white-space: nowrap;\n            margin-left: 1.5rem;\n        }\n\n.main .top-row a:first-child {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.sidebar {\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\n}\n\n    .sidebar .top-row {\n        background-color: rgba(0,0,0,0.4);\n    }\n\n    .sidebar .navbar-brand {\n        font-size: 1.1rem;\n    }\n\n    .sidebar .oi {\n        width: 2rem;\n        font-size: 1.1rem;\n        vertical-align: text-top;\n        top: -2px;\n    }\n\n    .sidebar .nav-item {\n        font-size: 0.9rem;\n        padding-bottom: 0.5rem;\n    }\n\n        .sidebar .nav-item:first-of-type {\n            padding-top: 1rem;\n        }\n\n        .sidebar .nav-item:last-of-type {\n            padding-bottom: 1rem;\n        }\n\n        .sidebar .nav-item a {\n            color: #d7d7d7;\n            border-radius: 4px;\n            height: 3rem;\n            display: flex;\n            align-items: center;\n            line-height: 3rem;\n        }\n\n            .sidebar .nav-item a.active {\n                background-color: rgba(255,255,255,0.25);\n                color: white;\n            }\n\n            .sidebar .nav-item a:hover {\n                background-color: rgba(255,255,255,0.1);\n                color: white;\n            }\n\n.content {\n    padding-top: 1.1rem;\n}\n\n.navbar-toggler {\n    background-color: rgba(255, 255, 255, 0.1);\n}\n\n.valid.modified:not([type=checkbox]) {\n    outline: 1px solid #26b050;\n}\n\n.invalid {\n    outline: 1px solid red;\n}\n\n.validation-message {\n    color: red;\n}\n\n#blazor-error-ui {\n    background: lightyellow;\n    bottom: 0;\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\n    display: none;\n    left: 0;\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\n    position: fixed;\n    width: 100%;\n    z-index: 1000;\n}\n\n#blazor-error-ui .dismiss {\n    cursor: pointer;\n    position: absolute;\n    right: 0.75rem;\n    top: 0.5rem;\n}\n\n@media (max-width: 767.98px) {\n    .main .top-row:not(.auth) {\n        display: none;\n    }\n\n    .main .top-row.auth {\n        justify-content: space-between;\n    }\n\n    .main .top-row a, .main .top-row .btn-link {\n        margin-left: 0;\n    }\n}\n\n@media (min-width: 768px) {\n    app {\n        flex-direction: row;\n    }\n\n    .sidebar {\n        width: 250px;\n        height: 100vh;\n        position: sticky;\n        top: 0;\n    }\n\n    .main .top-row {\n        position: sticky;\n        top: 0;\n    }\n\n    .main > div {\n        padding-left: 2rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .navbar-toggler {\n        display: none;\n    }\n\n    .sidebar .collapse {\n        /* Never collapse the sidebar for wide screens */\n        display: block;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Controllers/HomeController.cs",
    "content": "﻿using System.Diagnostics;\nusing Microsoft.AspNetCore.Mvc;\nusing CoreDemo.Models;\nusing LinqToTwitter;\n\nnamespace CoreDemo.Controllers\n{\n    public class HomeController : Controller\n    {\n        public IActionResult Index()\n        {\n            if (!new SessionStateCredentialStore(HttpContext.Session).HasAllCredentials())\n                return RedirectToAction(\"Index\", \"OAuth\");\n\n            return View();\n        }\n\n        public IActionResult About()\n        {\n            ViewData[\"Message\"] = \"Your application description page.\";\n\n            return View();\n        }\n\n        public IActionResult Contact()\n        {\n            ViewData[\"Message\"] = \"Your contact page.\";\n\n            return View();\n        }\n\n        public IActionResult Error()\n        {\n            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Controllers/OAuthController.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing Microsoft.AspNetCore.Http.Extensions;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\n\nnamespace CoreDemo.Controllers\n{\n    public class OAuthController : Controller\n    {\n        readonly IConfiguration configuration;\n\n        public OAuthController(IConfiguration configuration)\n        {\n            this.configuration = configuration;\n        }\n\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public async Task<ActionResult> Begin()\n        {\n            //var auth = new MvcSignInAuthorizer\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(\"TwitterConsumerKey\"),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(\"TwitterConsumerSecret\")\n                }\n            };\n\n            // to pass parameters that you can read in Complete(), via Request.QueryString, when Twitter returns\n            //var parameters = new Dictionary<string, string> { { \"my_custom_param\", \"val\" } };\n            //string twitterCallbackUrl = Request.GetDisplayUrl().Replace(\"Begin\", \"Complete\");\n            //return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl), parameters);\n\n            string twitterCallbackUrl = Request.GetDisplayUrl().Replace(\"Begin\", \"Complete\");\n            return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl));\n        }\n\n        public async Task<ActionResult> Complete()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n            };\n\n            await auth.CompleteAuthorizeAsync(new Uri(Request.GetDisplayUrl()));\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, \n            //   isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent \n            //   queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let \n            //   you make queries without re-authorizing.\n            //\n            //var credentials = auth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Controllers/StatusDemosController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing CoreDemo.Models;\nusing LinqToTwitter;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace CoreDemo.Controllers\n{\n    public class StatusDemosController : Controller\n    {\n        readonly IWebHostEnvironment env;\n\n        public StatusDemosController(IWebHostEnvironment env)\n        {\n            this.env = env;\n        }\n\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public ActionResult Tweet()\n        {\n            var sendTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing LINQ to Twitter in ASP.NET Core - \" + DateTime.Now.ToString()\n            };\n\n            return View(sendTweetVM);\n        }\n\n        [HttpPost]\n        [ActionName(\"Tweet\")]\n        public async Task<ActionResult> TweetAsync(SendTweetViewModel tweet)\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            Status responseTweet = await ctx.TweetAsync(tweet.Text);\n\n            var responseTweetVM = new SendTweetViewModel\n            {\n                Text = tweet.Text,\n                Response = \"Tweet successful! Response from Twitter: \" + responseTweet.Text\n            };\n\n            return View(responseTweetVM);\n        }\n\n        [ActionName(\"HomeTimeline\")]\n        public async Task<ActionResult> HomeTimelineAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            var tweets =\n                await\n                (from tweet in ctx.Status\n                 where tweet.Type == StatusType.Home &&\n                       tweet.TweetMode == TweetMode.Extended\n                 select new TweetViewModel\n                 {\n                     ImageUrl = tweet.User.ProfileImageUrl,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     Text = tweet.FullText\n                 })\n                .ToListAsync();\n\n            return View(tweets);\n        }\n\n        [ActionName(\"UploadImage\")]\n        public async Task<ActionResult> UploadImageAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n            };\n\n            var twitterCtx = new TwitterContext(auth);\n\n            string status = $\"Testing multi-image tweet #Linq2Twitter £ {DateTime.Now}\";\n            string mediaCategory = \"tweet_image\";\n\n            string path = Path.Combine(env.WebRootPath, \"images\\\\200xColor_2.png\");\n            var imageUploadTasks =\n                new List<Task<Media>>\n                {\n                    twitterCtx.UploadMediaAsync(System.IO.File.ReadAllBytes(path), \"image/jpg\", mediaCategory),\n                };\n\n            await Task.WhenAll(imageUploadTasks);\n\n            List<ulong> mediaIds =\n                (from tsk in imageUploadTasks\n                 select tsk.Result.MediaID)\n                .ToList();\n\n            Status tweet = await twitterCtx.TweetAsync(status, mediaIds);\n\n            return View(\n                new TweetViewModel\n                {\n                    ImageUrl = tweet.User.ProfileImageUrl,\n                    ScreenName = tweet.User.ScreenNameResponse,\n                    Text = tweet.Text\n                });\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/CoreDemo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"linqtotwitter\" Version=\"5.1.3\" />\n    <PackageReference Include=\"Microsoft.VisualStudio.Web.CodeGeneration.Design\" Version=\"3.1.2\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Models/ErrorViewModel.cs",
    "content": "using System;\n\nnamespace CoreDemo.Models\n{\n    public class ErrorViewModel\n    {\n        public string RequestId { get; set; }\n\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Models/SendTweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace CoreDemo.Models\n{\n    public class SendTweetViewModel\n    {\n        [DisplayName(\"Tweet Text:\")]\n        [Required]\n        [DataType(DataType.MultilineText)]\n        public string Text { get; set; }\n\n\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Models/TweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace CoreDemo.Models\n{\n    public class TweetViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string ImageUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string ScreenName { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Program.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\n\nnamespace CoreDemo\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateHostBuilder(args).Build().Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Properties/launchSettings.json",
    "content": "﻿{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61471\",\n      \"sslPort\": 44301\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"CoreDemo\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Startup.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.HttpsPolicy;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace CoreDemo\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddControllersWithViews();\n\n            services.AddMvc().AddSessionStateTempDataProvider();\n            services.AddSession();\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            else\n            {\n                app.UseExceptionHandler(\"/Home/Error\");\n                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\n                app.UseHsts();\n            }\n            app.UseHttpsRedirection();\n            app.UseStaticFiles();\n\n            app.UseRouting();\n\n            app.UseAuthorization();\n            app.UseSession();\n            app.UseEndpoints(endpoints =>\n            {\n                endpoints.MapControllerRoute(\n                    name: \"default\",\n                    pattern: \"{controller=Home}/{action=Index}/{id?}\");\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/Home/Index.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Home Page\";\n}\n\n<div class=\"jumbotron\">\n    <h1>LINQ to Twitter</h1>\n    <p class=\"lead\">LINQ to Twitter is an open-source 3rd party library for working with the Twitter API. Please select a menu item to view demos for how LINQ to Twitter supports each category of the Twitter API.</p>\n    <p><a href=\"https://github.com/JoeMayo/LinqToTwitter\" class=\"btn btn-primary btn-large\">Learn more &raquo;</a></p>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>Getting started</h2>\n        <p>\n            LINQ to Twitter has extensive documentation. You can get basic guidance, security info, and specifications for each API. Be sure to check out the FAQ too.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"https://github.com/JoeMayo/LinqToTwitter/wiki\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get help</h2>\n        <p>\n            When these demos don't have the info you need, you can still get help by visiting Stack Overflow. Tip: The linq-to-twitter and twitter tags usually receive a quicker response.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"http://stackoverflow.com/questions/tagged/linq-to-twitter\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get the code</h2>\n        <p>\n            You can download the code from the LINQ to Twitter site on GitHub.com, but the most convenient way to use LINQ to Twitter is via NuGet.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"http://www.nuget.org/packages/linqtotwitter\">Learn more &raquo;</a>\n        </p>\n    </div>\n</div>"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/Home/Privacy.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Privacy Policy\";\n}\n<h1>@ViewData[\"Title\"]</h1>\n\n<p>Use this page to detail your site's privacy policy.</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/OAuth/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"OAuth\";\n}\n\n\n<h2>Authorize with OAuth</h2>\n@Html.ActionLink(\"Begin the Authorization Process\", \"Begin\")\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/Shared/Error.cshtml",
    "content": "﻿@model ErrorViewModel\n@{\n    ViewData[\"Title\"] = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n@if (Model.ShowRequestId)\n{\n    <p>\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\n    </p>\n}\n\n<h3>Development Mode</h3>\n<p>\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\n</p>\n<p>\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\n    It can result in displaying sensitive information from exceptions to end users.\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\n    and restarting the app.\n</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>@ViewData[\"Title\"] - CoreDemo</title>\n    <link rel=\"stylesheet\" href=\"~/lib/bootstrap/dist/css/bootstrap.min.css\" />\n    <link rel=\"stylesheet\" href=\"~/css/site.css\" />\n</head>\n<body>\n    <header>\n        <nav class=\"navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3\">\n            <div class=\"container\">\n                <a class=\"navbar-brand\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Index\">CoreDemo</a>\n                <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-controls=\"navbarSupportedContent\"\n                        aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                    <span class=\"navbar-toggler-icon\"></span>\n                </button>\n                <div class=\"navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse\">\n                    <ul class=\"navbar-nav flex-grow-1\">\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link text-dark\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Index\">Home</a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link text-dark\" asp-area=\"\" asp-controller=\"StatusDemos\" asp-action=\"Index\">Status Demos</a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link text-dark\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Privacy\">Privacy</a>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </nav>\n    </header>\n    <div class=\"container\">\n        <main role=\"main\" class=\"pb-3\">\n            @RenderBody()\n        </main>\n    </div>\n\n    <footer class=\"border-top footer text-muted\">\n        <div class=\"container\">\n            &copy; 2020 - CoreDemo - <a asp-area=\"\" asp-controller=\"Home\" asp-action=\"Privacy\">Privacy</a>\n        </div>\n    </footer>\n    <script src=\"~/lib/jquery/dist/jquery.min.js\"></script>\n    <script src=\"~/lib/bootstrap/dist/js/bootstrap.bundle.min.js\"></script>\n    <script src=\"~/js/site.js\" asp-append-version=\"true\"></script>\n    @RenderSection(\"Scripts\", required: false)\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/Shared/_ValidationScriptsPartial.cshtml",
    "content": "﻿<script src=\"~/lib/jquery-validation/dist/jquery.validate.min.js\"></script>\n<script src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js\"></script>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/StatusDemos/HomeTimeline.cshtml",
    "content": "﻿@model IEnumerable<CoreDemo.Models.TweetViewModel>\n\n@{\n    ViewData[\"Title\"] = \"Home Timeline\";\n}\n\n<h2>Home Timeline Demo</h2>\n\n<table class=\"table\">\n    <tr>\n        <th>\n            @Html.DisplayNameFor(model => model.ImageUrl)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.ScreenName)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.Text)\n        </th>\n        <th></th>\n    </tr>\n\n    @foreach (var item in Model)\n    {\n        <tr>\n            <td>\n                <img src=\"@item.ImageUrl\" alt=\"@item.ScreenName\" />\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.ScreenName)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.Text)\n            </td>\n        </tr>\n    }\n\n</table>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/StatusDemos/Index.cshtml",
    "content": "﻿\n@{\n    ViewData[\"Title\"] = \"Index\";\n}\n\n<h2>Status Demos</h2>\n\n<p>@Html.ActionLink(\"Tweet Demo\", \"Tweet\")</p>\n\n<p>@Html.ActionLink(\"Home Timeline Demo\", \"HomeTimeline\")</p>\n\n<p>@Html.ActionLink(\"Upload Image Demo\", \"UploadImage\")</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/StatusDemos/Tweet.cshtml",
    "content": "﻿@model CoreDemo.Models.SendTweetViewModel\n\n@{\n    ViewData[\"Title\"] = \"Tweet\";\n}\n\n<h2>Tweet</h2>\n\n@using (Html.BeginForm())\n{\n    @Html.AntiForgeryToken()\n\n    <div class=\"form-horizontal\">\n        <h4>Tweet Demo</h4>\n        <hr />\n        @Html.ValidationSummary(true)\n        <div class=\"form-group\">\n            @Html.LabelFor(model => model.Text, new { @class = \"control-label col-md-2\" })\n            <div class=\"col-md-10\">\n                @Html.TextAreaFor(model => model.Text, new { @class = \"form-control\", rows = \"3\" })\n                @Html.ValidationMessageFor(model => model.Text)\n            </div>\n        </div>\n\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <input type=\"submit\" value=\"Send\" class=\"btn btn-default\" />\n            </div>\n        </div>\n        <div class=\"col-md-offset-2 col-md-10\">\n            @Html.DisplayFor(model => model.Response)\n        </div>\n    </div>\n}\n\n<div>\n    @Html.ActionLink(\"Back to List\", \"Index\")\n</div>\n\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/StatusDemos/UploadImage.cshtml",
    "content": "﻿@model CoreDemo.Models.TweetViewModel\n\n@{\n    ViewData[\"Title\"] = \"Upload Image\";\n}\n\n<h2>Upload Image</h2>\n\n<div>\n    <h4>Upload Results</h4>\n    <hr />\n    <dl class=\"dl-horizontal\">\n        <dt>\n            @Html.DisplayNameFor(model => model.ImageUrl)\n        </dt>\n\n        <dd>\n            @Html.DisplayFor(model => model.ImageUrl)\n        </dd>\n\n        <dt>\n            @Html.DisplayNameFor(model => model.ScreenName)\n        </dt>\n\n        <dd>\n            @Html.DisplayFor(model => model.ScreenName)\n        </dd>\n\n        <dt>\n            @Html.DisplayNameFor(model => model.Text)\n        </dt>\n\n        <dd>\n            @Html.DisplayFor(model => model.Text)\n        </dd>\n\n    </dl>\n</div>\n<p>\n    @Html.ActionLink(\"Edit\", \"Edit\", new { /* id = Model.PrimaryKey */ }) |\n    @Html.ActionLink(\"Back to List\", \"Index\")\n</p>\n\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/_ViewImports.cshtml",
    "content": "﻿@using CoreDemo\n@using CoreDemo.Models\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/css/site.css",
    "content": "﻿/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\nfor details on configuring this project to bundle and minify static web assets. */\n\na.navbar-brand {\n  white-space: normal;\n  text-align: center;\n  word-break: break-all;\n}\n\n/* Provide sufficient contrast against white background */\na {\n  color: #0366d6;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #1b6ec2;\n  border-color: #1861ac;\n}\n\n.nav-pills .nav-link.active, .nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #1b6ec2;\n  border-color: #1861ac;\n}\n\n/* Sticky footer styles\n-------------------------------------------------- */\nhtml {\n  font-size: 14px;\n}\n@media (min-width: 768px) {\n  html {\n    font-size: 16px;\n  }\n}\n\n.border-top {\n  border-top: 1px solid #e5e5e5;\n}\n.border-bottom {\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.box-shadow {\n  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);\n}\n\nbutton.accept-policy {\n  font-size: 1rem;\n  line-height: inherit;\n}\n\n/* Sticky footer styles\n-------------------------------------------------- */\nhtml {\n  position: relative;\n  min-height: 100%;\n}\n\nbody {\n  /* Margin bottom by footer height */\n  margin-bottom: 60px;\n}\n.footer {\n  position: absolute;\n  bottom: 0;\n  width: 100%;\n  white-space: nowrap;\n  line-height: 60px; /* Vertically center the text there */\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/js/site.js",
    "content": "﻿// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\n// for details on configuring this project to bundle and minify static web assets.\n\n// Write your JavaScript code.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/bootstrap/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2011-2018 Twitter, Inc.\nCopyright (c) 2011-2018 The Bootstrap Authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n  box-sizing: border-box;\n  -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/bootstrap/dist/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #007bff;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #dc3545;\n  --orange: #fd7e14;\n  --yellow: #ffc107;\n  --green: #28a745;\n  --teal: #20c997;\n  --cyan: #17a2b8;\n  --white: #fff;\n  --gray: #6c757d;\n  --gray-dark: #343a40;\n  --primary: #007bff;\n  --secondary: #6c757d;\n  --success: #28a745;\n  --info: #17a2b8;\n  --warning: #ffc107;\n  --danger: #dc3545;\n  --light: #f8f9fa;\n  --dark: #343a40;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: 2.5rem;\n}\n\nh2, .h2 {\n  font-size: 2rem;\n}\n\nh3, .h3 {\n  font-size: 1.75rem;\n}\n\nh4, .h4 {\n  font-size: 1.5rem;\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: 400;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #6c757d;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #6c757d;\n}\n\ncode {\n  font-size: 87.5%;\n  color: #e83e8c;\n  word-break: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 87.5%;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n}\n\npre {\n  display: block;\n  font-size: 87.5%;\n  color: #212529;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n}\n\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n  border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  color: #212529;\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n  border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n  background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n  background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n  border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n  background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n  background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n  border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n  background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n  border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n  background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n  border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n  background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n  border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n  background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n  border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n  background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n  background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n  border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n  background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n  background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #454d55;\n}\n\n.table .thead-light th {\n  color: #495057;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.table-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n  border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n  border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-sm > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-md > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-lg > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-xl > .table-bordered {\n    border: 0;\n  }\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n  border: 0;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #fff;\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n  width: 100%;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.form-control-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n  height: auto;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  padding-left: 1.25rem;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.3rem;\n  margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n  color: #6c757d;\n}\n\n.form-check-label {\n  margin-bottom: 0;\n}\n\n.form-check-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding-left: 0;\n  margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n  position: static;\n  margin-top: 0;\n  margin-right: 0.3125rem;\n  margin-left: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(40, 167, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28a745;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.375em + 0.1875rem);\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n  border-color: #28a745;\n  padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n  color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n  border-color: #34ce57;\n  background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.375em + 0.1875rem);\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n  color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n  border-color: #e4606d;\n  background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-flow: row wrap;\n  flex-flow: row wrap;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.form-inline .form-check {\n  width: 100%;\n}\n\n@media (min-width: 576px) {\n  .form-inline label {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    -ms-flex-align: center;\n    align-items: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-plaintext {\n    display: inline-block;\n  }\n  .form-inline .input-group,\n  .form-inline .custom-select {\n    width: auto;\n  }\n  .form-inline .form-check {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: auto;\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    margin-top: 0;\n    margin-right: 0.25rem;\n    margin-left: 0;\n  }\n  .form-inline .custom-control {\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n  }\n  .form-inline .custom-control-label {\n    margin-bottom: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  color: #212529;\n  text-align: center;\n  vertical-align: middle;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #212529;\n  text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n  opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #0069d9;\n  border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #0062cc;\n  border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #5a6268;\n  border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #545b62;\n  border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #218838;\n  border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #1e7e34;\n  border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #138496;\n  border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #117a8b;\n  border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #212529;\n  background-color: #e0a800;\n  border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #d39e00;\n  border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #bd2130;\n  border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #212529;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n  color: #212529;\n  background-color: #dae0e5;\n  border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #23272b;\n  border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1d2124;\n  border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n  color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  color: #007bff;\n  background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n  color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #007bff;\n  text-decoration: none;\n}\n\n.btn-link:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n  text-decoration: underline;\n  box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.125rem 0 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n  display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n  right: auto;\n  bottom: auto;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #16181b;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1.5rem;\n  color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n  margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n  margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n  z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n  z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n  z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n  margin-left: -1px;\n}\n\n.input-group-prepend {\n  margin-right: -1px;\n}\n\n.input-group-append {\n  margin-left: -1px;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n  height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n  height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n  padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.custom-control {\n  position: relative;\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n  color: #fff;\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n  color: #fff;\n  background-color: #b3d7ff;\n  border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n  color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n  background-color: #e9ecef;\n}\n\n.custom-control-label {\n  position: relative;\n  margin-bottom: 0;\n  vertical-align: top;\n}\n\n.custom-control-label::before {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  content: \"\";\n  background-color: #fff;\n  border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  content: \"\";\n  background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n  border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n  border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n  padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n  left: -2.25rem;\n  width: 1.75rem;\n  pointer-events: all;\n  border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n  top: calc(0.25rem + 2px);\n  left: calc(-2.25rem + 2px);\n  width: calc(1rem - 4px);\n  height: calc(1rem - 4px);\n  background-color: #adb5bd;\n  border-radius: 0.5rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-switch .custom-control-label::after {\n    transition: none;\n  }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n  background-color: #fff;\n  -webkit-transform: translateX(0.75rem);\n  transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  vertical-align: middle;\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-select:focus {\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n  height: auto;\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.custom-select:disabled {\n  color: #6c757d;\n  background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n  display: none;\n}\n\n.custom-select-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.custom-select-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin-bottom: 0;\n}\n\n.custom-file-input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin: 0;\n  opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n  border-color: #80bdff;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n  background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n  content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n  content: attr(data-browse);\n}\n\n.custom-file-label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 3;\n  display: block;\n  height: calc(1.5em + 0.75rem);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  content: \"Browse\";\n  background-color: #e9ecef;\n  border-left: inherit;\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n  width: 100%;\n  height: calc(1rem + 0.4rem);\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-range:focus {\n  outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n  border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-webkit-slider-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-moz-range-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-moz-range-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: 0;\n  margin-right: 0.2rem;\n  margin-left: 0.2rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-ms-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-ms-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: transparent;\n  border-color: transparent;\n  border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n  margin-right: 15px;\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-control-label::before,\n  .custom-file-label,\n  .custom-select {\n    transition: none;\n  }\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n  text-decoration: none;\n}\n\n.nav-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n  margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  line-height: inherit;\n  white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n  text-decoration: none;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n  text-decoration: none;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n  color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1.25rem;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n  border-top: 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img {\n  width: 100%;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n  width: 100%;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n  width: 100%;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.card-deck .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n  .card-deck .card {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin-right: 15px;\n    margin-bottom: 0;\n    margin-left: 15px;\n  }\n}\n\n.card-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.card-group > .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.card-columns .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    -webkit-column-count: 3;\n    -moz-column-count: 3;\n    column-count: 3;\n    -webkit-column-gap: 1.25rem;\n    -moz-column-gap: 1.25rem;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n\n.accordion > .card {\n  overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n  border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n  border-bottom: 0;\n  border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n  border-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n  margin-bottom: -1px;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  color: #6c757d;\n  content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #007bff;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #0056b3;\n  text-decoration: none;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 2;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n  z-index: 1;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: auto;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .badge {\n    transition: none;\n  }\n}\n\na.badge:hover, a.badge:focus {\n  text-decoration: none;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.badge-primary {\n  color: #fff;\n  background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n  color: #fff;\n  background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n  color: #fff;\n  background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n  color: #fff;\n  background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n  color: #fff;\n  background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n  color: #fff;\n  background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n  color: #fff;\n  background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n  color: #fff;\n  background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n  color: #212529;\n  background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n  color: #212529;\n  background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n  color: #fff;\n  background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n  color: #fff;\n  background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n  color: #212529;\n  background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n  color: #212529;\n  background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n  color: #fff;\n  background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #e9ecef;\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  position: relative;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0.75rem 1.25rem;\n  color: inherit;\n}\n\n.alert-primary {\n  color: #004085;\n  background-color: #cce5ff;\n  border-color: #b8daff;\n}\n\n.alert-primary hr {\n  border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n  color: #002752;\n}\n\n.alert-secondary {\n  color: #383d41;\n  background-color: #e2e3e5;\n  border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n  border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n  color: #202326;\n}\n\n.alert-success {\n  color: #155724;\n  background-color: #d4edda;\n  border-color: #c3e6cb;\n}\n\n.alert-success hr {\n  border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n  color: #0b2e13;\n}\n\n.alert-info {\n  color: #0c5460;\n  background-color: #d1ecf1;\n  border-color: #bee5eb;\n}\n\n.alert-info hr {\n  border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n  color: #062c33;\n}\n\n.alert-warning {\n  color: #856404;\n  background-color: #fff3cd;\n  border-color: #ffeeba;\n}\n\n.alert-warning hr {\n  border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n  color: #533f03;\n}\n\n.alert-danger {\n  color: #721c24;\n  background-color: #f8d7da;\n  border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n  border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n  color: #491217;\n}\n\n.alert-light {\n  color: #818182;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light hr {\n  border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n  color: #686868;\n}\n\n.alert-dark {\n  color: #1b1e21;\n  background-color: #d6d8d9;\n  border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n  border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n  color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #007bff;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: progress-bar-stripes 1s linear infinite;\n  animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.media {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n}\n\n.media-body {\n  -ms-flex: 1;\n  flex: 1;\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n  margin-right: -1px;\n  margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n  margin-right: 0;\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-md .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n  margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n  border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom: 0;\n}\n\n.list-group-item-primary {\n  color: #004085;\n  background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #004085;\n  background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #004085;\n  border-color: #004085;\n}\n\n.list-group-item-secondary {\n  color: #383d41;\n  background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #383d41;\n  background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #383d41;\n  border-color: #383d41;\n}\n\n.list-group-item-success {\n  color: #155724;\n  background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #155724;\n  background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #155724;\n  border-color: #155724;\n}\n\n.list-group-item-info {\n  color: #0c5460;\n  background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0c5460;\n  background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0c5460;\n  border-color: #0c5460;\n}\n\n.list-group-item-warning {\n  color: #856404;\n  background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #856404;\n  background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #856404;\n  border-color: #856404;\n}\n\n.list-group-item-danger {\n  color: #721c24;\n  background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #721c24;\n  background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #721c24;\n  border-color: #721c24;\n}\n\n.list-group-item-light {\n  color: #818182;\n  background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #818182;\n  background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #818182;\n  border-color: #818182;\n}\n\n.list-group-item-dark {\n  color: #1b1e21;\n  background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1b1e21;\n  background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1b1e21;\n  border-color: #1b1e21;\n}\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .5;\n}\n\n.close:hover {\n  color: #000;\n  text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n  opacity: .75;\n}\n\nbutton.close {\n  padding: 0;\n  background-color: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\na.close.disabled {\n  pointer-events: none;\n}\n\n.toast {\n  max-width: 350px;\n  overflow: hidden;\n  font-size: 0.875rem;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n  -webkit-backdrop-filter: blur(10px);\n  backdrop-filter: blur(10px);\n  opacity: 0;\n  border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n  opacity: 1;\n}\n\n.toast.show {\n  display: block;\n  opacity: 1;\n}\n\n.toast.hide {\n  display: none;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.25rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n  padding: 0.75rem;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal-dialog-scrollable {\n  display: -ms-flexbox;\n  display: flex;\n  max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: calc(100vh - 1rem);\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n  display: block;\n  height: calc(100vh - 1rem);\n  content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n  max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n  content: none;\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n  padding: 1rem 1rem;\n  margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 1rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n  margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n  margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    max-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-scrollable .modal-content {\n    max-height: calc(100vh - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered::before {\n    height: calc(100vh - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n  top: 0;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n  right: 0;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n  bottom: 0;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n  left: 0;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n  margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n  bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n  left: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n  top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n  right: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n  z-index: 0;\n  opacity: 0;\n  transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-left,\n  .carousel-fade .active.carousel-item-right {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  color: #fff;\n  text-align: center;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 15;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: .5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators li {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: spinner-border .75s linear infinite;\n  animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: spinner-grow .75s linear infinite;\n  animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-primary {\n  background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n  background-color: #0062cc !important;\n}\n\n.bg-secondary {\n  background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n  background-color: #545b62 !important;\n}\n\n.bg-success {\n  background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n  background-color: #1e7e34 !important;\n}\n\n.bg-info {\n  background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n  background-color: #117a8b !important;\n}\n\n.bg-warning {\n  background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n  background-color: #d39e00 !important;\n}\n\n.bg-danger {\n  background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n  background-color: #bd2130 !important;\n}\n\n.bg-light {\n  background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n  background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n  background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n  background-color: #1d2124 !important;\n}\n\n.bg-white {\n  background-color: #fff !important;\n}\n\n.bg-transparent {\n  background-color: transparent !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-right-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-left-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #007bff !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.rounded-sm {\n  border-radius: 0.2rem !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n  border-top-left-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive::before {\n  display: block;\n  content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9::before {\n  padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n  padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n  padding-top: 100%;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.float-left {\n  float: left !important;\n}\n\n.float-right {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  pointer-events: auto;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n\n.text-monospace {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-left {\n  text-align: left !important;\n}\n\n.text-right {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-light {\n  font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n  font-weight: lighter !important;\n}\n\n.font-weight-normal {\n  font-weight: 400 !important;\n}\n\n.font-weight-bold {\n  font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n  font-weight: bolder !important;\n}\n\n.font-italic {\n  font-style: italic !important;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-primary {\n  color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n  color: #0056b3 !important;\n}\n\n.text-secondary {\n  color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n  color: #494f54 !important;\n}\n\n.text-success {\n  color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n  color: #19692c !important;\n}\n\n.text-info {\n  color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n  color: #0f6674 !important;\n}\n\n.text-warning {\n  color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n  color: #ba8b00 !important;\n}\n\n.text-danger {\n  color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n  color: #a71d2a !important;\n}\n\n.text-light {\n  color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n  color: #cbd3da !important;\n}\n\n.text-dark {\n  color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n  color: #121416 !important;\n}\n\n.text-body {\n  color: #212529 !important;\n}\n\n.text-muted {\n  color: #6c757d !important;\n}\n\n.text-black-50 {\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-break {\n  word-break: break-word !important;\n  overflow-wrap: break-word !important;\n}\n\n.text-reset {\n  color: inherit !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a:not(.btn) {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #adb5bd;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  @page {\n    size: a3;\n  }\n  body {\n    min-width: 992px !important;\n  }\n  .container {\n    min-width: 992px !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .badge {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #dee2e6 !important;\n  }\n  .table-dark {\n    color: inherit;\n  }\n  .table-dark th,\n  .table-dark td,\n  .table-dark thead th,\n  .table-dark tbody + tbody {\n    border-color: #dee2e6;\n  }\n  .table .thead-dark th {\n    color: inherit;\n    border-color: #dee2e6;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery));\n}(this, function (exports, $) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**!\n   * @fileOverview Kickass library to create and place poppers near their reference elements.\n   * @version 1.14.7\n   * @license\n   * Copyright (c) 2016 Federico Zivolo and contributors\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all\n   * copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   * SOFTWARE.\n   */\n  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  var timeoutDuration = 0;\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      timeoutDuration = 1;\n      break;\n    }\n  }\n\n  function microtaskDebounce(fn) {\n    var called = false;\n    return function () {\n      if (called) {\n        return;\n      }\n      called = true;\n      window.Promise.resolve().then(function () {\n        called = false;\n        fn();\n      });\n    };\n  }\n\n  function taskDebounce(fn) {\n    var scheduled = false;\n    return function () {\n      if (!scheduled) {\n        scheduled = true;\n        setTimeout(function () {\n          scheduled = false;\n          fn();\n        }, timeoutDuration);\n      }\n    };\n  }\n\n  var supportsMicroTasks = isBrowser && window.Promise;\n\n  /**\n  * Create a debounced version of a method, that's asynchronously deferred\n  * but called in the minimum time possible.\n  *\n  * @method\n  * @memberof Popper.Utils\n  * @argument {Function} fn\n  * @returns {Function}\n  */\n  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n  /**\n   * Check if the given variable is a function\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Any} functionToCheck - variable to check\n   * @returns {Boolean} answer to: is a function?\n   */\n  function isFunction(functionToCheck) {\n    var getType = {};\n    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n  }\n\n  /**\n   * Get CSS computed property of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Eement} element\n   * @argument {String} property\n   */\n  function getStyleComputedProperty(element, property) {\n    if (element.nodeType !== 1) {\n      return [];\n    }\n    // NOTE: 1 DOM access here\n    var window = element.ownerDocument.defaultView;\n    var css = window.getComputedStyle(element, null);\n    return property ? css[property] : css;\n  }\n\n  /**\n   * Returns the parentNode or the host of the element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} parent\n   */\n  function getParentNode(element) {\n    if (element.nodeName === 'HTML') {\n      return element;\n    }\n    return element.parentNode || element.host;\n  }\n\n  /**\n   * Returns the scrolling parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} scroll parent\n   */\n  function getScrollParent(element) {\n    // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n    if (!element) {\n      return document.body;\n    }\n\n    switch (element.nodeName) {\n      case 'HTML':\n      case 'BODY':\n        return element.ownerDocument.body;\n      case '#document':\n        return element.body;\n    }\n\n    // Firefox want us to check `-x` and `-y` variations as well\n\n    var _getStyleComputedProp = getStyleComputedProperty(element),\n        overflow = _getStyleComputedProp.overflow,\n        overflowX = _getStyleComputedProp.overflowX,\n        overflowY = _getStyleComputedProp.overflowY;\n\n    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n      return element;\n    }\n\n    return getScrollParent(getParentNode(element));\n  }\n\n  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\n  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n  /**\n   * Determines if the browser is Internet Explorer\n   * @method\n   * @memberof Popper.Utils\n   * @param {Number} version to check\n   * @returns {Boolean} isIE\n   */\n  function isIE(version) {\n    if (version === 11) {\n      return isIE11;\n    }\n    if (version === 10) {\n      return isIE10;\n    }\n    return isIE11 || isIE10;\n  }\n\n  /**\n   * Returns the offset parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} offset parent\n   */\n  function getOffsetParent(element) {\n    if (!element) {\n      return document.documentElement;\n    }\n\n    var noOffsetParent = isIE(10) ? document.body : null;\n\n    // NOTE: 1 DOM access here\n    var offsetParent = element.offsetParent || null;\n    // Skip hidden elements which don't have an offsetParent\n    while (offsetParent === noOffsetParent && element.nextElementSibling) {\n      offsetParent = (element = element.nextElementSibling).offsetParent;\n    }\n\n    var nodeName = offsetParent && offsetParent.nodeName;\n\n    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n      return element ? element.ownerDocument.documentElement : document.documentElement;\n    }\n\n    // .offsetParent will return the closest TH, TD or TABLE in case\n    // no offsetParent is present, I hate this job...\n    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n      return getOffsetParent(offsetParent);\n    }\n\n    return offsetParent;\n  }\n\n  function isOffsetContainer(element) {\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY') {\n      return false;\n    }\n    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n  }\n\n  /**\n   * Finds the root node (document, shadowDOM root) of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} node\n   * @returns {Element} root node\n   */\n  function getRoot(node) {\n    if (node.parentNode !== null) {\n      return getRoot(node.parentNode);\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the offset parent common to the two provided nodes\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element1\n   * @argument {Element} element2\n   * @returns {Element} common offset parent\n   */\n  function findCommonOffsetParent(element1, element2) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n      return document.documentElement;\n    }\n\n    // Here we make sure to give as \"start\" the element that comes first in the DOM\n    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n    var start = order ? element1 : element2;\n    var end = order ? element2 : element1;\n\n    // Get common ancestor container\n    var range = document.createRange();\n    range.setStart(start, 0);\n    range.setEnd(end, 0);\n    var commonAncestorContainer = range.commonAncestorContainer;\n\n    // Both nodes are inside #document\n\n    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n      if (isOffsetContainer(commonAncestorContainer)) {\n        return commonAncestorContainer;\n      }\n\n      return getOffsetParent(commonAncestorContainer);\n    }\n\n    // one of the nodes is inside shadowDOM, find which one\n    var element1root = getRoot(element1);\n    if (element1root.host) {\n      return findCommonOffsetParent(element1root.host, element2);\n    } else {\n      return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n  }\n\n  /**\n   * Gets the scroll value of the given element in the given side (top and left)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {String} side `top` or `left`\n   * @returns {number} amount of scrolled pixels\n   */\n  function getScroll(element) {\n    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      var html = element.ownerDocument.documentElement;\n      var scrollingElement = element.ownerDocument.scrollingElement || html;\n      return scrollingElement[upperSide];\n    }\n\n    return element[upperSide];\n  }\n\n  /*\n   * Sum or subtract the element scroll values (left and top) from a given rect object\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} rect - Rect object you want to change\n   * @param {HTMLElement} element - The element from the function reads the scroll values\n   * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n   * @return {Object} rect - The modifier rect object\n   */\n  function includeScroll(rect, element) {\n    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var scrollTop = getScroll(element, 'top');\n    var scrollLeft = getScroll(element, 'left');\n    var modifier = subtract ? -1 : 1;\n    rect.top += scrollTop * modifier;\n    rect.bottom += scrollTop * modifier;\n    rect.left += scrollLeft * modifier;\n    rect.right += scrollLeft * modifier;\n    return rect;\n  }\n\n  /*\n   * Helper to detect borders of a given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {CSSStyleDeclaration} styles\n   * Result of `getStyleComputedProperty` on the given element\n   * @param {String} axis - `x` or `y`\n   * @return {number} borders - The borders size of the given axis\n   */\n\n  function getBordersSize(styles, axis) {\n    var sideA = axis === 'x' ? 'Left' : 'Top';\n    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n  }\n\n  function getSize(axis, body, html, computedStyle) {\n    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n  }\n\n  function getWindowSizes(document) {\n    var body = document.body;\n    var html = document.documentElement;\n    var computedStyle = isIE(10) && getComputedStyle(html);\n\n    return {\n      height: getSize('Height', body, html, computedStyle),\n      width: getSize('Width', body, html, computedStyle)\n    };\n  }\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n\n\n\n\n  var defineProperty = function (obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  /**\n   * Given element offsets, generate an output similar to getBoundingClientRect\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} offsets\n   * @returns {Object} ClientRect like output\n   */\n  function getClientRect(offsets) {\n    return _extends({}, offsets, {\n      right: offsets.left + offsets.width,\n      bottom: offsets.top + offsets.height\n    });\n  }\n\n  /**\n   * Get bounding client rect of given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} element\n   * @return {Object} client rect\n   */\n  function getBoundingClientRect(element) {\n    var rect = {};\n\n    // IE10 10 FIX: Please, don't ask, the element isn't\n    // considered in DOM in some circumstances...\n    // This isn't reproducible in IE10 compatibility mode of IE11\n    try {\n      if (isIE(10)) {\n        rect = element.getBoundingClientRect();\n        var scrollTop = getScroll(element, 'top');\n        var scrollLeft = getScroll(element, 'left');\n        rect.top += scrollTop;\n        rect.left += scrollLeft;\n        rect.bottom += scrollTop;\n        rect.right += scrollLeft;\n      } else {\n        rect = element.getBoundingClientRect();\n      }\n    } catch (e) {}\n\n    var result = {\n      left: rect.left,\n      top: rect.top,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n\n    // subtract scrollbar size from sizes\n    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n    var width = sizes.width || element.clientWidth || result.right - result.left;\n    var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n    var horizScrollbar = element.offsetWidth - width;\n    var vertScrollbar = element.offsetHeight - height;\n\n    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n    // we make this check conditional for performance reasons\n    if (horizScrollbar || vertScrollbar) {\n      var styles = getStyleComputedProperty(element);\n      horizScrollbar -= getBordersSize(styles, 'x');\n      vertScrollbar -= getBordersSize(styles, 'y');\n\n      result.width -= horizScrollbar;\n      result.height -= vertScrollbar;\n    }\n\n    return getClientRect(result);\n  }\n\n  function getOffsetRectRelativeToArbitraryNode(children, parent) {\n    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var isIE10 = isIE(10);\n    var isHTML = parent.nodeName === 'HTML';\n    var childrenRect = getBoundingClientRect(children);\n    var parentRect = getBoundingClientRect(parent);\n    var scrollParent = getScrollParent(children);\n\n    var styles = getStyleComputedProperty(parent);\n    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n    // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n    if (fixedPosition && isHTML) {\n      parentRect.top = Math.max(parentRect.top, 0);\n      parentRect.left = Math.max(parentRect.left, 0);\n    }\n    var offsets = getClientRect({\n      top: childrenRect.top - parentRect.top - borderTopWidth,\n      left: childrenRect.left - parentRect.left - borderLeftWidth,\n      width: childrenRect.width,\n      height: childrenRect.height\n    });\n    offsets.marginTop = 0;\n    offsets.marginLeft = 0;\n\n    // Subtract margins of documentElement in case it's being used as parent\n    // we do this only on HTML because it's the only element that behaves\n    // differently when margins are applied to it. The margins are included in\n    // the box of the documentElement, in the other cases not.\n    if (!isIE10 && isHTML) {\n      var marginTop = parseFloat(styles.marginTop, 10);\n      var marginLeft = parseFloat(styles.marginLeft, 10);\n\n      offsets.top -= borderTopWidth - marginTop;\n      offsets.bottom -= borderTopWidth - marginTop;\n      offsets.left -= borderLeftWidth - marginLeft;\n      offsets.right -= borderLeftWidth - marginLeft;\n\n      // Attach marginTop and marginLeft because in some circumstances we may need them\n      offsets.marginTop = marginTop;\n      offsets.marginLeft = marginLeft;\n    }\n\n    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n      offsets = includeScroll(offsets, parent);\n    }\n\n    return offsets;\n  }\n\n  function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var html = element.ownerDocument.documentElement;\n    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n    var width = Math.max(html.clientWidth, window.innerWidth || 0);\n    var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n    var scrollTop = !excludeScroll ? getScroll(html) : 0;\n    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n    var offset = {\n      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n      width: width,\n      height: height\n    };\n\n    return getClientRect(offset);\n  }\n\n  /**\n   * Check if the given element is fixed or is inside a fixed parent\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {Element} customContainer\n   * @returns {Boolean} answer to \"isFixed?\"\n   */\n  function isFixed(element) {\n    var nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      return false;\n    }\n    if (getStyleComputedProperty(element, 'position') === 'fixed') {\n      return true;\n    }\n    var parentNode = getParentNode(element);\n    if (!parentNode) {\n      return false;\n    }\n    return isFixed(parentNode);\n  }\n\n  /**\n   * Finds the first parent of an element that has a transformed property defined\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} first transformed parent or documentElement\n   */\n\n  function getFixedPositionOffsetParent(element) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element || !element.parentElement || isIE()) {\n      return document.documentElement;\n    }\n    var el = element.parentElement;\n    while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n      el = el.parentElement;\n    }\n    return el || document.documentElement;\n  }\n\n  /**\n   * Computed the boundaries limits and return them\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} popper\n   * @param {HTMLElement} reference\n   * @param {number} padding\n   * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n   * @param {Boolean} fixedPosition - Is in fixed position mode\n   * @returns {Object} Coordinates of the boundaries\n   */\n  function getBoundaries(popper, reference, padding, boundariesElement) {\n    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    // NOTE: 1 DOM access here\n\n    var boundaries = { top: 0, left: 0 };\n    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n    // Handle viewport case\n    if (boundariesElement === 'viewport') {\n      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n    } else {\n      // Handle other cases based on DOM element used as boundaries\n      var boundariesNode = void 0;\n      if (boundariesElement === 'scrollParent') {\n        boundariesNode = getScrollParent(getParentNode(reference));\n        if (boundariesNode.nodeName === 'BODY') {\n          boundariesNode = popper.ownerDocument.documentElement;\n        }\n      } else if (boundariesElement === 'window') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      } else {\n        boundariesNode = boundariesElement;\n      }\n\n      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n      // In case of HTML, we need a different computation\n      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n        var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n            height = _getWindowSizes.height,\n            width = _getWindowSizes.width;\n\n        boundaries.top += offsets.top - offsets.marginTop;\n        boundaries.bottom = height + offsets.top;\n        boundaries.left += offsets.left - offsets.marginLeft;\n        boundaries.right = width + offsets.left;\n      } else {\n        // for all the other DOM elements, this one is good\n        boundaries = offsets;\n      }\n    }\n\n    // Add paddings\n    padding = padding || 0;\n    var isPaddingNumber = typeof padding === 'number';\n    boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n    boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n    return boundaries;\n  }\n\n  function getArea(_ref) {\n    var width = _ref.width,\n        height = _ref.height;\n\n    return width * height;\n  }\n\n  /**\n   * Utility used to transform the `auto` placement to the placement with more\n   * available space.\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n    if (placement.indexOf('auto') === -1) {\n      return placement;\n    }\n\n    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n    var rects = {\n      top: {\n        width: boundaries.width,\n        height: refRect.top - boundaries.top\n      },\n      right: {\n        width: boundaries.right - refRect.right,\n        height: boundaries.height\n      },\n      bottom: {\n        width: boundaries.width,\n        height: boundaries.bottom - refRect.bottom\n      },\n      left: {\n        width: refRect.left - boundaries.left,\n        height: boundaries.height\n      }\n    };\n\n    var sortedAreas = Object.keys(rects).map(function (key) {\n      return _extends({\n        key: key\n      }, rects[key], {\n        area: getArea(rects[key])\n      });\n    }).sort(function (a, b) {\n      return b.area - a.area;\n    });\n\n    var filteredAreas = sortedAreas.filter(function (_ref2) {\n      var width = _ref2.width,\n          height = _ref2.height;\n      return width >= popper.clientWidth && height >= popper.clientHeight;\n    });\n\n    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n    var variation = placement.split('-')[1];\n\n    return computedPlacement + (variation ? '-' + variation : '');\n  }\n\n  /**\n   * Get offsets to the reference element\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} state\n   * @param {Element} popper - the popper element\n   * @param {Element} reference - the reference element (the popper will be relative to this)\n   * @param {Element} fixedPosition - is in fixed position mode\n   * @returns {Object} An object containing the offsets which will be applied to the popper\n   */\n  function getReferenceOffsets(state, popper, reference) {\n    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n  }\n\n  /**\n   * Get the outer sizes of the given element (offset size + margins)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Object} object containing width and height properties\n   */\n  function getOuterSizes(element) {\n    var window = element.ownerDocument.defaultView;\n    var styles = window.getComputedStyle(element);\n    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n    var result = {\n      width: element.offsetWidth + y,\n      height: element.offsetHeight + x\n    };\n    return result;\n  }\n\n  /**\n   * Get the opposite placement of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement\n   * @returns {String} flipped placement\n   */\n  function getOppositePlacement(placement) {\n    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  /**\n   * Get offsets to the popper\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} position - CSS position the Popper will get applied\n   * @param {HTMLElement} popper - the popper element\n   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n   * @param {String} placement - one of the valid placement options\n   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n   */\n  function getPopperOffsets(popper, referenceOffsets, placement) {\n    placement = placement.split('-')[0];\n\n    // Get popper node sizes\n    var popperRect = getOuterSizes(popper);\n\n    // Add position, width and height to our offsets object\n    var popperOffsets = {\n      width: popperRect.width,\n      height: popperRect.height\n    };\n\n    // depending by the popper placement we have to compute its offsets slightly differently\n    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n    var mainSide = isHoriz ? 'top' : 'left';\n    var secondarySide = isHoriz ? 'left' : 'top';\n    var measurement = isHoriz ? 'height' : 'width';\n    var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n    if (placement === secondarySide) {\n      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n    } else {\n      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n    }\n\n    return popperOffsets;\n  }\n\n  /**\n   * Mimics the `find` method of Array\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function find(arr, check) {\n    // use native find if supported\n    if (Array.prototype.find) {\n      return arr.find(check);\n    }\n\n    // use `filter` to obtain the same behavior of `find`\n    return arr.filter(check)[0];\n  }\n\n  /**\n   * Return the index of the matching object\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function findIndex(arr, prop, value) {\n    // use native findIndex if supported\n    if (Array.prototype.findIndex) {\n      return arr.findIndex(function (cur) {\n        return cur[prop] === value;\n      });\n    }\n\n    // use `find` + `indexOf` if `findIndex` isn't supported\n    var match = find(arr, function (obj) {\n      return obj[prop] === value;\n    });\n    return arr.indexOf(match);\n  }\n\n  /**\n   * Loop trough the list of modifiers and run them in order,\n   * each of them will then edit the data object.\n   * @method\n   * @memberof Popper.Utils\n   * @param {dataObject} data\n   * @param {Array} modifiers\n   * @param {String} ends - Optional modifier name used as stopper\n   * @returns {dataObject}\n   */\n  function runModifiers(modifiers, data, ends) {\n    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n    modifiersToRun.forEach(function (modifier) {\n      if (modifier['function']) {\n        // eslint-disable-line dot-notation\n        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n      }\n      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n      if (modifier.enabled && isFunction(fn)) {\n        // Add properties to offsets to make them a complete clientRect object\n        // we do this before each modifier to make sure the previous one doesn't\n        // mess with these values\n        data.offsets.popper = getClientRect(data.offsets.popper);\n        data.offsets.reference = getClientRect(data.offsets.reference);\n\n        data = fn(data, modifier);\n      }\n    });\n\n    return data;\n  }\n\n  /**\n   * Updates the position of the popper, computing the new offsets and applying\n   * the new style.<br />\n   * Prefer `scheduleUpdate` over `update` because of performance reasons.\n   * @method\n   * @memberof Popper\n   */\n  function update() {\n    // if popper is destroyed, don't perform any further update\n    if (this.state.isDestroyed) {\n      return;\n    }\n\n    var data = {\n      instance: this,\n      styles: {},\n      arrowStyles: {},\n      attributes: {},\n      flipped: false,\n      offsets: {}\n    };\n\n    // compute reference element offsets\n    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n    // store the computed placement inside `originalPlacement`\n    data.originalPlacement = data.placement;\n\n    data.positionFixed = this.options.positionFixed;\n\n    // compute the popper offsets\n    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n    // run the modifiers\n    data = runModifiers(this.modifiers, data);\n\n    // the first `update` will call `onCreate` callback\n    // the other ones will call `onUpdate` callback\n    if (!this.state.isCreated) {\n      this.state.isCreated = true;\n      this.options.onCreate(data);\n    } else {\n      this.options.onUpdate(data);\n    }\n  }\n\n  /**\n   * Helper used to know if the given modifier is enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @returns {Boolean}\n   */\n  function isModifierEnabled(modifiers, modifierName) {\n    return modifiers.some(function (_ref) {\n      var name = _ref.name,\n          enabled = _ref.enabled;\n      return enabled && name === modifierName;\n    });\n  }\n\n  /**\n   * Get the prefixed supported property name\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} property (camelCase)\n   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n   */\n  function getSupportedPropertyName(property) {\n    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n    for (var i = 0; i < prefixes.length; i++) {\n      var prefix = prefixes[i];\n      var toCheck = prefix ? '' + prefix + upperProp : property;\n      if (typeof document.body.style[toCheck] !== 'undefined') {\n        return toCheck;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Destroys the popper.\n   * @method\n   * @memberof Popper\n   */\n  function destroy() {\n    this.state.isDestroyed = true;\n\n    // touch DOM only if `applyStyle` modifier is enabled\n    if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n      this.popper.removeAttribute('x-placement');\n      this.popper.style.position = '';\n      this.popper.style.top = '';\n      this.popper.style.left = '';\n      this.popper.style.right = '';\n      this.popper.style.bottom = '';\n      this.popper.style.willChange = '';\n      this.popper.style[getSupportedPropertyName('transform')] = '';\n    }\n\n    this.disableEventListeners();\n\n    // remove the popper if user explicity asked for the deletion on destroy\n    // do not use `remove` because IE11 doesn't support it\n    if (this.options.removeOnDestroy) {\n      this.popper.parentNode.removeChild(this.popper);\n    }\n    return this;\n  }\n\n  /**\n   * Get the window associated with the element\n   * @argument {Element} element\n   * @returns {Window}\n   */\n  function getWindow(element) {\n    var ownerDocument = element.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView : window;\n  }\n\n  function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n    var isBody = scrollParent.nodeName === 'BODY';\n    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n    target.addEventListener(event, callback, { passive: true });\n\n    if (!isBody) {\n      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n    }\n    scrollParents.push(target);\n  }\n\n  /**\n   * Setup needed event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function setupEventListeners(reference, options, state, updateBound) {\n    // Resize event listener on window\n    state.updateBound = updateBound;\n    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n    // Scroll event listener on scroll parents\n    var scrollElement = getScrollParent(reference);\n    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n    state.scrollElement = scrollElement;\n    state.eventsEnabled = true;\n\n    return state;\n  }\n\n  /**\n   * It will add resize/scroll events and start recalculating\n   * position of the popper element when they are triggered.\n   * @method\n   * @memberof Popper\n   */\n  function enableEventListeners() {\n    if (!this.state.eventsEnabled) {\n      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n    }\n  }\n\n  /**\n   * Remove event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function removeEventListeners(reference, state) {\n    // Remove resize event listener on window\n    getWindow(reference).removeEventListener('resize', state.updateBound);\n\n    // Remove scroll event listener on scroll parents\n    state.scrollParents.forEach(function (target) {\n      target.removeEventListener('scroll', state.updateBound);\n    });\n\n    // Reset state\n    state.updateBound = null;\n    state.scrollParents = [];\n    state.scrollElement = null;\n    state.eventsEnabled = false;\n    return state;\n  }\n\n  /**\n   * It will remove resize/scroll events and won't recalculate popper position\n   * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n   * unless you call `update` method manually.\n   * @method\n   * @memberof Popper\n   */\n  function disableEventListeners() {\n    if (this.state.eventsEnabled) {\n      cancelAnimationFrame(this.scheduleUpdate);\n      this.state = removeEventListeners(this.reference, this.state);\n    }\n  }\n\n  /**\n   * Tells if a given input is a number\n   * @method\n   * @memberof Popper.Utils\n   * @param {*} input to check\n   * @return {Boolean}\n   */\n  function isNumeric(n) {\n    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n  }\n\n  /**\n   * Set the style to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the style to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setStyles(element, styles) {\n    Object.keys(styles).forEach(function (prop) {\n      var unit = '';\n      // add unit if the value is numeric and is one of the following\n      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n        unit = 'px';\n      }\n      element.style[prop] = styles[prop] + unit;\n    });\n  }\n\n  /**\n   * Set the attributes to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the attributes to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setAttributes(element, attributes) {\n    Object.keys(attributes).forEach(function (prop) {\n      var value = attributes[prop];\n      if (value !== false) {\n        element.setAttribute(prop, attributes[prop]);\n      } else {\n        element.removeAttribute(prop);\n      }\n    });\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} data.styles - List of style properties - values to apply to popper element\n   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The same data object\n   */\n  function applyStyle(data) {\n    // any property present in `data.styles` will be applied to the popper,\n    // in this way we can make the 3rd party modifiers add custom styles to it\n    // Be aware, modifiers could override the properties defined in the previous\n    // lines of this modifier!\n    setStyles(data.instance.popper, data.styles);\n\n    // any property present in `data.attributes` will be applied to the popper,\n    // they will be set as HTML attributes of the element\n    setAttributes(data.instance.popper, data.attributes);\n\n    // if arrowElement is defined and arrowStyles has some properties\n    if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n      setStyles(data.arrowElement, data.arrowStyles);\n    }\n\n    return data;\n  }\n\n  /**\n   * Set the x-placement attribute before everything else because it could be used\n   * to add margins to the popper margins needs to be calculated to get the\n   * correct popper offsets.\n   * @method\n   * @memberof Popper.modifiers\n   * @param {HTMLElement} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper\n   * @param {Object} options - Popper.js options\n   */\n  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n    // compute reference element offsets\n    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n    popper.setAttribute('x-placement', placement);\n\n    // Apply `position` to popper before anything else because\n    // without the position applied we can't guarantee correct computations\n    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n    return options;\n  }\n\n  /**\n   * @function\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n   * @returns {Object} The popper's position offsets rounded\n   *\n   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n   * good as it can be within reason.\n   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n   *\n   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n   * as well on High DPI screens).\n   *\n   * Firefox prefers no rounding for positioning and does not have blurriness on\n   * high DPI screens.\n   *\n   * Only horizontal placement and left/right values need to be considered.\n   */\n  function getRoundedOffsets(data, shouldRound) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n    var round = Math.round,\n        floor = Math.floor;\n\n    var noRound = function noRound(v) {\n      return v;\n    };\n\n    var referenceWidth = round(reference.width);\n    var popperWidth = round(popper.width);\n\n    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n    var isVariation = data.placement.indexOf('-') !== -1;\n    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n    var verticalToInteger = !shouldRound ? noRound : round;\n\n    return {\n      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n      top: verticalToInteger(popper.top),\n      bottom: verticalToInteger(popper.bottom),\n      right: horizontalToInteger(popper.right)\n    };\n  }\n\n  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeStyle(data, options) {\n    var x = options.x,\n        y = options.y;\n    var popper = data.offsets.popper;\n\n    // Remove this legacy support in Popper.js v2\n\n    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'applyStyle';\n    }).gpuAcceleration;\n    if (legacyGpuAccelerationOption !== undefined) {\n      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n    }\n    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n    var offsetParent = getOffsetParent(data.instance.popper);\n    var offsetParentRect = getBoundingClientRect(offsetParent);\n\n    // Styles\n    var styles = {\n      position: popper.position\n    };\n\n    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n    var sideA = x === 'bottom' ? 'top' : 'bottom';\n    var sideB = y === 'right' ? 'left' : 'right';\n\n    // if gpuAcceleration is set to `true` and transform is supported,\n    //  we use `translate3d` to apply the position to the popper we\n    // automatically use the supported prefixed version if needed\n    var prefixedProperty = getSupportedPropertyName('transform');\n\n    // now, let's make a step back and look at this code closely (wtf?)\n    // If the content of the popper grows once it's been positioned, it\n    // may happen that the popper gets misplaced because of the new content\n    // overflowing its reference element\n    // To avoid this problem, we provide two options (x and y), which allow\n    // the consumer to define the offset origin.\n    // If we position a popper on top of a reference element, we can set\n    // `x` to `top` to make the popper grow towards its top instead of\n    // its bottom.\n    var left = void 0,\n        top = void 0;\n    if (sideA === 'bottom') {\n      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n      // and not the bottom of the html element\n      if (offsetParent.nodeName === 'HTML') {\n        top = -offsetParent.clientHeight + offsets.bottom;\n      } else {\n        top = -offsetParentRect.height + offsets.bottom;\n      }\n    } else {\n      top = offsets.top;\n    }\n    if (sideB === 'right') {\n      if (offsetParent.nodeName === 'HTML') {\n        left = -offsetParent.clientWidth + offsets.right;\n      } else {\n        left = -offsetParentRect.width + offsets.right;\n      }\n    } else {\n      left = offsets.left;\n    }\n    if (gpuAcceleration && prefixedProperty) {\n      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n      styles[sideA] = 0;\n      styles[sideB] = 0;\n      styles.willChange = 'transform';\n    } else {\n      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n      var invertTop = sideA === 'bottom' ? -1 : 1;\n      var invertLeft = sideB === 'right' ? -1 : 1;\n      styles[sideA] = top * invertTop;\n      styles[sideB] = left * invertLeft;\n      styles.willChange = sideA + ', ' + sideB;\n    }\n\n    // Attributes\n    var attributes = {\n      'x-placement': data.placement\n    };\n\n    // Update `data` attributes, styles and arrowStyles\n    data.attributes = _extends({}, attributes, data.attributes);\n    data.styles = _extends({}, styles, data.styles);\n    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n    return data;\n  }\n\n  /**\n   * Helper used to know if the given modifier depends from another one.<br />\n   * It checks if the needed modifier is listed and enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Array} modifiers - list of modifiers\n   * @param {String} requestingName - name of requesting modifier\n   * @param {String} requestedName - name of requested modifier\n   * @returns {Boolean}\n   */\n  function isModifierRequired(modifiers, requestingName, requestedName) {\n    var requesting = find(modifiers, function (_ref) {\n      var name = _ref.name;\n      return name === requestingName;\n    });\n\n    var isRequired = !!requesting && modifiers.some(function (modifier) {\n      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n    });\n\n    if (!isRequired) {\n      var _requesting = '`' + requestingName + '`';\n      var requested = '`' + requestedName + '`';\n      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n    }\n    return isRequired;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function arrow(data, options) {\n    var _data$offsets$arrow;\n\n    // arrow depends on keepTogether in order to work\n    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n      return data;\n    }\n\n    var arrowElement = options.element;\n\n    // if arrowElement is a string, suppose it's a CSS selector\n    if (typeof arrowElement === 'string') {\n      arrowElement = data.instance.popper.querySelector(arrowElement);\n\n      // if arrowElement is not found, don't run the modifier\n      if (!arrowElement) {\n        return data;\n      }\n    } else {\n      // if the arrowElement isn't a query selector we must check that the\n      // provided DOM node is child of its popper node\n      if (!data.instance.popper.contains(arrowElement)) {\n        console.warn('WARNING: `arrow.element` must be child of its popper element!');\n        return data;\n      }\n    }\n\n    var placement = data.placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n    var len = isVertical ? 'height' : 'width';\n    var sideCapitalized = isVertical ? 'Top' : 'Left';\n    var side = sideCapitalized.toLowerCase();\n    var altSide = isVertical ? 'left' : 'top';\n    var opSide = isVertical ? 'bottom' : 'right';\n    var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n    //\n    // extends keepTogether behavior making sure the popper and its\n    // reference have enough pixels in conjunction\n    //\n\n    // top/left side\n    if (reference[opSide] - arrowElementSize < popper[side]) {\n      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n    }\n    // bottom/right side\n    if (reference[side] + arrowElementSize > popper[opSide]) {\n      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n    }\n    data.offsets.popper = getClientRect(data.offsets.popper);\n\n    // compute center of the popper\n    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n    // Compute the sideValue using the updated popper offsets\n    // take popper margin in account because we don't have this info available\n    var css = getStyleComputedProperty(data.instance.popper);\n    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n    // prevent arrowElement from being placed not contiguously to its popper\n    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n    data.arrowElement = arrowElement;\n    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n    return data;\n  }\n\n  /**\n   * Get the opposite placement variation of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement variation\n   * @returns {String} flipped placement variation\n   */\n  function getOppositeVariation(variation) {\n    if (variation === 'end') {\n      return 'start';\n    } else if (variation === 'start') {\n      return 'end';\n    }\n    return variation;\n  }\n\n  /**\n   * List of accepted placements to use as values of the `placement` option.<br />\n   * Valid placements are:\n   * - `auto`\n   * - `top`\n   * - `right`\n   * - `bottom`\n   * - `left`\n   *\n   * Each placement can have a variation from this list:\n   * - `-start`\n   * - `-end`\n   *\n   * Variations are interpreted easily if you think of them as the left to right\n   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n   * is right.<br />\n   * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n   *\n   * Some valid examples are:\n   * - `top-end` (on top of reference, right aligned)\n   * - `right-start` (on right of reference, top aligned)\n   * - `bottom` (on bottom, centered)\n   * - `auto-end` (on the side with more space available, alignment depends by placement)\n   *\n   * @static\n   * @type {Array}\n   * @enum {String}\n   * @readonly\n   * @method placements\n   * @memberof Popper\n   */\n  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n  // Get rid of `auto` `auto-start` and `auto-end`\n  var validPlacements = placements.slice(3);\n\n  /**\n   * Given an initial placement, returns all the subsequent placements\n   * clockwise (or counter-clockwise).\n   *\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement - A valid placement (it accepts variations)\n   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n   * @returns {Array} placements including their variations\n   */\n  function clockwise(placement) {\n    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var index = validPlacements.indexOf(placement);\n    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n    return counter ? arr.reverse() : arr;\n  }\n\n  var BEHAVIORS = {\n    FLIP: 'flip',\n    CLOCKWISE: 'clockwise',\n    COUNTERCLOCKWISE: 'counterclockwise'\n  };\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function flip(data, options) {\n    // if `inner` modifier is enabled, we can't use the `flip` modifier\n    if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n      return data;\n    }\n\n    if (data.flipped && data.placement === data.originalPlacement) {\n      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n      return data;\n    }\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n    var placement = data.placement.split('-')[0];\n    var placementOpposite = getOppositePlacement(placement);\n    var variation = data.placement.split('-')[1] || '';\n\n    var flipOrder = [];\n\n    switch (options.behavior) {\n      case BEHAVIORS.FLIP:\n        flipOrder = [placement, placementOpposite];\n        break;\n      case BEHAVIORS.CLOCKWISE:\n        flipOrder = clockwise(placement);\n        break;\n      case BEHAVIORS.COUNTERCLOCKWISE:\n        flipOrder = clockwise(placement, true);\n        break;\n      default:\n        flipOrder = options.behavior;\n    }\n\n    flipOrder.forEach(function (step, index) {\n      if (placement !== step || flipOrder.length === index + 1) {\n        return data;\n      }\n\n      placement = data.placement.split('-')[0];\n      placementOpposite = getOppositePlacement(placement);\n\n      var popperOffsets = data.offsets.popper;\n      var refOffsets = data.offsets.reference;\n\n      // using floor because the reference offsets may contain decimals we are not going to consider here\n      var floor = Math.floor;\n      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n      // flip the variation if required\n      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n      var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n      if (overlapsRef || overflowsBoundaries || flippedVariation) {\n        // this boolean to detect any flip loop\n        data.flipped = true;\n\n        if (overlapsRef || overflowsBoundaries) {\n          placement = flipOrder[index + 1];\n        }\n\n        if (flippedVariation) {\n          variation = getOppositeVariation(variation);\n        }\n\n        data.placement = placement + (variation ? '-' + variation : '');\n\n        // this object contains `position`, we want to preserve it along with\n        // any additional property we may add in the future\n        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n        data = runModifiers(data.instance.modifiers, data, 'flip');\n      }\n    });\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function keepTogether(data) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var placement = data.placement.split('-')[0];\n    var floor = Math.floor;\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var side = isVertical ? 'right' : 'bottom';\n    var opSide = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    if (popper[side] < floor(reference[opSide])) {\n      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n    }\n    if (popper[opSide] > floor(reference[side])) {\n      data.offsets.popper[opSide] = floor(reference[side]);\n    }\n\n    return data;\n  }\n\n  /**\n   * Converts a string containing value + unit into a px value number\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} str - Value + unit string\n   * @argument {String} measurement - `height` or `width`\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @returns {Number|String}\n   * Value in pixels, or original string if no values were extracted\n   */\n  function toValue(str, measurement, popperOffsets, referenceOffsets) {\n    // separate value from unit\n    var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n    var value = +split[1];\n    var unit = split[2];\n\n    // If it's not a number it's an operator, I guess\n    if (!value) {\n      return str;\n    }\n\n    if (unit.indexOf('%') === 0) {\n      var element = void 0;\n      switch (unit) {\n        case '%p':\n          element = popperOffsets;\n          break;\n        case '%':\n        case '%r':\n        default:\n          element = referenceOffsets;\n      }\n\n      var rect = getClientRect(element);\n      return rect[measurement] / 100 * value;\n    } else if (unit === 'vh' || unit === 'vw') {\n      // if is a vh or vw, we calculate the size based on the viewport\n      var size = void 0;\n      if (unit === 'vh') {\n        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n      } else {\n        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n      }\n      return size / 100 * value;\n    } else {\n      // if is an explicit pixel unit, we get rid of the unit and keep the value\n      // if is an implicit unit, it's px, and we return just the value\n      return value;\n    }\n  }\n\n  /**\n   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} offset\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @argument {String} basePlacement\n   * @returns {Array} a two cells array with x and y offsets in numbers\n   */\n  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n    var offsets = [0, 0];\n\n    // Use height if placement is left or right and index is 0 otherwise use width\n    // in this way the first offset will use an axis and the second one\n    // will use the other one\n    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n    // Split the offset string to obtain a list of values and operands\n    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n    var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n      return frag.trim();\n    });\n\n    // Detect if the offset string contains a pair of values or a single one\n    // they could be separated by comma or space\n    var divider = fragments.indexOf(find(fragments, function (frag) {\n      return frag.search(/,|\\s/) !== -1;\n    }));\n\n    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n    }\n\n    // If divider is found, we divide the list of values and operands to divide\n    // them by ofset X and Y.\n    var splitRegex = /\\s*,\\s*|\\s+/;\n    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n    // Convert the values with units to absolute pixels to allow our computations\n    ops = ops.map(function (op, index) {\n      // Most of the units rely on the orientation of the popper\n      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n      var mergeWithPrevious = false;\n      return op\n      // This aggregates any `+` or `-` sign that aren't considered operators\n      // e.g.: 10 + +5 => [10, +, +5]\n      .reduce(function (a, b) {\n        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n          a[a.length - 1] = b;\n          mergeWithPrevious = true;\n          return a;\n        } else if (mergeWithPrevious) {\n          a[a.length - 1] += b;\n          mergeWithPrevious = false;\n          return a;\n        } else {\n          return a.concat(b);\n        }\n      }, [])\n      // Here we convert the string values into number values (in px)\n      .map(function (str) {\n        return toValue(str, measurement, popperOffsets, referenceOffsets);\n      });\n    });\n\n    // Loop trough the offsets arrays and execute the operations\n    ops.forEach(function (op, index) {\n      op.forEach(function (frag, index2) {\n        if (isNumeric(frag)) {\n          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n        }\n      });\n    });\n    return offsets;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @argument {Number|String} options.offset=0\n   * The offset value as described in the modifier description\n   * @returns {Object} The data object, properly modified\n   */\n  function offset(data, _ref) {\n    var offset = _ref.offset;\n    var placement = data.placement,\n        _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var basePlacement = placement.split('-')[0];\n\n    var offsets = void 0;\n    if (isNumeric(+offset)) {\n      offsets = [+offset, 0];\n    } else {\n      offsets = parseOffset(offset, popper, reference, basePlacement);\n    }\n\n    if (basePlacement === 'left') {\n      popper.top += offsets[0];\n      popper.left -= offsets[1];\n    } else if (basePlacement === 'right') {\n      popper.top += offsets[0];\n      popper.left += offsets[1];\n    } else if (basePlacement === 'top') {\n      popper.left += offsets[0];\n      popper.top -= offsets[1];\n    } else if (basePlacement === 'bottom') {\n      popper.left += offsets[0];\n      popper.top += offsets[1];\n    }\n\n    data.popper = popper;\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function preventOverflow(data, options) {\n    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n    // If offsetParent is the reference element, we really want to\n    // go one step up and use the next offsetParent as reference to\n    // avoid to make this modifier completely useless and look like broken\n    if (data.instance.reference === boundariesElement) {\n      boundariesElement = getOffsetParent(boundariesElement);\n    }\n\n    // NOTE: DOM access here\n    // resets the popper's position so that the document size can be calculated excluding\n    // the size of the popper element itself\n    var transformProp = getSupportedPropertyName('transform');\n    var popperStyles = data.instance.popper.style; // assignment to help minification\n    var top = popperStyles.top,\n        left = popperStyles.left,\n        transform = popperStyles[transformProp];\n\n    popperStyles.top = '';\n    popperStyles.left = '';\n    popperStyles[transformProp] = '';\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n    // NOTE: DOM access here\n    // restores the original style properties after the offsets have been computed\n    popperStyles.top = top;\n    popperStyles.left = left;\n    popperStyles[transformProp] = transform;\n\n    options.boundaries = boundaries;\n\n    var order = options.priority;\n    var popper = data.offsets.popper;\n\n    var check = {\n      primary: function primary(placement) {\n        var value = popper[placement];\n        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n          value = Math.max(popper[placement], boundaries[placement]);\n        }\n        return defineProperty({}, placement, value);\n      },\n      secondary: function secondary(placement) {\n        var mainSide = placement === 'right' ? 'left' : 'top';\n        var value = popper[mainSide];\n        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n        }\n        return defineProperty({}, mainSide, value);\n      }\n    };\n\n    order.forEach(function (placement) {\n      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n      popper = _extends({}, popper, check[side](placement));\n    });\n\n    data.offsets.popper = popper;\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function shift(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var shiftvariation = placement.split('-')[1];\n\n    // if shift shiftvariation is specified, run the modifier\n    if (shiftvariation) {\n      var _data$offsets = data.offsets,\n          reference = _data$offsets.reference,\n          popper = _data$offsets.popper;\n\n      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n      var side = isVertical ? 'left' : 'top';\n      var measurement = isVertical ? 'width' : 'height';\n\n      var shiftOffsets = {\n        start: defineProperty({}, side, reference[side]),\n        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n      };\n\n      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function hide(data) {\n    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n      return data;\n    }\n\n    var refRect = data.offsets.reference;\n    var bound = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'preventOverflow';\n    }).boundaries;\n\n    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === true) {\n        return data;\n      }\n\n      data.hide = true;\n      data.attributes['x-out-of-boundaries'] = '';\n    } else {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === false) {\n        return data;\n      }\n\n      data.hide = false;\n      data.attributes['x-out-of-boundaries'] = false;\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function inner(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n    data.placement = getOppositePlacement(placement);\n    data.offsets.popper = getClientRect(popper);\n\n    return data;\n  }\n\n  /**\n   * Modifier function, each modifier can have a function of this type assigned\n   * to its `fn` property.<br />\n   * These functions will be called on each update, this means that you must\n   * make sure they are performant enough to avoid performance bottlenecks.\n   *\n   * @function ModifierFn\n   * @argument {dataObject} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {dataObject} The data object, properly modified\n   */\n\n  /**\n   * Modifiers are plugins used to alter the behavior of your poppers.<br />\n   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n   * needed by the library.\n   *\n   * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n   * All the other properties are configurations that could be tweaked.\n   * @namespace modifiers\n   */\n  var modifiers = {\n    /**\n     * Modifier used to shift the popper on the start or end of its reference\n     * element.<br />\n     * It will read the variation of the `placement` property.<br />\n     * It can be one either `-end` or `-start`.\n     * @memberof modifiers\n     * @inner\n     */\n    shift: {\n      /** @prop {number} order=100 - Index used to define the order of execution */\n      order: 100,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: shift\n    },\n\n    /**\n     * The `offset` modifier can shift your popper on both its axis.\n     *\n     * It accepts the following units:\n     * - `px` or unit-less, interpreted as pixels\n     * - `%` or `%r`, percentage relative to the length of the reference element\n     * - `%p`, percentage relative to the length of the popper element\n     * - `vw`, CSS viewport width unit\n     * - `vh`, CSS viewport height unit\n     *\n     * For length is intended the main axis relative to the placement of the popper.<br />\n     * This means that if the placement is `top` or `bottom`, the length will be the\n     * `width`. In case of `left` or `right`, it will be the `height`.\n     *\n     * You can provide a single value (as `Number` or `String`), or a pair of values\n     * as `String` divided by a comma or one (or more) white spaces.<br />\n     * The latter is a deprecated method because it leads to confusion and will be\n     * removed in v2.<br />\n     * Additionally, it accepts additions and subtractions between different units.\n     * Note that multiplications and divisions aren't supported.\n     *\n     * Valid examples are:\n     * ```\n     * 10\n     * '10%'\n     * '10, 10'\n     * '10%, 10'\n     * '10 + 10%'\n     * '10 - 5vh + 3%'\n     * '-10px + 5vh, 5px - 6%'\n     * ```\n     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    offset: {\n      /** @prop {number} order=200 - Index used to define the order of execution */\n      order: 200,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: offset,\n      /** @prop {Number|String} offset=0\n       * The offset value as described in the modifier description\n       */\n      offset: 0\n    },\n\n    /**\n     * Modifier used to prevent the popper from being positioned outside the boundary.\n     *\n     * A scenario exists where the reference itself is not within the boundaries.<br />\n     * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n     * In this case we need to decide whether the popper should either:\n     *\n     * - detach from the reference and remain \"trapped\" in the boundaries, or\n     * - if it should ignore the boundary and \"escape with its reference\"\n     *\n     * When `escapeWithReference` is set to`true` and reference is completely\n     * outside its boundaries, the popper will overflow (or completely leave)\n     * the boundaries in order to remain attached to the edge of the reference.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    preventOverflow: {\n      /** @prop {number} order=300 - Index used to define the order of execution */\n      order: 300,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: preventOverflow,\n      /**\n       * @prop {Array} [priority=['left','right','top','bottom']]\n       * Popper will try to prevent overflow following these priorities by default,\n       * then, it could overflow on the left and on top of the `boundariesElement`\n       */\n      priority: ['left', 'right', 'top', 'bottom'],\n      /**\n       * @prop {number} padding=5\n       * Amount of pixel used to define a minimum distance between the boundaries\n       * and the popper. This makes sure the popper always has a little padding\n       * between the edges of its container\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='scrollParent'\n       * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n       * `viewport` or any DOM element.\n       */\n      boundariesElement: 'scrollParent'\n    },\n\n    /**\n     * Modifier used to make sure the reference and its popper stay near each other\n     * without leaving any gap between the two. Especially useful when the arrow is\n     * enabled and you want to ensure that it points to its reference element.\n     * It cares only about the first axis. You can still have poppers with margin\n     * between the popper and its reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    keepTogether: {\n      /** @prop {number} order=400 - Index used to define the order of execution */\n      order: 400,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: keepTogether\n    },\n\n    /**\n     * This modifier is used to move the `arrowElement` of the popper to make\n     * sure it is positioned between the reference element and its popper element.\n     * It will read the outer size of the `arrowElement` node to detect how many\n     * pixels of conjunction are needed.\n     *\n     * It has no effect if no `arrowElement` is provided.\n     * @memberof modifiers\n     * @inner\n     */\n    arrow: {\n      /** @prop {number} order=500 - Index used to define the order of execution */\n      order: 500,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: arrow,\n      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n      element: '[x-arrow]'\n    },\n\n    /**\n     * Modifier used to flip the popper's placement when it starts to overlap its\n     * reference element.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     *\n     * **NOTE:** this modifier will interrupt the current update cycle and will\n     * restart it if it detects the need to flip the placement.\n     * @memberof modifiers\n     * @inner\n     */\n    flip: {\n      /** @prop {number} order=600 - Index used to define the order of execution */\n      order: 600,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: flip,\n      /**\n       * @prop {String|Array} behavior='flip'\n       * The behavior used to change the popper's placement. It can be one of\n       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n       * placements (with optional variations)\n       */\n      behavior: 'flip',\n      /**\n       * @prop {number} padding=5\n       * The popper will flip if it hits the edges of the `boundariesElement`\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='viewport'\n       * The element which will define the boundaries of the popper position.\n       * The popper will never be placed outside of the defined boundaries\n       * (except if `keepTogether` is enabled)\n       */\n      boundariesElement: 'viewport'\n    },\n\n    /**\n     * Modifier used to make the popper flow toward the inner of the reference element.\n     * By default, when this modifier is disabled, the popper will be placed outside\n     * the reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    inner: {\n      /** @prop {number} order=700 - Index used to define the order of execution */\n      order: 700,\n      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n      enabled: false,\n      /** @prop {ModifierFn} */\n      fn: inner\n    },\n\n    /**\n     * Modifier used to hide the popper when its reference element is outside of the\n     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n     * be used to hide with a CSS selector the popper when its reference is\n     * out of boundaries.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * @memberof modifiers\n     * @inner\n     */\n    hide: {\n      /** @prop {number} order=800 - Index used to define the order of execution */\n      order: 800,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: hide\n    },\n\n    /**\n     * Computes the style that will be applied to the popper element to gets\n     * properly positioned.\n     *\n     * Note that this modifier will not touch the DOM, it just prepares the styles\n     * so that `applyStyle` modifier can apply it. This separation is useful\n     * in case you need to replace `applyStyle` with a custom implementation.\n     *\n     * This modifier has `850` as `order` value to maintain backward compatibility\n     * with previous versions of Popper.js. Expect the modifiers ordering method\n     * to change in future major versions of the library.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    computeStyle: {\n      /** @prop {number} order=850 - Index used to define the order of execution */\n      order: 850,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: computeStyle,\n      /**\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: true,\n      /**\n       * @prop {string} [x='bottom']\n       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n       * Change this if your popper should grow in a direction different from `bottom`\n       */\n      x: 'bottom',\n      /**\n       * @prop {string} [x='left']\n       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n       * Change this if your popper should grow in a direction different from `right`\n       */\n      y: 'right'\n    },\n\n    /**\n     * Applies the computed styles to the popper element.\n     *\n     * All the DOM manipulations are limited to this modifier. This is useful in case\n     * you want to integrate Popper.js inside a framework or view library and you\n     * want to delegate all the DOM manipulations to it.\n     *\n     * Note that if you disable this modifier, you must make sure the popper element\n     * has its position set to `absolute` before Popper.js can do its work!\n     *\n     * Just disable this modifier and define your own to achieve the desired effect.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    applyStyle: {\n      /** @prop {number} order=900 - Index used to define the order of execution */\n      order: 900,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: applyStyle,\n      /** @prop {Function} */\n      onLoad: applyStyleOnLoad,\n      /**\n       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: undefined\n    }\n  };\n\n  /**\n   * The `dataObject` is an object containing all the information used by Popper.js.\n   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n   * @name dataObject\n   * @property {Object} data.instance The Popper.js instance\n   * @property {String} data.placement Placement applied to popper\n   * @property {String} data.originalPlacement Placement originally defined on init\n   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.boundaries Offsets of the popper boundaries\n   * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n   */\n\n  /**\n   * Default options provided to Popper.js constructor.<br />\n   * These can be overridden using the `options` argument of Popper.js.<br />\n   * To override an option, simply pass an object with the same\n   * structure of the `options` object, as the 3rd argument. For example:\n   * ```\n   * new Popper(ref, pop, {\n   *   modifiers: {\n   *     preventOverflow: { enabled: false }\n   *   }\n   * })\n   * ```\n   * @type {Object}\n   * @static\n   * @memberof Popper\n   */\n  var Defaults = {\n    /**\n     * Popper's placement.\n     * @prop {Popper.placements} placement='bottom'\n     */\n    placement: 'bottom',\n\n    /**\n     * Set this to true if you want popper to position it self in 'fixed' mode\n     * @prop {Boolean} positionFixed=false\n     */\n    positionFixed: false,\n\n    /**\n     * Whether events (resize, scroll) are initially enabled.\n     * @prop {Boolean} eventsEnabled=true\n     */\n    eventsEnabled: true,\n\n    /**\n     * Set to true if you want to automatically remove the popper when\n     * you call the `destroy` method.\n     * @prop {Boolean} removeOnDestroy=false\n     */\n    removeOnDestroy: false,\n\n    /**\n     * Callback called when the popper is created.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onCreate}\n     */\n    onCreate: function onCreate() {},\n\n    /**\n     * Callback called when the popper is updated. This callback is not called\n     * on the initialization/creation of the popper, but only on subsequent\n     * updates.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onUpdate}\n     */\n    onUpdate: function onUpdate() {},\n\n    /**\n     * List of modifiers used to modify the offsets before they are applied to the popper.\n     * They provide most of the functionalities of Popper.js.\n     * @prop {modifiers}\n     */\n    modifiers: modifiers\n  };\n\n  /**\n   * @callback onCreate\n   * @param {dataObject} data\n   */\n\n  /**\n   * @callback onUpdate\n   * @param {dataObject} data\n   */\n\n  // Utils\n  // Methods\n  var Popper = function () {\n    /**\n     * Creates a new Popper.js instance.\n     * @class Popper\n     * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n     * @param {HTMLElement} popper - The HTML element used as the popper\n     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n     * @return {Object} instance - The generated Popper.js instance\n     */\n    function Popper(reference, popper) {\n      var _this = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      classCallCheck(this, Popper);\n\n      this.scheduleUpdate = function () {\n        return requestAnimationFrame(_this.update);\n      };\n\n      // make update() debounced, so that it only runs at most once-per-tick\n      this.update = debounce(this.update.bind(this));\n\n      // with {} we create a new object with the options inside it\n      this.options = _extends({}, Popper.Defaults, options);\n\n      // init state\n      this.state = {\n        isDestroyed: false,\n        isCreated: false,\n        scrollParents: []\n      };\n\n      // get reference and popper elements (allow jQuery wrappers)\n      this.reference = reference && reference.jquery ? reference[0] : reference;\n      this.popper = popper && popper.jquery ? popper[0] : popper;\n\n      // Deep merge modifiers options\n      this.options.modifiers = {};\n      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n      });\n\n      // Refactoring modifiers' list (Object => Array)\n      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n        return _extends({\n          name: name\n        }, _this.options.modifiers[name]);\n      })\n      // sort the modifiers by order\n      .sort(function (a, b) {\n        return a.order - b.order;\n      });\n\n      // modifiers have the ability to execute arbitrary code when Popper.js get inited\n      // such code is executed in the same order of its modifier\n      // they could add new properties to their options configuration\n      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n      this.modifiers.forEach(function (modifierOptions) {\n        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n        }\n      });\n\n      // fire the first update to position the popper in the right place\n      this.update();\n\n      var eventsEnabled = this.options.eventsEnabled;\n      if (eventsEnabled) {\n        // setup event listeners, they will take care of update the position in specific situations\n        this.enableEventListeners();\n      }\n\n      this.state.eventsEnabled = eventsEnabled;\n    }\n\n    // We can't use class properties because they don't get listed in the\n    // class prototype and break stuff like Sinon stubs\n\n\n    createClass(Popper, [{\n      key: 'update',\n      value: function update$$1() {\n        return update.call(this);\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy$$1() {\n        return destroy.call(this);\n      }\n    }, {\n      key: 'enableEventListeners',\n      value: function enableEventListeners$$1() {\n        return enableEventListeners.call(this);\n      }\n    }, {\n      key: 'disableEventListeners',\n      value: function disableEventListeners$$1() {\n        return disableEventListeners.call(this);\n      }\n\n      /**\n       * Schedules an update. It will run on the next UI update available.\n       * @method scheduleUpdate\n       * @memberof Popper\n       */\n\n\n      /**\n       * Collection of utilities useful when writing custom modifiers.\n       * Starting from version 1.7, this method is available only if you\n       * include `popper-utils.js` before `popper.js`.\n       *\n       * **DEPRECATION**: This way to access PopperUtils is deprecated\n       * and will be removed in v2! Use the PopperUtils module directly instead.\n       * Due to the high instability of the methods contained in Utils, we can't\n       * guarantee them to follow semver. Use them at your own risk!\n       * @static\n       * @private\n       * @type {Object}\n       * @deprecated since version 1.8\n       * @member Utils\n       * @memberof Popper\n       */\n\n    }]);\n    return Popper;\n  }();\n\n  /**\n   * The `referenceObject` is an object that provides an interface compatible with Popper.js\n   * and lets you use it as replacement of a real DOM node.<br />\n   * You can use this method to position a popper relatively to a set of coordinates\n   * in case you don't have a DOM node to use as reference.\n   *\n   * ```\n   * new Popper(referenceObject, popperNode);\n   * ```\n   *\n   * NB: This feature isn't supported in Internet Explorer 10.\n   * @name referenceObject\n   * @property {Function} data.getBoundingClientRect\n   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n   * @property {number} data.clientWidth\n   * An ES6 getter that will return the width of the virtual reference element.\n   * @property {number} data.clientHeight\n   * An ES6 getter that will return the height of the virtual reference element.\n   */\n\n\n  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n  Popper.placements = placements;\n  Popper.Defaults = Defaults;\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/bootstrap/dist/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, function (exports, $, Popper) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery/LICENSE.txt",
    "content": "Copyright JS Foundation and other contributors, https://js.foundation/\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/jquery/jquery\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nAll files located in the node_modules and external directories are\nexternally maintained libraries used by this software which have their\nown licenses; we recommend you read them, as their terms may differ from\nthe terms above.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery/dist/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery-validation/LICENSE.md",
    "content": "The MIT License (MIT)\n=====================\n\nCopyright Jörn Zaefferer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery-validation/dist/additional-methods.js",
    "content": "/*!\n * jQuery Validation Plugin v1.17.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2017 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n( function() {\n\n\tfunction stripHtml( value ) {\n\n\t\t// Remove html tags and space chars\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( /&nbsp;|&#160;/gi, \" \" )\n\n\t\t// Remove punctuation\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\" );\n\t}\n\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\n\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\n\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\n\t\tvar valueStripped = stripHtml( value ),\n\t\t\tregex = /\\b\\w+\\b/g;\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\n\n}() );\n\n// Accept a value from a file input based on a required mimetype\n$.validator.addMethod( \"accept\", function( value, element, param ) {\n\n\t// Split mime on commas in case we have multiple types we can accept\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\n\t\toptionalValue = this.optional( element ),\n\t\ti, file, regex;\n\n\t// Element is optional\n\tif ( optionalValue ) {\n\t\treturn optionalValue;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\n\t\t// Escape string to be used in the regex\n\t\t// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\n\t\ttypeParam = typeParam\n\t\t\t\t.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" )\n\t\t\t\t.replace( /,/g, \"|\" )\n\t\t\t\t.replace( /\\/\\*/g, \"/.*\" );\n\n\t\t// Check if the element has a FileList before checking each file\n\t\tif ( element.files && element.files.length ) {\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\n\t\t\t\tfile = element.files[ i ];\n\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\n\t\t\t\tif ( !file.type.match( regex ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Either return true because we've validated each file, or because the\n\t// browser does not support element.files and the FileList feature\n\treturn true;\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\n\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\n}, \"Letters, numbers, and underscores only please\" );\n\n/*\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\n * and pass the '11 check'.\n * We accept the notation with spaces, as that is common.\n * acceptable: 123456789 or 12 34 56 789\n */\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\n\t\treturn false;\n\t}\n\n\t// Now '11 check'\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\n\t\tsum = 0,\n\t\tlen = account.length,\n\t\tpos, factor, digit;\n\tfor ( pos = 0; pos < len; pos++ ) {\n\t\tfactor = len - pos;\n\t\tdigit = account.substring( pos, pos + 1 );\n\t\tsum = sum + factor * digit;\n\t}\n\treturn sum % 11 === 0;\n}, \"Please specify a valid bank account number\" );\n\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) ||\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\n}, \"Please specify a valid bank or giro account number\" );\n\n/**\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\n *\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n *\n * BIC definition in detail:\n * - First 4 characters - bank code (only letters)\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\n * - Next 2 characters - location code (letters and digits)\n *   a. shall not start with '0' or '1'\n *   b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\n */\n$.validator.addMethod( \"bic\", function( value, element ) {\n    return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\n}, \"Please specify a valid BIC code\" );\n\n/*\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\n *\n * Spanish CIF structure:\n *\n * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]\n *\n * Where:\n *\n * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]\n * P: 2 characters. Province.\n * N: 5 characters. Secuencial Number within the province.\n * C: 1 character. Control Digit: [0-9A-J].\n *\n * [ T ]: Kind of Organizations. Possible values:\n *\n *   A. Corporations\n *   B. LLCs\n *   C. General partnerships\n *   D. Companies limited partnerships\n *   E. Communities of goods\n *   F. Cooperative Societies\n *   G. Associations\n *   H. Communities of homeowners in horizontal property regime\n *   J. Civil Societies\n *   K. Old format\n *   L. Old format\n *   M. Old format\n *   N. Nonresident entities\n *   P. Local authorities\n *   Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions\n *   R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\n *   S. Organs of State Administration and regions\n *   V. Agrarian Transformation\n *   W. Permanent establishments of non-resident in Spain\n *\n * [ C ]: Control Digit. It can be a number or a letter depending on T value:\n * [ T ]  -->  [ C ]\n * ------    ----------\n *   A         Number\n *   B         Number\n *   E         Number\n *   H         Number\n *   K         Letter\n *   P         Letter\n *   Q         Letter\n *   S         Letter\n *\n */\n$.validator.addMethod( \"cifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi );\n\tvar letter  = value.substring( 0, 1 ), // [ T ]\n\t\tnumber  = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\n\t\tcontrol = value.substring( 8, 9 ), // [ C ]\n\t\tall_sum = 0,\n\t\teven_sum = 0,\n\t\todd_sum = 0,\n\t\ti, n,\n\t\tcontrol_digit,\n\t\tcontrol_letter;\n\n\tfunction isOdd( n ) {\n\t\treturn n % 2 === 0;\n\t}\n\n\t// Quick format test\n\tif ( value.length !== 9 || !cifRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = 0; i < number.length; i++ ) {\n\t\tn = parseInt( number[ i ], 10 );\n\n\t\t// Odd positions\n\t\tif ( isOdd( i ) ) {\n\n\t\t\t// Odd positions are multiplied first.\n\t\t\tn *= 2;\n\n\t\t\t// If the multiplication is bigger than 10 we need to adjust\n\t\t\todd_sum += n < 10 ? n : n - 9;\n\n\t\t// Even positions\n\t\t// Just sum them\n\t\t} else {\n\t\t\teven_sum += n;\n\t\t}\n\t}\n\n\tall_sum = even_sum + odd_sum;\n\tcontrol_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();\n\tcontrol_digit = parseInt( control_digit, 10 ) > 9 ? \"0\" : control_digit;\n\tcontrol_letter = \"JABCDEFGHI\".substr( control_digit, 1 ).toString();\n\n\t// Control must be a digit\n\tif ( letter.match( /[ABEH]/ ) ) {\n\t\treturn control === control_digit;\n\n\t// Control must be a letter\n\t} else if ( letter.match( /[KPQS]/ ) ) {\n\t\treturn control === control_letter;\n\t}\n\n\t// Can be either\n\treturn control === control_digit || control === control_letter;\n\n}, \"Please specify a valid CIF number.\" );\n\n/*\n * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cpfBR\", function( value ) {\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\tvar sum = 0,\n\t\tfirstCN, secondCN, checkResult, i;\n\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\n\n\tcheckResult = function( sum, cn ) {\n\t\tvar result = ( sum * 10 ) % 11;\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\n\t\t\tresult = 0;\n\t\t}\n\t\treturn ( result === cn );\n\t};\n\n\t// Checking for dump data\n\tif ( value === \"\" ||\n\t\tvalue === \"00000000000\" ||\n\t\tvalue === \"11111111111\" ||\n\t\tvalue === \"22222222222\" ||\n\t\tvalue === \"33333333333\" ||\n\t\tvalue === \"44444444444\" ||\n\t\tvalue === \"55555555555\" ||\n\t\tvalue === \"66666666666\" ||\n\t\tvalue === \"77777777777\" ||\n\t\tvalue === \"88888888888\" ||\n\t\tvalue === \"99999999999\"\n\t) {\n\t\treturn false;\n\t}\n\n\t// Step 1 - using first Check Number:\n\tfor ( i = 1; i <= 9; i++ ) {\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\n\t}\n\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\n\tif ( checkResult( sum, firstCN ) ) {\n\t\tsum = 0;\n\t\tfor ( i = 1; i <= 10; i++ ) {\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\n\t\t}\n\t\treturn checkResult( sum, secondCN );\n\t}\n\treturn false;\n\n}, \"Please specify a valid CPF number\" );\n\n// https://jqueryvalidation.org/creditcard-method/\n// based on https://en.wikipedia.org/wiki/Luhn_algorithm\n$.validator.addMethod( \"creditcard\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn \"dependency-mismatch\";\n\t}\n\n\t// Accept only spaces, digits and dashes\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvar nCheck = 0,\n\t\tnDigit = 0,\n\t\tbEven = false,\n\t\tn, cDigit;\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\t// Basing min and max length on\n\t// https://developer.ean.com/general_info/Valid_Credit_Card_Types\n\tif ( value.length < 13 || value.length > 19 ) {\n\t\treturn false;\n\t}\n\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\n\t\tcDigit = value.charAt( n );\n\t\tnDigit = parseInt( cDigit, 10 );\n\t\tif ( bEven ) {\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\tnDigit -= 9;\n\t\t\t}\n\t\t}\n\n\t\tnCheck += nDigit;\n\t\tbEven = !bEven;\n\t}\n\n\treturn ( nCheck % 10 ) === 0;\n}, \"Please enter a valid credit card number.\" );\n\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\n * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\n */\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\n\tif ( /[^0-9\\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\tvar validTypes = 0x0000;\n\n\tif ( param.mastercard ) {\n\t\tvalidTypes |= 0x0001;\n\t}\n\tif ( param.visa ) {\n\t\tvalidTypes |= 0x0002;\n\t}\n\tif ( param.amex ) {\n\t\tvalidTypes |= 0x0004;\n\t}\n\tif ( param.dinersclub ) {\n\t\tvalidTypes |= 0x0008;\n\t}\n\tif ( param.enroute ) {\n\t\tvalidTypes |= 0x0010;\n\t}\n\tif ( param.discover ) {\n\t\tvalidTypes |= 0x0020;\n\t}\n\tif ( param.jcb ) {\n\t\tvalidTypes |= 0x0040;\n\t}\n\tif ( param.unknown ) {\n\t\tvalidTypes |= 0x0080;\n\t}\n\tif ( param.all ) {\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n\t}\n\tif ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\n\t\treturn value.length === 14;\n\t}\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0080 ) { // Unknown\n\t\treturn true;\n\t}\n\treturn false;\n}, \"Please enter a valid credit card number.\" );\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n *  currency: [\"£\", false] - Use false for soft currency validation\n *  currency: [\"$\", false]\n *  currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n *  <input class=\"currencyInput\" name=\"currencyInput\">\n *\n * Soft symbol checking\n *  currencyInput: {\n *     currency: [\"$\", false]\n *  }\n *\n * Strict symbol checking (default)\n *  currencyInput: {\n *     currency: \"$\"\n *     //OR\n *     currency: [\"$\", true]\n *  }\n *\n * Multiple Symbols\n *  currencyInput: {\n *     currency: \"$,£,¢\"\n *  }\n */\n$.validator.addMethod( \"currency\", function( value, element, param ) {\n    var isParamString = typeof param === \"string\",\n        symbol = isParamString ? param : param[ 0 ],\n        soft = isParamString ? true : param[ 1 ],\n        regex;\n\n    symbol = symbol.replace( /,/g, \"\" );\n    symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n    regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\n    regex = new RegExp( regex );\n    return this.optional( element ) || regex.test( value );\n\n}, \"Please specify a valid currency\" );\n\n$.validator.addMethod( \"dateFA\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\n}, $.validator.messages.date );\n\n/**\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\n *\n * @example $.validator.methods.date(\"01/01/1900\")\n * @result true\n *\n * @example $.validator.methods.date(\"01/13/1990\")\n * @result false\n *\n * @example $.validator.methods.date(\"01.01.1900\")\n * @result false\n *\n * @example <input name=\"pippo\" class=\"{dateITA:true}\" />\n * @desc Declares an optional input element whose value must be a valid date.\n *\n * @name $.validator.methods.dateITA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"dateITA\", function( value, element ) {\n\tvar check = false,\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n\t\tadata, gg, mm, aaaa, xdata;\n\tif ( re.test( value ) ) {\n\t\tadata = value.split( \"/\" );\n\t\tgg = parseInt( adata[ 0 ], 10 );\n\t\tmm = parseInt( adata[ 1 ], 10 );\n\t\taaaa = parseInt( adata[ 2 ], 10 );\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\n\t\t\tcheck = true;\n\t\t} else {\n\t\t\tcheck = false;\n\t\t}\n\t} else {\n\t\tcheck = false;\n\t}\n\treturn this.optional( element ) || check;\n}, $.validator.messages.date );\n\n$.validator.addMethod( \"dateNL\", function( value, element ) {\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\n}, $.validator.messages.date );\n\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\n$.validator.addMethod( \"extension\", function( value, element, param ) {\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\n\n/**\n * Dutch giro account numbers (not bank numbers) have max 7 digits\n */\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\n}, \"Please specify a valid giro account number\" );\n\n/**\n * IBAN is the international bank account number.\n * It has a country - specific format, that is checked here too\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n */\n$.validator.addMethod( \"iban\", function( value, element ) {\n\n\t// Some quick simple tests to prevent needless work\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Remove spaces and to upper case\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\n\t\tibancheckdigits = \"\",\n\t\tleadingZeroes = true,\n\t\tcRest = \"\",\n\t\tcOperator = \"\",\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\n\n\t// Check for IBAN code length.\n\t// It contains:\n\t// country code ISO 3166-1 - two letters,\n\t// two check digits,\n\t// Basic Bank Account Number (BBAN) - up to 30 chars\n\tvar minimalIBANlength = 5;\n\tif ( iban.length < minimalIBANlength ) {\n\t\treturn false;\n\t}\n\n\t// Check the country code and find the country specific format\n\tcountrycode = iban.substring( 0, 2 );\n\tbbancountrypatterns = {\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\n\t\t\"AT\": \"\\\\d{16}\",\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\n\t\t\"BE\": \"\\\\d{12}\",\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\n\t\t\"BA\": \"\\\\d{16}\",\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\n\t\t\"CR\": \"\\\\d{17}\",\n\t\t\"HR\": \"\\\\d{17}\",\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"CZ\": \"\\\\d{20}\",\n\t\t\"DK\": \"\\\\d{14}\",\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\n\t\t\"EE\": \"\\\\d{16}\",\n\t\t\"FO\": \"\\\\d{14}\",\n\t\t\"FI\": \"\\\\d{14}\",\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\n\t\t\"DE\": \"\\\\d{18}\",\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\n\t\t\"GL\": \"\\\\d{14}\",\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\n\t\t\"HU\": \"\\\\d{24}\",\n\t\t\"IS\": \"\\\\d{22}\",\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\n\t\t\"IL\": \"\\\\d{19}\",\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"LT\": \"\\\\d{16}\",\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\n\t\t\"MR\": \"\\\\d{23}\",\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\n\t\t\"ME\": \"\\\\d{18}\",\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\n\t\t\"NO\": \"\\\\d{11}\",\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\n\t\t\"PL\": \"\\\\d{24}\",\n\t\t\"PT\": \"\\\\d{21}\",\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\n\t\t\"RS\": \"\\\\d{18}\",\n\t\t\"SK\": \"\\\\d{20}\",\n\t\t\"SI\": \"\\\\d{15}\",\n\t\t\"ES\": \"\\\\d{20}\",\n\t\t\"SE\": \"\\\\d{20}\",\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"TN\": \"\\\\d{20}\",\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\n\t};\n\n\tbbanpattern = bbancountrypatterns[ countrycode ];\n\n\t// As new countries will start using IBAN in the\n\t// future, we only check if the countrycode is known.\n\t// This prevents false negatives, while almost all\n\t// false positives introduced by this, will be caught\n\t// by the checksum validation below anyway.\n\t// Strict checking should return FALSE for unknown\n\t// countries.\n\tif ( typeof bbanpattern !== \"undefined\" ) {\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\n\t\t\treturn false; // Invalid country specific format\n\t\t}\n\t}\n\n\t// Now check the checksum, first convert to digits\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\n\t\tcharAt = ibancheck.charAt( i );\n\t\tif ( charAt !== \"0\" ) {\n\t\t\tleadingZeroes = false;\n\t\t}\n\t\tif ( !leadingZeroes ) {\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\n\t\t}\n\t}\n\n\t// Calculate the result of: ibancheckdigits % 97\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\n\t\tcChar = ibancheckdigits.charAt( p );\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\n\t\tcRest = cOperator % 97;\n\t}\n\treturn cRest === 1;\n}, \"Please specify a valid IBAN\" );\n\n$.validator.addMethod( \"integer\", function( value, element ) {\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\n}, \"A positive or negative non-decimal number please\" );\n\n$.validator.addMethod( \"ipv4\", function( value, element ) {\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\n}, \"Please enter a valid IP v4 address.\" );\n\n$.validator.addMethod( \"ipv6\", function( value, element ) {\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\n}, \"Please enter a valid IP v6 address.\" );\n\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\n}, \"Letters only please\" );\n\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\n}, \"Letters or punctuation only please\" );\n\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid mobile number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\n}, \"Please specify a valid mobile number\" );\n\n$.validator.addMethod( \"netmask\", function( value, element ) {\n    return this.optional( element ) || /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)/i.test( value );\n}, \"Please enter a valid netmask.\" );\n\n/*\n * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish\n * authorities to any foreigner.\n *\n * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal\n * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to\n * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.\n */\n$.validator.addMethod( \"nieES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );\n\tvar validChars = \"TRWAGMYFPDXBNJZSQVHLCKET\",\n\t\tletter = value.substr( value.length - 1 ).toUpperCase(),\n\t\tnumber;\n\n\tvalue = value.toString().toUpperCase();\n\n\t// Quick format test\n\tif ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\t// X means same number\n\t// Y means number + 10000000\n\t// Z means number + 20000000\n\tvalue = value.replace( /^[X]/, \"0\" )\n\t\t.replace( /^[Y]/, \"1\" )\n\t\t.replace( /^[Z]/, \"2\" );\n\n\tnumber = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );\n\n\treturn validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;\n\n}, \"Please specify a valid NIE number.\" );\n\n/*\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\n */\n$.validator.addMethod( \"nifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIF\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\n\t}\n\n\t// Test specials NIF (starts with K, L or M)\n\tif ( /^[KLM]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 1 ) % 23 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIF number.\" );\n\n/*\n * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies\n */\n$.validator.addMethod( \"nipPL\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.replace( /[^0-9]/g, \"\" );\n\n\tif ( value.length !== 10 ) {\n\t\treturn false;\n\t}\n\n\tvar arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];\n\tvar intSum = 0;\n\tfor ( var i = 0; i < 9; i++ ) {\n\t\tintSum += arrSteps[ i ] * value[ i ];\n\t}\n\tvar int2 = intSum % 11;\n\tvar intControlNr = ( int2 === 10 ) ? 0 : int2;\n\n\treturn ( intControlNr === parseInt( value[ 9 ], 10 ) );\n}, \"Please specify a valid NIP number.\" );\n\n$.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\n}, \"Please enter a different value, values must not be the same.\" );\n\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\n}, \"No white space please\" );\n\n/**\n* Return true if the field value matches the given format RegExp\n*\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\n* @result true\n*\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\n* @result false\n*\n* @name $.validator.methods.pattern\n* @type Boolean\n* @cat Plugins/Validate/Methods\n*/\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( typeof param === \"string\" ) {\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\n\t}\n\treturn param.test( value );\n}, \"Invalid format.\" );\n\n/**\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\n */\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\n}, \"Please specify a valid uk phone number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\n}, \"Please specify a valid phone number\" );\n\n/**\n * Matches US phone number format\n *\n * where the area code may not start with 1 and the prefix may not start with 1\n * allows '-' or ' ' as a separator and allows parens around area code\n * some people may want to put a '1' in front of their number\n *\n * 1(212)-999-2345 or\n * 212 999 2344 or\n * 212-999-0983\n *\n * but not\n * 111-123-5434\n * and not\n * 212 123 4567\n */\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]([02-9]\\d|1[02-9])-?\\d{4}$/ );\n}, \"Please specify a valid phone number\" );\n\n/*\n* Valida CEPs do brasileiros:\n*\n* Formatos aceitos:\n* 99999-999\n* 99.999-999\n* 99999999\n*/\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\n}, \"Informe um CEP válido.\" );\n\n/**\n * Matches a valid Canadian Postal Code\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\n * @result true\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\n * @result false\n *\n * @name jQuery.validator.methods.postalCodeCA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\n}, \"Please specify a valid postal code\" );\n\n/* Matches Italian postcode (CAP) */\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\n}, \"Please specify a valid UK postcode\" );\n\n/*\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\n *\n * The end result is that neither of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\n *\t...will validate unless at least one of them is filled.\n *\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\n * description: {require_from_group: [1,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n */\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\n\t\tisValid = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\n\n\t// If element isn't being validated, run each require_from_group field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\n\n/*\n * Lets you say \"either at least X inputs that match selector Y must be filled,\n * OR they must all be skipped (left blank).\"\n *\n * The end result, is that none of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\t<input class=\"productinfo\" name=\"color\">\n *\n *\t...will validate unless either at least two of them are filled,\n *\tOR none of them are.\n *\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n *\n */\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\n\t\tnumberFilled = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length,\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_skip\", validator );\n\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\n\n/* Validates US States and/or Territories by @jdforsythe\n * Can be case insensitive or require capitalization - default is case insensitive\n * Can include US Territories or not - default does not\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\n *\n * Note: \"States\" always includes DC (District of Colombia)\n *\n * Usage examples:\n *\n *  This is the default - case insensitive, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false,\n *     includeTerritories: false,\n *     includeMilitary: false\n *  }\n *\n *  Only allow capital letters, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false\n *  }\n *\n *  Case insensitive, include territories but not military zones\n *  stateInput: {\n *     includeTerritories: true\n *  }\n *\n *  Only allow capital letters, include territories and military zones\n *  stateInput: {\n *     caseSensitive: true,\n *     includeTerritories: true,\n *     includeMilitary: true\n *  }\n *\n */\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\n\tvar isDefault = typeof options === \"undefined\",\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\n\t\tregex;\n\n\tif ( !includeTerritories && !includeMilitary ) {\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t} else if ( includeTerritories && includeMilitary ) {\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else if ( includeTerritories ) {\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else {\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t}\n\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\n\treturn this.optional( element ) || regex.test( value );\n}, \"Please specify a valid state\" );\n\n// TODO check if value starts with <, otherwise don't try stripping anything\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\n\treturn $( value ).text().length >= param;\n}, $.validator.format( \"Please enter at least {0} characters\" ) );\n\n$.validator.addMethod( \"time\", function( value, element ) {\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\n}, \"Please enter a valid time, between 00:00 and 23:59\" );\n\n$.validator.addMethod( \"time12h\", function( value, element ) {\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\n}, \"Please enter a valid time in 12-hour am/pm format\" );\n\n// Same as url, but TLD is optional\n$.validator.addMethod( \"url2\", function( value, element ) {\n\treturn this.optional( element ) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\n}, $.validator.messages.url );\n\n/**\n * Return true, if the value is a valid vehicle identification number (VIN).\n *\n * Works with all kind of text inputs.\n *\n * @example <input type=\"text\" size=\"20\" name=\"VehicleID\" class=\"{required:true,vinUS:true}\" />\n * @desc Declares a required input element whose value must be a valid vehicle identification number.\n *\n * @name $.validator.methods.vinUS\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"vinUS\", function( v ) {\n\tif ( v.length !== 17 ) {\n\t\treturn false;\n\t}\n\n\tvar LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\n\t\tVL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\n\t\tFL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\n\t\trs = 0,\n\t\ti, n, d, f, cd, cdv;\n\n\tfor ( i = 0; i < 17; i++ ) {\n\t\tf = FL[ i ];\n\t\td = v.slice( i, i + 1 );\n\t\tif ( i === 8 ) {\n\t\t\tcdv = d;\n\t\t}\n\t\tif ( !isNaN( d ) ) {\n\t\t\td *= f;\n\t\t} else {\n\t\t\tfor ( n = 0; n < LL.length; n++ ) {\n\t\t\t\tif ( d.toUpperCase() === LL[ n ] ) {\n\t\t\t\t\td = VL[ n ];\n\t\t\t\t\td *= f;\n\t\t\t\t\tif ( isNaN( cdv ) && n === 8 ) {\n\t\t\t\t\t\tcdv = LL[ n ];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trs += d;\n\t}\n\tcd = rs % 11;\n\tif ( cd === 10 ) {\n\t\tcd = \"X\";\n\t}\n\tif ( cd === cdv ) {\n\t\treturn true;\n\t}\n\treturn false;\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\n\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\n}, \"The specified US ZIP Code is invalid\" );\n\n$.validator.addMethod( \"ziprange\", function( value, element ) {\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx\" );\nreturn $;\n}));"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery-validation/dist/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.17.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2017 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t//   - A user defined a `submitHandler`\n\t\t\t\t\t//   - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t//     was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!$.trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift       => 16\n\t\t\t// Ctrl        => 17\n\t\t\t// Alt         => 18\n\t\t\t// Caps lock   => 20\n\t\t\t// End         => 35\n\t\t\t// Home        => 36\n\t\t\t// Left arrow  => 37\n\t\t\t// Up arrow    => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow  => 40\n\t\t\t// Insert      => 45\n\t\t\t// Num lock    => 144\n\t\t\t// AltGr key   => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\tif ( typeof val !== \"string\" ) {\n\t\t\t\t\tthrow new TypeError( \"The normalizer should return a string value.\" );\n\t\t\t\t}\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \".  Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t//     method: \"method name\",\n\t\t//     parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\n}));"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt",
    "content": "Copyright (c) .NET Foundation. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthese files except in compliance with the License. You may obtain a copy of the\nLicense at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/AspNetSamples/CoreDemo/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js",
    "content": "// Unobtrusive validation support library for jQuery and jQuery Validate\n// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// @version v3.2.11\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // CommonJS-like environments that support module.exports     \n        module.exports = factory(require('jquery-validation'));\n    } else {\n        // Browser global\n        jQuery.validator.unobtrusive = factory(jQuery);\n    }\n}(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\");\n\n        if (container) {\n            var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n                replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this),\n            key = '__jquery_unobtrusive_validation_form_reset';\n        if ($form.data(key)) {\n            return;\n        }\n        // Set a flag that indicates we're currently resetting the form.\n        $form.data(key, true);\n        try {\n            $form.data(\"validator\").resetForm();\n        } finally {\n            $form.removeData(key);\n        }\n\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n            .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            };\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                    .addBack()\n                    .filter(\"form\")\n                    .add($selector.find(\"form\"))\n                    .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\n                // For checkboxes and radio buttons, only pick up values from checked fields.\n                if (field.is(\":checkbox\")) {\n                    return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\n                }\n                else if (field.is(\":radio\")) {\n                    return field.filter(\":checked\").val() || '';\n                }\n                return field.val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n    adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\n        setValidationValues(options, \"extension\", options.params.extensions);\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n\n    return $jQval.unobtrusive;\n}));\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/AccountActivityDemos.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class AccountActivityDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tAdding Webhook...\\n\");\n                        await AddWebhookAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing Webhooks....\\n\");\n                        await ListWebhooksAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tDeleting Webhook...\\n\");\n                        await DeleteWebhookAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tSending Challenge Response Check...\\n\");\n                        await SendChallengeResponseCheckAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tAdding subscription...\\n\");\n                        await AddSubscriptionAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tShowing subscriptions...\\n\");\n                        await ShowSubscriptionsAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tDeleting subscription...\\n\");\n                        await DeleteSubscriptionAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nAccount Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Add Webhook\");\n            Console.WriteLine(\"\\t 1. List Webhooks\");\n            Console.WriteLine(\"\\t 2. Delete Webhook\");\n            Console.WriteLine(\"\\t 3. Send Challenge Response Check\");\n            Console.WriteLine(\"\\t 4. Add Subscription\");\n            Console.WriteLine(\"\\t 5. List Subscriptions\");\n            Console.WriteLine(\"\\t 6. Delete Subscription\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task AddWebhookAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                Console.Write(\"What is the Webhook URL? \");\n                string url = Console.ReadLine();\n\n                AccountActivity accAct = await twitterCtx.AddAccountActivityWebhookAsync(url);\n\n                Webhook webhook = accAct.WebhooksValue.Webhooks.SingleOrDefault();\n                Console.WriteLine(\n                    $\"Webhook for '{webhook.Url}' \" +\n                    $\"added with ID: {webhook.ID}, \" +\n                    $\"created at {webhook.CreatedTimestamp}\");\n            }\n            catch (TwitterQueryException tqe)\n            {\n                Console.WriteLine(tqe.Message);\n            }\n        }\n\n        static async Task ListWebhooksAsync(TwitterContext twitterCtx)\n        {\n            var webhooksResponse =\n                await\n                (from acct in twitterCtx.AccountActivity\n                 where acct.Type == AccountActivityType.Webhooks\n                 select acct)\n                .SingleOrDefaultAsync();\n\n            if (webhooksResponse?.WebhooksValue?.Webhooks != null)\n            {\n                Console.WriteLine(\"Webhooks:\");\n\n                if (webhooksResponse.WebhooksValue.Webhooks.Any())\n                    foreach (var webhook in webhooksResponse.WebhooksValue.Webhooks)\n                        Console.WriteLine(\n                            $\"ID: {webhook.ID}, \" +\n                            $\"Created: {webhook.CreatedTimestamp}, \" +\n                            $\"Valid: {webhook.Valid}, \" +\n                            $\"URL: {webhook.Url}\");\n                else\n                    Console.WriteLine(\"No webhooks registered\");\n            }\n        }\n\n        static async Task DeleteWebhookAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            var acctActivity = await twitterCtx.DeleteAccountActivityWebhookAsync(webhookID);\n\n            Console.WriteLine($\"Webhook, {acctActivity.WebhookID}, has been deleted.\");\n        }\n\n        static async Task SendChallengeResponseCheckAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            try\n            {\n                AccountActivity accAct = await twitterCtx.SendAccountActivityCrcAsync(webhookID);\n\n                Console.WriteLine(\"Challenge response check succeeded.\");\n            }\n            catch (TwitterQueryException tqEx) // Twitter returns a 3XX when it can't delete, which throws\n            {\n                Console.WriteLine($\"Challenge response check failed: {tqEx.Message}\");\n            }\n        }\n\n        static async Task AddSubscriptionAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            try\n            {\n                AccountActivity accAct = await twitterCtx.AddAccountActivitySubscriptionAsync(webhookID);\n\n                Console.WriteLine(\"Subscription added.\");\n            }\n            catch (TwitterQueryException tqEx) // Twitter returns a 3XX or 4XX when it can't add, which throws\n            {\n                Console.WriteLine($\"Unable to add subscription: {tqEx.Message}\");\n            }\n        }\n\n        static async Task ShowSubscriptionsAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            bool isSubscribed = false;\n\n            try\n            {\n                var accAct =\n                    await\n                    (from act in twitterCtx.AccountActivity\n                     where act.Type == AccountActivityType.Subscriptions &&\n                           act.WebhookID == webhookID\n                     select act)\n                    .SingleOrDefaultAsync();\n\n                isSubscribed = accAct?.SubscriptionValue?.IsSubscribed ?? false;\n\n                Console.WriteLine($\"IsSubscribed: {isSubscribed}\");\n            }\n            catch (TwitterQueryException) // Twitter returns a 4XX when not subscribed, which throws\n            {\n                Console.WriteLine(\"Your user account is not subscribed.\");\n            }\n        }\n\n        static async Task DeleteSubscriptionAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            try\n            {\n                AccountActivity accAct = await twitterCtx.DeleteAccountActivitySubscriptionAsync(webhookID);\n\n                Console.WriteLine(\"Subscription deleted.\");\n            }\n            catch (TwitterQueryException tqEx) // Twitter returns a 3XX when it can't delete, which throws\n            {\n                Console.WriteLine($\"Unable to delete subscription: {tqEx.Message}\");\n            }\n        }\n\n        /// <summary>\n        /// Asks user for a webhook\n        /// </summary>\n        /// <remarks>\n        /// Tip: Do AccountActivtyType.Webhooks query for a list of webhooks.\n        /// </remarks>\n        /// <returns>Webhook as ulong</returns>\n        static ulong GetWebhook()\n        {\n            Console.Write(\"Webhook ID? \");\n            string webhookIDString = Console.ReadLine();\n            ulong.TryParse(webhookIDString, out ulong webhookID);\n            return webhookID;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/AccountDemos.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class AccountDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tVerifying Credentials...\\n\");\n                        await VerifyCredentialsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tRequesting settings....\\n\");\n                        await AccountSettingsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tUpdating image...\\n\");\n                        await UpdateAccountImageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUpdating account...\\n\");\n                        await UpdateAccountProfileAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tUpdating account...\\n\");\n                        await UpdateAccountSettingsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tUpdating banner...\\n\");\n                        await UpdateProfileBannerAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tRemoving banner...\\n\");\n                        await RemoveProfileBannerAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nAccount Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Verify Credentials\");\n            Console.WriteLine(\"\\t 1. Get Account Settings\");\n            Console.WriteLine(\"\\t 2. Update Account Image\");\n            Console.WriteLine(\"\\t 3. Update Account Profile\");\n            Console.WriteLine(\"\\t 4. Update Account Settings\");\n            Console.WriteLine(\"\\t 5. Update Profile Banner\");\n            Console.WriteLine(\"\\t 6. Remove Profile Banner\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task VerifyCredentialsAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var verifyResponse =\n                    await\n                        (from acct in twitterCtx.Account\n                         where acct.Type == AccountType.VerifyCredentials\n                         select acct)\n                        .SingleOrDefaultAsync();\n\n                if (verifyResponse != null && verifyResponse.User != null)\n                {\n                    User user = verifyResponse.User;\n\n                    Console.WriteLine(\n                        \"Credentials are good for {0}.\",\n                        user.ScreenNameResponse); \n                }\n            }\n            catch (TwitterQueryException tqe)\n            {\n                Console.WriteLine(tqe.Message);\n            }\n        }\n\n        static async Task AccountSettingsAsync(TwitterContext twitterCtx)\n        {\n            var settingsResponse =\n                await\n                (from acct in twitterCtx.Account\n                 where acct.Type == AccountType.Settings\n                 select acct)\n                .SingleOrDefaultAsync();\n\n            if (settingsResponse != null && \n                settingsResponse.Settings != null &&\n                settingsResponse.Settings.TrendLocation != null &&\n                settingsResponse.Settings.SleepTime != null)\n            {\n                var settings = settingsResponse.Settings;\n\n                Console.WriteLine(\n                    \"Trend Location: {0}\\nGeo Enabled: {1}\\nSleep Enabled: {2}\",\n                    settings.TrendLocation.Name,\n                    settings.GeoEnabled,\n                    settings.SleepTime.Enabled); \n            }\n        }\n\n        static async Task UpdateAccountImageAsync(TwitterContext twitterCtx)\n        {\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\Images\\200xColor_2.png\");\n\n            var user = await twitterCtx.UpdateAccountImageAsync(\n                imageBytes, \"200xColor_2.png\", \"png\", false);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileImageUrl); \n        }\n\n        static async Task UpdateAccountProfileAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.UpdateAccountProfileAsync(\n                name: \"Joe Mayo\",\n                url: \"https://github.com/JoeMayo/LinqToTwitter\",\n                location: \"Las Vegas, NV\",\n                description: \"Testing the Account Profile Update with LINQ to Twitter.\",\n                includeEntities: true,\n                skipStatus: true);\n\n            if (user != null)\n                Console.WriteLine(\n                    \"Name: {0}\\nURL: {1}\\nLocation: {2}\\nDescription: {3}\",\n                    user.Name, user.Url, user.Location, user.Description); \n        }\n\n        static async Task UpdateAccountSettingsAsync(TwitterContext twitterCtx)\n        {\n            Account acct = \n                await twitterCtx.UpdateAccountSettingsAsync(\n                    null, true, 20, 6, null, null);\n\n            if (acct != null && \n                acct.Settings != null && \n                acct.Settings.SleepTime != null)\n            {\n                SleepTime sleep = acct.Settings.SleepTime;\n                Console.WriteLine(\n                    \"Enabled: {0}, Start: {1}, End: {2}\",\n                    sleep.Enabled, sleep.StartHour, sleep.EndHour); \n            }\n        }\n        \n        static async Task UpdateProfileBannerAsync(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = File.ReadAllBytes(@\"..\\..\\images\\13903749474_86bd1290de_o.jpg\");\n\n            var user = await twitterCtx.UpdateProfileBannerAsync(fileBytes, 1500, 500, 0, 0);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileBannerUrl); \n        }\n\n        static async Task RemoveProfileBannerAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.RemoveProfileBannerAsync();\n\n            if (user != null)\n                Console.WriteLine(\"Profile Banner: \" + user.ProfileBannerUrl ?? \"None\"); \n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/BlockDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class BlockDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tListing blocked Users...\\n\");\n                        await ListBlockedUsersAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing blocked IDs...\\n\");\n                        await ListBlockIDsAsyc(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tBlocking user...\\n\");\n                        await CreateBlockAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUnblocking user...\\n\");\n                        await DestroyBlockAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nBlock Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. List Blocked Users\");\n            Console.WriteLine(\"\\t 1. List Blocked IDs\");\n            Console.WriteLine(\"\\t 2. Block a User\");\n            Console.WriteLine(\"\\t 3. Unblock a User\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ListBlockedUsersAsync(TwitterContext twitterCtx)\n        {\n            var blockResponse =\n                await\n                    (from block in twitterCtx.Blocks\n                     where block.Type == BlockingType.List\n                     select block)\n                    .SingleOrDefaultAsync();\n\n            if (blockResponse != null && blockResponse.Users != null)\n                blockResponse.Users.ForEach(user =>\n                        Console.WriteLine(user.ScreenNameResponse)); \n        }\n        \n        static async Task ListBlockIDsAsyc(TwitterContext twitterCtx)\n        {\n            var result =\n                await\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.Ids\n                 select blockItem)\n                .SingleOrDefaultAsync();\n\n            if (result != null && result.IDs != null)\n                result.IDs.ForEach(block => Console.WriteLine(\"ID: {0}\", block)); \n        }\n\n        static async Task CreateBlockAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Block: \");\n            string userName = Console.ReadLine();\n\n            var user = await twitterCtx.CreateBlockAsync(0, userName, true);\n\n            if (user != null)\n                Console.WriteLine(\"User Name: \" + user.Name);\n        }\n\n        static async Task DestroyBlockAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Unblock: \");\n            string userName = Console.ReadLine();\n\n            var user = await twitterCtx.DestroyBlockAsync(0, userName, true);\n\n            if (user != null) \n                Console.WriteLine(\"User Name: \" + user.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/ConsoleSamples.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n    <Version>5.1.3</Version>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\..\\src\\LinqToTwitter5\\LinqToTwitter.Core\\LinqToTwitter.Core.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/DirectMessageDemos.cs",
    "content": "﻿//using System;\n//using System.Linq;\n//using System.Threading.Tasks;\n//using LinqToTwitter;\n//using System.Collections.Generic;\n\n//namespace Linq2TwitterDemos_Console\n//{\n//    class DirectMessageDemos\n//    {\n//        internal static async Task RunAsync(TwitterContext twitterCtx)\n//        {\n//            char key;\n\n//            do\n//            {\n//                ShowMenu();\n\n//                key = Console.ReadKey(true).KeyChar;\n\n//                switch (key)\n//                {\n//                    case '0':\n//                        Console.WriteLine(\"\\n\\tShowing sent DMs...\\n\");\n//                        await ShowSentDMsAsync(twitterCtx);\n//                        break;\n//                    case '1':\n//                        Console.WriteLine(\"\\n\\tShowing received DMs...\\n\");\n//                        await ShowReceivedDMsAsync(twitterCtx);\n//                        break;\n//                    case '2':\n//                        Console.WriteLine(\"\\n\\tShowing DM...\\n\");\n//                        await ShowSpecificDMAsync(twitterCtx);\n//                        break;\n//                    case '3':\n//                        Console.WriteLine(\"\\n\\tSending DM...\\n\");\n//                        await NewDirectMessageAsync(twitterCtx);\n//                        break;\n//                    case '4':\n//                        Console.WriteLine(\"\\n\\tShowing DM...\\n\");\n//                        await DestroyDirectMessageAsync(twitterCtx);\n//                        break;\n//                    case '5':\n//                        Console.WriteLine(\"\\n\\tSending Long DM...\\n\");\n//                        await NewLongDirectMessageAsync(twitterCtx);\n//                        break;\n//                    case 'q':\n//                    case 'Q':\n//                        Console.WriteLine(\"\\nReturning...\\n\");\n//                        break;\n//                    default:\n//                        Console.WriteLine(key + \" is unknown\");\n//                        break;\n//                }\n\n//            } while (char.ToUpper(key) != 'Q');\n//        }\n\n//        static void ShowMenu()\n//        {\n//            Console.WriteLine(\"\\nDirect Message Demos - Please select:\\n\");\n\n//            Console.WriteLine(\"\\t 0. Sent DMs\");\n//            Console.WriteLine(\"\\t 1. Received DMs\");\n//            Console.WriteLine(\"\\t 2. Show DM\");\n//            Console.WriteLine(\"\\t 3. Send DM\");\n//            Console.WriteLine(\"\\t 4. Delete DM\");\n//            Console.WriteLine(\"\\t 5. Send and Receive Long DM\");\n//            Console.WriteLine();\n//            Console.Write(\"\\t Q. Return to Main menu\");\n//        }\n\n//        static async Task ShowSentDMsAsync(TwitterContext twitterCtx)\n//        {\n//            List<DirectMessage> dmResponse =\n//                await\n//                    (from dm in twitterCtx.DirectMessage\n//                     where dm.Type == DirectMessageType.SentBy\n//                     select dm)\n//                    .ToListAsync();\n\n//            if (dmResponse != null)\n//                dmResponse.ForEach(dm => \n//                {\n//                    if (dm != null && dm.Recipient != null)\n//                        Console.WriteLine(\n//                            \"Name: {0}, Tweet: {1}\",\n//                            dm.Recipient.ScreenNameResponse, dm.Text);\n//                });\n//        }\n\n//        static async Task ShowReceivedDMsAsync(TwitterContext twitterCtx)\n//        {\n//            List<DirectMessage> dmResponse =\n//                await\n//                    (from dm in twitterCtx.DirectMessage\n//                     where dm.Type == DirectMessageType.SentTo\n//                     select dm)\n//                    .ToListAsync();\n\n//            if (dmResponse != null)\n//                dmResponse.ForEach(dm => \n//                {\n//                    if (dm != null && dm.Recipient != null)\n//                        Console.WriteLine(\n//                            \"Name: {0}, Tweet: {1}\",\n//                            dm.Recipient.ScreenNameResponse, dm.Text);\n//                });\n//        }\n\n//        static async Task ShowSpecificDMAsync(TwitterContext twitterCtx)\n//        {\n//            DirectMessage dmResponse =\n//                await\n//                    (from dm in twitterCtx.DirectMessage\n//                     where dm.Type == DirectMessageType.Show &&\n//                           dm.ID == 2078013265\n//                     select dm)\n//                    .SingleOrDefaultAsync();\n\n//            if (dmResponse != null &&\n//                dmResponse.Recipient != null &&\n//                dmResponse.Sender != null)\n//            {\n//                Console.WriteLine(\n//                    \"From: {0}\\nTo:  {1}\\nMessage: {2}\",\n//                    dmResponse.Sender.Name,\n//                    dmResponse.Recipient.Name,\n//                    dmResponse.Text);\n//            }\n//        }\n\n//        static async Task DestroyDirectMessageAsync(TwitterContext twitterCtx)\n//        {\n//            DirectMessage message = \n//                await twitterCtx.DestroyDirectMessageAsync(\n//                    243563161037455360ul, true);\n\n//            if (message != null)\n//                Console.WriteLine(\n//                    \"Recipient: {0}, Message: {1}\",\n//                    message.RecipientScreenName,\n//                    message.Text);\n//        }\n\n//        static async Task NewDirectMessageAsync(TwitterContext twitterCtx)\n//        {\n//            DirectMessage message = await twitterCtx.NewDirectMessageAsync(\n//                \"Linq2Twitr\", \"Direct Message Test - \" + DateTime.Now + \"!'\");\n\n//            if (message != null)\n//                Console.WriteLine(\n//                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n//                    message.RecipientScreenName,\n//                    message.Text,\n//                    message.CreatedAt);\n//        }\n\n//        static async Task NewLongDirectMessageAsync(TwitterContext twitterCtx)\n//        {\n//            string messageOver140Characters = \n//                string.Join(\"-\", Enumerable.Repeat(\"XXXX\", 35)) + \" - \" + DateTime.Now;\n//            DirectMessage message = \n//                await twitterCtx.NewDirectMessageAsync(\"Linq2Twitr\", messageOver140Characters);\n\n//            DirectMessage dmResponse =\n//                await\n//                    (from dm in twitterCtx.DirectMessage\n//                     where dm.Type == DirectMessageType.Show &&\n//                           dm.ID == message.IDResponse &&\n//                           dm.FullText == true // required for full text, otherwise text truncates to 140\n//                     select dm)\n//                    .SingleOrDefaultAsync();\n\n//            if (dmResponse != null &&\n//                dmResponse.Recipient != null &&\n//                dmResponse.Sender != null)\n//            {\n//                Console.WriteLine(\n//                    \"From: {0}\\nTo:  {1}\\nMessage: {2}\",\n//                    dmResponse.Sender.Name,\n//                    dmResponse.Recipient.Name,\n//                    dmResponse.Text);\n//            }\n//        }\n//    }\n//}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/DirectMessageEventsDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class DirectMessageEventsDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing DMs...\\n\");\n                        await ShowDirectMessagesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing DMs...\\n\");\n                        await ListDirectMessagesAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tSending DM...\\n\");\n                        await NewDirectMessageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tDeleting DM...\\n\");\n                        await DeleteDirectMessageAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tSending DM with media...\\n\");\n                        await NewDirectMessageWithMediaAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tSending DM with media...\\n\");\n                        await NewDirectMessageWithCoordinatesAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tSending DM with media...\\n\");\n                        await NewDirectMessageWithPlaceAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tSending Quick Reply Location...\\n\");\n                        await RequestQuickReplyOptionsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tSending Button Choice...\\n\");\n                        await RequestButtonChoiceAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tSending Typing Indicator...\\n\");\n                        await SendTypingIndicatorAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tSending Message Read...\\n\");\n                        await SendMessageReadAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nDirect Message Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Direct Messages\");\n            Console.WriteLine(\"\\t 1. List Direct Messages\");\n            Console.WriteLine(\"\\t 2. Send Direct Message\");\n            Console.WriteLine(\"\\t 3. Delete Direct Message\");\n            Console.WriteLine(\"\\t 4. Send Direct Message with Media\");\n            Console.WriteLine(\"\\t 5. Send Direct Message with Coordinates\");\n            Console.WriteLine(\"\\t 6. Send Direct Message with Place\");\n            Console.WriteLine(\"\\t 7. Send Quick Reply with Options\");\n            Console.WriteLine(\"\\t 8. Send Button Choice\");\n            Console.WriteLine(\"\\t 9. Send Typing Indicator\");\n            Console.WriteLine(\"\\t A. Send Message Read\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowDirectMessagesAsync(TwitterContext twitterCtx)\n        {\n            DirectMessageEvents dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessageEvents\n                     where dm.Type == DirectMessageEventsType.Show &&\n                           dm.ID == 917929712638246916\n                     select dm)\n                    .SingleOrDefaultAsync();\n\n            DirectMessageCreate msgCreate = dmResponse?.Value?.DMEvent?.MessageCreate;\n\n            if (dmResponse != null && msgCreate != null)\n                Console.WriteLine(\n                    \"From ID: {0}\\nTo ID:  {1}\\nMessage Text: {2}\",\n                    msgCreate.SenderID ?? \"None\",\n                    msgCreate.Target.RecipientID ?? \"None\",\n                    msgCreate.MessageData.Text ?? \"None\");\n        }\n\n        static async Task ListDirectMessagesAsync(TwitterContext twitterCtx)\n        {\n            int count = 50; // set to a low number to demo paging\n            string cursor = \"\";\n            List<DMEvent> allDmEvents = new List<DMEvent>();\n\n            // you don't have a valid cursor until after the first query\n            DirectMessageEvents dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessageEvents\n                     where dm.Type == DirectMessageEventsType.List &&\n                           dm.Count == count\n                     select dm)\n                    .SingleOrDefaultAsync();\n\n            allDmEvents.AddRange(dmResponse.Value.DMEvents);\n            cursor = dmResponse.Value.NextCursor;\n\n            while (!string.IsNullOrWhiteSpace(cursor))\n            {\n                dmResponse =\n                    await\n                        (from dm in twitterCtx.DirectMessageEvents\n                         where dm.Type == DirectMessageEventsType.List &&\n                               dm.Count == count &&\n                               dm.Cursor == cursor\n                         select dm)\n                        .SingleOrDefaultAsync();\n\n                allDmEvents.AddRange(dmResponse.Value.DMEvents);\n                cursor = dmResponse.Value.NextCursor;\n            }\n\n            if (!allDmEvents.Any())\n            {\n                Console.WriteLine(\"No items returned\");\n                return;\n            }\n\n            Console.WriteLine($\"Response Count: {allDmEvents.Count}\");\n            Console.WriteLine(\"Responses:\");\n\n            allDmEvents.ForEach(evt =>\n            {\n                DirectMessageCreate msgCreate = evt.MessageCreate;\n\n                if (evt != null && msgCreate != null)\n                    Console.WriteLine(\n                        $\"DM ID: {evt.ID}\\n\" +\n                        $\"From ID: {msgCreate.SenderID ?? \"None\"}\\n\" +\n                        $\"To ID:  {msgCreate.Target?.RecipientID ?? \"None\"}\\n\" +\n                        $\"Message Text: {msgCreate.MessageData?.Text ?? \"None\"}\");\n            });\n        }\n\n        static async Task NewDirectMessageAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            DirectMessageEvents message = \n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID, \n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\");\n\n            DMEvent dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate.Target.RecipientID,\n                    dmEvent.MessageCreate.MessageData.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task DeleteDirectMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Which DM would you like to delete? (please enter DM ID): \");\n            string dmInput = Console.ReadLine();\n\n            ulong.TryParse(dmInput, out ulong dmID);\n\n            try\n            {\n                await twitterCtx.DeleteDirectMessageEventAsync(dmID);\n                Console.WriteLine(\"\\nDM Deleted\");\n            }\n            catch (TwitterQueryException tqEx)\n            {\n                Console.WriteLine($\"\\nProblem deleting DM: ({tqEx.ErrorCode}) - {tqEx.ReasonPhrase}\");\n            }\n        }\n\n        static async Task NewDirectMessageWithMediaAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n            string mediaCategory = \"dm_image\";\n\n            Media media = await twitterCtx.UploadMediaAsync(\n                File.ReadAllBytes(@\"..\\..\\images\\200xColor_2.png\"), \n                mediaType: \"image/png\", \n                additionalOwners: null, \n                mediaCategory: mediaCategory,\n                shared: true);\n\n            DirectMessageEvents message =\n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID,\n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\",\n                    media.MediaID);\n\n            DMEvent dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate.Target.RecipientID,\n                    dmEvent.MessageCreate.MessageData.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task NewDirectMessageWithCoordinatesAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            DirectMessageEvents message =\n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID,\n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\",\n                    latitude: -122.443893,\n                    longitude: 37.771718);\n\n            DMEvent dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate.Target.RecipientID,\n                    dmEvent.MessageCreate.MessageData.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task NewDirectMessageWithPlaceAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            DirectMessageEvents message =\n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID,\n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\",\n                    placeID: \"5a110d312052166f\");\n\n            DMEvent dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate.Target.RecipientID,\n                    dmEvent.MessageCreate.MessageData.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task RequestQuickReplyOptionsAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n            var options = new List<QuickReplyOption>\n            {\n                new QuickReplyOption\n                {\n                    Label = \"Option 1\",\n                    Description = \"Description for the first option.\",\n                    Metadata = \"abc001\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 2\",\n                    Description = \"Description for the second option.\",\n                    Metadata = \"abc002\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 3\",\n                    Description = \"Description for the third option.\",\n                    Metadata = \"abc003\"\n                },\n            };\n            DirectMessageEvents message =\n                await twitterCtx.RequestQuickReplyOptionsAsync(\n                    Linq2TwitrID,\n                    \"What is your choice?\",\n                    options);\n\n            DMEvent dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate.Target.RecipientID,\n                    dmEvent.MessageCreate.MessageData.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task RequestButtonChoiceAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            var buttons = new List<CallToAction>\n            {\n                new CallToAction\n                {\n                    Label = \"Visit LINQ to Twitter Website\",\n                    Url = \"https://github.com/JoeMayo/LinqToTwitter\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @JoeMayo on Twitter\",\n                    Url = \"https://twitter.com/JoeMayo\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @Linq2Twitr on Twitter\",\n                    Url = \"https://twitter.com/Linq2Twitr\",\n                    Type = \"web_url\"\n                }\n            };\n\n            DirectMessageEvents message =\n                await twitterCtx.RequestButtonChoiceAsync(\n                    Linq2TwitrID,\n                    \"Where would you like to go?\",\n                    buttons);\n\n            DMEvent dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate.Target.RecipientID,\n                    dmEvent.MessageCreate.MessageData.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task SendTypingIndicatorAsync(TwitterContext twitterCtx)\n        {\n            ulong recipientID = 15411837;\n\n            await twitterCtx.IndicateTypingAsync(recipientID);\n        }\n\n        static async Task SendMessageReadAsync(TwitterContext twitterCtx)\n        {\n            ulong recipientID = 15411837;\n            Console.Write(\"Which DM would you mark read? (please enter DM ID): \");\n            string dmInput = Console.ReadLine();\n\n            ulong.TryParse(dmInput, out ulong dmID);\n\n            try\n            {\n                await twitterCtx.MarkReadAsync(dmID, recipientID);\n                Console.WriteLine(\"\\nDM Marked as read.\");\n            }\n            catch (TwitterQueryException tqEx)\n            {\n                Console.WriteLine($\"\\nProblem Marking DM as read: ({tqEx.ErrorCode}) - {tqEx.ReasonPhrase}\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/FavoriteDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class FavoriteDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing favorites...\\n\");\n                        await ShowFavoritesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tFavoriting...\\n\");\n                        await CreateFavoriteAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tUnfavoriting...\\n\");\n                        await DestroyFavoriteAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nFavorite Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Favorites\");\n            Console.WriteLine(\"\\t 1. Favorite a tweet\");\n            Console.WriteLine(\"\\t 2. Unfavorite a tweet\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowFavoritesAsync(TwitterContext twitterCtx)\n        {\n            const int PerQueryFavCount = 200;\n\n            // set from a value that you previously saved\n            ulong sinceID = 1; \n\n            var favsResponse =\n                await\n                    (from fav in twitterCtx.Favorites\n                     where fav.Type == FavoritesType.Favorites &&\n                           fav.Count == PerQueryFavCount &&\n                           fav.TweetMode == TweetMode.Extended\n                     select fav)\n                    .ToListAsync();\n\n            if (favsResponse == null)\n            {\n                Console.WriteLine(\"No favorites returned from Twitter.\");\n                return;\n            }\n\n            var favList = new List<Favorites>(favsResponse);\n\n            // first tweet processed on current query\n            ulong maxID = favList.Min(fav => fav.StatusID) - 1;\n\n            do\n            {\n                favsResponse =\n                    await\n                        (from fav in twitterCtx.Favorites\n                         where fav.Type == FavoritesType.Favorites &&\n                               fav.Count == PerQueryFavCount &&\n                               fav.SinceID == sinceID &&\n                               fav.MaxID == maxID\n                         select fav)\n                        .ToListAsync();\n\n                if (favsResponse == null || favsResponse.Count == 0) break;\n\n                // reset first tweet to avoid re-querying the\n                // same list you just received\n                maxID = favsResponse.Min(fav => fav.StatusID) - 1;\n                favList.AddRange(favsResponse);\n\n            } while (favsResponse.Count > 0);\n\n            favList.ForEach(fav => \n            {\n                if (fav != null && fav.User != null)\n                    Console.WriteLine(\n                        \"Name: {0}, Tweet: {1}\",\n                        fav.User.ScreenNameResponse, fav.Text);\n            });\n\n            // save this in your db for this user so you can set\n            // sinceID accurately the next time you do a query\n            // and avoid querying the same tweets again.\n            ulong newSinceID = favList.Max(fav => fav.SinceID);\n        }\n\n        static async Task DestroyFavoriteAsync(TwitterContext twitterCtx)\n        {\n            var status = \n                await twitterCtx.DestroyFavoriteAsync(\n                    401033367283453953ul, true);\n\n            if (status != null)\n                Console.WriteLine(\n                    \"User: {0}, Tweet: {1}\", status.User.Name, status.Text);\n        }\n\n        static async Task CreateFavoriteAsync(TwitterContext twitterCtx)\n        {\n            var status = await twitterCtx.CreateFavoriteAsync(401033367283453953ul);\n\n            if (status != null)\n                Console.WriteLine(\n                    \"User: {0}, Tweet: {1}\", status.User.Name, status.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/FriendshipDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class FriendshipDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing friends...\\n\");\n                        await ShowFriendsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking up user ids...\\n\");\n                        await LookupUserIDsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting incoming...\\n\");\n                        await IncomingFriendshipsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting Outgoing...\\n\");\n                        await OutgoingFriendshipsAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tShowing no retweet IDs...\\n\");\n                        await NoRetweetIDsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting friends list...\\n\");\n                        await FriendsListAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting followers list...\\n\");\n                        await FollowersListAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tShowing followers ids...\\n\");\n                        await ShowFollowerIDsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tShowing friend ids...\\n\");\n                        await ShowFriendIDsAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tCreating friendship...\\n\");\n                        await CreateFriendshipAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tUnfollowing...\\n\");\n                        await DestroyFriendshipAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tUpdating friend settings...\\n\");\n                        await UpdateFreindshipSettingsAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nFriendship Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Friends\");\n            Console.WriteLine(\"\\t 1. Lookup Friendships\");\n            Console.WriteLine(\"\\t 2. Incoming Friendships\");\n            Console.WriteLine(\"\\t 3. Outgoing Friendships\");\n            Console.WriteLine(\"\\t 4. No Retweet IDs\");\n            Console.WriteLine(\"\\t 5. Friends List\");\n            Console.WriteLine(\"\\t 6. Followers List\");\n            Console.WriteLine(\"\\t 7. Follower IDs\");\n            Console.WriteLine(\"\\t 8. Friend IDs\");\n            Console.WriteLine(\"\\t 9. Create Friendship\");\n            Console.WriteLine(\"\\t A. Delete Friendship\");\n            Console.WriteLine(\"\\t B. Update Friendship Settings\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowFriendsAsync(TwitterContext twitterCtx)\n        {\n            var friendship =\n                await\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.Show &&\n                       friend.SourceScreenName == \"Linq2Twitr\" &&\n                       friend.TargetScreenName == \"JoeMayo\"\n                 select friend)\n                .SingleOrDefaultAsync();\n\n            if (friendship != null && \n                friendship.SourceRelationship != null && \n                friendship.TargetRelationship != null)\n            {\n                Console.WriteLine(\n                        \"\\nJoeMayo follows LinqToTweeter: \" +\n                        friendship.SourceRelationship.FollowedBy +\n                        \"\\nLinqToTweeter follows JoeMayo: \" +\n                        friendship.TargetRelationship.FollowedBy); \n            }\n        }\n\n        static async Task LookupUserIDsAsync(TwitterContext twitterCtx)\n        {\n            var relationships =\n                await\n                (from look in twitterCtx.Friendship\n                 where look.Type == FriendshipType.Lookup &&\n                       look.UserID == \"15411837,16761255\"\n                 select look.Relationships)\n                .SingleOrDefaultAsync();\n\n            if (relationships != null)\n                relationships.ForEach(rel => \n                    Console.WriteLine(\n                        \"Relationship to \" + rel.ScreenName + \n                        \", is Following: \" + rel.Following + \n                        \", Followed By: \" + rel.FollowedBy));\n        }\n\n        static async Task IncomingFriendshipsAsync(TwitterContext twitterCtx)\n        {\n            var request =\n                await\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Incoming\n                 select req)\n                .SingleOrDefaultAsync();\n\n            if (request != null && \n                request.IDInfo != null && \n                request.IDInfo.IDs != null)\n            {\n                request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n            }\n        }\n\n        static async Task OutgoingFriendshipsAsync(TwitterContext twitterCtx)\n        {\n            var request =\n                await\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Outgoing\n                 select req)\n                .SingleOrDefaultAsync();\n\n            if (request != null &&\n                request.IDInfo != null &&\n                request.IDInfo.IDs != null)\n            {\n                request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n            }\n        }\n\n        static async Task NoRetweetIDsAsync(TwitterContext twitterCtx)\n        {\n            var friendship =\n                await\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.NoRetweetIDs\n                 select friend)\n                .SingleOrDefaultAsync();\n\n            if (friendship != null && \n                friendship.IDInfo != null && \n                friendship.IDInfo.IDs != null)\n            {\n                var ids =\n                    (from id in friendship.IDInfo.IDs\n                     select id.ToString())\n                    .ToArray();\n\n                Console.WriteLine(\"\\nIDs: \" + string.Join(\",\", ids)); \n            }\n        }\n\n        static async Task FriendsListAsync(TwitterContext twitterCtx)\n        {\n            Friendship friendship;\n            long cursor = -1;\n            do\n            {\n                friendship =\n                    await\n                    (from friend in twitterCtx.Friendship\n                     where friend.Type == FriendshipType.FriendsList &&\n                           friend.ScreenName == \"JoeMayo\" &&\n                           friend.Cursor == cursor &&\n                           friend.Count == 200\n                     select friend)\n                    .SingleOrDefaultAsync();\n\n                if (friendship != null && \n                    friendship.Users != null && \n                    friendship.CursorMovement != null)\n                {\n                    cursor = friendship.CursorMovement.Next;\n\n                    friendship.Users.ForEach(friend =>\n                        Console.WriteLine(\n                            \"ID: {0} Name: {1}\",\n                            friend.UserIDResponse, friend.ScreenNameResponse)); \n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task FollowersListAsync(TwitterContext twitterCtx)\n        {\n            Friendship friendship;\n            long cursor = -1;\n            do\n            {\n                try\n                {\n                    friendship =\n                        await\n                        (from friend in twitterCtx.Friendship\n                         where friend.Type == FriendshipType.FollowersList &&\n                               friend.ScreenName == \"JoeMayo\" &&\n                               friend.Cursor == cursor\n                         select friend)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (friendship != null && friendship.Users != null)\n                {\n                    cursor = friendship.CursorMovement.Next;\n\n                    friendship.Users.ForEach(friend =>\n                        Console.WriteLine(\n                            \"ID: {0} Name: {1}\",\n                            friend.UserIDResponse, friend.ScreenNameResponse));\n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task ShowFollowerIDsAsync(TwitterContext twitterCtx)\n        {\n            Friendship followers;\n            long cursor = -1;\n            do\n            {\n                try\n                {\n                    followers =\n                        await\n                        (from follower in twitterCtx.Friendship\n                         where follower.Type == FriendshipType.FollowerIDs &&\n                               follower.UserID == \"15411837\" &&\n                               follower.Cursor == cursor &&\n                               follower.Count == 500\n                         select follower)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (followers != null && \n                    followers.IDInfo != null && \n                    followers.IDInfo.IDs != null)\n                {\n                    cursor = followers.CursorMovement.Next;\n\n                    followers.IDInfo.IDs.ForEach(id =>\n                        Console.WriteLine(\"Follower ID: \" + id)); \n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task ShowFriendIDsAsync(TwitterContext twitterCtx)\n        {\n            Friendship friendList;\n            long cursor = -1;\n            do\n            {\n                try\n                {\n                    friendList =\n                        await\n                        (from friend in twitterCtx.Friendship\n                         where friend.Type == FriendshipType.FriendIDs &&\n                               friend.ScreenName == \"JoeMayo\" &&\n                               friend.Cursor == cursor\n                         select friend)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (friendList != null &&\n                    friendList.IDInfo != null &&\n                    friendList.IDInfo.IDs != null)\n                {\n                    cursor = friendList.CursorMovement.Next;\n\n                    friendList.IDInfo.IDs.ForEach(id =>\n                        Console.WriteLine(\"Follower ID: \" + id));\n                }\n\n            } while (cursor != 0);\n        }\n\n        static async Task CreateFriendshipAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.CreateFriendshipAsync(\"JoeMayo\", true);\n\n            if (user != null && user.Status != null)\n                Console.WriteLine(\n                    \"User Name: {0}, Status: {1}\",\n                    user.Name,\n                    user.Status.Text);\n        }\n\n        static async Task DestroyFriendshipAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.DestroyFriendshipAsync(\"Linq2Twitr\");\n\n            if (user != null && user.Status != null)\n                Console.WriteLine(\n                    \"User Name: {0}, Status: {1}\",\n                    user.Name,\n                    user.Status.Text);\n        }\n\n        static async Task UpdateFreindshipSettingsAsync(TwitterContext twitterCtx)\n        {\n            Friendship friend = \n                await twitterCtx.UpdateFriendshipSettingsAsync(\n                    \"Linq2Twitr\", true, true);\n\n            if (friend != null && friend.SourceRelationship != null)\n                Console.WriteLine(\n                    \"Settings for {0} are: Can Retweet is {1} \" +\n                    \"and Can Send Device Notifications is {2}\",\n                    friend.SourceRelationship.ScreenName,\n                    friend.SourceRelationship.RetweetsWanted,\n                    friend.SourceRelationship.NotificationsEnabled);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/GeoDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class GeoDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching by IP...\\n\");\n                        await SearchByIPAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking for geo...\\n\");\n                        await LookupGeoIDAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tFinding reverse geocode...\\n\");\n                        await LookupReverseGeocodeAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tFinding similar places...\\n\");\n                        await FindSimilarPlacesAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nGeo Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search by IP\");\n            Console.WriteLine(\"\\t 1. Lookup Geo by ID\");\n            Console.WriteLine(\"\\t 2. Lookup Reverse Geocode\");\n            Console.WriteLine(\"\\t 3. Find Similar Places\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task SearchByIPAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                    (from geo in twitterCtx.Geo\n                     where geo.Type == GeoType.Search &&\n                           geo.IP == \"74.125.19.104\"\n                     select geo)\n                    .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n            {\n                Place place = geoResponse.Places.First();\n\n                Console.WriteLine(\n                    \"Name: {0}, Country: {1}, Type: {2}\",\n                    place.Name, place.Country, place.PlaceType); \n            }\n        }\n\n        static async Task LookupGeoIDAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.ID &&\n                       g.ID == \"5a110d312052166f\"\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n            {\n                Place place = geoResponse.Places.First();\n\n                Console.WriteLine(\n                    \"Name: {0}, Country: {1}, Type: {2}\",\n                    place.Name, place.Country, place.PlaceType);\n            }\n        }\n\n        static async Task LookupReverseGeocodeAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.Reverse &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n                geoResponse.Places.ForEach(place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n\n        static async Task FindSimilarPlacesAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.SimilarPlaces &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060 &&\n                       g.PlaceName == \"Twitter HQ\"\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n                geoResponse.Places.ForEach(place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/HelpDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class HelpDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting Rate Limits...\\n\");\n                        await GettingRateLimitsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting configuration...\\n\");\n                        await GetHelpConfigurationAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting languages...\\n\");\n                        await GetHelpLanguagesAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting privacy...\\n\");\n                        await GetPrivacyAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tGetting tos...\\n\");\n                        await GetTosAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nHelp Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Rate Limits\");\n            Console.WriteLine(\"\\t 1. Get Configuration\");\n            Console.WriteLine(\"\\t 2. Get Languages\");\n            Console.WriteLine(\"\\t 3. Get Privacy Policy\");\n            Console.WriteLine(\"\\t 4. Get Terms of Service\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GettingRateLimitsAsync(TwitterContext twitterCtx)\n        {\n            var helpResponse =\n                await\n                    (from help in twitterCtx.Help\n                     where help.Type == HelpType.RateLimits\n                     select help)\n                    .SingleOrDefaultAsync();\n\n            if (helpResponse != null && helpResponse.RateLimits != null)\n                foreach (var category in helpResponse.RateLimits)\n                {\n                    Console.WriteLine(\"\\nCategory: {0}\", category.Key);\n\n                    foreach (var limit in category.Value)\n                    {\n                        Console.WriteLine(\n                            \"\\n  Resource: {0}\\n    Remaining: {1}\\n    Reset: {2}\\n    Limit: {3}\",\n                            limit.Resource, limit.Remaining, limit.Reset, limit.Limit);\n                    }\n                }\n        }\n\n        static async Task GetHelpConfigurationAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Configuration\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null && \n                helpResult.Configuration != null && \n                helpResult.Configuration.NonUserNamePaths != null && \n                helpResult.Configuration.PhotoSizes != null)\n            {\n                Configuration cfg = helpResult.Configuration;\n\n                Console.WriteLine(\"Short URL Length: \" + cfg.ShortUrlLength);\n                Console.WriteLine(\"Short URL HTTPS Length: \" + cfg.ShortUrlLengthHttps);\n                Console.WriteLine(\"Non-UserName Paths: \");\n                foreach (var name in cfg.NonUserNamePaths)\n                {\n                    Console.WriteLine(\"\\t\" + name);\n                }\n                Console.WriteLine(\"Photo Size Limit: \" + cfg.PhotoSizeLimit);\n                Console.WriteLine(\"Max Media Per Upload: \" + cfg.MaxMediaPerUpload);\n                Console.WriteLine(\n                    \"Characters Reserved Per Media: \" + cfg.CharactersReservedPerMedia);\n                Console.WriteLine(\"Photo Sizes\");\n                foreach (var photo in cfg.PhotoSizes)\n                {\n                    Console.WriteLine(\"\\t\" + photo.Type);\n                    Console.WriteLine(\"\\t\\t\" + photo.Width);\n                    Console.WriteLine(\"\\t\\t\" + photo.Height);\n                    Console.WriteLine(\"\\t\\t\" + photo.Resize);\n                } \n            }\n        }\n\n        static async Task GetHelpLanguagesAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Languages\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null && helpResult.Languages != null)\n                helpResult.Languages.ForEach(lang => \n                    Console.WriteLine(\"{0}({1}): {2}\", lang.Name, lang.Code, lang.Status));\n        }\n\n        static async Task GetPrivacyAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Privacy\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null)\n                Console.WriteLine(helpResult.Policies);\n        }\n\n        static async Task GetTosAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Tos\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null)\n                Console.WriteLine(helpResult.Policies);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/ListDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class ListDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting Lists...\\n\");\n                        await GetListsForUserAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting statuses...\\n\");\n                        await GetListStatusesAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting members...\\n\");\n                        await GetListMembershipsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting subscribers...\\n\");\n                        await GetListSubscribersAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tChecking user subscription...\\n\");\n                        await ShowIsListSubscriberAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tChecing user membership...\\n\");\n                        await ShowIsListMemberAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting members...\\n\");\n                        await GetListMembersAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tShowing details...\\n\");\n                        await ShowListDetailsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tGetting subscriptions...\\n\");\n                        await GetListSubscriptionsAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tGetting ownership...\\n\");\n                        await GetOwnershipsAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tDeleting membership...\\n\");\n                        await DeleteMemberFromListAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tSubscribing...\\n\");\n                        await SubscribeToListAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tUnsubscribing...\\n\");\n                        await UnsubscribeFromListAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tAdding members...\\n\");\n                        await AddMemberRangeToListAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tAdding member...\\n\");\n                        await AddMemberToListAsync(twitterCtx);\n                        break;\n                    case 'f':\n                    case 'F':\n                        Console.WriteLine(\"\\n\\tDeleting list...\\n\");\n                        await DeleteListAsync(twitterCtx);\n                        break;\n                    case 'g':\n                    case 'G':\n                        Console.WriteLine(\"\\n\\tUpdating list...\\n\");\n                        await UpdateListAsync(twitterCtx);\n                        break;\n                    case 'h':\n                    case 'H':\n                        Console.WriteLine(\"\\n\\tCreating list...\\n\");\n                        await CreateListAsync(twitterCtx);\n                        break;\n                    case 'i':\n                    case 'I':\n                        Console.WriteLine(\"\\n\\tRemoving memberships...\\n\");\n                        await DeleteMemberRangeFromListAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nList Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Lists for User\");\n            Console.WriteLine(\"\\t 1. Get List Statuses\");\n            Console.WriteLine(\"\\t 2. Get List Memberships\");\n            Console.WriteLine(\"\\t 3. Get List Subscribers\");\n            Console.WriteLine(\"\\t 4. Check User Subscription\");\n            Console.WriteLine(\"\\t 5. Check User Membership\");\n            Console.WriteLine(\"\\t 6. Get List Members\");\n            Console.WriteLine(\"\\t 7. Show List Details.\");\n            Console.WriteLine(\"\\t 8. Get List Subscriptions\");\n            Console.WriteLine(\"\\t 9. Get List Ownership\");\n            Console.WriteLine(\"\\t A. Delete List Membership\");\n            Console.WriteLine(\"\\t B. Subscribe to List\");\n            Console.WriteLine(\"\\t C. Unsubscribe from List\");\n            Console.WriteLine(\"\\t D. Add Members to List\");\n            Console.WriteLine(\"\\t E. Add Member to List\");\n            Console.WriteLine(\"\\t F. Delete List\");\n            Console.WriteLine(\"\\t G. Update List\");\n            Console.WriteLine(\"\\t H. Create List\");\n            Console.WriteLine(\"\\t I. Remove Members from List\");\n\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetListsForUserAsync(TwitterContext twitterCtx)\n        {\n            string screenName = \"Linq2Twitr\";\n\n            var lists =\n                await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.List &&\n                           list.ScreenName == screenName\n                     select list)\n                    .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list => Console.WriteLine(\"Slug: \" + list.SlugResponse));\n        }\n\n        static async Task GetListStatusesAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            string slug = \"linq\";\n            int maxStatuses = 30;\n            int lastStatusCount = 0;\n            // last tweet processed on previous query\n            ulong sinceID = 204251866668871681; \n            ulong maxID;\n            int count = 10;\n            var statusList = new List<Status>();\n\n            // only count\n            var listResponse =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Statuses &&\n                       list.OwnerScreenName == ownerScreenName &&\n                       list.Slug == slug &&\n                       list.Count == count\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (listResponse != null && listResponse.Statuses != null)\n            {\n                List<Status> newStatuses = listResponse.Statuses;\n                // first tweet processed on current query\n                maxID = newStatuses.Min(status => status.StatusID) - 1; \n                statusList.AddRange(newStatuses);\n\n                do\n                {\n                    // now add sinceID and maxID\n                    listResponse =\n                        await\n                        (from list in twitterCtx.List\n                         where list.Type == ListType.Statuses &&\n                               list.OwnerScreenName == ownerScreenName &&\n                               list.Slug == slug &&\n                               list.Count == count &&\n                               list.SinceID == sinceID &&\n                               list.MaxID == maxID\n                         select list)\n                        .SingleOrDefaultAsync();\n\n                    if (listResponse == null)\n                        break;\n\n                    newStatuses = listResponse.Statuses;\n                    // first tweet processed on current query\n                    maxID = newStatuses.Min(status => status.StatusID) - 1; \n                    statusList.AddRange(newStatuses);\n\n                    lastStatusCount = newStatuses.Count;\n                }\n                while (lastStatusCount != 0 && statusList.Count < maxStatuses);\n\n                for (int i = 0; i < statusList.Count; i++)\n                {\n                    Status status = statusList[i];\n\n                    Console.WriteLine(\"{0, 4}. [{1}] User: {2}\\nStatus: {3}\",\n                        i + 1, status.StatusID, status.User.Name, status.Text);\n                }\n            }\n        }\n\n        static async Task GetListMembershipsAsync(TwitterContext twitterCtx)\n        {\n            long cursor = -1;\n            do\n            {\n                var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Memberships &&\n                       list.ScreenName == \"JoeMayo\" && // user to get memberships for\n                       list.Cursor == cursor\n                 select list)\n                .ToListAsync();\n\n                if (lists != null)\n                    lists.ForEach(list =>\n                        Console.WriteLine(\n                            \"List Name: {0}, Description: {1}\",\n                            list.Name, list.Description));\n\n                cursor = lists?.FirstOrDefault()?.CursorMovement?.Next ?? 0;\n\n            } while (cursor != 0);\n        }\n\n        static async Task GetListSubscribersAsync(TwitterContext twitterCtx)\n        {\n            var subscriberList =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Subscribers &&\n                       list.Slug == \"linq\" &&\n                       list.OwnerScreenName == \"Linq2Twitr\"\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (subscriberList != null && subscriberList.Users != null)\n                subscriberList.Users.ForEach(user =>\n                    Console.WriteLine(\"Subscriber: \" + user.Name));\n        }\n\n        static async Task ShowIsListSubscriberAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var subscribedList =\n                    await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.IsSubscriber &&\n                           list.ScreenName == \"JoeMayo\" &&\n                           list.Slug == \"linq\" &&\n                           list.OwnerScreenName == \"Linq2Twitr\"\n                     select list)\n                    .SingleOrDefaultAsync();\n\n                if (subscribedList != null && subscribedList.Users != null)\n                {\n                    // list will have only one user matching ID in query\n                    var user = subscribedList.Users.First();\n\n                    Console.WriteLine(\"User: {0} is subscribed to List: {1}\",\n                        user.Name, subscribedList.ListID); \n                }\n            }\n            // whenever user is not subscribed to the specified list, Twitter\n            // returns an HTTP 404, Not Found, response.  LINQ to Twitter \n            // intercepts the HTTP response and wraps it in a TwitterQueryException \n            // where you can read the error message from Twitter via the Message property.\n            catch (TwitterQueryException ex)\n            {\n                if (ex.StatusCode == HttpStatusCode.NotFound)\n                {\n                    Console.WriteLine(\n                        \"HTTP Status Code: {0}. Twitter Error Code: {1}, Twitter Message: {2}\",\n                        ex.StatusCode.ToString(),\n                        ex.ErrorCode,\n                        ex.Message);\n                }\n                else\n                {\n                    throw ex;\n                }\n            }\n        }\n\n        static async Task ShowIsListMemberAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var subscribedList =\n                    await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.IsMember &&\n                           list.ScreenName == \"JoeMayo\" &&\n                           list.OwnerScreenName == \"Linq2Twitr\" &&\n                           list.Slug == \"linq\"\n                     select list)\n                    .SingleOrDefaultAsync();\n\n                if (subscribedList != null && subscribedList.Users != null)\n                {\n                    // list will have only one user matching ID in query\n                    var user = subscribedList.Users.First();\n\n                    Console.WriteLine(\"User: {0} is a member of List: {1}\",\n                        user.Name, subscribedList.ListID); \n                }\n            }\n            // whenever user is not a member of the specified list, Twitter\n            // returns an HTTP 404, Not Found, response.  LINQ to Twitter \n            // intercepts the HTTP response and wraps it in a TwitterQueryException \n            // where you can read the error message from Twitter via the Message property.\n            catch (TwitterQueryException ex)\n            {\n                if (ex.StatusCode == HttpStatusCode.NotFound)\n                {\n                    Console.WriteLine(\n                        \"HTTP Status Code: {0}. Twitter Error Code: {1}, Twitter Message: {2}\",\n                        ex.StatusCode.ToString(),\n                        ex.ErrorCode,\n                        ex.Message);\n                }\n                else\n                {\n                    throw ex;\n                }\n            }\n        }\n\n        static async Task GetListMembersAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Members &&\n                       list.OwnerScreenName == \"Linq2Twitr\" &&\n                       list.Slug == \"linq\" &&\n                       list.SkipStatus == true\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (lists != null && lists.Users != null)\n                lists.Users.ForEach(user =>\n                    Console.WriteLine(\"Member: \" + user.Name));\n        }\n\n        static async Task ShowListDetailsAsync(TwitterContext twitterCtx)\n        {\n            var requestedList =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Show &&\n                       list.OwnerScreenName == \"Linq2Twitr\" &&\n                       list.Slug == \"linq\"\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (requestedList != null)\n                Console.WriteLine(\n                    \"List Name: {0}, Description: {1}, # Users: {2}\",\n                    requestedList.Name, \n                    requestedList.Description, \n                    requestedList.Users.Count());\n        }\n\n        static async Task GetListSubscriptionsAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Subscriptions &&\n                       list.ScreenName == \"Linq2Twitr\"\n                 select list)\n                .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"List Name: {0}, Description: {1}\",\n                        list.Name, list.Description));\n        }\n\n        static async Task GetOwnershipsAsync(TwitterContext twitterCtx)\n        {\n            var lists =\n                await\n                (from list in twitterCtx.List\n                 where list.Type == ListType.Ownerships &&\n                       list.ScreenName == \"Linq2Twitr\"\n                 select list)\n                .ToListAsync();\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"ID: {0}  Slug: {1} Description: {2}\",\n                        list.ListIDResponse, \n                        list.SlugResponse, \n                        list.Description));\n        }\n\n        static async Task DeleteMemberFromListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.DeleteMemberFromListAsync(\n                    0, \"Linq2Twitr\", 0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task SubscribeToListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.SubscribeToListAsync(\n                    0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task UnsubscribeFromListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.UnsubscribeFromListAsync(\n                    0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task AddMemberRangeToListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            var screenNames = new List<string>\n            {\n                \"JoeMayo\",\n                \"Linq2Twitr\"\n            };\n\n            List list = \n                await twitterCtx.AddMemberRangeToListAsync(\n                    0, \"testDemo\", 0, ownerScreenName, screenNames);\n\n            if (list != null && list.Users != null)\n                list.Users.ForEach(user => Console.WriteLine(user.Name));\n        }\n\n        static async Task AddMemberToListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n\n            List list = \n                await twitterCtx.AddMemberToListAsync(\n                    \"Linq2Twitr\", 0, \"testDemo\", 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task DeleteListAsync(TwitterContext twitterCtx)\n        {\n            ulong listID = 0;\n\n            List list = \n                await twitterCtx.DeleteListAsync(\n                    listID, \"testDemo\", 0, \"Linq2Twitr\");\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task UpdateListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            ulong listID = 0;\n\n            List list = \n                await twitterCtx.UpdateListAsync(\n                    listID, \"testDemo\", \"Test List\", 0, \n                    ownerScreenName, \"public\", \"This is a test2\");\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task CreateListAsync(TwitterContext twitterCtx)\n        {\n            List list = \n                await twitterCtx.CreateListAsync(\n                    \"testDemo\", \"public\", \"This is a test\");\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n\n        static async Task DeleteMemberRangeFromListAsync(TwitterContext twitterCtx)\n        {\n            string ownerScreenName = \"Linq2Twitr\";\n            var screenNames = new List<string> { \"JoeMayo\", \"mp2kmag\" };\n\n            List list = \n                await twitterCtx.DeleteMemberRangeFromListAsync(\n                    0, \"testDemo\", screenNames, 0, ownerScreenName);\n\n            if (list != null)\n                Console.WriteLine(\"List Name: {0}, Description: {1}\",\n                    list.Name, list.Description);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/MediaDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class MediaDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n            \n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tUploading a video...\\n\");\n                        await UploadVideoAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tCreating metadata...\\n\");\n                        await CreateMetadataAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nMedia Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Upload a Video\");\n            Console.WriteLine(\"\\t 1. Create Metadata\");\n\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static void PrintTweetsResults(List<Status> tweets)\n        {\n            if (tweets != null)\n                tweets.ForEach(tweet => \n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"ID: [{0}] Name: {1}\\n\\tTweet: {2}\",\n                            tweet.StatusID, tweet.User.ScreenNameResponse, tweet.Text);\n                });\n        }\n\n        static async Task UploadVideoAsync(TwitterContext twitterCtx)\n        {\n            string status =\n                \"Testing video upload tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\..\\images\\TwitterTest.mp4\");\n            const ulong JoeMayoUserID = 15411837;\n            var additionalOwners = new ulong[] { JoeMayoUserID };\n            string mediaType = \"video/mp4\";\n            string mediaCategory = \"tweet_video\";\n\n            Media media = await twitterCtx.UploadMediaAsync(imageBytes, mediaType, additionalOwners, mediaCategory);\n\n            Media mediaStatusResponse = null;\n            do\n            {\n                if (mediaStatusResponse != null)\n                {\n                    int checkAfterSeconds = mediaStatusResponse?.ProcessingInfo?.CheckAfterSeconds ?? 0;\n                    Console.WriteLine($\"Twitter video testing in progress - waiting {checkAfterSeconds} seconds.\");\n                    await Task.Delay(checkAfterSeconds * 1000);\n                }\n\n                mediaStatusResponse =\n                    await\n                    (from stat in twitterCtx.Media\n                     where stat.Type == MediaType.Status &&\n                           stat.MediaID == media.MediaID\n                     select stat)\n                    .SingleOrDefaultAsync(); \n            } while (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.InProgress);\n\n            if (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.Succeeded)\n            {\n                Status tweet = await twitterCtx.TweetAsync(status, new ulong[] { media.MediaID });\n\n                if (tweet != null)\n                    Console.WriteLine($\"Tweet sent: {tweet.Text}\");\n            }\n            else\n            {\n                MediaError error = mediaStatusResponse?.ProcessingInfo?.Error;\n\n                if (error != null)\n                    Console.WriteLine($\"Request failed - Code: {error.Code}, Name: {error.Name}, Message: {error.Message}\");\n            }\n        }\n\n        static async Task CreateMetadataAsync(TwitterContext twitterCtx)\n        {\n            string status =\n                \"Testing video upload tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\..\\images\\TwitterTest.mp4\");\n            const ulong JoeMayoUserID = 15411837;\n            var additionalOwners = new ulong[] { JoeMayoUserID };\n            string mediaType = \"video/mp4\";\n            string mediaCategory = \"tweet_video\";\n\n            Media media = await twitterCtx.UploadMediaAsync(imageBytes, mediaType, additionalOwners, mediaCategory);\n\n            Media mediaStatusResponse = null;\n            do\n            {\n                if (mediaStatusResponse != null)\n                {\n                    int checkAfterSeconds = mediaStatusResponse?.ProcessingInfo?.CheckAfterSeconds ?? 0;\n                    Console.WriteLine($\"Twitter video testing in progress - waiting {checkAfterSeconds} seconds.\");\n                    await Task.Delay(checkAfterSeconds * 1000);\n                }\n\n                mediaStatusResponse =\n                    await\n                    (from stat in twitterCtx.Media\n                     where stat.Type == MediaType.Status &&\n                           stat.MediaID == media.MediaID\n                     select stat)\n                    .SingleOrDefaultAsync();\n            } while (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.InProgress);\n\n            if (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.Succeeded)\n            {\n                await twitterCtx.CreateMediaMetadataAsync(mediaStatusResponse.MediaID, \"LINQ to Twitter Alt Text Test\");\n\n                Status tweet = await twitterCtx.TweetAsync(status, new ulong[] { media.MediaID });\n\n                if (tweet != null)\n                    Console.WriteLine($\"Tweet sent: {tweet.Text}\");\n            }\n            else\n            {\n                MediaError error = mediaStatusResponse?.ProcessingInfo?.Error;\n\n                if (error != null)\n                    Console.WriteLine($\"Request failed - Code: {error.Code}, Name: {error.Name}, Message: {error.Message}\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/MutesDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class MuteDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking for IDs...\\n\");\n                        await LookupIDsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking for Users...\\n\");\n                        await LookupUsersAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tMuting...\\n\");\n                        await MuteUserAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await UnmuteUserAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n \n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup Muted User IDs\");\n            Console.WriteLine(\"\\t 1. Lookup Muted Users\");\n            Console.WriteLine(\"\\t 2. Mute User\");\n            Console.WriteLine(\"\\t 3. Unmute User\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupIDsAsync(TwitterContext twitterCtx)\n        {\n            var muteResponse =\n                await\n                (from mute in twitterCtx.Mute\n                 where mute.Type == MuteType.IDs\n                 select mute)\n                .SingleOrDefaultAsync();\n\n            muteResponse.IDList.ForEach(id => Console.WriteLine(id));\n        }\n\n        static async Task LookupUsersAsync(TwitterContext twitterCtx)\n        {\n            var muteResponse =\n                await\n                (from mute in twitterCtx.Mute\n                 where mute.Type == MuteType.List\n                 select mute)\n                .SingleOrDefaultAsync();\n\n            muteResponse.Users.ForEach(user => Console.WriteLine(user.ScreenNameResponse));\n        }\n\n        static async Task MuteUserAsync(TwitterContext twitterCtx)\n        {\n            const string ScreenName = \"justinbieber\";\n\n            User mutedUser = await twitterCtx.MuteAsync(ScreenName);\n\n            Console.WriteLine(\"You muted {0}\", mutedUser.ScreenNameResponse);\n        }\n\n        static async Task UnmuteUserAsync(TwitterContext twitterCtx)\n        {\n            const string ScreenName = \"JoeMayo\";\n\n            User unmutedUser = await twitterCtx.UnMuteAsync(ScreenName);\n\n            Console.WriteLine(\"You un-muted {0}\", unmutedUser.ScreenNameResponse);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/Program.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Net;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class Program\n    {\n        static async Task Main()\n        {\n            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;\n\n            try\n            {\n                await DoDemosAsync();\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(ex.ToString());\n            }\n\n            Console.Write(\"\\nPress any key to close console window...\");\n            Console.ReadKey(true);\n        }\n  \n        static async Task DoDemosAsync()\n        {\n            IAuthorizer auth = ChooseAuthenticationStrategy();\n\n            await auth.AuthorizeAsync();\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n            //\n            //var credentials = auth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            var twitterCtx = new TwitterContext(auth);\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tRunning Account Demos...\\n\");\n                        await AccountDemos.RunAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tRunning Account Activity Demos...\\n\");\n                        await AccountActivityDemos.RunAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tRunning Block Demos...\\n\");\n                        await BlockDemos.RunAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tRunning Direct Message Events Demos...\\n\");\n                        await DirectMessageEventsDemos.RunAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tRunning Favorite Demos...\\n\");\n                        await FavoriteDemos.RunAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tRunning Friendship Demos...\\n\");\n                        await FriendshipDemos.RunAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tRunning Geo Demos...\\n\");\n                        await GeoDemos.RunAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tRunning Help Demos...\\n\");\n                        await HelpDemos.RunAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tRunning List Demos...\\n\");\n                        await ListDemos.RunAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tRunning Media Demos...\\n\");\n                        await MediaDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tRunning Mutes Demos...\\n\");\n                        await MuteDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tRunning Raw Demos...\\n\");\n                        await RawDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tRunning Saved Search Demos...\\n\");\n                        await SavedSearchDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tRunning Search Demos...\\n\");\n                        await SearchDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tRunning Status Demos...\\n\");\n                        await StatusDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'f':\n                    case 'F':\n                        Console.WriteLine(\"\\n\\tRunning Stream Demos...\\n\");\n                        await StreamDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'g':\n                    case 'G':\n                        Console.WriteLine(\"\\n\\tRunning Trend Demos...\\n\");\n                        await TrendDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'h':\n                    case 'H':\n                        Console.WriteLine(\"\\n\\tRunning User Demos...\\n\");\n                        await UserDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'i':\n                    case 'I':\n                        Console.WriteLine(\"\\n\\tRunning Welcome Message Demos...\\n\");\n                        await WelcomeMessageDemos.RunAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nQuitting...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nPlease select category:\\n\");\n\n            Console.WriteLine(\"\\t 0. Account Demos\");\n            Console.WriteLine(\"\\t 1. Account Activity Demos\");\n            Console.WriteLine(\"\\t 2. Block Demos\");\n            Console.WriteLine(\"\\t 3. Direct Message Event Demos\");\n            Console.WriteLine(\"\\t 4. Favorite Demos\");\n            Console.WriteLine(\"\\t 5. Friendship Demos\");\n            Console.WriteLine(\"\\t 6. Geo Demos\");\n            Console.WriteLine(\"\\t 7. Help Demos\");\n            Console.WriteLine(\"\\t 8. List Demos\");\n            Console.WriteLine(\"\\t 9. Media Demos\");\n            Console.WriteLine(\"\\t A. Mutes Demos\");\n            Console.WriteLine(\"\\t B. Raw Demos\");\n            Console.WriteLine(\"\\t C. Saved Search Demos\");\n            Console.WriteLine(\"\\t D. Search Demos\");\n            Console.WriteLine(\"\\t E. Status Demos\");\n            Console.WriteLine(\"\\t F. Stream Demos\");\n            Console.WriteLine(\"\\t G. Trend Demos\");\n            Console.WriteLine(\"\\t H. User Demos\");\n            Console.WriteLine(\"\\t I. Vine Demos\");\n            Console.WriteLine(\"\\t J. Welcome Message Demos\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. End Program\");\n        }\n\n\n        static IAuthorizer ChooseAuthenticationStrategy()\n        {\n            Console.WriteLine(\"Authentication Strategy:\\n\\n\");\n\n            Console.WriteLine(\"  1 - Pin (default)\");\n            Console.WriteLine(\"  2 - Application-Only\");\n            Console.WriteLine(\"  3 - Single User\");\n            Console.WriteLine(\"  4 - XAuth\");\n\n            Console.Write(\"\\nPlease choose (1, 2, 3, or 4): \");\n            ConsoleKeyInfo input = Console.ReadKey();\n            Console.WriteLine(\"\");\n\n            IAuthorizer auth = input.KeyChar switch\n            {\n                '1' => DoPinOAuth(),\n                '2' => DoApplicationOnlyAuth(),\n                '3' => DoSingleUserAuth(),\n                '4' => DoXAuth(),\n                _ => DoPinOAuth(),\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoPinOAuth()\n        {\n            var auth = new PinAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n                },\n                GoToTwitterAuthorization = pageLink =>\n                {\n                    var psi = new ProcessStartInfo\n                    {\n                        FileName = pageLink,\n                        UseShellExecute = true\n                    };\n                    Process.Start(psi);\n                },\n                GetPin = () =>\n                {\n                    Console.WriteLine(\n                        \"\\nAfter authorizing this application, Twitter \" +\n                        \"will give you a 7-digit PIN Number.\\n\");\n                    Console.Write(\"Enter the PIN number here: \");\n                    return Console.ReadLine();\n                }\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoApplicationOnlyAuth()\n        {\n            var auth = new ApplicationOnlyAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n                },\n            };\n\n            return auth;\n        }\n        static IAuthorizer DoSingleUserAuth()\n        {\n            var auth = new SingleUserAuthorizer\n            {\n                CredentialStore = new SingleUserInMemoryCredentialStore\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\n                    AccessToken = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessToken),\n                    AccessTokenSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessTokenSecret)\n                }\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoXAuth()\n        {\n            var auth = new XAuthAuthorizer\n            {\n                CredentialStore = new XAuthCredentials\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\n                    UserName = \"YourUserName\",\n                    Password = \"YourPassword\"\n                }\n            };\n\n            return auth;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/RawDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class RawDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await PerformSearchRawAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tTweeting...\");\n                        await TweetRawAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nRaw Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Perform Search (Query)\");\n            Console.WriteLine(\"\\t 1. Update Status (Command)\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task PerformSearchRawAsync(TwitterContext twitterCtx)\n        {\n            string unencodedStatus = \"LINQ to Twitter\";\n            string encodedStatus = Uri.EscapeDataString(unencodedStatus);\n            string queryString = \"search/tweets.json?q=\" + encodedStatus;\n\n            var rawResult =\n                await\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == queryString\n                 select raw)\n                .SingleOrDefaultAsync();\n\n            if (rawResult != null)\n                Console.WriteLine(\n                    \"Response from Twitter: \\n\\n\" + rawResult.Response);\n        }\n\n        static async Task TweetRawAsync(TwitterContext twitterCtx)\n        {\n            string status = \n                \"Testing LINQ to Twitter Raw Interface - \" + \n                DateTime.Now.ToString() + \" #Linq2Twitter\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", status }\n            };\n\n            string queryString = \"/statuses/update.json\";\n\n            string result = \n                await twitterCtx.ExecuteRawAsync(\n                    queryString, parameters, HttpMethod.Post);\n\n            if (result != null)\n                Console.WriteLine(\n                    \"\\nResponse from update status: \\n\\n\\t\" + result);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/SavedSearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class SavedSearchDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing saved searches...\\n\");\n                        await ShowSavedSearchesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing saved search...\\n\");\n                        await ShowSavedSearchAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tCreating...\\n\");\n                        await CreateSavedSearchAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tDeleting...\\n\");\n                        await DestroySavedSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSaved Search Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Saved Searches\");\n            Console.WriteLine(\"\\t 1. Show Saved Search\");\n            Console.WriteLine(\"\\t 2. Create Saved Search\");\n            Console.WriteLine(\"\\t 3. Destroy Saved Search\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowSavedSearchesAsync(TwitterContext twitterCtx)\n        {\n            var savedSearches =\n                await\n                    (from search in twitterCtx.SavedSearch\n                     where search.Type == SavedSearchType.Searches\n                     select search)\n                    .ToListAsync();\n\n            if (savedSearches != null)\n                savedSearches.ForEach(\n                    search => Console.WriteLine(\"Search: \" + search.Query));\n        }\n\n        static async Task ShowSavedSearchAsync(TwitterContext twitterCtx)\n        {\n            ulong savedSearchID = 306668698;\n\n            var savedSearch =\n                await\n                (from search in twitterCtx.SavedSearch\n                 where search.Type == SavedSearchType.Show &&\n                       search.ID == savedSearchID\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.ID, savedSearch.Name);\n        }\n\n        static async Task CreateSavedSearchAsync(TwitterContext twitterCtx)\n        {\n            SavedSearch savedSearch = \n                await twitterCtx.CreateSavedSearchAsync(\"linq\");\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.IDResponse, savedSearch.Query);\n        }\n\n        static async Task DestroySavedSearchAsync(TwitterContext twitterCtx)\n        {\n            ulong savedSearchID = 0;\n\n            SavedSearch savedSearch = \n                await twitterCtx.DestroySavedSearchAsync(savedSearchID);\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.ID, savedSearch.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/SearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class SearchDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoSearchAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoPagedSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSearch Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search\");\n            Console.WriteLine(\"\\t 1. Paged Search\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n  \n        static async Task DoSearchAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter OR JoeMayo\";\n            //searchTerm = \"кот (\";\n\n            Search searchResponse =\n                await\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == searchTerm &&\n                       search.IncludeEntities == true &&\n                       search.TweetMode == TweetMode.Extended\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Statuses != null)\n                searchResponse.Statuses.ForEach(tweet =>\n                    Console.WriteLine(\n                        \"\\n  User: {0} ({1})\\n  Tweet: {2}\", \n                        tweet.User.ScreenNameResponse,\n                        tweet.User.UserIDResponse,\n                        tweet.Text ?? tweet.FullText));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoPagedSearchAsync(TwitterContext twitterCtx)\n        {\n            const int MaxSearchEntriesToReturn = 100;\n            const int SearchRateLimit = 180;\n\n            string searchTerm = \"twitter\";\n\n            // oldest id you already have for this search term\n            ulong sinceID = 1;\n\n            // used after the first query to track current session\n            ulong maxID; \n\n            var combinedSearchResults = new List<Status>();\n\n            List<Status> searchResponse =\n                await\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == searchTerm &&\n                       search.Count == MaxSearchEntriesToReturn &&\n                       search.SinceID == sinceID &&\n                       search.TweetMode == TweetMode.Extended\n                 select search.Statuses)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse != null)\n            {\n                combinedSearchResults.AddRange(searchResponse);\n                ulong previousMaxID = ulong.MaxValue;\n                do\n                {\n                    // one less than the newest id you've just queried\n                    maxID = searchResponse.Min(status => status.StatusID) - 1;\n\n                    Debug.Assert(maxID < previousMaxID);\n                    previousMaxID = maxID;\n\n                    searchResponse =\n                        await\n                        (from search in twitterCtx.Search\n                         where search.Type == SearchType.Search &&\n                               search.Query == searchTerm &&\n                               search.Count == MaxSearchEntriesToReturn &&\n                               search.MaxID == maxID &&\n                               search.SinceID == sinceID &&\n                               search.TweetMode == TweetMode.Extended\n                         select search.Statuses)\n                        .SingleOrDefaultAsync();\n\n                    combinedSearchResults.AddRange(searchResponse);\n                } while (searchResponse.Any() && combinedSearchResults.Count < SearchRateLimit);\n\n                combinedSearchResults.ForEach(tweet =>\n                    Console.WriteLine(\n                        \"\\n  User: {0} ({1})\\n  Tweet: {2}\",\n                        tweet.User.ScreenNameResponse,\n                        tweet.User.UserIDResponse,\n                        tweet.Text ?? tweet.FullText)); \n            }\n            else\n            {\n                Console.WriteLine(\"No entries found.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/StatusDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Diagnostics;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class StatusDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n            \n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing mentions timeline...\");\n                        await ShowMentionsTimelineAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing user timeline...\\n\");\n                        await RunUserTimelineQueryAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tShowing home timeline...\\n\");\n                        await RunHomeTimelineQueryAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing retweets...\\n\");\n                        await RetweetsOfMeStatusQueryAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tShowing retweets...\\n\");\n                        await RetweetsQueryAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tShowing tweet...\\n\");\n                        await SingleStatusQueryAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tDeleting tweet...\\n\");\n                        await DeleteTweetAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tTweeting...\\n\");\n                        await TweetAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tReplying...\\n\");\n                        await ReplyAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tRetweeting...\\n\");\n                        await RetweetAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tTweeting one image...\\n\");\n                        await UploadSingleImageAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tTweeting multiple images...\\n\");\n                        await UploadMultipleImagesAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tGetting oembed...\\n\");\n                        await OEmbedStatusAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tGetting retweeters...\\n\");\n                        await RetweetersAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tFollowing conversation...\\n\");\n                        await GetConversationAsync(twitterCtx);\n                        break;\n                    case 'f':\n                    case 'F':\n                        Console.WriteLine(\"\\n\\tLooking up tweets...\\n\");\n                        await LookupTweetsAsyc(twitterCtx);\n                        break;\n                    case 'g':\n                    case 'G':\n                        Console.WriteLine(\"\\n\\tUploading a video...\\n\");\n                        await UploadVideoAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nStatus Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Mentions Timeline\");\n            Console.WriteLine(\"\\t 1. User Timeline\");\n            Console.WriteLine(\"\\t 2. Home Timeline\");\n            Console.WriteLine(\"\\t 3. Retweets of Me Timeline\");\n            Console.WriteLine(\"\\t 4. Retweets of a Tweet\");\n            Console.WriteLine(\"\\t 5. Show Specific Tweet\");\n            Console.WriteLine(\"\\t 6. Delete a Tweet\");\n            Console.WriteLine(\"\\t 7. Update Status\");\n            Console.WriteLine(\"\\t 8. Reply to a Tweet\");\n            Console.WriteLine(\"\\t 9. Retweet a Tweet\");\n            Console.WriteLine(\"\\t A. Tweet Single Image\");\n            Console.WriteLine(\"\\t B. Tweet Multiple Images\");\n            Console.WriteLine(\"\\t C. Get Oembed Tweet\");\n            Console.WriteLine(\"\\t D. Get Retweeters\");\n            Console.WriteLine(\"\\t E. Follow Conversation\");\n            Console.WriteLine(\"\\t F. Lookup Tweets\");\n            Console.WriteLine(\"\\t G. Upload a Video\");\n\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static void PrintTweetsResults(List<Status> tweets)\n        {\n            if (tweets != null)\n                tweets.ForEach(tweet => \n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"ID: [{0}] Name: {1}\\n\\tTweet: {2}\",\n                            tweet.StatusID, tweet.User.ScreenNameResponse, \n                            string.IsNullOrWhiteSpace(tweet.Text) ? tweet.FullText : tweet.Text);\n                });\n        }\n  \n        static async Task ShowMentionsTimelineAsync(TwitterContext twitterCtx)\n        {\n            string screenName = \"JoeMayo\";\n\n            List<Status> tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Mentions &&\n                       tweet.ScreenName == screenName\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task RunUserTimelineQueryAsync(TwitterContext twitterCtx)\n        {\n            //List<Status> tweets =\n            //    await\n            //    (from tweet in twitterCtx.Status\n            //     where tweet.Type == StatusType.User &&\n            //           tweet.ScreenName == \"JoeMayo\"\n            //     select tweet)\n            //    .ToListAsync();\n\n            const int MaxTweetsToReturn = 200;\n            const int MaxTotalResults = 100;\n\n            // oldest id you already have for this search term\n            ulong sinceID = 1;\n\n            // used after the first query to track current session\n            ulong maxID;\n\n            var combinedSearchResults = new List<Status>();\n\n            List<Status> tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.User &&\n                       tweet.ScreenName == \"JoeMayo\" &&\n                       tweet.Count == MaxTweetsToReturn &&\n                       tweet.SinceID == sinceID &&\n                       tweet.TweetMode == TweetMode.Extended\n                 select tweet)\n                .ToListAsync();\n\n            if (tweets != null)\n            {\n                combinedSearchResults.AddRange(tweets);\n                ulong previousMaxID = ulong.MaxValue;\n                do\n                {\n                    // one less than the newest id you've just queried\n                    maxID = tweets.Min(status => status.StatusID) - 1;\n\n                    Debug.Assert(maxID < previousMaxID);\n                    previousMaxID = maxID;\n\n                    tweets =\n                        await\n                        (from tweet in twitterCtx.Status\n                         where tweet.Type == StatusType.User &&\n                               tweet.ScreenName == \"JoeMayo\" &&\n                               tweet.Count == MaxTweetsToReturn &&\n                               tweet.MaxID == maxID &&\n                               tweet.SinceID == sinceID &&\n                               tweet.TweetMode == TweetMode.Extended\n                         select tweet)\n                        .ToListAsync();\n\n                    combinedSearchResults.AddRange(tweets);\n\n                } while (tweets.Any() && combinedSearchResults.Count < MaxTotalResults);\n\n                PrintTweetsResults(tweets);\n            }\n            else\n            {\n                Console.WriteLine(\"No entries found.\");\n            }\n        }\n\n        static async Task RunHomeTimelineQueryAsync(TwitterContext twitterCtx)\n        {\n            List<Status> tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Home &&\n                       tweet.TweetMode == TweetMode.Extended &&\n                       tweet.Count == 150\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task RetweetsOfMeStatusQueryAsync(TwitterContext twitterCtx)\n        {\n            List<Status> myRetweets =\n                await\n                (from retweet in twitterCtx.Status\n                 where retweet.Type == StatusType.RetweetsOfMe &&\n                       retweet.Count == 100\n                 select retweet)\n                .ToListAsync();\n\n            PrintTweetsResults(myRetweets);\n        }\n\n        static async Task RetweetsQueryAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 806571633754284032;\n\n            List<Status> retweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweets &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .ToListAsync();\n\n            if (retweets != null)\n                retweets.ForEach(tweet =>\n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"@{0} {1} ({2})\",\n                            tweet.User.ScreenNameResponse,\n                            tweet.Text,\n                            tweet.RetweetCount);\n                });\n        }\n\n        static async Task SingleStatusQueryAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 806571633754284032;\n\n            List<Status> status =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Show &&\n                       tweet.ID == tweetID &&\n                       tweet.TweetMode == TweetMode.Extended &&\n                       tweet.IncludeAltText == true\n                 select tweet)\n                .ToListAsync();\n\n            if (status != null)\n            {\n                Console.WriteLine(\"\\nTweets: \\n\");\n                status.ForEach(tweet =>\n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"User: \" + tweet.User.Name +\n                            \"\\nTweet: \" + tweet.Text +\n                            \"\\nTweet ID: \" + tweet.ID + \"\\n\");\n                }); \n            }\n        }\n\n        static async Task DeleteTweetAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 280433519057068033;\n\n            Status status = \n                await twitterCtx.DeleteTweetAsync(tweetID);\n\n            if (status != null && status.User != null)\n                Console.WriteLine(\n                    \"(\" + status.StatusID + \")\" +\n                    \"[\" + status.User.UserID + \"]\" +\n                    status.User.ScreenNameResponse + \", \" +\n                    status.Text + \", \" +\n                    status.CreatedAt);\n        }\n\n        static async Task TweetAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Enter your status update: \");\n            string status = Console.ReadLine();\n\n            Console.WriteLine(\"\\nStatus being sent: \\n\\n\\\"{0}\\\"\", status);\n            Console.Write(\"\\nDo you want to update your status? (y or n): \");\n            string confirm = Console.ReadLine();\n\n            if (confirm.ToUpper() == \"N\")\n            {\n                Console.WriteLine(\"\\nThis status is *not* being sent.\");\n            }\n            else if (confirm.ToUpper() == \"Y\")\n            {\n                Console.WriteLine(\"\\nPress any key to post tweet...\\n\");\n                Console.ReadKey(true);\n\n                Status tweet = await twitterCtx.TweetAsync(status, tweetMode: TweetMode.Extended);\n\n                if (tweet != null)\n                    Console.WriteLine(\n                        \"Status returned: \" +\n                        \"(\" + tweet.StatusID + \")\" +\n                        tweet.User.Name + \", \" +\n                        tweet.Text + \"\\n\");\n            }\n            else\n            {\n                Console.WriteLine(\"Not a valid entry.\");\n            }\n        }\n\n        static async Task ReplyAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 806571633754284032;\n            string status = $\"@JoeMayo @linq2twitr 2016: The Year When Chatbots Were Hot  #Linq2Twitter £ {DateTime.Now}\";\n            string attachmentUrl = \"https://twitter.com/ChatBotsLife/status/806571633754284032\";\n\n            Status tweet = await twitterCtx.ReplyAsync(tweetID, status, autoPopulateReplyMetadata: true, attachmentUrl: attachmentUrl);\n\n            if (tweet != null)\n                Console.WriteLine(\n                    \"Status returned: \" +\n                    \"(\" + tweet.StatusID + \")\" +\n                    tweet.User.Name + \", \" +\n                    tweet.Text + \"\\n\");\n        }\n\n        static async Task RetweetAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 1250088275861049345;\n\n            Status retweet = await twitterCtx.RetweetAsync(tweetID);\n\n            if (retweet != null && \n                retweet.RetweetedStatus != null && \n                retweet.RetweetedStatus.User != null)\n            {\n                Console.WriteLine(\"Retweeted Tweet: \");\n                Console.WriteLine(\n                    \"\\nUser: \" + retweet.RetweetedStatus.User.ScreenNameResponse +\n                    \"\\nTweet: \" + retweet.RetweetedStatus.Text +\n                    \"\\nTweet ID: \" + retweet.RetweetedStatus.ID + \"\\n\"); \n            }\n        }\n\n        static async Task UploadSingleImageAsync(TwitterContext twitterCtx)\n        {\n            var additionalOwners = new List<ulong> { 3265644348, 15411837 };\n            string status =\n                \"Testing single-image tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n            string mediaCategory = \"tweet_image\";\n\n            Media media = await twitterCtx.UploadMediaAsync(\n                File.ReadAllBytes(@\"..\\..\\..\\images\\200xColor_2.png\"), \n                \"image/png\", \n                additionalOwners, \n                mediaCategory);\n\n            Status tweet = await twitterCtx.TweetAsync(status, new ulong[] { media.MediaID }, TweetMode.Extended);\n\n            if (tweet != null)\n                Console.WriteLine(\"Tweet sent: \" + tweet.Text);\n        }\n\n        static async Task UploadMultipleImagesAsync(TwitterContext twitterCtx)\n        {\n            var additionalOwners = new List<ulong> { 3265644348, 15411837 };\n            string status = \n                \"Testing multi-image tweet #Linq2Twitter £ \" + \n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n            string mediaCategory = \"tweet_image\";\n\n            var imageUploadTasks = \n                new List<Task<Media>> \n                {\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\..\\images\\200xColor_2.png\"), \"image/png\", additionalOwners, mediaCategory),\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\..\\images\\WP_000003.jpg\"), \"image/jpg\", mediaCategory),\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\..\\images\\13903749474_86bd1290de_o.jpg\"), \"image/jpg\", mediaCategory),\n                };\n\n            await Task.WhenAll(imageUploadTasks);\n\n            List<ulong> mediaIds =\n                (from tsk in imageUploadTasks\n                 select tsk.Result.MediaID)\n                .ToList();\n\n            mediaIds.ForEach(async id => await twitterCtx.CreateMediaMetadataAsync(id, $\"Test Alt Text for Media ID: {id}\"));\n\n            Status tweet = await twitterCtx.TweetAsync(status, mediaIds);\n\n            if (tweet != null)\n                Console.WriteLine(\"Tweet sent: \" + tweet.Text);\n        }\n\n        static async Task UploadVideoAsync(TwitterContext twitterCtx)\n        {\n            string status =\n                \"Testing video upload tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n\n            Media media = await twitterCtx.UploadMediaAsync(\n                File.ReadAllBytes(@\"..\\..\\..\\images\\TwitterTest.mp4\"), \n                \"video/mp4\", \"tweet_video\");\n\n            Status tweet = await twitterCtx.TweetAsync(status, new ulong[] { media.MediaID });\n\n            if (tweet != null)\n                Console.WriteLine(\"Tweet sent: \" + tweet.Text);\n        }\n\n        static async Task OEmbedStatusAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 305050067973312514;\n\n            EmbeddedStatus embeddedStatus =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Oembed &&\n                       tweet.ID == tweetID\n                 select tweet.EmbeddedStatus)\n                .SingleOrDefaultAsync();\n\n            if (embeddedStatus != null)\n                Console.WriteLine(\n                    \"Embedded Status Html: \\n\\n\" + embeddedStatus.Html);\n        }\n\n        static async Task RetweetersAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 210591841312190464;\n\n            Status status =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweeters &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (status != null && status.User != null)\n                status.Users.ForEach(\n                    userID => Console.WriteLine(\"User ID: \" + userID));\n        }\n\n        static async Task GetConversationAsync(TwitterContext twitterCtx)\n        {\n            List<Status> tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Conversation &&\n                       tweet.ID == 420611683317342208ul\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n\n        static async Task LookupTweetsAsyc(TwitterContext twitterCtx)\n        {\n            string tweetIds = \"460788892723978241,462758132448362496,460060836967768064\";\n\n            List<Status> tweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Lookup &&\n                       tweet.TweetIDs == tweetIds &&\n                       tweet.TweetMode == TweetMode.Extended &&\n                       tweet.IncludeEntities == true\n                 select tweet)\n                .ToListAsync();\n\n            PrintTweetsResults(tweets);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/StreamDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LitJson;\nusing System.IO;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class StreamDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing Filter Stream...\\n\");\n                        await DoFilterStreamAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing Sample Stream...\\n\");\n                        await DoSampleStreamAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tReading Rx Stream...\\n\");\n                        await DoRxObservableStreamAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nStreaming Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Filter Stream\");\n            Console.WriteLine(\"\\t 1. Sample Stream\");\n            Console.WriteLine(\"\\t 2. Reactive Stream\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoFilterStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                await\n                    (from strm in twitterCtx.Streaming\n                                            .WithCancellation(cancelTokenSrc.Token)\n                     where strm.Type == StreamingType.Filter &&\n                           strm.Track == \"twitter\"\n                     select strm)\n                    .StartAsync(async strm =>\n                    {\n                        await HandleStreamResponse(strm);\n\n                        if (count++ >= 5)\n                            cancelTokenSrc.Cancel();\n                    });\n            }\n            catch (IOException ex)\n            {\n                // Twitter might have closed the stream,\n                // which they do sometimes. You should\n                // restart the stream, but be sure to\n                // read Twitter documentation on stream\n                // back-off strategies to prevent your\n                // app from being blocked.\n                Console.WriteLine(ex.ToString());\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n  \n        static async Task DoSampleStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                await\n                    (from strm in twitterCtx.Streaming.WithCancellation(cancelTokenSrc.Token)\n                     where strm.Type == StreamingType.Sample\n                     select strm)\n                    .StartAsync(async strm =>\n                    {\n                        await HandleStreamResponse(strm);\n\n                        if (count++ >= 5)\n                            cancelTokenSrc.Cancel();\n                    });\n            }\n            catch (IOException ex)\n            {\n                // Twitter might have closed the stream,\n                // which they do sometimes. You should\n                // restart the stream, but be sure to\n                // read Twitter documentation on stream\n                // back-off strategies to prevent your\n                // app from being blocked.\n                Console.WriteLine(ex.ToString());\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n\n        static async Task DoRxObservableStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            try\n            {\n                var observable =\n                    await\n                        (from strm in twitterCtx.Streaming\n                                                .WithCancellation(cancelTokenSrc.Token)\n                         where strm.Type == StreamingType.Filter &&\n                               strm.Track == \"twitter\"\n                         select strm)\n                        .ToObservableAsync();\n\n                observable.Subscribe(\n                    async strm =>\n                    {\n                        await HandleStreamResponse(strm);\n\n                        if (count++ >= 5)\n                            cancelTokenSrc.Cancel();\n                    },\n                    ex => Console.WriteLine(ex.ToString()),\n                    () => Console.WriteLine(\"Completed\"));\n            }\n            catch (OperationCanceledException)\n            {\n                Console.WriteLine(\"Stream cancelled.\");\n            }\n        }\n\n        static async Task<int> HandleStreamResponse(StreamContent strm)\n        {\n            switch (strm.EntityType)\n            {\n                case StreamEntityType.Control:\n                    var control = strm.Entity as Control;\n                    Console.WriteLine(\"Control URI: {0}\", control.URL);\n                    break;\n                case StreamEntityType.Delete:\n                    var delete = strm.Entity as Delete;\n                    Console.WriteLine(\"Delete - User ID: {0}, Status ID: {1}\", delete.UserID, delete.StatusID);\n                    break;\n                case StreamEntityType.Disconnect:\n                    var disconnect = strm.Entity as Disconnect;\n                    Console.WriteLine(\"Disconnect - {0}\", disconnect.Reason);\n                    break;\n                case StreamEntityType.Event:\n                    var evt = strm.Entity as Event;\n                    Console.WriteLine(\"Event - Event Name: {0}\", evt.EventName);\n                    break;\n                case StreamEntityType.ForUser:\n                    var user = strm.Entity as ForUser;\n                    Console.WriteLine(\"For User - User ID: {0}, # Friends: {1}\", user.UserID, user.Friends.Count);\n                    break;\n                case StreamEntityType.FriendsList:\n                    var friends = strm.Entity as FriendsList;\n                    Console.WriteLine(\"Friends List - # Friends: {0}\", friends.Friends.Count);\n                    break;\n                case StreamEntityType.GeoScrub:\n                    var scrub = strm.Entity as GeoScrub;\n                    Console.WriteLine(\"GeoScrub - User ID: {0}, Up to Status ID: {1}\", scrub.UserID, scrub.UpToStatusID);\n                    break;\n                case StreamEntityType.Limit:\n                    var limit = strm.Entity as Limit;\n                    Console.WriteLine(\"Limit - Track: {0}\", limit.Track);\n                    break;\n                case StreamEntityType.Stall:\n                    var stall = strm.Entity as Stall;\n                    Console.WriteLine(\"Stall - Code: {0}, Message: {1}, % Full: {2}\", stall.Code, stall.Message, stall.PercentFull);\n                    break;\n                case StreamEntityType.Status:\n                    var status = strm.Entity as Status;\n\n                    string text;\n                    if (status.ExtendedTweet?.FullText != null)\n                        text = status.ExtendedTweet?.FullText;\n                    else if (status.RetweetedStatus?.ExtendedTweet?.FullText != null)\n                        text = status.RetweetedStatus?.ExtendedTweet?.FullText;\n                    else\n                        text = status.Text;\n\n                    Console.WriteLine(\"Status - @{0}: {1}\", status.User.ScreenNameResponse, text);\n                    break;\n                case StreamEntityType.StatusWithheld:\n                    var statusWithheld = strm.Entity as StatusWithheld;\n                    Console.WriteLine(\"Status Withheld - Status ID: {0}, # Countries: {1}\", statusWithheld.StatusID, statusWithheld.WithheldInCountries.Count);\n                    break;\n                case StreamEntityType.TooManyFollows:\n                    var follows = strm.Entity as TooManyFollows;\n                    Console.WriteLine(\"Too Many Follows - Message: {0}\", follows.Message);\n                    break;\n                case StreamEntityType.UserWithheld:\n                    var userWithheld = strm.Entity as UserWithheld;\n                    Console.WriteLine(\"User Withheld - User ID: {0}, # Countries: {1}\", userWithheld.UserID, userWithheld.WithheldInCountries.Count);\n                    break;\n                case StreamEntityType.ParseError:\n                    var unparsedJson = strm.Entity as string;\n                    Console.WriteLine(\"Parse Error - {0}\", unparsedJson);\n                    break;\n                case StreamEntityType.Unknown:\n                default:\n                    Console.WriteLine(\"Unknown - \" + strm.Content + \"\\n\");\n                    break;\n            }\n\n            return await Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/TrendDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class TrendDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting trends...\\n\");\n                        await GetTrendsForPlaceAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting available trend locations...\\n\");\n                        await GetAvailableTrendLocationsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting trends...\\n\");\n                        await GetClosestTrendsAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nTrend Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Trends for a Place\");\n            Console.WriteLine(\"\\t 1. Get Available Trend Locations\");\n            Console.WriteLine(\"\\t 2. Get Trends Closest to a Location\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetTrendsForPlaceAsync(TwitterContext twitterCtx)\n        {\n            System.Collections.Generic.List<Trend> trends =\n                await\n                (from trend in twitterCtx.Trends\n                 where trend.Type == TrendType.Place &&\n                       trend.WoeID == 2486982\n                 select trend)\n                .ToListAsync();\n\n            if (trends != null && \n                trends.Any() && \n                trends.First().Locations != null)\n            {\n                Console.WriteLine(\n                    \"Location: {0}\\n\",\n                    trends.First().Locations.First().Name);\n\n                trends.ForEach(trnd =>\n                    Console.WriteLine(\n                        \"Tweet Volume: {0}, Name: {1}, Date: {2}, Query: {3}\\nSearchUrl: {4}\",\n                        trnd.TweetVolume, trnd.Name, trnd.CreatedAt, trnd.Query, trnd.SearchUrl)); \n            }\n        }\n\n        static async Task GetAvailableTrendLocationsAsync(TwitterContext twitterCtx)\n        {\n            Trend trendsResponse =\n                await\n                (from trend in twitterCtx.Trends\n                 where trend.Type == TrendType.Available\n                 select trend)\n                .SingleOrDefaultAsync();\n\n            if (trendsResponse != null && trendsResponse.Locations != null)\n                trendsResponse.Locations.ForEach(\n                    loc => Console.WriteLine(\"Location: \" + loc.Name));\n        }\n\n        static async Task GetClosestTrendsAsync(TwitterContext twitterCtx)\n        {\n            Trend trend =\n                await\n                (from trnd in twitterCtx.Trends\n                 where trnd.Type == TrendType.Closest &&\n                       trnd.Latitude == 37.78215 &&\n                       trnd.Longitude == -122.40060\n                 select trnd)\n                .SingleOrDefaultAsync();\n\n            if (trend != null && trend.Locations != null)\n                trend.Locations.ForEach(\n                    loc => Console.WriteLine(\n                        \"Name: {0}, Country: {1}, WoeID: {2}\",\n                        loc.Name, loc.Country, loc.WoeID));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/UserDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace Linq2TwitterDemos_Console\n{\n    public class UserDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking...\\n\");\n                        await LookupUsersAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await ShowUserDetailsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await FindUsersAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await GetContributeesAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await GetContributorsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await GetBannerSizesAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await GetUsersInSuggestedCategoriesAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tGetting  ...\\n\");\n                        await GetSuggestedCategoryListQueryAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await ShowUsersInCategoryAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tReport spammer...\\n\");\n                        await ReportSpammerAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n \n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup Users\");\n            Console.WriteLine(\"\\t 1. Show User Info\");\n            Console.WriteLine(\"\\t 2. Search for Users\");\n            Console.WriteLine(\"\\t 3. Contributee Accounts\");\n            Console.WriteLine(\"\\t 4. Account Contributors\");\n            Console.WriteLine(\"\\t 5. Get Profile Banner Sizes\");\n            Console.WriteLine(\"\\t 6. Get Suggested Users\");\n            Console.WriteLine(\"\\t 7. Get Suggestion Categories\");\n            Console.WriteLine(\"\\t 8. Get Suggested User Tweets\");\n            Console.WriteLine(\"\\t 9. Report Spammer\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupUsersAsync(TwitterContext twitterCtx)\n        {\n            var userResponse =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Lookup &&\n                       user.ScreenNameList == \"JoeMayo,Linq2Twitr\" &&\n                       user.TweetMode == TweetMode.Extended\n                 select user)\n                .ToListAsync();\n\n            if (userResponse != null)\n                userResponse.ForEach(user => \n                    Console.WriteLine(\"Name: \" + user.ScreenNameResponse));\n        }\n\n        static async Task ShowUserDetailsAsync(TwitterContext twitterCtx)\n        {\n            string screenName = \"JoeMayo\";\n            var user =\n                await\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.Show &&\n                       usr.ScreenName == screenName &&\n                       usr.TweetMode == TweetMode.Extended\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            if (user != null)\n            {\n                var name = user.ScreenNameResponse;\n                var lastStatus =\n                    user.Status == null ? \"No Status\" : user.Status.Text;\n\n                Console.WriteLine();\n                Console.WriteLine(\n                    \"Name: {0}, Last Tweet: {1}\\n\", name, lastStatus); \n            }\n        }\n \n        static async Task FindUsersAsync(TwitterContext twitterCtx)\n        {\n            var foundUsers =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Search &&\n                       user.Query == \"JoeMayo\" &&\n                       user.TweetMode == TweetMode.Extended\n                 select user)\n                .ToListAsync();\n\n            if (foundUsers != null)\n                foundUsers.ForEach(user => \n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n        }\n\n        static async Task GetContributeesAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var users =\n                    await\n                    (from user in twitterCtx.User\n                     where user.Type == UserType.Contributees &&\n                           user.ScreenName == \"biz\"\n                     select user)\n                    .ToListAsync();\n\n                if (users != null)\n                    users.ForEach(user => \n                        Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n            }\n            catch (TwitterQueryException tqEx) when (tqEx.ErrorCode == 220)\n            {\n                Console.WriteLine(\"Unable to query - Reason: \" + tqEx.ReasonPhrase);\n            }\n        }\n\n        static async Task GetContributorsAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var users =\n                    await\n                    (from user in twitterCtx.User\n                     where user.Type == UserType.Contributors &&\n                           user.ScreenName == \"twitter\"\n                     select user)\n                    .ToListAsync();\n\n                if (users != null)\n                    users.ForEach(user => \n                        Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n            }\n            catch (TwitterQueryException tqEx) when (tqEx.ErrorCode == 220)\n            {\n                Console.WriteLine(\"Unable to query - Reason: \" + tqEx.ReasonPhrase);\n            }\n        }\n\n        static async Task GetBannerSizesAsync(TwitterContext twitterCtx)\n        {\n            var user =\n                await\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.BannerSizes &&\n                       usr.ScreenName == \"JoeMayo\"\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            if (user != null && user.BannerSizes != null)\n                user.BannerSizes.ForEach(size =>\n                    Console.WriteLine(\n                        \"Label: {0}, W: {1} H: {2} URL: {3}\",\n                        size.Label, size.Width, size.Height, size.Url));\n        }\n\n        static async Task GetUsersInSuggestedCategoriesAsync(TwitterContext twitterCtx)\n        {\n            var userResponse =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Category &&\n                       user.Slug == \"Funny\"\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (userResponse != null && \n                userResponse.Categories != null && \n                userResponse.Categories.Any() && \n                userResponse.Categories.First().Users != null)\n            {\n                List<User> users = userResponse.Categories.First().Users;\n\n                users.ForEach(user =>\n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse)); \n            }\n        }\n\n        static async Task GetSuggestedCategoryListQueryAsync(TwitterContext twitterCtx)\n        {\n            var user =\n                await\n                (from tweet in twitterCtx.User\n                 where tweet.Type == UserType.Categories\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (user != null && user.Categories != null)\n                user.Categories.ForEach(cat => \n                    Console.WriteLine(\"Category: \" + cat.Name));\n        }\n\n        static async Task ShowUsersInCategoryAsync(TwitterContext twitterCtx)\n        {\n            var catUsers =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.CategoryStatus &&\n                       user.Slug == \"Technology\"\n                 select user)\n                .ToListAsync();\n\n            if (catUsers != null)\n            {\n                Console.WriteLine(\"Tweets: \\n\");\n\n                catUsers.ForEach(user =>\n                {\n                    if (user != null && user.Status != null)\n                        Console.WriteLine(\n                            \"User: {0}\\nTweet: {1}\\n\",\n                            user.ScreenNameResponse,\n                            user.Status == null ?\n                                \"<Tweet not available.>\" :\n                                user.Status.Text);\n                }); \n            }\n        }\n\n        static async Task ReportSpammerAsync(TwitterContext twitterCtx)\n        {\n            const string SpammerScreenName = \"realDonaldTrump\";\n\n            User spammer = await twitterCtx.ReportSpamAsync(SpammerScreenName, performBlock: true);\n\n            Console.WriteLine(\"You just reported {0} as a spammer.\", spammer.ScreenNameResponse);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/CSharp/ConsoleSamples/WelcomeMessageDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\n\nnamespace Linq2TwitterDemos_Console\n{\n    class WelcomeMessageDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tCreating Welcome Message...\\n\");\n                        await CreateNewWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tUpdating Welcome Message...\\n\");\n                        await UpdateWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\nShowing Welcome Message...\\n\");\n                        await ShowWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\nListing Welcome Messages...\\n\");\n                        await ListWelcomeMessagesAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tDeleting Welcome Message...\\n\");\n                        await DeleteWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tCreating Welcome Message Rule...\\n\");\n                        await CreateNewWelcomeMessageRuleAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\nShowing Welcome Message Rules...\\n\");\n                        await ShowWelcomeMessageRuleAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\nListing Welcome Message Rules...\\n\");\n                        await ListWelcomeMessageRulesAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tDeleting Welcome Message Rule...\\n\");\n                        await DeleteWelcomeMessageRuleAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nDirect Message Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Create a New Welcome Message\");\n            Console.WriteLine(\"\\t 1. Update a Welcome Message\");\n            Console.WriteLine(\"\\t 2. Show a Welcome Message\");\n            Console.WriteLine(\"\\t 3. List Welcome Messages\");\n            Console.WriteLine(\"\\t 4. Delete a Welcome Message\");\n            Console.WriteLine(\"\\t 5. Create a New Welcome Message Rule\");\n            Console.WriteLine(\"\\t 6. Show a Welcome Message Rule\");\n            Console.WriteLine(\"\\t 7. List Welcome Message Rules\");\n            Console.WriteLine(\"\\t 8. Delete a Welcome Message Rule\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task CreateNewWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            WelcomeMessage message =\n                await twitterCtx.NewWelcomeMessageAsync(\n                    \"New Welcome Message\",\n                    \"Welcome!\");\n\n            WelcomeMsg msg = message?.Value?.WelcomeMessage;\n            if (msg != null)\n            {\n                Console.WriteLine(\n                    $\"Message ID: '{msg.Id}' \\n\" +\n                    $\"Message Name: '{msg.Name} \\n\" +\n                    $\"Message Text: '{msg.MessageData.Text}\\n\");\n            }\n        }\n\n        static async Task UpdateWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID: \");\n            string respone = Console.ReadLine();\n            ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage message =\n                await twitterCtx.UpdateWelcomeMessageAsync(\n                    wecomeMessageID,\n                    \"New Name\",\n                    \"Welcome to LINQ to Twitter!\");\n\n            WelcomeMsg msg = message?.Value?.WelcomeMessage;\n            if (msg != null)\n            {\n                Console.WriteLine(\n                    $\"Message ID: '{msg.Id}' \\n\" +\n                    $\"Message Name: '{msg.Name} \\n\" +\n                    $\"Message Text: '{msg.MessageData.Text}\\n\");\n            }\n        }\n\n        static async Task ShowWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID: \");\n            string respone = Console.ReadLine();\n            ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ShowMessage &&\n                       welcomeMsg.ID == wecomeMessageID\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            WelcomeMsg msg = message?.Value?.WelcomeMessage;\n            if (msg != null)\n            {\n                Console.WriteLine(\n                    $\"Message ID: '{msg.Id}' \\n\" +\n                    $\"Message Name: '{msg.Name} \\n\" +\n                    $\"Message Text: '{msg.MessageData.Text}\\n\");\n            }\n        }\n\n        static async Task ListWelcomeMessagesAsync(TwitterContext twitterCtx)\n        {\n            int count = 10; // set to a low number to demo paging\n            string cursor = \"\";\n            List<WelcomeMsg> allWelcomeMessages = new List<WelcomeMsg>();\n\n            // you don't have a valid cursor until after the first query\n            WelcomeMessage message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ListMessages &&\n                       welcomeMsg.Count == count\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            allWelcomeMessages.AddRange(message.Value.WelcomeMessages);\n            cursor = message.Value.NextCursor;\n\n            while (!string.IsNullOrWhiteSpace(cursor))\n            {\n                message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ListMessages &&\n                       welcomeMsg.Count == count &&\n                       welcomeMsg.Cursor == cursor\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n                allWelcomeMessages.AddRange(message.Value.WelcomeMessages);\n                cursor = message.Value.NextCursor;\n            }\n\n            if (!allWelcomeMessages.Any())\n            {\n                Console.WriteLine(\"No items returned\");\n                return;\n            }\n\n            Console.WriteLine($\"Response Count: {allWelcomeMessages.Count}\");\n            Console.WriteLine(\"Responses:\\n\");\n\n            allWelcomeMessages.ForEach(msg =>\n            {\n                if (msg != null)\n                {\n                    Console.WriteLine(\n                        $\"Message ID: '{msg.Id}' \\n\" +\n                        $\"      Name: '{msg.Name} \\n\" +\n                        $\"      Text: '{msg.MessageData.Text}\\n\");\n                }\n            });\n        }\n\n        static async Task DeleteWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID: \");\n            string respone = Console.ReadLine();\n            ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            await twitterCtx.DeleteWelcomeMessageAsync(wecomeMessageID);\n\n            Console.WriteLine(\"Message deleted.\");\n        }\n\n        static async Task CreateNewWelcomeMessageRuleAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID to set as default: \");\n            string respone = Console.ReadLine();\n            ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage welcomeMsg =\n                await twitterCtx.NewWelcomeMessageRuleAsync(wecomeMessageID);\n\n            WelcomeMessageRule rule = welcomeMsg?.Value?.WelcomeMessageRule;\n            if (rule != null)\n                Console.WriteLine(\n                    $\"Rule ID '{rule.ID}' \" +\n                    $\"for welcome message ID: '{rule.WelcomeMessageID}' \" +\n                    $\"set as default on {rule.CreatedAt}\");\n        }\n\n        static async Task ShowWelcomeMessageRuleAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message rule ID: \");\n            string respone = Console.ReadLine();\n            ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ShowRule &&\n                       welcomeMsg.ID == wecomeMessageID\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            WelcomeMessageRule rule = message?.Value?.WelcomeMessageRule;\n            if (rule != null)\n            {\n                Console.WriteLine(\n                    $\"Rule ID '{rule.ID}' \\n\" +\n                    $\"for welcome message ID: '{rule.WelcomeMessageID}' \\n\" +\n                    $\"set as default on {rule.CreatedAt}\\n\");\n            }\n        }\n\n        static async Task ListWelcomeMessageRulesAsync(TwitterContext twitterCtx)\n        {\n            int count = 5; // set to a low number to demo paging\n            string cursor = \"\";\n            List<WelcomeMessageRule> allWelcomeMessageRules = new List<WelcomeMessageRule>();\n\n            // you don't have a valid cursor until after the first query\n            WelcomeMessage message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ListRules &&\n                       welcomeMsg.Count == count\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            List<WelcomeMessageRule> rules = message?.Value?.WelcomeMessageRules ?? new List<WelcomeMessageRule>();\n            allWelcomeMessageRules.AddRange(rules);\n            cursor = message.Value.NextCursor;\n\n            while (!string.IsNullOrWhiteSpace(cursor))\n            {\n                message =\n                    await\n                    (from welcomeMsg in twitterCtx.WelcomeMessage\n                     where welcomeMsg.Type == WelcomeMessageType.ListRules &&\n                           welcomeMsg.Count == count &&\n                           welcomeMsg.Cursor == cursor\n                     select welcomeMsg)\n                    .SingleOrDefaultAsync();\n\n                allWelcomeMessageRules.AddRange(message.Value.WelcomeMessageRules);\n                cursor = message.Value.NextCursor;\n            }\n\n            if (!allWelcomeMessageRules.Any())\n            {\n                Console.WriteLine(\"No items returned\");\n                return;\n            }\n\n            Console.WriteLine($\"Response Count: {allWelcomeMessageRules.Count}\");\n            Console.WriteLine(\"Responses:\\n\");\n\n            allWelcomeMessageRules.ForEach(rule =>\n            {\n                if (rule != null)\n                {\n                    Console.WriteLine(\n                        $\"Rule ID '{rule.ID}' \\n\" +\n                        $\"for welcome message ID: '{rule.WelcomeMessageID}' \\n\" +\n                        $\"set as default on {rule.CreatedAt}\\n\");\n                }\n            });\n        }\n\n        static async Task DeleteWelcomeMessageRuleAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message rule ID: \");\n            string respone = Console.ReadLine();\n            ulong.TryParse(respone, out ulong wecomeMessageRuleID);\n\n            await twitterCtx.DeleteWelcomeMessageRuleAsync(wecomeMessageRuleID);\n\n            Console.WriteLine(\"Message rule deleted.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/VB/ConsoleSamplesVB/ConsoleSamplesVB/ConsoleSamplesVB.vbproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>ConsoleSamplesVB</RootNamespace>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"linqtotwitter\" Version=\"5.1.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/VB/ConsoleSamplesVB/ConsoleSamplesVB/Program.vb",
    "content": "Imports System.Net\nImports System.Net.Sockets\nImports LinqToTwitter\n\nModule Program\n\n    Sub Main()\n        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12\n\n        SendTweet().Wait()\n    End Sub\n\n    Async Function SendTweet() As Task\n\n        Dim credentials As InMemoryCredentialStore = New InMemoryCredentialStore\n        credentials.ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey)\n        credentials.ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n\n        Dim auth As PinAuthorizer = New PinAuthorizer()\n        auth.CredentialStore = credentials\n        auth.GetPin =\n                Function()\n                    Console.WriteLine(\"Next, you'll need to tell Twitter to authorize access. This program will not have access to your credentials, which is the benefit of OAuth. Once you log into Twitter and give this program permission, come back to this console.\")\n                    Console.WriteLine()\n                    Console.Write(\"Please enter the PIN from Twitter: \")\n\n                    Return Console.ReadLine()\n                End Function\n        auth.GoToTwitterAuthorization =\n            Function(pageLink)\n                Dim psi As ProcessStartInfo = New ProcessStartInfo\n                With psi\n                    .FileName = pageLink\n                    .UseShellExecute = True\n                End With\n                Return Process.Start(psi)\n            End Function\n\n        Await auth.AuthorizeAsync()\n\n        Dim twitterCtx = New TwitterContext(auth)\n\n        Console.Write(\"Type '1' to tweet or '2' to search: \")\n        Dim key = Console.ReadKey()\n\n        If (key.Key = ConsoleKey.D1) Then\n            Await twitterCtx.TweetAsync(\"Test tweet: \" & Date.Now)\n        Else\n            Await SearchAsync(twitterCtx)\n        End If\n\n        Console.WriteLine()\n        Console.Write(\"Press any key to continue...\")\n        Console.ReadKey()\n\n    End Function\n\n    Private Async Function SearchAsync(twitterCtx As TwitterContext) As Task\n        Dim Response As Search =\n            Await (From search In twitterCtx.Search()\n                   Where search.Type = SearchType.Search _\n                   AndAlso search.TweetMode = TweetMode.Extended _\n                   AndAlso search.Query = \"Coronavirus\") _\n                  .SingleOrDefaultAsync()\n\n        Dim tweets As List(Of Status) = Response.Statuses()\n\n        If Response IsNot Nothing AndAlso Response.Statuses IsNot Nothing Then\n            For Each str As Status In tweets\n                Console.WriteLine(str.StatusID.ToString() + \" \" + str.FullText)\n\n                If str.ExtendedEntities.MediaEntities.Count > 0 Then\n                    Console.WriteLine(\" - Media URL: \" + str.ExtendedEntities.MediaEntities(0).MediaUrl)\n                End If\n            Next\n        End If\n    End Function\nEnd Module\n"
  },
  {
    "path": "Samples/LinqToTwitter5/net48/VB/ConsoleSamplesVB/ConsoleSamplesVB.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30011.22\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"ConsoleSamplesVB\", \"ConsoleSamplesVB\\ConsoleSamplesVB.vbproj\", \"{71DAFF56-BE0C-428F-821D-AAD725D1B1BD}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{71DAFF56-BE0C-428F-821D-AAD725D1B1BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{71DAFF56-BE0C-428F-821D-AAD725D1B1BD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{71DAFF56-BE0C-428F-821D-AAD725D1B1BD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{71DAFF56-BE0C-428F-821D-AAD725D1B1BD}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {7DDB0663-CD83-4385-AAC9-964994EB2987}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/App.xaml",
    "content": "﻿<Application\n    x:Class=\"UwpSamples.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:UwpSamples\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace UwpSamples\n{\n    /// <summary>\n    /// Provides application-specific behavior to supplement the default Application class.\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// Initializes the singleton application object.  This is the first line of authored code\n        /// executed, and as such is the logical equivalent of main() or WinMain().\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// Invoked when the application is launched normally by the end user.  Other entry points\n        /// will be used such as when the application is launched to open a specific file.\n        /// </summary>\n        /// <param name=\"e\">Details about the launch request and process.</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // Do not repeat app initialization when the Window already has content,\n            // just ensure that the window is active\n            if (rootFrame == null)\n            {\n                // Create a Frame to act as the navigation context and navigate to the first page\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: Load state from previously suspended application\n                }\n\n                // Place the frame in the current Window\n                Window.Current.Content = rootFrame;\n            }\n\n            if (rootFrame.Content == null)\n            {\n                // When the navigation stack isn't restored navigate to the first page,\n                // configuring the new page by passing required information as a navigation\n                // parameter\n                rootFrame.Navigate(typeof(MainPage), e.Arguments);\n            }\n            // Ensure the current window is active\n            Window.Current.Activate();\n        }\n\n        /// <summary>\n        /// Invoked when Navigation to a certain page fails\n        /// </summary>\n        /// <param name=\"sender\">The Frame which failed navigation</param>\n        /// <param name=\"e\">Details about the navigation failure</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// Invoked when application execution is being suspended.  Application state is saved\n        /// without knowing whether the application will be terminated or resumed with the contents\n        /// of memory still intact.\n        /// </summary>\n        /// <param name=\"sender\">The source of the suspend request.</param>\n        /// <param name=\"e\">Details about the suspend request.</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: Save application state and stop any background activity\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/JsonContent.cs",
    "content": "﻿namespace UwpSamples\n{\n    public class JsonContent\n    {\n        public string Content { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"UwpSamples.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:UwpSamples\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\" Margin=\"20\">\n        <StackPanel>\n            <Button x:Name=\"searchButton\" Content=\"Search\" Margin=\"10,10,10,0\" HorizontalAlignment=\"Stretch\" Click=\"searchButton_Click\"/>\n            <Button x:Name=\"tweetButton\" Content=\"Tweet\" Margin=\"10,10,10,0\" HorizontalAlignment=\"Stretch\" Click=\"tweetButton_Click\"/>\n        </StackPanel>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/MainPage.xaml.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace UwpSamples\n{\n    /// <summary>\n    /// Navigate to LINQ to Twitter Samples\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        public MainPage()\n        {\n            this.InitializeComponent();\n        }\n\n        private void searchButton_Click(object sender, RoutedEventArgs e)\n        {\n            Frame.Navigate(typeof(SearchPage));\n        }\n\n        private void tweetButton_Click(object sender, RoutedEventArgs e)\n        {\n            Frame.Navigate(typeof(TweetPage));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\" xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\" IgnorableNamespaces=\"uap mp\">\n  <Identity Name=\"84a7394d-ee4e-415a-a92d-047a4779000b\" Publisher=\"CN=JoeMayo\" Version=\"1.0.13.0\" />\n  <mp:PhoneIdentity PhoneProductId=\"84a7394d-ee4e-415a-a92d-047a4779000b\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\" />\n  <Properties>\n    <DisplayName>UwpSamples</DisplayName>\n    <PublisherDisplayName>jmayo</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n  <Resources>\n    <Resource Language=\"x-generate\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"UwpSamples.App\">\n      <uap:VisualElements DisplayName=\"UwpSamples\" Square150x150Logo=\"Assets\\Square150x150Logo.png\" Square44x44Logo=\"Assets\\Square44x44Logo.png\" Description=\"UwpSamples\" BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\">\n        </uap:DefaultTile>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"UwpSamples\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"UwpSamples\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Seralize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\" />\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/SearchPage.xaml",
    "content": "﻿<Page\n    x:Class=\"UwpSamples.SearchPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:UwpSamples\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\" Margin=\"20\">\n        <StackPanel>\n            <StackPanel>\n                <TextBox Name=\"searchText\"/>\n                <Button Name=\"SearchButton\" Click=\"SearchButton_Click\" Content=\"Search\"/>\n            </StackPanel>\n            <ListView x:Name=\"tweetListView\" HorizontalAlignment=\"Stretch\" Margin=\"5\" VerticalAlignment=\"Stretch\">\n                <ListView.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\">\n                            <Image Source=\"{Binding ImageUrl}\"/>\n                            <StackPanel>\n                                <TextBlock Text=\"{Binding ScreenName}\"/>\n                                <TextBlock Text=\"{Binding Text}\"/>\n                            </StackPanel>\n                        </StackPanel>\n                    </DataTemplate>\n                </ListView.ItemTemplate>    \n            </ListView>\n        </StackPanel>\n\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/SearchPage.xaml.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.Linq;\nusing LinqToTwitter;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing System.Collections.Generic;\n\nnamespace UwpSamples\n{\n    /// <summary>\n    /// Twitter API Search Demo\n    /// </summary>\n    public sealed partial class SearchPage : Page\n    {\n        public SearchPage()\n        {\n            this.InitializeComponent();\n\n            searchText.Text = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter\";\n        }\n\n        async void SearchButton_Click(object sender, RoutedEventArgs e)\n        {\n            var authorizer = new ApplicationOnlyAuthorizer\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                }\n            };\n\n            await authorizer.AuthorizeAsync();\n            var ctx = new TwitterContext(authorizer);\n\n            string searchString = searchText.Text;\n\n            Search searchResponse =\n                await\n                (from search in ctx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == searchString\n                 select search)\n                .SingleOrDefaultAsync();\n\n            List<TweetViewModel> tweets =\n                (from tweet in searchResponse.Statuses\n                 select new TweetViewModel\n                 {\n                     ImageUrl = tweet.User.ProfileImageUrl,\n                     ScreenName = tweet.User.ScreenNameResponse,\n                     Text = tweet.Text\n                 })\n                .ToList();\n\n            tweetListView.ItemsSource = new ObservableCollection<TweetViewModel>(tweets);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/SharedState.cs",
    "content": "﻿using LinqToTwitter;\n\nnamespace UwpSamples\n{\n    public class SharedState\n    {\n        public static IAuthorizer Authorizer { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/TweetPage.xaml",
    "content": "﻿<Page\n    x:Class=\"UwpSamples.TweetPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:UwpSamples\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\" Margin=\"20\">\n        <StackPanel>\n            <TextBox Name=\"tweetText\" Margin=\"10,10,10,0\"/>\n            <Button Name=\"TweetButton\" Content=\"tweet\" Margin=\"10,10,10,0\" Click=\"TweetButton_Click\"/>\n            <TextBlock Margin=\"10,10,0,0\">Response:</TextBlock>\n            <TextBlock Name=\"ResponseTextBlock\" Margin=\"20,10,20,0\"/>\n        </StackPanel>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/TweetPage.xaml.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\nusing Windows.UI.Popups;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace UwpSamples\n{\n    /// <summary>\n    /// Send a Tweet Sample.\n    /// </summary>\n    public sealed partial class TweetPage : Page\n    {\n        public TweetPage()\n        {\n            this.InitializeComponent();\n\n            tweetText.Text = \"Testing from a Universal Windows App: \" + DateTime.Now + \" #woot to @Linq2Twitr\";\n        }\n\n        private async void TweetButton_Click(object sender, RoutedEventArgs e)\n        {\n            var authorizer = new UniversalAuthorizer\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\"\n                }\n            };\n\n            await authorizer.AuthorizeAsync();\n            var ctx = new TwitterContext(authorizer);\n\n            string userInput = tweetText.Text;\n            Status tweet = await ctx.TweetAsync(userInput);\n\n            ResponseTextBlock.Text = tweet.Text;\n\n            await new MessageDialog(\"You Tweeted: \" + tweet.Text, \"Success!\").ShowAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/TweetViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace UwpSamples\n{\n    public class TweetViewModel\n    {\n        public string ImageUrl { get; set; }\n\n        public string ScreenName { get; set; }\n\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/TwitterCommand.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\n\nnamespace UwpSamples\n{\n    class  TwitterCommand<T> : ICommand\n    {\n        readonly Action<T> callback;\n\n        public TwitterCommand(Action<T> handler)\n        {\n            callback = handler;\n        }\n\n        public bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public event EventHandler CanExecuteChanged;\n\n        public void Execute(object parameter)\n        {\n            if (callback != null) callback((T)parameter);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter5/uap10.0/CSharp/UwpSamples/UwpSamples.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{D25C4CC4-83B7-462A-A51E-C57763FE81C9}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>UwpSamples</RootNamespace>\n    <AssemblyName>UwpSamples</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion>10.0.16299.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>UwpSamples_TemporaryKey.pfx</PackageCertificateKeyFile>\n    <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>\n    <AppxBundle>Always</AppxBundle>\n    <AppxBundlePlatforms>x86|arm</AppxBundlePlatforms>\n    <PackageCertificateThumbprint>C160A3A099496E032A3150421F03B364D39D3EE2</PackageCertificateThumbprint>\n    <RuntimeIdentifiers>win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot</RuntimeIdentifiers>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"JsonContent.cs\" />\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SearchPage.xaml.cs\">\n      <DependentUpon>SearchPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"SharedState.cs\" />\n    <Compile Include=\"TweetPage.xaml.cs\">\n      <DependentUpon>TweetPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"TweetViewModel.cs\" />\n    <Compile Include=\"TwitterCommand.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"UwpSamples_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"SearchPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Page Include=\"TweetPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.1.5</Version>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.netstandard\\LinqToTwitter.netstandard.csproj\">\n      <Project>{50a782c7-cf5d-456b-8d9c-2f124b594b45}</Project>\n      <Name>LinqToTwitter.netstandard</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\..\\..\\src\\LinqToTwitter\\LinqToTwitter.Uwp\\LinqToTwitter.Uwp.csproj\">\n      <Project>{6db2e62f-2a71-4cc8-aa09-9673a75757a1}</Project>\n      <Name>LinqToTwitter.Uwp</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Controllers/HomeController.cs",
    "content": "﻿using LinqToTwitter.MVC.CSharp.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System.Diagnostics;\n\nnamespace LinqToTwitter.MVC.CSharp.Controllers\n{\n    public class HomeController : Controller\n    {\n        private readonly ILogger<HomeController> _logger;\n\n        public HomeController(ILogger<HomeController> logger)\n        {\n            _logger = logger;\n        }\n\n        public IActionResult Index()\n        {\n            if (!new OAuth2SessionCredentialStore(HttpContext.Session).HasAllCredentials())\n                return RedirectToAction(\"Index\", \"OAuth2\");\n\n            return View();\n        }\n\n        public IActionResult Privacy()\n        {\n            return View();\n        }\n\n        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\n        public IActionResult Error()\n        {\n            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Controllers/OAuth2Controller.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Http.Extensions;\nusing LinqToTwitter.OAuth;\nusing Microsoft.Extensions.Primitives;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter.MVC.CSharp.Controllers\n{\n    public class OAuth2Controller : Controller\n    {\n        private readonly ILogger<OAuth2Controller> logger;\n\n        public OAuth2Controller(ILogger<OAuth2Controller> logger)\n        {\n            this.logger = logger;\n        }\n\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public async Task<ActionResult> BeginAsync()\n        {\n            string twitterCallbackUrl = Request.GetDisplayUrl().Replace(\"Begin\", \"Complete\");\n\n            var auth = new MvcOAuth2Authorizer\n            {\n                CredentialStore = new OAuth2SessionCredentialStore(HttpContext.Session)\n                {\n                    ClientID = Environment.GetEnvironmentVariable(OAuthKeys.TwitterClientID),\n                    ClientSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterClientSecret),\n                    Scopes = new List<string>\n                    {\n                        \"tweet.read\",\n                        \"tweet.write\",\n                        \"tweet.moderate.write\",\n                        \"users.read\",\n                        \"follows.read\",\n                        \"follows.write\",\n                        \"offline.access\",\n                        \"space.read\",\n                        \"mute.read\",\n                        \"mute.write\",\n                        \"like.read\",\n                        \"like.write\",\n                        \"block.read\",\n                        \"block.write\"\n                    },\n                    RedirectUri = twitterCallbackUrl,\n                }\n            };\n\n            return await auth.BeginAuthorizeAsync(\"MyState\");\n        }\n\n        public async Task<ActionResult> CompleteAsync()\n        {\n            var auth = new MvcOAuth2Authorizer\n            {\n                CredentialStore = new OAuth2SessionCredentialStore(HttpContext.Session)\n            };\n\n            Request.Query.TryGetValue(\"code\", out StringValues code);\n            Request.Query.TryGetValue(\"state\", out StringValues state);\n\n            await auth.CompleteAuthorizeAsync(code, state);\n\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Controllers/OAuthController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Http.Extensions;\n\nnamespace LinqToTwitter.MVC.CSharp.Controllers\n{\n    public class OAuthController : Controller\n    {\n        private readonly ILogger<OAuthController> logger;\n\n        public OAuthController(ILogger<OAuthController> logger)\n        {\n            this.logger = logger;\n        }\n\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public async Task<ActionResult> BeginAsync()\n        {\n            //var auth = new MvcSignInAuthorizer\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(\"TwitterConsumerKey\"),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(\"TwitterConsumerSecret\")\n                }\n            };\n\n            // Available in v5.1.0 - you can pass parameters that you can read in Complete(), via Request.QueryString, when Twitter returns\n            //var parameters = new Dictionary<string, string> { { \"my_custom_param\", \"val\" } };\n            //string twitterCallbackUrl = Request.GetDisplayUrl().Replace(\"Begin\", \"Complete\");\n            //return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl), parameters);\n            await auth.CredentialStore.ClearAsync();\n            string twitterCallbackUrl = Request.GetDisplayUrl().Replace(\"Begin\", \"Complete\");\n            return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl));\n        }\n\n        public async Task<ActionResult> CompleteAsync()\n        {\n            var auth = new MvcAuthorizer\n            {\n                CredentialStore = new SessionStateCredentialStore(HttpContext.Session)\n            };\n\n            await auth.CompleteAuthorizeAsync(new Uri(Request.GetDisplayUrl()));\n\n            // This is how you access credentials after authorization.\n            // The oauthToken and oauthTokenSecret do not expire.\n            // You can use the userID to associate the credentials with the user.\n            // You can save credentials any way you want - database, \n            //   isolated storage, etc. - it's up to you.\n            // You can retrieve and load all 4 credentials on subsequent \n            //   queries to avoid the need to re-authorize.\n            // When you've loaded all 4 credentials, LINQ to Twitter will let \n            //   you make queries without re-authorizing.\n            //\n            //var credentials = auth.CredentialStore;\n            //string oauthToken = credentials.OAuthToken;\n            //string oauthTokenSecret = credentials.OAuthTokenSecret;\n            //string screenName = credentials.ScreenName;\n            //ulong userID = credentials.UserID;\n            //\n\n            return RedirectToAction(\"Index\", \"Home\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Controllers/TweetDemosController.cs",
    "content": "﻿using LinqToTwitter;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.MVC.CSharp.Models;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace MvcDemo.Controllers\n{\n    public class TweetDemosController : Controller\n    {\n        readonly IWebHostEnvironment webHostEnvironment;\n\n        public TweetDemosController(IWebHostEnvironment webHostEnvironment)\n        {\n            this.webHostEnvironment = webHostEnvironment;\n        }\n\n        public ActionResult Index()\n        {\n            return View();\n        }\n\n        public ActionResult Tweet()\n        {\n            var sendTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing async LINQ to Twitter in MVC - \" + DateTime.Now.ToString()\n            };\n\n            return View(sendTweetVM);\n        }\n\n        [HttpPost]\n        [ActionName(\"Tweet\")]\n        public async Task<ActionResult> TweetAsync(SendTweetViewModel tweet)\n        {\n            var auth = new MvcOAuth2Authorizer\n            {\n                CredentialStore = new OAuth2SessionCredentialStore(HttpContext.Session)\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            Tweet responseTweet = await ctx.TweetAsync(tweet.Text);\n\n            var responseTweetVM = new SendTweetViewModel\n            {\n                Text = \"Testing async LINQ to Twitter in MVC - \" + DateTime.Now.ToString(),\n                Response = \"Tweet successful! Response from Twitter: \" + responseTweet.Text\n            };\n\n            return View(responseTweetVM);\n        }\n\n        [ActionName(\"TweetTimeline\")]\n        public async Task<ActionResult> TweetTimelineAsync()\n        {\n            var auth = new MvcOAuth2Authorizer\n            {\n                CredentialStore = new OAuth2SessionCredentialStore(HttpContext.Session)\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            var userQuery =\n                await\n                (from usr in ctx.TwitterUser\n                 where usr.Type == UserType.UsernameLookup &&\n                       usr.Usernames == \"Linq2Twitr\" &&\n                       usr.UserFields == UserField.ProfileImageUrl\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            TwitterUser user = userQuery.Users.FirstOrDefault();\n\n            var tweetQuery =\n                await\n                (from tweet in ctx.Tweets\n                 where tweet.Type == TweetType.TweetsTimeline &&\n                       tweet.ID == user.ID.ToString()\n                 select tweet)\n                .SingleOrDefaultAsync();\n            \n            var tweets =\n                (from tweet in tweetQuery.Tweets\n                 select new TweetViewModel\n                 {\n                    ImageUrl = user.ProfileImageUrl,\n                    ScreenName = user.Name,\n                    Text = tweet.Text\n                 })\n                .ToList();\n\n            return View(tweets);\n        }\n\n        [ActionName(\"UploadImage\")]\n        public async Task<ActionResult> UploadImageAsync()\n        {\n            var auth = new MvcOAuth2Authorizer\n            {\n                CredentialStore = new OAuth2SessionCredentialStore(HttpContext.Session)\n            };\n\n            var ctx = new TwitterContext(auth);\n\n            string status = $\"Testing multi-image tweet #Linq2Twitter £ {DateTime.Now}\";\n            string mediaCategory = \"tweet_image\";\n\n            string path = \n                Path.Combine(\n                    webHostEnvironment.WebRootPath, \n                    \"images\", \n                    \"200xColor_2.png\");\n            var imageUploadTasks =\n                new List<Task<Media>>\n                {\n                    ctx.UploadMediaAsync(System.IO.File.ReadAllBytes(path), \"image/jpg\", mediaCategory),\n                };\n\n            await Task.WhenAll(imageUploadTasks);\n\n            List<string> mediaIds =\n                (from tsk in imageUploadTasks\n                 select tsk.Result.MediaID.ToString())\n                .ToList();\n\n            Tweet tweet = await ctx.TweetMediaAsync(status, mediaIds);\n\n            return View(\n                new MediaViewModel\n                {\n                    MediaUrl = tweet.Entities.Urls.FirstOrDefault()?.Url,\n                    Description = tweet.Entities.Urls.FirstOrDefault()?.Description,\n                    Text = tweet.Text\n                });\n        }\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.VisualStudio.Web.CodeGeneration.Design\" Version=\"5.0.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Reference Include=\"LinqToTwitter\">\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter6\\LinqToTwitter.AspNet\\bin\\Debug\\net6.0\\LinqToTwitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"LinqToTwitter.AspNet\">\n      <HintPath>..\\..\\..\\..\\..\\src\\LinqToTwitter6\\LinqToTwitter.AspNet\\bin\\Debug\\net6.0\\LinqToTwitter.AspNet.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Models/ErrorViewModel.cs",
    "content": "using System;\n\nnamespace LinqToTwitter.MVC.CSharp.Models\n{\n    public class ErrorViewModel\n    {\n        public string RequestId { get; set; }\n\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Models/MediaViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace LinqToTwitter.MVC.CSharp.Models\n{\n    public class MediaViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string MediaUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string Description { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Models/SendTweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace LinqToTwitter.MVC.CSharp.Models\n{\n    public class SendTweetViewModel\n    {\n        [DisplayName(\"Tweet Text:\")]\n        [Required]\n        [DataType(DataType.MultilineText)]\n        public string Text { get; set; }\n\n\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Models/TweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace LinqToTwitter.MVC.CSharp.Models\n{\n    public class TweetViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string ImageUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string ScreenName { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.MVC.CSharp\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateHostBuilder(args).Build().Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Properties/launchSettings.json",
    "content": "﻿{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://127.0.0.1:62333\",\n      \"sslPort\": 44395\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"LinqToTwitter.MVC.CSharp\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": \"true\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://127.0.0.1:5001;http://127.0.0.1:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Startup.cs",
    "content": "using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing System;\nusing System.Net;\n\nnamespace LinqToTwitter.MVC.CSharp\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddDistributedMemoryCache();\n\n            services.AddSession(options =>\n            {\n                options.Cookie.HttpOnly = true;\n                options.Cookie.IsEssential = true;\n            });\n\n            services.AddControllersWithViews();\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            else\n            {\n                app.UseExceptionHandler(\"/Home/Error\");\n                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\n                app.UseHsts();\n            }\n            app.UseHttpsRedirection();\n            app.UseStaticFiles();\n\n            app.UseRouting();\n\n            app.UseAuthorization();\n\n            app.UseSession();\n\n            app.UseEndpoints(endpoints =>\n            {\n                endpoints.MapControllerRoute(\n                    name: \"default\",\n                    pattern: \"{controller=Home}/{action=Index}/{id?}\");\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/Home/Index.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"LINQ to TWitter\";\n}\n\n<div class=\"jumbotron\">\n    <h1>LINQ to Twitter</h1>\n    <p class=\"lead\">LINQ to Twitter is an open-source 3rd party library for working with the Twitter API. Please select a menu item to view demos for how LINQ to Twitter supports each category of the Twitter API.</p>\n    <p><a href=\"https://github.com/JoeMayo/LinqToTwitter\" class=\"btn btn-primary btn-large\">Learn more &raquo;</a></p>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <h2>Getting started</h2>\n        <p>\n            LINQ to Twitter has extensive documentation. You can get basic guidance, security info, and specifications for each API. Be sure to check out the FAQ too.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"https://github.com/JoeMayo/LinqToTwitter/wiki\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get help</h2>\n        <p>\n            When these demos don't have the info you need, you can still get help by visiting Stack Overflow. Tip: The linq-to-twitter and twitter tags usually receive a quicker response.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"http://stackoverflow.com/questions/tagged/linq-to-twitter\">Learn more &raquo;</a>\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h2>Get the code</h2>\n        <p>\n            You can download the code from the LINQ to Twitter site on GitHub.com, but the most convenient way to use LINQ to Twitter is via NuGet.\n        </p>\n        <p>\n            <a class=\"btn btn-default\" href=\"http://www.nuget.org/packages/linqtotwitter\">Learn more &raquo;</a>\n        </p>\n    </div>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/Home/Privacy.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Privacy Policy\";\n}\n<h1>@ViewData[\"Title\"]</h1>\n\n<p>Use this page to detail your site's privacy policy.</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/OAuth/index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Authorizing Application with OAuth 1.0A\";\n}\n\n<h2>Authorize with OAuth 1.0A</h2>\n@Html.ActionLink(\"Begin the Authorization Process\", \"Begin\")\n\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/OAuth2/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Authorizing Application with OAuth 2.0\";\n}\n\n<h2>Authorize with OAuth 2.0</h2>\n@Html.ActionLink(\"Begin the Authorization Process\", \"Begin\")\n\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/Shared/Error.cshtml",
    "content": "﻿@model ErrorViewModel\n@{\n    ViewData[\"Title\"] = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n@if (Model.ShowRequestId)\n{\n    <p>\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\n    </p>\n}\n\n<h3>Development Mode</h3>\n<p>\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\n</p>\n<p>\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\n    It can result in displaying sensitive information from exceptions to end users.\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\n    and restarting the app.\n</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>@ViewData[\"Title\"] - .NET 5 Demo</title>\n    <link rel=\"stylesheet\" href=\"~/lib/bootstrap/dist/css/bootstrap.min.css\" />\n    <link rel=\"stylesheet\" href=\"~/css/site.css\" />\n</head>\n<body>\n    <header>\n        <nav class=\"navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3\">\n            <div class=\"container\">\n                <a class=\"navbar-brand\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Index\">LINQ to Twitter</a>\n                <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\".navbar-collapse\" aria-controls=\"navbarSupportedContent\"\n                        aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                    <span class=\"navbar-toggler-icon\"></span>\n                </button>\n                <div class=\"navbar-collapse collapse d-sm-inline-flex justify-content-between\">\n                    <ul class=\"navbar-nav flex-grow-1\">\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link text-dark\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Index\">Home</a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link text-dark\" asp-area=\"\" asp-controller=\"TweetDemos\" asp-action=\"Index\">Tweet Demos</a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link text-dark\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Privacy\">Privacy</a>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </nav>\n    </header>\n    <div class=\"container\">\n        <main role=\"main\" class=\"pb-3\">\n            @RenderBody()\n        </main>\n    </div>\n\n    <footer class=\"border-top footer text-muted\">\n        <div class=\"container\">\n            &copy; 2020 - LINQ to Twitter - <a asp-area=\"\" asp-controller=\"Home\" asp-action=\"Privacy\">Privacy</a>\n        </div>\n    </footer>\n    <script src=\"~/lib/jquery/dist/jquery.min.js\"></script>\n    <script src=\"~/lib/bootstrap/dist/js/bootstrap.bundle.min.js\"></script>\n    <script src=\"~/js/site.js\" asp-append-version=\"true\"></script>\n    @await RenderSectionAsync(\"Scripts\", required: false)\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/Shared/_ValidationScriptsPartial.cshtml",
    "content": "﻿<script src=\"~/lib/jquery-validation/dist/jquery.validate.min.js\"></script>\n<script src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js\"></script>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/TweetDemos/Index.cshtml",
    "content": "﻿@{\n    ViewBag.Title = \"Tweet Demos\";\n}\n\n<h2>Tweet Demos</h2>\n\n<p>@Html.ActionLink(\"Tweet Demo\", \"Tweet\")</p>\n\n<p>@Html.ActionLink(\"Tweet Timeline Demo\", \"TweetTimeline\")</p>\n\n<p>@Html.ActionLink(\"Upload Image Demo\", \"UploadImage\")</p>"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/TweetDemos/Tweet.cshtml",
    "content": "﻿@model LinqToTwitter.MVC.CSharp.Models.SendTweetViewModel\n\n@{\n    ViewBag.Title = \"Tweet\";\n}\n\n<h2>Tweet</h2>\n\n@using (Html.BeginForm())\n{\n    @Html.AntiForgeryToken()\n\n    <div class=\"form-horizontal\">\n        <h4>Tweet Demo</h4>\n        <hr />\n        @Html.ValidationSummary(true)\n        <div class=\"form-group\">\n            @Html.LabelFor(model => model.Text, new { @class = \"control-label col-md-2\" })\n            <div class=\"col-md-10\">\n                @Html.TextAreaFor(model => model.Text, new { @class = \"form-control\", rows = \"3\" })\n                @Html.ValidationMessageFor(model => model.Text)\n            </div>\n        </div>\n\n        <div class=\"form-group\">\n            <div class=\"col-md-offset-2 col-md-10\">\n                <input type=\"submit\" value=\"Send\" class=\"btn btn-default\" />\n            </div>\n        </div>\n        <div class=\"col-md-offset-2 col-md-10\">\n            @Html.DisplayFor(model => model.Response)\n        </div>\n    </div>\n}\n\n<div>\n    @Html.ActionLink(\"Back to List\", \"Index\")\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/TweetDemos/TweetTimeline.cshtml",
    "content": "﻿@model IEnumerable<LinqToTwitter.MVC.CSharp.Models.TweetViewModel>\n\n@{\n    ViewBag.Title = \"Tweet Timeline\";\n}\n\n<h2>Tweet Timeline Demo</h2>\n\n<table class=\"table\">\n    <tr>\n        <th>\n            @Html.DisplayNameFor(model => model.ImageUrl)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.ScreenName)\n        </th>\n        <th>\n            @Html.DisplayNameFor(model => model.Text)\n        </th>\n        <th></th>\n    </tr>\n\n    @foreach (var item in Model)\n    {\n        <tr>\n            <td>\n                <img src=\"@item.ImageUrl\" alt=\"@item.ScreenName\" />\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.ScreenName)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.Text)\n            </td>\n        </tr>\n    }\n\n</table>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/TweetDemos/UploadImage.cshtml",
    "content": "﻿@model LinqToTwitter.MVC.CSharp.Models.MediaViewModel\n\n@{\n    ViewBag.Title = \"Upload Image\";\n}\n\n<h2>Upload Image</h2>\n\n<div>\n    <h4>Image Details</h4>\n    <hr />\n    <p>\n        Note: This part of the demo only works with OAuth 1.0a. \n        To use OAuth 1.0a, visit the HomeController.Index and \n        switch the redirection to \"OAuth\" instead of \"OAuth2\".\n    </p>\n    <dl class=\"dl-horizontal\">\n        <dt>\n            @Html.DisplayNameFor(model => model.MediaUrl)\n        </dt>\n\n        <dd>\n            @Html.DisplayFor(model => model.MediaUrl)\n        </dd>\n\n        <dt>\n            @Html.DisplayNameFor(model => model.Description)\n        </dt>\n\n        <dd>\n            @Html.DisplayFor(model => model.Description)\n        </dd>\n\n        <dt>\n            @Html.DisplayNameFor(model => model.Text)\n        </dt>\n\n        <dd>\n            @Html.DisplayFor(model => model.Text)\n        </dd>\n\n    </dl>\n</div>\n<p>\n    @Html.ActionLink(\"Edit\", \"Edit\", new { /* id = Model.PrimaryKey */ }) |\n    @Html.ActionLink(\"Back to List\", \"Index\")\n</p>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/_ViewImports.cshtml",
    "content": "﻿@using LinqToTwitter.MVC.CSharp\n@using LinqToTwitter.MVC.CSharp.Models\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/css/site.css",
    "content": "﻿/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\nfor details on configuring this project to bundle and minify static web assets. */\n\na.navbar-brand {\n  white-space: normal;\n  text-align: center;\n  word-break: break-all;\n}\n\n/* Provide sufficient contrast against white background */\na {\n  color: #0366d6;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #1b6ec2;\n  border-color: #1861ac;\n}\n\n.nav-pills .nav-link.active, .nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #1b6ec2;\n  border-color: #1861ac;\n}\n\n/* Sticky footer styles\n-------------------------------------------------- */\nhtml {\n  font-size: 14px;\n}\n@media (min-width: 768px) {\n  html {\n    font-size: 16px;\n  }\n}\n\n.border-top {\n  border-top: 1px solid #e5e5e5;\n}\n.border-bottom {\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.box-shadow {\n  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);\n}\n\nbutton.accept-policy {\n  font-size: 1rem;\n  line-height: inherit;\n}\n\n/* Sticky footer styles\n-------------------------------------------------- */\nhtml {\n  position: relative;\n  min-height: 100%;\n}\n\nbody {\n  /* Margin bottom by footer height */\n  margin-bottom: 60px;\n}\n.footer {\n  position: absolute;\n  bottom: 0;\n  width: 100%;\n  white-space: nowrap;\n  line-height: 60px; /* Vertically center the text there */\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/js/site.js",
    "content": "﻿// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification\n// for details on configuring this project to bundle and minify static web assets.\n\n// Write your JavaScript code.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/bootstrap/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2011-2018 Twitter, Inc.\nCopyright (c) 2011-2018 The Bootstrap Authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nhtml {\n  box-sizing: border-box;\n  -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/bootstrap/dist/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #007bff;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #dc3545;\n  --orange: #fd7e14;\n  --yellow: #ffc107;\n  --green: #28a745;\n  --teal: #20c997;\n  --cyan: #17a2b8;\n  --white: #fff;\n  --gray: #6c757d;\n  --gray-dark: #343a40;\n  --primary: #007bff;\n  --secondary: #6c757d;\n  --success: #28a745;\n  --info: #17a2b8;\n  --warning: #ffc107;\n  --danger: #dc3545;\n  --light: #f8f9fa;\n  --dark: #343a40;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: 2.5rem;\n}\n\nh2, .h2 {\n  font-size: 2rem;\n}\n\nh3, .h3 {\n  font-size: 1.75rem;\n}\n\nh4, .h4 {\n  font-size: 1.5rem;\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: 400;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #6c757d;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #6c757d;\n}\n\ncode {\n  font-size: 87.5%;\n  color: #e83e8c;\n  word-break: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 87.5%;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n}\n\npre {\n  display: block;\n  font-size: 87.5%;\n  color: #212529;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n  flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n  flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n  flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n  flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n  flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n  flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n  flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n  flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n  flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n  order: -1;\n}\n\n.order-last {\n  -ms-flex-order: 13;\n  order: 13;\n}\n\n.order-0 {\n  -ms-flex-order: 0;\n  order: 0;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n  order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n  order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n  order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n  order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n  order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n  order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n  order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n  order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n  order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n  order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n  order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n  order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-sm-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-md-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-lg-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n    flex-basis: 0;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n    flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n    flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n    flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n    flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n    flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n    flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n    flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n    flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n    flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n    order: -1;\n  }\n  .order-xl-last {\n    -ms-flex-order: 13;\n    order: 13;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0;\n    order: 0;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n    order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n    order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n    order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n    order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n    order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n    order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n    order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n    order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n    order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n    order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n    order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n    order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n}\n\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n  border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  color: #212529;\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n  border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n  background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n  background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n  border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n  background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n  background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n  border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n  background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n  border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n  background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n  border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n  background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n  border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n  background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n  border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n  background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n  background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n  border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n  background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n  background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #454d55;\n}\n\n.table .thead-light th {\n  color: #495057;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.table-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n  border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n  border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-sm > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-md > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-lg > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive-xl > .table-bordered {\n    border: 0;\n  }\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n  border: 0;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #fff;\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n  width: 100%;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.form-control-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n  height: auto;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  padding-left: 1.25rem;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.3rem;\n  margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n  color: #6c757d;\n}\n\n.form-check-label {\n  margin-bottom: 0;\n}\n\n.form-check-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding-left: 0;\n  margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n  position: static;\n  margin-top: 0;\n  margin-right: 0.3125rem;\n  margin-left: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(40, 167, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28a745;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.375em + 0.1875rem);\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n  border-color: #28a745;\n  padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n  color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n  border-color: #34ce57;\n  background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.375em + 0.1875rem);\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n  color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n  border-color: #e4606d;\n  background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-flow: row wrap;\n  flex-flow: row wrap;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.form-inline .form-check {\n  width: 100%;\n}\n\n@media (min-width: 576px) {\n  .form-inline label {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    -ms-flex-align: center;\n    align-items: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-plaintext {\n    display: inline-block;\n  }\n  .form-inline .input-group,\n  .form-inline .custom-select {\n    width: auto;\n  }\n  .form-inline .form-check {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: auto;\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    margin-top: 0;\n    margin-right: 0.25rem;\n    margin-left: 0;\n  }\n  .form-inline .custom-control {\n    -ms-flex-align: center;\n    align-items: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n  }\n  .form-inline .custom-control-label {\n    margin-bottom: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  color: #212529;\n  text-align: center;\n  vertical-align: middle;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #212529;\n  text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n  opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #0069d9;\n  border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #0062cc;\n  border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #5a6268;\n  border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #545b62;\n  border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #218838;\n  border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #1e7e34;\n  border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #138496;\n  border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #117a8b;\n  border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #212529;\n  background-color: #e0a800;\n  border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #d39e00;\n  border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #bd2130;\n  border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #212529;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n  color: #212529;\n  background-color: #dae0e5;\n  border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #23272b;\n  border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1d2124;\n  border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n  color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  color: #007bff;\n  background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n  color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #007bff;\n  text-decoration: none;\n}\n\n.btn-link:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n  text-decoration: underline;\n  box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.125rem 0 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-left {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-right {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n  display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n  right: auto;\n  bottom: auto;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #16181b;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1.5rem;\n  color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n  margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n  margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n  z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n  z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n  z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n  margin-left: -1px;\n}\n\n.input-group-prepend {\n  margin-right: -1px;\n}\n\n.input-group-append {\n  margin-left: -1px;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n  height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n  height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n  padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.custom-control {\n  position: relative;\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n  color: #fff;\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n  color: #fff;\n  background-color: #b3d7ff;\n  border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n  color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n  background-color: #e9ecef;\n}\n\n.custom-control-label {\n  position: relative;\n  margin-bottom: 0;\n  vertical-align: top;\n}\n\n.custom-control-label::before {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  content: \"\";\n  background-color: #fff;\n  border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n  position: absolute;\n  top: 0.25rem;\n  left: -1.5rem;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  content: \"\";\n  background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n  border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n  border-color: #007bff;\n  background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n  border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n  padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n  left: -2.25rem;\n  width: 1.75rem;\n  pointer-events: all;\n  border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n  top: calc(0.25rem + 2px);\n  left: calc(-2.25rem + 2px);\n  width: calc(1rem - 4px);\n  height: calc(1rem - 4px);\n  background-color: #adb5bd;\n  border-radius: 0.5rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-switch .custom-control-label::after {\n    transition: none;\n  }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n  background-color: #fff;\n  -webkit-transform: translateX(0.75rem);\n  transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  vertical-align: middle;\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-select:focus {\n  border-color: #80bdff;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n  height: auto;\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.custom-select:disabled {\n  color: #6c757d;\n  background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n  display: none;\n}\n\n.custom-select-sm {\n  height: calc(1.5em + 0.5rem + 2px);\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.custom-select-lg {\n  height: calc(1.5em + 1rem + 2px);\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin-bottom: 0;\n}\n\n.custom-file-input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: calc(1.5em + 0.75rem + 2px);\n  margin: 0;\n  opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n  border-color: #80bdff;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n  background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n  content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n  content: attr(data-browse);\n}\n\n.custom-file-label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1;\n  height: calc(1.5em + 0.75rem + 2px);\n  padding: 0.375rem 0.75rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 3;\n  display: block;\n  height: calc(1.5em + 0.75rem);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  content: \"Browse\";\n  background-color: #e9ecef;\n  border-left: inherit;\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n  width: 100%;\n  height: calc(1rem + 0.4rem);\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.custom-range:focus {\n  outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n  border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-webkit-slider-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-moz-range-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-moz-range-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: 0;\n  margin-right: 0.2rem;\n  margin-left: 0.2rem;\n  background-color: #007bff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-range::-ms-thumb {\n    transition: none;\n  }\n}\n\n.custom-range::-ms-thumb:active {\n  background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: transparent;\n  border-color: transparent;\n  border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n  margin-right: 15px;\n  background-color: #dee2e6;\n  border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n  cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n  background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .custom-control-label::before,\n  .custom-file-label,\n  .custom-select {\n    transition: none;\n  }\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n  text-decoration: none;\n}\n\n.nav-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n  margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  line-height: inherit;\n  white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n  text-decoration: none;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n  text-decoration: none;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n  color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1.25rem;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n  border-top: 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img {\n  width: 100%;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n  width: 100%;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n  width: 100%;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.card-deck .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n  .card-deck .card {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin-right: 15px;\n    margin-bottom: 0;\n    margin-left: 15px;\n  }\n}\n\n.card-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.card-group > .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.card-columns .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    -webkit-column-count: 3;\n    -moz-column-count: 3;\n    column-count: 3;\n    -webkit-column-gap: 1.25rem;\n    -moz-column-gap: 1.25rem;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n\n.accordion > .card {\n  overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n  border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n  border-bottom: 0;\n  border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n  border-bottom: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n  margin-bottom: -1px;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  color: #6c757d;\n  content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #007bff;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #0056b3;\n  text-decoration: none;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 2;\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n  z-index: 1;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: auto;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .badge {\n    transition: none;\n  }\n}\n\na.badge:hover, a.badge:focus {\n  text-decoration: none;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.badge-primary {\n  color: #fff;\n  background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n  color: #fff;\n  background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n  color: #fff;\n  background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n  color: #fff;\n  background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n  color: #fff;\n  background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n  color: #fff;\n  background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n  color: #fff;\n  background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n  color: #fff;\n  background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n  color: #212529;\n  background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n  color: #212529;\n  background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n  color: #fff;\n  background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n  color: #fff;\n  background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n  color: #212529;\n  background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n  color: #212529;\n  background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n  color: #fff;\n  background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #e9ecef;\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  position: relative;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0.75rem 1.25rem;\n  color: inherit;\n}\n\n.alert-primary {\n  color: #004085;\n  background-color: #cce5ff;\n  border-color: #b8daff;\n}\n\n.alert-primary hr {\n  border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n  color: #002752;\n}\n\n.alert-secondary {\n  color: #383d41;\n  background-color: #e2e3e5;\n  border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n  border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n  color: #202326;\n}\n\n.alert-success {\n  color: #155724;\n  background-color: #d4edda;\n  border-color: #c3e6cb;\n}\n\n.alert-success hr {\n  border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n  color: #0b2e13;\n}\n\n.alert-info {\n  color: #0c5460;\n  background-color: #d1ecf1;\n  border-color: #bee5eb;\n}\n\n.alert-info hr {\n  border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n  color: #062c33;\n}\n\n.alert-warning {\n  color: #856404;\n  background-color: #fff3cd;\n  border-color: #ffeeba;\n}\n\n.alert-warning hr {\n  border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n  color: #533f03;\n}\n\n.alert-danger {\n  color: #721c24;\n  background-color: #f8d7da;\n  border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n  border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n  color: #491217;\n}\n\n.alert-light {\n  color: #818182;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light hr {\n  border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n  color: #686868;\n}\n\n.alert-dark {\n  color: #1b1e21;\n  background-color: #d6d8d9;\n  border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n  border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n  color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #007bff;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: progress-bar-stripes 1s linear infinite;\n  animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.media {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n}\n\n.media-body {\n  -ms-flex: 1;\n  flex: 1;\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n  margin-right: -1px;\n  margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n  margin-right: 0;\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-md .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:first-child {\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl .list-group-item:last-child {\n    margin-right: 0;\n    border-top-right-radius: 0.25rem;\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n}\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n  margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n  border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom: 0;\n}\n\n.list-group-item-primary {\n  color: #004085;\n  background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #004085;\n  background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #004085;\n  border-color: #004085;\n}\n\n.list-group-item-secondary {\n  color: #383d41;\n  background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #383d41;\n  background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #383d41;\n  border-color: #383d41;\n}\n\n.list-group-item-success {\n  color: #155724;\n  background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #155724;\n  background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #155724;\n  border-color: #155724;\n}\n\n.list-group-item-info {\n  color: #0c5460;\n  background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0c5460;\n  background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0c5460;\n  border-color: #0c5460;\n}\n\n.list-group-item-warning {\n  color: #856404;\n  background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #856404;\n  background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #856404;\n  border-color: #856404;\n}\n\n.list-group-item-danger {\n  color: #721c24;\n  background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #721c24;\n  background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #721c24;\n  border-color: #721c24;\n}\n\n.list-group-item-light {\n  color: #818182;\n  background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #818182;\n  background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #818182;\n  border-color: #818182;\n}\n\n.list-group-item-dark {\n  color: #1b1e21;\n  background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1b1e21;\n  background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1b1e21;\n  border-color: #1b1e21;\n}\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .5;\n}\n\n.close:hover {\n  color: #000;\n  text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n  opacity: .75;\n}\n\nbutton.close {\n  padding: 0;\n  background-color: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\na.close.disabled {\n  pointer-events: none;\n}\n\n.toast {\n  max-width: 350px;\n  overflow: hidden;\n  font-size: 0.875rem;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n  -webkit-backdrop-filter: blur(10px);\n  backdrop-filter: blur(10px);\n  opacity: 0;\n  border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n  opacity: 1;\n}\n\n.toast.show {\n  display: block;\n  opacity: 1;\n}\n\n.toast.hide {\n  display: none;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.25rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n  padding: 0.75rem;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal-dialog-scrollable {\n  display: -ms-flexbox;\n  display: flex;\n  max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: calc(100vh - 1rem);\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n  display: block;\n  height: calc(100vh - 1rem);\n  content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n  max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n  content: none;\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n  padding: 1rem 1rem;\n  margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 1rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n  margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n  margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    max-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-scrollable .modal-content {\n    max-height: calc(100vh - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered::before {\n    height: calc(100vh - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n  top: 0;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n  right: 0;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n  bottom: 0;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n  left: 0;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n  margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n  bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n  left: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n  top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n  right: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n  z-index: 0;\n  opacity: 0;\n  transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-left,\n  .carousel-fade .active.carousel-item-right {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  color: #fff;\n  text-align: center;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 15;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: .5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators li {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: spinner-border .75s linear infinite;\n  animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: spinner-grow .75s linear infinite;\n  animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-primary {\n  background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n  background-color: #0062cc !important;\n}\n\n.bg-secondary {\n  background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n  background-color: #545b62 !important;\n}\n\n.bg-success {\n  background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n  background-color: #1e7e34 !important;\n}\n\n.bg-info {\n  background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n  background-color: #117a8b !important;\n}\n\n.bg-warning {\n  background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n  background-color: #d39e00 !important;\n}\n\n.bg-danger {\n  background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n  background-color: #bd2130 !important;\n}\n\n.bg-light {\n  background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n  background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n  background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n  background-color: #1d2124 !important;\n}\n\n.bg-white {\n  background-color: #fff !important;\n}\n\n.bg-transparent {\n  background-color: transparent !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-right-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-left-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #007bff !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.rounded-sm {\n  border-radius: 0.2rem !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n  border-top-left-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive::before {\n  display: block;\n  content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9::before {\n  padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n  padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n  padding-top: 100%;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n}\n\n.float-left {\n  float: left !important;\n}\n\n.float-right {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  pointer-events: auto;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n  margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n  margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n\n.text-monospace {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-left {\n  text-align: left !important;\n}\n\n.text-right {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-light {\n  font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n  font-weight: lighter !important;\n}\n\n.font-weight-normal {\n  font-weight: 400 !important;\n}\n\n.font-weight-bold {\n  font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n  font-weight: bolder !important;\n}\n\n.font-italic {\n  font-style: italic !important;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-primary {\n  color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n  color: #0056b3 !important;\n}\n\n.text-secondary {\n  color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n  color: #494f54 !important;\n}\n\n.text-success {\n  color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n  color: #19692c !important;\n}\n\n.text-info {\n  color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n  color: #0f6674 !important;\n}\n\n.text-warning {\n  color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n  color: #ba8b00 !important;\n}\n\n.text-danger {\n  color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n  color: #a71d2a !important;\n}\n\n.text-light {\n  color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n  color: #cbd3da !important;\n}\n\n.text-dark {\n  color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n  color: #121416 !important;\n}\n\n.text-body {\n  color: #212529 !important;\n}\n\n.text-muted {\n  color: #6c757d !important;\n}\n\n.text-black-50 {\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-break {\n  word-break: break-word !important;\n  overflow-wrap: break-word !important;\n}\n\n.text-reset {\n  color: inherit !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a:not(.btn) {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #adb5bd;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  @page {\n    size: a3;\n  }\n  body {\n    min-width: 992px !important;\n  }\n  .container {\n    min-width: 992px !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .badge {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #dee2e6 !important;\n  }\n  .table-dark {\n    color: inherit;\n  }\n  .table-dark th,\n  .table-dark td,\n  .table-dark thead th,\n  .table-dark tbody + tbody {\n    border-color: #dee2e6;\n  }\n  .table .thead-dark th {\n    color: inherit;\n    border-color: #dee2e6;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery));\n}(this, function (exports, $) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**!\n   * @fileOverview Kickass library to create and place poppers near their reference elements.\n   * @version 1.14.7\n   * @license\n   * Copyright (c) 2016 Federico Zivolo and contributors\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy\n   * of this software and associated documentation files (the \"Software\"), to deal\n   * in the Software without restriction, including without limitation the rights\n   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n   * copies of the Software, and to permit persons to whom the Software is\n   * furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all\n   * copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n   * SOFTWARE.\n   */\n  var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  var timeoutDuration = 0;\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      timeoutDuration = 1;\n      break;\n    }\n  }\n\n  function microtaskDebounce(fn) {\n    var called = false;\n    return function () {\n      if (called) {\n        return;\n      }\n      called = true;\n      window.Promise.resolve().then(function () {\n        called = false;\n        fn();\n      });\n    };\n  }\n\n  function taskDebounce(fn) {\n    var scheduled = false;\n    return function () {\n      if (!scheduled) {\n        scheduled = true;\n        setTimeout(function () {\n          scheduled = false;\n          fn();\n        }, timeoutDuration);\n      }\n    };\n  }\n\n  var supportsMicroTasks = isBrowser && window.Promise;\n\n  /**\n  * Create a debounced version of a method, that's asynchronously deferred\n  * but called in the minimum time possible.\n  *\n  * @method\n  * @memberof Popper.Utils\n  * @argument {Function} fn\n  * @returns {Function}\n  */\n  var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n  /**\n   * Check if the given variable is a function\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Any} functionToCheck - variable to check\n   * @returns {Boolean} answer to: is a function?\n   */\n  function isFunction(functionToCheck) {\n    var getType = {};\n    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n  }\n\n  /**\n   * Get CSS computed property of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Eement} element\n   * @argument {String} property\n   */\n  function getStyleComputedProperty(element, property) {\n    if (element.nodeType !== 1) {\n      return [];\n    }\n    // NOTE: 1 DOM access here\n    var window = element.ownerDocument.defaultView;\n    var css = window.getComputedStyle(element, null);\n    return property ? css[property] : css;\n  }\n\n  /**\n   * Returns the parentNode or the host of the element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} parent\n   */\n  function getParentNode(element) {\n    if (element.nodeName === 'HTML') {\n      return element;\n    }\n    return element.parentNode || element.host;\n  }\n\n  /**\n   * Returns the scrolling parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} scroll parent\n   */\n  function getScrollParent(element) {\n    // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n    if (!element) {\n      return document.body;\n    }\n\n    switch (element.nodeName) {\n      case 'HTML':\n      case 'BODY':\n        return element.ownerDocument.body;\n      case '#document':\n        return element.body;\n    }\n\n    // Firefox want us to check `-x` and `-y` variations as well\n\n    var _getStyleComputedProp = getStyleComputedProperty(element),\n        overflow = _getStyleComputedProp.overflow,\n        overflowX = _getStyleComputedProp.overflowX,\n        overflowY = _getStyleComputedProp.overflowY;\n\n    if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n      return element;\n    }\n\n    return getScrollParent(getParentNode(element));\n  }\n\n  var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\n  var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n  /**\n   * Determines if the browser is Internet Explorer\n   * @method\n   * @memberof Popper.Utils\n   * @param {Number} version to check\n   * @returns {Boolean} isIE\n   */\n  function isIE(version) {\n    if (version === 11) {\n      return isIE11;\n    }\n    if (version === 10) {\n      return isIE10;\n    }\n    return isIE11 || isIE10;\n  }\n\n  /**\n   * Returns the offset parent of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} offset parent\n   */\n  function getOffsetParent(element) {\n    if (!element) {\n      return document.documentElement;\n    }\n\n    var noOffsetParent = isIE(10) ? document.body : null;\n\n    // NOTE: 1 DOM access here\n    var offsetParent = element.offsetParent || null;\n    // Skip hidden elements which don't have an offsetParent\n    while (offsetParent === noOffsetParent && element.nextElementSibling) {\n      offsetParent = (element = element.nextElementSibling).offsetParent;\n    }\n\n    var nodeName = offsetParent && offsetParent.nodeName;\n\n    if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n      return element ? element.ownerDocument.documentElement : document.documentElement;\n    }\n\n    // .offsetParent will return the closest TH, TD or TABLE in case\n    // no offsetParent is present, I hate this job...\n    if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n      return getOffsetParent(offsetParent);\n    }\n\n    return offsetParent;\n  }\n\n  function isOffsetContainer(element) {\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY') {\n      return false;\n    }\n    return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n  }\n\n  /**\n   * Finds the root node (document, shadowDOM root) of the given element\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} node\n   * @returns {Element} root node\n   */\n  function getRoot(node) {\n    if (node.parentNode !== null) {\n      return getRoot(node.parentNode);\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the offset parent common to the two provided nodes\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element1\n   * @argument {Element} element2\n   * @returns {Element} common offset parent\n   */\n  function findCommonOffsetParent(element1, element2) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n      return document.documentElement;\n    }\n\n    // Here we make sure to give as \"start\" the element that comes first in the DOM\n    var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n    var start = order ? element1 : element2;\n    var end = order ? element2 : element1;\n\n    // Get common ancestor container\n    var range = document.createRange();\n    range.setStart(start, 0);\n    range.setEnd(end, 0);\n    var commonAncestorContainer = range.commonAncestorContainer;\n\n    // Both nodes are inside #document\n\n    if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n      if (isOffsetContainer(commonAncestorContainer)) {\n        return commonAncestorContainer;\n      }\n\n      return getOffsetParent(commonAncestorContainer);\n    }\n\n    // one of the nodes is inside shadowDOM, find which one\n    var element1root = getRoot(element1);\n    if (element1root.host) {\n      return findCommonOffsetParent(element1root.host, element2);\n    } else {\n      return findCommonOffsetParent(element1, getRoot(element2).host);\n    }\n  }\n\n  /**\n   * Gets the scroll value of the given element in the given side (top and left)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {String} side `top` or `left`\n   * @returns {number} amount of scrolled pixels\n   */\n  function getScroll(element) {\n    var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n    var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n    var nodeName = element.nodeName;\n\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      var html = element.ownerDocument.documentElement;\n      var scrollingElement = element.ownerDocument.scrollingElement || html;\n      return scrollingElement[upperSide];\n    }\n\n    return element[upperSide];\n  }\n\n  /*\n   * Sum or subtract the element scroll values (left and top) from a given rect object\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} rect - Rect object you want to change\n   * @param {HTMLElement} element - The element from the function reads the scroll values\n   * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n   * @return {Object} rect - The modifier rect object\n   */\n  function includeScroll(rect, element) {\n    var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var scrollTop = getScroll(element, 'top');\n    var scrollLeft = getScroll(element, 'left');\n    var modifier = subtract ? -1 : 1;\n    rect.top += scrollTop * modifier;\n    rect.bottom += scrollTop * modifier;\n    rect.left += scrollLeft * modifier;\n    rect.right += scrollLeft * modifier;\n    return rect;\n  }\n\n  /*\n   * Helper to detect borders of a given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {CSSStyleDeclaration} styles\n   * Result of `getStyleComputedProperty` on the given element\n   * @param {String} axis - `x` or `y`\n   * @return {number} borders - The borders size of the given axis\n   */\n\n  function getBordersSize(styles, axis) {\n    var sideA = axis === 'x' ? 'Left' : 'Top';\n    var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n    return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n  }\n\n  function getSize(axis, body, html, computedStyle) {\n    return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n  }\n\n  function getWindowSizes(document) {\n    var body = document.body;\n    var html = document.documentElement;\n    var computedStyle = isIE(10) && getComputedStyle(html);\n\n    return {\n      height: getSize('Height', body, html, computedStyle),\n      width: getSize('Width', body, html, computedStyle)\n    };\n  }\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n\n\n\n\n  var defineProperty = function (obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  /**\n   * Given element offsets, generate an output similar to getBoundingClientRect\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} offsets\n   * @returns {Object} ClientRect like output\n   */\n  function getClientRect(offsets) {\n    return _extends({}, offsets, {\n      right: offsets.left + offsets.width,\n      bottom: offsets.top + offsets.height\n    });\n  }\n\n  /**\n   * Get bounding client rect of given element\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} element\n   * @return {Object} client rect\n   */\n  function getBoundingClientRect(element) {\n    var rect = {};\n\n    // IE10 10 FIX: Please, don't ask, the element isn't\n    // considered in DOM in some circumstances...\n    // This isn't reproducible in IE10 compatibility mode of IE11\n    try {\n      if (isIE(10)) {\n        rect = element.getBoundingClientRect();\n        var scrollTop = getScroll(element, 'top');\n        var scrollLeft = getScroll(element, 'left');\n        rect.top += scrollTop;\n        rect.left += scrollLeft;\n        rect.bottom += scrollTop;\n        rect.right += scrollLeft;\n      } else {\n        rect = element.getBoundingClientRect();\n      }\n    } catch (e) {}\n\n    var result = {\n      left: rect.left,\n      top: rect.top,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n\n    // subtract scrollbar size from sizes\n    var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n    var width = sizes.width || element.clientWidth || result.right - result.left;\n    var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n    var horizScrollbar = element.offsetWidth - width;\n    var vertScrollbar = element.offsetHeight - height;\n\n    // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n    // we make this check conditional for performance reasons\n    if (horizScrollbar || vertScrollbar) {\n      var styles = getStyleComputedProperty(element);\n      horizScrollbar -= getBordersSize(styles, 'x');\n      vertScrollbar -= getBordersSize(styles, 'y');\n\n      result.width -= horizScrollbar;\n      result.height -= vertScrollbar;\n    }\n\n    return getClientRect(result);\n  }\n\n  function getOffsetRectRelativeToArbitraryNode(children, parent) {\n    var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    var isIE10 = isIE(10);\n    var isHTML = parent.nodeName === 'HTML';\n    var childrenRect = getBoundingClientRect(children);\n    var parentRect = getBoundingClientRect(parent);\n    var scrollParent = getScrollParent(children);\n\n    var styles = getStyleComputedProperty(parent);\n    var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n    var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n    // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n    if (fixedPosition && isHTML) {\n      parentRect.top = Math.max(parentRect.top, 0);\n      parentRect.left = Math.max(parentRect.left, 0);\n    }\n    var offsets = getClientRect({\n      top: childrenRect.top - parentRect.top - borderTopWidth,\n      left: childrenRect.left - parentRect.left - borderLeftWidth,\n      width: childrenRect.width,\n      height: childrenRect.height\n    });\n    offsets.marginTop = 0;\n    offsets.marginLeft = 0;\n\n    // Subtract margins of documentElement in case it's being used as parent\n    // we do this only on HTML because it's the only element that behaves\n    // differently when margins are applied to it. The margins are included in\n    // the box of the documentElement, in the other cases not.\n    if (!isIE10 && isHTML) {\n      var marginTop = parseFloat(styles.marginTop, 10);\n      var marginLeft = parseFloat(styles.marginLeft, 10);\n\n      offsets.top -= borderTopWidth - marginTop;\n      offsets.bottom -= borderTopWidth - marginTop;\n      offsets.left -= borderLeftWidth - marginLeft;\n      offsets.right -= borderLeftWidth - marginLeft;\n\n      // Attach marginTop and marginLeft because in some circumstances we may need them\n      offsets.marginTop = marginTop;\n      offsets.marginLeft = marginLeft;\n    }\n\n    if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n      offsets = includeScroll(offsets, parent);\n    }\n\n    return offsets;\n  }\n\n  function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n    var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var html = element.ownerDocument.documentElement;\n    var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n    var width = Math.max(html.clientWidth, window.innerWidth || 0);\n    var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n    var scrollTop = !excludeScroll ? getScroll(html) : 0;\n    var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n    var offset = {\n      top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n      left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n      width: width,\n      height: height\n    };\n\n    return getClientRect(offset);\n  }\n\n  /**\n   * Check if the given element is fixed or is inside a fixed parent\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @argument {Element} customContainer\n   * @returns {Boolean} answer to \"isFixed?\"\n   */\n  function isFixed(element) {\n    var nodeName = element.nodeName;\n    if (nodeName === 'BODY' || nodeName === 'HTML') {\n      return false;\n    }\n    if (getStyleComputedProperty(element, 'position') === 'fixed') {\n      return true;\n    }\n    var parentNode = getParentNode(element);\n    if (!parentNode) {\n      return false;\n    }\n    return isFixed(parentNode);\n  }\n\n  /**\n   * Finds the first parent of an element that has a transformed property defined\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Element} first transformed parent or documentElement\n   */\n\n  function getFixedPositionOffsetParent(element) {\n    // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n    if (!element || !element.parentElement || isIE()) {\n      return document.documentElement;\n    }\n    var el = element.parentElement;\n    while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n      el = el.parentElement;\n    }\n    return el || document.documentElement;\n  }\n\n  /**\n   * Computed the boundaries limits and return them\n   * @method\n   * @memberof Popper.Utils\n   * @param {HTMLElement} popper\n   * @param {HTMLElement} reference\n   * @param {number} padding\n   * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n   * @param {Boolean} fixedPosition - Is in fixed position mode\n   * @returns {Object} Coordinates of the boundaries\n   */\n  function getBoundaries(popper, reference, padding, boundariesElement) {\n    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    // NOTE: 1 DOM access here\n\n    var boundaries = { top: 0, left: 0 };\n    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n    // Handle viewport case\n    if (boundariesElement === 'viewport') {\n      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n    } else {\n      // Handle other cases based on DOM element used as boundaries\n      var boundariesNode = void 0;\n      if (boundariesElement === 'scrollParent') {\n        boundariesNode = getScrollParent(getParentNode(reference));\n        if (boundariesNode.nodeName === 'BODY') {\n          boundariesNode = popper.ownerDocument.documentElement;\n        }\n      } else if (boundariesElement === 'window') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      } else {\n        boundariesNode = boundariesElement;\n      }\n\n      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n      // In case of HTML, we need a different computation\n      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n        var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n            height = _getWindowSizes.height,\n            width = _getWindowSizes.width;\n\n        boundaries.top += offsets.top - offsets.marginTop;\n        boundaries.bottom = height + offsets.top;\n        boundaries.left += offsets.left - offsets.marginLeft;\n        boundaries.right = width + offsets.left;\n      } else {\n        // for all the other DOM elements, this one is good\n        boundaries = offsets;\n      }\n    }\n\n    // Add paddings\n    padding = padding || 0;\n    var isPaddingNumber = typeof padding === 'number';\n    boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n    boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n    return boundaries;\n  }\n\n  function getArea(_ref) {\n    var width = _ref.width,\n        height = _ref.height;\n\n    return width * height;\n  }\n\n  /**\n   * Utility used to transform the `auto` placement to the placement with more\n   * available space.\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n    var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n    if (placement.indexOf('auto') === -1) {\n      return placement;\n    }\n\n    var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n    var rects = {\n      top: {\n        width: boundaries.width,\n        height: refRect.top - boundaries.top\n      },\n      right: {\n        width: boundaries.right - refRect.right,\n        height: boundaries.height\n      },\n      bottom: {\n        width: boundaries.width,\n        height: boundaries.bottom - refRect.bottom\n      },\n      left: {\n        width: refRect.left - boundaries.left,\n        height: boundaries.height\n      }\n    };\n\n    var sortedAreas = Object.keys(rects).map(function (key) {\n      return _extends({\n        key: key\n      }, rects[key], {\n        area: getArea(rects[key])\n      });\n    }).sort(function (a, b) {\n      return b.area - a.area;\n    });\n\n    var filteredAreas = sortedAreas.filter(function (_ref2) {\n      var width = _ref2.width,\n          height = _ref2.height;\n      return width >= popper.clientWidth && height >= popper.clientHeight;\n    });\n\n    var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n    var variation = placement.split('-')[1];\n\n    return computedPlacement + (variation ? '-' + variation : '');\n  }\n\n  /**\n   * Get offsets to the reference element\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} state\n   * @param {Element} popper - the popper element\n   * @param {Element} reference - the reference element (the popper will be relative to this)\n   * @param {Element} fixedPosition - is in fixed position mode\n   * @returns {Object} An object containing the offsets which will be applied to the popper\n   */\n  function getReferenceOffsets(state, popper, reference) {\n    var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n    var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n    return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n  }\n\n  /**\n   * Get the outer sizes of the given element (offset size + margins)\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element\n   * @returns {Object} object containing width and height properties\n   */\n  function getOuterSizes(element) {\n    var window = element.ownerDocument.defaultView;\n    var styles = window.getComputedStyle(element);\n    var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n    var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n    var result = {\n      width: element.offsetWidth + y,\n      height: element.offsetHeight + x\n    };\n    return result;\n  }\n\n  /**\n   * Get the opposite placement of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement\n   * @returns {String} flipped placement\n   */\n  function getOppositePlacement(placement) {\n    var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  /**\n   * Get offsets to the popper\n   * @method\n   * @memberof Popper.Utils\n   * @param {Object} position - CSS position the Popper will get applied\n   * @param {HTMLElement} popper - the popper element\n   * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n   * @param {String} placement - one of the valid placement options\n   * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n   */\n  function getPopperOffsets(popper, referenceOffsets, placement) {\n    placement = placement.split('-')[0];\n\n    // Get popper node sizes\n    var popperRect = getOuterSizes(popper);\n\n    // Add position, width and height to our offsets object\n    var popperOffsets = {\n      width: popperRect.width,\n      height: popperRect.height\n    };\n\n    // depending by the popper placement we have to compute its offsets slightly differently\n    var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n    var mainSide = isHoriz ? 'top' : 'left';\n    var secondarySide = isHoriz ? 'left' : 'top';\n    var measurement = isHoriz ? 'height' : 'width';\n    var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n    if (placement === secondarySide) {\n      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n    } else {\n      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n    }\n\n    return popperOffsets;\n  }\n\n  /**\n   * Mimics the `find` method of Array\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function find(arr, check) {\n    // use native find if supported\n    if (Array.prototype.find) {\n      return arr.find(check);\n    }\n\n    // use `filter` to obtain the same behavior of `find`\n    return arr.filter(check)[0];\n  }\n\n  /**\n   * Return the index of the matching object\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Array} arr\n   * @argument prop\n   * @argument value\n   * @returns index or -1\n   */\n  function findIndex(arr, prop, value) {\n    // use native findIndex if supported\n    if (Array.prototype.findIndex) {\n      return arr.findIndex(function (cur) {\n        return cur[prop] === value;\n      });\n    }\n\n    // use `find` + `indexOf` if `findIndex` isn't supported\n    var match = find(arr, function (obj) {\n      return obj[prop] === value;\n    });\n    return arr.indexOf(match);\n  }\n\n  /**\n   * Loop trough the list of modifiers and run them in order,\n   * each of them will then edit the data object.\n   * @method\n   * @memberof Popper.Utils\n   * @param {dataObject} data\n   * @param {Array} modifiers\n   * @param {String} ends - Optional modifier name used as stopper\n   * @returns {dataObject}\n   */\n  function runModifiers(modifiers, data, ends) {\n    var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n    modifiersToRun.forEach(function (modifier) {\n      if (modifier['function']) {\n        // eslint-disable-line dot-notation\n        console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n      }\n      var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n      if (modifier.enabled && isFunction(fn)) {\n        // Add properties to offsets to make them a complete clientRect object\n        // we do this before each modifier to make sure the previous one doesn't\n        // mess with these values\n        data.offsets.popper = getClientRect(data.offsets.popper);\n        data.offsets.reference = getClientRect(data.offsets.reference);\n\n        data = fn(data, modifier);\n      }\n    });\n\n    return data;\n  }\n\n  /**\n   * Updates the position of the popper, computing the new offsets and applying\n   * the new style.<br />\n   * Prefer `scheduleUpdate` over `update` because of performance reasons.\n   * @method\n   * @memberof Popper\n   */\n  function update() {\n    // if popper is destroyed, don't perform any further update\n    if (this.state.isDestroyed) {\n      return;\n    }\n\n    var data = {\n      instance: this,\n      styles: {},\n      arrowStyles: {},\n      attributes: {},\n      flipped: false,\n      offsets: {}\n    };\n\n    // compute reference element offsets\n    data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n    // store the computed placement inside `originalPlacement`\n    data.originalPlacement = data.placement;\n\n    data.positionFixed = this.options.positionFixed;\n\n    // compute the popper offsets\n    data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n    data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n    // run the modifiers\n    data = runModifiers(this.modifiers, data);\n\n    // the first `update` will call `onCreate` callback\n    // the other ones will call `onUpdate` callback\n    if (!this.state.isCreated) {\n      this.state.isCreated = true;\n      this.options.onCreate(data);\n    } else {\n      this.options.onUpdate(data);\n    }\n  }\n\n  /**\n   * Helper used to know if the given modifier is enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @returns {Boolean}\n   */\n  function isModifierEnabled(modifiers, modifierName) {\n    return modifiers.some(function (_ref) {\n      var name = _ref.name,\n          enabled = _ref.enabled;\n      return enabled && name === modifierName;\n    });\n  }\n\n  /**\n   * Get the prefixed supported property name\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} property (camelCase)\n   * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n   */\n  function getSupportedPropertyName(property) {\n    var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n    var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n    for (var i = 0; i < prefixes.length; i++) {\n      var prefix = prefixes[i];\n      var toCheck = prefix ? '' + prefix + upperProp : property;\n      if (typeof document.body.style[toCheck] !== 'undefined') {\n        return toCheck;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Destroys the popper.\n   * @method\n   * @memberof Popper\n   */\n  function destroy() {\n    this.state.isDestroyed = true;\n\n    // touch DOM only if `applyStyle` modifier is enabled\n    if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n      this.popper.removeAttribute('x-placement');\n      this.popper.style.position = '';\n      this.popper.style.top = '';\n      this.popper.style.left = '';\n      this.popper.style.right = '';\n      this.popper.style.bottom = '';\n      this.popper.style.willChange = '';\n      this.popper.style[getSupportedPropertyName('transform')] = '';\n    }\n\n    this.disableEventListeners();\n\n    // remove the popper if user explicity asked for the deletion on destroy\n    // do not use `remove` because IE11 doesn't support it\n    if (this.options.removeOnDestroy) {\n      this.popper.parentNode.removeChild(this.popper);\n    }\n    return this;\n  }\n\n  /**\n   * Get the window associated with the element\n   * @argument {Element} element\n   * @returns {Window}\n   */\n  function getWindow(element) {\n    var ownerDocument = element.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView : window;\n  }\n\n  function attachToScrollParents(scrollParent, event, callback, scrollParents) {\n    var isBody = scrollParent.nodeName === 'BODY';\n    var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n    target.addEventListener(event, callback, { passive: true });\n\n    if (!isBody) {\n      attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n    }\n    scrollParents.push(target);\n  }\n\n  /**\n   * Setup needed event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function setupEventListeners(reference, options, state, updateBound) {\n    // Resize event listener on window\n    state.updateBound = updateBound;\n    getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n    // Scroll event listener on scroll parents\n    var scrollElement = getScrollParent(reference);\n    attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n    state.scrollElement = scrollElement;\n    state.eventsEnabled = true;\n\n    return state;\n  }\n\n  /**\n   * It will add resize/scroll events and start recalculating\n   * position of the popper element when they are triggered.\n   * @method\n   * @memberof Popper\n   */\n  function enableEventListeners() {\n    if (!this.state.eventsEnabled) {\n      this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n    }\n  }\n\n  /**\n   * Remove event listeners used to update the popper position\n   * @method\n   * @memberof Popper.Utils\n   * @private\n   */\n  function removeEventListeners(reference, state) {\n    // Remove resize event listener on window\n    getWindow(reference).removeEventListener('resize', state.updateBound);\n\n    // Remove scroll event listener on scroll parents\n    state.scrollParents.forEach(function (target) {\n      target.removeEventListener('scroll', state.updateBound);\n    });\n\n    // Reset state\n    state.updateBound = null;\n    state.scrollParents = [];\n    state.scrollElement = null;\n    state.eventsEnabled = false;\n    return state;\n  }\n\n  /**\n   * It will remove resize/scroll events and won't recalculate popper position\n   * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n   * unless you call `update` method manually.\n   * @method\n   * @memberof Popper\n   */\n  function disableEventListeners() {\n    if (this.state.eventsEnabled) {\n      cancelAnimationFrame(this.scheduleUpdate);\n      this.state = removeEventListeners(this.reference, this.state);\n    }\n  }\n\n  /**\n   * Tells if a given input is a number\n   * @method\n   * @memberof Popper.Utils\n   * @param {*} input to check\n   * @return {Boolean}\n   */\n  function isNumeric(n) {\n    return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n  }\n\n  /**\n   * Set the style to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the style to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setStyles(element, styles) {\n    Object.keys(styles).forEach(function (prop) {\n      var unit = '';\n      // add unit if the value is numeric and is one of the following\n      if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n        unit = 'px';\n      }\n      element.style[prop] = styles[prop] + unit;\n    });\n  }\n\n  /**\n   * Set the attributes to the given popper\n   * @method\n   * @memberof Popper.Utils\n   * @argument {Element} element - Element to apply the attributes to\n   * @argument {Object} styles\n   * Object with a list of properties and values which will be applied to the element\n   */\n  function setAttributes(element, attributes) {\n    Object.keys(attributes).forEach(function (prop) {\n      var value = attributes[prop];\n      if (value !== false) {\n        element.setAttribute(prop, attributes[prop]);\n      } else {\n        element.removeAttribute(prop);\n      }\n    });\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} data.styles - List of style properties - values to apply to popper element\n   * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The same data object\n   */\n  function applyStyle(data) {\n    // any property present in `data.styles` will be applied to the popper,\n    // in this way we can make the 3rd party modifiers add custom styles to it\n    // Be aware, modifiers could override the properties defined in the previous\n    // lines of this modifier!\n    setStyles(data.instance.popper, data.styles);\n\n    // any property present in `data.attributes` will be applied to the popper,\n    // they will be set as HTML attributes of the element\n    setAttributes(data.instance.popper, data.attributes);\n\n    // if arrowElement is defined and arrowStyles has some properties\n    if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n      setStyles(data.arrowElement, data.arrowStyles);\n    }\n\n    return data;\n  }\n\n  /**\n   * Set the x-placement attribute before everything else because it could be used\n   * to add margins to the popper margins needs to be calculated to get the\n   * correct popper offsets.\n   * @method\n   * @memberof Popper.modifiers\n   * @param {HTMLElement} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper\n   * @param {Object} options - Popper.js options\n   */\n  function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n    // compute reference element offsets\n    var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n    // compute auto placement, store placement inside the data object,\n    // modifiers will be able to edit `placement` if needed\n    // and refer to originalPlacement to know the original value\n    var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n    popper.setAttribute('x-placement', placement);\n\n    // Apply `position` to popper before anything else because\n    // without the position applied we can't guarantee correct computations\n    setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n    return options;\n  }\n\n  /**\n   * @function\n   * @memberof Popper.Utils\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n   * @returns {Object} The popper's position offsets rounded\n   *\n   * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n   * good as it can be within reason.\n   * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n   *\n   * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n   * as well on High DPI screens).\n   *\n   * Firefox prefers no rounding for positioning and does not have blurriness on\n   * high DPI screens.\n   *\n   * Only horizontal placement and left/right values need to be considered.\n   */\n  function getRoundedOffsets(data, shouldRound) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n    var round = Math.round,\n        floor = Math.floor;\n\n    var noRound = function noRound(v) {\n      return v;\n    };\n\n    var referenceWidth = round(reference.width);\n    var popperWidth = round(popper.width);\n\n    var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n    var isVariation = data.placement.indexOf('-') !== -1;\n    var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n    var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n    var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n    var verticalToInteger = !shouldRound ? noRound : round;\n\n    return {\n      left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n      top: verticalToInteger(popper.top),\n      bottom: verticalToInteger(popper.bottom),\n      right: horizontalToInteger(popper.right)\n    };\n  }\n\n  var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function computeStyle(data, options) {\n    var x = options.x,\n        y = options.y;\n    var popper = data.offsets.popper;\n\n    // Remove this legacy support in Popper.js v2\n\n    var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'applyStyle';\n    }).gpuAcceleration;\n    if (legacyGpuAccelerationOption !== undefined) {\n      console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n    }\n    var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n    var offsetParent = getOffsetParent(data.instance.popper);\n    var offsetParentRect = getBoundingClientRect(offsetParent);\n\n    // Styles\n    var styles = {\n      position: popper.position\n    };\n\n    var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n    var sideA = x === 'bottom' ? 'top' : 'bottom';\n    var sideB = y === 'right' ? 'left' : 'right';\n\n    // if gpuAcceleration is set to `true` and transform is supported,\n    //  we use `translate3d` to apply the position to the popper we\n    // automatically use the supported prefixed version if needed\n    var prefixedProperty = getSupportedPropertyName('transform');\n\n    // now, let's make a step back and look at this code closely (wtf?)\n    // If the content of the popper grows once it's been positioned, it\n    // may happen that the popper gets misplaced because of the new content\n    // overflowing its reference element\n    // To avoid this problem, we provide two options (x and y), which allow\n    // the consumer to define the offset origin.\n    // If we position a popper on top of a reference element, we can set\n    // `x` to `top` to make the popper grow towards its top instead of\n    // its bottom.\n    var left = void 0,\n        top = void 0;\n    if (sideA === 'bottom') {\n      // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n      // and not the bottom of the html element\n      if (offsetParent.nodeName === 'HTML') {\n        top = -offsetParent.clientHeight + offsets.bottom;\n      } else {\n        top = -offsetParentRect.height + offsets.bottom;\n      }\n    } else {\n      top = offsets.top;\n    }\n    if (sideB === 'right') {\n      if (offsetParent.nodeName === 'HTML') {\n        left = -offsetParent.clientWidth + offsets.right;\n      } else {\n        left = -offsetParentRect.width + offsets.right;\n      }\n    } else {\n      left = offsets.left;\n    }\n    if (gpuAcceleration && prefixedProperty) {\n      styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n      styles[sideA] = 0;\n      styles[sideB] = 0;\n      styles.willChange = 'transform';\n    } else {\n      // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n      var invertTop = sideA === 'bottom' ? -1 : 1;\n      var invertLeft = sideB === 'right' ? -1 : 1;\n      styles[sideA] = top * invertTop;\n      styles[sideB] = left * invertLeft;\n      styles.willChange = sideA + ', ' + sideB;\n    }\n\n    // Attributes\n    var attributes = {\n      'x-placement': data.placement\n    };\n\n    // Update `data` attributes, styles and arrowStyles\n    data.attributes = _extends({}, attributes, data.attributes);\n    data.styles = _extends({}, styles, data.styles);\n    data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n    return data;\n  }\n\n  /**\n   * Helper used to know if the given modifier depends from another one.<br />\n   * It checks if the needed modifier is listed and enabled.\n   * @method\n   * @memberof Popper.Utils\n   * @param {Array} modifiers - list of modifiers\n   * @param {String} requestingName - name of requesting modifier\n   * @param {String} requestedName - name of requested modifier\n   * @returns {Boolean}\n   */\n  function isModifierRequired(modifiers, requestingName, requestedName) {\n    var requesting = find(modifiers, function (_ref) {\n      var name = _ref.name;\n      return name === requestingName;\n    });\n\n    var isRequired = !!requesting && modifiers.some(function (modifier) {\n      return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n    });\n\n    if (!isRequired) {\n      var _requesting = '`' + requestingName + '`';\n      var requested = '`' + requestedName + '`';\n      console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n    }\n    return isRequired;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function arrow(data, options) {\n    var _data$offsets$arrow;\n\n    // arrow depends on keepTogether in order to work\n    if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n      return data;\n    }\n\n    var arrowElement = options.element;\n\n    // if arrowElement is a string, suppose it's a CSS selector\n    if (typeof arrowElement === 'string') {\n      arrowElement = data.instance.popper.querySelector(arrowElement);\n\n      // if arrowElement is not found, don't run the modifier\n      if (!arrowElement) {\n        return data;\n      }\n    } else {\n      // if the arrowElement isn't a query selector we must check that the\n      // provided DOM node is child of its popper node\n      if (!data.instance.popper.contains(arrowElement)) {\n        console.warn('WARNING: `arrow.element` must be child of its popper element!');\n        return data;\n      }\n    }\n\n    var placement = data.placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n    var len = isVertical ? 'height' : 'width';\n    var sideCapitalized = isVertical ? 'Top' : 'Left';\n    var side = sideCapitalized.toLowerCase();\n    var altSide = isVertical ? 'left' : 'top';\n    var opSide = isVertical ? 'bottom' : 'right';\n    var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n    //\n    // extends keepTogether behavior making sure the popper and its\n    // reference have enough pixels in conjunction\n    //\n\n    // top/left side\n    if (reference[opSide] - arrowElementSize < popper[side]) {\n      data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n    }\n    // bottom/right side\n    if (reference[side] + arrowElementSize > popper[opSide]) {\n      data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n    }\n    data.offsets.popper = getClientRect(data.offsets.popper);\n\n    // compute center of the popper\n    var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n    // Compute the sideValue using the updated popper offsets\n    // take popper margin in account because we don't have this info available\n    var css = getStyleComputedProperty(data.instance.popper);\n    var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n    var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n    var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n    // prevent arrowElement from being placed not contiguously to its popper\n    sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n    data.arrowElement = arrowElement;\n    data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n    return data;\n  }\n\n  /**\n   * Get the opposite placement variation of the given one\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement variation\n   * @returns {String} flipped placement variation\n   */\n  function getOppositeVariation(variation) {\n    if (variation === 'end') {\n      return 'start';\n    } else if (variation === 'start') {\n      return 'end';\n    }\n    return variation;\n  }\n\n  /**\n   * List of accepted placements to use as values of the `placement` option.<br />\n   * Valid placements are:\n   * - `auto`\n   * - `top`\n   * - `right`\n   * - `bottom`\n   * - `left`\n   *\n   * Each placement can have a variation from this list:\n   * - `-start`\n   * - `-end`\n   *\n   * Variations are interpreted easily if you think of them as the left to right\n   * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n   * is right.<br />\n   * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n   *\n   * Some valid examples are:\n   * - `top-end` (on top of reference, right aligned)\n   * - `right-start` (on right of reference, top aligned)\n   * - `bottom` (on bottom, centered)\n   * - `auto-end` (on the side with more space available, alignment depends by placement)\n   *\n   * @static\n   * @type {Array}\n   * @enum {String}\n   * @readonly\n   * @method placements\n   * @memberof Popper\n   */\n  var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n  // Get rid of `auto` `auto-start` and `auto-end`\n  var validPlacements = placements.slice(3);\n\n  /**\n   * Given an initial placement, returns all the subsequent placements\n   * clockwise (or counter-clockwise).\n   *\n   * @method\n   * @memberof Popper.Utils\n   * @argument {String} placement - A valid placement (it accepts variations)\n   * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n   * @returns {Array} placements including their variations\n   */\n  function clockwise(placement) {\n    var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var index = validPlacements.indexOf(placement);\n    var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n    return counter ? arr.reverse() : arr;\n  }\n\n  var BEHAVIORS = {\n    FLIP: 'flip',\n    CLOCKWISE: 'clockwise',\n    COUNTERCLOCKWISE: 'counterclockwise'\n  };\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function flip(data, options) {\n    // if `inner` modifier is enabled, we can't use the `flip` modifier\n    if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n      return data;\n    }\n\n    if (data.flipped && data.placement === data.originalPlacement) {\n      // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n      return data;\n    }\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n    var placement = data.placement.split('-')[0];\n    var placementOpposite = getOppositePlacement(placement);\n    var variation = data.placement.split('-')[1] || '';\n\n    var flipOrder = [];\n\n    switch (options.behavior) {\n      case BEHAVIORS.FLIP:\n        flipOrder = [placement, placementOpposite];\n        break;\n      case BEHAVIORS.CLOCKWISE:\n        flipOrder = clockwise(placement);\n        break;\n      case BEHAVIORS.COUNTERCLOCKWISE:\n        flipOrder = clockwise(placement, true);\n        break;\n      default:\n        flipOrder = options.behavior;\n    }\n\n    flipOrder.forEach(function (step, index) {\n      if (placement !== step || flipOrder.length === index + 1) {\n        return data;\n      }\n\n      placement = data.placement.split('-')[0];\n      placementOpposite = getOppositePlacement(placement);\n\n      var popperOffsets = data.offsets.popper;\n      var refOffsets = data.offsets.reference;\n\n      // using floor because the reference offsets may contain decimals we are not going to consider here\n      var floor = Math.floor;\n      var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n      var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n      var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n      var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n      var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n      var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n      // flip the variation if required\n      var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n      var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n      if (overlapsRef || overflowsBoundaries || flippedVariation) {\n        // this boolean to detect any flip loop\n        data.flipped = true;\n\n        if (overlapsRef || overflowsBoundaries) {\n          placement = flipOrder[index + 1];\n        }\n\n        if (flippedVariation) {\n          variation = getOppositeVariation(variation);\n        }\n\n        data.placement = placement + (variation ? '-' + variation : '');\n\n        // this object contains `position`, we want to preserve it along with\n        // any additional property we may add in the future\n        data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n        data = runModifiers(data.instance.modifiers, data, 'flip');\n      }\n    });\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function keepTogether(data) {\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var placement = data.placement.split('-')[0];\n    var floor = Math.floor;\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var side = isVertical ? 'right' : 'bottom';\n    var opSide = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    if (popper[side] < floor(reference[opSide])) {\n      data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n    }\n    if (popper[opSide] > floor(reference[side])) {\n      data.offsets.popper[opSide] = floor(reference[side]);\n    }\n\n    return data;\n  }\n\n  /**\n   * Converts a string containing value + unit into a px value number\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} str - Value + unit string\n   * @argument {String} measurement - `height` or `width`\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @returns {Number|String}\n   * Value in pixels, or original string if no values were extracted\n   */\n  function toValue(str, measurement, popperOffsets, referenceOffsets) {\n    // separate value from unit\n    var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n    var value = +split[1];\n    var unit = split[2];\n\n    // If it's not a number it's an operator, I guess\n    if (!value) {\n      return str;\n    }\n\n    if (unit.indexOf('%') === 0) {\n      var element = void 0;\n      switch (unit) {\n        case '%p':\n          element = popperOffsets;\n          break;\n        case '%':\n        case '%r':\n        default:\n          element = referenceOffsets;\n      }\n\n      var rect = getClientRect(element);\n      return rect[measurement] / 100 * value;\n    } else if (unit === 'vh' || unit === 'vw') {\n      // if is a vh or vw, we calculate the size based on the viewport\n      var size = void 0;\n      if (unit === 'vh') {\n        size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n      } else {\n        size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n      }\n      return size / 100 * value;\n    } else {\n      // if is an explicit pixel unit, we get rid of the unit and keep the value\n      // if is an implicit unit, it's px, and we return just the value\n      return value;\n    }\n  }\n\n  /**\n   * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n   * @function\n   * @memberof {modifiers~offset}\n   * @private\n   * @argument {String} offset\n   * @argument {Object} popperOffsets\n   * @argument {Object} referenceOffsets\n   * @argument {String} basePlacement\n   * @returns {Array} a two cells array with x and y offsets in numbers\n   */\n  function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n    var offsets = [0, 0];\n\n    // Use height if placement is left or right and index is 0 otherwise use width\n    // in this way the first offset will use an axis and the second one\n    // will use the other one\n    var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n    // Split the offset string to obtain a list of values and operands\n    // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n    var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n      return frag.trim();\n    });\n\n    // Detect if the offset string contains a pair of values or a single one\n    // they could be separated by comma or space\n    var divider = fragments.indexOf(find(fragments, function (frag) {\n      return frag.search(/,|\\s/) !== -1;\n    }));\n\n    if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n    }\n\n    // If divider is found, we divide the list of values and operands to divide\n    // them by ofset X and Y.\n    var splitRegex = /\\s*,\\s*|\\s+/;\n    var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n    // Convert the values with units to absolute pixels to allow our computations\n    ops = ops.map(function (op, index) {\n      // Most of the units rely on the orientation of the popper\n      var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n      var mergeWithPrevious = false;\n      return op\n      // This aggregates any `+` or `-` sign that aren't considered operators\n      // e.g.: 10 + +5 => [10, +, +5]\n      .reduce(function (a, b) {\n        if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n          a[a.length - 1] = b;\n          mergeWithPrevious = true;\n          return a;\n        } else if (mergeWithPrevious) {\n          a[a.length - 1] += b;\n          mergeWithPrevious = false;\n          return a;\n        } else {\n          return a.concat(b);\n        }\n      }, [])\n      // Here we convert the string values into number values (in px)\n      .map(function (str) {\n        return toValue(str, measurement, popperOffsets, referenceOffsets);\n      });\n    });\n\n    // Loop trough the offsets arrays and execute the operations\n    ops.forEach(function (op, index) {\n      op.forEach(function (frag, index2) {\n        if (isNumeric(frag)) {\n          offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n        }\n      });\n    });\n    return offsets;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @argument {Number|String} options.offset=0\n   * The offset value as described in the modifier description\n   * @returns {Object} The data object, properly modified\n   */\n  function offset(data, _ref) {\n    var offset = _ref.offset;\n    var placement = data.placement,\n        _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var basePlacement = placement.split('-')[0];\n\n    var offsets = void 0;\n    if (isNumeric(+offset)) {\n      offsets = [+offset, 0];\n    } else {\n      offsets = parseOffset(offset, popper, reference, basePlacement);\n    }\n\n    if (basePlacement === 'left') {\n      popper.top += offsets[0];\n      popper.left -= offsets[1];\n    } else if (basePlacement === 'right') {\n      popper.top += offsets[0];\n      popper.left += offsets[1];\n    } else if (basePlacement === 'top') {\n      popper.left += offsets[0];\n      popper.top -= offsets[1];\n    } else if (basePlacement === 'bottom') {\n      popper.left += offsets[0];\n      popper.top += offsets[1];\n    }\n\n    data.popper = popper;\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function preventOverflow(data, options) {\n    var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n    // If offsetParent is the reference element, we really want to\n    // go one step up and use the next offsetParent as reference to\n    // avoid to make this modifier completely useless and look like broken\n    if (data.instance.reference === boundariesElement) {\n      boundariesElement = getOffsetParent(boundariesElement);\n    }\n\n    // NOTE: DOM access here\n    // resets the popper's position so that the document size can be calculated excluding\n    // the size of the popper element itself\n    var transformProp = getSupportedPropertyName('transform');\n    var popperStyles = data.instance.popper.style; // assignment to help minification\n    var top = popperStyles.top,\n        left = popperStyles.left,\n        transform = popperStyles[transformProp];\n\n    popperStyles.top = '';\n    popperStyles.left = '';\n    popperStyles[transformProp] = '';\n\n    var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n    // NOTE: DOM access here\n    // restores the original style properties after the offsets have been computed\n    popperStyles.top = top;\n    popperStyles.left = left;\n    popperStyles[transformProp] = transform;\n\n    options.boundaries = boundaries;\n\n    var order = options.priority;\n    var popper = data.offsets.popper;\n\n    var check = {\n      primary: function primary(placement) {\n        var value = popper[placement];\n        if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n          value = Math.max(popper[placement], boundaries[placement]);\n        }\n        return defineProperty({}, placement, value);\n      },\n      secondary: function secondary(placement) {\n        var mainSide = placement === 'right' ? 'left' : 'top';\n        var value = popper[mainSide];\n        if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n          value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n        }\n        return defineProperty({}, mainSide, value);\n      }\n    };\n\n    order.forEach(function (placement) {\n      var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n      popper = _extends({}, popper, check[side](placement));\n    });\n\n    data.offsets.popper = popper;\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function shift(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var shiftvariation = placement.split('-')[1];\n\n    // if shift shiftvariation is specified, run the modifier\n    if (shiftvariation) {\n      var _data$offsets = data.offsets,\n          reference = _data$offsets.reference,\n          popper = _data$offsets.popper;\n\n      var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n      var side = isVertical ? 'left' : 'top';\n      var measurement = isVertical ? 'width' : 'height';\n\n      var shiftOffsets = {\n        start: defineProperty({}, side, reference[side]),\n        end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n      };\n\n      data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by update method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function hide(data) {\n    if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n      return data;\n    }\n\n    var refRect = data.offsets.reference;\n    var bound = find(data.instance.modifiers, function (modifier) {\n      return modifier.name === 'preventOverflow';\n    }).boundaries;\n\n    if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === true) {\n        return data;\n      }\n\n      data.hide = true;\n      data.attributes['x-out-of-boundaries'] = '';\n    } else {\n      // Avoid unnecessary DOM access if visibility hasn't changed\n      if (data.hide === false) {\n        return data;\n      }\n\n      data.hide = false;\n      data.attributes['x-out-of-boundaries'] = false;\n    }\n\n    return data;\n  }\n\n  /**\n   * @function\n   * @memberof Modifiers\n   * @argument {Object} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {Object} The data object, properly modified\n   */\n  function inner(data) {\n    var placement = data.placement;\n    var basePlacement = placement.split('-')[0];\n    var _data$offsets = data.offsets,\n        popper = _data$offsets.popper,\n        reference = _data$offsets.reference;\n\n    var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n    var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n    popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n    data.placement = getOppositePlacement(placement);\n    data.offsets.popper = getClientRect(popper);\n\n    return data;\n  }\n\n  /**\n   * Modifier function, each modifier can have a function of this type assigned\n   * to its `fn` property.<br />\n   * These functions will be called on each update, this means that you must\n   * make sure they are performant enough to avoid performance bottlenecks.\n   *\n   * @function ModifierFn\n   * @argument {dataObject} data - The data object generated by `update` method\n   * @argument {Object} options - Modifiers configuration and options\n   * @returns {dataObject} The data object, properly modified\n   */\n\n  /**\n   * Modifiers are plugins used to alter the behavior of your poppers.<br />\n   * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n   * needed by the library.\n   *\n   * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n   * All the other properties are configurations that could be tweaked.\n   * @namespace modifiers\n   */\n  var modifiers = {\n    /**\n     * Modifier used to shift the popper on the start or end of its reference\n     * element.<br />\n     * It will read the variation of the `placement` property.<br />\n     * It can be one either `-end` or `-start`.\n     * @memberof modifiers\n     * @inner\n     */\n    shift: {\n      /** @prop {number} order=100 - Index used to define the order of execution */\n      order: 100,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: shift\n    },\n\n    /**\n     * The `offset` modifier can shift your popper on both its axis.\n     *\n     * It accepts the following units:\n     * - `px` or unit-less, interpreted as pixels\n     * - `%` or `%r`, percentage relative to the length of the reference element\n     * - `%p`, percentage relative to the length of the popper element\n     * - `vw`, CSS viewport width unit\n     * - `vh`, CSS viewport height unit\n     *\n     * For length is intended the main axis relative to the placement of the popper.<br />\n     * This means that if the placement is `top` or `bottom`, the length will be the\n     * `width`. In case of `left` or `right`, it will be the `height`.\n     *\n     * You can provide a single value (as `Number` or `String`), or a pair of values\n     * as `String` divided by a comma or one (or more) white spaces.<br />\n     * The latter is a deprecated method because it leads to confusion and will be\n     * removed in v2.<br />\n     * Additionally, it accepts additions and subtractions between different units.\n     * Note that multiplications and divisions aren't supported.\n     *\n     * Valid examples are:\n     * ```\n     * 10\n     * '10%'\n     * '10, 10'\n     * '10%, 10'\n     * '10 + 10%'\n     * '10 - 5vh + 3%'\n     * '-10px + 5vh, 5px - 6%'\n     * ```\n     * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n     * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n     * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    offset: {\n      /** @prop {number} order=200 - Index used to define the order of execution */\n      order: 200,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: offset,\n      /** @prop {Number|String} offset=0\n       * The offset value as described in the modifier description\n       */\n      offset: 0\n    },\n\n    /**\n     * Modifier used to prevent the popper from being positioned outside the boundary.\n     *\n     * A scenario exists where the reference itself is not within the boundaries.<br />\n     * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n     * In this case we need to decide whether the popper should either:\n     *\n     * - detach from the reference and remain \"trapped\" in the boundaries, or\n     * - if it should ignore the boundary and \"escape with its reference\"\n     *\n     * When `escapeWithReference` is set to`true` and reference is completely\n     * outside its boundaries, the popper will overflow (or completely leave)\n     * the boundaries in order to remain attached to the edge of the reference.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    preventOverflow: {\n      /** @prop {number} order=300 - Index used to define the order of execution */\n      order: 300,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: preventOverflow,\n      /**\n       * @prop {Array} [priority=['left','right','top','bottom']]\n       * Popper will try to prevent overflow following these priorities by default,\n       * then, it could overflow on the left and on top of the `boundariesElement`\n       */\n      priority: ['left', 'right', 'top', 'bottom'],\n      /**\n       * @prop {number} padding=5\n       * Amount of pixel used to define a minimum distance between the boundaries\n       * and the popper. This makes sure the popper always has a little padding\n       * between the edges of its container\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='scrollParent'\n       * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n       * `viewport` or any DOM element.\n       */\n      boundariesElement: 'scrollParent'\n    },\n\n    /**\n     * Modifier used to make sure the reference and its popper stay near each other\n     * without leaving any gap between the two. Especially useful when the arrow is\n     * enabled and you want to ensure that it points to its reference element.\n     * It cares only about the first axis. You can still have poppers with margin\n     * between the popper and its reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    keepTogether: {\n      /** @prop {number} order=400 - Index used to define the order of execution */\n      order: 400,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: keepTogether\n    },\n\n    /**\n     * This modifier is used to move the `arrowElement` of the popper to make\n     * sure it is positioned between the reference element and its popper element.\n     * It will read the outer size of the `arrowElement` node to detect how many\n     * pixels of conjunction are needed.\n     *\n     * It has no effect if no `arrowElement` is provided.\n     * @memberof modifiers\n     * @inner\n     */\n    arrow: {\n      /** @prop {number} order=500 - Index used to define the order of execution */\n      order: 500,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: arrow,\n      /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n      element: '[x-arrow]'\n    },\n\n    /**\n     * Modifier used to flip the popper's placement when it starts to overlap its\n     * reference element.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     *\n     * **NOTE:** this modifier will interrupt the current update cycle and will\n     * restart it if it detects the need to flip the placement.\n     * @memberof modifiers\n     * @inner\n     */\n    flip: {\n      /** @prop {number} order=600 - Index used to define the order of execution */\n      order: 600,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: flip,\n      /**\n       * @prop {String|Array} behavior='flip'\n       * The behavior used to change the popper's placement. It can be one of\n       * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n       * placements (with optional variations)\n       */\n      behavior: 'flip',\n      /**\n       * @prop {number} padding=5\n       * The popper will flip if it hits the edges of the `boundariesElement`\n       */\n      padding: 5,\n      /**\n       * @prop {String|HTMLElement} boundariesElement='viewport'\n       * The element which will define the boundaries of the popper position.\n       * The popper will never be placed outside of the defined boundaries\n       * (except if `keepTogether` is enabled)\n       */\n      boundariesElement: 'viewport'\n    },\n\n    /**\n     * Modifier used to make the popper flow toward the inner of the reference element.\n     * By default, when this modifier is disabled, the popper will be placed outside\n     * the reference element.\n     * @memberof modifiers\n     * @inner\n     */\n    inner: {\n      /** @prop {number} order=700 - Index used to define the order of execution */\n      order: 700,\n      /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n      enabled: false,\n      /** @prop {ModifierFn} */\n      fn: inner\n    },\n\n    /**\n     * Modifier used to hide the popper when its reference element is outside of the\n     * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n     * be used to hide with a CSS selector the popper when its reference is\n     * out of boundaries.\n     *\n     * Requires the `preventOverflow` modifier before it in order to work.\n     * @memberof modifiers\n     * @inner\n     */\n    hide: {\n      /** @prop {number} order=800 - Index used to define the order of execution */\n      order: 800,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: hide\n    },\n\n    /**\n     * Computes the style that will be applied to the popper element to gets\n     * properly positioned.\n     *\n     * Note that this modifier will not touch the DOM, it just prepares the styles\n     * so that `applyStyle` modifier can apply it. This separation is useful\n     * in case you need to replace `applyStyle` with a custom implementation.\n     *\n     * This modifier has `850` as `order` value to maintain backward compatibility\n     * with previous versions of Popper.js. Expect the modifiers ordering method\n     * to change in future major versions of the library.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    computeStyle: {\n      /** @prop {number} order=850 - Index used to define the order of execution */\n      order: 850,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: computeStyle,\n      /**\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: true,\n      /**\n       * @prop {string} [x='bottom']\n       * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n       * Change this if your popper should grow in a direction different from `bottom`\n       */\n      x: 'bottom',\n      /**\n       * @prop {string} [x='left']\n       * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n       * Change this if your popper should grow in a direction different from `right`\n       */\n      y: 'right'\n    },\n\n    /**\n     * Applies the computed styles to the popper element.\n     *\n     * All the DOM manipulations are limited to this modifier. This is useful in case\n     * you want to integrate Popper.js inside a framework or view library and you\n     * want to delegate all the DOM manipulations to it.\n     *\n     * Note that if you disable this modifier, you must make sure the popper element\n     * has its position set to `absolute` before Popper.js can do its work!\n     *\n     * Just disable this modifier and define your own to achieve the desired effect.\n     *\n     * @memberof modifiers\n     * @inner\n     */\n    applyStyle: {\n      /** @prop {number} order=900 - Index used to define the order of execution */\n      order: 900,\n      /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n      enabled: true,\n      /** @prop {ModifierFn} */\n      fn: applyStyle,\n      /** @prop {Function} */\n      onLoad: applyStyleOnLoad,\n      /**\n       * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n       * @prop {Boolean} gpuAcceleration=true\n       * If true, it uses the CSS 3D transformation to position the popper.\n       * Otherwise, it will use the `top` and `left` properties\n       */\n      gpuAcceleration: undefined\n    }\n  };\n\n  /**\n   * The `dataObject` is an object containing all the information used by Popper.js.\n   * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n   * @name dataObject\n   * @property {Object} data.instance The Popper.js instance\n   * @property {String} data.placement Placement applied to popper\n   * @property {String} data.originalPlacement Placement originally defined on init\n   * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n   * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n   * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n   * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n   * @property {Object} data.boundaries Offsets of the popper boundaries\n   * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n   * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n   * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n   */\n\n  /**\n   * Default options provided to Popper.js constructor.<br />\n   * These can be overridden using the `options` argument of Popper.js.<br />\n   * To override an option, simply pass an object with the same\n   * structure of the `options` object, as the 3rd argument. For example:\n   * ```\n   * new Popper(ref, pop, {\n   *   modifiers: {\n   *     preventOverflow: { enabled: false }\n   *   }\n   * })\n   * ```\n   * @type {Object}\n   * @static\n   * @memberof Popper\n   */\n  var Defaults = {\n    /**\n     * Popper's placement.\n     * @prop {Popper.placements} placement='bottom'\n     */\n    placement: 'bottom',\n\n    /**\n     * Set this to true if you want popper to position it self in 'fixed' mode\n     * @prop {Boolean} positionFixed=false\n     */\n    positionFixed: false,\n\n    /**\n     * Whether events (resize, scroll) are initially enabled.\n     * @prop {Boolean} eventsEnabled=true\n     */\n    eventsEnabled: true,\n\n    /**\n     * Set to true if you want to automatically remove the popper when\n     * you call the `destroy` method.\n     * @prop {Boolean} removeOnDestroy=false\n     */\n    removeOnDestroy: false,\n\n    /**\n     * Callback called when the popper is created.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onCreate}\n     */\n    onCreate: function onCreate() {},\n\n    /**\n     * Callback called when the popper is updated. This callback is not called\n     * on the initialization/creation of the popper, but only on subsequent\n     * updates.<br />\n     * By default, it is set to no-op.<br />\n     * Access Popper.js instance with `data.instance`.\n     * @prop {onUpdate}\n     */\n    onUpdate: function onUpdate() {},\n\n    /**\n     * List of modifiers used to modify the offsets before they are applied to the popper.\n     * They provide most of the functionalities of Popper.js.\n     * @prop {modifiers}\n     */\n    modifiers: modifiers\n  };\n\n  /**\n   * @callback onCreate\n   * @param {dataObject} data\n   */\n\n  /**\n   * @callback onUpdate\n   * @param {dataObject} data\n   */\n\n  // Utils\n  // Methods\n  var Popper = function () {\n    /**\n     * Creates a new Popper.js instance.\n     * @class Popper\n     * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n     * @param {HTMLElement} popper - The HTML element used as the popper\n     * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n     * @return {Object} instance - The generated Popper.js instance\n     */\n    function Popper(reference, popper) {\n      var _this = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      classCallCheck(this, Popper);\n\n      this.scheduleUpdate = function () {\n        return requestAnimationFrame(_this.update);\n      };\n\n      // make update() debounced, so that it only runs at most once-per-tick\n      this.update = debounce(this.update.bind(this));\n\n      // with {} we create a new object with the options inside it\n      this.options = _extends({}, Popper.Defaults, options);\n\n      // init state\n      this.state = {\n        isDestroyed: false,\n        isCreated: false,\n        scrollParents: []\n      };\n\n      // get reference and popper elements (allow jQuery wrappers)\n      this.reference = reference && reference.jquery ? reference[0] : reference;\n      this.popper = popper && popper.jquery ? popper[0] : popper;\n\n      // Deep merge modifiers options\n      this.options.modifiers = {};\n      Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n        _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n      });\n\n      // Refactoring modifiers' list (Object => Array)\n      this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n        return _extends({\n          name: name\n        }, _this.options.modifiers[name]);\n      })\n      // sort the modifiers by order\n      .sort(function (a, b) {\n        return a.order - b.order;\n      });\n\n      // modifiers have the ability to execute arbitrary code when Popper.js get inited\n      // such code is executed in the same order of its modifier\n      // they could add new properties to their options configuration\n      // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n      this.modifiers.forEach(function (modifierOptions) {\n        if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n          modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n        }\n      });\n\n      // fire the first update to position the popper in the right place\n      this.update();\n\n      var eventsEnabled = this.options.eventsEnabled;\n      if (eventsEnabled) {\n        // setup event listeners, they will take care of update the position in specific situations\n        this.enableEventListeners();\n      }\n\n      this.state.eventsEnabled = eventsEnabled;\n    }\n\n    // We can't use class properties because they don't get listed in the\n    // class prototype and break stuff like Sinon stubs\n\n\n    createClass(Popper, [{\n      key: 'update',\n      value: function update$$1() {\n        return update.call(this);\n      }\n    }, {\n      key: 'destroy',\n      value: function destroy$$1() {\n        return destroy.call(this);\n      }\n    }, {\n      key: 'enableEventListeners',\n      value: function enableEventListeners$$1() {\n        return enableEventListeners.call(this);\n      }\n    }, {\n      key: 'disableEventListeners',\n      value: function disableEventListeners$$1() {\n        return disableEventListeners.call(this);\n      }\n\n      /**\n       * Schedules an update. It will run on the next UI update available.\n       * @method scheduleUpdate\n       * @memberof Popper\n       */\n\n\n      /**\n       * Collection of utilities useful when writing custom modifiers.\n       * Starting from version 1.7, this method is available only if you\n       * include `popper-utils.js` before `popper.js`.\n       *\n       * **DEPRECATION**: This way to access PopperUtils is deprecated\n       * and will be removed in v2! Use the PopperUtils module directly instead.\n       * Due to the high instability of the methods contained in Utils, we can't\n       * guarantee them to follow semver. Use them at your own risk!\n       * @static\n       * @private\n       * @type {Object}\n       * @deprecated since version 1.8\n       * @member Utils\n       * @memberof Popper\n       */\n\n    }]);\n    return Popper;\n  }();\n\n  /**\n   * The `referenceObject` is an object that provides an interface compatible with Popper.js\n   * and lets you use it as replacement of a real DOM node.<br />\n   * You can use this method to position a popper relatively to a set of coordinates\n   * in case you don't have a DOM node to use as reference.\n   *\n   * ```\n   * new Popper(referenceObject, popperNode);\n   * ```\n   *\n   * NB: This feature isn't supported in Internet Explorer 10.\n   * @name referenceObject\n   * @property {Function} data.getBoundingClientRect\n   * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n   * @property {number} data.clientWidth\n   * An ES6 getter that will return the width of the virtual reference element.\n   * @property {number} data.clientHeight\n   * An ES6 getter that will return the height of the virtual reference element.\n   */\n\n\n  Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n  Popper.placements = placements;\n  Popper.Defaults = Defaults;\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/bootstrap/dist/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, function (exports, $, Popper) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery/LICENSE.txt",
    "content": "Copyright JS Foundation and other contributors, https://js.foundation/\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/jquery/jquery\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nAll files located in the node_modules and external directories are\nexternally maintained libraries used by this software which have their\nown licenses; we recommend you read them, as their terms may differ from\nthe terms above.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery/dist/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery-validation/LICENSE.md",
    "content": "The MIT License (MIT)\n=====================\n\nCopyright Jörn Zaefferer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery-validation/dist/additional-methods.js",
    "content": "/*!\n * jQuery Validation Plugin v1.17.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2017 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n( function() {\n\n\tfunction stripHtml( value ) {\n\n\t\t// Remove html tags and space chars\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( /&nbsp;|&#160;/gi, \" \" )\n\n\t\t// Remove punctuation\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\" );\n\t}\n\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\n\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\n\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\n\t\tvar valueStripped = stripHtml( value ),\n\t\t\tregex = /\\b\\w+\\b/g;\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\n\n}() );\n\n// Accept a value from a file input based on a required mimetype\n$.validator.addMethod( \"accept\", function( value, element, param ) {\n\n\t// Split mime on commas in case we have multiple types we can accept\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\n\t\toptionalValue = this.optional( element ),\n\t\ti, file, regex;\n\n\t// Element is optional\n\tif ( optionalValue ) {\n\t\treturn optionalValue;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\n\t\t// Escape string to be used in the regex\n\t\t// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\n\t\ttypeParam = typeParam\n\t\t\t\t.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" )\n\t\t\t\t.replace( /,/g, \"|\" )\n\t\t\t\t.replace( /\\/\\*/g, \"/.*\" );\n\n\t\t// Check if the element has a FileList before checking each file\n\t\tif ( element.files && element.files.length ) {\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\n\t\t\t\tfile = element.files[ i ];\n\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\n\t\t\t\tif ( !file.type.match( regex ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Either return true because we've validated each file, or because the\n\t// browser does not support element.files and the FileList feature\n\treturn true;\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\n\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\n}, \"Letters, numbers, and underscores only please\" );\n\n/*\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\n * and pass the '11 check'.\n * We accept the notation with spaces, as that is common.\n * acceptable: 123456789 or 12 34 56 789\n */\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\n\t\treturn false;\n\t}\n\n\t// Now '11 check'\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\n\t\tsum = 0,\n\t\tlen = account.length,\n\t\tpos, factor, digit;\n\tfor ( pos = 0; pos < len; pos++ ) {\n\t\tfactor = len - pos;\n\t\tdigit = account.substring( pos, pos + 1 );\n\t\tsum = sum + factor * digit;\n\t}\n\treturn sum % 11 === 0;\n}, \"Please specify a valid bank account number\" );\n\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) ||\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\n}, \"Please specify a valid bank or giro account number\" );\n\n/**\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\n *\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n *\n * BIC definition in detail:\n * - First 4 characters - bank code (only letters)\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\n * - Next 2 characters - location code (letters and digits)\n *   a. shall not start with '0' or '1'\n *   b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\n */\n$.validator.addMethod( \"bic\", function( value, element ) {\n    return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\n}, \"Please specify a valid BIC code\" );\n\n/*\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\n *\n * Spanish CIF structure:\n *\n * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]\n *\n * Where:\n *\n * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]\n * P: 2 characters. Province.\n * N: 5 characters. Secuencial Number within the province.\n * C: 1 character. Control Digit: [0-9A-J].\n *\n * [ T ]: Kind of Organizations. Possible values:\n *\n *   A. Corporations\n *   B. LLCs\n *   C. General partnerships\n *   D. Companies limited partnerships\n *   E. Communities of goods\n *   F. Cooperative Societies\n *   G. Associations\n *   H. Communities of homeowners in horizontal property regime\n *   J. Civil Societies\n *   K. Old format\n *   L. Old format\n *   M. Old format\n *   N. Nonresident entities\n *   P. Local authorities\n *   Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions\n *   R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\n *   S. Organs of State Administration and regions\n *   V. Agrarian Transformation\n *   W. Permanent establishments of non-resident in Spain\n *\n * [ C ]: Control Digit. It can be a number or a letter depending on T value:\n * [ T ]  -->  [ C ]\n * ------    ----------\n *   A         Number\n *   B         Number\n *   E         Number\n *   H         Number\n *   K         Letter\n *   P         Letter\n *   Q         Letter\n *   S         Letter\n *\n */\n$.validator.addMethod( \"cifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi );\n\tvar letter  = value.substring( 0, 1 ), // [ T ]\n\t\tnumber  = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\n\t\tcontrol = value.substring( 8, 9 ), // [ C ]\n\t\tall_sum = 0,\n\t\teven_sum = 0,\n\t\todd_sum = 0,\n\t\ti, n,\n\t\tcontrol_digit,\n\t\tcontrol_letter;\n\n\tfunction isOdd( n ) {\n\t\treturn n % 2 === 0;\n\t}\n\n\t// Quick format test\n\tif ( value.length !== 9 || !cifRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = 0; i < number.length; i++ ) {\n\t\tn = parseInt( number[ i ], 10 );\n\n\t\t// Odd positions\n\t\tif ( isOdd( i ) ) {\n\n\t\t\t// Odd positions are multiplied first.\n\t\t\tn *= 2;\n\n\t\t\t// If the multiplication is bigger than 10 we need to adjust\n\t\t\todd_sum += n < 10 ? n : n - 9;\n\n\t\t// Even positions\n\t\t// Just sum them\n\t\t} else {\n\t\t\teven_sum += n;\n\t\t}\n\t}\n\n\tall_sum = even_sum + odd_sum;\n\tcontrol_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();\n\tcontrol_digit = parseInt( control_digit, 10 ) > 9 ? \"0\" : control_digit;\n\tcontrol_letter = \"JABCDEFGHI\".substr( control_digit, 1 ).toString();\n\n\t// Control must be a digit\n\tif ( letter.match( /[ABEH]/ ) ) {\n\t\treturn control === control_digit;\n\n\t// Control must be a letter\n\t} else if ( letter.match( /[KPQS]/ ) ) {\n\t\treturn control === control_letter;\n\t}\n\n\t// Can be either\n\treturn control === control_digit || control === control_letter;\n\n}, \"Please specify a valid CIF number.\" );\n\n/*\n * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cpfBR\", function( value ) {\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\tvar sum = 0,\n\t\tfirstCN, secondCN, checkResult, i;\n\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\n\n\tcheckResult = function( sum, cn ) {\n\t\tvar result = ( sum * 10 ) % 11;\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\n\t\t\tresult = 0;\n\t\t}\n\t\treturn ( result === cn );\n\t};\n\n\t// Checking for dump data\n\tif ( value === \"\" ||\n\t\tvalue === \"00000000000\" ||\n\t\tvalue === \"11111111111\" ||\n\t\tvalue === \"22222222222\" ||\n\t\tvalue === \"33333333333\" ||\n\t\tvalue === \"44444444444\" ||\n\t\tvalue === \"55555555555\" ||\n\t\tvalue === \"66666666666\" ||\n\t\tvalue === \"77777777777\" ||\n\t\tvalue === \"88888888888\" ||\n\t\tvalue === \"99999999999\"\n\t) {\n\t\treturn false;\n\t}\n\n\t// Step 1 - using first Check Number:\n\tfor ( i = 1; i <= 9; i++ ) {\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\n\t}\n\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\n\tif ( checkResult( sum, firstCN ) ) {\n\t\tsum = 0;\n\t\tfor ( i = 1; i <= 10; i++ ) {\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\n\t\t}\n\t\treturn checkResult( sum, secondCN );\n\t}\n\treturn false;\n\n}, \"Please specify a valid CPF number\" );\n\n// https://jqueryvalidation.org/creditcard-method/\n// based on https://en.wikipedia.org/wiki/Luhn_algorithm\n$.validator.addMethod( \"creditcard\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn \"dependency-mismatch\";\n\t}\n\n\t// Accept only spaces, digits and dashes\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvar nCheck = 0,\n\t\tnDigit = 0,\n\t\tbEven = false,\n\t\tn, cDigit;\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\t// Basing min and max length on\n\t// https://developer.ean.com/general_info/Valid_Credit_Card_Types\n\tif ( value.length < 13 || value.length > 19 ) {\n\t\treturn false;\n\t}\n\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\n\t\tcDigit = value.charAt( n );\n\t\tnDigit = parseInt( cDigit, 10 );\n\t\tif ( bEven ) {\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\tnDigit -= 9;\n\t\t\t}\n\t\t}\n\n\t\tnCheck += nDigit;\n\t\tbEven = !bEven;\n\t}\n\n\treturn ( nCheck % 10 ) === 0;\n}, \"Please enter a valid credit card number.\" );\n\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\n * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\n */\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\n\tif ( /[^0-9\\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\tvar validTypes = 0x0000;\n\n\tif ( param.mastercard ) {\n\t\tvalidTypes |= 0x0001;\n\t}\n\tif ( param.visa ) {\n\t\tvalidTypes |= 0x0002;\n\t}\n\tif ( param.amex ) {\n\t\tvalidTypes |= 0x0004;\n\t}\n\tif ( param.dinersclub ) {\n\t\tvalidTypes |= 0x0008;\n\t}\n\tif ( param.enroute ) {\n\t\tvalidTypes |= 0x0010;\n\t}\n\tif ( param.discover ) {\n\t\tvalidTypes |= 0x0020;\n\t}\n\tif ( param.jcb ) {\n\t\tvalidTypes |= 0x0040;\n\t}\n\tif ( param.unknown ) {\n\t\tvalidTypes |= 0x0080;\n\t}\n\tif ( param.all ) {\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n\t}\n\tif ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\n\t\treturn value.length === 14;\n\t}\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0080 ) { // Unknown\n\t\treturn true;\n\t}\n\treturn false;\n}, \"Please enter a valid credit card number.\" );\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n *  currency: [\"£\", false] - Use false for soft currency validation\n *  currency: [\"$\", false]\n *  currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n *  <input class=\"currencyInput\" name=\"currencyInput\">\n *\n * Soft symbol checking\n *  currencyInput: {\n *     currency: [\"$\", false]\n *  }\n *\n * Strict symbol checking (default)\n *  currencyInput: {\n *     currency: \"$\"\n *     //OR\n *     currency: [\"$\", true]\n *  }\n *\n * Multiple Symbols\n *  currencyInput: {\n *     currency: \"$,£,¢\"\n *  }\n */\n$.validator.addMethod( \"currency\", function( value, element, param ) {\n    var isParamString = typeof param === \"string\",\n        symbol = isParamString ? param : param[ 0 ],\n        soft = isParamString ? true : param[ 1 ],\n        regex;\n\n    symbol = symbol.replace( /,/g, \"\" );\n    symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n    regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\n    regex = new RegExp( regex );\n    return this.optional( element ) || regex.test( value );\n\n}, \"Please specify a valid currency\" );\n\n$.validator.addMethod( \"dateFA\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\n}, $.validator.messages.date );\n\n/**\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\n *\n * @example $.validator.methods.date(\"01/01/1900\")\n * @result true\n *\n * @example $.validator.methods.date(\"01/13/1990\")\n * @result false\n *\n * @example $.validator.methods.date(\"01.01.1900\")\n * @result false\n *\n * @example <input name=\"pippo\" class=\"{dateITA:true}\" />\n * @desc Declares an optional input element whose value must be a valid date.\n *\n * @name $.validator.methods.dateITA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"dateITA\", function( value, element ) {\n\tvar check = false,\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n\t\tadata, gg, mm, aaaa, xdata;\n\tif ( re.test( value ) ) {\n\t\tadata = value.split( \"/\" );\n\t\tgg = parseInt( adata[ 0 ], 10 );\n\t\tmm = parseInt( adata[ 1 ], 10 );\n\t\taaaa = parseInt( adata[ 2 ], 10 );\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\n\t\t\tcheck = true;\n\t\t} else {\n\t\t\tcheck = false;\n\t\t}\n\t} else {\n\t\tcheck = false;\n\t}\n\treturn this.optional( element ) || check;\n}, $.validator.messages.date );\n\n$.validator.addMethod( \"dateNL\", function( value, element ) {\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\n}, $.validator.messages.date );\n\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\n$.validator.addMethod( \"extension\", function( value, element, param ) {\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\n\n/**\n * Dutch giro account numbers (not bank numbers) have max 7 digits\n */\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\n}, \"Please specify a valid giro account number\" );\n\n/**\n * IBAN is the international bank account number.\n * It has a country - specific format, that is checked here too\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n */\n$.validator.addMethod( \"iban\", function( value, element ) {\n\n\t// Some quick simple tests to prevent needless work\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Remove spaces and to upper case\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\n\t\tibancheckdigits = \"\",\n\t\tleadingZeroes = true,\n\t\tcRest = \"\",\n\t\tcOperator = \"\",\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\n\n\t// Check for IBAN code length.\n\t// It contains:\n\t// country code ISO 3166-1 - two letters,\n\t// two check digits,\n\t// Basic Bank Account Number (BBAN) - up to 30 chars\n\tvar minimalIBANlength = 5;\n\tif ( iban.length < minimalIBANlength ) {\n\t\treturn false;\n\t}\n\n\t// Check the country code and find the country specific format\n\tcountrycode = iban.substring( 0, 2 );\n\tbbancountrypatterns = {\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\n\t\t\"AT\": \"\\\\d{16}\",\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\n\t\t\"BE\": \"\\\\d{12}\",\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\n\t\t\"BA\": \"\\\\d{16}\",\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\n\t\t\"CR\": \"\\\\d{17}\",\n\t\t\"HR\": \"\\\\d{17}\",\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"CZ\": \"\\\\d{20}\",\n\t\t\"DK\": \"\\\\d{14}\",\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\n\t\t\"EE\": \"\\\\d{16}\",\n\t\t\"FO\": \"\\\\d{14}\",\n\t\t\"FI\": \"\\\\d{14}\",\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\n\t\t\"DE\": \"\\\\d{18}\",\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\n\t\t\"GL\": \"\\\\d{14}\",\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\n\t\t\"HU\": \"\\\\d{24}\",\n\t\t\"IS\": \"\\\\d{22}\",\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\n\t\t\"IL\": \"\\\\d{19}\",\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"LT\": \"\\\\d{16}\",\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\n\t\t\"MR\": \"\\\\d{23}\",\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\n\t\t\"ME\": \"\\\\d{18}\",\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\n\t\t\"NO\": \"\\\\d{11}\",\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\n\t\t\"PL\": \"\\\\d{24}\",\n\t\t\"PT\": \"\\\\d{21}\",\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\n\t\t\"RS\": \"\\\\d{18}\",\n\t\t\"SK\": \"\\\\d{20}\",\n\t\t\"SI\": \"\\\\d{15}\",\n\t\t\"ES\": \"\\\\d{20}\",\n\t\t\"SE\": \"\\\\d{20}\",\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"TN\": \"\\\\d{20}\",\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\n\t};\n\n\tbbanpattern = bbancountrypatterns[ countrycode ];\n\n\t// As new countries will start using IBAN in the\n\t// future, we only check if the countrycode is known.\n\t// This prevents false negatives, while almost all\n\t// false positives introduced by this, will be caught\n\t// by the checksum validation below anyway.\n\t// Strict checking should return FALSE for unknown\n\t// countries.\n\tif ( typeof bbanpattern !== \"undefined\" ) {\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\n\t\t\treturn false; // Invalid country specific format\n\t\t}\n\t}\n\n\t// Now check the checksum, first convert to digits\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\n\t\tcharAt = ibancheck.charAt( i );\n\t\tif ( charAt !== \"0\" ) {\n\t\t\tleadingZeroes = false;\n\t\t}\n\t\tif ( !leadingZeroes ) {\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\n\t\t}\n\t}\n\n\t// Calculate the result of: ibancheckdigits % 97\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\n\t\tcChar = ibancheckdigits.charAt( p );\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\n\t\tcRest = cOperator % 97;\n\t}\n\treturn cRest === 1;\n}, \"Please specify a valid IBAN\" );\n\n$.validator.addMethod( \"integer\", function( value, element ) {\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\n}, \"A positive or negative non-decimal number please\" );\n\n$.validator.addMethod( \"ipv4\", function( value, element ) {\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\n}, \"Please enter a valid IP v4 address.\" );\n\n$.validator.addMethod( \"ipv6\", function( value, element ) {\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\n}, \"Please enter a valid IP v6 address.\" );\n\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\n}, \"Letters only please\" );\n\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\n}, \"Letters or punctuation only please\" );\n\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid mobile number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\n}, \"Please specify a valid mobile number\" );\n\n$.validator.addMethod( \"netmask\", function( value, element ) {\n    return this.optional( element ) || /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)/i.test( value );\n}, \"Please enter a valid netmask.\" );\n\n/*\n * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish\n * authorities to any foreigner.\n *\n * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal\n * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to\n * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.\n */\n$.validator.addMethod( \"nieES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );\n\tvar validChars = \"TRWAGMYFPDXBNJZSQVHLCKET\",\n\t\tletter = value.substr( value.length - 1 ).toUpperCase(),\n\t\tnumber;\n\n\tvalue = value.toString().toUpperCase();\n\n\t// Quick format test\n\tif ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\t// X means same number\n\t// Y means number + 10000000\n\t// Z means number + 20000000\n\tvalue = value.replace( /^[X]/, \"0\" )\n\t\t.replace( /^[Y]/, \"1\" )\n\t\t.replace( /^[Z]/, \"2\" );\n\n\tnumber = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );\n\n\treturn validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;\n\n}, \"Please specify a valid NIE number.\" );\n\n/*\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\n */\n$.validator.addMethod( \"nifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIF\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\n\t}\n\n\t// Test specials NIF (starts with K, L or M)\n\tif ( /^[KLM]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 1 ) % 23 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIF number.\" );\n\n/*\n * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies\n */\n$.validator.addMethod( \"nipPL\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.replace( /[^0-9]/g, \"\" );\n\n\tif ( value.length !== 10 ) {\n\t\treturn false;\n\t}\n\n\tvar arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];\n\tvar intSum = 0;\n\tfor ( var i = 0; i < 9; i++ ) {\n\t\tintSum += arrSteps[ i ] * value[ i ];\n\t}\n\tvar int2 = intSum % 11;\n\tvar intControlNr = ( int2 === 10 ) ? 0 : int2;\n\n\treturn ( intControlNr === parseInt( value[ 9 ], 10 ) );\n}, \"Please specify a valid NIP number.\" );\n\n$.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\n}, \"Please enter a different value, values must not be the same.\" );\n\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\n}, \"No white space please\" );\n\n/**\n* Return true if the field value matches the given format RegExp\n*\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\n* @result true\n*\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\n* @result false\n*\n* @name $.validator.methods.pattern\n* @type Boolean\n* @cat Plugins/Validate/Methods\n*/\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( typeof param === \"string\" ) {\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\n\t}\n\treturn param.test( value );\n}, \"Invalid format.\" );\n\n/**\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\n */\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\n}, \"Please specify a valid uk phone number\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\n}, \"Please specify a valid phone number\" );\n\n/**\n * Matches US phone number format\n *\n * where the area code may not start with 1 and the prefix may not start with 1\n * allows '-' or ' ' as a separator and allows parens around area code\n * some people may want to put a '1' in front of their number\n *\n * 1(212)-999-2345 or\n * 212 999 2344 or\n * 212-999-0983\n *\n * but not\n * 111-123-5434\n * and not\n * 212 123 4567\n */\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]([02-9]\\d|1[02-9])-?\\d{4}$/ );\n}, \"Please specify a valid phone number\" );\n\n/*\n* Valida CEPs do brasileiros:\n*\n* Formatos aceitos:\n* 99999-999\n* 99.999-999\n* 99999999\n*/\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\n}, \"Informe um CEP válido.\" );\n\n/**\n * Matches a valid Canadian Postal Code\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\n * @result true\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\n * @result false\n *\n * @name jQuery.validator.methods.postalCodeCA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\n}, \"Please specify a valid postal code\" );\n\n/* Matches Italian postcode (CAP) */\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\n}, \"Please specify a valid postal code\" );\n\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\n}, \"Please specify a valid UK postcode\" );\n\n/*\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\n *\n * The end result is that neither of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\n *\t...will validate unless at least one of them is filled.\n *\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\n * description: {require_from_group: [1,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n */\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\n\t\tisValid = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\n\n\t// If element isn't being validated, run each require_from_group field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\n\n/*\n * Lets you say \"either at least X inputs that match selector Y must be filled,\n * OR they must all be skipped (left blank).\"\n *\n * The end result, is that none of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\t<input class=\"productinfo\" name=\"color\">\n *\n *\t...will validate unless either at least two of them are filled,\n *\tOR none of them are.\n *\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n *\n */\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\n\t\tnumberFilled = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length,\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_skip\", validator );\n\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\n\n/* Validates US States and/or Territories by @jdforsythe\n * Can be case insensitive or require capitalization - default is case insensitive\n * Can include US Territories or not - default does not\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\n *\n * Note: \"States\" always includes DC (District of Colombia)\n *\n * Usage examples:\n *\n *  This is the default - case insensitive, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false,\n *     includeTerritories: false,\n *     includeMilitary: false\n *  }\n *\n *  Only allow capital letters, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false\n *  }\n *\n *  Case insensitive, include territories but not military zones\n *  stateInput: {\n *     includeTerritories: true\n *  }\n *\n *  Only allow capital letters, include territories and military zones\n *  stateInput: {\n *     caseSensitive: true,\n *     includeTerritories: true,\n *     includeMilitary: true\n *  }\n *\n */\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\n\tvar isDefault = typeof options === \"undefined\",\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\n\t\tregex;\n\n\tif ( !includeTerritories && !includeMilitary ) {\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t} else if ( includeTerritories && includeMilitary ) {\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else if ( includeTerritories ) {\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else {\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t}\n\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\n\treturn this.optional( element ) || regex.test( value );\n}, \"Please specify a valid state\" );\n\n// TODO check if value starts with <, otherwise don't try stripping anything\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\n\treturn $( value ).text().length >= param;\n}, $.validator.format( \"Please enter at least {0} characters\" ) );\n\n$.validator.addMethod( \"time\", function( value, element ) {\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\n}, \"Please enter a valid time, between 00:00 and 23:59\" );\n\n$.validator.addMethod( \"time12h\", function( value, element ) {\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\n}, \"Please enter a valid time in 12-hour am/pm format\" );\n\n// Same as url, but TLD is optional\n$.validator.addMethod( \"url2\", function( value, element ) {\n\treturn this.optional( element ) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test( value );\n}, $.validator.messages.url );\n\n/**\n * Return true, if the value is a valid vehicle identification number (VIN).\n *\n * Works with all kind of text inputs.\n *\n * @example <input type=\"text\" size=\"20\" name=\"VehicleID\" class=\"{required:true,vinUS:true}\" />\n * @desc Declares a required input element whose value must be a valid vehicle identification number.\n *\n * @name $.validator.methods.vinUS\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"vinUS\", function( v ) {\n\tif ( v.length !== 17 ) {\n\t\treturn false;\n\t}\n\n\tvar LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\n\t\tVL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\n\t\tFL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\n\t\trs = 0,\n\t\ti, n, d, f, cd, cdv;\n\n\tfor ( i = 0; i < 17; i++ ) {\n\t\tf = FL[ i ];\n\t\td = v.slice( i, i + 1 );\n\t\tif ( i === 8 ) {\n\t\t\tcdv = d;\n\t\t}\n\t\tif ( !isNaN( d ) ) {\n\t\t\td *= f;\n\t\t} else {\n\t\t\tfor ( n = 0; n < LL.length; n++ ) {\n\t\t\t\tif ( d.toUpperCase() === LL[ n ] ) {\n\t\t\t\t\td = VL[ n ];\n\t\t\t\t\td *= f;\n\t\t\t\t\tif ( isNaN( cdv ) && n === 8 ) {\n\t\t\t\t\t\tcdv = LL[ n ];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trs += d;\n\t}\n\tcd = rs % 11;\n\tif ( cd === 10 ) {\n\t\tcd = \"X\";\n\t}\n\tif ( cd === cdv ) {\n\t\treturn true;\n\t}\n\treturn false;\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\n\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\n}, \"The specified US ZIP Code is invalid\" );\n\n$.validator.addMethod( \"ziprange\", function( value, element ) {\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx\" );\nreturn $;\n}));"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery-validation/dist/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.17.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2017 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t//   - A user defined a `submitHandler`\n\t\t\t\t\t//   - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t//     was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !$.trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!$.trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift       => 16\n\t\t\t// Ctrl        => 17\n\t\t\t// Alt         => 18\n\t\t\t// Caps lock   => 20\n\t\t\t// End         => 35\n\t\t\t// Home        => 36\n\t\t\t// Left arrow  => 37\n\t\t\t// Up arrow    => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow  => 40\n\t\t\t// Insert      => 45\n\t\t\t// Num lock    => 144\n\t\t\t// AltGr key   => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.focus()\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( this.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( element.hasAttribute( \"contenteditable\" ) ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\tif ( typeof val !== \"string\" ) {\n\t\t\t\t\tthrow new TypeError( \"The normalizer should return a string value.\" );\n\t\t\t\t}\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \".  Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t//     method: \"method name\",\n\t\t//     parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$( this.currentForm ).submit();\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\n}));"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt",
    "content": "Copyright (c) .NET Foundation. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthese files except in compliance with the License. You may obtain a copy of the\nLicense at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js",
    "content": "// Unobtrusive validation support library for jQuery and jQuery Validate\n// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// @version v3.2.11\n\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\n/*global document: false, jQuery: false */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // CommonJS-like environments that support module.exports     \n        module.exports = factory(require('jquery-validation'));\n    } else {\n        // Browser global\n        jQuery.validator.unobtrusive = factory(jQuery);\n    }\n}(function ($) {\n    var $jQval = $.validator,\n        adapters,\n        data_validation = \"unobtrusiveValidation\";\n\n    function setValidationValues(options, ruleName, value) {\n        options.rules[ruleName] = value;\n        if (options.message) {\n            options.messages[ruleName] = options.message;\n        }\n    }\n\n    function splitAndTrim(value) {\n        return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\n    }\n\n    function escapeAttributeValue(value) {\n        // As mentioned on http://api.jquery.com/category/selectors/\n        return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n    }\n\n    function getModelPrefix(fieldName) {\n        return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\n    }\n\n    function appendModelPrefix(value, prefix) {\n        if (value.indexOf(\"*.\") === 0) {\n            value = value.replace(\"*.\", prefix);\n        }\n        return value;\n    }\n\n    function onError(error, inputElement) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\n            replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n            replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\n\n        container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\n        error.data(\"unobtrusiveContainer\", container);\n\n        if (replace) {\n            container.empty();\n            error.removeClass(\"input-validation-error\").appendTo(container);\n        }\n        else {\n            error.hide();\n        }\n    }\n\n    function onErrors(event, validator) {  // 'this' is the form element\n        var container = $(this).find(\"[data-valmsg-summary=true]\"),\n            list = container.find(\"ul\");\n\n        if (list && list.length && validator.errorList.length) {\n            list.empty();\n            container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\n\n            $.each(validator.errorList, function () {\n                $(\"<li />\").html(this.message).appendTo(list);\n            });\n        }\n    }\n\n    function onSuccess(error) {  // 'this' is the form element\n        var container = error.data(\"unobtrusiveContainer\");\n\n        if (container) {\n            var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\n                replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\n\n            container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\n            error.removeData(\"unobtrusiveContainer\");\n\n            if (replace) {\n                container.empty();\n            }\n        }\n    }\n\n    function onReset(event) {  // 'this' is the form element\n        var $form = $(this),\n            key = '__jquery_unobtrusive_validation_form_reset';\n        if ($form.data(key)) {\n            return;\n        }\n        // Set a flag that indicates we're currently resetting the form.\n        $form.data(key, true);\n        try {\n            $form.data(\"validator\").resetForm();\n        } finally {\n            $form.removeData(key);\n        }\n\n        $form.find(\".validation-summary-errors\")\n            .addClass(\"validation-summary-valid\")\n            .removeClass(\"validation-summary-errors\");\n        $form.find(\".field-validation-error\")\n            .addClass(\"field-validation-valid\")\n            .removeClass(\"field-validation-error\")\n            .removeData(\"unobtrusiveContainer\")\n            .find(\">*\")  // If we were using valmsg-replace, get the underlying error\n            .removeData(\"unobtrusiveContainer\");\n    }\n\n    function validationInfo(form) {\n        var $form = $(form),\n            result = $form.data(data_validation),\n            onResetProxy = $.proxy(onReset, form),\n            defaultOptions = $jQval.unobtrusive.options || {},\n            execInContext = function (name, args) {\n                var func = defaultOptions[name];\n                func && $.isFunction(func) && func.apply(form, args);\n            };\n\n        if (!result) {\n            result = {\n                options: {  // options structure passed to jQuery Validate's validate() method\n                    errorClass: defaultOptions.errorClass || \"input-validation-error\",\n                    errorElement: defaultOptions.errorElement || \"span\",\n                    errorPlacement: function () {\n                        onError.apply(form, arguments);\n                        execInContext(\"errorPlacement\", arguments);\n                    },\n                    invalidHandler: function () {\n                        onErrors.apply(form, arguments);\n                        execInContext(\"invalidHandler\", arguments);\n                    },\n                    messages: {},\n                    rules: {},\n                    success: function () {\n                        onSuccess.apply(form, arguments);\n                        execInContext(\"success\", arguments);\n                    }\n                },\n                attachValidation: function () {\n                    $form\n                        .off(\"reset.\" + data_validation, onResetProxy)\n                        .on(\"reset.\" + data_validation, onResetProxy)\n                        .validate(this.options);\n                },\n                validate: function () {  // a validation function that is called by unobtrusive Ajax\n                    $form.validate();\n                    return $form.valid();\n                }\n            };\n            $form.data(data_validation, result);\n        }\n\n        return result;\n    }\n\n    $jQval.unobtrusive = {\n        adapters: [],\n\n        parseElement: function (element, skipAttach) {\n            /// <summary>\n            /// Parses a single HTML element for unobtrusive validation attributes.\n            /// </summary>\n            /// <param name=\"element\" domElement=\"true\">The HTML element to be parsed.</param>\n            /// <param name=\"skipAttach\" type=\"Boolean\">[Optional] true to skip attaching the\n            /// validation to the form. If parsing just this single element, you should specify true.\n            /// If parsing several elements, you should specify false, and manually attach the validation\n            /// to the form when you are finished. The default is false.</param>\n            var $element = $(element),\n                form = $element.parents(\"form\")[0],\n                valInfo, rules, messages;\n\n            if (!form) {  // Cannot do client-side validation without a form\n                return;\n            }\n\n            valInfo = validationInfo(form);\n            valInfo.options.rules[element.name] = rules = {};\n            valInfo.options.messages[element.name] = messages = {};\n\n            $.each(this.adapters, function () {\n                var prefix = \"data-val-\" + this.name,\n                    message = $element.attr(prefix),\n                    paramValues = {};\n\n                if (message !== undefined) {  // Compare against undefined, because an empty message is legal (and falsy)\n                    prefix += \"-\";\n\n                    $.each(this.params, function () {\n                        paramValues[this] = $element.attr(prefix + this);\n                    });\n\n                    this.adapt({\n                        element: element,\n                        form: form,\n                        message: message,\n                        params: paramValues,\n                        rules: rules,\n                        messages: messages\n                    });\n                }\n            });\n\n            $.extend(rules, { \"__dummy__\": true });\n\n            if (!skipAttach) {\n                valInfo.attachValidation();\n            }\n        },\n\n        parse: function (selector) {\n            /// <summary>\n            /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\n            /// with the [data-val=true] attribute value and enables validation according to the data-val-*\n            /// attribute values.\n            /// </summary>\n            /// <param name=\"selector\" type=\"String\">Any valid jQuery selector.</param>\n\n            // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\n            // element with data-val=true\n            var $selector = $(selector),\n                $forms = $selector.parents()\n                    .addBack()\n                    .filter(\"form\")\n                    .add($selector.find(\"form\"))\n                    .has(\"[data-val=true]\");\n\n            $selector.find(\"[data-val=true]\").each(function () {\n                $jQval.unobtrusive.parseElement(this, true);\n            });\n\n            $forms.each(function () {\n                var info = validationInfo(this);\n                if (info) {\n                    info.attachValidation();\n                }\n            });\n        }\n    };\n\n    adapters = $jQval.unobtrusive.adapters;\n\n    adapters.add = function (adapterName, params, fn) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"params\" type=\"Array\" optional=\"true\">[Optional] An array of parameter names (strings) that will\n        /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\n        /// mmmm is the parameter name).</param>\n        /// <param name=\"fn\" type=\"Function\">The function to call, which adapts the values from the HTML\n        /// attributes into jQuery Validate rules and/or messages.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        if (!fn) {  // Called with no params, just a function\n            fn = params;\n            params = [];\n        }\n        this.push({ name: adapterName, params: params, adapt: fn });\n        return this;\n    };\n\n    adapters.addBool = function (adapterName, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has no parameter values.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, function (options) {\n            setValidationValues(options, ruleName || adapterName, true);\n        });\n    };\n\n    adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\n        /// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>\n        /// <param name=\"minRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a minimum value.</param>\n        /// <param name=\"maxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you only\n        /// have a maximum value.</param>\n        /// <param name=\"minMaxRuleName\" type=\"String\">The name of the jQuery Validate rule to be used when you\n        /// have both a minimum and maximum value.</param>\n        /// <param name=\"minAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the minimum value. The default is \"min\".</param>\n        /// <param name=\"maxAttribute\" type=\"String\" optional=\"true\">[Optional] The name of the HTML attribute that\n        /// contains the maximum value. The default is \"max\".</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\n            var min = options.params.min,\n                max = options.params.max;\n\n            if (min && max) {\n                setValidationValues(options, minMaxRuleName, [min, max]);\n            }\n            else if (min) {\n                setValidationValues(options, minRuleName, min);\n            }\n            else if (max) {\n                setValidationValues(options, maxRuleName, max);\n            }\n        });\n    };\n\n    adapters.addSingleVal = function (adapterName, attribute, ruleName) {\n        /// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\n        /// the jQuery Validate validation rule has a single value.</summary>\n        /// <param name=\"adapterName\" type=\"String\">The name of the adapter to be added. This matches the name used\n        /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>\n        /// <param name=\"attribute\" type=\"String\">[Optional] The name of the HTML attribute that contains the value.\n        /// The default is \"val\".</param>\n        /// <param name=\"ruleName\" type=\"String\" optional=\"true\">[Optional] The name of the jQuery Validate rule. If not provided, the value\n        /// of adapterName will be used instead.</param>\n        /// <returns type=\"jQuery.validator.unobtrusive.adapters\" />\n        return this.add(adapterName, [attribute || \"val\"], function (options) {\n            setValidationValues(options, ruleName || adapterName, options.params[attribute]);\n        });\n    };\n\n    $jQval.addMethod(\"__dummy__\", function (value, element, params) {\n        return true;\n    });\n\n    $jQval.addMethod(\"regex\", function (value, element, params) {\n        var match;\n        if (this.optional(element)) {\n            return true;\n        }\n\n        match = new RegExp(params).exec(value);\n        return (match && (match.index === 0) && (match[0].length === value.length));\n    });\n\n    $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\n        var match;\n        if (nonalphamin) {\n            match = value.match(/\\W/g);\n            match = match && match.length >= nonalphamin;\n        }\n        return match;\n    });\n\n    if ($jQval.methods.extension) {\n        adapters.addSingleVal(\"accept\", \"mimtype\");\n        adapters.addSingleVal(\"extension\", \"extension\");\n    } else {\n        // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\n        // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\n        // validating the extension, and ignore mime-type validations as they are not supported.\n        adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\n    }\n\n    adapters.addSingleVal(\"regex\", \"pattern\");\n    adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\n    adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\n    adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\n    adapters.add(\"equalto\", [\"other\"], function (options) {\n        var prefix = getModelPrefix(options.element.name),\n            other = options.params.other,\n            fullOtherName = appendModelPrefix(other, prefix),\n            element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\n\n        setValidationValues(options, \"equalTo\", element);\n    });\n    adapters.add(\"required\", function (options) {\n        // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\n        if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\n            setValidationValues(options, \"required\", true);\n        }\n    });\n    adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\n        var value = {\n            url: options.params.url,\n            type: options.params.type || \"GET\",\n            data: {}\n        },\n            prefix = getModelPrefix(options.element.name);\n\n        $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\n            var paramName = appendModelPrefix(fieldName, prefix);\n            value.data[paramName] = function () {\n                var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\n                // For checkboxes and radio buttons, only pick up values from checked fields.\n                if (field.is(\":checkbox\")) {\n                    return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\n                }\n                else if (field.is(\":radio\")) {\n                    return field.filter(\":checked\").val() || '';\n                }\n                return field.val();\n            };\n        });\n\n        setValidationValues(options, \"remote\", value);\n    });\n    adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\n        if (options.params.min) {\n            setValidationValues(options, \"minlength\", options.params.min);\n        }\n        if (options.params.nonalphamin) {\n            setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\n        }\n        if (options.params.regex) {\n            setValidationValues(options, \"regex\", options.params.regex);\n        }\n    });\n    adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\n        setValidationValues(options, \"extension\", options.params.extensions);\n    });\n\n    $(function () {\n        $jQval.unobtrusive.parse(document);\n    });\n\n    return $jQval.unobtrusive;\n}));\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/LinqToTwitter.MVC.CSharp/LinqToTwitter.MVC.CSharp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30626.31\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.MVC.CSharp\", \"LinqToTwitter.MVC.CSharp\\LinqToTwitter.MVC.CSharp.csproj\", \"{50DF4044-8C99-4774-A7C0-4CDA146FE48A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{50DF4044-8C99-4774-A7C0-4CDA146FE48A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{50DF4044-8C99-4774-A7C0-4CDA146FE48A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{50DF4044-8C99-4774-A7C0-4CDA146FE48A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{50DF4044-8C99-4774-A7C0-4CDA146FE48A}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {24CF61EC-CB64-4196-975D-14398FE329F6}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter6/ASP.NET/ReadMe.txt",
    "content": "ASP.NET Samples"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/App.razor",
    "content": "<Router AppAssembly=\"@typeof(Program).Assembly\" PreferExactMatches=\"@true\">\n    <Found Context=\"routeData\">\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\n    </Found>\n    <NotFound>\n        <LayoutView Layout=\"@typeof(MainLayout)\">\n            <p>Sorry, there's nothing at this address.</p>\n        </LayoutView>\n    </NotFound>\n</Router>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/BlazorDemo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Blazored.SessionStorage\" Version=\"1.0.12\" />\n    <PackageReference Include=\"LinqToTwitter.AspNet\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Classes/Extensions.cs",
    "content": "﻿using Microsoft.AspNetCore.Components;\nusing Microsoft.AspNetCore.WebUtilities;\n\nnamespace BlazorDemo.Classes\n{\n    // From: Working with Query Strings in Blazor\n    // https://chrissainty.com/working-with-query-strings-in-blazor/\n    public static class NavigationManagerExtensions\n    {\n        public static bool TryGetQueryString<T>(this NavigationManager navManager, string key, out T value)\n        {\n            var uri = navManager.ToAbsoluteUri(navManager.Uri);\n\n            if (QueryHelpers.ParseQuery(uri.Query).TryGetValue(key, out var valueFromQueryString))\n            {\n                if (typeof(T) == typeof(int) && int.TryParse(valueFromQueryString, out var valueAsInt))\n                {\n                    value = (T)(object)valueAsInt;\n                    return true;\n                }\n\n                if (typeof(T) == typeof(string))\n                {\n                    value = (T)(object)valueFromQueryString.ToString();\n                    return true;\n                }\n\n                if (typeof(T) == typeof(decimal) && decimal.TryParse(valueFromQueryString, out var valueAsDecimal))\n                {\n                    value = (T)(object)valueAsDecimal;\n                    return true;\n                }\n            }\n\n            value = default;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Data/WeatherForecast.cs",
    "content": "using System;\n\nnamespace BlazorDemo.Data\n{\n    public class WeatherForecast\n    {\n        public DateTime Date { get; set; }\n\n        public int TemperatureC { get; set; }\n\n        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\n\n        public string Summary { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Data/WeatherForecastService.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace BlazorDemo.Data\n{\n    public class WeatherForecastService\n    {\n        private static readonly string[] Summaries = new[]\n        {\n            \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\n        };\n\n        public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate)\n        {\n            var rng = new Random();\n            return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast\n            {\n                Date = startDate.AddDays(index),\n                TemperatureC = rng.Next(-20, 55),\n                Summary = Summaries[rng.Next(Summaries.Length)]\n            }).ToArray());\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Models/SendTweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BlazorDemo.Models\n{\n    public class SendTweetViewModel\n    {\n        [DisplayName(\"Tweet Text:\")]\n        [Required]\n        [DataType(DataType.MultilineText)]\n        public string Text { get; set; }\n\n\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Models/TweetViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace BlazorDemo.Models\n{\n    public class TweetViewModel\n    {\n        [DisplayName(\"Image\")]\n        [DataType(DataType.ImageUrl)]\n        public string ImageUrl { get; set; }\n\n        [DisplayName(\"Screen Name\")]\n        public string ScreenName { get; set; }\n\n        [DisplayName(\"Tweet\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Pages/Error.cshtml",
    "content": "﻿@page\n@model BlazorDemo.Pages.ErrorModel\n\n<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <title>Error</title>\n    <link href=\"~/css/bootstrap/bootstrap.min.css\" rel=\"stylesheet\" />\n    <link href=\"~/css/app.css\" rel=\"stylesheet\" />\n</head>\n\n<body>\n    <div class=\"main\">\n        <div class=\"content px-4\">\n            <h1 class=\"text-danger\">Error.</h1>\n            <h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n            @if (Model.ShowRequestId)\n            {\n                <p>\n                    <strong>Request ID:</strong> <code>@Model.RequestId</code>\n                </p>\n            }\n\n            <h3>Development Mode</h3>\n            <p>\n                Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\n            </p>\n            <p>\n                <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\n                It can result in displaying sensitive information from exceptions to end users.\n                For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\n                and restarting the app.\n            </p>\n        </div>\n    </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Pages/Error.cshtml.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.RazorPages;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace BlazorDemo.Pages\n{\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\n    [IgnoreAntiforgeryToken]\n    public class ErrorModel : PageModel\n    {\n        public string RequestId { get; set; }\n\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\n\n        private readonly ILogger<ErrorModel> _logger;\n\n        public ErrorModel(ILogger<ErrorModel> logger)\n        {\n            _logger = logger;\n        }\n\n        public void OnGet()\n        {\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Pages/Index.razor",
    "content": "﻿@page \"/\"\n@implements IDisposable\n@using LinqToTwitter\n@using LinqToTwitter.Common\n@using BlazorDemo.Models\n@using System.Text.RegularExpressions\n@inject BlazorDemo.Services.BlazorAuthorizer BlazorAuthorizer\n\n<TwitterApplicationAuth />\n\n@if (BlazorAuthorizer.CredentialStore != null)\n{\n    <h4>Tweets for @BlazorAuthorizer.CredentialStore.ScreenName</h4>\n\n    <button class=\"btn btn-primary\" @onclick=\"GetTweets\">Get Tweets</button>\n    <button class=\"btn btn-primary\" @onclick=\"OpenPopup\">Send Tweet</button>\n    <br />\n    <br />\n    @foreach (var tweet in tweets)\n    {\n        <dl>\n            <dt><img src=\"@tweet.ImageUrl\" /> @@<a href=@(\"https://twitter.com/\"+@tweet.ScreenName) target=\"_blank\">@tweet.ScreenName</a></dt>\n            <dd>@((MarkupString)tweet.Text)</dd>\n        </dl>\n    }\n\n    @if (ShowPopup)\n    {\n        <div class=\"modal\" tabindex=\"-1\" style=\"display:block\" role=\"dialog\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h3 class=\"modal-title\">Send Tweet</h3>\n                        <!-- Button to close the popup -->\n                        <button type=\"button\" class=\"close\"\n                                @onclick=\"ClosePopup\">\n                            <span aria-hidden=\"true\">X</span>\n                        </button>\n                    </div>\n                    <div class=\"modal-body\">\n                        <input class=\"form-control\" type=\"text\"\n                               placeholder=\"Compose a Tweet...\"\n                               @bind=\"NewTweet\" />\n                        <br /><br />\n                        <button class=\"btn btn-primary\"\n                                @onclick=\"SendTweet\">\n                            Save\n                        </button>\n                        <br />\n                    </div>\n                </div>\n            </div>\n        </div>\n    }\n}\n\n@code {\n    public List<TweetViewModel> tweets = new List<TweetViewModel>();\n    bool ShowPopup = false;\n    string NewTweet = \"\";\n\n    protected override void OnInitialized()\n    {\n        // Subscribe to the StateChanged EventHandler\n        BlazorAuthorizer.StateChanged += OnBlazorAuthorizerStateChanged;\n    }\n\n    // This method is fired when the BlazorAuthorizer object\n    // invokes its StateHasChanged() method\n    // This will cause this control to invoke its own\n    // StateHasChanged() method\n    void OnBlazorAuthorizerStateChanged(object sender, EventArgs e)\n    {\n        StateHasChanged();\n    }\n\n    void IDisposable.Dispose()\n    {\n        // When this control is disposed of\n        // unsubscribe from the StateChanged EventHandler\n        BlazorAuthorizer.StateChanged -= OnBlazorAuthorizerStateChanged;\n    }\n\n    void OpenPopup()\n    {\n        NewTweet = \"\";\n        // Open the Popup\n        ShowPopup = true;\n    }\n\n    void ClosePopup()\n    {\n        // Close the Popup\n        ShowPopup = false;\n    }\n\n    async Task GetTweets()\n    {\n        var ctx = new TwitterContext(BlazorAuthorizer);\n\n        tweets = await (from tweet in ctx.Status\n                        where tweet.Type == StatusType.Home &&\n                              tweet.TweetMode == TweetMode.Extended\n                        select new TweetViewModel\n                        {\n                            ImageUrl = tweet.User.ProfileImageUrl,\n                            ScreenName = tweet.User.ScreenNameResponse,\n                            Text = CreateActiveLinks(tweet.FullText)\n                        }).ToListAsync();\n    }\n\n    async Task SendTweet()\n    {\n        var ctx = new TwitterContext(BlazorAuthorizer);\n\n        Status responseTweet = await ctx.TweetAsync(NewTweet);\n\n        await GetTweets();\n\n        ClosePopup();\n    }\n\n    // Utility\n\n    /// <summary>\n    /// From: https://www.mikesdotnetting.com/article/140/converting-urls-into-links-with-regex\n    /// Finds web and email addresses in a string and surrounds then with the appropriate HTML anchor tags\n    /// </summary>\n    /// <param name=\"s\"></param>\n    /// <returns>String</returns>\n    public string CreateActiveLinks(string s)\n    {\n        //Finds URLs with no protocol\n        var urlregex = new Regex(@\"\\b\\({0,1}(?<url>(www|ftp)\\.[^ ,\"\"\\s<)]*)\\b\",\n          RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        //Finds URLs with a protocol\n        var httpurlregex = new Regex(@\"\\b\\({0,1}(?<url>[^>](http://www\\.|http://|https://|ftp://)[^,\"\"\\s<)]*)\\b\",\n          RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        //Finds email addresses\n        var emailregex = new Regex(@\"\\b(?<mail>[a-zA-Z_0-9.-]+\\@[a-zA-Z_0-9.-]+\\.\\w+)\\b\",\n          RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        s = urlregex.Replace(s, \" <a href=\\\"http://${url}\\\" target=\\\"_blank\\\">${url}</a>\");\n        s = httpurlregex.Replace(s, \" <a href=\\\"${url}\\\" target=\\\"_blank\\\">${url}</a>\");\n        s = emailregex.Replace(s, \"<a href=\\\"mailto:${mail}\\\">${mail}</a>\");\n        return s;\n    }\n}"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Pages/TwitterApplicationAuth.razor",
    "content": "﻿@using System.Net.Http\n@using Microsoft.AspNetCore.Mvc\n@using BlazorDemo.Classes\n@using LinqToTwitter.OAuth\n@inject HttpClient Http\n@inject NavigationManager NavigationManager\n@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor\n@inject BlazorDemo.Services.BlazorAuthorizer BlazorAuthorizer\n@inject Blazored.SessionStorage.ISessionStorageService sessionStorage\n\n@if (Authenticated == \"false\")\n{\n    <button class=\"btn btn-primary\" @onclick=\"CallAuth\">Begin the Authorization Process</button>\n}\n\n@code {\n    string Authenticated = \"none\";\n\n    protected override async Task OnAfterRenderAsync(bool firstRender)\n    {\n        if (firstRender)\n        {\n            // Try to get the CredentialStore that would have been stored when the CallAuth() method was called\n            var CredentialStore = await sessionStorage.GetItemAsync<InMemoryCredentialStore>(\"CredentialStore\");\n\n            if (CredentialStore == null)\n            {\n                Authenticated = \"false\";\n                StateHasChanged();\n                return;\n            }\n\n            // Check to see if we have received the oauth_token and oauth_verifier\n            // from Twitter\n\n            string oauth_token = \"\";\n            NavigationManager.TryGetQueryString<string>(\"oauth_token\", out oauth_token);\n\n            string oauth_verifier = \"\";\n            NavigationManager.TryGetQueryString<string>(\"oauth_verifier\", out oauth_verifier);\n\n            if (oauth_token != null)\n            {\n                // Set CredentialStore because the contents were lost when the user was directed\n                // to Twitter to authorize this application\n                BlazorAuthorizer.CredentialStore = CredentialStore;\n\n                var responseUrl =\n                    $@\"{BlazorAuthorizer.GetPathBase()}?oauth_token={oauth_token}&oauth_verifier={oauth_verifier}\";\n\n                await BlazorAuthorizer.CompleteAuthorizeAsync(new Uri(responseUrl));\n\n                // Call StateHasChanged on BlazorAuthorizer to\n                // notify any other subscribed components\n                BlazorAuthorizer.StateHasChanged();\n\n                // This is how you access credentials after authorization.\n                // The oauthToken and oauthTokenSecret do not expire.\n                // You can use the userID to associate the credentials with the user.\n                // You can save credentials any way you want - database,\n                //   isolated storage, etc. - it's up to you.\n                // You can retrieve and load all 4 credentials on subsequent\n                //   queries to avoid the need to re-authorize.\n                // When you've loaded all 4 credentials, LINQ to Twitter will let\n                //   you make queries without re-authorizing.\n                //\n                //var credentials = BlazorAuthorizer.CredentialStore;\n                //string oauthToken = credentials.OAuthToken;\n                //string oauthTokenSecret = credentials.OAuthTokenSecret;\n                //string screenName = credentials.ScreenName;\n                //ulong userID = credentials.UserID;\n\n                // Save the updated CredentialStore\n                // await sessionStorage.SetItemAsync(\"CredentialStore\", BlazorAuthorizer.CredentialStore);\n\n                Authenticated = \"true\";\n\n                // Navigate to the main page so that the auth code in the url will go away\n                NavigationManager.NavigateTo(\"/\");\n            }\n        }\n    }\n\n    async Task CallAuth()\n    {\n        // Begin Twitter Authorization\n        RedirectResult result = (RedirectResult)await BlazorAuthorizer.Begin();\n\n        // Save CredentialStore\n        // CredentialStore was populated by calling BlazorAuthorizer.Begin()\n        await sessionStorage.SetItemAsync(\"CredentialStore\", BlazorAuthorizer.CredentialStore);\n\n        // Navigate to Twitter to authorize this application\n        NavigationManager.NavigateTo(result.Url, true);\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Pages/_Host.cshtml",
    "content": "﻿@page \"/\"\n@namespace BlazorDemo.Pages\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n@{\n    Layout = null;\n}\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Blazor Demo</title>\n    <base href=\"~/\" />\n    <link rel=\"stylesheet\" href=\"css/bootstrap/bootstrap.min.css\" />\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\n    <link href=\"BlazorDemo.styles.css\" rel=\"stylesheet\" />\n</head>\n<body>\n    <component type=\"typeof(App)\" render-mode=\"ServerPrerendered\" />\n\n    <div id=\"blazor-error-ui\">\n        <environment include=\"Staging,Production\">\n            An error has occurred. This application may no longer respond until reloaded.\n        </environment>\n        <environment include=\"Development\">\n            An unhandled exception has occurred. See browser dev tools for details.\n        </environment>\n        <a href=\"\" class=\"reload\">Reload</a>\n        <a class=\"dismiss\">🗙</a>\n    </div>\n\n    <script src=\"_framework/blazor.server.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace BlazorDemo\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateHostBuilder(args).Build().Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:54045\",\n      \"sslPort\": 44356\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\"\n    },\n    \"BlazorDemo\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": \"true\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}\"\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Services/BlazorAuthorizer.cs",
    "content": "﻿using LinqToTwitter;\nusing LinqToTwitter.OAuth;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace BlazorDemo.Services\n{\n    public class BlazorAuthorizer : AspNetAuthorizer\n    {\n        public HttpClient httpClient;\n        HttpContextAccessor httpContextAccessor;\n        string authUrl;\n\n        public BlazorAuthorizer(\n            HttpClient httpClient,\n            HttpContextAccessor httpContextAccessor)\n        {\n            this.httpClient = httpClient;\n            this.httpContextAccessor = httpContextAccessor;\n        }\n\n        // StateChanged is an event handler other pages\n        // can subscribe to \n        public event EventHandler StateChanged;\n        public void StateHasChanged()\n        {\n            // This will update any subscribers\n            // that the state has changed\n            // so they can update themselves\n            StateChanged?.Invoke(this, EventArgs.Empty);\n        }\n\n        public string GetPathBase()\n        {\n            var request = httpContextAccessor.HttpContext.Request;\n            var host = request.Host.ToUriComponent();\n            var pathBase = request.PathBase.ToUriComponent();\n            return $@\"{request.Scheme}://{host}{pathBase}/\";\n        }\n\n        public async Task<ActionResult> Begin()\n        {\n            this.CredentialStore = new InMemoryCredentialStore();\n            this.CredentialStore.ConsumerKey = Environment.GetEnvironmentVariable(\"TwitterConsumerKey\");\n            this.CredentialStore.ConsumerSecret = Environment.GetEnvironmentVariable(\"TwitterConsumerSecret\");\n\n            // to pass parameters that you can read in Complete(), via Request.QueryString, when Twitter returns\n            // var parameters = new Dictionary<string, string> { { \"my_custom_param\", \"val\" } };\n            // return await BeginAuthorizationAsync(new Uri(GetPathBase()), parameters);\n\n            return (RedirectResult)await BeginAuthorizationAsync(new Uri(GetPathBase()));\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(\n            Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { this.authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback, parameters).ConfigureAwait(false);\n\n            return new RedirectResult(authUrl, false);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Shared/MainLayout.razor",
    "content": "﻿@inherits LayoutComponentBase\n\n<div class=\"page\">\n    <div class=\"sidebar\">\n        <NavMenu />\n    </div>\n\n    <div class=\"main\">\n        <div class=\"top-row px-4\">\n            <a href=\"https://docs.microsoft.com/aspnet/\" target=\"_blank\">About</a>\n        </div>\n\n        <div class=\"content px-4\">\n            @Body\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Shared/MainLayout.razor.css",
    "content": ".page {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\n.main {\n    flex: 1;\n}\n\n.sidebar {\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\n}\n\n.top-row {\n    background-color: #f7f7f7;\n    border-bottom: 1px solid #d6d5d5;\n    justify-content: flex-end;\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n}\n\n    .top-row ::deep a, .top-row .btn-link {\n        white-space: nowrap;\n        margin-left: 1.5rem;\n    }\n\n    .top-row a:first-child {\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n@media (max-width: 640.98px) {\n    .top-row:not(.auth) {\n        display: none;\n    }\n\n    .top-row.auth {\n        justify-content: space-between;\n    }\n\n    .top-row a, .top-row .btn-link {\n        margin-left: 0;\n    }\n}\n\n@media (min-width: 641px) {\n    .page {\n        flex-direction: row;\n    }\n\n    .sidebar {\n        width: 250px;\n        height: 100vh;\n        position: sticky;\n        top: 0;\n    }\n\n    .top-row {\n        position: sticky;\n        top: 0;\n        z-index: 1;\n    }\n\n    .main > div {\n        padding-left: 2rem !important;\n        padding-right: 1.5rem !important;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Shared/NavMenu.razor",
    "content": "﻿<div class=\"top-row pl-4 navbar navbar-dark\">\n    <a class=\"navbar-brand\" href=\"\">BlazorDemo</a>\n    <button class=\"navbar-toggler\" @onclick=\"ToggleNavMenu\">\n        <span class=\"navbar-toggler-icon\"></span>\n    </button>\n</div>\n\n<div class=\"@NavMenuCssClass\" @onclick=\"ToggleNavMenu\">\n    <ul class=\"nav flex-column\">\n        <li class=\"nav-item px-3\">\n            <NavLink class=\"nav-link\" href=\"\" Match=\"NavLinkMatch.All\">\n                <span class=\"oi oi-home\" aria-hidden=\"true\"></span> Home\n            </NavLink>\n        </li>\n    </ul>\n</div>\n\n@code {\n    private bool collapseNavMenu = true;\n\n    private string NavMenuCssClass => collapseNavMenu ? \"collapse\" : null;\n\n    private void ToggleNavMenu()\n    {\n        collapseNavMenu = !collapseNavMenu;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Shared/NavMenu.razor.css",
    "content": ".navbar-toggler {\n    background-color: rgba(255, 255, 255, 0.1);\n}\n\n.top-row {\n    height: 3.5rem;\n    background-color: rgba(0,0,0,0.4);\n}\n\n.navbar-brand {\n    font-size: 1.1rem;\n}\n\n.oi {\n    width: 2rem;\n    font-size: 1.1rem;\n    vertical-align: text-top;\n    top: -2px;\n}\n\n.nav-item {\n    font-size: 0.9rem;\n    padding-bottom: 0.5rem;\n}\n\n    .nav-item:first-of-type {\n        padding-top: 1rem;\n    }\n\n    .nav-item:last-of-type {\n        padding-bottom: 1rem;\n    }\n\n    .nav-item ::deep a {\n        color: #d7d7d7;\n        border-radius: 4px;\n        height: 3rem;\n        display: flex;\n        align-items: center;\n        line-height: 3rem;\n    }\n\n.nav-item ::deep a.active {\n    background-color: rgba(255,255,255,0.25);\n    color: white;\n}\n\n.nav-item ::deep a:hover {\n    background-color: rgba(255,255,255,0.1);\n    color: white;\n}\n\n@media (min-width: 641px) {\n    .navbar-toggler {\n        display: none;\n    }\n\n    .collapse {\n        /* Never collapse the sidebar for wide screens */\n        display: block;\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Shared/SurveyPrompt.razor",
    "content": "﻿<div class=\"alert alert-secondary mt-4\" role=\"alert\">\n    <span class=\"oi oi-pencil mr-2\" aria-hidden=\"true\"></span>\n    <strong>@Title</strong>\n\n    <span class=\"text-nowrap\">\n        Please take our\n        <a target=\"_blank\" class=\"font-weight-bold\" href=\"https://go.microsoft.com/fwlink/?linkid=2137813\">brief survey</a>\n    </span>\n    and tell us what you think.\n</div>\n\n@code {\n    // Demonstrates how a parent component can supply parameters\n    [Parameter]\n    public string Title { get; set; }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/Startup.cs",
    "content": "using BlazorDemo.Data;\nusing BlazorDemo.Services;\nusing Blazored.SessionStorage;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Components;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.HttpsPolicy;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace BlazorDemo\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddRazorPages();\n            services.AddServerSideBlazor();\n\n            // Add HttpContextAccessor and HttpClient\n            services.AddHttpContextAccessor();\n            services.AddScoped<HttpContextAccessor>();\n            services.AddHttpClient();\n            services.AddScoped<HttpClient>();\n\n            // Add BlazorAuthorizer as a service\n            services.AddScoped<BlazorAuthorizer>();\n\n            // Add BlazoredSessionStorage\n            services.AddBlazoredSessionStorage(config =>\n            config.JsonSerializerOptions.WriteIndented = true);\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            else\n            {\n                app.UseExceptionHandler(\"/Error\");\n                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\n                app.UseHsts();\n            }\n\n            app.UseHttpsRedirection();\n            app.UseStaticFiles();\n\n            app.UseRouting();\n\n            app.UseEndpoints(endpoints =>\n            {\n                endpoints.MapBlazorHub();\n                endpoints.MapFallbackToPage(\"/_Host\");\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/_Imports.razor",
    "content": "﻿@using System.Net.Http\n@using Microsoft.AspNetCore.Authorization\n@using Microsoft.AspNetCore.Components.Authorization\n@using Microsoft.AspNetCore.Components.Forms\n@using Microsoft.AspNetCore.Components.Routing\n@using Microsoft.AspNetCore.Components.Web\n@using Microsoft.AspNetCore.Components.Web.Virtualization\n@using Microsoft.JSInterop\n@using BlazorDemo\n@using BlazorDemo.Shared\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/appsettings.Development.json",
    "content": "{\n  \"DetailedErrors\": true,\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/wwwroot/css/open-iconic/FONT-LICENSE",
    "content": "SIL OPEN FONT LICENSE Version 1.1\n\nCopyright (c) 2014 Waybury\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded,\nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/wwwroot/css/open-iconic/ICON-LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Waybury\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/wwwroot/css/open-iconic/README.md",
    "content": "[Open Iconic v1.1.1](http://useiconic.com/open)\n===========\n\n### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint&mdash;ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)\n\n\n\n## What's in Open Iconic?\n\n* 223 icons designed to be legible down to 8 pixels\n* Super-light SVG files - 61.8 for the entire set \n* SVG sprite&mdash;the modern replacement for icon fonts\n* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats\n* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats\n* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.\n\n\n## Getting Started\n\n#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.\n\n### General Usage\n\n#### Using Open Iconic's SVGs\n\nWe like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).\n\n```\n<img src=\"/open-iconic/svg/icon-name.svg\" alt=\"icon name\">\n```\n\n#### Using Open Iconic's SVG Sprite\n\nOpen Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.\n\nAdding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `<svg>` *tag and a unique class name for each different icon in the* `<use>` *tag.*  \n\n```\n<svg class=\"icon\">\n  <use xlink:href=\"open-iconic.svg#account-login\" class=\"icon-account-login\"></use>\n</svg>\n```\n\nSizing icons only needs basic CSS. All the icons are in a square format, so just set the `<svg>` tag with equal width and height dimensions.\n\n```\n.icon {\n  width: 16px;\n  height: 16px;\n}\n```\n\nColoring icons is even easier. All you need to do is set the `fill` rule on the `<use>` tag.\n\n```\n.icon-account-login {\n  fill: #f00;\n}\n```\n\nTo learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).\n\n#### Using Open Iconic's Icon Font...\n\n\n##### …with Bootstrap\n\nYou can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`\n\n\n```\n<link href=\"/open-iconic/font/css/open-iconic-bootstrap.css\" rel=\"stylesheet\">\n```\n\n\n```\n<span class=\"oi oi-icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\n```\n\n##### …with Foundation\n\nYou can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`\n\n```\n<link href=\"/open-iconic/font/css/open-iconic-foundation.css\" rel=\"stylesheet\">\n```\n\n\n```\n<span class=\"fi-icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\n```\n\n##### …on its own\n\nYou can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`\n\n```\n<link href=\"/open-iconic/font/css/open-iconic.css\" rel=\"stylesheet\">\n```\n\n```\n<span class=\"oi\" data-glyph=\"icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\n```\n\n\n## License\n\n### Icons\n\nAll code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).\n\n### Fonts\n\nAll fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo/wwwroot/css/site.css",
    "content": "@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');\n\nhtml, body {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n\na, .btn-link {\n    color: #0366d6;\n}\n\n.btn-primary {\n    color: #fff;\n    background-color: #1b6ec2;\n    border-color: #1861ac;\n}\n\n.content {\n    padding-top: 1.1rem;\n}\n\n.valid.modified:not([type=checkbox]) {\n    outline: 1px solid #26b050;\n}\n\n.invalid {\n    outline: 1px solid red;\n}\n\n.validation-message {\n    color: red;\n}\n\n#blazor-error-ui {\n    background: lightyellow;\n    bottom: 0;\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\n    display: none;\n    left: 0;\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\n    position: fixed;\n    width: 100%;\n    z-index: 1000;\n}\n\n    #blazor-error-ui .dismiss {\n        cursor: pointer;\n        position: absolute;\n        right: 0.75rem;\n        top: 0.5rem;\n    }\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/BlazorDemo/BlazorDemo.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30803.129\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BlazorDemo\", \"BlazorDemo\\BlazorDemo.csproj\", \"{2A546C40-D688-496B-B0A5-6AA3DD2EB36A}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{2A546C40-D688-496B-B0A5-6AA3DD2EB36A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2A546C40-D688-496B-B0A5-6AA3DD2EB36A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2A546C40-D688-496B-B0A5-6AA3DD2EB36A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2A546C40-D688-496B-B0A5-6AA3DD2EB36A}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {B99474AE-C104-4659-B665-FB5CE3C055A8}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Blazor/ReadMe.txt",
    "content": "This is a LinqToTwitter Blazor Server Demo.\n\nNote: This demo stores the Twitter API Consumer Key and Consumer Secret in a client side session cookie, which is not secure, do not use this code in production, your private API key and secret is visible to all clients. If you want to use this in production you should find a more secure manner of storing these private & secret API keys.\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/AccountActivityDemos.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class AccountActivityDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tAdding Webhook...\\n\");\n                        await AddWebhookAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing Webhooks....\\n\");\n                        await ListWebhooksAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tDeleting Webhook...\\n\");\n                        await DeleteWebhookAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tSending Challenge Response Check...\\n\");\n                        await SendChallengeResponseCheckAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tAdding subscription...\\n\");\n                        await AddSubscriptionAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tShowing subscriptions...\\n\");\n                        await ShowSubscriptionsAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tDeleting subscription...\\n\");\n                        await DeleteSubscriptionAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nAccount Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Add Webhook\");\n            Console.WriteLine(\"\\t 1. List Webhooks\");\n            Console.WriteLine(\"\\t 2. Delete Webhook\");\n            Console.WriteLine(\"\\t 3. Send Challenge Response Check\");\n            Console.WriteLine(\"\\t 4. Add Subscription\");\n            Console.WriteLine(\"\\t 5. List Subscriptions\");\n            Console.WriteLine(\"\\t 6. Delete Subscription\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task AddWebhookAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                Console.Write(\"What is the Webhook URL? \");\n                string url = Console.ReadLine() ?? \"\";\n\n                AccountActivity? accAct = await twitterCtx.AddAccountActivityWebhookAsync(url);\n\n                Webhook? webhook = accAct?.WebhooksValue?.Webhooks?.SingleOrDefault();\n                Console.WriteLine(\n                    $\"Webhook for '{webhook?.Url}' \" +\n                    $\"added with ID: {webhook?.ID}, \" +\n                    $\"created at {webhook?.CreatedTimestamp}\");\n            }\n            catch (TwitterQueryException tqe)\n            {\n                Console.WriteLine(tqe.Message);\n            }\n        }\n\n        static async Task ListWebhooksAsync(TwitterContext twitterCtx)\n        {\n            var webhooksResponse =\n                await\n                (from acct in twitterCtx.AccountActivity\n                 where acct.Type == AccountActivityType.Webhooks\n                 select acct)\n                .SingleOrDefaultAsync();\n\n            if (webhooksResponse?.WebhooksValue?.Webhooks != null)\n            {\n                Console.WriteLine(\"Webhooks:\");\n\n                if (webhooksResponse.WebhooksValue.Webhooks.Any())\n                    foreach (var webhook in webhooksResponse.WebhooksValue.Webhooks)\n                        Console.WriteLine(\n                            $\"ID: {webhook?.ID}, \" +\n                            $\"Created: {webhook?.CreatedTimestamp}, \" +\n                            $\"Valid: {webhook?.Valid}, \" +\n                            $\"URL: {webhook?.Url}\");\n                else\n                    Console.WriteLine(\"No webhooks registered\");\n            }\n        }\n\n        static async Task DeleteWebhookAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            var acctActivity = await twitterCtx.DeleteAccountActivityWebhookAsync(webhookID);\n\n            Console.WriteLine($\"Webhook, {acctActivity?.WebhookID}, has been deleted.\");\n        }\n\n        static async Task SendChallengeResponseCheckAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            try\n            {\n                AccountActivity? accAct = await twitterCtx.SendAccountActivityCrcAsync(webhookID);\n\n                Console.WriteLine(\"Challenge response check succeeded.\");\n            }\n            catch (TwitterQueryException tqEx) // Twitter returns a 3XX when it can't delete, which throws\n            {\n                Console.WriteLine($\"Challenge response check failed: {tqEx.Message}\");\n            }\n        }\n\n        static async Task AddSubscriptionAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            try\n            {\n                AccountActivity? accAct = await twitterCtx.AddAccountActivitySubscriptionAsync(webhookID);\n\n                Console.WriteLine(\"Subscription added.\");\n            }\n            catch (TwitterQueryException tqEx) // Twitter returns a 3XX or 4XX when it can't add, which throws\n            {\n                Console.WriteLine($\"Unable to add subscription: {tqEx.Message}\");\n            }\n        }\n\n        static async Task ShowSubscriptionsAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            bool isSubscribed = false;\n\n            try\n            {\n                var accAct =\n                    await\n                    (from act in twitterCtx.AccountActivity\n                     where act.Type == AccountActivityType.Subscriptions &&\n                           act.WebhookID == webhookID\n                     select act)\n                    .SingleOrDefaultAsync();\n\n                isSubscribed = accAct?.SubscriptionValue?.IsSubscribed ?? false;\n\n                Console.WriteLine($\"IsSubscribed: {isSubscribed}\");\n            }\n            catch (TwitterQueryException) // Twitter returns a 4XX when not subscribed, which throws\n            {\n                Console.WriteLine(\"Your user account is not subscribed.\");\n            }\n        }\n\n        static async Task DeleteSubscriptionAsync(TwitterContext twitterCtx)\n        {\n            ulong webhookID = GetWebhook();\n\n            try\n            {\n                AccountActivity? accAct = await twitterCtx.DeleteAccountActivitySubscriptionAsync(webhookID);\n\n                Console.WriteLine(\"Subscription deleted.\");\n            }\n            catch (TwitterQueryException tqEx) // Twitter returns a 3XX when it can't delete, which throws\n            {\n                Console.WriteLine($\"Unable to delete subscription: {tqEx.Message}\");\n            }\n        }\n\n        /// <summary>\n        /// Asks user for a webhook\n        /// </summary>\n        /// <remarks>\n        /// Tip: Do AccountActivtyType.Webhooks query for a list of webhooks.\n        /// </remarks>\n        /// <returns>Webhook as ulong</returns>\n        static ulong GetWebhook()\n        {\n            Console.Write(\"Webhook ID? \");\n            string? webhookIDString = Console.ReadLine();\n            ulong.TryParse(webhookIDString, out ulong webhookID);\n            return webhookID;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/AccountDemos.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class AccountDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tVerifying Credentials...\\n\");\n                        await VerifyCredentialsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tRequesting settings....\\n\");\n                        await AccountSettingsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tUpdating image...\\n\");\n                        await UpdateAccountImageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUpdating account...\\n\");\n                        await UpdateAccountProfileAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tUpdating account...\\n\");\n                        await UpdateAccountSettingsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tUpdating banner...\\n\");\n                        await UpdateProfileBannerAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tRemoving banner...\\n\");\n                        await RemoveProfileBannerAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nAccount Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Verify Credentials\");\n            Console.WriteLine(\"\\t 1. Get Account Settings\");\n            Console.WriteLine(\"\\t 2. Update Account Image\");\n            Console.WriteLine(\"\\t 3. Update Account Profile\");\n            Console.WriteLine(\"\\t 4. Update Account Settings\");\n            Console.WriteLine(\"\\t 5. Update Profile Banner\");\n            Console.WriteLine(\"\\t 6. Remove Profile Banner\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task VerifyCredentialsAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var verifyResponse =\n                    await\n                        (from acct in twitterCtx.Account\n                         where acct.Type == AccountType.VerifyCredentials\n                         select acct)\n                        .SingleOrDefaultAsync();\n\n                if (verifyResponse != null && verifyResponse.User != null)\n                {\n                    User user = verifyResponse.User;\n\n                    Console.WriteLine(\n                        \"Credentials are good for {0}.\",\n                        user.ScreenNameResponse);\n                }\n            }\n            catch (TwitterQueryException tqe)\n            {\n                Console.WriteLine(tqe.Message);\n            }\n        }\n\n        static async Task AccountSettingsAsync(TwitterContext twitterCtx)\n        {\n            var settingsResponse =\n                await\n                (from acct in twitterCtx.Account\n                 where acct.Type == AccountType.Settings\n                 select acct)\n                .SingleOrDefaultAsync();\n\n            if (settingsResponse != null &&\n                settingsResponse.Settings != null &&\n                settingsResponse.Settings.TrendLocation != null &&\n                settingsResponse.Settings.SleepTime != null)\n            {\n                var settings = settingsResponse.Settings;\n\n                Console.WriteLine(\n                    \"Trend Location: {0}\\nGeo Enabled: {1}\\nSleep Enabled: {2}\",\n                    settings.TrendLocation.Name,\n                    settings.GeoEnabled,\n                    settings.SleepTime.Enabled);\n            }\n        }\n\n        static async Task UpdateAccountImageAsync(TwitterContext twitterCtx)\n        {\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\..\\Images\\200xColor_2.png\");\n\n            var user = await twitterCtx.UpdateAccountImageAsync(\n                imageBytes, \"200xColor_2.png\", \"png\", false);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileImageUrl);\n        }\n\n        static async Task UpdateAccountProfileAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.UpdateAccountProfileAsync(\n                name: \"Joe Mayo\",\n                url: \"https://github.com/JoeMayo/LinqToTwitter\",\n                location: \"Las Vegas, NV\",\n                description: \"Testing the Account Profile Update with LINQ to Twitter.\",\n                includeEntities: true,\n                skipStatus: true);\n\n            if (user != null)\n                Console.WriteLine(\n                    \"Name: {0}\\nURL: {1}\\nLocation: {2}\\nDescription: {3}\",\n                    user.Name, user.Url, user.Location, user.Description);\n        }\n\n        static async Task UpdateAccountSettingsAsync(TwitterContext twitterCtx)\n        {\n            Account? acct =\n                await twitterCtx.UpdateAccountSettingsAsync(\n                    null, true, 20, 6, \"\", \"\");\n\n            if (acct != null &&\n                acct.Settings != null &&\n                acct.Settings.SleepTime != null)\n            {\n                SleepTime sleep = acct.Settings.SleepTime;\n                Console.WriteLine(\n                    \"Enabled: {0}, Start: {1}, End: {2}\",\n                    sleep.Enabled, sleep.StartHour, sleep.EndHour);\n            }\n        }\n\n        static async Task UpdateProfileBannerAsync(TwitterContext twitterCtx)\n        {\n            byte[] fileBytes = File.ReadAllBytes(@\"..\\..\\..\\images\\13903749474_86bd1290de_o.jpg\");\n\n            var user = await twitterCtx.UpdateProfileBannerAsync(fileBytes, 1500, 500, 0, 0);\n\n            if (user != null)\n                Console.WriteLine(\"User Image: \" + user.ProfileBannerUrl);\n        }\n\n        static async Task RemoveProfileBannerAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.RemoveProfileBannerAsync();\n\n            if (user != null)\n                Console.WriteLine(\"Profile Banner: \" + user.ProfileBannerUrl ?? \"None\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/BlockDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class BlockDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLookup blocked Users...\\n\");\n                        await LookupBlockedUsersAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing blocked Users...\\n\");\n                        await ListBlockedUsersAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tListing blocked IDs...\\n\");\n                        await ListBlockIDsAsyc(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tBlocking user...\\n\");\n                        await BlockUserAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tUnblocking user...\\n\");\n                        await UnblockUserAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nBlock Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup Blocked Users\");\n            Console.WriteLine(\"\\t 1. List Blocked Users\");\n            Console.WriteLine(\"\\t 2. List Blocked IDs\");\n            Console.WriteLine(\"\\t 3. Block a User\");\n            Console.WriteLine(\"\\t 4. Unblock a User\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupBlockedUsersAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TwitterBlocksQuery? blockResponse =\n                await\n                    (from block in twitterCtx.TwitterBlocks\n                     where\n                        block.Type == BlockingType.Lookup &&\n                        block.ID == userID &&\n                        block.TweetFields == TweetField.AllFields &&\n                        block.UserFields == UserField.AllFields\n                     select block)\n                    .SingleOrDefaultAsync();\n\n            if (blockResponse != null && blockResponse.Users != null)\n                blockResponse.Users.ForEach(user =>\n                        Console.WriteLine(user.Name));\n        }\n\n        static async Task ListBlockedUsersAsync(TwitterContext twitterCtx)\n        {\n            var blockResponse =\n                await\n                    (from block in twitterCtx.Blocks\n                     where block.Type == BlockingType.List\n                     select block)\n                    .SingleOrDefaultAsync();\n\n            if (blockResponse != null && blockResponse.Users != null)\n                blockResponse.Users.ForEach(user =>\n                        Console.WriteLine(user.ScreenNameResponse)); \n        }\n        \n        static async Task ListBlockIDsAsyc(TwitterContext twitterCtx)\n        {\n            var result =\n                await\n                (from blockItem in twitterCtx.Blocks\n                 where blockItem.Type == BlockingType.Ids\n                 select blockItem)\n                .SingleOrDefaultAsync();\n\n            if (result != null && result.IDs != null)\n                result.IDs.ForEach(block => Console.WriteLine(\"ID: {0}\", block)); \n        }\n\n        static async Task BlockUserAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Block: \");\n            string? userName = Console.ReadLine() ?? \"\";\n\n            TwitterUserQuery? userResponse =\n                await\n                (from usr in twitterCtx.TwitterUser\n                 where usr.Type == UserType.UsernameLookup &&\n                       usr.Usernames == userName\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            string? targetUserID = userResponse?.Users?.FirstOrDefault()?.ID;\n            string? sourceUserID = twitterCtx.Authorizer?.CredentialStore?.UserID.ToString();\n\n            if (targetUserID == null || sourceUserID == null)\n            {\n                Console.WriteLine($\"Either {nameof(targetUserID)} or {nameof(sourceUserID)} is null.\");\n                return;\n            }\n\n            BlockingResponse? user = await twitterCtx.BlockUserAsync(sourceUserID, targetUserID);\n\n            if (user?.Data != null)\n                Console.WriteLine(\"Is Blocked: \" + user.Data.Blocking);\n        }\n\n        static async Task UnblockUserAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Unblock: \");\n            string? userName = Console.ReadLine() ?? \"\";\n\n            TwitterUserQuery? userResponse =\n                await\n                (from usr in twitterCtx.TwitterUser\n                 where usr.Type == UserType.UsernameLookup &&\n                       usr.Usernames == userName\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            string? targetUserID = userResponse?.Users?.FirstOrDefault()?.ID;\n            string? sourceUserID = twitterCtx.Authorizer?.CredentialStore?.UserID.ToString();\n\n            if (targetUserID == null || sourceUserID == null)\n            {\n                Console.WriteLine($\"Either {nameof(targetUserID)} or {nameof(sourceUserID)} is null.\");\n                return;\n            }\n\n            BlockingResponse? user = await twitterCtx.UnblockUserAsync(sourceUserID, targetUserID);\n\n            if (user?.Data != null)\n                Console.WriteLine(\"Is Blocked: \" + user.Data.Blocking);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/BookmarkDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    class BookmarkDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tBookmarking tweet...\\n\");\n                        await BookmarkAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tRemoving bookmark...\\n\");\n                        await RemoveBookmarkAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting bookmarks...\\n\");\n                        await GetBookmarksAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nBookmark Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Bookmark a Tweet\");\n            Console.WriteLine(\"\\t 1. Unbookmark a Tweet\");\n            Console.WriteLine(\"\\t 2. Bookmarks\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task BookmarkAsync(TwitterContext twitterCtx)\n        {\n            string tweetID = \"1371844879043723273\";\n            string userID = \"15411837\";\n\n            if (userID == null)\n            {\n                Console.WriteLine($\"{nameof(userID)} is null.\");\n                return;\n            }\n\n            BookmarkResponse? user = await twitterCtx.BookmarkAsync(userID, tweetID);\n\n            if (user?.Data != null)\n                Console.WriteLine(\"Is Bookmarked: \" + user.Data.Bookmarked);\n        }\n\n        static async Task RemoveBookmarkAsync(TwitterContext twitterCtx)\n        {\n            string? tweetID = \"1371844879043723273\";\n            string userID = \"15411837\";\n\n            if (userID == null)\n            {\n                Console.WriteLine($\"{nameof(userID)} is null.\");\n                return;\n            }\n\n            BookmarkResponse? user = await twitterCtx.RemoveBookmarkAsync(userID, tweetID);\n\n            if (user?.Data != null)\n                Console.WriteLine(\"Is Bookmarked: \" + user.Data.Bookmarked);\n        }\n\n        static async Task GetBookmarksAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.Bookmarks &&\n                       tweet.ID == userID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/ComplianceDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class ComplianceDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tFinding compliance job...\\n\");\n                        await FindComplianceJobAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting all compliance jobs...\\n\");\n                        await GetMultipleComplianceJobsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tCreating a compliance job...\\n\");\n                        await CreateComplianceJobAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSearch Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Single Compliance Job\");\n            Console.WriteLine(\"\\t 1. Multiple Compliance Jobs\");\n            Console.WriteLine(\"\\t 2. Create a Compliance Job\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task FindComplianceJobAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"What is the Job ID? \");\n            string? jobID = Console.ReadLine();\n\n            if (string.IsNullOrWhiteSpace(jobID))\n            {\n                Console.WriteLine(\"You didn't enter a job ID.\");\n                return;\n            }\n\n            ComplianceQuery? response =\n                await\n                (from job in twitterCtx.Compliance\n                 where job.Type == ComplianceType.SingleJob &&\n                       job.ID == jobID\n                 select job)\n                .SingleOrDefaultAsync();\n\n            if (response?.Jobs?.Any() ?? false)\n                response.Jobs.ForEach(job =>\n                    Console.WriteLine(\n                        $\"\\nID: {job.ID}\" +\n                        $\"\\nName: {job.Name}\" +\n                        $\"\\nStatus: {job.Status}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task GetMultipleComplianceJobsAsync(TwitterContext twitterCtx)\n        {\n            ComplianceQuery? response =\n                await\n                (from job in twitterCtx.Compliance\n                 where job.Type == ComplianceType.MultipleJobs &&\n                       job.JobType == ComplianceJobType.Tweets //&&\n                       //job.Status == ComplianceStatus.InProgress\n                 select job)\n                .SingleOrDefaultAsync();\n\n            if (response?.Jobs?.Any() ?? false)\n                response.Jobs.ForEach(job =>\n                    Console.WriteLine(\n                        $\"\\nID: {job.ID}\" +\n                        $\"\\nName: {job.Name}\" +\n                        $\"\\nStatus: {job.Status}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task CreateComplianceJobAsync(TwitterContext twitterCtx)\n        {\n            string jobName = $\"test-{DateTime.Now.ToString(\"yyyyMMddhhmm\")}\";\n\n            ComplianceQuerySingle? response = \n                await twitterCtx.CreateComplianceJobAsync(ComplianceJobType.Tweets, jobName, true);\n\n            ComplianceJob? job = response?.Job;\n\n            if (job is not null)\n                Console.WriteLine(\n                    $\"\\nID: {job.ID}\" +\n                    $\"\\nName: {job.Name}\" +\n                    $\"\\nStatus: {job.Status}\");\n            else\n                Console.WriteLine(\"Job not returned\");\n\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/ConsoleDemo.CSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<OutputType>Exe</OutputType>\n\t\t<TargetFramework>net6.0</TargetFramework>\n\t\t<Nullable>enable</Nullable>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t  <ProjectReference Include=\"..\\..\\..\\..\\..\\src\\LinqToTwitter6\\LinqToTwitter\\LinqToTwitter.csproj\" />\n\t</ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/CountsDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class CountsDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting recent counts...\\n\");\n                        await DoCountsRecentAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting all counts...\\n\");\n                        await DoCountsAllAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nCounts Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Recent Counts\");\n            Console.WriteLine(\"\\t 1. All Counts\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoCountsRecentAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter OR JoeMayo\";\n            //searchTerm = \"Twitter\";\n\n            Counts? countsResponse =\n                await\n                (from count in twitterCtx.Counts\n                 where count.Type == CountType.Recent &&\n                       count.Query == searchTerm &&\n                       count.Granularity == Granularity.Day\n                 select count)\n                .SingleOrDefaultAsync();\n\n            if (countsResponse?.CountRanges != null)\n                countsResponse.CountRanges.ForEach(range =>\n                    Console.WriteLine(\n                        $\"\\nStart: {range.Start}\" +\n                        $\"\\nEnd:   {range.End}\" +\n                        $\"\\nTweet: {range.TweetCount}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoCountsAllAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter OR JoeMayo\";\n            //searchTerm = \"Twitter\";\n\n            Counts? countsResponse =\n                await\n                (from count in twitterCtx.Counts\n                 where count.Type == CountType.All &&\n                       count.Query == searchTerm &&\n                       count.Granularity == Granularity.Day\n                 select count)\n                .SingleOrDefaultAsync();\n\n            if (countsResponse?.CountRanges != null)\n                countsResponse.CountRanges.ForEach(range =>\n                    Console.WriteLine(\n                        $\"\\nStart: {range.Start}\" +\n                        $\"\\nEnd:   {range.End}\" +\n                        $\"\\nTweet: {range.TweetCount}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/DirectMessageEventsDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\nusing System.IO;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class DirectMessageEventsDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing DMs...\\n\");\n                        await ShowDirectMessagesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tListing DMs...\\n\");\n                        await ListDirectMessagesAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tSending DM...\\n\");\n                        await NewDirectMessageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tDeleting DM...\\n\");\n                        await DeleteDirectMessageAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tSending DM with media...\\n\");\n                        await NewDirectMessageWithMediaAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tSending DM with media...\\n\");\n                        await NewDirectMessageWithCoordinatesAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tSending DM with media...\\n\");\n                        await NewDirectMessageWithPlaceAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tSending Quick Reply Location...\\n\");\n                        await RequestQuickReplyOptionsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tSending Button Choice...\\n\");\n                        await RequestButtonChoiceAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tSending Typing Indicator...\\n\");\n                        await SendTypingIndicatorAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tSending Message Read...\\n\");\n                        await SendMessageReadAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nDirect Message Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Direct Messages\");\n            Console.WriteLine(\"\\t 1. List Direct Messages\");\n            Console.WriteLine(\"\\t 2. Send Direct Message\");\n            Console.WriteLine(\"\\t 3. Delete Direct Message\");\n            Console.WriteLine(\"\\t 4. Send Direct Message with Media\");\n            Console.WriteLine(\"\\t 5. Send Direct Message with Coordinates\");\n            Console.WriteLine(\"\\t 6. Send Direct Message with Place\");\n            Console.WriteLine(\"\\t 7. Send Quick Reply with Options\");\n            Console.WriteLine(\"\\t 8. Send Button Choice\");\n            Console.WriteLine(\"\\t 9. Send Typing Indicator\");\n            Console.WriteLine(\"\\t A. Send Message Read\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowDirectMessagesAsync(TwitterContext twitterCtx)\n        {\n            DirectMessageEvents? dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessageEvents\n                     where dm.Type == DirectMessageEventsType.Show &&\n                           dm.ID == 917929712638246916\n                     select dm)\n                    .SingleOrDefaultAsync();\n\n            DirectMessageCreate? msgCreate = dmResponse?.Value?.DMEvent?.MessageCreate;\n\n            if (dmResponse != null && msgCreate != null)\n                Console.WriteLine(\n                    \"From ID: {0}\\nTo ID:  {1}\\nMessage Text: {2}\",\n                    msgCreate?.SenderID ?? \"None\",\n                    msgCreate?.Target?.RecipientID ?? \"None\",\n                    msgCreate?.MessageData?.Text ?? \"None\");\n        }\n\n        static async Task ListDirectMessagesAsync(TwitterContext twitterCtx)\n        {\n            int count = 50; // set to a low number to demo paging\n            string cursor = \"\";\n            List<DMEvent> allDmEvents = new();\n\n            // you don't have a valid cursor until after the first query\n            DirectMessageEvents? dmResponse =\n                await\n                    (from dm in twitterCtx.DirectMessageEvents\n                     where dm.Type == DirectMessageEventsType.List &&\n                           dm.Count == count\n                     select dm)\n                    .SingleOrDefaultAsync();\n\n            allDmEvents.AddRange(dmResponse?.Value?.DMEvents ?? new List<DMEvent>());\n            cursor = dmResponse?.Value?.NextCursor ?? \"\";\n\n            while (!string.IsNullOrWhiteSpace(cursor))\n            {\n                dmResponse =\n                    await\n                        (from dm in twitterCtx.DirectMessageEvents\n                         where dm.Type == DirectMessageEventsType.List &&\n                               dm.Count == count &&\n                               dm.Cursor == cursor\n                         select dm)\n                        .SingleOrDefaultAsync();\n\n                allDmEvents.AddRange(dmResponse?.Value?.DMEvents ?? new List<DMEvent>());\n                cursor = dmResponse?.Value?.NextCursor ?? \"\";\n            }\n\n            if (!allDmEvents.Any())\n            {\n                Console.WriteLine(\"No items returned\");\n                return;\n            }\n\n            Console.WriteLine($\"Response Count: {allDmEvents.Count}\");\n            Console.WriteLine(\"Responses:\");\n\n            allDmEvents.ForEach(evt =>\n            {\n                DirectMessageCreate? msgCreate = evt.MessageCreate;\n\n                if (evt != null && msgCreate != null)\n                    Console.WriteLine(\n                        $\"DM ID: {evt.ID}\\n\" +\n                        $\"From ID: {msgCreate.SenderID ?? \"None\"}\\n\" +\n                        $\"To ID:  {msgCreate.Target?.RecipientID ?? \"None\"}\\n\" +\n                        $\"Message Text: {msgCreate.MessageData?.Text ?? \"None\"}\");\n            });\n        }\n\n        static async Task NewDirectMessageAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            DirectMessageEvents? message = \n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID, \n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\");\n\n            DMEvent? dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate?.Target?.RecipientID,\n                    dmEvent.MessageCreate?.MessageData?.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task DeleteDirectMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Which DM would you like to delete? (please enter DM ID): \");\n            string? dmInput = Console.ReadLine();\n\n            _ = ulong.TryParse(dmInput, out ulong dmID);\n\n            try\n            {\n                await twitterCtx.DeleteDirectMessageEventAsync(dmID);\n                Console.WriteLine(\"\\nDM Deleted\");\n            }\n            catch (TwitterQueryException tqEx)\n            {\n                Console.WriteLine($\"\\nProblem deleting DM: ({tqEx.StatusCode}) - {tqEx.ReasonPhrase}\");\n            }\n        }\n\n        static async Task NewDirectMessageWithMediaAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n            string mediaCategory = \"dm_image\";\n\n            Media? media = await twitterCtx.UploadMediaAsync(\n                File.ReadAllBytes(@\"..\\..\\..\\images\\200xColor_2.png\"), \n                mediaType: \"image/png\", \n                additionalOwners: null, \n                mediaCategory: mediaCategory,\n                shared: true);\n\n            DirectMessageEvents? message =\n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID,\n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\",\n                    media?.MediaID ?? 0ul);\n\n            DMEvent? dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate?.Target?.RecipientID,\n                    dmEvent.MessageCreate?.MessageData?.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task NewDirectMessageWithCoordinatesAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            DirectMessageEvents? message =\n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID,\n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\",\n                    latitude: -122.443893,\n                    longitude: 37.771718);\n\n            DMEvent? dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate?.Target?.RecipientID,\n                    dmEvent.MessageCreate?.MessageData?.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task NewDirectMessageWithPlaceAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            DirectMessageEvents? message =\n                await twitterCtx.NewDirectMessageEventAsync(\n                    Linq2TwitrID,\n                    \"DM from @JoeMayo to @Linq2Twitr of $MSFT & $TSLA with #TwitterAPI #chatbot \" +\n                    \"at http://bit.ly/2xSJWJk and http://amzn.to/2gD09X6 on \" + DateTime.Now + \"!'\",\n                    placeID: \"5a110d312052166f\");\n\n            DMEvent? dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate?.Target?.RecipientID,\n                    dmEvent.MessageCreate?.MessageData?.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task RequestQuickReplyOptionsAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n            var options = new List<QuickReplyOption>\n            {\n                new QuickReplyOption\n                {\n                    Label = \"Option 1\",\n                    Description = \"Description for the first option.\",\n                    Metadata = \"abc001\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 2\",\n                    Description = \"Description for the second option.\",\n                    Metadata = \"abc002\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 3\",\n                    Description = \"Description for the third option.\",\n                    Metadata = \"abc003\"\n                },\n            };\n\n            DirectMessageEvents? message =\n                await twitterCtx.RequestQuickReplyOptionsAsync(\n                    Linq2TwitrID,\n                    \"What is your choice?\",\n                    options);\n\n            DMEvent? dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate?.Target?.RecipientID,\n                    dmEvent.MessageCreate?.MessageData?.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task RequestButtonChoiceAsync(TwitterContext twitterCtx)\n        {\n            const ulong Linq2TwitrID = 15411837;// 16761255;\n\n            var buttons = new List<CallToAction>\n            {\n                new CallToAction\n                {\n                    Label = \"Visit LINQ to Twitter Website\",\n                    Url = \"https://github.com/JoeMayo/LinqToTwitter\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @JoeMayo on Twitter\",\n                    Url = \"https://twitter.com/JoeMayo\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @Linq2Twitr on Twitter\",\n                    Url = \"https://twitter.com/Linq2Twitr\",\n                    Type = \"web_url\"\n                }\n            };\n\n            DirectMessageEvents? message =\n                await twitterCtx.RequestButtonChoiceAsync(\n                    Linq2TwitrID,\n                    \"Where would you like to go?\",\n                    buttons);\n\n            DMEvent? dmEvent = message?.Value?.DMEvent;\n            if (dmEvent != null)\n                Console.WriteLine(\n                    \"Recipient: {0}, Message: {1}, Date: {2}\",\n                    dmEvent.MessageCreate?.Target?.RecipientID,\n                    dmEvent.MessageCreate?.MessageData?.Text,\n                    dmEvent.CreatedTimestamp);\n        }\n\n        static async Task SendTypingIndicatorAsync(TwitterContext twitterCtx)\n        {\n            ulong recipientID = 15411837;\n\n            await twitterCtx.IndicateTypingAsync(recipientID);\n        }\n\n        static async Task SendMessageReadAsync(TwitterContext twitterCtx)\n        {\n            ulong recipientID = 15411837;\n            Console.Write(\"Which DM would you mark read? (please enter DM ID): \");\n            string? dmInput = Console.ReadLine();\n\n            _ = ulong.TryParse(dmInput, out ulong dmID);\n\n            try\n            {\n                await twitterCtx.MarkReadAsync(dmID, recipientID);\n                Console.WriteLine(\"\\nDM Marked as read.\");\n            }\n            catch (TwitterQueryException tqEx)\n            {\n                Console.WriteLine($\"\\nProblem Marking DM as read: ({tqEx.StatusCode}) - {tqEx.ReasonPhrase}\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/FriendshipDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class FriendshipDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing friends...\\n\");\n                        await ShowFriendsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking up user ids...\\n\");\n                        await LookupUserIDsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting incoming...\\n\");\n                        await IncomingFriendshipsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting Outgoing...\\n\");\n                        await OutgoingFriendshipsAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tShowing no retweet IDs...\\n\");\n                        await NoRetweetIDsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting friends list...\\n\");\n                        await FriendsListAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting followers list...\\n\");\n                        await FollowersListAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tShowing followers ids...\\n\");\n                        await ShowFollowerIDsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tShowing friend ids...\\n\");\n                        await ShowFriendIDsAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tCreating friendship...\\n\");\n                        await CreateFriendshipAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tUnfollowing...\\n\");\n                        await DestroyFriendshipAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tUpdating friend settings...\\n\");\n                        await UpdateFreindshipSettingsAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nFriendship Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Friends\");\n            Console.WriteLine(\"\\t 1. Lookup Friendships\");\n            Console.WriteLine(\"\\t 2. Incoming Friendships\");\n            Console.WriteLine(\"\\t 3. Outgoing Friendships\");\n            Console.WriteLine(\"\\t 4. No Retweet IDs\");\n            Console.WriteLine(\"\\t 5. Friends List\");\n            Console.WriteLine(\"\\t 6. Followers List\");\n            Console.WriteLine(\"\\t 7. Follower IDs\");\n            Console.WriteLine(\"\\t 8. Friend IDs\");\n            Console.WriteLine(\"\\t 9. Create Friendship\");\n            Console.WriteLine(\"\\t A. Delete Friendship\");\n            Console.WriteLine(\"\\t B. Update Friendship Settings\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowFriendsAsync(TwitterContext twitterCtx)\n        {\n            var friendship =\n                await\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.Show &&\n                       friend.SourceScreenName == \"Linq2Twitr\" &&\n                       friend.TargetScreenName == \"JoeMayo\"\n                 select friend)\n                .SingleOrDefaultAsync();\n\n            if (friendship != null && \n                friendship.SourceRelationship != null && \n                friendship.TargetRelationship != null)\n            {\n                Console.WriteLine(\n                        \"\\nJoeMayo follows LinqToTweeter: \" +\n                        friendship.SourceRelationship.FollowedBy +\n                        \"\\nLinqToTweeter follows JoeMayo: \" +\n                        friendship.TargetRelationship.FollowedBy); \n            }\n        }\n\n        static async Task LookupUserIDsAsync(TwitterContext twitterCtx)\n        {\n            var relationships =\n                await\n                (from look in twitterCtx.Friendship\n                 where look.Type == FriendshipType.Lookup &&\n                       look.UserID == \"15411837,16761255\"\n                 select look.Relationships)\n                .SingleOrDefaultAsync();\n\n            if (relationships != null)\n                relationships.ForEach(rel => \n                    Console.WriteLine(\n                        \"Relationship to \" + rel.ScreenName + \n                        \", is Following: \" + rel.Following + \n                        \", Followed By: \" + rel.FollowedBy));\n        }\n\n        static async Task IncomingFriendshipsAsync(TwitterContext twitterCtx)\n        {\n            var request =\n                await\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Incoming\n                 select req)\n                .SingleOrDefaultAsync();\n\n            if (request != null && \n                request.IDInfo != null && \n                request.IDInfo.IDs != null)\n            {\n                request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n            }\n        }\n\n        static async Task OutgoingFriendshipsAsync(TwitterContext twitterCtx)\n        {\n            var request =\n                await\n                (from req in twitterCtx.Friendship\n                 where req.Type == FriendshipType.Outgoing\n                 select req)\n                .SingleOrDefaultAsync();\n\n            if (request != null &&\n                request.IDInfo != null &&\n                request.IDInfo.IDs != null)\n            {\n                request.IDInfo.IDs.ForEach(req => Console.WriteLine(req));\n            }\n        }\n\n        static async Task NoRetweetIDsAsync(TwitterContext twitterCtx)\n        {\n            var friendship =\n                await\n                (from friend in twitterCtx.Friendship\n                 where friend.Type == FriendshipType.NoRetweetIDs\n                 select friend)\n                .SingleOrDefaultAsync();\n\n            if (friendship != null && \n                friendship.IDInfo != null && \n                friendship.IDInfo.IDs != null)\n            {\n                var ids =\n                    (from id in friendship.IDInfo.IDs\n                     select id.ToString())\n                    .ToArray();\n\n                Console.WriteLine(\"\\nIDs: \" + string.Join(\",\", ids)); \n            }\n        }\n\n        static async Task FriendsListAsync(TwitterContext twitterCtx)\n        {\n            Friendship? friendship;\n            long cursor = -1;\n            int count = 0;\n            do\n            {\n                friendship =\n                    await\n                    (from friend in twitterCtx.Friendship\n                     where friend.Type == FriendshipType.FriendsList &&\n                           friend.ScreenName == \"JoeMayo\" &&\n                           friend.Cursor == cursor &&\n                           friend.Count == 200\n                     select friend)\n                    .SingleOrDefaultAsync();\n\n                if (friendship != null && \n                    friendship.Users != null && \n                    friendship.CursorMovement != null)\n                {\n                    cursor = friendship.CursorMovement.Next;\n\n                    friendship.Users.ForEach(friend =>\n                        Console.WriteLine(\n                            \"ID: {0} Name: {1}\",\n                            friend.UserIDResponse, friend.ScreenNameResponse)); \n                }\n\n                count++;\n\n            } while (cursor != 0 && count < 3);\n        }\n\n        static async Task FollowersListAsync(TwitterContext twitterCtx)\n        {\n            Friendship? friendship;\n            long cursor = -1;\n            int count = 0;\n            do\n            {\n                try\n                {\n                    friendship =\n                        await\n                        (from friend in twitterCtx.Friendship\n                         where friend.Type == FriendshipType.FollowersList &&\n                               friend.ScreenName == \"JoeMayo\" &&\n                               friend.Cursor == cursor\n                         select friend)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (friendship != null && friendship.Users != null)\n                {\n                    cursor = friendship.CursorMovement?.Next ?? 0L;\n\n                    friendship.Users.ForEach(friend =>\n                        Console.WriteLine(\n                            \"ID: {0} Name: {1}\",\n                            friend.UserIDResponse, friend.ScreenNameResponse));\n                }\n\n                count++;\n\n            } while (cursor != 0 && count < 3);\n        }\n\n        static async Task ShowFollowerIDsAsync(TwitterContext twitterCtx)\n        {\n            Friendship? followers;\n            long cursor = -1;\n            int count = 0;\n            do\n            {\n                try\n                {\n                    followers =\n                        await\n                        (from follower in twitterCtx.Friendship\n                         where follower.Type == FriendshipType.FollowerIDs &&\n                               follower.UserID == \"15411837\" &&\n                               follower.Cursor == cursor &&\n                               follower.Count == 500\n                         select follower)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (followers != null && \n                    followers.IDInfo != null && \n                    followers.IDInfo.IDs != null)\n                {\n                    cursor = followers.CursorMovement?.Next ?? 0L;\n\n                    followers.IDInfo.IDs.ForEach(id =>\n                        Console.WriteLine(\"Follower ID: \" + id)); \n                }\n\n                count++;\n\n            } while (cursor != 0 && count < 3);\n        }\n\n        static async Task ShowFriendIDsAsync(TwitterContext twitterCtx)\n        {\n            Friendship? friendList;\n            long cursor = -1;\n            int count = 0;\n            do\n            {\n                try\n                {\n                    friendList =\n                        await\n                        (from friend in twitterCtx.Friendship\n                         where friend.Type == FriendshipType.FriendIDs &&\n                               friend.ScreenName == \"JoeMayo\" &&\n                               friend.Cursor == cursor\n                         select friend)\n                        .SingleOrDefaultAsync();\n                }\n                catch (TwitterQueryException tqe)\n                {\n                    Console.WriteLine(tqe.ToString());\n                    break;\n                }\n\n                if (friendList != null &&\n                    friendList.IDInfo != null &&\n                    friendList.IDInfo.IDs != null)\n                {\n                    cursor = friendList.CursorMovement?.Next ?? 0L;\n\n                    friendList.IDInfo.IDs.ForEach(id =>\n                        Console.WriteLine(\"Follower ID: \" + id));\n                }\n\n                count++;\n\n            } while (cursor != 0 && count < 3);\n        }\n\n        static async Task CreateFriendshipAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.CreateFriendshipAsync(\"JoeMayo\", true);\n\n            if (user != null && user.Status != null)\n                Console.WriteLine(\n                    \"User Name: {0}, Status: {1}\",\n                    user.Name,\n                    user.Status.Text);\n        }\n\n        static async Task DestroyFriendshipAsync(TwitterContext twitterCtx)\n        {\n            var user = await twitterCtx.DestroyFriendshipAsync(\"Linq2Twitr\");\n\n            if (user != null && user.Status != null)\n                Console.WriteLine(\n                    \"User Name: {0}, Status: {1}\",\n                    user.Name,\n                    user.Status.Text);\n        }\n\n        static async Task UpdateFreindshipSettingsAsync(TwitterContext twitterCtx)\n        {\n            Friendship? friend = \n                await twitterCtx.UpdateFriendshipSettingsAsync(\n                    \"Linq2Twitr\", true, true);\n\n            if (friend != null && friend.SourceRelationship != null)\n                Console.WriteLine(\n                    \"Settings for {0} are: Can Retweet is {1} \" +\n                    \"and Can Send Device Notifications is {2}\",\n                    friend.SourceRelationship.ScreenName,\n                    friend.SourceRelationship.RetweetsWanted,\n                    friend.SourceRelationship.NotificationsEnabled);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/GeoDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    class GeoDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching by IP...\\n\");\n                        await SearchByIPAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking for geo...\\n\");\n                        await LookupGeoIDAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tFinding reverse geocode...\\n\");\n                        await LookupReverseGeocodeAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nGeo Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search by IP\");\n            Console.WriteLine(\"\\t 1. Lookup Geo by ID\");\n            Console.WriteLine(\"\\t 2. Lookup Reverse Geocode\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task SearchByIPAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                    (from geo in twitterCtx.Geo\n                     where geo.Type == GeoType.Search &&\n                           geo.IP == \"74.125.19.104\"\n                     select geo)\n                    .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n            {\n                Place place = geoResponse.Places.First();\n\n                Console.WriteLine(\n                    \"Name: {0}, Country: {1}, Type: {2}\",\n                    place.Name, place.Country, place.PlaceType); \n            }\n        }\n\n        static async Task LookupGeoIDAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.ID &&\n                       g.ID == \"5a110d312052166f\"\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n            {\n                Place place = geoResponse.Places.First();\n\n                Console.WriteLine(\n                    \"Name: {0}, Country: {1}, Type: {2}\",\n                    place.Name, place.Country, place.PlaceType);\n            }\n        }\n\n        static async Task LookupReverseGeocodeAsync(TwitterContext twitterCtx)\n        {\n            var geoResponse =\n                await\n                (from g in twitterCtx.Geo\n                 where g.Type == GeoType.Reverse &&\n                       g.Latitude == 37.78215 &&\n                       g.Longitude == -122.40060\n                 select g)\n                .SingleOrDefaultAsync();\n\n            if (geoResponse != null && geoResponse.Places != null)\n                geoResponse.Places.ForEach(place =>\n                    Console.WriteLine(\n                        \"Name: {0}, Country: {1}, Type: {2}\",\n                        place.Name, place.Country, place.PlaceType));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/HelpDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    class HelpDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting Rate Limits...\\n\");\n                        await GettingRateLimitsAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting languages...\\n\");\n                        await GetHelpLanguagesAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nHelp Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Rate Limits\");\n            Console.WriteLine(\"\\t 1. Get Languages\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GettingRateLimitsAsync(TwitterContext twitterCtx)\n        {\n            var helpResponse =\n                await\n                    (from help in twitterCtx.Help\n                     where help.Type == HelpType.RateLimits\n                     select help)\n                    .SingleOrDefaultAsync();\n\n            if (helpResponse != null && helpResponse.RateLimits != null)\n                foreach (var category in helpResponse.RateLimits)\n                {\n                    Console.WriteLine(\"\\nCategory: {0}\", category.Key);\n\n                    foreach (var limit in category.Value)\n                    {\n                        Console.WriteLine(\n                            \"\\n  Resource: {0}\\n    Remaining: {1}\\n    Reset: {2}\\n    Limit: {3}\",\n                            limit.Resource, limit.Remaining, limit.Reset, limit.Limit);\n                    }\n                }\n        }\n\n        static async Task GetHelpLanguagesAsync(TwitterContext twitterCtx)\n        {\n            var helpResult =\n                await\n                (from test in twitterCtx.Help\n                 where test.Type == HelpType.Languages\n                 select test)\n                .SingleOrDefaultAsync();\n\n            if (helpResult != null && helpResult.Languages != null)\n                helpResult.Languages.ForEach(lang => \n                    Console.WriteLine(\"{0}({1}): {2}\", lang.Name, lang.Code, lang.Status));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/LikeDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class LikeDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLiking tweet...\\n\");\n                        await LikeAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tUnliking tweet...\\n\");\n                        await UnlikeAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tLooking for Likes...\\n\");\n                        await LookupLikesAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting liking users...\\n\");\n                        await GetLikingUsersAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nLike Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Like a Tweet\");\n            Console.WriteLine(\"\\t 1. Unlike a Tweet\");\n            Console.WriteLine(\"\\t 2. Lookup Likes\");\n            Console.WriteLine(\"\\t 3. Liking Users\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LikeAsync(TwitterContext twitterCtx)\n        {\n            string tweetID = \"1371844879043723273\";\n            string? userID = twitterCtx.Authorizer?.CredentialStore?.UserID.ToString();\n\n            if (userID == null)\n            {\n                Console.WriteLine($\"{nameof(userID)} is null.\");\n                return;\n            }\n\n            LikedResponse? user = await twitterCtx.LikeAsync(userID, tweetID);\n\n            if (user?.Data != null)\n                Console.WriteLine(\"Is Liked: \" + user.Data.Liked);\n        }\n\n        static async Task UnlikeAsync(TwitterContext twitterCtx)\n        {\n            string? tweetID = \"1371844879043723273\";\n            string? userID = twitterCtx.Authorizer?.CredentialStore?.UserID.ToString();\n\n            if (userID == null)\n            {\n                Console.WriteLine($\"{nameof(userID)} is null.\");\n                return;\n            }\n\n            LikedResponse? user = await twitterCtx.UnlikeAsync(userID, tweetID);\n\n            if (user?.Data != null)\n                Console.WriteLine(\"Is Liked: \" + user.Data.Liked);\n        }\n\n        static async Task LookupLikesAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            LikeQuery? likeResponse =\n                await\n                    (from like in twitterCtx.Likes\n                     where\n                        like.Type == LikeType.Lookup &&\n                        like.ID == userID &&\n                        like.MediaFields == MediaField.AllFieldsExceptPermissioned &&\n                        like.PlaceFields == PlaceField.AllFields &&\n                        like.PollFields == PollField.AllFields &&\n                        like.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                        like.UserFields == UserField.AllFields\n                     select like)\n                    .SingleOrDefaultAsync();\n\n            if (likeResponse != null && likeResponse.Tweets != null)\n                likeResponse.Tweets.ForEach(tweet =>\n                        Console.WriteLine(tweet.Text));\n        }\n\n        static async Task GetLikingUsersAsync(TwitterContext twitterCtx)\n        {\n            string? tweetID = \"1371844879043723273\";\n            //string tweetID = \"1446476275246194697\";\n\n            TwitterUserQuery? response =\n                await\n                (from user in twitterCtx.TwitterUser\n                 where user.Type == UserType.Liking &&\n                       user.TweetID == tweetID\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (response?.Users != null)\n                response.Users.ForEach(user =>\n                    Console.WriteLine(\n                        $\"\\nID: {user.ID}\" +\n                        $\"\\nUsername: {user.Username}\" +\n                        $\"\\nName: {user.Name}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/ListDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class ListDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking up list...\\n\");\n                        await GetListAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting owned lists...\\n\");\n                        await GetOwnedListsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting meberships...\\n\");\n                        await GetListMembershipsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting members...\\n\");\n                        await GetListMembersAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tGetting followed lists...\\n\");\n                        await GetListsFollowedAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting list followers...\\n\");\n                        await GetListFollowersAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting pinned lists...\\n\");\n                        await GetPinnedListsAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tGetting list tweets...\\n\");\n                        await GetListTweetsAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tDeleting membership...\\n\");\n                        await DeleteMemberFromListAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tAdding follower...\\n\");\n                        await AddFollowerToListAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tDeleting follower...\\n\");\n                        await DeleteFollowerFromListAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tAdding member...\\n\");\n                        await AddMemberToListAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tDeleting list...\\n\");\n                        await DeleteListAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tUpdating list...\\n\");\n                        await UpdateListAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tCreating list...\\n\");\n                        await CreateListAsync(twitterCtx);\n                        break;\n                    case 'f':\n                    case 'F':\n                        Console.WriteLine(\"\\n\\tPinning list...\\n\");\n                        await PinListAsync(twitterCtx);\n                        break;\n                    case 'g':\n                    case 'G':\n                        Console.WriteLine(\"\\n\\tUnpinning list...\\n\");\n                        await UnpinListAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nList Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Lists by ID\");\n            Console.WriteLine(\"\\t 1. Get Lists Owned By User\");\n            Console.WriteLine(\"\\t 2. Get List Memberships\");\n            Console.WriteLine(\"\\t 3. Get List Members\");\n            Console.WriteLine(\"\\t 4. Get Lists Followed\");\n            Console.WriteLine(\"\\t 5. Get List Followers\");\n            Console.WriteLine(\"\\t 6. Get Pinned Lists\");\n            Console.WriteLine(\"\\t 7. Get List Tweets\");\n            Console.WriteLine(\"\\t 8. Delete List Membership\");\n            Console.WriteLine(\"\\t 9. Add Follower to List\");\n            Console.WriteLine(\"\\t A. DeleteFollower from List\");\n            Console.WriteLine(\"\\t B. Add Member to List\");\n            Console.WriteLine(\"\\t C. Delete List\");\n            Console.WriteLine(\"\\t D. Update List\");\n            Console.WriteLine(\"\\t E. Create List\");\n            Console.WriteLine(\"\\t F. Pin List\");\n            Console.WriteLine(\"\\t G. Unpin List\");\n\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetListAsync(TwitterContext twitterCtx)\n        {\n            const string ListID = \"898994036043689985\";\n\n            var response =\n                await\n                    (from lst in twitterCtx.List\n                     where lst.Type == ListType.Lookup &&\n                           lst.ListID == ListID\n                     select lst)\n                    .SingleOrDefaultAsync();\n\n            List? list = response?.Lists?.FirstOrDefault();\n            if (list != null)\n                Console.WriteLine(\n                    $\"ID: {list.ID}, Name: {list.Name}\");\n        }\n\n        static async Task GetOwnedListsAsync(TwitterContext twitterCtx)\n        {\n            const string UserID = \"15411837\";\n\n            var response =\n                await\n                    (from lst in twitterCtx.List\n                     where lst.Type == ListType.Owned &&\n                           lst.UserID == UserID &&\n                           lst.Expansions == ExpansionField.OwnerID &&\n                           lst.ListFields == ListField.AllFields &&\n                           lst.UserFields == UserField.AllFields &&\n                           lst.MaxResults == 2\n                     select lst)\n                    .SingleOrDefaultAsync();\n\n            List? list = response?.Lists?.FirstOrDefault();\n            if (list != null)\n                Console.WriteLine(\n                    $\"ID: {list.ID}, Description: {list.Description}\");\n        }\n\n        static async Task GetListMembershipsAsync(TwitterContext twitterCtx)\n        {\n            const string UserID = \"15411837\";\n\n            string? pageToken = string.Empty;\n            do\n            {\n                var response =\n                    await\n                    (from list in twitterCtx.List\n                     where list.Type == ListType.Member &&\n                           list.UserID == UserID &&\n                           list.ListFields == ListField.AllFields &&\n                           list.PaginationToken == pageToken\n                     select list)\n                    .SingleOrDefaultAsync();\n\n                List<List>? lists = response?.Lists;\n\n                if (lists != null)\n                    lists.ForEach(list =>\n                        Console.WriteLine(\n                            \"List Name: {0}, Description: {1}\",\n                            list.Name, list.Description));\n\n                pageToken = response?.Meta?.NextToken;\n\n            } while (pageToken is not null);\n        }\n\n        static async Task GetListMembersAsync(TwitterContext twitterCtx)\n        {\n            const string ListID = \"898994036043689985\";\n\n            var response =\n                await\n                (from list in twitterCtx.TwitterUser\n                 where list.Type == UserType.ListMembers &&\n                       list.ListID == ListID\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (response != null && response.Users != null)\n                response.Users.ForEach(user =>\n                    Console.WriteLine(\"Member: \" + user.Name));\n        }\n\n        static async Task GetListsFollowedAsync(TwitterContext twitterCtx)\n        {\n            const string UserID = \"15411837\";\n\n            var response =\n                await\n                    (from lst in twitterCtx.List\n                     where lst.Type == ListType.Following &&\n                           lst.UserID == UserID &&\n                           lst.Expansions == ExpansionField.OwnerID &&\n                           lst.ListFields == ListField.AllFields &&\n                           lst.UserFields == UserField.AllFields &&\n                           lst.MaxResults == 2\n                     select lst)\n                    .SingleOrDefaultAsync();\n\n            List<List>? lists = response?.Lists;\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"List Name: {0}, Description: {1}\",\n                        list.Name, list.Description));\n        }\n\n        static async Task GetListFollowersAsync(TwitterContext twitterCtx)\n        {\n            const string ListID = \"898994036043689985\";\n\n            var response =\n                await\n                (from list in twitterCtx.TwitterUser\n                 where list.Type == UserType.ListFollowers &&\n                       list.ListID == ListID\n                 select list)\n                .SingleOrDefaultAsync();\n\n            if (response != null && response.Users != null)\n                response.Users.ForEach(user =>\n                    Console.WriteLine(\"Follower: \" + user.Name));\n        }\n\n        static async Task GetPinnedListsAsync(TwitterContext twitterCtx)\n        {\n            const string UserID = \"15411837\";\n\n            var response =\n                await\n                    (from lst in twitterCtx.List\n                     where lst.Type == ListType.Pinned &&\n                           lst.UserID == UserID &&\n                           lst.Expansions == ExpansionField.OwnerID &&\n                           lst.ListFields == ListField.AllFields &&\n                           lst.UserFields == UserField.AllFields\n                     select lst)\n                    .SingleOrDefaultAsync();\n\n            List<List>? lists = response?.Lists;\n\n            if (lists != null)\n                lists.ForEach(list =>\n                    Console.WriteLine(\n                        \"List Name: {0}, Description: {1}\",\n                        list.Name, list.Description));\n        }\n\n        static async Task GetListTweetsAsync(TwitterContext twitterCtx)\n        {\n            const string ListID = \"898994036043689985\";\n\n            string? pageToken = string.Empty;\n            do\n            {\n                var response =\n                    await\n                    (from list in twitterCtx.Tweets\n                     where list.Type == TweetType.List &&\n                           list.ListID == ListID &&\n                           list.PaginationToken == pageToken\n                     select list)\n                    .SingleOrDefaultAsync();\n\n                List<Tweet>? tweets = response?.Tweets;\n\n                if (tweets != null)\n                    tweets.ForEach(tweet =>\n                        Console.WriteLine(\n                            $\"\\nID: {tweet.ID}\" +\n                            $\"\\nTweet: {tweet.Text}\"));\n\n                pageToken = response?.Meta?.NextToken;\n\n            } while (pageToken is not null);\n        }\n\n        static async Task DeleteMemberFromListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n            string userID = \"Linq2Twitr\";\n\n            ListResponse? list =\n                await twitterCtx.DeleteMemberFromListAsync(listID, userID);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"Is Member: {0}\", list.Data.IsMember);\n        }\n\n        static async Task AddFollowerToListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n            string userID = \"Linq2Twitr\";\n\n            ListResponse? list =\n                await twitterCtx.AddFollowerToListAsync(listID, userID);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"Following: {0}\", list.Data.Following);\n        }\n\n        static async Task DeleteFollowerFromListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n            string userID = \"Linq2Twitr\";\n\n            ListResponse? list =\n                await twitterCtx.DeleteFollowerFromListAsync(listID, userID);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"Following: {0}\", list.Data.Following);\n        }\n\n        static async Task AddMemberToListAsync(TwitterContext twitterCtx)\n        {\n            ListResponse? list =\n                await twitterCtx.AddMemberToListAsync(\"Linq2Twitr\", \"0\");\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"List ID: {0}, Name: {1}\",\n                    list.Data.ID, list.Data.Name);\n        }\n\n        static async Task DeleteListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n\n            ListResponse? list =\n                await twitterCtx.DeleteListAsync(listID);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"Is Deleted: {0}\", list.Data.Deleted);\n        }\n\n        static async Task UpdateListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n\n            ListResponse? list =\n                await twitterCtx.UpdateListAsync(listID, \"linq-to-twitter\", \"Test List\", isPrivate: false);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"List ID: {0}, Name: {1}\",\n                    list.Data.ID, list.Data.Name);\n        }\n\n        static async Task CreateListAsync(TwitterContext twitterCtx)\n        {\n            ListResponse? list =\n                await twitterCtx.CreateListAsync(\"linq-to-twitter\", \"This is a test\", isPrivate: true);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"List ID: {0}, Name: {1}\",\n                    list.Data.ID, list.Data.Name);\n        }\n\n        static async Task PinListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n            string userID = \"Linq2Twitr\";\n\n            ListResponse? list =\n                await twitterCtx.PinListAsync(listID, userID);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"Pinned: {0}\", list.Data.Pinned);\n        }\n\n        static async Task UnpinListAsync(TwitterContext twitterCtx)\n        {\n            string listID = \"0\";\n            string userID = \"Linq2Twitr\";\n\n            ListResponse? list =\n                await twitterCtx.UnpinListAsync(listID, userID);\n\n            if (list?.Data is not null)\n                Console.WriteLine(\"Pinned: {0}\", list.Data.Pinned);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/MediaDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class MediaDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tUploading a video...\\n\");\n                        await UploadVideoAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tCreating metadata...\\n\");\n                        await CreateMetadataAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tUploading single image...\\n\");\n                        await UploadSingleImageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUploading multiple images...\\n\");\n                        await UploadMultipleImagesAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nMedia Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Upload a Video\");\n            Console.WriteLine(\"\\t 1. Create Metadata\");\n            Console.WriteLine(\"\\t 2. Upload a Single Image\");\n            Console.WriteLine(\"\\t 3. Upload Muliple Images\");\n\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task UploadVideoAsync(TwitterContext twitterCtx)\n        {\n            string text =\n                \"Testing video upload tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\..\\images\\TwitterTest.mp4\");\n            const string JoeMayoUserID = \"15411837\";\n            var taggedUserIds = new string[] { JoeMayoUserID };\n            string mediaType = \"video/mp4\";\n            string mediaCategory = \"tweet_video\";\n\n            Media? media = await twitterCtx.UploadMediaAsync(imageBytes, mediaType, mediaCategory);\n\n            if (media == null)\n            {\n                Console.WriteLine(\"Invalid Media returned from UploadMediaAsync\");\n                return;\n            }\n\n            Media? mediaStatusResponse = null;\n            do\n            {\n                if (mediaStatusResponse != null)\n                {\n                    int checkAfterSeconds = mediaStatusResponse?.ProcessingInfo?.CheckAfterSeconds ?? 0;\n                    Console.WriteLine($\"Twitter video testing in progress - waiting {checkAfterSeconds} seconds.\");\n                    await Task.Delay(checkAfterSeconds * 1000);\n                }\n\n                mediaStatusResponse =\n                    await\n                    (from stat in twitterCtx.Media\n                     where stat.Type == MediaType.Status &&\n                           stat.MediaID == media.MediaID\n                     select stat)\n                    .SingleOrDefaultAsync();\n            } while (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.InProgress);\n\n            if (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.Succeeded)\n            {\n                Tweet? tweet = await twitterCtx.TweetMediaAsync(text, new List<string> { media.MediaID.ToString() }, taggedUserIds);\n\n                if (tweet != null)\n                    Console.WriteLine($\"Tweet sent: {tweet.Text}\");\n            }\n            else\n            {\n                MediaError? error = mediaStatusResponse?.ProcessingInfo?.Error;\n\n                if (error != null)\n                    Console.WriteLine($\"Request failed - Code: {error.Code}, Name: {error.Name}, Message: {error.Message}\");\n            }\n        }\n\n        static async Task CreateMetadataAsync(TwitterContext twitterCtx)\n        {\n            string text =\n                \"Testing video upload tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n\n            byte[] imageBytes = File.ReadAllBytes(@\"..\\..\\..\\images\\TwitterTest.mp4\");\n            const string JoeMayoUserID = \"15411837\";\n            var taggedUserIds = new string[] { JoeMayoUserID };\n            string mediaType = \"video/mp4\";\n            string mediaCategory = \"tweet_video\";\n\n            Media? media = await twitterCtx.UploadMediaAsync(imageBytes, mediaType, mediaCategory);\n\n            if (media == null)\n            {\n                Console.WriteLine(\"Invalid Media returned from UploadMediaAsync\");\n                return;\n            }\n\n            Media? mediaStatusResponse = null;\n            do\n            {\n                if (mediaStatusResponse != null)\n                {\n                    int checkAfterSeconds = mediaStatusResponse?.ProcessingInfo?.CheckAfterSeconds ?? 0;\n                    Console.WriteLine($\"Twitter video testing in progress - waiting {checkAfterSeconds} seconds.\");\n                    await Task.Delay(checkAfterSeconds * 1000);\n                }\n\n                mediaStatusResponse =\n                    await\n                    (from stat in twitterCtx.Media\n                     where stat.Type == MediaType.Status &&\n                           stat.MediaID == media.MediaID\n                     select stat)\n                    .SingleOrDefaultAsync();\n            } while (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.InProgress);\n\n            if (mediaStatusResponse?.ProcessingInfo?.State == MediaProcessingInfo.Succeeded)\n            {\n                await twitterCtx.CreateMediaMetadataAsync(mediaStatusResponse.MediaID, \"LINQ to Twitter Alt Text Test\");\n\n                Tweet? tweet = await twitterCtx.TweetMediaAsync(text, new List<string> { media.MediaID.ToString() }, taggedUserIds);\n\n                if (tweet != null)\n                    Console.WriteLine($\"Tweet sent: {tweet.Text}\");\n            }\n            else\n            {\n                MediaError? error = mediaStatusResponse?.ProcessingInfo?.Error;\n\n                if (error != null)\n                    Console.WriteLine($\"Request failed - Code: {error.Code}, Name: {error.Name}, Message: {error.Message}\");\n            }\n        }\n\n        static async Task UploadSingleImageAsync(TwitterContext twitterCtx)\n        {\n            var taggedUserIds = new List<string> { \"3265644348\", \"15411837\" };\n            string text =\n                \"Testing single-image tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n            string mediaCategory = \"tweet_image\";\n\n            Media? media = await twitterCtx.UploadMediaAsync(\n                File.ReadAllBytes(@\"..\\..\\..\\images\\200xColor_2.png\"),\n                \"image/png\",\n                mediaCategory);\n\n            if (media == null)\n            {\n                Console.WriteLine(\"Problem uploading media.\");\n                return;\n            }\n\n            Tweet? tweet = await twitterCtx.TweetMediaAsync(text, new List<string> { media.MediaID.ToString() }, taggedUserIds);\n\n            if (tweet != null)\n                Console.WriteLine(\"Tweet sent: \" + tweet.Text);\n        }\n\n        static async Task UploadMultipleImagesAsync(TwitterContext twitterCtx)\n        {\n            var taggedUserIds = new List<string> { \"3265644348\", \"15411837\" };\n            string text =\n                \"Testing multi-image tweet #Linq2Twitter £ \" +\n                DateTime.Now.ToString(CultureInfo.InvariantCulture);\n            string mediaCategory = \"tweet_image\";\n\n            var imageUploadTasks =\n                new List<Task<Media?>>\n                {\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\..\\images\\200xColor_2.png\"), \"image/png\", mediaCategory),\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\..\\images\\WP_000003.jpg\"), \"image/jpg\", mediaCategory),\n                    twitterCtx.UploadMediaAsync(File.ReadAllBytes(@\"..\\..\\..\\images\\13903749474_86bd1290de_o.jpg\"), \"image/jpg\", mediaCategory),\n                };\n\n            await Task.WhenAll(imageUploadTasks);\n\n            List<string> mediaIds =\n                (from tsk in imageUploadTasks\n                 select tsk.Result.MediaID.ToString())\n                .ToList();\n\n            Tweet? tweet = await twitterCtx.TweetMediaAsync(text, mediaIds, taggedUserIds);\n\n            if (tweet != null)\n                Console.WriteLine($\"Tweet sent: {tweet.Text}\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/MutesDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class MuteDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking for muted users...\\n\");\n                        await LookupMutesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tMuting...\\n\");\n                        await MuteUserAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await UnmuteUserAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n \n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup Muted User IDs\");\n            Console.WriteLine(\"\\t 1. Mute User\");\n            Console.WriteLine(\"\\t 2. Unmute User\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupMutesAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            var muteResponse =\n                await\n                (from mute in twitterCtx.Mute\n                 where mute.Type == MuteType.Muted &&\n                       mute.ID == userID\n                 select mute)\n                .SingleOrDefaultAsync();\n\n            muteResponse?.Users?.ForEach(\n                user => Console.WriteLine($\"{user.ID}: {user.Username} - {user.Name}\"));\n        }\n\n        static async Task MuteUserAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Mute: \");\n            string? userName = Console.ReadLine() ?? \"\";\n\n            TwitterUserQuery? userResponse =\n                await\n                (from usr in twitterCtx.TwitterUser\n                 where usr.Type == UserType.UsernameLookup &&\n                       usr.Usernames == userName\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            string? targetUserID = userResponse?.Users?.FirstOrDefault()?.ID;\n            string? sourceUserID = twitterCtx.Authorizer?.CredentialStore?.UserID.ToString();\n\n            if (targetUserID == null || sourceUserID == null)\n            {\n                Console.WriteLine($\"Either {nameof(targetUserID)} or {nameof(sourceUserID)} is null.\");\n                return;\n            }\n\n            MuteResponse? muted = await twitterCtx.MuteAsync(sourceUserID, targetUserID);\n\n            if (muted?.Data != null)\n                Console.WriteLine(\"Is Muted: \" + muted.Data.Muting);\n        }\n\n        static async Task UnmuteUserAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"User Screen Name to Unmute: \");\n            string? userName = Console.ReadLine() ?? \"\";\n\n            TwitterUserQuery? userResponse =\n                await\n                (from usr in twitterCtx.TwitterUser\n                 where usr.Type == UserType.UsernameLookup &&\n                       usr.Usernames == userName\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            string? targetUserID = userResponse?.Users?.FirstOrDefault()?.ID;\n            string? sourceUserID = twitterCtx.Authorizer?.CredentialStore?.UserID.ToString();\n\n            if (targetUserID == null || sourceUserID == null)\n            {\n                Console.WriteLine($\"Either {nameof(targetUserID)} or {nameof(sourceUserID)} is null.\");\n                return;\n            }\n\n            MuteResponse? muted = await twitterCtx.UnMuteAsync(sourceUserID, targetUserID);\n\n            if (muted?.Data != null)\n                Console.WriteLine(\"Is Muted: \" + muted.Data.Muting);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/OAuth.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class OAuth\n    {\n        public static IAuthorizer ChooseAuthenticationStrategy()\n        {\n            Console.WriteLine(\"Authentication Strategy:\\n\\n\");\n\n            Console.WriteLine(\"  1 - Pin (default)\");\n            Console.WriteLine(\"  2 - Application-Only\");\n            Console.WriteLine(\"  3 - Single User\");\n            Console.WriteLine(\"  4 - XAuth\");\n            Console.WriteLine(\"  5 - OAuth 2.0\");\n\n            Console.Write(\"\\nPlease choose (1, 2, 3, 4, or 5): \");\n            ConsoleKeyInfo input = Console.ReadKey();\n            Console.WriteLine(\"\");\n\n            IAuthorizer auth = input.KeyChar switch\n            {\n                '1' => DoPinOAuth(),\n                '2' => DoApplicationOnlyAuth(),\n                '3' => DoSingleUserAuth(),\n                '4' => DoXAuth(),\n                '5' => DoOAuth2ConfidentialAuth(),\n                _ => DoPinOAuth(),\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoPinOAuth()\n        {\n            var auth = new PinAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n                },\n                GoToTwitterAuthorization = pageLink =>\n                {\n                    var psi = new ProcessStartInfo\n                    {\n                        FileName = pageLink,\n                        UseShellExecute = true\n                    };\n                    Process.Start(psi);\n                },\n                GetPin = () =>\n                {\n                    Console.WriteLine(\n                        \"\\nAfter authorizing this application, Twitter \" +\n                        \"will give you a 7-digit PIN Number.\\n\");\n                    Console.Write(\"Enter the PIN number here: \");\n                    return Console.ReadLine() ?? string.Empty;\n                }\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoApplicationOnlyAuth()\n        {\n            var auth = new ApplicationOnlyAuthorizer()\n            {\n                CredentialStore = new InMemoryCredentialStore\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n                },\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoSingleUserAuth()\n        {\n            var auth = new SingleUserAuthorizer\n            {\n                CredentialStore = new SingleUserInMemoryCredentialStore\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\n                    AccessToken = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessToken),\n                    AccessTokenSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessTokenSecret)\n                }\n            };\n\n            return auth;\n        }\n\n        static IAuthorizer DoXAuth()\n        {\n            var auth = new XAuthAuthorizer\n            {\n                CredentialStore = new XAuthCredentials\n                {\n                    ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\n                    UserName = \"YourUserName\",\n                    Password = \"YourPassword\"\n                }\n            };\n\n            return auth;\n        }\n\n        // Not yet implemented\n        static IAuthorizer DoOAuth2ConfidentialAuth()\n        {\n            var auth = new OAuth2Authorizer()\n            {\n                CredentialStore = new OAuth2CredentialStore\n                {\n                    ClientID = Environment.GetEnvironmentVariable(OAuthKeys.TwitterClientID),\n                    ClientSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterClientSecret),\n                    Scopes = new List<string>\n                    {\n                        \"tweet.read\",\n                        \"tweet.write\",\n                        \"tweet.moderate.write\",\n                        \"users.read\",\n                        \"follows.read\",\n                        \"follows.write\",\n                        \"offline.access\",\n                        \"space.read\",\n                        \"mute.read\",\n                        \"mute.write\",\n                        \"like.read\",\n                        \"like.write\",\n                        \"block.read\",\n                        \"block.write\",\n                        \"bookmark.read\",\n                        \"bookmark.write\"\n                    },\n                    RedirectUri = \"http://127.0.0.1:8599\"\n                },\n                GoToTwitterAuthorization = pageLink =>\n                {\n                    var psi = new ProcessStartInfo\n                    {\n                        FileName = pageLink,\n                        UseShellExecute = true\n                    };\n                    Process.Start(psi);\n                },\n                HtmlResponseString = \"<div>Awesome! Now you can use the app.</div>\"\n            };\n\n            return auth;\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/Program.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Threading.Tasks;\nusing ConsoleDemo.CSharp;\nusing LinqToTwitter;\nusing LinqToTwitter.OAuth;\n\nServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;\n\ntry\n{\n    await DoDemosAsync();\n}\ncatch (Exception ex)\n{\n    Console.WriteLine(ex.ToString());\n}\n\nConsole.Write(\"\\nPress any key to close console window...\");\nConsole.ReadKey(true);\n\nstatic async Task DoDemosAsync()\n{\n    IAuthorizer auth = OAuth.ChooseAuthenticationStrategy();\n\n    await auth.AuthorizeAsync();\n\n    // For OAuth 1.0A Only: This is how you access credentials after authorization.\n    // The oauthToken and oauthTokenSecret do not expire.\n    // You can use the userID to associate the credentials with the user.\n    // You can save credentials any way you want - database, isolated storage, etc. - it's up to you.\n    // You can retrieve and load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n    // When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n    //\n    //var credentials = auth.CredentialStore;\n    //string oauthToken = credentials.OAuthToken;\n    //string oauthTokenSecret = credentials.OAuthTokenSecret;\n    //string screenName = credentials.ScreenName;\n    //ulong userID = credentials.UserID;\n    //\n    // For OAuth 2.0 (preferred), you can get credentials like this:\n    //var credentials = auth.CredentialStore as IOAuth2CredentialStore;\n    //string accessToken = credentials.AccessToken;\n    //string refreshToken = credentials.RefreshToken\n    //\n\n    var twitterCtx = new TwitterContext(auth);\n    char key;\n\n    do\n    {\n        ShowMenu();\n\n        key = Console.ReadKey(true).KeyChar;\n\n        switch (char.ToUpper(key))\n        {\n            case '0':\n                Console.WriteLine(\"\\n\\tRunning Account Demos...\\n\");\n                await AccountDemos.RunAsync(twitterCtx);\n                break;\n            case '1':\n                Console.WriteLine(\"\\n\\tRunning Account Activity Demos...\\n\");\n                await AccountActivityDemos.RunAsync(twitterCtx);\n                break;\n            case '2':\n                Console.WriteLine(\"\\n\\tRunning Block Demos...\\n\");\n                await BlockDemos.RunAsync(twitterCtx);\n                break;\n            case '3':\n                Console.WriteLine(\"\\n\\tRunning Direct Message Events Demos...\\n\");\n                await DirectMessageEventsDemos.RunAsync(twitterCtx);\n                break;\n            case '4':\n                Console.WriteLine(\"\\n\\tRunning Friendship Demos...\\n\");\n                await FriendshipDemos.RunAsync(twitterCtx);\n                break;\n            case '5':\n                Console.WriteLine(\"\\n\\tRunning Geo Demos...\\n\");\n                await GeoDemos.RunAsync(twitterCtx);\n                break;\n            case '6':\n                Console.WriteLine(\"\\n\\tRunning Help Demos...\\n\");\n                await HelpDemos.RunAsync(twitterCtx);\n                break;\n            case '7':\n                Console.WriteLine(\"\\n\\tRunning List Demos...\\n\");\n                await ListDemos.RunAsync(twitterCtx);\n                break;\n            case '8':\n                Console.WriteLine(\"\\n\\tRunning Media Demos...\\n\");\n                await MediaDemos.RunAsync(twitterCtx);\n                break;\n            case '9':\n                Console.WriteLine(\"\\n\\tRunning Mutes Demos...\\n\");\n                await MuteDemos.RunAsync(twitterCtx);\n                break;\n            case 'A':\n                Console.WriteLine(\"\\n\\tRunning Raw Demos...\\n\");\n                await RawDemos.RunAsync(twitterCtx);\n                break;\n            case 'B':\n                Console.WriteLine(\"\\n\\tRunning Saved Search Demos...\\n\");\n                await SavedSearchDemos.RunAsync(twitterCtx);\n                break;\n            case 'C':\n                Console.WriteLine(\"\\n\\tRunning Search Demos...\\n\");\n                await SearchDemos.RunAsync(twitterCtx);\n                break;\n            case 'D':\n                Console.WriteLine(\"\\n\\tRunning Status Demos...\\n\");\n                await StatusDemos.RunAsync(twitterCtx);\n                break;\n            case 'E':\n                Console.WriteLine(\"\\n\\tRunning Stream Demos...\\n\");\n                await StreamDemos.RunAsync(twitterCtx);\n                break;\n            case 'F':\n                Console.WriteLine(\"\\n\\tRunning Trend Demos...\\n\");\n                await TrendDemos.RunAsync(twitterCtx);\n                break;\n            case 'G':\n                Console.WriteLine(\"\\n\\tRunning User Demos...\\n\");\n                await UserDemos.RunAsync(twitterCtx);\n                break;\n            case 'H':\n                Console.WriteLine(\"\\n\\tRunning Welcome Message Demos...\\n\");\n                await WelcomeMessageDemos.RunAsync(twitterCtx);\n                break;\n            case 'I':\n                Console.WriteLine(\"\\n\\tRunning Tweet Demos...\\n\");\n                await TweetDemos.RunAsync(twitterCtx);\n                break;\n            case 'J':\n                Console.WriteLine(\"\\n\\tRunning Compliance Demos...\\n\");\n                await ComplianceDemos.RunAsync(twitterCtx);\n                break;\n            case 'K':\n                Console.WriteLine(\"\\n\\tRunning Like Demos...\\n\");\n                await LikeDemos.RunAsync(twitterCtx);\n                break;\n            case 'L':\n                Console.WriteLine(\"\\n\\tRunning Counts Demos...\\n\");\n                await CountsDemos.RunAsync(twitterCtx);\n                break;\n            case 'M':\n                Console.WriteLine(\"\\n\\tRunning Spaces Demos...\\n\");\n                await SpacesDemos.RunAsync(twitterCtx);\n                break;\n            case 'N':\n                Console.WriteLine(\"\\n\\tRunning Bookmark Demos...\\n\");\n                await BookmarkDemos.RunAsync(twitterCtx);\n                break;\n            case 'Q':\n                Console.WriteLine(\"\\nQuitting...\\n\");\n                break;\n            default:\n                Console.WriteLine(key + \" is unknown\");\n                break;\n        }\n\n    } while (char.ToUpper(key) != 'Q');\n}\n\nstatic void ShowMenu()\n{\n    Console.WriteLine(\"\\nPlease select category:\\n\");\n\n    Console.WriteLine(\"\\t 0. Account Demos\");\n    Console.WriteLine(\"\\t 1. Account Activity Demos\");\n    Console.WriteLine(\"\\t 2. Block Demos\");\n    Console.WriteLine(\"\\t 3. Direct Message Event Demos\");\n    Console.WriteLine(\"\\t 4. Friendship Demos\");\n    Console.WriteLine(\"\\t 5. Geo Demos\");\n    Console.WriteLine(\"\\t 6. Help Demos\");\n    Console.WriteLine(\"\\t 7. List Demos\");\n    Console.WriteLine(\"\\t 8. Media Demos\");\n    Console.WriteLine(\"\\t 9. Mutes Demos\");\n    Console.WriteLine(\"\\t A. Raw Demos\");\n    Console.WriteLine(\"\\t B. Saved Search Demos\");\n    Console.WriteLine(\"\\t C. Search Demos\");\n    Console.WriteLine(\"\\t D. Status Demos\");\n    Console.WriteLine(\"\\t E. Stream Demos\");\n    Console.WriteLine(\"\\t F. Trend Demos\");\n    Console.WriteLine(\"\\t G. User Demos\");\n    Console.WriteLine(\"\\t H. Welcome Message Demos\");\n    Console.WriteLine(\"\\t I. Tweet Demos\");\n    Console.WriteLine(\"\\t J. Compliance Demos\");\n    Console.WriteLine(\"\\t K. Like Demos\");\n    Console.WriteLine(\"\\t L. Counts Demos\");\n    Console.WriteLine(\"\\t M. Spaces Demos\");\n    Console.WriteLine(\"\\t N. Bookmark Demos\");\n    Console.WriteLine();\n    Console.Write(\"\\t Q. End Program\");\n}"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/RawDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    class RawDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching Recent Tweets...\\n\");\n                        await PerformRecentSearchRawAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking for liking users...\\n\");\n                        await GetUsersWhoLikedATweetAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tTweeting...\");\n                        await TweetRawAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nRaw Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Perform Recent Search (Query)\");\n            Console.WriteLine(\"\\t 1. Users Liking Tweets (Query)\");\n            Console.WriteLine(\"\\t 2. Update Status (Command)\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task PerformRecentSearchRawAsync(TwitterContext twitterCtx)\n        {\n            _ = twitterCtx ?? throw new ArgumentNullException(nameof(twitterCtx));\n\n            string unencodedStatus = \"JoeMayo\";\n            string encodedStatus = Uri.EscapeDataString(unencodedStatus);\n            string queryString = \"tweets/search/recent?query=\" + encodedStatus;\n\n            string? previousBaseUrl = twitterCtx.BaseUrl;\n            twitterCtx.BaseUrl = \"https://api.twitter.com/2/\";\n\n            var rawResult =\n                await\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == queryString\n                 select raw)\n                .SingleOrDefaultAsync();\n\n            if (rawResult != null)\n                Console.WriteLine(\n                    \"Response from Twitter: \\n\\n\" + rawResult.Response);\n\n            twitterCtx.BaseUrl = previousBaseUrl;\n        }\n\n        static async Task GetUsersWhoLikedATweetAsync(TwitterContext twitterCtx)\n        {\n            string tweetID = \"1529204113623330816\";\n            string queryString = $\"/tweets/{tweetID}/liking_users\";\n\n            var rawResult =\n                await\n                (from raw in twitterCtx.RawQuery\n                 where raw.QueryString == queryString\n                 select raw)\n                .SingleOrDefaultAsync();\n\n            if (rawResult != null)\n                Console.WriteLine(\n                    \"Response from Twitter: \\n\\n\" + rawResult.Response);\n        }\n\n        static async Task TweetRawAsync(TwitterContext twitterCtx)\n        {\n            string status = \n                \"Testing LINQ to Twitter Raw Interface - \" + \n                DateTime.Now.ToString() + \" #Linq2Twitter\";\n            var parameters = new Dictionary<string, string?>\n            {\n                { \"status\", status }\n            };\n\n            string queryString = \"/statuses/update.json\";\n\n            string result = \n                await twitterCtx.ExecuteRawAsync(\n                    queryString, parameters, HttpMethod.Post);\n\n            if (result != null)\n                Console.WriteLine(\n                    \"\\nResponse from update status: \\n\\n\\t\" + result);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/SavedSearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    class SavedSearchDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing saved searches...\\n\");\n                        await ShowSavedSearchesAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing saved search...\\n\");\n                        await ShowSavedSearchAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tCreating...\\n\");\n                        await CreateSavedSearchAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tDeleting...\\n\");\n                        await DestroySavedSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSaved Search Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Show Saved Searches\");\n            Console.WriteLine(\"\\t 1. Show Saved Search\");\n            Console.WriteLine(\"\\t 2. Create Saved Search\");\n            Console.WriteLine(\"\\t 3. Destroy Saved Search\");\n            Console.WriteLine();\n            Console.WriteLine(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task ShowSavedSearchesAsync(TwitterContext twitterCtx)\n        {\n            var savedSearches =\n                await\n                    (from search in twitterCtx.SavedSearch\n                     where search.Type == SavedSearchType.Searches\n                     select search)\n                    .ToListAsync();\n\n            if (savedSearches != null)\n                savedSearches.ForEach(\n                    search => Console.WriteLine(\"Search: \" + search.Query));\n        }\n\n        static async Task ShowSavedSearchAsync(TwitterContext twitterCtx)\n        {\n            ulong savedSearchID = 306668698;\n\n            var savedSearch =\n                await\n                (from search in twitterCtx.SavedSearch\n                 where search.Type == SavedSearchType.Show &&\n                       search.ID == savedSearchID\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.ID, savedSearch.Name);\n        }\n\n        static async Task CreateSavedSearchAsync(TwitterContext twitterCtx)\n        {\n            SavedSearch? savedSearch = \n                await twitterCtx.CreateSavedSearchAsync(\"linq\");\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.IDResponse, savedSearch.Query);\n        }\n\n        static async Task DestroySavedSearchAsync(TwitterContext twitterCtx)\n        {\n            ulong savedSearchID = 0;\n\n            SavedSearch? savedSearch = \n                await twitterCtx.DestroySavedSearchAsync(savedSearchID);\n\n            if (savedSearch != null)\n                Console.WriteLine(\n                    \"ID: {0}, Search: {1}\", \n                    savedSearch.ID, savedSearch.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/SearchDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class SearchDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoSearchAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoPagedSearchAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoRecentSearchAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoFullSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSearch Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search\");\n            Console.WriteLine(\"\\t 1. Paged Search\");\n            Console.WriteLine(\"\\t 2. Recent Tweets Search\");\n            Console.WriteLine(\"\\t 3. Full Tweets Search\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoSearchAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"linq to\";\n            //string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter OR JoeMayo\";\n            //searchTerm = \"кот (\";\n\n            Search? searchResponse =\n                await\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == searchTerm //&&\n                       //search.IncludeEntities == true &&\n                       //search.TweetMode == TweetMode.Extended\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Statuses != null)\n                searchResponse.Statuses.ForEach(tweet =>\n                    Console.WriteLine(\n                        \"\\n  User: {0} ({1})\\n  Tweet: {2}\",\n                        tweet.User?.ScreenNameResponse,\n                        tweet.User?.UserIDResponse,\n                        tweet.Text ?? tweet.FullText));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoPagedSearchAsync(TwitterContext twitterCtx)\n        {\n            const int MaxSearchEntriesToReturn = 100;\n            const int SearchRateLimit = 180;\n\n            string searchTerm = \"twitter\";\n\n            // oldest id you already have for this search term\n            ulong sinceID = 1;\n\n            // used after the first query to track current session\n            ulong maxID;\n\n            var combinedSearchResults = new List<Status>();\n\n            List<Status>? searchResponse =\n                await\n                (from search in twitterCtx.Search\n                 where search.Type == SearchType.Search &&\n                       search.Query == searchTerm &&\n                       search.Count == MaxSearchEntriesToReturn &&\n                       search.SinceID == sinceID &&\n                       search.TweetMode == TweetMode.Extended\n                 select search.Statuses)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse != null)\n            {\n                combinedSearchResults.AddRange(searchResponse);\n                ulong previousMaxID = ulong.MaxValue;\n                do\n                {\n                    // one less than the newest id you've just queried\n                    maxID = searchResponse.Min(status => status.StatusID) - 1;\n\n                    Debug.Assert(maxID < previousMaxID);\n                    previousMaxID = maxID;\n\n                    searchResponse =\n                        await\n                        (from search in twitterCtx.Search\n                         where search.Type == SearchType.Search &&\n                               search.Query == searchTerm &&\n                               search.Count == MaxSearchEntriesToReturn &&\n                               search.MaxID == maxID &&\n                               search.SinceID == sinceID &&\n                               search.TweetMode == TweetMode.Extended\n                         select search.Statuses)\n                        .SingleOrDefaultAsync();\n\n                    if (searchResponse == null) break;\n\n                    combinedSearchResults.AddRange(searchResponse!);\n                } while (searchResponse.Any() && combinedSearchResults.Count < SearchRateLimit);\n\n                combinedSearchResults.ForEach(tweet =>\n                    Console.WriteLine(\n                        \"\\n  User: {0} ({1})\\n  Tweet: {2}\",\n                        tweet.User?.ScreenNameResponse,\n                        tweet.User?.UserIDResponse,\n                        tweet.Text ?? tweet.FullText));\n            }\n            else\n            {\n                Console.WriteLine(\"No entries found.\");\n            }\n\n        }\n\n        static async Task DoRecentSearchAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter OR JoeMayo\";\n            searchTerm = \"Twitter\";\n\n            // default is id and text and this also brings in created_at and geo\n            string tweetFields =\n                string.Join(\",\",\n                    new string[]\n                    {\n                        TweetField.CreatedAt,\n                        TweetField.ID,\n                        TweetField.Text,\n                        TweetField.Geo\n                    });\n\n            TwitterSearch? searchResponse =\n                await\n                (from search in twitterCtx.TwitterSearch\n                 where search.Type == SearchType.RecentSearch &&\n                       search.Query == searchTerm &&\n                       search.MaxResults == 100 &&\n                       search.SortOrder == SearchSortOrder.Relevancy &&\n                       search.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       search.Expansions == ExpansionField.AllTweetFields &&\n                       search.MediaFields == MediaField.AllFieldsExceptPermissioned &&\n                       search.PlaceFields == PlaceField.AllFields &&\n                       search.PollFields == PollField.AllFields &&\n                       search.UserFields == UserField.AllFields\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Tweets != null)\n                searchResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoFullSearchAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"\\\"LINQ to Twitter\\\" OR Linq2Twitter OR LinqToTwitter OR JoeMayo\";\n\n            // default is id and text and this also brings in created_at and geo\n            string tweetFields =\n                string.Join(\",\",\n                    new string[]\n                    {\n                        TweetField.CreatedAt,\n                        TweetField.ID,\n                        TweetField.Text,\n                        TweetField.Geo\n                    });\n\n            TwitterSearch? searchResponse =\n                await\n                (from search in twitterCtx.TwitterSearch\n                 where search.Type == SearchType.FullSearch &&\n                       search.Query == searchTerm &&\n                       search.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       search.Expansions == ExpansionField.AllTweetFields &&\n                       search.MediaFields == MediaField.AllFieldsExceptPermissioned &&\n                       search.PlaceFields == PlaceField.AllFields &&\n                       search.PollFields == PollField.AllFields &&\n                       search.UserFields == UserField.AllFields\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Tweets != null)\n                searchResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/SpacesDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class SpacesDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await DoSearchAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting by creator IDs...\\n\");\n                        await DoByCreatorIdsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting by space IDs...\\n\");\n                        await DoBySpaceIdsAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting space buyers...\");\n                        await DoSpaceBuyerSearchAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tGetting space tweets...\");\n                        await DoSpaceTweetsSearchAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nSearch Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Search\");\n            Console.WriteLine(\"\\t 1. Get by Creator IDs\");\n            Console.WriteLine(\"\\t 2. Get by Space IDs\");\n            Console.WriteLine(\"\\t 3. Get space buyers\");\n            Console.WriteLine(\"\\t 4. Get space tweets\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoByCreatorIdsAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please enter one or more creator (user) IDs (comma-separated): \");\n            string? creatorIds = Console.ReadLine();\n\n            SpacesQuery? searchResponse =\n                await\n                (from search in twitterCtx.Spaces\n                 where search.Type == SpacesType.ByCreatorID &&\n                       search.CreatorIds == creatorIds &&\n                       search.Expansions == ExpansionField.AllSpaceFields &&\n                       search.SpaceFields == SpaceField.AllFields &&\n                       search.TopicFields == TopicField.AllFields &&\n                       search.UserFields == UserField.AllFields\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Spaces != null)\n                searchResponse.Spaces.ForEach(space =>\n                    Console.WriteLine(\n                        \"\\n  Creator ID: {0}\" +\n                        \"\\n  Space ID: {1}\" +\n                        \"\\n  Date: {2}\",\n                        space.CreatorID,\n                        space.ID,\n                        space.CreatedAt));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoBySpaceIdsAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please enter one or more space IDs (comma-separated): \");\n            string? spaceIds = Console.ReadLine();\n\n            SpacesQuery? searchResponse =\n                await\n                (from search in twitterCtx.Spaces\n                 where search.Type == SpacesType.BySpaceID &&\n                       search.SpaceIds == spaceIds &&\n                       search.Expansions == ExpansionField.AllSpaceFields &&\n                       search.SpaceFields == SpaceField.AllFields &&\n                       search.TopicFields == TopicField.AllFields &&\n                       search.UserFields == UserField.AllFields\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Spaces != null)\n                searchResponse.Spaces.ForEach(space =>\n                    Console.WriteLine(\n                        \"\\n  Creator ID: {0}\" +\n                        \"\\n  Space ID: {1}\" +\n                        \"\\n  Date: {2}\",\n                        space.CreatorID,\n                        space.ID,\n                        space.CreatedAt));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoSearchAsync(TwitterContext twitterCtx)\n        {\n            string searchTerm = \"twitter\";\n            //searchTerm = \"кот (\";\n\n            SpacesQuery? searchResponse =\n                await\n                (from search in twitterCtx.Spaces\n                 where search.Type == SpacesType.Search &&\n                       search.Query == searchTerm &&\n                       search.MaxResults == 100 &&\n                       search.Expansions == ExpansionField.AllSpaceFields &&\n                       search.SpaceFields == SpaceField.AllFields &&\n                       search.State == SpaceState.All &&\n                       search.TopicFields == TopicField.AllFields &&\n                       search.UserFields == UserField.AllFields\n                 select search)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse?.Spaces != null)\n                searchResponse.Spaces.ForEach(space =>\n                    Console.WriteLine(\n                        \"\\n  Creator ID: {0}\" +\n                        \"\\n  Space ID: {1}\" +\n                        \"\\n  Date: {2}\",\n                        space.CreatorID,\n                        space.ID,\n                        space.CreatedAt));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoSpaceBuyerSearchAsync(TwitterContext twitterCtx)\n        {\n            TwitterUserQuery? searchResponse =\n                await\n                (from space in twitterCtx.TwitterUser\n                 where space.Type == UserType.SpaceBuyers &&\n                       space.SpaceID == \"1DXxyRYNejbKM\" &&\n                       space.Expansions == ExpansionField.AllTweetFields &&\n                       space.MediaFields == MediaField.AllFieldsExceptPermissioned &&\n                       space.PlaceFields == PlaceField.AllFields &&\n                       space.PollFields == PollField.AllFields &&\n                       space.UserFields == UserField.AllFields &&\n                       space.TweetFields == TweetField.AllFieldsExceptPermissioned\n                 select space)\n                .SingleOrDefaultAsync();\n\n            if (searchResponse != null)\n                searchResponse.Users?.ForEach(user =>\n                    Console.WriteLine(\"Name: \" + user.Username));\n        }\n\n        static async Task DoSpaceTweetsSearchAsync(TwitterContext twitterCtx)\n        {\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.SpaceTweets &&\n                       tweet.SpaceID == \"1DXxyRYNejbKM\" &&\n                       tweet.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       tweet.Expansions == ExpansionField.AllTweetFields &&\n                       tweet.MediaFields == MediaField.AllFieldsExceptPermissioned &&\n                       tweet.PlaceFields == PlaceField.AllFields &&\n                       tweet.PollFields == PollField.AllFields &&\n                       tweet.UserFields == UserField.AllFields\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/StatusDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Diagnostics;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    class StatusDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing retweets...\\n\");\n                        await RetweetsOfMeStatusQueryAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing retweets...\\n\");\n                        await RetweetsQueryAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tRetweeting...\\n\");\n                        await RetweetAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tGetting oembed...\\n\");\n                        await OEmbedStatusAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tGetting retweeters...\\n\");\n                        await RetweetersAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nStatus Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Retweets of Me Timeline\");\n            Console.WriteLine(\"\\t 1. Retweets of a Tweet\");\n            Console.WriteLine(\"\\t 2. Retweet a Tweet\");\n            Console.WriteLine(\"\\t 3. Get Oembed Tweet\");\n            Console.WriteLine(\"\\t 4. Get Retweeters\");\n\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static void PrintTweetsResults(List<Status> tweets)\n        {\n            if (tweets != null)\n                tweets.ForEach(tweet =>\n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"ID: [{0}] Name: {1}\\n\\tTweet: {2}\",\n                            tweet.StatusID, tweet.User.ScreenNameResponse,\n                            string.IsNullOrWhiteSpace(tweet.Text) ? tweet.FullText : tweet.Text);\n                });\n        }\n\n        static async Task RetweetsOfMeStatusQueryAsync(TwitterContext twitterCtx)\n        {\n            List<Status> myRetweets =\n                await\n                (from retweet in twitterCtx.Status\n                 where retweet.Type == StatusType.RetweetsOfMe &&\n                       retweet.Count == 100\n                 select retweet)\n                .ToListAsync();\n\n            PrintTweetsResults(myRetweets);\n        }\n\n        static async Task RetweetsQueryAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 806571633754284032;\n\n            List<Status> retweets =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweets &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .ToListAsync();\n\n            if (retweets != null)\n                retweets.ForEach(tweet =>\n                {\n                    if (tweet != null && tweet.User != null)\n                        Console.WriteLine(\n                            \"@{0} {1} ({2})\",\n                            tweet.User.ScreenNameResponse,\n                            tweet.Text,\n                            tweet.RetweetCount);\n                });\n        }\n\n        static async Task RetweetAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 1250088275861049345;\n\n            Status? retweet = await twitterCtx.RetweetAsync(tweetID);\n\n            if (retweet != null &&\n                retweet.RetweetedStatus != null &&\n                retweet.RetweetedStatus.User != null)\n            {\n                Console.WriteLine(\"Retweeted Tweet: \");\n                Console.WriteLine(\n                    \"\\nUser: \" + retweet.RetweetedStatus.User.ScreenNameResponse +\n                    \"\\nTweet: \" + retweet.RetweetedStatus.Text +\n                    \"\\nTweet ID: \" + retweet.RetweetedStatus.ID + \"\\n\");\n            }\n        }\n\n        static async Task OEmbedStatusAsync(TwitterContext twitterCtx)\n        {\n            string url = \"https://twitter.com/JoeMayo/status/1450247082019672066\";\n\n            EmbeddedStatus? embeddedStatus =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Oembed &&\n                       tweet.OEmbedUrl == url\n                 select tweet.EmbeddedStatus)\n                .SingleOrDefaultAsync();\n\n            if (embeddedStatus != null)\n                Console.WriteLine(\n                    \"Embedded Status Html: \\n\\n\" + embeddedStatus.Html);\n        }\n\n        static async Task RetweetersAsync(TwitterContext twitterCtx)\n        {\n            ulong tweetID = 210591841312190464;\n\n            Status? status =\n                await\n                (from tweet in twitterCtx.Status\n                 where tweet.Type == StatusType.Retweeters &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (status != null && status.User != null)\n                status.Users?.ForEach(\n                    userID => Console.WriteLine(\"User ID: \" + userID));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/StreamDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.IO;\nusing LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Net;\n\nnamespace ConsoleDemo.CSharp\n{\n    class StreamDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tShowing Filter Stream...\\n\");\n                        await DoFilterStreamAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tShowing Sample Stream...\\n\");\n                        await DoSampleStreamAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting Stream Rules...\\n\");\n                        await GetStreamRulesAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tValidating Stream Rules...\\n\");\n                        await ValidateRulesAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tAdding Stream Rules...\\n\");\n                        await AddRulesAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tDeleting Stream Rules...\\n\");\n                        await DeleteRulesAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nStreaming Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Filter Stream\");\n            Console.WriteLine(\"\\t 1. Sample Stream\");\n            Console.WriteLine(\"\\t 2. Stream Rules\");\n            Console.WriteLine(\"\\t 3. Validate Rules\");\n            Console.WriteLine(\"\\t 4. Add Rules\");\n            Console.WriteLine(\"\\t 5. Delete Rules\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoFilterStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n\n            int retries = 3;\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            do\n            {\n                try\n                {\n                    await\n                        (from strm in twitterCtx.Streaming\n                                                .WithCancellation(cancelTokenSrc.Token)\n                         where strm.Type == StreamingType.Filter &&\n                               strm.TweetFields == TweetField.AllFieldsExceptPermissioned\n                         select strm)\n                        .StartAsync(async strm =>\n                        {\n                            await HandleStreamResponse(strm);\n\n                            if (count++ >= 5)\n                                cancelTokenSrc.Cancel();\n                        });\n\n                    retries = 0;\n                }\n                catch (IOException ex)\n                {\n                    // Twitter might have closed the stream,\n                    // which they do sometimes. You should\n                    // restart the stream, but be sure to\n                    // read Twitter documentation on stream\n                    // back-off strategies to prevent your\n                    // app from being blocked.\n                    Console.WriteLine(ex.ToString());\n                    retries--;\n                }\n                catch (OperationCanceledException)\n                {\n                    Console.WriteLine(\"Stream cancelled.\");\n                    retries = 0;\n                }\n                catch (TwitterQueryException tqe) when (tqe.StatusCode == HttpStatusCode.TooManyRequests)\n                {\n                    int millisecondsToDelay = 1000 * (4 - retries);\n                    retries--;\n\n                    string message = retries >= 0 ?\n                        $\"Tried to reconnect too quickly. Delaying for {millisecondsToDelay} milliseconds...\"\n                        :\n                        \"Too many retries. Stopping query.\";\n\n                    Console.WriteLine(message);\n\n                    await Task.Delay(millisecondsToDelay);\n                }\n            } while (retries > 0);\n        }\n\n        static async Task DoSampleStreamAsync(TwitterContext twitterCtx)\n        {\n            Console.WriteLine(\"\\nStreamed Content: \\n\");\n\n            int retries = 3;\n            int count = 0;\n            var cancelTokenSrc = new CancellationTokenSource();\n\n            do\n            {\n                try\n                {\n                    await\n                        (from strm in twitterCtx.Streaming\n                                                .WithCancellation(cancelTokenSrc.Token)\n                         where strm.Type == StreamingType.Sample\n                         select strm)\n                        .StartAsync(async strm =>\n                        {\n                            await HandleStreamResponse(strm);\n\n                            if (count++ >= 10)\n                                cancelTokenSrc.Cancel();\n                        });\n\n                    retries = 0;\n                }\n                catch (IOException ex)\n                {\n                    // Twitter might have closed the stream,\n                    // which they do sometimes. You should\n                    // restart the stream, but be sure to\n                    // read Twitter documentation on stream\n                    // back-off strategies to prevent your\n                    // app from being blocked.\n                    Console.WriteLine(ex.ToString());\n                    retries--;\n                }\n                catch (OperationCanceledException)\n                {\n                    Console.WriteLine(\"Stream cancelled.\");\n                    retries = 0;\n                }\n                catch (TwitterQueryException tqe) when (tqe.StatusCode == HttpStatusCode.TooManyRequests)\n                {\n                    int millisecondsToDelay = 1000 * (4 - retries);\n                    retries--;\n\n                    string message = retries >= 0 ?\n                        $\"Tried to reconnect too quickly. Delaying for {millisecondsToDelay} milliseconds...\"\n                        :\n                        \"Too many retries. Stopping query.\";\n\n                    Console.WriteLine(message);\n\n                    await Task.Delay(millisecondsToDelay);\n                } \n            } while (retries > 0);\n        }\n\n        static async Task<int> HandleStreamResponse(StreamContent strm)\n        {\n            if (strm.HasError)\n            {\n                Console.WriteLine($\"Error during streaming: {strm.ErrorMessage}\");\n            }\n            else\n            {\n                Tweet? tweet = strm?.Entity?.Tweet;\n                if (tweet != null)\n                    Console.WriteLine($\"\\n{tweet.CreatedAt}, Tweet ID: {tweet.ID}, Tweet Text: {tweet.Text}\");\n            }\n\n            return await Task.FromResult(0);\n        }\n\n        static async Task GetStreamRulesAsync(TwitterContext twitterCtx)\n        {\n            Streaming? streaming =\n                await\n                (from strm in twitterCtx.Streaming\n                 where strm.Type == StreamingType.Rules\n                 select strm)\n                .SingleOrDefaultAsync();\n\n            Console.WriteLine(\"\\nRules: \\n\");\n\n            if (streaming?.Rules != null)\n                streaming.Rules.ForEach(rule =>\n                    Console.WriteLine(\n                        $\"\\nID:    {rule.ID}\" +\n                        $\"\\nValue: {rule.Value}\" +\n                        $\"\\nTag:   {rule.Tag}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task ValidateRulesAsync(TwitterContext twitterCtx)\n        {\n            var rules = new List<StreamingAddRule>\n            {\n                new StreamingAddRule { Tag = \"memes with media\", Value = \"meme has:images\" },\n                new StreamingAddRule { Tag = \"cats with media\", Value = \"cat has:media\" }\n            };\n\n            Streaming? result = await twitterCtx.AddStreamingFilterRulesAsync(rules, isValidateOnly: true);\n\n            if (result?.Meta?.Summary != null)\n            {\n                StreamingMeta meta = result.Meta;\n                Console.WriteLine($\"\\nSent: {meta.Sent}\");\n\n                StreamingMetaSummary summary = meta.Summary;\n\n                Console.WriteLine($\"Created:  {summary.Created}\");\n                Console.WriteLine($\"!Created: {summary.NotCreated}\");\n            }\n\n            if (result?.Errors != null && result.HasErrors)\n                result.Errors.ForEach(error =>\n                    Console.WriteLine(\n                        $\"\\nTitle: {error.Title}\" +\n                        $\"\\nValue: {error.Value}\" +\n                        $\"\\nID:    {error.ID}\" +\n                        $\"\\nType:  {error.Type}\"));\n        }\n\n        static async Task AddRulesAsync(TwitterContext twitterCtx)\n        {\n            var rules = new List<StreamingAddRule>\n            {\n                new StreamingAddRule { Tag = \"funny things\", Value = \"meme\" },\n                new StreamingAddRule { Tag = \"happy cats with media\", Value = \"cat has:media -grumpy\" }\n            };\n\n            Streaming? result = await twitterCtx.AddStreamingFilterRulesAsync(rules);\n\n            StreamingMeta? meta = result?.Meta;\n\n            if (meta?.Summary != null)\n            {\n                Console.WriteLine($\"\\nSent: {meta.Sent}\");\n\n                StreamingMetaSummary summary = meta.Summary;\n\n                Console.WriteLine($\"Created:  {summary.Created}\");\n                Console.WriteLine($\"!Created: {summary.NotCreated}\");\n            }\n\n            if (result?.Errors != null && result.HasErrors)\n                result.Errors.ForEach(error => \n                    Console.WriteLine(\n                        $\"\\nTitle: {error.Title}\" +\n                        $\"\\nValue: {error.Value}\" +\n                        $\"\\nID:    {error.ID}\" +\n                        $\"\\nType:  {error.Type}\"));\n        }\n\n        static async Task DeleteRulesAsync(TwitterContext twitterCtx)\n        {\n            var ruleIds = new List<string>\n            {\n                \"1165037377523306498\",\n                \"1165037377523306499\"\n            };\n\n            Streaming? result = await twitterCtx.DeleteStreamingFilterRulesAsync(ruleIds);\n\n            if (result?.Meta?.Summary != null)\n            {\n                StreamingMeta meta = result.Meta;\n                Console.WriteLine($\"\\nSent: {meta.Sent}\");\n\n                StreamingMetaSummary summary = meta.Summary;\n\n                Console.WriteLine($\"Deleted:  {summary.Deleted}\");\n                Console.WriteLine($\"!Deleted: {summary.NotDeleted}\");\n            }\n\n            if (result?.Errors != null && result.HasErrors)\n                result.Errors.ForEach(error =>\n                    Console.WriteLine(\n                        $\"\\nTitle: {error.Title}\" +\n                        $\"\\nValue: {error.Value}\" +\n                        $\"\\nID:    {error.ID}\" +\n                        $\"\\nType:  {error.Type}\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/TrendDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class TrendDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tGetting trends...\\n\");\n                        await GetTrendsForPlaceAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tGetting available trend locations...\\n\");\n                        await GetAvailableTrendLocationsAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tGetting trends...\\n\");\n                        await GetClosestTrendsAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nTrend Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Get Trends for a Place\");\n            Console.WriteLine(\"\\t 1. Get Available Trend Locations\");\n            Console.WriteLine(\"\\t 2. Get Trends Closest to a Location\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task GetTrendsForPlaceAsync(TwitterContext twitterCtx)\n        {\n            System.Collections.Generic.List<Trend> trends =\n                await\n                (from trend in twitterCtx.Trends\n                 where trend.Type == TrendType.Place &&\n                       trend.WoeID == 2486982\n                 select trend)\n                .ToListAsync();\n\n            if (trends != null && \n                trends.Any() && \n                trends.First().Locations != null)\n            {\n                Console.WriteLine(\n                    \"Location: {0}\\n\",\n                    trends.FirstOrDefault()?.Locations?.FirstOrDefault()?.Name);\n\n                trends.ForEach(trnd =>\n                    Console.WriteLine(\n                        \"Tweet Volume: {0}, Name: {1}, Date: {2}, Query: {3}\\nSearchUrl: {4}\",\n                        trnd.TweetVolume, trnd.Name, trnd.CreatedAt, trnd.Query, trnd.SearchUrl)); \n            }\n        }\n\n        static async Task GetAvailableTrendLocationsAsync(TwitterContext twitterCtx)\n        {\n            Trend? trendsResponse =\n                await\n                (from trend in twitterCtx.Trends\n                 where trend.Type == TrendType.Available\n                 select trend)\n                .SingleOrDefaultAsync();\n\n            if (trendsResponse != null && trendsResponse.Locations != null)\n                trendsResponse.Locations.ForEach(\n                    loc => Console.WriteLine(\"Location: \" + loc.Name));\n        }\n\n        static async Task GetClosestTrendsAsync(TwitterContext twitterCtx)\n        {\n            Trend? trend =\n                await\n                (from trnd in twitterCtx.Trends\n                 where trnd.Type == TrendType.Closest &&\n                       trnd.Latitude == 37.78215 &&\n                       trnd.Longitude == -122.40060\n                 select trnd)\n                .SingleOrDefaultAsync();\n\n            if (trend != null && trend.Locations != null)\n                trend.Locations.ForEach(\n                    loc => Console.WriteLine(\n                        \"Name: {0}, Country: {1}, WoeID: {2}\",\n                        loc.Name, loc.Country, loc.WoeID));\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/TweetDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class TweetDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tLooking up a single tweet...\\n\");\n                        await DoSingleTweetLookupAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tLooking up multiple tweets...\\n\");\n                        await DoMultiTweetLookupAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tHiding a reply...\\n\");\n                        await HideReplyAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tUn-Hiding a reply...\\n\");\n                        await UnHideReplyAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tGetting the Mentions Timeline...\\n\");\n                        await GetMentionsTimelineAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting the Reverse Chronological Timeline...\\n\");\n                        await GetReverseChronologicalTimelineAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tGetting Quote Tweets...\\n\");\n                        await GetQuoteTweetsAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tGetting the Tweets Timeline...\\n\");\n                        await GetTweetsTimelineAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tTweeting...\");\n                        await TweetAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tTweeting a poll...\");\n                        await TweetPollAsync(twitterCtx);\n                        break;\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tReplying...\");\n                        await ReplyAsync(twitterCtx);\n                        break;\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tDeleting...\");\n                        await DeleteTweetAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nTweet Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Single Tweet Lookup\");\n            Console.WriteLine(\"\\t 1. Multi-Tweet Lookup\");\n            Console.WriteLine(\"\\t 2. Hide a Reply\");\n            Console.WriteLine(\"\\t 3. Un-Hide a Reply\");\n            Console.WriteLine(\"\\t 4. Mentions Timeline\");\n            Console.WriteLine(\"\\t 5. Reverse Chronological Timeline\");\n            Console.WriteLine(\"\\t 6. Quote Tweets\");\n            Console.WriteLine(\"\\t 7. Tweets Timeline\");\n            Console.WriteLine(\"\\t 8. Tweet\");\n            Console.WriteLine(\"\\t 9. Tweet Poll\");\n            Console.WriteLine(\"\\t A. Reply to a Tweet\");\n            Console.WriteLine(\"\\t B. Delete a Tweet\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task DoSingleTweetLookupAsync(TwitterContext twitterCtx)\n        {\n            string TweetID = \"1305895383260782593\";\n\n            // default is id and text and this also brings in created_at and geo\n            string tweetFields =\n                string.Join(\",\",\n                    new string[]\n                    {\n                        TweetField.CreatedAt,\n                        TweetField.ID,\n                        TweetField.Text,\n                        TweetField.Geo\n                    });\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.Lookup &&\n                       tweet.Ids == TweetID &&\n                       tweet.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       tweet.Expansions == ExpansionField.AllTweetFields &&\n                       tweet.MediaFields == MediaField.AllFields.Replace(\",promoted_metrics\", \"\") &&\n                       tweet.PlaceFields == PlaceField.AllFields &&\n                       tweet.PollFields == PollField.AllFields &&\n                       tweet.UserFields == UserField.AllFields\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task DoMultiTweetLookupAsync(TwitterContext twitterCtx)\n        {\n            const string TweetIds = \"1441239829472165900,1305895383260782593,1322227053161148422\";\n\n            // default is id and text and this also brings in created_at and geo\n            string tweetFields =\n                string.Join(\",\",\n                    new string[]\n                    {\n                        TweetField.CreatedAt,\n                        TweetField.ID,\n                        TweetField.Text,\n                        TweetField.Geo\n                    });\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.Lookup &&\n                       tweet.Ids == TweetIds &&\n                       tweet.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       tweet.Expansions == ExpansionField.AllTweetFields &&\n                       tweet.MediaFields == MediaField.AllFieldsExceptPermissioned &&\n                       tweet.PlaceFields == PlaceField.AllFields &&\n                       tweet.PollFields == PollField.AllFields &&\n                       tweet.UserFields == UserField.AllFields\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task HideReplyAsync(TwitterContext twitterCtx)\n        {\n            const string TweetID = \"1327749647515881473\";\n\n            TweetHideResponse? hideResp = await twitterCtx.HideReplyAsync(TweetID);\n\n            Console.WriteLine($\"Is Hidden: {hideResp?.Data?.Hidden}\");\n        }\n\n        static async Task UnHideReplyAsync(TwitterContext twitterCtx)\n        {\n            const string TweetID = \"1327749647515881473\";\n\n            TweetHideResponse? hideResp = await twitterCtx.UnhideReplyAsync(TweetID);\n\n            Console.WriteLine($\"Is Hidden: {hideResp?.Data?.Hidden}\");\n        }\n\n        static async Task GetMentionsTimelineAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.MentionsTimeline &&\n                       tweet.ID == userID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task GetReverseChronologicalTimelineAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.ReverseChronologicalTimeline &&\n                       tweet.ID == userID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task GetQuoteTweetsAsync(TwitterContext twitterCtx)\n        {\n            string tweetID = \"1524796546306478083\";\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.QuoteTweets &&\n                       tweet.ID == tweetID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task GetTweetsTimelineAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TweetQuery? tweetResponse =\n                await\n                (from tweet in twitterCtx.Tweets\n                 where tweet.Type == TweetType.TweetsTimeline &&\n                       tweet.ID == userID\n                 select tweet)\n                .SingleOrDefaultAsync();\n\n            if (tweetResponse?.Tweets != null)\n                tweetResponse.Tweets.ForEach(tweet =>\n                    Console.WriteLine(\n                        $\"\\nID: {tweet.ID}\" +\n                        $\"\\nTweet: {tweet.Text}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        static async Task TweetAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Enter text to tweet: \");\n            string? status = Console.ReadLine() ?? \"\";\n\n            Console.WriteLine(\"\\nHere's what you typed: \\n\\n\\\"{0}\\\"\", status);\n            Console.Write(\"\\nDo you want to send this tweet? (y or n): \");\n            string? confirm = Console.ReadLine();\n\n            if (confirm?.ToUpper() == \"N\")\n            {\n                Console.WriteLine(\"\\nThis tweet is *not* being sent.\");\n            }\n            else if (confirm?.ToUpper() == \"Y\")\n            {\n                Console.WriteLine(\"\\nPress any key to post tweet...\\n\");\n                Console.ReadKey(true);\n\n                Tweet? tweet = await twitterCtx.TweetAsync(status);\n\n                if (tweet != null)\n                    Console.WriteLine(\n                        \"Tweet returned: \" +\n                        \"(\" + tweet.ID + \") \" +\n                        tweet.Text + \"\\n\");\n            }\n            else\n            {\n                Console.WriteLine(\n                    $\"Sorry, you typed '{confirm}', \" +\n                    $\"but I only recognize 'Y' or 'N'.\");\n            }\n        }\n\n        static async Task TweetPollAsync(TwitterContext twitterCtx)\n        {\n            string text = \"LINQ to Twitter Test Poll\";\n            int duration = 360;\n            var options = new string[] { \"ein\", \"zwei\", \"drei\" };\n\n\n            Tweet? tweet = await twitterCtx.TweetPollAsync(text, duration, options);\n\n            if (tweet != null)\n                Console.WriteLine(\n                    \"Tweet returned: \" +\n                    \"(\" + tweet.ID + \") \" +\n                    tweet.Text + \"\\n\");\n        }\n\n        static async Task ReplyAsync(TwitterContext twitterCtx)\n        {\n            string text = \"+1 from LINQ to Twitter\";\n            string replyTweetID = \"1450247082019672066\";\n\n            Tweet? tweet = await twitterCtx.ReplyAsync(text, replyTweetID);\n\n            if (tweet != null)\n                Console.WriteLine(\n                    \"Tweet returned: \" +\n                    \"(\" + tweet.ID + \") \" +\n                    tweet.Text + \"\\n\");\n        }\n\n        static async Task DeleteTweetAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"What is the tweet ID to delete? \");\n            string? tweetID = Console.ReadLine();\n\n            if (tweetID is not null)\n            {\n                TweetDeletedResponse? response = await twitterCtx.DeleteTweetAsync(tweetID);\n\n                Console.WriteLine($\"Is Deleted: {response?.Data?.Deleted}\"); \n            }\n            else\n            {\n                Console.WriteLine($\"tweetID is required!\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/UserDemos.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\n\nnamespace ConsoleDemo.CSharp\n{\n    public class UserDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tSearching by user ID...\\n\");\n                        await LookupByUserIDAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tSearching by user name...\\n\");\n                        await LookupByUsernameAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await FindUsersAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\n\\tShowing...\\n\");\n                        await GetContributeesAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tSearching...\\n\");\n                        await GetContributorsAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tGetting...\\n\");\n                        await GetBannerSizesAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\n\\tReport spammer...\\n\");\n                        await ReportSpammerAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\n\\tFinding followers...\\n\");\n                        await FindFollowersAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tFinding following...\\n\");\n                        await FindFollowingAsync(twitterCtx);\n                        break;\n                    case '9':\n                        Console.WriteLine(\"\\n\\tFollowing...\\n\");\n                        await FollowAsync(twitterCtx);\n                        break;\n                    case 'a':\n                    case 'A':\n                        Console.WriteLine(\"\\n\\tUn-Following...\\n\");\n                        await UnFollowAsync(twitterCtx);\n                        break;\n                    case 'b':\n                    case 'B':\n                        Console.WriteLine(\"\\n\\tFinding who retweeted...\\n\");\n                        await DoRetweetedByAsync(twitterCtx);\n                        break;\n                    case 'c':\n                    case 'C':\n                        Console.WriteLine(\"\\n\\tRetweeting...\\n\");\n                        await RetweetAsync(twitterCtx);\n                        break;\n                    case 'd':\n                    case 'D':\n                        Console.WriteLine(\"\\n\\tUndoing Retweet...\\n\");\n                        await UndoRetweetAsync(twitterCtx);\n                        break;\n                    case 'e':\n                    case 'E':\n                        Console.WriteLine(\"\\n\\tGetting authenticated user...\");\n                        await GetMeAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nUser Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Lookup by User ID\");\n            Console.WriteLine(\"\\t 1. Lookup by User Name\");\n            Console.WriteLine(\"\\t 2. Search for Users\");\n            Console.WriteLine(\"\\t 3. Contributee Accounts\");\n            Console.WriteLine(\"\\t 4. Account Contributors\");\n            Console.WriteLine(\"\\t 5. Get Profile Banner Sizes\");\n            Console.WriteLine(\"\\t 6. Report Spammer\");\n            Console.WriteLine(\"\\t 7. Find Followers\");\n            Console.WriteLine(\"\\t 8. Find Following\");\n            Console.WriteLine(\"\\t 9. Follow a User\");\n            Console.WriteLine(\"\\t A. Un-Follow a User\");\n            Console.WriteLine(\"\\t B. Retweeted by a User\");\n            Console.WriteLine(\"\\t C. Retweet\");\n            Console.WriteLine(\"\\t D. Undo Retweet\");\n            Console.WriteLine(\"\\t E. Get Authenticated User\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task LookupByUserIDAsync(TwitterContext twitterCtx)\n        {\n            TwitterUserQuery? userResponse =\n                await\n                (from user in twitterCtx.TwitterUser\n                 where user.Type == UserType.IdLookup &&\n                       user.Ids == \"15411837,16761255\" &&\n                       user.Expansions == ExpansionField.AllUserFields &&\n                       user.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       user.UserFields == UserField.AllFields\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (userResponse != null)\n                userResponse.Users?.ForEach(user =>\n                    Console.WriteLine(\"Name: \" + user.Username));\n        }\n\n        static async Task LookupByUsernameAsync(TwitterContext twitterCtx)\n        {\n            TwitterUserQuery? userResponse =\n                await\n                (from user in twitterCtx.TwitterUser\n                 where user.Type == UserType.UsernameLookup &&\n                       user.Usernames == \"JoeMayo,Linq2Twitr\" &&\n                       user.Expansions == ExpansionField.AllUserFields &&\n                       user.TweetFields == TweetField.AllFieldsExceptPermissioned &&\n                       user.UserFields == UserField.AllFields\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (userResponse != null)\n                userResponse.Users?.ForEach(user =>\n                    Console.WriteLine(\"Name: \" + user.Username));\n        }\n\n        static async Task FindUsersAsync(TwitterContext twitterCtx)\n        {\n            var foundUsers =\n                await\n                (from user in twitterCtx.User\n                 where user.Type == UserType.Search &&\n                       user.Query == \"JoeMayo\" &&\n                       user.TweetMode == TweetMode.Extended\n                 select user)\n                .ToListAsync();\n\n            if (foundUsers != null)\n                foundUsers.ForEach(user =>\n                    Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n        }\n\n        static async Task GetContributeesAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var users =\n                    await\n                    (from user in twitterCtx.User\n                     where user.Type == UserType.Contributees &&\n                           user.ScreenName == \"biz\"\n                     select user)\n                    .ToListAsync();\n\n                if (users != null)\n                    users.ForEach(user =>\n                        Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n            }\n            catch (TwitterQueryException tqEx)\n            {\n                Console.WriteLine(\"Unable to query - Reason: \" + tqEx.ReasonPhrase);\n            }\n        }\n\n        static async Task GetContributorsAsync(TwitterContext twitterCtx)\n        {\n            try\n            {\n                var users =\n                    await\n                    (from user in twitterCtx.User\n                     where user.Type == UserType.Contributors &&\n                           user.ScreenName == \"twitter\"\n                     select user)\n                    .ToListAsync();\n\n                if (users != null)\n                    users.ForEach(user =>\n                        Console.WriteLine(\"User: \" + user.ScreenNameResponse));\n            }\n            catch (TwitterQueryException tqEx)\n            {\n                Console.WriteLine(\"Unable to query - Reason: \" + tqEx.ReasonPhrase);\n            }\n        }\n\n        static async Task GetBannerSizesAsync(TwitterContext twitterCtx)\n        {\n            var user =\n                await\n                (from usr in twitterCtx.User\n                 where usr.Type == UserType.BannerSizes &&\n                       usr.ScreenName == \"JoeMayo\"\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            if (user != null && user.BannerSizes != null)\n                user.BannerSizes.ForEach(size =>\n                    Console.WriteLine(\n                        \"Label: {0}, W: {1} H: {2} URL: {3}\",\n                        size.Label, size.Width, size.Height, size.Url));\n        }\n\n        static async Task ReportSpammerAsync(TwitterContext twitterCtx)\n        {\n            const string SpammerScreenName = \"<put screen name here>\";\n\n            User? spammer = await twitterCtx.ReportSpamAsync(SpammerScreenName, performBlock: true);\n\n            Console.WriteLine(\"You just reported {0} as a spammer.\", spammer?.ScreenNameResponse);\n        }\n\n        static async Task FindFollowersAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TwitterUserQuery? userResponse =\n                await\n                (from user in twitterCtx.TwitterUser\n                 where user.Type == UserType.Followers &&\n                       user.ID == userID\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (userResponse != null)\n                userResponse.Users?.ForEach(user =>\n                    Console.WriteLine(\"Name: \" + user.Username));\n        }\n\n        static async Task FindFollowingAsync(TwitterContext twitterCtx)\n        {\n            string userID = \"15411837\";\n\n            TwitterUserQuery? userResponse =\n                await\n                (from user in twitterCtx.TwitterUser\n                 where user.Type == UserType.Following &&\n                       user.ID == userID\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (userResponse != null)\n                userResponse.Users?.ForEach(user =>\n                    Console.WriteLine(\"ID: \" + user.ID));\n        }\n\n        static async Task FollowAsync(TwitterContext twitterCtx)\n        {\n            string followingUser = \"15411837\";\n            string userToFollow = \"16761255\";\n\n            TwitterUserFollowResponse? response = \n                await twitterCtx.FollowAsync(followingUser, userToFollow);\n\n            Console.WriteLine($\"Is Following: {response?.Data?.Following ?? false}\");\n        }\n\n        static async Task UnFollowAsync(TwitterContext twitterCtx)\n        {\n            string followingUser = \"15411837\";\n            string userToFollow = \"<put account ID here>\";\n\n            TwitterUserFollowResponse? response =\n                await twitterCtx.UnFollowAsync(followingUser, userToFollow);\n\n            Console.WriteLine($\"Is Following: {response?.Data?.Following ?? false}\");\n        }\n\n        static async Task DoRetweetedByAsync(TwitterContext twitterCtx)\n        {\n            string tweetID = \"1446476275246194697\";\n\n            TwitterUserQuery? response =\n                await\n                (from user in twitterCtx.TwitterUser\n                 where user.Type == UserType.RetweetedBy &&\n                       user.ID == tweetID\n                 select user)\n                .SingleOrDefaultAsync();\n\n            if (response?.Users != null)\n                response.Users.ForEach(user =>\n                    Console.WriteLine(\n                        $\"\\nID: {user.ID}\" +\n                        $\"\\nUsername: {user.Username}\" +\n                        $\"\\nName: {user.Name}\"));\n            else\n                Console.WriteLine(\"No entries found.\");\n        }\n\n        async static Task RetweetAsync(TwitterContext twitterCtx)\n        {\n            string retweetingUser = \"15411837\";\n            string tweetToRetweet = \"1376560011678085128\";\n\n            RetweetResponse? response =\n                await twitterCtx.RetweetAsync(retweetingUser, tweetToRetweet);\n\n            Console.WriteLine($\"Is Retweeted: {response?.Data?.Retweeted ?? false}\");\n        }\n\n        async static Task UndoRetweetAsync(TwitterContext twitterCtx)\n        {\n            string retweetingUser = \"15411837\";\n            string tweetToUndoRetweet = \"1376560011678085128\";\n\n            RetweetResponse? response =\n                await twitterCtx.UndoRetweetAsync(retweetingUser, tweetToUndoRetweet);\n\n            Console.WriteLine($\"Is Retweeted: {response?.Data?.Retweeted ?? false}\");\n        }\n\n        static async Task GetMeAsync(TwitterContext twitterCtx)\n        {\n            TwitterUserQuery? response =\n                await\n                (from usr in twitterCtx.TwitterUser\n                 where usr.Type == UserType.Me\n                 select usr)\n                .SingleOrDefaultAsync();\n\n            TwitterUser? user = response?.Users?.SingleOrDefault();\n\n            if (user != null)\n                Console.WriteLine(\n                    $\"\\nID: {user.ID}\" +\n                    $\"\\nUsername: {user.Username}\" +\n                    $\"\\nName: {user.Name}\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp/WelcomeMessageDemos.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing System.Collections.Generic;\n\nnamespace ConsoleDemo.CSharp\n{\n    class WelcomeMessageDemos\n    {\n        internal static async Task RunAsync(TwitterContext twitterCtx)\n        {\n            char key;\n\n            do\n            {\n                ShowMenu();\n\n                key = Console.ReadKey(true).KeyChar;\n\n                switch (key)\n                {\n                    case '0':\n                        Console.WriteLine(\"\\n\\tCreating Welcome Message...\\n\");\n                        await CreateNewWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '1':\n                        Console.WriteLine(\"\\n\\tUpdating Welcome Message...\\n\");\n                        await UpdateWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '2':\n                        Console.WriteLine(\"\\nShowing Welcome Message...\\n\");\n                        await ShowWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '3':\n                        Console.WriteLine(\"\\nListing Welcome Messages...\\n\");\n                        await ListWelcomeMessagesAsync(twitterCtx);\n                        break;\n                    case '4':\n                        Console.WriteLine(\"\\n\\tDeleting Welcome Message...\\n\");\n                        await DeleteWelcomeMessageAsync(twitterCtx);\n                        break;\n                    case '5':\n                        Console.WriteLine(\"\\n\\tCreating Welcome Message Rule...\\n\");\n                        await CreateNewWelcomeMessageRuleAsync(twitterCtx);\n                        break;\n                    case '6':\n                        Console.WriteLine(\"\\nShowing Welcome Message Rules...\\n\");\n                        await ShowWelcomeMessageRuleAsync(twitterCtx);\n                        break;\n                    case '7':\n                        Console.WriteLine(\"\\nListing Welcome Message Rules...\\n\");\n                        await ListWelcomeMessageRulesAsync(twitterCtx);\n                        break;\n                    case '8':\n                        Console.WriteLine(\"\\n\\tDeleting Welcome Message Rule...\\n\");\n                        await DeleteWelcomeMessageRuleAsync(twitterCtx);\n                        break;\n                    case 'q':\n                    case 'Q':\n                        Console.WriteLine(\"\\nReturning...\\n\");\n                        break;\n                    default:\n                        Console.WriteLine(key + \" is unknown\");\n                        break;\n                }\n\n            } while (char.ToUpper(key) != 'Q');\n        }\n\n        static void ShowMenu()\n        {\n            Console.WriteLine(\"\\nDirect Message Demos - Please select:\\n\");\n\n            Console.WriteLine(\"\\t 0. Create a New Welcome Message\");\n            Console.WriteLine(\"\\t 1. Update a Welcome Message\");\n            Console.WriteLine(\"\\t 2. Show a Welcome Message\");\n            Console.WriteLine(\"\\t 3. List Welcome Messages\");\n            Console.WriteLine(\"\\t 4. Delete a Welcome Message\");\n            Console.WriteLine(\"\\t 5. Create a New Welcome Message Rule\");\n            Console.WriteLine(\"\\t 6. Show a Welcome Message Rule\");\n            Console.WriteLine(\"\\t 7. List Welcome Message Rules\");\n            Console.WriteLine(\"\\t 8. Delete a Welcome Message Rule\");\n            Console.WriteLine();\n            Console.Write(\"\\t Q. Return to Main menu\");\n        }\n\n        static async Task CreateNewWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            WelcomeMessage? message =\n                await twitterCtx.NewWelcomeMessageAsync(\n                    \"New Welcome Message\",\n                    \"Welcome!\");\n\n            WelcomeMsg? msg = message?.Value?.WelcomeMessage;\n            if (msg != null)\n            {\n                Console.WriteLine(\n                    $\"Message ID: '{msg.Id}' \\n\" +\n                    $\"Message Name: '{msg.Name} \\n\" +\n                    $\"Message Text: '{msg.MessageData?.Text}\\n\");\n            }\n        }\n\n        static async Task UpdateWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID: \");\n            string? respone = Console.ReadLine();\n            _ = ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage? message =\n                await twitterCtx.UpdateWelcomeMessageAsync(\n                    wecomeMessageID,\n                    \"New Name\",\n                    \"Welcome to LINQ to Twitter!\");\n\n            WelcomeMsg? msg = message?.Value?.WelcomeMessage;\n            if (msg != null)\n            {\n                Console.WriteLine(\n                    $\"Message ID: '{msg.Id}' \\n\" +\n                    $\"Message Name: '{msg.Name} \\n\" +\n                    $\"Message Text: '{msg.MessageData?.Text}\\n\");\n            }\n        }\n\n        static async Task ShowWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID: \");\n            string? respone = Console.ReadLine();\n            _ = ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage? message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ShowMessage &&\n                       welcomeMsg.ID == wecomeMessageID\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            WelcomeMsg? msg = message?.Value?.WelcomeMessage;\n            if (msg != null)\n            {\n                Console.WriteLine(\n                    $\"Message ID: '{msg.Id}' \\n\" +\n                    $\"Message Name: '{msg.Name} \\n\" +\n                    $\"Message Text: '{msg.MessageData?.Text}\\n\");\n            }\n        }\n\n        static async Task ListWelcomeMessagesAsync(TwitterContext twitterCtx)\n        {\n            int count = 10; // set to a low number to demo paging\n            string? cursor = null;\n            List<WelcomeMsg> allWelcomeMessages = new();\n\n            // you don't have a valid cursor until after the first query\n            WelcomeMessage? message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ListMessages &&\n                       welcomeMsg.Count == count\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            SetMessagesAndCursor(cursor, allWelcomeMessages, message);\n\n            while (!string.IsNullOrWhiteSpace(cursor))\n            {\n                message =\n                    await\n                    (from welcomeMsg in twitterCtx.WelcomeMessage\n                     where welcomeMsg.Type == WelcomeMessageType.ListMessages &&\n                           welcomeMsg.Count == count &&\n                           welcomeMsg.Cursor == cursor\n                     select welcomeMsg)\n                    .SingleOrDefaultAsync();\n\n                SetMessagesAndCursor(cursor, allWelcomeMessages, message);\n            }\n\n            if (!allWelcomeMessages.Any())\n            {\n                Console.WriteLine(\"No items returned\");\n                return;\n            }\n\n            Console.WriteLine($\"Response Count: {allWelcomeMessages.Count}\");\n            Console.WriteLine(\"Responses:\\n\");\n\n            allWelcomeMessages.ForEach(msg =>\n            {\n                if (msg != null)\n                {\n                    Console.WriteLine(\n                        $\"Message ID: '{msg.Id}' \\n\" +\n                        $\"      Name: '{msg.Name} \\n\" +\n                        $\"      Text: '{msg.MessageData?.Text}\\n\");\n                }\n            });\n\n            static void SetMessagesAndCursor(string? cursor, List<WelcomeMsg> allWelcomeMessages, WelcomeMessage? message)\n            {\n                if (message?.Value?.WelcomeMessages != null)\n                {\n                    allWelcomeMessages.AddRange(message.Value.WelcomeMessages);\n                    cursor = message.Value?.NextCursor;\n                }\n            }\n        }\n\n        static async Task DeleteWelcomeMessageAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID: \");\n            string? respone = Console.ReadLine();\n            _ = ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            await twitterCtx.DeleteWelcomeMessageAsync(wecomeMessageID);\n\n            Console.WriteLine(\"Message deleted.\");\n        }\n\n        static async Task CreateNewWelcomeMessageRuleAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message ID to set as default: \");\n            string? respone = Console.ReadLine();\n            _ = ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage? welcomeMsg =\n                await twitterCtx.NewWelcomeMessageRuleAsync(wecomeMessageID);\n\n            WelcomeMessageRule? rule = welcomeMsg?.Value?.WelcomeMessageRule;\n            if (rule != null)\n                Console.WriteLine(\n                    $\"Rule ID '{rule.ID}' \" +\n                    $\"for welcome message ID: '{rule.WelcomeMessageID}' \" +\n                    $\"set as default on {rule.CreatedAt}\");\n        }\n\n        static async Task ShowWelcomeMessageRuleAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message rule ID: \");\n            string? respone = Console.ReadLine();\n            _ = ulong.TryParse(respone, out ulong wecomeMessageID);\n\n            WelcomeMessage? message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ShowRule &&\n                       welcomeMsg.ID == wecomeMessageID\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            WelcomeMessageRule? rule = message?.Value?.WelcomeMessageRule;\n            if (rule != null)\n            {\n                Console.WriteLine(\n                    $\"Rule ID '{rule.ID}' \\n\" +\n                    $\"for welcome message ID: '{rule.WelcomeMessageID}' \\n\" +\n                    $\"set as default on {rule.CreatedAt}\\n\");\n            }\n        }\n\n        static async Task ListWelcomeMessageRulesAsync(TwitterContext twitterCtx)\n        {\n            int count = 5; // set to a low number to demo paging\n            string cursor = \"\";\n            List<WelcomeMessageRule> allWelcomeMessageRules = new();\n\n            // you don't have a valid cursor until after the first query\n            WelcomeMessage? message =\n                await\n                (from welcomeMsg in twitterCtx.WelcomeMessage\n                 where welcomeMsg.Type == WelcomeMessageType.ListRules &&\n                       welcomeMsg.Count == count\n                 select welcomeMsg)\n                .SingleOrDefaultAsync();\n\n            cursor = SetMessageRules(allWelcomeMessageRules, message);\n\n            while (!string.IsNullOrWhiteSpace(cursor))\n            {\n                message =\n                    await\n                    (from welcomeMsg in twitterCtx.WelcomeMessage\n                     where welcomeMsg.Type == WelcomeMessageType.ListRules &&\n                           welcomeMsg.Count == count &&\n                           welcomeMsg.Cursor == cursor\n                     select welcomeMsg)\n                    .SingleOrDefaultAsync();\n\n                cursor = SetMessageRules(allWelcomeMessageRules, message);\n            }\n\n            if (!allWelcomeMessageRules.Any())\n            {\n                Console.WriteLine(\"No items returned\");\n                return;\n            }\n\n            Console.WriteLine($\"Response Count: {allWelcomeMessageRules.Count}\");\n            Console.WriteLine(\"Responses:\\n\");\n\n            allWelcomeMessageRules.ForEach(rule =>\n            {\n                if (rule != null)\n                {\n                    Console.WriteLine(\n                        $\"Rule ID '{rule.ID}' \\n\" +\n                        $\"for welcome message ID: '{rule.WelcomeMessageID}' \\n\" +\n                        $\"set as default on {rule.CreatedAt}\\n\");\n                }\n            });\n\n            static string SetMessageRules(List<WelcomeMessageRule> allWelcomeMessageRules, WelcomeMessage? message)\n            {\n                string cursor;\n                List<WelcomeMessageRule> rules = message?.Value?.WelcomeMessageRules ?? new List<WelcomeMessageRule>();\n                allWelcomeMessageRules.AddRange(rules);\n                cursor = message?.Value?.NextCursor ?? \"\";\n                return cursor;\n            }\n        }\n\n        static async Task DeleteWelcomeMessageRuleAsync(TwitterContext twitterCtx)\n        {\n            Console.Write(\"Please type welcome message rule ID: \");\n            string? respone = Console.ReadLine();\n            _ = ulong.TryParse(respone, out ulong wecomeMessageRuleID);\n\n            await twitterCtx.DeleteWelcomeMessageRuleAsync(wecomeMessageRuleID);\n\n            Console.WriteLine(\"Message rule deleted.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemo.CSharp/ConsoleDemo.CSharp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30105.148\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ConsoleDemo.CSharp\", \"ConsoleDemo.CSharp\\ConsoleDemo.CSharp.csproj\", \"{F5E7D77A-83FC-4F10-99C7-F6E39DB7F28D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F5E7D77A-83FC-4F10-99C7-F6E39DB7F28D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F5E7D77A-83FC-4F10-99C7-F6E39DB7F28D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F5E7D77A-83FC-4F10-99C7-F6E39DB7F28D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F5E7D77A-83FC-4F10-99C7-F6E39DB7F28D}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {2AFADB8F-96A1-4B81-B9E9-85672639500D}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.FSharp/ConsoleDemos.FSharp/ConsoleDemos.FSharp.fsproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Program.fs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"linqtotwitter\" Version=\"6.3.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.FSharp/ConsoleDemos.FSharp/Program.fs",
    "content": "﻿open System\nopen LinqToTwitter\nopen System.Linq\nopen LinqToTwitter.OAuth\n\n[<EntryPoint>]\nlet main argv =\n\n    let credentialStore = {\n        new SingleUserInMemoryCredentialStore() with\n            member this.ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey)\n            member this.ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n            member this.AccessToken = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessToken)\n            member this.AccessTokenSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessTokenSecret)\n    }\n\n    let mutable auth = new SingleUserAuthorizer()\n    auth.CredentialStore <- credentialStore\n    let twitterCtx = new TwitterContext(auth)\n\n    let recentSearchQuery = query {\n        for search in twitterCtx.TwitterSearch do\n        where (search.Type = SearchType.RecentSearch)\n        where (search.Query = \"#fsharp\")\n        select search\n    }\n\n    let response = recentSearchQuery.SingleOrDefault()\n\n    for tweet in response.Tweets do\n        printfn \"%s - %s\" tweet.ID tweet.Text\n\n    0"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.FSharp/ConsoleDemos.FSharp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30804.86\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{F2A71F9B-5D33-465A-A702-920D77279786}\") = \"ConsoleDemos.FSharp\", \"ConsoleDemos.FSharp\\ConsoleDemos.FSharp.fsproj\", \"{9EEB7715-1A4E-4A8D-A286-A4166CE308D8}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9EEB7715-1A4E-4A8D-A286-A4166CE308D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9EEB7715-1A4E-4A8D-A286-A4166CE308D8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9EEB7715-1A4E-4A8D-A286-A4166CE308D8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9EEB7715-1A4E-4A8D-A286-A4166CE308D8}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {A618CF17-7BB8-4A31-BB89-2A225F1B26E1}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/AccountActivityDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class AccountActivityDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim webhooksResponse =\n                Await _\n                (From acct In twitterCtx.AccountActivity\n                 Where acct.Type = AccountActivityType.Webhooks\n                 Select acct) _\n                .SingleOrDefaultAsync()\n\n        If webhooksResponse.WebhooksValue.Webhooks IsNot Nothing Then\n            Console.WriteLine(\"Webhooks:\")\n\n            If (webhooksResponse.WebhooksValue.Webhooks.Any()) Then\n                For Each webhook In webhooksResponse.WebhooksValue.Webhooks\n                    Console.WriteLine(\n                        $\"ID: {webhook.ID}, \" +\n                        $\"Created: {webhook.CreatedTimestamp}, \" +\n                        $\"Valid: {webhook.Valid}, \" +\n                        $\"URL: {webhook.Url}\")\n                Next\n            Else\n                Console.WriteLine(\"No webhooks registered\")\n            End If\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/AccountDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class AccountDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Try\n            Dim verifyResponse =\n                Await (From acct In twitterCtx.Account\n                       Where acct.Type = AccountType.VerifyCredentials\n                       Select acct) _\n                      .SingleOrDefaultAsync()\n\n            If verifyResponse IsNot Nothing And verifyResponse.User IsNot Nothing Then\n                Dim user = verifyResponse.User\n\n                Console.WriteLine(\"Credentials are good for {0}.\", user.ScreenNameResponse)\n            End If\n\n        Catch tqe As Exception\n            Console.WriteLine(tqe.Message)\n        End Try\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/BlockDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class BlockDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim blockResponse =\n            Await _\n                (From block In twitterCtx.Blocks\n                 Where block.Type = BlockingType.List\n                 Select block) _\n                .SingleOrDefaultAsync()\n\n        If blockResponse IsNot Nothing And blockResponse.Users IsNot Nothing Then\n            blockResponse.Users.ForEach(\n                Sub(user) Console.WriteLine(user.ScreenNameResponse))\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic.vbproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>ConsoleDemos.VisualBasic</RootNamespace>\n    <TargetFramework>net5.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"linqtotwitter\" Version=\"6.1.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/DirectMessageEventsDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class DirectMessageEventsDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim count = 50 'Set To a low number To demo paging\n        Dim cursor = \"\"\n        Dim allDmEvents = New List(Of DMEvent)\n\n        ' you don't have a valid cursor until after the first query\n        Dim dmResponse =\n            await _\n                (from dm in twitterCtx.DirectMessageEvents _\n                 where dm.Type = DirectMessageEventsType.List _\n                 andalso dm.Count = count _\n                 select dm) _\n                .SingleOrDefaultAsync()\n\n        allDmEvents.AddRange(dmResponse.Value.DMEvents)\n        cursor = dmResponse?.Value?.NextCursor\n\n        while (not string.IsNullOrWhiteSpace(cursor))\n            dmResponse =\n                await _\n                    (from dm in twitterCtx.DirectMessageEvents _\n                     where dm.Type = DirectMessageEventsType.List _\n                     AndAlso dm.Count = count _\n                     andalso dm.Cursor = cursor\n                     select dm) _\n                    .SingleOrDefaultAsync()\n\n            allDmEvents.AddRange(dmResponse.Value.DMEvents)\n            cursor = dmResponse.Value.NextCursor\n        End While\n\n        if (not allDmEvents.Any())\n            Console.WriteLine(\"No items returned\")\n            return\n        End If\n\n        Console.WriteLine($\"Response Count: {allDmEvents.Count}\")\n        Console.WriteLine(\"Responses:\")\n\n        allDmEvents.ForEach(\n            Sub(evt)\n                Dim msgCreate = evt.MessageCreate\n\n                If evt IsNot Nothing AndAlso msgCreate IsNot Nothing Then\n                    Console.WriteLine(\n                        $\"DM ID: {evt.ID}\\n\" +\n                        $\"From ID: {msgCreate.SenderID}\\n\" +\n                        $\"To ID:  {msgCreate.Target.RecipientID}\\n\" +\n                        $\"Message Text: {msgCreate.MessageData.Text}\")\n                End If\n            End Sub)\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/FavoriteDemos.vb",
    "content": "﻿Imports LinqToTwitter\nImports LinqToTwitter.Common\n\nFriend Class FavoriteDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Const PerQueryFavCount = 200\n\n        ' set from a value that you previously saved\n        Dim sinceID = 1\n\n        Dim favsResponse =\n            Await _\n                (From fav In twitterCtx.Favorites\n                 Where fav.Type = FavoritesType.Favorites AndAlso\n                 fav.Count = PerQueryFavCount AndAlso\n                 fav.TweetMode = TweetMode.Extended\n                 Select fav) _\n                .ToListAsync()\n\n        If favsResponse Is Nothing Then\n            Console.WriteLine(\"No favorites returned from Twitter.\")\n            Return\n        End If\n\n        Dim favList = New List(Of Favorites)(favsResponse)\n\n        ' first tweet processed on current query\n        Dim maxID = favList.Min(Function(fav) fav.StatusID) - 1\n\n        Do\n            favsResponse =\n                Await _\n                    (From fav In twitterCtx.Favorites\n                     Where fav.Type = FavoritesType.Favorites AndAlso\n                     fav.Count = PerQueryFavCount AndAlso\n                     fav.SinceID = sinceID AndAlso\n                     fav.MaxID = maxID\n                     Select fav) _\n                    .ToListAsync()\n\n            If favsResponse Is Nothing Or favsResponse.Count = 0 Then\n                Exit Do\n            End If\n\n            ' reset first tweet to avoid re-querying the\n            ' same list you just received\n            maxID = favsResponse.Min(Function(fav) fav.StatusID) - 1\n            favList.AddRange(favsResponse)\n\n        Loop While favsResponse.Count > 0\n\n        favList.ForEach(\n            Sub(fav)\n                If fav IsNot Nothing AndAlso fav.User IsNot Nothing Then\n                    Console.WriteLine(\n                        \"Name: {0}, Tweet: {1}\",\n                        fav.User.ScreenNameResponse, fav.Text)\n                End If\n            End Sub)\n\n        ' save this in your db for this user so you can set\n        ' sinceID accurately the next time you do a query\n        ' And avoid querying the same tweets again.\n        Dim newSinceID = favList.Max(Function(fav) fav.SinceID)\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/FriendshipDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class FriendshipDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim Friendship =\n            Await _\n            (From frnd In twitterCtx.Friendship\n             Where frnd.Type = FriendshipType.Show AndAlso\n             frnd.SourceScreenName = \"Linq2Twitr\" AndAlso\n             frnd.TargetScreenName = \"JoeMayo\"\n             Select frnd) _\n            .SingleOrDefaultAsync()\n\n        If Friendship IsNot Nothing AndAlso\n            Friendship.SourceRelationship IsNot Nothing AndAlso\n            Friendship.TargetRelationship IsNot Nothing Then\n\n            Console.WriteLine(\n                \"JoeMayo follows LinqToTweeter: \" +\n                Friendship.SourceRelationship.FollowedBy.ToString() +\n                \" - LinqToTweeter follows JoeMayo: \" +\n                Friendship.TargetRelationship.FollowedBy.ToString())\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/GeoDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class GeoDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim geoResponse =\n            Await _\n                (From geo In twitterCtx.Geo\n                 Where geo.Type = GeoType.ID AndAlso\n                       geo.ID = \"5a110d312052166f\"\n                 Select geo) _\n                .SingleOrDefaultAsync()\n\n        If geoResponse IsNot Nothing AndAlso geoResponse.Places IsNot Nothing Then\n            Dim Place = geoResponse.Places.First()\n\n            Console.WriteLine(\n                \"Name: {0}, Country: {1}, Type: {2}\",\n                Place.Name, Place.Country, Place.PlaceType)\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/HelpDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class HelpDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim helpResponse =\n            Await _\n                (From help In twitterCtx.Help\n                 Where help.Type = HelpType.RateLimits\n                 Select help) _\n                .SingleOrDefaultAsync()\n\n        If helpResponse IsNot Nothing AndAlso helpResponse.RateLimits IsNot Nothing Then\n            For Each Category In helpResponse.RateLimits\n                Console.WriteLine(\"{1}Category: {0}\", Category.Key, Environment.NewLine)\n\n                For Each limit In Category.Value\n                    Console.WriteLine(\n                        \"{4}  Resource: {0}{4}    Remaining: {1}{4}    Reset: {2}{4}    Limit: {3}\",\n                        limit.Resource, limit.Remaining, limit.Reset, limit.Limit, Environment.NewLine)\n                Next\n            Next\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/ListDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class ListDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim screenName = \"Linq2Twitr\"\n\n        Dim lists =\n            Await _\n            (From list In twitterCtx.List\n             Where list.Type = ListType.List AndAlso\n                   list.ScreenName = screenName\n             Select list) _\n            .ToListAsync()\n\n        If lists IsNot Nothing Then\n            lists.ForEach(Sub(list) Console.WriteLine(\"Slug: \" + list.SlugResponse))\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/MediaDemos.vb",
    "content": "﻿Imports System.Globalization\nImports System.IO\nImports LinqToTwitter\n\nPublic Class MediaDemos\n    Public Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim Clip_Filename As String = \"..\\..\\..\\Images\\TwitterTest.mp4\"\n        Dim imageBytes As Byte() = File.ReadAllBytes(Clip_Filename)\n        Const JoeMayoUserID As ULong = 15411837\n        Dim additionalOwners = New ULong() {JoeMayoUserID}\n        Dim status As String =\n            \"Testing video upload tweet #Linq2Twitter £ \" +\n            DateTime.Now.ToString(CultureInfo.InvariantCulture)\n        Dim mediaType1 As String = \"video/mp4\"\n        Dim mediaCategory As String = \"tweet_video\"\n        Dim media As Media = Await twitterCtx.UploadMediaAsync(imageBytes, mediaType1, additionalOwners, mediaCategory)\n        Dim mediaStatusResponse As Media = Nothing\n\n        Do\n\n            If mediaStatusResponse IsNot Nothing Then\n                Dim checkAfterSeconds As Integer = If(mediaStatusResponse?.ProcessingInfo?.CheckAfterSeconds, 0)\n                Console.WriteLine($\"Twitter video testing in progress - waiting {checkAfterSeconds} seconds.\")\n                Await Task.Delay(checkAfterSeconds * 1000)\n            End If\n            mediaStatusResponse = Await(From stat In twitterCtx.Media Where stat.Type = MediaType.Status AndAlso stat.MediaID = media.MediaID Select stat).SingleOrDefaultAsync()\n\n\n        Loop While mediaStatusResponse?.ProcessingInfo?.State = MediaProcessingInfo.InProgress\n\n        If mediaStatusResponse?.ProcessingInfo?.State = MediaProcessingInfo.Succeeded Then\n            Dim tweet22 As Status = Await twitterCtx.TweetAsync(status.Trim, New ULong() {media.MediaID})\n            If tweet22 IsNot Nothing Then Console.WriteLine($\"Tweet sent: {tweet22.Text}\")\n        Else\n            Dim [error] As MediaError = mediaStatusResponse?.ProcessingInfo?.[Error]\n            If [error] IsNot Nothing Then Console.WriteLine($\"Request failed - Code: {[error].Code}, Name: {[error].Name}, Message: {[error].Message}\")\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/MuteDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class MuteDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim muteResponse =\n            Await _\n            (From mute In twitterCtx.Mute\n             Where mute.Type = MuteType.List\n             Select mute) _\n            .SingleOrDefaultAsync()\n\n        muteResponse?.Users?.ForEach(Sub(user) Console.WriteLine(user.ScreenNameResponse))\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/OAuth.vb",
    "content": "﻿Imports LinqToTwitter.OAuth\n\nPublic Class OAuth\n    Shared Function ChooseAuthenticationStrategy() As IAuthorizer\n        Console.WriteLine(\"Authentication Strategy:\")\n        Console.WriteLine()\n        Console.WriteLine()\n\n        Console.WriteLine(\"  1 - Pin (default)\")\n        Console.WriteLine(\"  2 - Application-Only\")\n        Console.WriteLine(\"  3 - Single User\")\n        Console.WriteLine(\"  4 - XAuth\")\n\n        Console.WriteLine()\n        Console.Write(\"Please choose (1, 2, 3, or 4): \")\n\n        Dim Key = Console.ReadKey().KeyChar\n\n        Console.WriteLine()\n        Console.WriteLine()\n\n        Dim auth As IAuthorizer\n\n        Select Case Key\n            Case \"1\"\n                auth = DoPinOAuth()\n            Case \"2\"\n                auth = DoApplicationOnlyAuth()\n            Case \"3\"\n                auth = DoSingleUserAuth()\n            Case \"4\"\n                auth = DoXAuth()\n            Case Else\n                auth = DoPinOAuth()\n\n        End Select\n\n        Return auth\n    End Function\n\n    Private Shared Function DoPinOAuth() As IAuthorizer\n        Dim auth = New PinAuthorizer With {\n            .CredentialStore =\n                New InMemoryCredentialStore With {\n                    .ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    .ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n                },\n            .GetPin =\n                Function()\n                    Console.WriteLine(\"Next, you'll need to tell Twitter to authorize access. This program will not have access to your credentials, which is the benefit of OAuth. Once you log into Twitter and give this program permission, come back to this console.\")\n                    Console.WriteLine()\n                    Console.Write(\"Please enter the PIN from Twitter: \")\n\n                    Return Console.ReadLine()\n                End Function,\n            .GoToTwitterAuthorization =\n                Function(pageLink)\n                    Dim psi As ProcessStartInfo = New ProcessStartInfo\n                    With psi\n                        .FileName = pageLink\n                        .UseShellExecute = True\n                    End With\n                    Return Process.Start(psi)\n                End Function\n        }\n\n        Return auth\n    End Function\n\n    Private Shared Function DoApplicationOnlyAuth() As IAuthorizer\n        Dim auth = New ApplicationOnlyAuthorizer With {\n            .CredentialStore =\n                New InMemoryCredentialStore With {\n                    .ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    .ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret)\n                }\n        }\n\n        Return auth\n    End Function\n\n    Private Shared Function DoSingleUserAuth() As IAuthorizer\n        Dim auth = New SingleUserAuthorizer With {\n            .CredentialStore =\n                New SingleUserInMemoryCredentialStore With {\n                    .ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    .ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\n                    .AccessToken = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessToken),\n                    .AccessTokenSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessTokenSecret)\n               }\n        }\n\n        Return auth\n    End Function\n\n    Private Shared Function DoXAuth() As IAuthorizer\n        Dim auth = New XAuthAuthorizer With {\n            .CredentialStore =\n                New XAuthCredentials With {\n                    .ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\n                    .ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\n                    .UserName = \"YourUserName\",\n                    .Password = \"YourPassword\"\n               }\n        }\n\n        Return auth\n    End Function\n\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/Program.vb",
    "content": "Imports System.Net\nImports LinqToTwitter\nImports LinqToTwitter.OAuth\n\nModule Program\n\n    Sub Main()\n        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12\n\n        SendTweet().Wait()\n\n    End Sub\n\n    Async Function SendTweet() As Task\n\n        Dim auth As IAuthorizer = OAuth.ChooseAuthenticationStrategy()\n\n        Await auth.AuthorizeAsync()\n\n\n        'This Is how you access credentials after authorization.\n        'The oauthToken And oauthTokenSecret do Not expire.\n        'You can use the userID to associate the credentials with the user.\n        'You can save credentials any way you want -database, isolated storage, etc. - it's up to you.\n        'You can retrieve And load all 4 credentials on subsequent queries to avoid the need to re-authorize.\n        'When you've loaded all 4 credentials, LINQ to Twitter will let you make queries without re-authorizing.\n        '\n        'Dim credentials = auth.CredentialStore\n        'Dim oauthToken = credentials.OAuthToken\n        'Dim oauthTokenSecret = credentials.OAuthTokenSecret\n        'Dim screenName = credentials.ScreenName\n        'Dim userID = credentials.UserID\n\n        Dim twitterCtx = New TwitterContext(auth)\n        Dim key As Char\n\n        Do\n            ShowMenu()\n\n            key = Console.ReadKey(True).KeyChar\n\n            Select Case key\n                Case \"0\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Account Demos...\")\n                    Console.WriteLine()\n                    Await AccountDemos.RunAsync(twitterCtx)\n                Case \"1\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Account Activity Demos...\")\n                    Console.WriteLine()\n                    Await AccountActivityDemos.RunAsync(twitterCtx)\n                Case \"2\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Block Demos...\")\n                    Console.WriteLine()\n                    Await BlockDemos.RunAsync(twitterCtx)\n                Case \"3\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Direct Message Events Demos...\")\n                    Console.WriteLine()\n                    Await DirectMessageEventsDemos.RunAsync(twitterCtx)\n                Case \"4\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Favorite Demos...\")\n                    Console.WriteLine()\n                    Await FavoriteDemos.RunAsync(twitterCtx)\n                Case \"5\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Friendship Demos...\")\n                    Console.WriteLine()\n                    Await FriendshipDemos.RunAsync(twitterCtx)\n                Case \"6\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Geo Demos...\")\n                    Console.WriteLine()\n                    Await GeoDemos.RunAsync(twitterCtx)\n                Case \"7\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Help Demos...\")\n                    Console.WriteLine()\n                    Await HelpDemos.RunAsync(twitterCtx)\n                Case \"8\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running List Demos...\")\n                    Console.WriteLine()\n                    Await ListDemos.RunAsync(twitterCtx)\n                Case \"9\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Media Demos...\")\n                    Console.WriteLine()\n                    Await MediaDemos.RunAsync(twitterCtx)\n                Case \"a\", \"A\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Mutes Demos...\")\n                    Console.WriteLine()\n                    Await MuteDemos.RunAsync(twitterCtx)\n                Case \"b\", \"B\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Raw Demos...\")\n                    Console.WriteLine()\n                    Await RawDemos.RunAsync(twitterCtx)\n                Case \"c\", \"C\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Saved Search Demos...\")\n                    Console.WriteLine()\n                    Await SavedSearchDemos.RunAsync(twitterCtx)\n                Case \"d\", \"D\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Search Demos...\")\n                    Console.WriteLine()\n                    Await SearchDemos.RunAsync(twitterCtx)\n                Case \"e\", \"E\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Status Demos...\")\n                    Console.WriteLine()\n                    Await StatusDemos.RunAsync(twitterCtx)\n                Case \"f\", \"F\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Stream Demos...\")\n                    Console.WriteLine()\n                    Await StreamDemos.RunAsync(twitterCtx)\n                Case \"g\", \"G\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Trend Demos...\")\n                    Console.WriteLine()\n                    Await TrendDemos.RunAsync(twitterCtx)\n                Case \"h\", \"H\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running User Demos...\")\n                    Console.WriteLine()\n                    Await UserDemos.RunAsync(twitterCtx)\n                Case \"i\", \"I\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Welcome Message Demos...\")\n                    Console.WriteLine()\n                    Await WelcomeMessageDemos.RunAsync(twitterCtx)\n                Case \"j\", \"J\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"  Running Tweet Demos...\")\n                    Console.WriteLine()\n                    Await TweetDemos.RunAsync(twitterCtx)\n                Case \"q\", \"Q\"\n                    key = \"Q\"\n                    Console.WriteLine()\n                    Console.WriteLine(\"Quitting...\")\n                    Console.WriteLine()\n                Case Else\n                    Console.WriteLine(key + \" is unknown\")\n\n            End Select\n        Loop Until (key = \"Q\")\n\n        Console.WriteLine()\n        Console.Write(\"Press any key to continue...\")\n        Console.ReadKey()\n\n    End Function\n\n    Sub ShowMenu()\n\n        Console.WriteLine()\n        Console.WriteLine()\n        Console.WriteLine(\"Please select category:\")\n        Console.WriteLine()\n\n        Console.WriteLine(\"    0. Account Demos\")\n        Console.WriteLine(\"    1. Account Activity Demos\")\n        Console.WriteLine(\"    2. Block Demos\")\n        Console.WriteLine(\"    3. Direct Message Event Demos\")\n        Console.WriteLine(\"    4. Favorite Demos\")\n        Console.WriteLine(\"    5. Friendship Demos\")\n        Console.WriteLine(\"    6. Geo Demos\")\n        Console.WriteLine(\"    7. Help Demos\")\n        Console.WriteLine(\"    8. List Demos\")\n        Console.WriteLine(\"    9. Media Demos\")\n        Console.WriteLine(\"    A. Mutes Demos\")\n        Console.WriteLine(\"    B. Raw Demos\")\n        Console.WriteLine(\"    C. Saved Search Demos\")\n        Console.WriteLine(\"    D. Search Demos\")\n        Console.WriteLine(\"    E. Status Demos\")\n        Console.WriteLine(\"    F. Stream Demos\")\n        Console.WriteLine(\"    G. Trend Demos\")\n        Console.WriteLine(\"    H. User Demos\")\n        Console.WriteLine(\"    I. Welcome Message Demos\")\n        Console.WriteLine(\"    J. Tweet Demos\")\n        Console.WriteLine()\n        Console.Write(\"    Q. End Program\")\n\n    End Sub\n\nEnd Module\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/RawDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class RawDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        If twitterCtx Is Nothing Then\n            Throw New ArgumentNullException(NameOf(twitterCtx))\n        End If\n\n        Dim unencodedStatus = \"JoeMayo\"\n        Dim encodedStatus = Uri.EscapeDataString(unencodedStatus)\n        Dim queryString = \"tweets/search/recent?query=\" + encodedStatus\n\n        Dim previousBaseUrl = twitterCtx.BaseUrl\n        twitterCtx.BaseUrl = \"https://api.twitter.com/2/\"\n\n        Dim rawResult =\n            Await _\n            (From raw In twitterCtx.RawQuery\n             Where raw.QueryString = queryString\n             Select raw) _\n            .SingleOrDefaultAsync()\n\n        If rawResult IsNot Nothing Then\n            Console.WriteLine(\n                \"Response from Twitter: \" + rawResult.Response)\n        End If\n\n        twitterCtx.BaseUrl = previousBaseUrl\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/SavedSearchDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class SavedSearchDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim savedSearches =\n            Await _\n            (From search In twitterCtx.SavedSearch\n             Where search.Type = SavedSearchType.Searches\n             Select search) _\n            .ToListAsync()\n\n        If savedSearches IsNot Nothing Then\n            savedSearches.ForEach(\n                Sub(search) Console.WriteLine(\"Search: \" + search.Query))\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/SearchDemos.vb",
    "content": "﻿Imports LinqToTwitter\nImports LinqToTwitter.Common\n\nPublic Class SearchDemos\n    Public Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim Response As Search =\n            Await (From search In twitterCtx.Search()\n                   Where search.Type = SearchType.Search _\n                   AndAlso search.TweetMode = TweetMode.Extended _\n                   AndAlso search.Query = \"Coronavirus\") _\n                  .SingleOrDefaultAsync()\n\n        Dim tweets As List(Of Status) = Response.Statuses()\n\n        If Response IsNot Nothing AndAlso Response.Statuses IsNot Nothing Then\n            For Each str As Status In tweets\n                Console.WriteLine(str.StatusID.ToString() + \" \" + str.FullText)\n\n                If str.ExtendedEntities.MediaEntities.Count > 0 Then\n                    Console.WriteLine(\" - Media URL: \" + str.ExtendedEntities.MediaEntities(0).MediaUrl)\n                End If\n            Next\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/StatusDemos.vb",
    "content": "﻿Imports LinqToTwitter\nImports LinqToTwitter.Common\n\nFriend Class StatusDemos\n\n    Shared Sub PrintTweetsResults(tweets As List(Of Status))\n        If tweets IsNot Nothing Then\n            tweets.ForEach(\n                Sub(tweet)\n                    If tweet IsNot Nothing AndAlso tweet.User IsNot Nothing Then\n                        Console.WriteLine(\n                            \"ID: [{0}] Name: {1}\" + Environment.NewLine + \"    Tweet: {2}\",\n                            tweet.StatusID, tweet.User.ScreenNameResponse,\n                            IIf(String.IsNullOrWhiteSpace(tweet.Text), tweet.FullText, tweet.Text))\n                    End If\n                End Sub)\n        End If\n    End Sub\n\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim tweets =\n            Await _\n            (From tweet In twitterCtx.Status\n             Where tweet.Type = StatusType.Home AndAlso\n                   tweet.TweetMode = TweetMode.Extended AndAlso\n                   tweet.Count = 150\n             Select tweet) _\n            .ToListAsync()\n\n        PrintTweetsResults(tweets)\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/StreamDemos.vb",
    "content": "﻿Imports System.IO\nImports System.Threading\nImports LinqToTwitter\n\nFriend Class StreamDemos\n\n    Friend Shared Async Function HandleStreamResponse(strm As StreamContent) As Task(Of Integer)\n        If strm.HasError Then\n            Console.WriteLine($\"Error during streaming: {strm.ErrorMessage}\")\n        Else\n            Dim tweet = strm.Entity.Tweet\n            If tweet IsNot Nothing Then\n                Console.WriteLine($\"\\nTweet ID: {tweet.ID}, Tweet Text: {tweet.Text}\")\n            End If\n        End If\n        Return Await Task.FromResult(0)\n    End Function\n\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Console.WriteLine()\n        Console.WriteLine(\"Streamed Content:\")\n        Console.WriteLine()\n\n        Dim count = 0\n        Dim cancelTokenSrc = New CancellationTokenSource()\n\n        Try\n            Await _\n            (From strm In twitterCtx.Streaming _\n                                    .WithCancellation(cancelTokenSrc.Token)\n             Where strm.Type = StreamingType.Sample\n             Select strm) _\n            .StartAsync(\n                Async Function(strm)\n                    Await HandleStreamResponse(strm)\n\n                    count += 1\n\n                    If count >= 10 Then\n                        cancelTokenSrc.Cancel()\n                    End If\n                End Function)\n        Catch ex As IOException\n            ' Twitter might have closed the stream,\n            ' which they do sometimes. You should\n            ' restart the stream, but be sure to\n            ' read Twitter documentation on stream\n            ' back-off strategies to prevent your\n            ' app from being blocked.\n            Console.WriteLine(ex.ToString())\n        Catch ocEx As OperationCanceledException\n            Console.WriteLine(\"Stream cancelled.\")\n        End Try\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/TrendDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class TrendDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim trendsResponse =\n            Await _\n            (From trend In twitterCtx.Trends\n             Where trend.Type = TrendType.Available\n             Select trend) _\n            .SingleOrDefaultAsync()\n\n        If trendsResponse IsNot Nothing AndAlso trendsResponse.Locations IsNot Nothing Then\n            trendsResponse.Locations.ForEach(\n                Sub(loc) Console.WriteLine(\"Location: \" + loc.Name))\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/TweetDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nPublic Class TweetDemos\n\n    Public Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Await twitterCtx.TweetAsync(\"Test tweet: \" & Date.Now)\n    End Function\n\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/UserDemos.vb",
    "content": "﻿Imports LinqToTwitter\nImports LinqToTwitter.Common\n\nFriend Class UserDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim userResponse =\n                Await _\n                (From user In twitterCtx.TwitterUser\n                 Where user.Type = UserType.UsernameLookup AndAlso\n                       user.Usernames = \"JoeMayo,Linq2Twitr\" AndAlso\n                       user.Expansions = ExpansionField.AllUserFields AndAlso\n                       user.TweetFields = TweetField.AllFieldsExceptPermissioned AndAlso\n                       user.UserFields = UserField.AllFields\n                 Select user) _\n                .SingleOrDefaultAsync()\n\n        If (userResponse IsNot Nothing) Then\n            userResponse.Users.ForEach(\n                Sub(user)\n                    Console.WriteLine(\"Name: \" + user.Username)\n                End Sub)\n        End If\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic/WelcomeMessageDemos.vb",
    "content": "﻿Imports LinqToTwitter\n\nFriend Class WelcomeMessageDemos\n    Friend Shared Async Function RunAsync(twitterCtx As TwitterContext) As Task\n        Dim message =\n                Await _\n                (From welcomeMsg In twitterCtx.WelcomeMessage\n                 Where welcomeMsg.Type = WelcomeMessageType.ListMessages\n                 Select welcomeMsg) _\n                .SingleOrDefaultAsync()\n\n        Dim allWelcomeMessages = message.Value.WelcomeMessages\n\n        If allWelcomeMessages Is Nothing Then\n            Console.WriteLine(\"No welcome messages found.\")\n            Return\n        End If\n\n        Console.WriteLine($\"Response Count: {allWelcomeMessages.Count}\")\n        Console.WriteLine(\"Responses:\")\n\n        allWelcomeMessages.ForEach(\n            Sub(msg)\n                If msg IsNot Nothing Then\n                    Console.WriteLine(\n                        $\"Message ID: '{msg.Id}' \\n\" +\n                        $\"      Name: '{msg.Name} \\n\" +\n                        $\"      Text: '{msg.MessageData?.Text}\\n\")\n                End If\n            End Sub)\n    End Function\nEnd Class\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ConsoleDemos.VisualBasic/ConsoleDemos.VisualBasic.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30626.31\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"ConsoleDemos.VisualBasic\", \"ConsoleDemos.VisualBasic\\ConsoleDemos.VisualBasic.vbproj\", \"{9AEB48F3-780B-4CE2-81A3-F57428D9D992}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9AEB48F3-780B-4CE2-81A3-F57428D9D992}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9AEB48F3-780B-4CE2-81A3-F57428D9D992}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9AEB48F3-780B-4CE2-81A3-F57428D9D992}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9AEB48F3-780B-4CE2-81A3-F57428D9D992}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {B3418D2F-29D2-47FA-9959-E1A610D2BE4A}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Console/ReadMe.txt",
    "content": "Console Samples"
  },
  {
    "path": "Samples/LinqToTwitter6/Notebooks/DotNetInteractive/L2TRecentSearch.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"dotnet_interactive\": {\n     \"language\": \"csharp\"\n    },\n    \"vscode\": {\n     \"languageId\": \"dotnet-interactive.csharp\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>linqtotwitter, 6.15.0</span></li></ul></div></div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"#r \\\"nuget: linqtotwitter, 6.15.0\\\"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"dotnet_interactive\": {\n     \"language\": \"csharp\"\n    },\n    \"vscode\": {\n     \"languageId\": \"dotnet-interactive.csharp\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"using System;\\n\",\n    \"\\n\",\n    \"using LinqToTwitter;\\n\",\n    \"using LinqToTwitter.OAuth;\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"dotnet_interactive\": {\n     \"language\": \"csharp\"\n    },\n    \"vscode\": {\n     \"languageId\": \"dotnet-interactive.csharp\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"var auth = new SingleUserAuthorizer\\n\",\n    \"{\\n\",\n    \"    CredentialStore = new SingleUserInMemoryCredentialStore\\n\",\n    \"    {\\n\",\n    \"        ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\\n\",\n    \"        ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\\n\",\n    \"        AccessToken = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessToken),\\n\",\n    \"        AccessTokenSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessTokenSecret)\\n\",\n    \"    }\\n\",\n    \"};\\n\",\n    \"\\n\",\n    \"await auth.AuthorizeAsync();\\n\",\n    \"var twitterCtx = new TwitterContext(auth);\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"dotnet_interactive\": {\n     \"language\": \"csharp\"\n    },\n    \"vscode\": {\n     \"languageId\": \"dotnet-interactive.csharp\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"ID: 1550700632197042176\\n\",\n      \"Tweet: 얘네 진자 존나 웃김 https://t.co/Sxvd5mCCF3\\r\\n\",\n      \"\\n\",\n      \"ID: 1550700632193257472\\n\",\n      \"Tweet: ย้อนมาดูความรักปจบแพพ ห้ะๆๆ5555555 https://t.co/70PjXzQWp4\\r\\n\",\n      \"\\n\",\n      \"ID: 1550700632193093632\\n\",\n      \"Tweet: RT @Alloooly1230: #عبدالعزيز_بن_فهد \\n\",\n      \"متبقي 4,840\\n\",\n      \"من يقفلها ويكسب اجرها\\n\",\n      \"\\n\",\n      \"يشهدالله ان امي ارملة كبيرة سن مريضه قلب وانسداد فالشريان\\n\",\n      \"ليس لها م…\\r\\n\",\n      \"\\n\",\n      \"ID: 1550700632192925696\\n\",\n      \"Tweet: RT @negitaku: 『ARTISAN』代表に聞く今後の展開やブランドの未来\\n\",\n      \"\\n\",\n      \"新製品RMシリーズは最後の布製マウスパッド\\n\",\n      \"\\n\",\n      \"https://t.co/KyPkNtvEeE https://t.co/n23D65nMyA\\r\\n\",\n      \"\\n\",\n      \"ID: 1550700632192888832\\n\",\n      \"Tweet: RT @kikerCG: 🇦🇹 Una multitud de austriacos reacciona ante la Agenda 2030\\n\",\n      \"\\n\",\n      \"\\\"¡No asistiremos en silencio a la caída de Austria y a este robo…\\r\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"string searchTerm = \\\"Twitter\\\";\\n\",\n    \"\\n\",\n    \"var result =\\n\",\n    \"    (from search in twitterCtx.TwitterSearch\\n\",\n    \"      where search.Type == SearchType.RecentSearch &&\\n\",\n    \"            search.Query == searchTerm\\n\",\n    \"      select search)\\n\",\n    \"    .SingleOrDefaultAsync();\\n\",\n    \"\\n\",\n    \"TwitterSearch searchResponse = await result;\\n\",\n    \"\\n\",\n    \"for (int i=0; i < 5; i++)\\n\",\n    \"{\\n\",\n    \"    var tweet = searchResponse.Tweets[i];\\n\",\n    \"    Console.WriteLine(\\n\",\n    \"        $\\\"\\\\nID: {tweet.ID}\\\" +\\n\",\n    \"        $\\\"\\\\nTweet: {tweet.Text}\\\");        \\n\",\n    \"}\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \".NET (C#)\",\n   \"language\": \"C#\",\n   \"name\": \".net-csharp\"\n  },\n  \"language_info\": {\n   \"name\": \"C#\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Notebooks/RecentSearch/RecentSearch/Program.cs",
    "content": "﻿// See https://aka.ms/new-console-template for more information\nConsole.WriteLine(\"Please see the RecentSearch.ipynb Notebook.\");\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Notebooks/RecentSearch/RecentSearch/RecentSearch.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net6.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Samples/LinqToTwitter6/Notebooks/RecentSearch/RecentSearch/RecentSearch.ipynb",
    "content": "{\n  \"cells\": [\n    {\n      \"cell_type\": \"markdown\",\n      \"metadata\": {},\n      \"source\": [\n        \"# Using LINQ to Twitter in Visual Studio Notebooks\\n\",\n        \"\\n\",\n        \"This demonstrates how to perform a recent search.\"\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 1,\n      \"metadata\": {\n        \"dotnet_interactive\": {\n          \"language\": \"csharp\"\n        }\n      },\n      \"source\": [\n        \"#r \\\"nuget: linqtotwitter, 6.15.0\\\"\"\n      ],\n      \"outputs\": [\n        {\n          \"output_type\": \"execute_result\",\n          \"data\": {\n            \"text/html\": \"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>linqtotwitter, 6.15.0</span></li></ul></div></div>\"\n          },\n          \"execution_count\": 1,\n          \"metadata\": {}\n        }\n      ]\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 1,\n      \"metadata\": {\n        \"dotnet_interactive\": {\n          \"language\": \"csharp\"\n        }\n      },\n      \"source\": [\n        \"using System;\\n\",\n        \"\\n\",\n        \"using LinqToTwitter;\\n\",\n        \"using LinqToTwitter.OAuth;\"\n      ],\n      \"outputs\": []\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 1,\n      \"metadata\": {\n        \"dotnet_interactive\": {\n          \"language\": \"csharp\"\n        }\n      },\n      \"source\": [\n        \"var auth = new SingleUserAuthorizer\\n\",\n        \"{\\n\",\n        \"    CredentialStore = new SingleUserInMemoryCredentialStore\\n\",\n        \"    {\\n\",\n        \"        ConsumerKey = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerKey),\\n\",\n        \"        ConsumerSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterConsumerSecret),\\n\",\n        \"        AccessToken = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessToken),\\n\",\n        \"        AccessTokenSecret = Environment.GetEnvironmentVariable(OAuthKeys.TwitterAccessTokenSecret)\\n\",\n        \"    }\\n\",\n        \"};\\n\",\n        \"\\n\",\n        \"await auth.AuthorizeAsync();\\n\",\n        \"var twitterCtx = new TwitterContext(auth);\"\n      ],\n      \"outputs\": []\n    },\n    {\n      \"cell_type\": \"code\",\n      \"execution_count\": 1,\n      \"metadata\": {\n        \"dotnet_interactive\": {\n          \"language\": \"csharp\"\n        }\n      },\n      \"source\": [\n        \"string searchTerm = \\\"Twitter\\\";\\n\",\n        \"\\n\",\n        \"var query =\\n\",\n        \"    from search in twitterCtx.TwitterSearch\\n\",\n        \"\\twhere search.Type == SearchType.RecentSearch &&\\n\",\n        \"          search.Query == searchTerm\\n\",\n        \"    select search;\\n\",\n        \"\\n\",\n        \"TwitterSearch searchResponse = await query.SingleOrDefaultAsync();\\n\",\n        \"\\n\",\n        \"for (int i=0; i < 5; i++)\\n\",\n        \"{\\n\",\n        \"    var tweet = searchResponse.Tweets[i];\\n\",\n        \"    Console.WriteLine(\\n\",\n        \"        $\\\"\\\\nID: {tweet.ID}\\\" +\\n\",\n        \"        $\\\"\\\\nTweet: {tweet.Text}\\\");        \\n\",\n        \"}\"\n      ],\n      \"outputs\": [\n        {\n          \"output_type\": \"execute_result\",\n          \"data\": {\n            \"text/plain\": \"\\nID: 1555028730300583937\\nTweet: Stetson Wright has had quite the week! He is coming off a win in Cheyenne and now has a round win in Lea County after this 88-point ride! https://t.co/JbdEauxRiL\\r\\n\"\n          },\n          \"execution_count\": 1,\n          \"metadata\": {}\n        }\n      ]\n    }\n  ],\n  \"metadata\": {\n    \"kernelspec\": {\n      \"display_name\": \".NET (C#)\",\n      \"language\": \"C#\",\n      \"name\": \".net-csharp\"\n    },\n    \"language_info\": {\n      \"file_extension\": \".cs\",\n      \"mimetype\": \"text/x-csharp\",\n      \"name\": \"C#\",\n      \"pygments_lexer\": \"csharp\",\n      \"version\": \"8.0\"\n    }\n  },\n  \"nbformat\": 4,\n  \"nbformat_minor\": 4\n}"
  },
  {
    "path": "Samples/LinqToTwitter6/Notebooks/RecentSearch/RecentSearch.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.2.32630.192\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RecentSearch\", \"RecentSearch\\RecentSearch.csproj\", \"{25D0B55C-FF02-4663-82D2-BCB2CE5AE1D0}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{25D0B55C-FF02-4663-82D2-BCB2CE5AE1D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{25D0B55C-FF02-4663-82D2-BCB2CE5AE1D0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{25D0B55C-FF02-4663-82D2-BCB2CE5AE1D0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{25D0B55C-FF02-4663-82D2-BCB2CE5AE1D0}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {FD652A78-9D7A-455C-B30C-B0D07A0B4BFD}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Samples/LinqToTwitter6/WPF/ReadMe.txt",
    "content": "WPF Samples"
  },
  {
    "path": "Samples/LinqToTwitter6/Xamarin/ReadMe.txt",
    "content": "Xamarin Samples"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitter/LinqToTwitter/TwitterExecuteAsync.cs",
    "content": "﻿#if ASYNC\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    internal partial class TwitterExecute\n    {\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        internal async Task<string> PostToTwitterAsync<T>(string url, IDictionary<string, string> postData, Func<string, T> getResult)\n        {\n            await Task.Delay(1);\n\n            return null;\n        }\n\n        /// <summary>\n        /// performs HTTP POST image byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"image\">byte array containing image to upload</param>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <returns>XML results From Twitter</returns>\n        internal async Task<string> PostTwitterImageAsync<T>(string url, IDictionary<string, string> postData, byte[] image, string fileName,\n                                        string imageType, IRequestProcessor<T> reqProc)\n        {\n            await Task.Delay(1);\n\n            return null;\n        }\n\n        /// <summary>\n        /// performs HTTP POST media byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">request parameters</param>\n        /// <param name=\"mediaItems\">list of Media each media item to upload</param>\n        /// <param name=\"reqProc\">request processor for handling results</param>\n        /// <returns>XML results From Twitter</returns>\n        internal async Task<string> PostMediaAsync<T>(string url, IDictionary<string, string> postData, List<Media> mediaItems,\n                                 IRequestProcessor<T> reqProc)\n        {\n            await Task.Delay(1);\n\n            return null;\n        }\n\n        /// <summary>\n        /// makes HTTP call to Twitter API\n        /// </summary>\n        /// <param name=\"url\">URL with all query info</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Results from Twitter</returns>\n        internal async Task<string> QueryTwitterAsync<T>(Request req, IRequestProcessor<T> reqProc)\n        {\n            await Task.Delay(1);\n\n            return null;\n        }\n\n        internal async Task<string> QueryTwitterStreamAsync(Request req)\n        {\n            await Task.Delay(1);\n\n            return null;\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitter/LinqToTwitter.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitter</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <OldToolsVersion>3.5</OldToolsVersion>\n    <UpgradeBackupLocation />\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>\n    <CodeContractsCustomRewriterAssembly>\n    </CodeContractsCustomRewriterAssembly>\n    <CodeContractsCustomRewriterClass>\n    </CodeContractsCustomRewriterClass>\n    <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>\n    <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>\n    <CodeContractsRuntimeThrowOnFailure>False</CodeContractsRuntimeThrowOnFailure>\n    <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>\n    <CodeContractsRunCodeAnalysis>True</CodeContractsRunCodeAnalysis>\n    <CodeContractsBuildReferenceAssembly>False</CodeContractsBuildReferenceAssembly>\n    <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>\n    <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>\n    <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>\n    <CodeContractsLibPaths>\n    </CodeContractsLibPaths>\n    <CodeContractsPlatformPath>\n    </CodeContractsPlatformPath>\n    <CodeContractsExtraAnalysisOptions>\n    </CodeContractsExtraAnalysisOptions>\n    <CodeContractsBaseLineFile>\n    </CodeContractsBaseLineFile>\n    <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>\n    <CodeContractsRunInBackground>True</CodeContractsRunInBackground>\n    <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>CONTRACTS_FULL;DEBUG;TRACE</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>\n    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>\n    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>..\\LinqToTwitterAg\\LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.ServiceModel.Web\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Mvc\">\n      <HintPath>..\\Resources\\System.Web.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Account.cs\">\n      <Link>Account\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountAction.cs\">\n      <Link>Account\\AccountAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountExtensions.cs\">\n      <Link>Account\\AccountExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountRequestProcessor.cs\">\n      <Link>Account\\AccountRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountType.cs\">\n      <Link>Account\\AccountType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\DeviceType.cs\">\n      <Link>Account\\DeviceType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\RateLimitStatus.cs\">\n      <Link>Account\\RateLimitStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Settings.cs\">\n      <Link>Account\\Settings.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\SleepTime.cs\">\n      <Link>Account\\SleepTime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Totals.cs\">\n      <Link>Account\\Totals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\TZInfo.cs\">\n      <Link>Account\\TZInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlockingType.cs\">\n      <Link>Blocks\\BlockingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\Blocks.cs\">\n      <Link>Blocks\\Blocks.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksExtensions.cs\">\n      <Link>Blocks\\BlocksExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksRequestProcessor.cs\">\n      <Link>Blocks\\BlocksRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BannerSize.cs\">\n      <Link>Common\\BannerSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BuildUrlHelper.cs\">\n      <Link>Common\\BuildUrlHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Culture.cs\">\n      <Link>Common\\Culture.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Cursors.cs\">\n      <Link>Common\\Cursors.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\Entities.cs\">\n      <Link>Common\\Entities\\Entities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\EntityBase.cs\">\n      <Link>Common\\Entities\\EntityBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\HashTagEntity.cs\">\n      <Link>Common\\Entities\\HashTagEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\MediaEntity.cs\">\n      <Link>Common\\Entities\\MediaEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\SymbolEntity.cs\">\n      <Link>Common\\Entities\\SymbolEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UrlEntity.cs\">\n      <Link>Common\\Entities\\UrlEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UserMentionEntity.cs\">\n      <Link>Common\\Entities\\UserMentionEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Evaluator.cs\">\n      <Link>Common\\Evaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeHelpers.cs\">\n      <Link>Common\\ExpressionTreeHelpers.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeModifier.cs\">\n      <Link>Common\\ExpressionTreeModifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeVisitor.cs\">\n      <Link>Common\\ExpressionTreeVisitor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\HttpMethod.cs\">\n      <Link>Common\\HttpMethod.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IDList.cs\">\n      <Link>Common\\IDList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\InvalidQueryException.cs\">\n      <Link>Common\\InvalidQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IRequestProcessor.cs\">\n      <Link>Common\\IRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Media.cs\">\n      <Link>Common\\Media.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MediaType.cs\">\n      <Link>Common\\MediaType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MethodCallExpressionTypeFinder.cs\">\n      <Link>Common\\MethodCallExpressionTypeFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\Encoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\Encoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\SafeList.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\SafeList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ParameterFinder.cs\">\n      <Link>Common\\ParameterFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\QueryParameter.cs\">\n      <Link>Common\\QueryParameter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ReaderWriterLock.cs\">\n      <Link>Common\\ReaderWriterLock.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Request.cs\">\n      <Link>Common\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\RequestProcessorHelper.cs\">\n      <Link>Common\\RequestProcessorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TargetFramework.cs\">\n      <Link>Common\\TargetFramework.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterAsyncResponse.cs\">\n      <Link>Common\\TwitterAsyncResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterErrorStatus.cs\">\n      <Link>Common\\TwitterErrorStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterHashResponse.cs\">\n      <Link>Common\\TwitterHashResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterProgressEventArgs.cs\">\n      <Link>Common\\TwitterProgressEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterQueryException.cs\">\n      <Link>Common\\TwitterQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeConversionExtensions.cs\">\n      <Link>Common\\TypeConversionExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeSystem.cs\">\n      <Link>Common\\TypeSystem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\WhereClauseFinder.cs\">\n      <Link>Common\\WhereClauseFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessage.cs\">\n      <Link>DirectMessage\\DirectMessage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageExtensions.cs\">\n      <Link>DirectMessage\\DirectMessageExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageRequestProcessor.cs\">\n      <Link>DirectMessage\\DirectMessageRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageType.cs\">\n      <Link>DirectMessage\\DirectMessageType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\Favorites.cs\">\n      <Link>Favorites\\Favorites.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesAction.cs\">\n      <Link>Favorites\\FavoritesAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesExtensions.cs\">\n      <Link>Favorites\\FavoritesExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesRequestProcessor.cs\">\n      <Link>Favorites\\FavoritesRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesType.cs\">\n      <Link>Favorites\\FavoritesType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Friendship.cs\">\n      <Link>Friendship\\Friendship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipAction.cs\">\n      <Link>Friendship\\FriendshipAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipExtensions.cs\">\n      <Link>Friendship\\FriendshipExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipRequestProcessor.cs\">\n      <Link>Friendship\\FriendshipRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipType.cs\">\n      <Link>Friendship\\FriendshipType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Relationship.cs\">\n      <Link>Friendship\\Relationship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Coordinate.cs\">\n      <Link>Geo\\Coordinate.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geo.cs\">\n      <Link>Geo\\Geo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoAction.cs\">\n      <Link>Geo\\GeoAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geometry.cs\">\n      <Link>Geo\\Geometry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoRequestProcessor.cs\">\n      <Link>Geo\\GeoRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoType.cs\">\n      <Link>Geo\\GeoType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Place.cs\">\n      <Link>Geo\\Place.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Configuration.cs\">\n      <Link>Help\\Configuration.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Help.cs\">\n      <Link>Help\\Help.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpRequestProcessor.cs\">\n      <Link>Help\\HelpRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpType.cs\">\n      <Link>Help\\HelpType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Language.cs\">\n      <Link>Help\\Language.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\PhotoSize.cs\">\n      <Link>Help\\PhotoSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\RateLimits.cs\">\n      <Link>Help\\RateLimits.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\ITwitterExecute.cs\">\n      <Link>LinqToTwitter\\ITwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterContext.cs\">\n      <Link>LinqToTwitter\\TwitterContext.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExecute.cs\">\n      <Link>LinqToTwitter\\TwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExtensions.cs\">\n      <Link>LinqToTwitter\\TwitterExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryable.cs\">\n      <Link>LinqToTwitter\\TwitterQueryable.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryProvider.cs\">\n      <Link>LinqToTwitter\\TwitterQueryProvider.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\List.cs\">\n      <Link>List\\List.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListAction.cs\">\n      <Link>List\\ListAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListExtensions.cs\">\n      <Link>List\\ListExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListRequestProcessor.cs\">\n      <Link>List\\ListRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListType.cs\">\n      <Link>List\\ListType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AnonymousAuthorizer.cs\">\n      <Link>OAuth\\AnonymousAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ApplicationOnlyAuthorizer.cs\">\n      <Link>OAuth\\ApplicationOnlyAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AuthAccessType.cs\">\n      <Link>OAuth\\AuthAccessType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\InMemoryCredentials.cs\">\n      <Link>OAuth\\InMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthCredentials.cs\">\n      <Link>OAuth\\IOAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthTwitter.cs\">\n      <Link>OAuth\\IOAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ITwitterAuthorizer.cs\">\n      <Link>OAuth\\ITwitterAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthAuthorizer.cs\">\n      <Link>OAuth\\OAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthBase.cs\">\n      <Link>OAuth\\OAuthBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthSignatureTypes.cs\">\n      <Link>OAuth\\OAuthSignatureTypes.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthTwitter.cs\">\n      <Link>OAuth\\OAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\PinAuthorizer.cs\">\n      <Link>OAuth\\PinAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SignInAuthorizer.cs\">\n      <Link>OAuth\\SignInAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserAuthorizer.cs\">\n      <Link>OAuth\\SingleUserAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\Utilities.cs\">\n      <Link>OAuth\\Utilities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\WebAuthorizer.cs\">\n      <Link>OAuth\\WebAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthAuthorizer.cs\">\n      <Link>OAuth\\XAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthCredentials.cs\">\n      <Link>OAuth\\XAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\Raw.cs\">\n      <Link>Raw\\Raw.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawExtensions.cs\">\n      <Link>Raw\\RawExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawRequestProcessor.cs\">\n      <Link>Raw\\RawRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResults.cs\">\n      <Link>RelatedResults\\RelatedResults.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsRequestProcessor.cs\">\n      <Link>RelatedResults\\RelatedResultsRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsType.cs\">\n      <Link>RelatedResults\\RelatedResultsType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\ReportSpam\\ReportSpamExtensions.cs\">\n      <Link>ReportSpam\\ReportSpamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearch.cs\">\n      <Link>SavedSearch\\SavedSearch.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchAction.cs\">\n      <Link>SavedSearch\\SavedSearchAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchExtensions.cs\">\n      <Link>SavedSearch\\SavedSearchExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchRequestProcessor.cs\">\n      <Link>SavedSearch\\SavedSearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchType.cs\">\n      <Link>SavedSearch\\SavedSearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Attitude.cs\">\n      <Link>Search\\Attitude.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\ResultType.cs\">\n      <Link>Search\\ResultType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Search.cs\">\n      <Link>Search\\Search.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchEntry.cs\">\n      <Link>Search\\SearchEntry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchMetaData.cs\">\n      <Link>Search\\SearchMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchRequestProcessor.cs\">\n      <Link>Search\\SearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchType.cs\">\n      <Link>Search\\SearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\LitJsonExtensions.cs\">\n      <Link>Serialization\\Extensions\\LitJsonExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IJsonWrapper.cs\">\n      <Link>Serialization\\LitJson\\IJsonWrapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IOrderedDictionary.cs\">\n      <Link>Serialization\\LitJson\\IOrderedDictionary.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonData.cs\">\n      <Link>Serialization\\LitJson\\JsonData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonException.cs\">\n      <Link>Serialization\\LitJson\\JsonException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonMapper.cs\">\n      <Link>Serialization\\LitJson\\JsonMapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonReader.cs\">\n      <Link>Serialization\\LitJson\\JsonReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonWriter.cs\">\n      <Link>Serialization\\LitJson\\JsonWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\Lexer.cs\">\n      <Link>Serialization\\LitJson\\Lexer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\ParserToken.cs\">\n      <Link>Serialization\\LitJson\\ParserToken.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraph.cs\">\n      <Link>SocialGraph\\SocialGraph.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphRequestProcessor.cs\">\n      <Link>SocialGraph\\SocialGraphRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphType.cs\">\n      <Link>SocialGraph\\SocialGraphType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Annotation.cs\">\n      <Link>Status\\Annotation.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Contributor.cs\">\n      <Link>Status\\Contributor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatus.cs\">\n      <Link>Status\\EmbeddedStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatusAlignment.cs\">\n      <Link>Status\\EmbeddedStatusAlignment.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\FilterLevel.cs\">\n      <Link>Status\\FilterLevel.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Retweet.cs\">\n      <Link>Status\\Retweet.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Status.cs\">\n      <Link>Status\\Status.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusAction.cs\">\n      <Link>Status\\StatusAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusExtensions.cs\">\n      <Link>Status\\StatusExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusMetaData.cs\">\n      <Link>Status\\StatusMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusRequestProcessor.cs\">\n      <Link>Status\\StatusRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusType.cs\">\n      <Link>Status\\StatusType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStream.cs\">\n      <Link>Streaming\\ControlStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamExtensions.cs\">\n      <Link>Streaming\\ControlStreamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamFollow.cs\">\n      <Link>Streaming\\ControlStreamFollow.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamInfo.cs\">\n      <Link>Streaming\\ControlStreamInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamRequestProcessor.cs\">\n      <Link>Streaming\\ControlStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamType.cs\">\n      <Link>Streaming\\ControlStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamUser.cs\">\n      <Link>Streaming\\ControlStreamUser.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\IStreamContent.cs\">\n      <Link>Streaming\\IStreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamContent.cs\">\n      <Link>Streaming\\StreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\Streaming.cs\">\n      <Link>Streaming\\Streaming.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingRequestProcessor.cs\">\n      <Link>Streaming\\StreamingRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingType.cs\">\n      <Link>Streaming\\StreamingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStream.cs\">\n      <Link>Streaming\\UserStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamRequestProcessor.cs\">\n      <Link>Streaming\\UserStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamType.cs\">\n      <Link>Streaming\\UserStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Location.cs\">\n      <Link>Trend\\Location.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Trend.cs\">\n      <Link>Trend\\Trend.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendRequestProcessor.cs\">\n      <Link>Trend\\TrendRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendType.cs\">\n      <Link>Trend\\TrendType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\Category.cs\">\n      <Link>User\\Category.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\ProfileImageSize.cs\">\n      <Link>User\\ProfileImageSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\User.cs\">\n      <Link>User\\User.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserAction.cs\">\n      <Link>User\\UserAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserIdentifier.cs\">\n      <Link>User\\UserIdentifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserRequestProcessor.cs\">\n      <Link>User\\UserRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserType.cs\">\n      <Link>User\\UserType.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"LinqToTwitter\\TwitterExecuteAsync.cs\" />\n    <Compile Include=\"OAuth\\MvcAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\MvcOAuthActionResult.cs\" />\n    <Compile Include=\"OAuth\\SessionStateCredentials.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\LinqExtensions.cs\">\n      <Link>Common\\LinqExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserInMemoryCredentials.cs\">\n      <Link>OAuth\\SingleUserInMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\DictionaryExtensions.cs\">\n      <Link>Serialization\\Extensions\\DictionaryExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\StringExtensions.cs\">\n      <Link>Serialization\\Extensions\\StringExtensions.cs</Link>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Windows.Installer.3.1\">\n      <Visible>False</Visible>\n      <ProductName>Windows Installer 3.1</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\LinqToTwitterAg\\LinqToTwitter.snk\">\n      <Link>LinqToTwitter.snk</Link>\n    </None>\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitter/OAuth/MvcAuthorizer.cs",
    "content": "﻿#if !NETFX_CORE\nusing System;\nusing System.Web.Mvc;\n\nnamespace LinqToTwitter\n{\n    public class MvcAuthorizer : WebAuthorizer\n    {\n        public ActionResult BeginAuthorization()\n        {\n            return new MvcOAuthActionResult(this);\n        }\n\n        public new ActionResult BeginAuthorization(Uri callback)\n        {\n            this.Callback = callback;\n            return new MvcOAuthActionResult(this);\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitter/OAuth/MvcOAuthActionResult.cs",
    "content": "﻿#if !NETFX_CORE\nusing System;\nusing System.Web;\nusing System.Web.Mvc;\n\nnamespace LinqToTwitter\n{\n    public class MvcOAuthActionResult : ActionResult\n    {\n        private readonly WebAuthorizer webAuth;\n\n        public MvcOAuthActionResult(WebAuthorizer webAuth)\n        {\n            this.webAuth = webAuth;\n        }\n\n        public override void ExecuteResult(ControllerContext context)\n        {\n            webAuth.PerformRedirect = authUrl =>\n            {\n                HttpContext.Current.Response.Redirect(authUrl);\n            };\n\n            Uri callback =\n                webAuth.Callback == null ?\n                    HttpContext.Current.Request.Url :\n                    webAuth.Callback;\n\n            webAuth.BeginAuthorization(callback);\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitter/OAuth/SessionStateCredentials.cs",
    "content": "﻿using System.Web;\nusing System.Web.SessionState;\n\nnamespace LinqToTwitter\n{\n    public class SessionStateCredentials : InMemoryCredentials\n    {\n        readonly HttpSessionState session;\n\n        public SessionStateCredentials()\n        {\n            session = HttpContext.Current.Session;\n        }\n\n        public SessionStateCredentials(HttpSessionState session)\n        {\n            this.session = session;\n        }\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return session[\"OAuthConsumerKey\"] as string;\n            }\n            set\n            {\n                session[\"OAuthConsumerKey\"] = value;\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return session[\"OAuthConsumerSecret\"] as string;\n            }\n            set\n            {\n                session[\"OAuthConsumerSecret\"] = value;\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return session[\"OAuthToken\"] as string;\n            }\n            set\n            {\n                session[\"OAuthToken\"] = value;\n            }\n        }\n\n        public override string AccessToken\n        {\n            get\n            {\n                return session[\"OAuthAccessToken\"] as string;\n            }\n            set\n            {\n                session[\"OAuthAccessToken\"] = value;\n            }\n        }\n\n        public override string ScreenName\n        {\n            get\n            {\n                return session[\"ScreenNameToken\"] as string;\n            }\n            set\n            {\n                session[\"ScreenNameToken\"] = value;\n            }\n        }\n\n        public override string UserId\n        {\n            get\n            {\n                return session[\"UserIdToken\"] as string;\n            }\n            set\n            {\n                session[\"UserIdToken\"] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitter/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Security;\n\n[assembly: AllowPartiallyTrustedCallers]\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter\")]\n[assembly: AssemblyDescription(\"Open Source LINQ Provider for the Twitter Micro-Blogging Service (Desktop and Web)\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Joe Mayo\")]\n[assembly: AssemblyProduct(\"Linq To Twitter\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2008 - 2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"da0541cc-a834-4415-9562-170e25171b28\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"2.1.13.0\")]\n[assembly: AssemblyFileVersion(\"2.1.13.0\")]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitterXUnitTests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/Account.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// information for account queries\n    /// </summary>\n    public class Account\n    {\n        /// <summary>\n        /// Type of account query (VerifyCredentials or RateLimitStatus)\n        /// </summary>\n        public AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// User returned by VerifyCredentials Queries\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// RateLimitStatus returned by RateLimitStatus queries\n        /// </summary>\n        public RateLimitStatus RateLimitStatus { get; set; }\n\n        /// <summary>\n        /// Response from request to end session\n        /// </summary>\n        public TwitterHashResponse EndSessionStatus { get; set; }\n\n        /// <summary>\n        /// Current Totals\n        /// </summary>\n        public Totals Totals { get; set; }\n\n        /// <summary>\n        /// Account settings, such as trend location, geo enabled, and sleep time\n        /// </summary>\n        public Settings Settings { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/AccountAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum AccountAction\n    {\n        /// <summary>\n        /// Ends the session of the authenticating user\n        /// </summary>\n        EndSession,\n\n        /// <summary>\n        /// Populates new settings\n        /// </summary>\n        Settings\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/AccountExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class AccountExtensions\n    {\n        const string NoInputParam = \"NoInput\";\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User info with new colors</returns>\n        public static User UpdateAccountColors(this TwitterContext ctx, string background, string text, string link, string sidebarFill, string sidebarBorder, bool skipStatus)\n        {\n            return UpdateAccountColors(ctx, background, text, link, sidebarFill, sidebarBorder, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User info with new colors</returns>\n        public static User UpdateAccountColors(this TwitterContext ctx, string background, string text, string link, string sidebarFill, string sidebarBorder, bool includeEntities, bool skipStatus)\n        {\n            return UpdateAccountColors(ctx, background, text, link, sidebarFill, sidebarBorder, includeEntities, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User info with new colors</returns>\n        public static User UpdateAccountColors(this TwitterContext ctx, string background, string text, string link, string sidebarFill, string sidebarBorder, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_colors.json\";\n\n            if (string.IsNullOrEmpty(background) &&\n                string.IsNullOrEmpty(text) &&\n                string.IsNullOrEmpty(link) &&\n                string.IsNullOrEmpty(sidebarFill) &&\n                string.IsNullOrEmpty(sidebarBorder))\n            {\n                throw new ArgumentException(\"At least one of the colors (background, text, link, sidebarFill, or sidebarBorder) must be provided as arguments, but none are specified.\", NoInputParam);\n            }\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"profile_background_color\", string.IsNullOrEmpty(background) ? (string)null : background.TrimStart('#') },\n                        { \"profile_text_color\", string.IsNullOrEmpty(text) ? (string)null : text.TrimStart('#') },\n                        { \"profile_link_color\", string.IsNullOrEmpty(link) ? (string)null : link.TrimStart('#') },\n                        { \"profile_sidebar_fill_color\", string.IsNullOrEmpty(sidebarFill) ? (string)null : sidebarFill.TrimStart('#') },\n                        { \"profile_sidebar_border_color\", string.IsNullOrEmpty(sidebarBorder) ? (string)null : sidebarBorder.TrimStart('#') },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n#if !NETFX_CORE\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"imageFilePath\">full path to file, including file name</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountImage(this TwitterContext ctx, string imageFilePath, bool skipStatus)\n        {\n            return UpdateAccountImage(ctx, imageFilePath, skipStatus, null);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"imageFilePath\">full path to file, including file name</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountImage(this TwitterContext ctx, string imageFilePath, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_image.json\";\n\n            if (string.IsNullOrEmpty(imageFilePath))\n            {\n                throw new ArgumentException(\"imageFilePath is required.\", \"imageFilePath\");\n            }\n\n            var reqProc = new UserRequestProcessor<User>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    };\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostTwitterFile(accountUrl, parameters, imageFilePath, reqProc);\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        } \n#endif\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountImage(this TwitterContext ctx, byte[] image, string fileName, string imageType, bool skipStatus)\n        {\n            return UpdateAccountImage(ctx, image, fileName, imageType, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountImage(this TwitterContext ctx, byte[] image, string fileName, string imageType, bool includeEntities, bool skipStatus)\n        {\n            return UpdateAccountImage(ctx, image, fileName, imageType, includeEntities, skipStatus, null);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountImage(this TwitterContext ctx, byte[] image, string fileName, string imageType, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_image.json\";\n\n            if (image == null || image.Length == 0)\n            {\n                throw new ArgumentException(\"image is required.\", \"image\");\n            }\n\n            if (string.IsNullOrEmpty(fileName))\n            {\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n            }\n\n            if (string.IsNullOrEmpty(imageType))\n            {\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n            }\n\n            var reqProc = new UserRequestProcessor<User>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    };\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostTwitterImage(accountUrl, parameters, image, fileName, imageType, reqProc);\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n#if !NETFX_CORE\n        /// <summary>\n        /// sends an image file to Twitter to replace background image\n        /// </summary>\n        /// <param name=\"imageFilePath\">full path to file, including file name</param>\n        /// <param name=\"tile\">Tile image in background</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountBackgroundImage(this TwitterContext ctx, string imageFilePath, bool tile, bool use, bool includeEntities, bool skipStatus)\n        {\n            return UpdateAccountBackgroundImage(ctx, imageFilePath, tile, use, includeEntities, skipStatus, null);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace background image\n        /// </summary>\n        /// <param name=\"imageFilePath\">full path to file, including file name</param>\n        /// <param name=\"tile\">Tile image in background</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountBackgroundImage(this TwitterContext ctx, string imageFilePath, bool tile, bool use, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_background_image.json\";\n\n            if (string.IsNullOrEmpty(imageFilePath))\n            {\n                throw new ArgumentException(\"imageFilePath is required.\", \"imageFilePath\");\n            }\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"include_entities\", includeEntities.ToString().ToLower() },\n                { \"skip_status\", skipStatus.ToString().ToLower() }\n            };\n\n            if (tile)\n            {\n                parameters.Add(\"tile\", true.ToString().ToLower());\n                parameters.Add(\"use\", use.ToString().ToLower());\n            }\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostTwitterFile(accountUrl, parameters, imageFilePath, reqProc);\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n#endif\n\n        /// <summary>\n        /// sends an image file to Twitter to replace background image\n        /// </summary>\n        /// <param name=\"image\">full path to file, including file name</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"tile\">Tile image across background.</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountBackgroundImage(this TwitterContext ctx, byte[] image, string fileName, string imageType, bool tile, bool use, bool skipStatus)\n        {\n            return UpdateAccountBackgroundImage(ctx, image, fileName, imageType, tile, use, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace background image\n        /// </summary>\n        /// <param name=\"image\">full path to file, including file name</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"tile\">Tile image across background.</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountBackgroundImage(this TwitterContext ctx, byte[] image, string fileName, string imageType, bool tile, bool use, bool includeEntities, bool skipStatus)\n        {\n            return UpdateAccountBackgroundImage(ctx, image, fileName, imageType, tile, use, includeEntities, skipStatus, null);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace background image\n        /// </summary>\n        /// <param name=\"image\">full path to file, including file name</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"tile\">Tile image across background.</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public static User UpdateAccountBackgroundImage(this TwitterContext ctx, byte[] image, string fileName, string imageType, bool tile, bool use, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_background_image.json\";\n\n            if (image == null || image.Length == 0)\n            {\n                throw new ArgumentException(\"image is required.\", \"image\");\n            }\n\n            if (string.IsNullOrEmpty(fileName))\n            {\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n            }\n\n            if (string.IsNullOrEmpty(imageType))\n            {\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n            }\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"include_entities\", includeEntities.ToString().ToLower() },\n                { \"skip_status\", skipStatus.ToString().ToLower() }\n            };\n\n            if (tile)\n            {\n                parameters.Add(\"tile\", true.ToString().ToLower());\n                parameters.Add(\"use\", use.ToString().ToLower());\n            }\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostTwitterImage(accountUrl, parameters, image, fileName, imageType, reqProc);\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n        /// <summary>\n        /// Allows removal of background image by setting back to the default background.  Once the background image is removed\n        /// it can not be turned back on.\n        /// </summary>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns></returns>\n        public static User RemoveBackgroundImage(this TwitterContext ctx, bool skipStatus)\n        {\n            return RemoveBackgroundImage(ctx, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Allows removal of background image by setting back to the default background.  Once the background image is removed\n        /// it can not be turned back on.\n        /// </summary>\n        /// <param name=\"ctx\"></param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns></returns>\n        public static User RemoveBackgroundImage(this TwitterContext ctx, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_background_image.json\";\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"use\", \"false\" },\n                        { \"skip_status\", skipStatus.ToString()}\n                    },\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public static User UpdateAccountProfile(this TwitterContext ctx, string name, string url, string location, string description, bool skipStatus)\n        {\n            return UpdateAccountProfile(ctx, name, url, location, description, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public static User UpdateAccountProfile(this TwitterContext ctx, string name, string url, string location, string description, bool includeEntities, bool skipStatus)\n        {\n            return UpdateAccountProfile(ctx, name, url, location, description, includeEntities, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User with new info</returns>\n        public static User UpdateAccountProfile(this TwitterContext ctx, string name, string url, string location, string description, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile.json\";\n\n            if (string.IsNullOrEmpty(name) &&\n                string.IsNullOrEmpty(url) &&\n                string.IsNullOrEmpty(location) &&\n                string.IsNullOrEmpty(description))\n            {\n                throw new ArgumentException(\"At least one of the text fields (name, email, url, location, or description) must be provided as arguments, but none are specified.\", NoInputParam);\n            }\n\n            if (!string.IsNullOrEmpty(name) && name.Length > 20)\n            {\n                throw new ArgumentException(\"name must be no longer than 20 characters\", \"name\");\n            }\n\n            if (!string.IsNullOrEmpty(url) && url.Length > 100)\n            {\n                throw new ArgumentException(\"url must be no longer than 100 characters\", \"url\");\n            }\n\n            if (!string.IsNullOrEmpty(location) && location.Length > 30)\n            {\n                throw new ArgumentException(\"location must be no longer than 30 characters\", \"location\");\n            }\n\n            if (!string.IsNullOrEmpty(description) && description.Length > 160)\n            {\n                throw new ArgumentException(\"description must be no longer than 160 characters\", \"description\");\n            }\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"name\", name },\n                        { \"url\", url },\n                        { \"location\", location },\n                        { \"description\", description },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n        /// <summary>\n        /// Updates user's account settings\n        /// </summary>\n        /// <param name=\"trendLocationWeoid\">WEOID for Trend Location the user is interested in.</param>\n        /// <param name=\"sleepTimeEnabled\">Turn on time periods when notifications won't be sent.</param>\n        /// <param name=\"startSleepTime\">Don't send notifications at this time or later this time.</param>\n        /// <param name=\"endSleepTime\">Start sending notifications again after this time.</param>\n        /// <param name=\"timeZone\">User's time zone.</param>\n        /// <param name=\"lang\">User's language.</param>\n        /// <returns>Account information with Settings property populated.</returns>\n        public static Account UpdateAccountSettings(this TwitterContext ctx, int? trendLocationWoeid, bool? sleepTimeEnabled, int? startSleepTime, int? endSleepTime, string timeZone, string lang)\n        {\n            return UpdateAccountSettings(ctx, trendLocationWoeid, sleepTimeEnabled, startSleepTime, endSleepTime, timeZone, lang, null);\n        }\n\n        /// <summary>\n        /// Updates user's account settings\n        /// </summary>\n        /// <param name=\"trendLocationWeoid\">WEOID for Trend Location the user is interested in.</param>\n        /// <param name=\"sleepTimeEnabled\">Turn on time periods when notifications won't be sent.</param>\n        /// <param name=\"startSleepTime\">Don't send notifications at this time or later this time. (hour from 00 to 23)</param>\n        /// <param name=\"endSleepTime\">Start sending notifications again after this time. (hour from 00 to 23)</param>\n        /// <param name=\"timeZone\">User's time zone.</param>\n        /// <param name=\"lang\">User's language.</param>\n        /// <param name=\"callback\">Async Callback.</param>\n        /// <returns>Account information with Settings property populated.</returns>\n        public static Account UpdateAccountSettings(this TwitterContext ctx, int? trendLocationWoeid, bool? sleepTimeEnabled, int? startSleepTime, int? endSleepTime, string timeZone, string lang, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/settings.json\";\n\n            if (trendLocationWoeid == null &&\n                sleepTimeEnabled == null &&\n                startSleepTime == null &&\n                endSleepTime == null &&\n                string.IsNullOrEmpty(timeZone) &&\n                string.IsNullOrEmpty(lang))\n            {\n                throw new ArgumentException(\"At least one parameter must be provided as arguments, but none are specified.\", NoInputParam);\n            }\n\n            var reqProc = new AccountRequestProcessor<Account>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"trend_location_woeid\", trendLocationWoeid.ToString() },\n                        { \"sleep_time_enabled\", sleepTimeEnabled.ToString() },\n                        { \"start_sleep_time\", startSleepTime.ToString() },\n                        { \"end_sleep_time\", endSleepTime.ToString() },\n                        { \"time_zone\", timeZone },\n                        { \"lang\", lang }\n                    },\n                    response => reqProc.ProcessActionResult(response, AccountAction.Settings));\n\n            Account acct = reqProc.ProcessActionResult(resultsJson, AccountAction.Settings);\n            return acct;\n        }\n\n        /// <summary>\n        /// Modify device information\n        /// </summary>\n        /// <param name=\"device\">Which device to use.</param>\n        /// <param name=\"includeEntitites\">Set this to false to not add entitites to response. (default: true)</param>\n        /// <returns></returns>\n        public static Account UpdateDeliveryDevice(this TwitterContext ctx, DeviceType device, bool includeEntitites)\n        {\n            return UpdateDeliveryDevice(ctx, device, includeEntitites, null);\n        }\n\n        /// <summary>\n        /// Modify device information\n        /// </summary>\n        /// <param name=\"device\">Which device to use.</param>\n        /// <param name=\"includeEntitites\">Set this to false to not add entitites to response. (default: true)</param>\n        /// <param name=\"callback\">Async Callback.</param>\n        /// <returns></returns>\n        public static Account UpdateDeliveryDevice(this TwitterContext ctx, DeviceType device, bool includeEntitites, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_delivery_device.json\";\n\n            var reqProc = new AccountRequestProcessor<Account>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"device\", device.ToString().ToLower() },\n                        { \"include_entities\", includeEntitites.ToString().ToLower() }\n                    },\n                    response => reqProc.ProcessActionResult(response, AccountAction.Settings));\n\n            Account acct = reqProc.ProcessActionResult(resultsJson, AccountAction.Settings);\n            return acct;\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"callback\">Async callback routine.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public static User UpdateProfileBanner(this TwitterContext ctx, byte[] banner, string fileName, string imageType)\n        {\n            return UpdateProfileBanner(ctx, banner, fileName, imageType, 1252, 626, 0, 0, null);\n        }\n       \n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"callback\">Async callback routine.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public static User UpdateProfileBanner(this TwitterContext ctx, byte[] banner, string fileName, string imageType, Action<TwitterAsyncResponse<User>> callback)\n        {\n            return UpdateProfileBanner(ctx, banner, fileName, imageType, 1252, 626, 0, 0, callback);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"width\">Pixel width to clip image.</param>\n        /// <param name=\"height\">Pixel height to clip image.</param>\n        /// <param name=\"offsetLeft\">Pixels to offset start of image from the left.</param>\n        /// <param name=\"offsetTop\">Pixels to offset start of image from the top.</param>\n        /// <param name=\"callback\">Async callback routine.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public static User UpdateProfileBanner(this TwitterContext ctx, byte[] banner, string fileName, string imageType, int width, int height, int offsetLeft, int offsetTop)\n        {\n            return UpdateProfileBanner(ctx, banner, fileName, imageType, width, height, offsetLeft, offsetTop, null);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"width\">Pixel width to clip image.</param>\n        /// <param name=\"height\">Pixel height to clip image.</param>\n        /// <param name=\"offsetLeft\">Pixels to offset start of image from the left.</param>\n        /// <param name=\"offsetTop\">Pixels to offset start of image from the top.</param>\n        /// <param name=\"callback\">Async callback routine.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public static User UpdateProfileBanner(this TwitterContext ctx, byte[] banner, string fileName, string imageType, int width, int height, int offsetLeft, int offsetTop, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/update_profile_banner.json\";\n\n            if (banner == null || banner.Length == 0)\n            {\n                throw new ArgumentException(\"banner is required.\", \"banner\");\n            }\n\n            if (string.IsNullOrEmpty(fileName))\n            {\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n            }\n\n            if (string.IsNullOrEmpty(imageType))\n            {\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n            }\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"width\", width.ToString() },\n                { \"height\", height.ToString() },\n                { \"offset_left\", offsetLeft.ToString() },\n                { \"offset_top\", offsetTop.ToString() },\n                { \"banner\", \"IMAGE_DATA\" }\n            };\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostTwitterImage(accountUrl, parameters, banner, fileName, imageType, reqProc);\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n        /// <summary>\n        /// Removes banner from authenticated user's profile.\n        /// </summary>\n        /// <returns>Empty User instance.</returns>\n        public static User RemoveProfileBanner(this TwitterContext ctx)\n        {\n            return RemoveProfileBanner(ctx, null);\n        }\n\n        /// <summary>\n        /// Removes banner from authenticated user's profile.\n        /// </summary>\n        /// <param name=\"callback\">Async Callback.</param>\n        /// <returns>Empty User instance.</returns>\n        public static User RemoveProfileBanner(this TwitterContext ctx, Action<TwitterAsyncResponse<User>> callback)\n        {\n            var accountUrl = ctx.BaseUrl + \"account/remove_profile_banner.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    accountUrl,\n                    new Dictionary<string, string>(),\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/AccountRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// handles query processing for accounts\n    /// </summary>\n    public class AccountRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of account query (VerifyCredentials or RateLimitStatus)\n        /// </summary>\n        internal AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include status in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Account>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<AccountType>(parameters[TypeParam]);\n\n            switch (Type)\n            {\n                case AccountType.VerifyCredentials:\n                    return BuildVerifyCredentialsUrl(parameters);\n                case AccountType.Settings:\n                    return new Request(BaseUrl + \"account/settings.json\");\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n  \n        private Request BuildVerifyCredentialsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"account/verify_credentials.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms json into IQueryable of Account\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <returns>List of Account</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Account acct = null;\n\n            if (!string.IsNullOrEmpty(responseJson))\n            {\n                switch (Type)\n                {\n                    case AccountType.Settings:\n                        acct = HandleSettingsResponse(responseJson);\n                        break;\n\n                    case AccountType.VerifyCredentials:\n                        acct = HandleVerifyCredentialsResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n\n                acct.Type = Type;\n                acct.SkipStatus = SkipStatus;\n                acct.IncludeEntities = IncludeEntities;\n            }\n\n            return new List<Account> { acct }.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            Account acct = null;\n\n            if (!string.IsNullOrEmpty(responseJson))\n            {\n                switch ((AccountAction)theAction)\n                {\n                    case AccountAction.Settings:\n                        acct = HandleSettingsResponse(responseJson);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessActionResult should never execute because a Type must be specified.\");\n                }\n            }\n\n            return acct.ItemCast(default(T));\n        }\n\n        internal Account HandleSettingsResponse(string responseJson)\n        {\n            var settings = JsonMapper.ToObject(responseJson);\n            var sleepTime = settings.GetValue<JsonData>(\"sleep_time\");\n            var timeZone = settings.GetValue<JsonData>(\"time_zone\");\n            var trendLocationData = settings.GetValue<JsonData>(\"trend_location\");\n            var trendLocation = trendLocationData == null ? null : trendLocationData[0];\n\n            var acct = new Account\n            {\n                Type = Type,\n                Settings = new Settings\n                {\n                    TrendLocation = new Location(trendLocation),\n                    GeoEnabled = settings.GetValue<bool>(\"geo_enabled\"),\n                    SleepTime = new SleepTime(sleepTime),\n                    Language = settings.GetValue<string>(\"language\"),\n                    AlwaysUseHttps = settings.GetValue<bool>(\"always_use_https\"),\n                    DiscoverableByEmail = settings.GetValue<bool>(\"discoverable_by_email\"),\n                    TimeZone = new TZInfo(timeZone)\n                }\n            };\n\n\n            return acct;\n        }\n\n        private Account HandleVerifyCredentialsResponse(string responseJson)\n        {\n            var user = JsonMapper.ToObject(responseJson);\n\n            var acct = new Account\n            {\n                Type = Type,\n                User = new User(user)\n            };\n\n            return acct;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/AccountType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// actions for querying accounts\n    /// </summary>\n    public enum AccountType\n    {\n        /// <summary>\n        /// Gets trend, geo, and sleep settings\n        /// </summary>\n        Settings,\n\n        /// <summary>\n        /// Allows you to check user credentails\n        /// </summary>\n        VerifyCredentials\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/DeviceType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of device for account updates\n    /// </summary>\n    public enum DeviceType\n    {\n        /// <summary>\n        /// no device specified\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// use SMS text\n        /// </summary>\n        Sms,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/RateLimitStatus.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// holds rate limit info\n    /// </summary>\n    public class RateLimitStatus\n    {\n        public int RemainingHits { get; set; }\n\n        public int HourlyLimit { get; set; }\n\n        public DateTime ResetTime { get; set; }\n\n        public int ResetTimeInSeconds { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/Settings.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Account Settings\n    /// </summary>\n    public class Settings\n    {\n        /// <summary>\n        /// Location to display trends for\n        /// </summary>\n        public Location TrendLocation { get; set; }\n\n        /// <summary>\n        /// Is Geo Tracking On?\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Times to not notify (i.e. when you're sleeping)\n        /// </summary>\n        public SleepTime SleepTime { get; set; }\n\n        /// <summary>\n        /// The user's UI language selection on Twitter\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Should they always use https protocol\n        /// </summary>\n        public bool AlwaysUseHttps { get; set; }\n\n        /// <summary>\n        /// Can this user be found by email address?\n        /// </summary>\n        public bool DiscoverableByEmail { get; set; }\n\n        /// <summary>\n        /// The user's timezone selection on Twitter\n        /// </summary>\n        public TZInfo TimeZone { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/SleepTime.cs",
    "content": "﻿using LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Times to stop and start sending notifications\n    ///     - Times are null when Enabled is false\n    /// </summary>\n    public class SleepTime\n    {\n        public SleepTime() {}\n        internal SleepTime(JsonData sleepTime)\n        {\n            StartHour = sleepTime.GetValue<int>(\"start_time\");\n            EndHour = sleepTime.GetValue<int>(\"end_time\");\n            Enabled = sleepTime.GetValue<bool>(\"enabled\");\n        }\n\n        /// <summary>\n        /// Stop sending notifications at this time\n        /// </summary>\n        public int? StartHour { get; set; }\n\n        /// <summary>\n        /// Resume sending notifications at this time\n        /// </summary>\n        public int? EndHour { get; set; }\n\n        /// <summary>\n        /// Is sleep times turned on\n        /// </summary>\n        public bool Enabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/TZInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Time zone informtion\n    /// </summary>\n    public class TZInfo\n    {\n        public TZInfo() {}\n        internal TZInfo(JsonData timeZone)\n        {\n            Name = timeZone.GetValue<string>(\"name\");\n            TzInfoName = timeZone.GetValue<string>(\"tzinfo_name\");\n            UtcOffset = timeZone.GetValue<int>(\"utc_offset\");\n        }\n\n        /// <summary>\n        /// Human-readable timezone name\n        /// </summary>\n        /// <example>Pacific Time (US &amp; Canada)</example>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Rails/unix TZINFO name\n        /// </summary>\n        /// <example>America/Los_Angeles</example>\n        public string TzInfoName { get; set; }\n\n        /// <summary>\n        /// Seconds to subtract from UTC time\n        /// </summary>\n        /// <example>-28800</example>\n        public int? UtcOffset { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Account/Totals.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Current totals\n    /// </summary>\n    public class Totals\n    {\n        /// <summary>\n        /// Total Updates\n        /// </summary>\n        public int Updates { get; set; }\n\n        /// <summary>\n        /// Total Friends\n        /// </summary>\n        public int Friends { get; set; }\n\n        /// <summary>\n        /// Total Favorites\n        /// </summary>\n        public int Favorites { get; set; }\n\n        /// <summary>\n        /// Total Followers\n        /// </summary>\n        public int Followers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Blocks/BlockingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum BlockingType\n    {\n        /// <summary>\n        /// Retrieve list of users (full User objects) being blocked\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Retrieve a list of IDs of users being blocked\n        /// </summary>\n        Ids\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Blocks/Blocks.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps retrieve information about blocks\n    /// </summary>\n    public class Blocks\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of blocks request to perform (input only)\n        /// </summary>\n        public BlockingType Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name (input only)\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id (input only)\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve (input only)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        public int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        public string Cursor { get; set; }\n\n        //\n        // Output parameters\n        //\n\n        /// <summary>\n        /// Prev/Next cursor to move through ID and User lists.\n        /// </summary>\n        public Cursors Cursors { get; set; }\n\n        /// <summary>\n        /// Listed Count\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// List of blocked IDs\n        /// </summary>\n        public List<string> IDs { get; set; }\n\n        /// <summary>\n        /// user being blocked\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Populated for blocking queries, showing all blocked users\n        /// </summary>\n        public List<User> Users { get; set; }\n\n        /// <summary>\n        /// Twitter response for no block on specified user\n        /// </summary>\n        public TwitterHashResponse NoBlock { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Blocks/BlocksExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class BlocksExtensions\n    {\n        /// <summary>\n        /// Blocks a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public static User CreateBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool skipStatus)\n        {\n            return CreateBlock(twitterCtx, userID, screenName, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Blocks a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public static User CreateBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool includeEntities, bool skipStatus)\n        {\n            return CreateBlock(twitterCtx, userID, screenName, includeEntities, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Blocks a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User that was unblocked</returns>\n        public static User CreateBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            if (userID <= 0 && string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either userID or screenName are required parameters.\", \"UserIDOrScreenName\");\n            }\n\n            var blocksUrl = twitterCtx.BaseUrl + \"blocks/create.json\";\n\n            var reqProc = new BlocksRequestProcessor<User>();\n\n            ITwitterExecute twitExe = twitterCtx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    blocksUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID <= 0 ? (string)null : userID.ToString() },\n                        { \"screen_name\", screenName },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User results = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return results;\n        }\n\n        /// <summary>\n        /// Unblocks a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public static User DestroyBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool skipStatus)\n        {\n            return DestroyBlock(twitterCtx, userID, screenName, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Unblocks a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public static User DestroyBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool includeEntities, bool skipStatus)\n        {\n            return DestroyBlock(twitterCtx, userID, screenName, true, skipStatus, null);\n        }\n\n        /// <summary>\n        /// Unblocks a user\n        /// </summary>\n        /// <param name=\"twitterCtx\">Twitter Context</param>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>User that was unblocked</returns>\n        public static User DestroyBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)\n        {\n            if (userID <= 0 && string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either userID or screenName are required parameters.\", \"UserIDOrScreenName\");\n            }\n\n            var blocksUrl = twitterCtx.BaseUrl + \"blocks/destroy.json\";\n\n            var reqProc = new BlocksRequestProcessor<User>();\n\n            ITwitterExecute twitExe = twitterCtx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    blocksUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID <= 0 ? (string)null : userID.ToString() },\n                        { \"screen_name\", screenName },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User results = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return results;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Blocks/BlocksRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes block queries\n    /// </summary>\n    public class BlocksRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of blocks request to perform\n        /// </summary>\n        internal BlockingType Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        internal int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Blocks>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Page\",\n                       \"PerPage\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\",\n                       \"Cursor\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<BlockingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case BlockingType.List:\n                    return BuildListUrl(parameters);\n                case BlockingType.Ids:\n                    return BuildBlockingIDsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting blocking ids\n        /// </summary>\n        /// <returns>base url + show segment</returns>\n        Request BuildBlockingIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/ids.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of blocked users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            return BuildBlockingUrlParameters(parameters, \"blocks/list.json\");\n        }\n\n        /// <summary>\n        /// appends parameters for Blocking queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildBlockingUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"PerPage\"))\n            {\n                PerPage = int.Parse(parameters[\"PerPage\"]);\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"PerPage\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <returns>List of Blocks</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            var blocks = new Blocks\n            {\n                Type = Type,\n                UserID = UserID,\n                ScreenName = ScreenName,\n                Page = Page,\n                PerPage = PerPage,\n                IncludeEntities = IncludeEntities,\n                SkipStatus = SkipStatus,\n                Cursor = Cursor\n            };\n\n            if (string.IsNullOrEmpty(responseJson))\n            {\n                blocks.Users = new List<User>();\n            }\n            else\n            {\n                var blocksJson = JsonMapper.ToObject(responseJson);\n                blocks.Cursors = new Cursors(blocksJson);\n\n                switch (Type)\n                {\n                    case BlockingType.List:\n                        HandleList(blocks, blocksJson);\n                        break;\n                    case BlockingType.Ids:\n                        HandleBlockingIDs(blocks, blocksJson);\n                        break;\n                    default:\n                        throw new ArgumentException(\"Unhandled BlockingType.\");\n                }\n            }\n\n            return new List<Blocks> { blocks }.OfType<T>().ToList();\n        }\n\n        void HandleList(Blocks blocks, JsonData blocksJson)\n        {\n            var users = blocksJson.GetValue<JsonData>(\"users\");\n\n            blocks.Users =\n                (from JsonData user in users\n                 select new User(user))\n                .ToList();\n        }\n\n        void HandleBlockingIDs(Blocks blocks, JsonData blocksJson)\n        {\n            var ids = blocksJson.GetValue<JsonData>(\"ids\");\n\n            blocks.IDs =\n                (from JsonData id in ids\n                 select id.ToString())\n                .ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData blocksJson = JsonMapper.ToObject(responseJson);\n\n            var user = new User(blocksJson);\n\n            return user.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/BannerSize.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter.Common\n{\n    public class BannerSize\n    {\n        public string Label { get; set; }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/BuildUrlHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\n\nusing MSEncoder = LinqToTwitter.Security.Application.Encoder;\n\n#if SILVERLIGHT && !WINDOWS_PHONE\n    using System.Windows.Browser;\n#elif !SILVERLIGHT && !WINDOWS_PHONE\n\n#endif\n\nnamespace LinqToTwitter\n{\n    public class BuildUrlHelper\n    {\n        /// <summary>\n        /// makes ID parameter part of the URL\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <param name=\"url\">original url</param>\n        /// <returns>transformed URL with ID</returns>\n        public static string TransformIDUrl(Dictionary<string, string> parameters, string url)\n        {\n            return TransformParameterUrl(parameters, \"ID\", url);\n        }\n\n        /// <summary>\n        /// makes a parameter part of the URL\n        /// </summary>\n        /// <param name=\"parameters\">parameter dictionary</param>\n        /// <param name=\"key\">key in paramaters dictionary</param>\n        /// <param name=\"url\">original url</param>\n        /// <returns>transformed URL with ID</returns>\n        public static string TransformParameterUrl(Dictionary<string, string> parameters, string key, string url)\n        {\n            if (parameters.ContainsKey(key))\n            {\n                var fileExtension = Path.GetExtension(url);\n                if (fileExtension != null) \n                    url = url.Replace(fileExtension, \"/\" + parameters[key] + fileExtension);\n            }\n\n            return url;\n        }\n\n\n        /// <summary>\n        /// Url Encodes a value\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>UrlEncoded string</returns>\n        public static string UrlEncode(string value)\n        {\n            const string ReservedChars = @\"`!@#$%^&*()_-+=.~,:;'?/|\\[] \";\n            const string UnReservedChars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~\";\n\n            var result = new StringBuilder();\n\n            if (string.IsNullOrEmpty(value))\n                return string.Empty;\n\n            foreach (var symbol in value)\n            {\n                if (UnReservedChars.IndexOf(symbol) != -1)\n                {\n                    result.Append(symbol);\n                }\n                else if (ReservedChars.IndexOf(symbol) != -1)\n                {\n                    result.Append('%' + String.Format(\"{0:X2}\", (int)symbol).ToUpper());\n                }\n                else\n                {\n                    string symbolString = symbol.ToString();\n                    var encoded = MSEncoder.UrlEncode(symbolString, Encoding.UTF8).ToUpper();\n\n                    if (!string.IsNullOrEmpty(encoded))\n                    {\n                        result.Append(encoded);\n                    }\n                }\n            }\n\n            return result.ToString();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Culture.cs",
    "content": "﻿using System;\nusing System.Globalization;\n\nnamespace LinqToTwitter\n{\n    public class Culture\n    {\n        static CultureInfo usCulture;\n\n        public static CultureInfo US\n        {\n            get\n            {\n                if (usCulture == null)\n                {\n                    usCulture = new CultureInfo(\"en-US\");\n                }\n\n                return usCulture;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Cursors.cs",
    "content": "﻿using System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter for previous and next pages\n    /// </summary>\n    /// <remarks>\n    /// To use a cursor, start by setting the cursor to -1\n    /// and then use one of these response cursors to move\n    /// backwards or forwards in paged results.\n    /// </remarks>\n    public class Cursors\n    {\n        public Cursors() {}\n        internal Cursors(JsonData cursors)\n        {\n            Next = cursors.GetValue<ulong>(\"next_cursor\").ToString();\n            Previous = cursors.GetValue<ulong>(\"previous_cursor\").ToString();\n        }\n\n        /// <summary>\n        /// Use this value to retrieve the next page\n        /// </summary>\n        [XmlIgnore]\n        public string Next { get; internal set; }\n\n        /// <summary>\n        /// Use this value to go back to the previous page\n        /// </summary>\n        [XmlIgnore]\n        public string Previous { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/Entities.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Container for mention entities\n    /// </summary>\n    public class Entities\n    {\n        public Entities() { }\n        public Entities(JsonData entityJson)\n        {\n            if (entityJson == null) return;\n\n            var hashTagEntities = entityJson.GetValue<JsonData>(\"hashtags\");\n            var mediaEntities = entityJson.GetValue<JsonData>(\"media\");\n            var urlEntities = entityJson.GetValue<JsonData>(\"urls\");\n            var userEntities = entityJson.GetValue<JsonData>(\"user_mentions\");\n            var symbolEntities = entityJson.GetValue<JsonData>(\"symbols\");\n            HashTagEntities =\n                hashTagEntities == null\n                    ? new List<HashTagEntity>()\n                    : (from JsonData hash in hashTagEntities\n                       let indices = hash.GetValue<JsonData>(\"indices\")\n                       select new HashTagEntity\n                       {\n                           Tag = hash.GetValue<string>(\"text\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                       .ToList();\n            MediaEntities =\n                mediaEntities == null\n                    ? new List<MediaEntity>()\n                    : (from JsonData media in mediaEntities\n                       let indices = media.GetValue<JsonData>(\"indices\")\n                       let sizes = media.GetValue<JsonData>(\"sizes\")\n                       select new MediaEntity\n                       {\n                           DisplayUrl = media.GetValue<string>(\"display_url\"),\n                           ExpandedUrl = media.GetValue<string>(\"expanded_url\"),\n                           ID = media.GetValue<ulong>(\"id\"),\n                           MediaUrl = media.GetValue<string>(\"media_url\"),\n                           MediaUrlHttps = media.GetValue<string>(\"media_url_https\"),\n                           Sizes =\n                               (from key in (sizes as IDictionary<string, JsonData>).Keys as List<string>\n                                let sizesKey = sizes.GetValue<JsonData>(key)\n                                select new PhotoSize\n                                {\n                                    Type = key,\n                                    Width = sizesKey.GetValue<int>(\"w\"),\n                                    Height = sizesKey.GetValue<int>(\"h\"),\n                                    Resize = sizesKey.GetValue<string>(\"resize\")\n                                })\n                               .ToList(),\n                           Type = media.GetValue<string>(\"type\"),\n                           Url = media.GetValue<string>(\"url\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                       .ToList();\n            UrlEntities =\n                urlEntities == null\n                    ? new List<UrlEntity>()\n                    : (from JsonData url in urlEntities\n                       let indices = url.GetValue<JsonData>(\"indices\")\n                       select new UrlEntity\n                       {\n                           Url = url.GetValue<string>(\"url\"),\n                           DisplayUrl = url.GetValue<string>(\"display_url\"),\n                           ExpandedUrl = url.GetValue<string>(\"expanded_url\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n            UserMentionEntities =\n                userEntities == null\n                    ? new List<UserMentionEntity>()\n                    : (from JsonData user in userEntities\n                       let indices = user.GetValue<JsonData>(\"indices\")\n                       select new UserMentionEntity\n                       {\n                           ScreenName = user.GetValue<string>(\"screen_name\"),\n                           Name = user.GetValue<string>(\"name\"),\n                           Id = user.GetValue<ulong>(\"id\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n            SymbolEntities =\n                symbolEntities == null\n                    ? new List<SymbolEntity>()\n                    : (from JsonData user in symbolEntities\n                       let indices = user.GetValue<JsonData>(\"indices\")\n                       select new SymbolEntity\n                       {\n                           Text = user.GetValue<string>(\"text\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n        }\n\n        /// <summary>\n        /// Mentions of the user in the tweet\n        /// </summary>\n        public List<UserMentionEntity> UserMentionEntities { get; set; }\n\n        /// <summary>\n        /// Url entities in the tweet\n        /// </summary>\n        public List<UrlEntity> UrlEntities { get; set; }\n\n        /// <summary>\n        /// Hash tag entities in the tweet\n        /// </summary>\n        public List<HashTagEntity> HashTagEntities { get; set; }\n\n        /// <summary>\n        /// Media entities in the tweet\n        /// </summary>\n        public List<MediaEntity> MediaEntities { get; set; }\n\n        /// <summary>\n        /// Symbol entities in the tweet\n        /// </summary>\n        public List<SymbolEntity> SymbolEntities { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/EntityBase.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Base for all entities\n    /// </summary>\n    public abstract class EntityBase\n    {\n        /// <summary>\n        /// Start of the entity in the tweet\n        /// </summary>\n        public int Start { get; set; }\n\n        /// <summary>\n        /// End of the entity in the tweet\n        /// </summary>\n        public int End { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/HashTagEntity.cs",
    "content": "namespace LinqToTwitter\n{\n    /// <summary>\n    /// Hash tag entity\n    /// </summary>\n    /// <example>#linqtotwitter</example>\n    public class HashTagEntity : EntityBase\n    {\n        /// <summary>\n        /// Tag name without the # sign\n        /// </summary>\n        public string Tag { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/MediaEntity.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public class MediaEntity : UrlEntity\n    {\n        /// <summary>\n        /// ID of the media\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// URL where media is located\n        /// </summary>\n        public string MediaUrl { get; set; }\n\n        /// <summary>\n        /// SSL version of media URL\n        /// </summary>\n        public string MediaUrlHttps { get; set; }\n\n        /// <summary>\n        /// Supported media sizes\n        /// </summary>\n        public List<PhotoSize> Sizes { get; set; }\n\n        /// <summary>\n        /// Type of media\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Character positions of extracted media\n        /// </summary>\n        public List<int> Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/SymbolEntity.cs",
    "content": "using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter symbol entity in the tweet\n    /// </summary>\n    /// <example>@linkedin</example>\n    public class SymbolEntity : EntityBase\n    {\n        /// <summary>\n        /// Symbol\n        /// </summary>\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/UrlEntity.cs",
    "content": "using System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Url mention in the tweet\n    /// </summary>\n    /// <example>http://bit.ly/129Ad</example>\n    public class UrlEntity : EntityBase\n    {\n        /// <summary>\n        /// Absolute Url in the tweet\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// t.co shortened URL\n        /// </summary>\n        public string DisplayUrl { get; set; }\n\n        /// <summary>\n        /// t.co expanded URL\n        /// </summary>\n        public string ExpandedUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Entities/UserMentionEntity.cs",
    "content": "using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter user mention entity in the tweet\n    /// </summary>\n    /// <example>@linkedin</example>\n    public class UserMentionEntity : EntityBase\n    {\n        /// <summary>\n        /// Twitter user Id\n        /// </summary>\n        public ulong Id { get; set; }\n\n        /// <summary>\n        /// Screen name of the Twitter User\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Name of the Twitter User\n        /// </summary>\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Evaluator.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n#if !ASYNC\nusing LinqToTwitter.Common;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// translates variable references in expressions to constants\n    /// </summary>\n    public static class Evaluator\n    {\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <param name=\"fnCanBeEvaluated\">A function that decides whether a given expression node can be part of the local function.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression PartialEval(Expression expression, Func<Expression, bool> fnCanBeEvaluated)\n        {\n            return new SubtreeEvaluator(new Nominator(fnCanBeEvaluated).Nominate(expression)).Eval(expression);\n        }\n\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression PartialEval(Expression expression)\n        {\n            return PartialEval(expression, Evaluator.CanBeEvaluatedLocally);\n        }\n\n        private static bool CanBeEvaluatedLocally(Expression expression)\n        {\n            return expression.NodeType != ExpressionType.Parameter;\n        }\n\n        /// <summary>\n        /// Evaluates & replaces sub-trees when first candidate is reached (top-down)\n        /// </summary>\n        class SubtreeEvaluator : ExpressionVisitor\n        {\n            readonly HashSet<Expression> candidates;\n\n            internal SubtreeEvaluator(HashSet<Expression> candidates)\n            {\n                this.candidates = candidates;\n            }\n\n            internal Expression Eval(Expression exp)\n            {\n                return this.Visit(exp);\n            }\n\n            protected override Expression Visit(Expression exp)\n            {\n                if (exp == null)\n                {\n                    return null;\n                }\n                if (this.candidates.Contains(exp))\n                {\n                    return this.Evaluate(exp);\n                }\n                return base.Visit(exp);\n            }\n\n            private Expression Evaluate(Expression e)\n            {\n                if (e.NodeType == ExpressionType.Constant)\n                {\n                    return e;\n                }\n                LambdaExpression lambda = Expression.Lambda(e);\n                Delegate fn = lambda.Compile();\n                return Expression.Constant(fn.DynamicInvoke(null), e.Type);\n            }\n        }\n\n        /// <summary>\n        /// Performs bottom-up analysis to determine which nodes can possibly\n        /// be part of an evaluated sub-tree.\n        /// </summary>\n        class Nominator : ExpressionVisitor\n        {\n            readonly Func<Expression, bool> fnCanBeEvaluated;\n            HashSet<Expression> candidates;\n            bool cannotBeEvaluated;\n\n            internal Nominator(Func<Expression, bool> fnCanBeEvaluated)\n            {\n                this.fnCanBeEvaluated = fnCanBeEvaluated;\n            }\n\n            internal HashSet<Expression> Nominate(Expression expression)\n            {\n                this.candidates = new HashSet<Expression>();\n                this.Visit(expression);\n                return this.candidates;\n            }\n\n            protected override Expression Visit(Expression expression)\n            {\n                if (expression != null)\n                {\n                    bool saveCannotBeEvaluated = this.cannotBeEvaluated;\n                    this.cannotBeEvaluated = false;\n                    base.Visit(expression);\n                    if (!this.cannotBeEvaluated)\n                    {\n                        if (this.fnCanBeEvaluated(expression))\n                        {\n                            this.candidates.Add(expression);\n                        }\n                        else\n                        {\n                            this.cannotBeEvaluated = true;\n                        }\n                    }\n                    this.cannotBeEvaluated |= saveCannotBeEvaluated;\n                }\n                return expression;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/ExpressionTreeHelpers.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// utilities for working with expression trees\n    /// </summary>\n    internal class ExpressionTreeHelpers\n    {\n        /// <summary>\n        /// test to see if expression is a binary expression that checks equality with a constant value\n        /// - essentially, the caller wants to know if this is a well-formed expression with certain criteria\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">type containing member</param>\n        /// <param name=\"memberName\">member being checked</param>\n        /// <returns>true if member is being checked for equality with value</returns>\n        internal static bool IsMemberEqualsValueExpression(Expression exp, Type declaringType, string memberName)\n        {\n            if (exp.NodeType != ExpressionType.Equal &&\n                exp.NodeType != ExpressionType.NotEqual &&\n                exp.NodeType != ExpressionType.GreaterThan &&\n                exp.NodeType != ExpressionType.GreaterThanOrEqual &&\n                exp.NodeType != ExpressionType.LessThan &&\n                exp.NodeType != ExpressionType.LessThanOrEqual)\n                return false;\n\n            BinaryExpression be = (BinaryExpression)exp;\n\n            // Assert.\n            if (ExpressionTreeHelpers.IsSpecificMemberExpression(be.Left, declaringType, memberName) &&\n                ExpressionTreeHelpers.IsSpecificMemberExpression(be.Right, declaringType, memberName))\n                throw new Exception(\"Cannot have 'member' == 'member' in an expression!\");\n\n            return (ExpressionTreeHelpers.IsSpecificMemberExpression(be.Left, declaringType, memberName) ||\n                ExpressionTreeHelpers.IsSpecificMemberExpression(be.Right, declaringType, memberName));\n        }\n\n        /// <summary>\n        /// verify that the type and member name in the expression are what is expected\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">expected type</param>\n        /// <param name=\"memberName\">expected member name</param>\n        /// <returns>true if type and name in expression match expected type and name</returns>\n        internal static bool IsSpecificMemberExpression(Expression exp, Type declaringType, string memberName)\n        {\n            // adjust for enums or VB ConvertChecked\n            // VB wraps Type in a ConvertChecked that we must extract\n            Expression tempExp =\n                exp.NodeType == ExpressionType.Convert ||\n                exp.NodeType == ExpressionType.ConvertChecked ?\n                    (exp as UnaryExpression).Operand :\n                    exp;\n\n            return ((tempExp is MemberExpression) &&\n                (((MemberExpression)tempExp).Member.DeclaringType == declaringType) &&\n                (((MemberExpression)tempExp).Member.Name == memberName));\n        }\n\n        /// <summary>\n        /// extracts the constant value from a binary equals expression\n        /// - either the left or right side of the expression\n        /// </summary>\n        /// <param name=\"be\">binary expression</param>\n        /// <param name=\"memberDeclaringType\">type of object</param>\n        /// <param name=\"memberName\">member to get value for</param>\n        /// <returns>string representation of value</returns>\n        internal static string GetValueFromEqualsExpression(BinaryExpression be, Type memberDeclaringType, string memberName)\n        {\n            if (be.NodeType != ExpressionType.Equal &&\n                be.NodeType != ExpressionType.NotEqual &&\n                be.NodeType != ExpressionType.GreaterThan &&\n                be.NodeType != ExpressionType.GreaterThanOrEqual &&\n                be.NodeType != ExpressionType.LessThan &&\n                be.NodeType != ExpressionType.LessThanOrEqual)\n                throw new Exception(\"There is a bug in this program.\");\n\n            if (be.Left.NodeType == ExpressionType.MemberAccess ||\n                be.Left.NodeType == ExpressionType.Convert ||\n                be.Left.NodeType == ExpressionType.ConvertChecked)\n            {\n                // adjust for enums & VB ConvertChecked\n                MemberExpression me =\n                    be.Left.NodeType == ExpressionType.Convert ||\n                    be.Left.NodeType == ExpressionType.ConvertChecked ?\n                        (be.Left as UnaryExpression).Operand as MemberExpression :\n                        be.Left as MemberExpression;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                {\n                    return GetValueFromExpression(be.Right);\n                }\n            }\n            else if (be.Right.NodeType == ExpressionType.MemberAccess)\n            {\n                MemberExpression me = (MemberExpression)be.Right;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                {\n                    return GetValueFromExpression(be.Left);\n                }\n            }\n\n            // We should have returned by now.\n            throw new Exception(\"There is a bug in this program.\");\n        }\n\n        /// <summary>\n        /// converts constant expression to constant value\n        /// </summary>\n        /// <param name=\"expression\">constant expression</param>\n        /// <returns>constant value</returns>\n        internal static string GetValueFromExpression(Expression expression)\n        {\n            if (expression.NodeType == ExpressionType.Constant)\n                return ((ConstantExpression)expression).Value.ToString();\n            else\n                throw new InvalidQueryException(\n                    String.Format(\"The expression type {0} is not supported to obtain a value.\", expression.NodeType));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/ExpressionTreeModifier.cs",
    "content": "﻿using System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    class ExpressionTreeModifier<T> : ExpressionVisitor\n    {\n        readonly IQueryable<T> queryableItems;\n\n        internal ExpressionTreeModifier(IQueryable<T> items)\n        {\n            queryableItems = items;\n        }\n\n        internal Expression CopyAndModify(Expression expression)\n        {\n            return Visit(expression);\n        }\n\n        protected override Expression VisitConstant(ConstantExpression c)\n        {\n            // Replace the constant TwitterQueryable arg with the queryable collection.\n            if (c.Type.Name == \"TwitterQueryable`1\")\n                return Expression.Constant(queryableItems);\n            \n            return c;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/ExpressionTreeVisitor.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public abstract class ExpressionVisitor\n    {\n        protected ExpressionVisitor()\n        {\n        }\n\n        protected virtual Expression Visit(Expression exp)\n        {\n            if (exp == null)\n                return exp;\n            switch (exp.NodeType)\n            {\n                case ExpressionType.Negate:\n                case ExpressionType.NegateChecked:\n                case ExpressionType.Not:\n                case ExpressionType.Convert:\n                case ExpressionType.ConvertChecked:\n                case ExpressionType.ArrayLength:\n                case ExpressionType.Quote:\n                case ExpressionType.TypeAs:\n                    return this.VisitUnary((UnaryExpression)exp);\n                case ExpressionType.Add:\n                case ExpressionType.AddChecked:\n                case ExpressionType.Subtract:\n                case ExpressionType.SubtractChecked:\n                case ExpressionType.Multiply:\n                case ExpressionType.MultiplyChecked:\n                case ExpressionType.Divide:\n                case ExpressionType.Modulo:\n                case ExpressionType.And:\n                case ExpressionType.AndAlso:\n                case ExpressionType.Or:\n                case ExpressionType.OrElse:\n                case ExpressionType.LessThan:\n                case ExpressionType.LessThanOrEqual:\n                case ExpressionType.GreaterThan:\n                case ExpressionType.GreaterThanOrEqual:\n                case ExpressionType.Equal:\n                case ExpressionType.NotEqual:\n                case ExpressionType.Coalesce:\n                case ExpressionType.ArrayIndex:\n                case ExpressionType.RightShift:\n                case ExpressionType.LeftShift:\n                case ExpressionType.ExclusiveOr:\n                    return this.VisitBinary((BinaryExpression)exp);\n                case ExpressionType.TypeIs:\n                    return this.VisitTypeIs((TypeBinaryExpression)exp);\n                case ExpressionType.Conditional:\n                    return this.VisitConditional((ConditionalExpression)exp);\n                case ExpressionType.Constant:\n                    return this.VisitConstant((ConstantExpression)exp);\n                case ExpressionType.Parameter:\n                    return this.VisitParameter((ParameterExpression)exp);\n                case ExpressionType.MemberAccess:\n                    return this.VisitMemberAccess((MemberExpression)exp);\n                case ExpressionType.Call:\n                    return this.VisitMethodCall((MethodCallExpression)exp);\n                case ExpressionType.Lambda:\n                    return this.VisitLambda((LambdaExpression)exp);\n                case ExpressionType.New:\n                    return this.VisitNew((NewExpression)exp);\n                case ExpressionType.NewArrayInit:\n                case ExpressionType.NewArrayBounds:\n                    return this.VisitNewArray((NewArrayExpression)exp);\n                case ExpressionType.Invoke:\n                    return this.VisitInvocation((InvocationExpression)exp);\n                case ExpressionType.MemberInit:\n                    return this.VisitMemberInit((MemberInitExpression)exp);\n                case ExpressionType.ListInit:\n                    return this.VisitListInit((ListInitExpression)exp);\n                default:\n                    throw new Exception(string.Format(\"Unhandled expression type: '{0}'\", exp.NodeType));\n            }\n        }\n\n        protected virtual MemberBinding VisitBinding(MemberBinding binding)\n        {\n            switch (binding.BindingType)\n            {\n                case MemberBindingType.Assignment:\n                    return this.VisitMemberAssignment((MemberAssignment)binding);\n                case MemberBindingType.MemberBinding:\n                    return this.VisitMemberMemberBinding((MemberMemberBinding)binding);\n                case MemberBindingType.ListBinding:\n                    return this.VisitMemberListBinding((MemberListBinding)binding);\n                default:\n                    throw new Exception(string.Format(\"Unhandled binding type '{0}'\", binding.BindingType));\n            }\n        }\n\n        protected virtual ElementInit VisitElementInitializer(ElementInit initializer)\n        {\n            ReadOnlyCollection<Expression> arguments = this.VisitExpressionList(initializer.Arguments);\n            if (arguments != initializer.Arguments)\n            {\n                return Expression.ElementInit(initializer.AddMethod, arguments);\n            }\n            return initializer;\n        }\n\n        protected virtual Expression VisitUnary(UnaryExpression u)\n        {\n            Expression operand = this.Visit(u.Operand);\n            if (operand != u.Operand)\n            {\n                return Expression.MakeUnary(u.NodeType, operand, u.Type, u.Method);\n            }\n            return u;\n        }\n\n        /// <summary>\n        /// VB compiler generates CompareString() for comparisons and\n        /// this routine extracts the comparison into an expression\n        /// </summary>\n        /// <param name=\"exp\">Expression to evaluate</param>\n        /// <returns>Expression with CompareString factored out</returns>\n        protected BinaryExpression ConvertVBStringCompare(BinaryExpression exp)\n        {\n            if (exp.Left.NodeType != ExpressionType.Call)\n            {\n                return exp;\n            }\n\n            var compareStringCall = exp.Left as MethodCallExpression;\n            if (compareStringCall.Method.DeclaringType.FullName == \"Microsoft.VisualBasic.CompilerServices.Operators\" &&\n                compareStringCall.Method.Name == \"CompareString\")\n            {\n                var left = compareStringCall.Arguments[0];\n                var right = compareStringCall.Arguments[1];\n\n                switch (exp.NodeType)\n                {\n                    case ExpressionType.GreaterThan:\n                        return Expression.GreaterThan(left, right);\n                    case ExpressionType.GreaterThanOrEqual:\n                        return Expression.GreaterThanOrEqual(left, right);\n                    case ExpressionType.LessThan:\n                        return Expression.LessThan(left, right);\n                    case ExpressionType.LessThanOrEqual:\n                        return Expression.LessThanOrEqual(left, right);\n                    default:\n                        return Expression.Equal(left, right);\n                }\n            }\n            return exp;\n        }\n\n        protected virtual Expression VisitBinary(BinaryExpression b)\n        {\n            b = ConvertVBStringCompare(b);\n\n            Expression left = this.Visit(b.Left);\n            Expression right = this.Visit(b.Right);\n            Expression conversion = this.Visit(b.Conversion);\n            if (left != b.Left || right != b.Right || conversion != b.Conversion)\n            {\n                if (b.NodeType == ExpressionType.Coalesce && b.Conversion != null)\n                    return Expression.Coalesce(left, right, conversion as LambdaExpression);\n                else\n                    return Expression.MakeBinary(b.NodeType, left, right, b.IsLiftedToNull, b.Method);\n            }\n            return b;\n        }\n\n        protected virtual Expression VisitTypeIs(TypeBinaryExpression b)\n        {\n            Expression expr = this.Visit(b.Expression);\n            if (expr != b.Expression)\n            {\n                return Expression.TypeIs(expr, b.TypeOperand);\n            }\n            return b;\n        }\n\n        protected virtual Expression VisitConstant(ConstantExpression c)\n        {\n            return c;\n        }\n\n        protected virtual Expression VisitConditional(ConditionalExpression c)\n        {\n            Expression test = this.Visit(c.Test);\n            Expression ifTrue = this.Visit(c.IfTrue);\n            Expression ifFalse = this.Visit(c.IfFalse);\n            if (test != c.Test || ifTrue != c.IfTrue || ifFalse != c.IfFalse)\n            {\n                return Expression.Condition(test, ifTrue, ifFalse);\n            }\n            return c;\n        }\n\n        protected virtual Expression VisitParameter(ParameterExpression p)\n        {\n            return p;\n        }\n\n        protected virtual Expression VisitMemberAccess(MemberExpression m)\n        {\n            Expression exp = this.Visit(m.Expression);\n            if (exp != m.Expression)\n            {\n                return Expression.MakeMemberAccess(exp, m.Member);\n            }\n            return m;\n        }\n\n        protected virtual Expression VisitMethodCall(MethodCallExpression m)\n        {\n            Expression obj = this.Visit(m.Object);\n            IEnumerable<Expression> args = this.VisitExpressionList(m.Arguments);\n            if (obj != m.Object || args != m.Arguments)\n            {\n                return Expression.Call(obj, m.Method, args);\n            }\n            return m;\n        }\n\n        protected virtual ReadOnlyCollection<Expression> VisitExpressionList(ReadOnlyCollection<Expression> original)\n        {\n            List<Expression> list = null;\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                Expression p = this.Visit(original[i]);\n                if (list != null)\n                {\n                    list.Add(p);\n                }\n                else if (p != original[i])\n                {\n                    list = new List<Expression>(n);\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n                    list.Add(p);\n                }\n            }\n            if (list != null)\n            {\n#if NETFX_CORE\n                ReadOnlyCollection<Expression> collection =\n                    new ReadOnlyCollection<Expression>(list);\n                return collection;\n#else\n                return list.AsReadOnly();\n#endif\n            }\n            return original;\n        }\n\n        protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assignment)\n        {\n            Expression e = this.Visit(assignment.Expression);\n            if (e != assignment.Expression)\n            {\n                return Expression.Bind(assignment.Member, e);\n            }\n            return assignment;\n        }\n\n        protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)\n        {\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(binding.Bindings);\n            if (bindings != binding.Bindings)\n            {\n                return Expression.MemberBind(binding.Member, bindings);\n            }\n            return binding;\n        }\n\n        protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)\n        {\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(binding.Initializers);\n            if (initializers != binding.Initializers)\n            {\n                return Expression.ListBind(binding.Member, initializers);\n            }\n            return binding;\n        }\n\n        protected virtual IEnumerable<MemberBinding> VisitBindingList(ReadOnlyCollection<MemberBinding> original)\n        {\n            List<MemberBinding> list = null;\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                MemberBinding b = this.VisitBinding(original[i]);\n                if (list != null)\n                {\n                    list.Add(b);\n                }\n                else if (b != original[i])\n                {\n                    list = new List<MemberBinding>(n);\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n                    list.Add(b);\n                }\n            }\n            if (list != null)\n                return list;\n            return original;\n        }\n\n        protected virtual IEnumerable<ElementInit> VisitElementInitializerList(ReadOnlyCollection<ElementInit> original)\n        {\n            List<ElementInit> list = null;\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                ElementInit init = this.VisitElementInitializer(original[i]);\n                if (list != null)\n                {\n                    list.Add(init);\n                }\n                else if (init != original[i])\n                {\n                    list = new List<ElementInit>(n);\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n                    list.Add(init);\n                }\n            }\n            if (list != null)\n                return list;\n            return original;\n        }\n\n        protected virtual Expression VisitLambda(LambdaExpression lambda)\n        {\n            Expression body = this.Visit(lambda.Body);\n            if (body != lambda.Body)\n            {\n                return Expression.Lambda(lambda.Type, body, lambda.Parameters);\n            }\n            return lambda;\n        }\n\n        protected virtual NewExpression VisitNew(NewExpression nex)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(nex.Arguments);\n            if (args != nex.Arguments)\n            {\n                if (nex.Members != null)\n                    return Expression.New(nex.Constructor, args, nex.Members);\n                else\n                    return Expression.New(nex.Constructor, args);\n            }\n            return nex;\n        }\n\n        protected virtual Expression VisitMemberInit(MemberInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(init.Bindings);\n            if (n != init.NewExpression || bindings != init.Bindings)\n            {\n                return Expression.MemberInit(n, bindings);\n            }\n            return init;\n        }\n\n        protected virtual Expression VisitListInit(ListInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(init.Initializers);\n            if (n != init.NewExpression || initializers != init.Initializers)\n            {\n                return Expression.ListInit(n, initializers);\n            }\n            return init;\n        }\n\n        protected virtual Expression VisitNewArray(NewArrayExpression na)\n        {\n            IEnumerable<Expression> exprs = this.VisitExpressionList(na.Expressions);\n            if (exprs != na.Expressions)\n            {\n                if (na.NodeType == ExpressionType.NewArrayInit)\n                {\n                    return Expression.NewArrayInit(na.Type.GetElementType(), exprs);\n                }\n                else\n                {\n                    return Expression.NewArrayBounds(na.Type.GetElementType(), exprs);\n                }\n            }\n            return na;\n        }\n\n        protected virtual Expression VisitInvocation(InvocationExpression iv)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(iv.Arguments);\n            Expression expr = this.Visit(iv.Expression);\n            if (args != iv.Arguments || expr != iv.Expression)\n            {\n                return Expression.Invoke(expr, args);\n            }\n            return iv;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/HttpMethod.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum HttpMethod { GET, POST };\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/IDList.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with lists of IDs\n    /// </summary>\n    public class IDList\n    {\n        public IDList() { }\n        public IDList(JsonData idJson)\n        {\n            if (idJson == null) return;\n\n            CursorMovement = new Cursors(idJson);\n            var ids = idJson.GetValue<JsonData>(\"ids\");\n            IDs =\n                (from JsonData id in ids\n                 select (ulong)id)\n                .ToList();\n        }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of IDs returned\n        /// </summary>\n        public List<ulong> IDs { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/IRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public interface IRequestProcessor<T>\n    {\n        string BaseUrl { get; set; }\n        Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression);\n        Request BuildUrl(Dictionary<string, string> expressionParameters);\n        List<T> ProcessResults(string twitterResponse);\n    }\n\n    // temporary marker interface used to communicate that this\n    // request processor wants native JSON objects.\n    public interface IRequestProcessorWantsJson\n    {\n    }\n\n    // Declare that this request processor knows how to handle action\n    // responses, implies the request processor also wants native JSON objects.\n    public interface IRequestProcessorWithAction<T>\n        : IRequestProcessorWantsJson\n    {\n        T ProcessActionResult(string twitterResponse, Enum theAction);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/CRC32.cs",
    "content": "// CRC32.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2011 Dino Chiesa.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// Last Saved: <2011-August-02 18:25:54>\n//\n// ------------------------------------------------------------------\n//\n// This module defines the CRC32 class, which can do the CRC32 algorithm, using\n// arbitrary starting polynomials, and bit reversal. The bit reversal is what\n// distinguishes this CRC-32 used in BZip2 from the CRC-32 that is used in PKZIP\n// files, or GZIP files. This class does both.\n//\n// ------------------------------------------------------------------\n\n\nusing System;\nusing Interop = System.Runtime.InteropServices;\n\nnamespace Ionic.Crc\n{\n    /// <summary>\n    ///   Computes a CRC-32. The CRC-32 algorithm is parameterized - you\n    ///   can set the polynomial and enable or disable bit\n    ///   reversal. This can be used for GZIP, BZip2, or ZIP.\n    /// </summary>\n    /// <remarks>\n    ///   This type is used internally by DotNetZip; it is generally not used\n    ///   directly by applications wishing to create, read, or manipulate zip\n    ///   archive files.\n    /// </remarks>\n\n    [Interop.GuidAttribute(\"ebc25cf6-9120-4283-b972-0e5520d0000C\")]\n    [Interop.ComVisible(true)]\n//#if !NETCF\n//    [Interop.ClassInterface(Interop.ClassInterfaceType.AutoDispatch)]\n//#endif\n    public class CRC32\n    {\n        /// <summary>\n        ///   Indicates the total number of bytes applied to the CRC.\n        /// </summary>\n        public Int64 TotalBytesRead\n        {\n            get\n            {\n                return _TotalBytesRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates the current CRC for all blocks slurped in.\n        /// </summary>\n        public Int32 Crc32Result\n        {\n            get\n            {\n                return unchecked((Int32)(~_register));\n            }\n        }\n\n        /// <summary>\n        /// Returns the CRC32 for the specified stream.\n        /// </summary>\n        /// <param name=\"input\">The stream over which to calculate the CRC32</param>\n        /// <returns>the CRC32 calculation</returns>\n        public Int32 GetCrc32(System.IO.Stream input)\n        {\n            return GetCrc32AndCopy(input, null);\n        }\n\n        /// <summary>\n        /// Returns the CRC32 for the specified stream, and writes the input into the\n        /// output stream.\n        /// </summary>\n        /// <param name=\"input\">The stream over which to calculate the CRC32</param>\n        /// <param name=\"output\">The stream into which to deflate the input</param>\n        /// <returns>the CRC32 calculation</returns>\n        public Int32 GetCrc32AndCopy(System.IO.Stream input, System.IO.Stream output)\n        {\n            if (input == null)\n                throw new Exception(\"The input stream must not be null.\");\n\n            unchecked\n            {\n                byte[] buffer = new byte[BUFFER_SIZE];\n                int readSize = BUFFER_SIZE;\n\n                _TotalBytesRead = 0;\n                int count = input.Read(buffer, 0, readSize);\n                if (output != null) output.Write(buffer, 0, count);\n                _TotalBytesRead += count;\n                while (count > 0)\n                {\n                    SlurpBlock(buffer, 0, count);\n                    count = input.Read(buffer, 0, readSize);\n                    if (output != null) output.Write(buffer, 0, count);\n                    _TotalBytesRead += count;\n                }\n\n                return (Int32)(~_register);\n            }\n        }\n\n\n        /// <summary>\n        ///   Get the CRC32 for the given (word,byte) combo.  This is a\n        ///   computation defined by PKzip for PKZIP 2.0 (weak) encryption.\n        /// </summary>\n        /// <param name=\"W\">The word to start with.</param>\n        /// <param name=\"B\">The byte to combine it with.</param>\n        /// <returns>The CRC-ized result.</returns>\n        public Int32 ComputeCrc32(Int32 W, byte B)\n        {\n            return _InternalComputeCrc32((UInt32)W, B);\n        }\n\n        internal Int32 _InternalComputeCrc32(UInt32 W, byte B)\n        {\n            return (Int32)(crc32Table[(W ^ B) & 0xFF] ^ (W >> 8));\n        }\n\n\n        /// <summary>\n        /// Update the value for the running CRC32 using the given block of bytes.\n        /// This is useful when using the CRC32() class in a Stream.\n        /// </summary>\n        /// <param name=\"block\">block of bytes to slurp</param>\n        /// <param name=\"offset\">starting point in the block</param>\n        /// <param name=\"count\">how many bytes within the block to slurp</param>\n        public void SlurpBlock(byte[] block, int offset, int count)\n        {\n            if (block == null)\n                throw new Exception(\"The data buffer must not be null.\");\n\n            // bzip algorithm\n            for (int i = 0; i < count; i++)\n            {\n                int x = offset + i;\n                byte b = block[x];\n                if (this.reverseBits)\n                {\n                    UInt32 temp = (_register >> 24) ^ b;\n                    _register = (_register << 8) ^ crc32Table[temp];\n                }\n                else\n                {\n                    UInt32 temp = (_register & 0x000000FF) ^ b;\n                    _register = (_register >> 8) ^ crc32Table[temp];\n                }\n            }\n            _TotalBytesRead += count;\n        }\n\n\n        /// <summary>\n        ///   Process one byte in the CRC.\n        /// </summary>\n        /// <param name = \"b\">the byte to include into the CRC .  </param>\n        public void UpdateCRC(byte b)\n        {\n            if (this.reverseBits)\n            {\n                UInt32 temp = (_register >> 24) ^ b;\n                _register = (_register << 8) ^ crc32Table[temp];\n            }\n            else\n            {\n                UInt32 temp = (_register & 0x000000FF) ^ b;\n                _register = (_register >> 8) ^ crc32Table[temp];\n            }\n        }\n\n        /// <summary>\n        ///   Process a run of N identical bytes into the CRC.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This method serves as an optimization for updating the CRC when a\n        ///     run of identical bytes is found. Rather than passing in a buffer of\n        ///     length n, containing all identical bytes b, this method accepts the\n        ///     byte value and the length of the (virtual) buffer - the length of\n        ///     the run.\n        ///   </para>\n        /// </remarks>\n        /// <param name = \"b\">the byte to include into the CRC.  </param>\n        /// <param name = \"n\">the number of times that byte should be repeated. </param>\n        public void UpdateCRC(byte b, int n)\n        {\n            while (n-- > 0)\n            {\n                if (this.reverseBits)\n                {\n                    uint temp = (_register >> 24) ^ b;\n                    _register = (_register << 8) ^ crc32Table[(temp >= 0)\n                                                              ? temp\n                                                              : (temp + 256)];\n                }\n                else\n                {\n                    UInt32 temp = (_register & 0x000000FF) ^ b;\n                    _register = (_register >> 8) ^ crc32Table[(temp >= 0)\n                                                              ? temp\n                                                              : (temp + 256)];\n\n                }\n            }\n        }\n\n\n\n        private static uint ReverseBits(uint data)\n        {\n            unchecked\n            {\n                uint ret = data;\n                ret = (ret & 0x55555555) << 1 | (ret >> 1) & 0x55555555;\n                ret = (ret & 0x33333333) << 2 | (ret >> 2) & 0x33333333;\n                ret = (ret & 0x0F0F0F0F) << 4 | (ret >> 4) & 0x0F0F0F0F;\n                ret = (ret << 24) | ((ret & 0xFF00) << 8) | ((ret >> 8) & 0xFF00) | (ret >> 24);\n                return ret;\n            }\n        }\n\n        private static byte ReverseBits(byte data)\n        {\n            unchecked\n            {\n                uint u = (uint)data * 0x00020202;\n                uint m = 0x01044010;\n                uint s = u & m;\n                uint t = (u << 2) & (m << 1);\n                return (byte)((0x01001001 * (s + t)) >> 24);\n            }\n        }\n\n\n\n        private void GenerateLookupTable()\n        {\n            crc32Table = new UInt32[256];\n            unchecked\n            {\n                UInt32 dwCrc;\n                byte i = 0;\n                do\n                {\n                    dwCrc = i;\n                    for (byte j = 8; j > 0; j--)\n                    {\n                        if ((dwCrc & 1) == 1)\n                        {\n                            dwCrc = (dwCrc >> 1) ^ dwPolynomial;\n                        }\n                        else\n                        {\n                            dwCrc >>= 1;\n                        }\n                    }\n                    if (reverseBits)\n                    {\n                        crc32Table[ReverseBits(i)] = ReverseBits(dwCrc);\n                    }\n                    else\n                    {\n                        crc32Table[i] = dwCrc;\n                    }\n                    i++;\n                } while (i!=0);\n            }\n\n#if VERBOSE\n            Console.WriteLine();\n            Console.WriteLine(\"private static readonly UInt32[] crc32Table = {\");\n            for (int i = 0; i < crc32Table.Length; i+=4)\n            {\n                Console.Write(\"   \");\n                for (int j=0; j < 4; j++)\n                {\n                    Console.Write(\" 0x{0:X8}U,\", crc32Table[i+j]);\n                }\n                Console.WriteLine();\n            }\n            Console.WriteLine(\"};\");\n            Console.WriteLine();\n#endif\n        }\n\n\n        private uint gf2_matrix_times(uint[] matrix, uint vec)\n        {\n            uint sum = 0;\n            int i=0;\n            while (vec != 0)\n            {\n                if ((vec & 0x01)== 0x01)\n                    sum ^= matrix[i];\n                vec >>= 1;\n                i++;\n            }\n            return sum;\n        }\n\n        private void gf2_matrix_square(uint[] square, uint[] mat)\n        {\n            for (int i = 0; i < 32; i++)\n                square[i] = gf2_matrix_times(mat, mat[i]);\n        }\n\n\n\n        /// <summary>\n        ///   Combines the given CRC32 value with the current running total.\n        /// </summary>\n        /// <remarks>\n        ///   This is useful when using a divide-and-conquer approach to\n        ///   calculating a CRC.  Multiple threads can each calculate a\n        ///   CRC32 on a segment of the data, and then combine the\n        ///   individual CRC32 values at the end.\n        /// </remarks>\n        /// <param name=\"crc\">the crc value to be combined with this one</param>\n        /// <param name=\"length\">the length of data the CRC value was calculated on</param>\n        public void Combine(int crc, int length)\n        {\n            uint[] even = new uint[32];     // even-power-of-two zeros operator\n            uint[] odd = new uint[32];      // odd-power-of-two zeros operator\n\n            if (length == 0)\n                return;\n\n            uint crc1= ~_register;\n            uint crc2= (uint) crc;\n\n            // put operator for one zero bit in odd\n            odd[0] = this.dwPolynomial;  // the CRC-32 polynomial\n            uint row = 1;\n            for (int i = 1; i < 32; i++)\n            {\n                odd[i] = row;\n                row <<= 1;\n            }\n\n            // put operator for two zero bits in even\n            gf2_matrix_square(even, odd);\n\n            // put operator for four zero bits in odd\n            gf2_matrix_square(odd, even);\n\n            uint len2 = (uint) length;\n\n            // apply len2 zeros to crc1 (first square will put the operator for one\n            // zero byte, eight zero bits, in even)\n            do {\n                // apply zeros operator for this bit of len2\n                gf2_matrix_square(even, odd);\n\n                if ((len2 & 1)== 1)\n                    crc1 = gf2_matrix_times(even, crc1);\n                len2 >>= 1;\n\n                if (len2 == 0)\n                    break;\n\n                // another iteration of the loop with odd and even swapped\n                gf2_matrix_square(odd, even);\n                if ((len2 & 1)==1)\n                    crc1 = gf2_matrix_times(odd, crc1);\n                len2 >>= 1;\n\n\n            } while (len2 != 0);\n\n            crc1 ^= crc2;\n\n            _register= ~crc1;\n\n            //return (int) crc1;\n            return;\n        }\n\n\n        /// <summary>\n        ///   Create an instance of the CRC32 class using the default settings: no\n        ///   bit reversal, and a polynomial of 0xEDB88320.\n        /// </summary>\n        public CRC32() : this(false)\n        {\n        }\n\n        /// <summary>\n        ///   Create an instance of the CRC32 class, specifying whether to reverse\n        ///   data bits or not.\n        /// </summary>\n        /// <param name='reverseBits'>\n        ///   specify true if the instance should reverse data bits.\n        /// </param>\n        /// <remarks>\n        ///   <para>\n        ///     In the CRC-32 used by BZip2, the bits are reversed. Therefore if you\n        ///     want a CRC32 with compatibility with BZip2, you should pass true\n        ///     here. In the CRC-32 used by GZIP and PKZIP, the bits are not\n        ///     reversed; Therefore if you want a CRC32 with compatibility with\n        ///     those, you should pass false.\n        ///   </para>\n        /// </remarks>\n        public CRC32(bool reverseBits) :\n            this( unchecked((int)0xEDB88320), reverseBits)\n        {\n        }\n\n\n        /// <summary>\n        ///   Create an instance of the CRC32 class, specifying the polynomial and\n        ///   whether to reverse data bits or not.\n        /// </summary>\n        /// <param name='polynomial'>\n        ///   The polynomial to use for the CRC, expressed in the reversed (LSB)\n        ///   format: the highest ordered bit in the polynomial value is the\n        ///   coefficient of the 0th power; the second-highest order bit is the\n        ///   coefficient of the 1 power, and so on. Expressed this way, the\n        ///   polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320.\n        /// </param>\n        /// <param name='reverseBits'>\n        ///   specify true if the instance should reverse data bits.\n        /// </param>\n        ///\n        /// <remarks>\n        ///   <para>\n        ///     In the CRC-32 used by BZip2, the bits are reversed. Therefore if you\n        ///     want a CRC32 with compatibility with BZip2, you should pass true\n        ///     here for the <c>reverseBits</c> parameter. In the CRC-32 used by\n        ///     GZIP and PKZIP, the bits are not reversed; Therefore if you want a\n        ///     CRC32 with compatibility with those, you should pass false for the\n        ///     <c>reverseBits</c> parameter.\n        ///   </para>\n        /// </remarks>\n        public CRC32(int polynomial, bool reverseBits)\n        {\n            this.reverseBits = reverseBits;\n            this.dwPolynomial = (uint) polynomial;\n            this.GenerateLookupTable();\n        }\n\n        /// <summary>\n        ///   Reset the CRC-32 class - clear the CRC \"remainder register.\"\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Use this when employing a single instance of this class to compute\n        ///     multiple, distinct CRCs on multiple, distinct data blocks.\n        ///   </para>\n        /// </remarks>\n        public void Reset()\n        {\n            _register = 0xFFFFFFFFU;\n        }\n\n        // private member vars\n        private UInt32 dwPolynomial;\n        private Int64 _TotalBytesRead;\n        private bool reverseBits;\n        private UInt32[] crc32Table;\n        private const int BUFFER_SIZE = 8192;\n        private UInt32 _register = 0xFFFFFFFFU;\n    }\n\n\n    /// <summary>\n    /// A Stream that calculates a CRC32 (a checksum) on all bytes read,\n    /// or on all bytes written.\n    /// </summary>\n    ///\n    /// <remarks>\n    /// <para>\n    /// This class can be used to verify the CRC of a ZipEntry when\n    /// reading from a stream, or to calculate a CRC when writing to a\n    /// stream.  The stream should be used to either read, or write, but\n    /// not both.  If you intermix reads and writes, the results are not\n    /// defined.\n    /// </para>\n    ///\n    /// <para>\n    /// This class is intended primarily for use internally by the\n    /// DotNetZip library.\n    /// </para>\n    /// </remarks>\n    public class CrcCalculatorStream : System.IO.Stream, System.IDisposable\n    {\n        private static readonly Int64 UnsetLengthLimit = -99;\n\n        internal System.IO.Stream _innerStream;\n        private CRC32 _Crc32;\n        private Int64 _lengthLimit = -99;\n        private bool _leaveOpen;\n\n        /// <summary>\n        /// The default constructor.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Instances returned from this constructor will leave the underlying\n        ///     stream open upon Close().  The stream uses the default CRC32\n        ///     algorithm, which implies a polynomial of 0xEDB88320.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        public CrcCalculatorStream(System.IO.Stream stream)\n            : this(true, CrcCalculatorStream.UnsetLengthLimit, stream, null)\n        {\n        }\n\n        /// <summary>\n        ///   The constructor allows the caller to specify how to handle the\n        ///   underlying stream at close.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the default CRC32 algorithm, which implies a\n        ///     polynomial of 0xEDB88320.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"leaveOpen\">true to leave the underlying stream\n        /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>\n        public CrcCalculatorStream(System.IO.Stream stream, bool leaveOpen)\n            : this(leaveOpen, CrcCalculatorStream.UnsetLengthLimit, stream, null)\n        {\n        }\n\n        /// <summary>\n        ///   A constructor allowing the specification of the length of the stream\n        ///   to read.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the default CRC32 algorithm, which implies a\n        ///     polynomial of 0xEDB88320.\n        ///   </para>\n        ///   <para>\n        ///     Instances returned from this constructor will leave the underlying\n        ///     stream open upon Close().\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"length\">The length of the stream to slurp</param>\n        public CrcCalculatorStream(System.IO.Stream stream, Int64 length)\n            : this(true, length, stream, null)\n        {\n            if (length < 0)\n                throw new ArgumentException(\"length\");\n        }\n\n        /// <summary>\n        ///   A constructor allowing the specification of the length of the stream\n        ///   to read, as well as whether to keep the underlying stream open upon\n        ///   Close().\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the default CRC32 algorithm, which implies a\n        ///     polynomial of 0xEDB88320.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"length\">The length of the stream to slurp</param>\n        /// <param name=\"leaveOpen\">true to leave the underlying stream\n        /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>\n        public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen)\n            : this(leaveOpen, length, stream, null)\n        {\n            if (length < 0)\n                throw new ArgumentException(\"length\");\n        }\n\n        /// <summary>\n        ///   A constructor allowing the specification of the length of the stream\n        ///   to read, as well as whether to keep the underlying stream open upon\n        ///   Close(), and the CRC32 instance to use.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The stream uses the specified CRC32 instance, which allows the\n        ///     application to specify how the CRC gets calculated.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"stream\">The underlying stream</param>\n        /// <param name=\"length\">The length of the stream to slurp</param>\n        /// <param name=\"leaveOpen\">true to leave the underlying stream\n        /// open upon close of the <c>CrcCalculatorStream</c>; false otherwise.</param>\n        /// <param name=\"crc32\">the CRC32 instance to use to calculate the CRC32</param>\n        public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen,\n                                   CRC32 crc32)\n            : this(leaveOpen, length, stream, crc32)\n        {\n            if (length < 0)\n                throw new ArgumentException(\"length\");\n        }\n\n\n        // This ctor is private - no validation is done here.  This is to allow the use\n        // of a (specific) negative value for the _lengthLimit, to indicate that there\n        // is no length set.  So we validate the length limit in those ctors that use an\n        // explicit param, otherwise we don't validate, because it could be our special\n        // value.\n        private CrcCalculatorStream\n            (bool leaveOpen, Int64 length, System.IO.Stream stream, CRC32 crc32)\n            : base()\n        {\n            _innerStream = stream;\n            _Crc32 = crc32 ?? new CRC32();\n            _lengthLimit = length;\n            _leaveOpen = leaveOpen;\n        }\n\n\n        /// <summary>\n        ///   Gets the total number of bytes run through the CRC32 calculator.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   This is either the total number of bytes read, or the total number of\n        ///   bytes written, depending on the direction of this stream.\n        /// </remarks>\n        public Int64 TotalBytesSlurped\n        {\n            get { return _Crc32.TotalBytesRead; }\n        }\n\n        /// <summary>\n        ///   Provides the current CRC for all blocks slurped in.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     The running total of the CRC is kept as data is written or read\n        ///     through the stream.  read this property after all reads or writes to\n        ///     get an accurate CRC for the entire stream.\n        ///   </para>\n        /// </remarks>\n        public Int32 Crc\n        {\n            get { return _Crc32.Crc32Result; }\n        }\n\n        /// <summary>\n        ///   Indicates whether the underlying stream will be left open when the\n        ///   <c>CrcCalculatorStream</c> is Closed.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Set this at any point before calling <see cref=\"Close()\"/>.\n        ///   </para>\n        /// </remarks>\n        public bool LeaveOpen\n        {\n            get { return _leaveOpen; }\n            set { _leaveOpen = value; }\n        }\n\n        /// <summary>\n        /// Read from the stream\n        /// </summary>\n        /// <param name=\"buffer\">the buffer to read</param>\n        /// <param name=\"offset\">the offset at which to start</param>\n        /// <param name=\"count\">the number of bytes to read</param>\n        /// <returns>the number of bytes actually read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            int bytesToRead = count;\n\n            // Need to limit the # of bytes returned, if the stream is intended to have\n            // a definite length.  This is especially useful when returning a stream for\n            // the uncompressed data directly to the application.  The app won't\n            // necessarily read only the UncompressedSize number of bytes.  For example\n            // wrapping the stream returned from OpenReader() into a StreadReader() and\n            // calling ReadToEnd() on it, We can \"over-read\" the zip data and get a\n            // corrupt string.  The length limits that, prevents that problem.\n\n            if (_lengthLimit != CrcCalculatorStream.UnsetLengthLimit)\n            {\n                if (_Crc32.TotalBytesRead >= _lengthLimit) return 0; // EOF\n                Int64 bytesRemaining = _lengthLimit - _Crc32.TotalBytesRead;\n                if (bytesRemaining < count) bytesToRead = (int)bytesRemaining;\n            }\n            int n = _innerStream.Read(buffer, offset, bytesToRead);\n            if (n > 0) _Crc32.SlurpBlock(buffer, offset, n);\n            return n;\n        }\n\n        /// <summary>\n        /// Write to the stream.\n        /// </summary>\n        /// <param name=\"buffer\">the buffer from which to write</param>\n        /// <param name=\"offset\">the offset at which to start writing</param>\n        /// <param name=\"count\">the number of bytes to write</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (count > 0) _Crc32.SlurpBlock(buffer, offset, count);\n            _innerStream.Write(buffer, offset, count);\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports reading.\n        /// </summary>\n        public override bool CanRead\n        {\n            get { return _innerStream.CanRead; }\n        }\n\n        /// <summary>\n        ///   Indicates whether the stream supports seeking.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Always returns false.\n        ///   </para>\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports writing.\n        /// </summary>\n        public override bool CanWrite\n        {\n            get { return _innerStream.CanWrite; }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            _innerStream.Flush();\n        }\n\n        /// <summary>\n        ///   Returns the length of the underlying stream.\n        /// </summary>\n        public override long Length\n        {\n            get\n            {\n                if (_lengthLimit == CrcCalculatorStream.UnsetLengthLimit)\n                    return _innerStream.Length;\n                else return _lengthLimit;\n            }\n        }\n\n        /// <summary>\n        ///   The getter for this property returns the total bytes read.\n        ///   If you use the setter, it will throw\n        /// <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        public override long Position\n        {\n            get { return _Crc32.TotalBytesRead; }\n            set { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// Seeking is not supported on this stream. This method always throws\n        /// <see cref=\"NotSupportedException\"/>\n        /// </summary>\n        /// <param name=\"offset\">N/A</param>\n        /// <param name=\"origin\">N/A</param>\n        /// <returns>N/A</returns>\n        public override long Seek(long offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// This method always throws\n        /// <see cref=\"NotSupportedException\"/>\n        /// </summary>\n        /// <param name=\"value\">N/A</param>\n        public override void SetLength(long value)\n        {\n            throw new NotSupportedException();\n        }\n\n\n        void IDisposable.Dispose()\n        {\n            Close();\n        }\n\n        /// <summary>\n        /// Closes the stream.\n        /// </summary>\n        public override void Close()\n        {\n            base.Close();\n            if (!_leaveOpen)\n                _innerStream.Close();\n        }\n\n    }\n\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/Deflate.cs",
    "content": "// Deflate.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2011-August-03 19:52:15>\n//\n// ------------------------------------------------------------------\n//\n// This module defines logic for handling the Deflate or compression.\n//\n// This code is based on multiple sources:\n// - the original zlib v1.2.3 source, which is Copyright (C) 1995-2005 Jean-loup Gailly.\n// - the original jzlib, which is Copyright (c) 2000-2003 ymnk, JCraft,Inc.\n//\n// However, this code is significantly different from both.\n// The object model is not the same, and many of the behaviors are different.\n//\n// In keeping with the license for these other works, the copyrights for\n// jzlib and zlib are here.\n//\n// -----------------------------------------------------------------------\n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in\n// the documentation and/or other materials provided with the distribution.\n//\n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// -----------------------------------------------------------------------\n//\n// This program is based on zlib-1.1.3; credit to authors\n// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n// and contributors of zlib.\n//\n// -----------------------------------------------------------------------\n\n\nusing System;\n\nnamespace Ionic.Zlib\n{\n\n    internal enum BlockState\n    {\n        NeedMore = 0,       // block not completed, need more input or more output\n        BlockDone,          // block flush performed\n        FinishStarted,              // finish started, need only more output at next deflate\n        FinishDone          // finish done, accept no more input or output\n    }\n\n    internal enum DeflateFlavor\n    {\n        Store,\n        Fast,\n        Slow\n    }\n\n    internal sealed class DeflateManager\n    {\n        private static readonly int MEM_LEVEL_MAX = 9;\n        private static readonly int MEM_LEVEL_DEFAULT = 8;\n\n        internal delegate BlockState CompressFunc(FlushType flush);\n\n        internal class Config\n        {\n            // Use a faster search when the previous match is longer than this\n            internal int GoodLength; // reduce lazy search above this match length\n\n            // Attempt to find a better match only when the current match is\n            // strictly smaller than this value. This mechanism is used only for\n            // compression levels >= 4.  For levels 1,2,3: MaxLazy is actually\n            // MaxInsertLength. (See DeflateFast)\n\n            internal int MaxLazy;    // do not perform lazy search above this match length\n\n            internal int NiceLength; // quit search above this match length\n\n            // To speed up deflation, hash chains are never searched beyond this\n            // length.  A higher limit improves compression ratio but degrades the speed.\n\n            internal int MaxChainLength;\n\n            internal DeflateFlavor Flavor;\n\n            private Config(int goodLength, int maxLazy, int niceLength, int maxChainLength, DeflateFlavor flavor)\n            {\n                this.GoodLength = goodLength;\n                this.MaxLazy = maxLazy;\n                this.NiceLength = niceLength;\n                this.MaxChainLength = maxChainLength;\n                this.Flavor = flavor;\n            }\n\n            public static Config Lookup(CompressionLevel level)\n            {\n                return Table[(int)level];\n            }\n\n\n            static Config()\n            {\n                Table = new Config[] {\n                    new Config(0, 0, 0, 0, DeflateFlavor.Store),\n                    new Config(4, 4, 8, 4, DeflateFlavor.Fast),\n                    new Config(4, 5, 16, 8, DeflateFlavor.Fast),\n                    new Config(4, 6, 32, 32, DeflateFlavor.Fast),\n\n                    new Config(4, 4, 16, 16, DeflateFlavor.Slow),\n                    new Config(8, 16, 32, 32, DeflateFlavor.Slow),\n                    new Config(8, 16, 128, 128, DeflateFlavor.Slow),\n                    new Config(8, 32, 128, 256, DeflateFlavor.Slow),\n                    new Config(32, 128, 258, 1024, DeflateFlavor.Slow),\n                    new Config(32, 258, 258, 4096, DeflateFlavor.Slow),\n                };\n            }\n\n            private static readonly Config[] Table;\n        }\n\n\n        private CompressFunc DeflateFunction;\n\n        private static readonly System.String[] _ErrorMessage = new System.String[]\n        {\n            \"need dictionary\",\n            \"stream end\",\n            \"\",\n            \"file error\",\n            \"stream error\",\n            \"data error\",\n            \"insufficient memory\",\n            \"buffer error\",\n            \"incompatible version\",\n            \"\"\n        };\n\n        // preset dictionary flag in zlib header\n        private static readonly int PRESET_DICT = 0x20;\n\n        private static readonly int INIT_STATE = 42;\n        private static readonly int BUSY_STATE = 113;\n        private static readonly int FINISH_STATE = 666;\n\n        // The deflate compression method\n        private static readonly int Z_DEFLATED = 8;\n\n        private static readonly int STORED_BLOCK = 0;\n        private static readonly int STATIC_TREES = 1;\n        private static readonly int DYN_TREES = 2;\n\n        // The three kinds of block type\n        private static readonly int Z_BINARY = 0;\n        private static readonly int Z_ASCII = 1;\n        private static readonly int Z_UNKNOWN = 2;\n\n        private static readonly int Buf_size = 8 * 2;\n\n        private static readonly int MIN_MATCH = 3;\n        private static readonly int MAX_MATCH = 258;\n\n        private static readonly int MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\n        private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1);\n\n        private static readonly int END_BLOCK = 256;\n\n        internal ZlibCodec _codec; // the zlib encoder/decoder\n        internal int status;       // as the name implies\n        internal byte[] pending;   // output still pending - waiting to be compressed\n        internal int nextPending;  // index of next pending byte to output to the stream\n        internal int pendingCount; // number of bytes in the pending buffer\n\n        internal sbyte data_type;  // UNKNOWN, BINARY or ASCII\n        internal int last_flush;   // value of flush param for previous deflate call\n\n        internal int w_size;       // LZ77 window size (32K by default)\n        internal int w_bits;       // log2(w_size)  (8..16)\n        internal int w_mask;       // w_size - 1\n\n        //internal byte[] dictionary;\n        internal byte[] window;\n\n        // Sliding window. Input bytes are read into the second half of the window,\n        // and move to the first half later to keep a dictionary of at least wSize\n        // bytes. With this organization, matches are limited to a distance of\n        // wSize-MAX_MATCH bytes, but this ensures that IO is always\n        // performed with a length multiple of the block size.\n        //\n        // To do: use the user input buffer as sliding window.\n\n        internal int window_size;\n        // Actual size of window: 2*wSize, except when the user input buffer\n        // is directly used as sliding window.\n\n        internal short[] prev;\n        // Link to older string with same hash index. To limit the size of this\n        // array to 64K, this link is maintained only for the last 32K strings.\n        // An index in this array is thus a window index modulo 32K.\n\n        internal short[] head;  // Heads of the hash chains or NIL.\n\n        internal int ins_h;     // hash index of string to be inserted\n        internal int hash_size; // number of elements in hash table\n        internal int hash_bits; // log2(hash_size)\n        internal int hash_mask; // hash_size-1\n\n        // Number of bits by which ins_h must be shifted at each input\n        // step. It must be such that after MIN_MATCH steps, the oldest\n        // byte no longer takes part in the hash key, that is:\n        // hash_shift * MIN_MATCH >= hash_bits\n        internal int hash_shift;\n\n        // Window position at the beginning of the current output block. Gets\n        // negative when the window is moved backwards.\n\n        internal int block_start;\n\n        Config config;\n        internal int match_length;    // length of best match\n        internal int prev_match;      // previous match\n        internal int match_available; // set if previous match exists\n        internal int strstart;        // start of string to insert into.....????\n        internal int match_start;     // start of matching string\n        internal int lookahead;       // number of valid bytes ahead in window\n\n        // Length of the best match at previous step. Matches not greater than this\n        // are discarded. This is used in the lazy match evaluation.\n        internal int prev_length;\n\n        // Insert new strings in the hash table only if the match length is not\n        // greater than this length. This saves time but degrades compression.\n        // max_insert_length is used only for compression levels <= 3.\n\n        internal CompressionLevel compressionLevel; // compression level (1..9)\n        internal CompressionStrategy compressionStrategy; // favor or force Huffman coding\n\n\n        internal short[] dyn_ltree;         // literal and length tree\n        internal short[] dyn_dtree;         // distance tree\n        internal short[] bl_tree;           // Huffman tree for bit lengths\n\n        internal Tree treeLiterals = new Tree();  // desc for literal tree\n        internal Tree treeDistances = new Tree();  // desc for distance tree\n        internal Tree treeBitLengths = new Tree(); // desc for bit length tree\n\n        // number of codes at each bit length for an optimal tree\n        internal short[] bl_count = new short[InternalConstants.MAX_BITS + 1];\n\n        // heap used to build the Huffman trees\n        internal int[] heap = new int[2 * InternalConstants.L_CODES + 1];\n\n        internal int heap_len;              // number of elements in the heap\n        internal int heap_max;              // element of largest frequency\n\n        // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n        // The same heap array is used to build all trees.\n\n        // Depth of each subtree used as tie breaker for trees of equal frequency\n        internal sbyte[] depth = new sbyte[2 * InternalConstants.L_CODES + 1];\n\n        internal int _lengthOffset;                 // index for literals or lengths\n\n\n        // Size of match buffer for literals/lengths.  There are 4 reasons for\n        // limiting lit_bufsize to 64K:\n        //   - frequencies can be kept in 16 bit counters\n        //   - if compression is not successful for the first block, all input\n        //     data is still in the window so we can still emit a stored block even\n        //     when input comes from standard input.  (This can also be done for\n        //     all blocks if lit_bufsize is not greater than 32K.)\n        //   - if compression is not successful for a file smaller than 64K, we can\n        //     even emit a stored file instead of a stored block (saving 5 bytes).\n        //     This is applicable only for zip (not gzip or zlib).\n        //   - creating new Huffman trees less frequently may not provide fast\n        //     adaptation to changes in the input data statistics. (Take for\n        //     example a binary file with poorly compressible code followed by\n        //     a highly compressible string table.) Smaller buffer sizes give\n        //     fast adaptation but have of course the overhead of transmitting\n        //     trees more frequently.\n\n        internal int lit_bufsize;\n\n        internal int last_lit;     // running index in l_buf\n\n        // Buffer for distances. To simplify the code, d_buf and l_buf have\n        // the same number of elements. To use different lengths, an extra flag\n        // array would be necessary.\n\n        internal int _distanceOffset;        // index into pending; points to distance data??\n\n        internal int opt_len;      // bit length of current block with optimal trees\n        internal int static_len;   // bit length of current block with static trees\n        internal int matches;      // number of string matches in current block\n        internal int last_eob_len; // bit length of EOB code for last block\n\n        // Output buffer. bits are inserted starting at the bottom (least\n        // significant bits).\n        internal short bi_buf;\n\n        // Number of valid bits in bi_buf.  All bits above the last valid bit\n        // are always zero.\n        internal int bi_valid;\n\n\n        internal DeflateManager()\n        {\n            dyn_ltree = new short[HEAP_SIZE * 2];\n            dyn_dtree = new short[(2 * InternalConstants.D_CODES + 1) * 2]; // distance tree\n            bl_tree = new short[(2 * InternalConstants.BL_CODES + 1) * 2]; // Huffman tree for bit lengths\n        }\n\n\n        // lm_init\n        private void _InitializeLazyMatch()\n        {\n            window_size = 2 * w_size;\n\n            // clear the hash - workitem 9063\n            Array.Clear(head, 0, hash_size);\n            //for (int i = 0; i < hash_size; i++) head[i] = 0;\n\n            config = Config.Lookup(compressionLevel);\n            SetDeflater();\n\n            strstart = 0;\n            block_start = 0;\n            lookahead = 0;\n            match_length = prev_length = MIN_MATCH - 1;\n            match_available = 0;\n            ins_h = 0;\n        }\n\n        // Initialize the tree data structures for a new zlib stream.\n        private void _InitializeTreeData()\n        {\n            treeLiterals.dyn_tree = dyn_ltree;\n            treeLiterals.staticTree = StaticTree.Literals;\n\n            treeDistances.dyn_tree = dyn_dtree;\n            treeDistances.staticTree = StaticTree.Distances;\n\n            treeBitLengths.dyn_tree = bl_tree;\n            treeBitLengths.staticTree = StaticTree.BitLengths;\n\n            bi_buf = 0;\n            bi_valid = 0;\n            last_eob_len = 8; // enough lookahead for inflate\n\n            // Initialize the first block of the first file:\n            _InitializeBlocks();\n        }\n\n        internal void _InitializeBlocks()\n        {\n            // Initialize the trees.\n            for (int i = 0; i < InternalConstants.L_CODES; i++)\n                dyn_ltree[i * 2] = 0;\n            for (int i = 0; i < InternalConstants.D_CODES; i++)\n                dyn_dtree[i * 2] = 0;\n            for (int i = 0; i < InternalConstants.BL_CODES; i++)\n                bl_tree[i * 2] = 0;\n\n            dyn_ltree[END_BLOCK * 2] = 1;\n            opt_len = static_len = 0;\n            last_lit = matches = 0;\n        }\n\n        // Restore the heap property by moving down the tree starting at node k,\n        // exchanging a node with the smallest of its two sons if necessary, stopping\n        // when the heap property is re-established (each father smaller than its\n        // two sons).\n        internal void pqdownheap(short[] tree, int k)\n        {\n            int v = heap[k];\n            int j = k << 1; // left son of k\n            while (j <= heap_len)\n            {\n                // Set j to the smallest of the two sons:\n                if (j < heap_len && _IsSmaller(tree, heap[j + 1], heap[j], depth))\n                {\n                    j++;\n                }\n                // Exit if v is smaller than both sons\n                if (_IsSmaller(tree, v, heap[j], depth))\n                    break;\n\n                // Exchange v with the smallest son\n                heap[k] = heap[j]; k = j;\n                // And continue down the tree, setting j to the left son of k\n                j <<= 1;\n            }\n            heap[k] = v;\n        }\n\n        internal static bool _IsSmaller(short[] tree, int n, int m, sbyte[] depth)\n        {\n            short tn2 = tree[n * 2];\n            short tm2 = tree[m * 2];\n            return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m]));\n        }\n\n\n        // Scan a literal or distance tree to determine the frequencies of the codes\n        // in the bit length tree.\n        internal void scan_tree(short[] tree, int max_code)\n        {\n            int n; // iterates over all tree elements\n            int prevlen = -1; // last emitted length\n            int curlen; // length of current code\n            int nextlen = (int)tree[0 * 2 + 1]; // length of next code\n            int count = 0; // repeat count of the current code\n            int max_count = 7; // max repeat count\n            int min_count = 4; // min repeat count\n\n            if (nextlen == 0)\n            {\n                max_count = 138; min_count = 3;\n            }\n            tree[(max_code + 1) * 2 + 1] = (short)0x7fff; // guard //??\n\n            for (n = 0; n <= max_code; n++)\n            {\n                curlen = nextlen; nextlen = (int)tree[(n + 1) * 2 + 1];\n                if (++count < max_count && curlen == nextlen)\n                {\n                    continue;\n                }\n                else if (count < min_count)\n                {\n                    bl_tree[curlen * 2] = (short)(bl_tree[curlen * 2] + count);\n                }\n                else if (curlen != 0)\n                {\n                    if (curlen != prevlen)\n                        bl_tree[curlen * 2]++;\n                    bl_tree[InternalConstants.REP_3_6 * 2]++;\n                }\n                else if (count <= 10)\n                {\n                    bl_tree[InternalConstants.REPZ_3_10 * 2]++;\n                }\n                else\n                {\n                    bl_tree[InternalConstants.REPZ_11_138 * 2]++;\n                }\n                count = 0; prevlen = curlen;\n                if (nextlen == 0)\n                {\n                    max_count = 138; min_count = 3;\n                }\n                else if (curlen == nextlen)\n                {\n                    max_count = 6; min_count = 3;\n                }\n                else\n                {\n                    max_count = 7; min_count = 4;\n                }\n            }\n        }\n\n        // Construct the Huffman tree for the bit lengths and return the index in\n        // bl_order of the last bit length code to send.\n        internal int build_bl_tree()\n        {\n            int max_blindex; // index of last bit length code of non zero freq\n\n            // Determine the bit length frequencies for literal and distance trees\n            scan_tree(dyn_ltree, treeLiterals.max_code);\n            scan_tree(dyn_dtree, treeDistances.max_code);\n\n            // Build the bit length tree:\n            treeBitLengths.build_tree(this);\n            // opt_len now includes the length of the tree representations, except\n            // the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n\n            // Determine the number of bit length codes to send. The pkzip format\n            // requires that at least 4 bit length codes be sent. (appnote.txt says\n            // 3 but the actual value used is 4.)\n            for (max_blindex = InternalConstants.BL_CODES - 1; max_blindex >= 3; max_blindex--)\n            {\n                if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] != 0)\n                    break;\n            }\n            // Update opt_len to include the bit length tree and counts\n            opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n\n            return max_blindex;\n        }\n\n\n        // Send the header for a block using dynamic Huffman trees: the counts, the\n        // lengths of the bit length codes, the literal tree and the distance tree.\n        // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n        internal void send_all_trees(int lcodes, int dcodes, int blcodes)\n        {\n            int rank; // index in bl_order\n\n            send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt\n            send_bits(dcodes - 1, 5);\n            send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt\n            for (rank = 0; rank < blcodes; rank++)\n            {\n                send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3);\n            }\n            send_tree(dyn_ltree, lcodes - 1); // literal tree\n            send_tree(dyn_dtree, dcodes - 1); // distance tree\n        }\n\n        // Send a literal or distance tree in compressed form, using the codes in\n        // bl_tree.\n        internal void send_tree(short[] tree, int max_code)\n        {\n            int n;                           // iterates over all tree elements\n            int prevlen   = -1;              // last emitted length\n            int curlen;                      // length of current code\n            int nextlen   = tree[0 * 2 + 1]; // length of next code\n            int count     = 0;               // repeat count of the current code\n            int max_count = 7;               // max repeat count\n            int min_count = 4;               // min repeat count\n\n            if (nextlen == 0)\n            {\n                max_count = 138; min_count = 3;\n            }\n\n            for (n = 0; n <= max_code; n++)\n            {\n                curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1];\n                if (++count < max_count && curlen == nextlen)\n                {\n                    continue;\n                }\n                else if (count < min_count)\n                {\n                    do\n                    {\n                        send_code(curlen, bl_tree);\n                    }\n                    while (--count != 0);\n                }\n                else if (curlen != 0)\n                {\n                    if (curlen != prevlen)\n                    {\n                        send_code(curlen, bl_tree); count--;\n                    }\n                    send_code(InternalConstants.REP_3_6, bl_tree);\n                    send_bits(count - 3, 2);\n                }\n                else if (count <= 10)\n                {\n                    send_code(InternalConstants.REPZ_3_10, bl_tree);\n                    send_bits(count - 3, 3);\n                }\n                else\n                {\n                    send_code(InternalConstants.REPZ_11_138, bl_tree);\n                    send_bits(count - 11, 7);\n                }\n                count = 0; prevlen = curlen;\n                if (nextlen == 0)\n                {\n                    max_count = 138; min_count = 3;\n                }\n                else if (curlen == nextlen)\n                {\n                    max_count = 6; min_count = 3;\n                }\n                else\n                {\n                    max_count = 7; min_count = 4;\n                }\n            }\n        }\n\n        // Output a block of bytes on the stream.\n        // IN assertion: there is enough room in pending_buf.\n        private void put_bytes(byte[] p, int start, int len)\n        {\n            Array.Copy(p, start, pending, pendingCount, len);\n            pendingCount += len;\n        }\n\n#if NOTNEEDED\n        private void put_byte(byte c)\n        {\n            pending[pendingCount++] = c;\n        }\n        internal void put_short(int b)\n        {\n            unchecked\n            {\n                pending[pendingCount++] = (byte)b;\n                pending[pendingCount++] = (byte)(b >> 8);\n            }\n        }\n        internal void putShortMSB(int b)\n        {\n            unchecked\n            {\n                pending[pendingCount++] = (byte)(b >> 8);\n                pending[pendingCount++] = (byte)b;\n            }\n        }\n#endif\n\n        internal void send_code(int c, short[] tree)\n        {\n            int c2 = c * 2;\n            send_bits((tree[c2] & 0xffff), (tree[c2 + 1] & 0xffff));\n        }\n\n        internal void send_bits(int value, int length)\n        {\n            int len = length;\n            unchecked\n            {\n                if (bi_valid > (int)Buf_size - len)\n                {\n                    //int val = value;\n                    //      bi_buf |= (val << bi_valid);\n\n                    bi_buf |= (short)((value << bi_valid) & 0xffff);\n                    //put_short(bi_buf);\n                        pending[pendingCount++] = (byte)bi_buf;\n                        pending[pendingCount++] = (byte)(bi_buf >> 8);\n\n\n                    bi_buf = (short)((uint)value >> (Buf_size - bi_valid));\n                    bi_valid += len - Buf_size;\n                }\n                else\n                {\n                    //      bi_buf |= (value) << bi_valid;\n                    bi_buf |= (short)((value << bi_valid) & 0xffff);\n                    bi_valid += len;\n                }\n            }\n        }\n\n        // Send one empty static block to give enough lookahead for inflate.\n        // This takes 10 bits, of which 7 may remain in the bit buffer.\n        // The current inflate code requires 9 bits of lookahead. If the\n        // last two codes for the previous block (real code plus EOB) were coded\n        // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode\n        // the last real code. In this case we send two empty static blocks instead\n        // of one. (There are no problems if the previous block is stored or fixed.)\n        // To simplify the code, we assume the worst case of last real code encoded\n        // on one bit only.\n        internal void _tr_align()\n        {\n            send_bits(STATIC_TREES << 1, 3);\n            send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes);\n\n            bi_flush();\n\n            // Of the 10 bits for the empty block, we have already sent\n            // (10 - bi_valid) bits. The lookahead for the last real code (before\n            // the EOB of the previous block) was thus at least one plus the length\n            // of the EOB plus what we have just sent of the empty static block.\n            if (1 + last_eob_len + 10 - bi_valid < 9)\n            {\n                send_bits(STATIC_TREES << 1, 3);\n                send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes);\n                bi_flush();\n            }\n            last_eob_len = 7;\n        }\n\n\n        // Save the match info and tally the frequency counts. Return true if\n        // the current block must be flushed.\n        internal bool _tr_tally(int dist, int lc)\n        {\n            pending[_distanceOffset + last_lit * 2] = unchecked((byte) ( (uint)dist >> 8 ) );\n            pending[_distanceOffset + last_lit * 2 + 1] = unchecked((byte)dist);\n            pending[_lengthOffset + last_lit] = unchecked((byte)lc);\n            last_lit++;\n\n            if (dist == 0)\n            {\n                // lc is the unmatched char\n                dyn_ltree[lc * 2]++;\n            }\n            else\n            {\n                matches++;\n                // Here, lc is the match length - MIN_MATCH\n                dist--; // dist = match distance - 1\n                dyn_ltree[(Tree.LengthCode[lc] + InternalConstants.LITERALS + 1) * 2]++;\n                dyn_dtree[Tree.DistanceCode(dist) * 2]++;\n            }\n\n            if ((last_lit & 0x1fff) == 0 && (int)compressionLevel > 2)\n            {\n                // Compute an upper bound for the compressed length\n                int out_length = last_lit << 3;\n                int in_length = strstart - block_start;\n                int dcode;\n                for (dcode = 0; dcode < InternalConstants.D_CODES; dcode++)\n                {\n                    out_length = (int)(out_length + (int)dyn_dtree[dcode * 2] * (5L + Tree.ExtraDistanceBits[dcode]));\n                }\n                out_length >>= 3;\n                if ((matches < (last_lit / 2)) && out_length < in_length / 2)\n                    return true;\n            }\n\n            return (last_lit == lit_bufsize - 1) || (last_lit == lit_bufsize);\n            // dinoch - wraparound?\n            // We avoid equality with lit_bufsize because of wraparound at 64K\n            // on 16 bit machines and because stored blocks are restricted to\n            // 64K-1 bytes.\n        }\n\n\n\n        // Send the block data compressed using the given Huffman trees\n        internal void send_compressed_block(short[] ltree, short[] dtree)\n        {\n            int distance; // distance of matched string\n            int lc;       // match length or unmatched char (if dist == 0)\n            int lx = 0;   // running index in l_buf\n            int code;     // the code to send\n            int extra;    // number of extra bits to send\n\n            if (last_lit != 0)\n            {\n                do\n                {\n                    int ix = _distanceOffset + lx * 2;\n                    distance = ((pending[ix] << 8) & 0xff00) |\n                        (pending[ix + 1] & 0xff);\n                    lc = (pending[_lengthOffset + lx]) & 0xff;\n                    lx++;\n\n                    if (distance == 0)\n                    {\n                        send_code(lc, ltree); // send a literal byte\n                    }\n                    else\n                    {\n                        // literal or match pair\n                        // Here, lc is the match length - MIN_MATCH\n                        code = Tree.LengthCode[lc];\n\n                        // send the length code\n                        send_code(code + InternalConstants.LITERALS + 1, ltree);\n                        extra = Tree.ExtraLengthBits[code];\n                        if (extra != 0)\n                        {\n                            // send the extra length bits\n                            lc -= Tree.LengthBase[code];\n                            send_bits(lc, extra);\n                        }\n                        distance--; // dist is now the match distance - 1\n                        code = Tree.DistanceCode(distance);\n\n                        // send the distance code\n                        send_code(code, dtree);\n\n                        extra = Tree.ExtraDistanceBits[code];\n                        if (extra != 0)\n                        {\n                            // send the extra distance bits\n                            distance -= Tree.DistanceBase[code];\n                            send_bits(distance, extra);\n                        }\n                    }\n\n                    // Check that the overlay between pending and d_buf+l_buf is ok:\n                }\n                while (lx < last_lit);\n            }\n\n            send_code(END_BLOCK, ltree);\n            last_eob_len = ltree[END_BLOCK * 2 + 1];\n        }\n\n\n\n        // Set the data type to ASCII or BINARY, using a crude approximation:\n        // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.\n        // IN assertion: the fields freq of dyn_ltree are set and the total of all\n        // frequencies does not exceed 64K (to fit in an int on 16 bit machines).\n        internal void set_data_type()\n        {\n            int n = 0;\n            int ascii_freq = 0;\n            int bin_freq = 0;\n            while (n < 7)\n            {\n                bin_freq += dyn_ltree[n * 2]; n++;\n            }\n            while (n < 128)\n            {\n                ascii_freq += dyn_ltree[n * 2]; n++;\n            }\n            while (n < InternalConstants.LITERALS)\n            {\n                bin_freq += dyn_ltree[n * 2]; n++;\n            }\n            data_type = (sbyte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);\n        }\n\n\n\n        // Flush the bit buffer, keeping at most 7 bits in it.\n        internal void bi_flush()\n        {\n            if (bi_valid == 16)\n            {\n                pending[pendingCount++] = (byte)bi_buf;\n                pending[pendingCount++] = (byte)(bi_buf >> 8);\n                bi_buf = 0;\n                bi_valid = 0;\n            }\n            else if (bi_valid >= 8)\n            {\n                //put_byte((byte)bi_buf);\n                pending[pendingCount++] = (byte)bi_buf;\n                bi_buf >>= 8;\n                bi_valid -= 8;\n            }\n        }\n\n        // Flush the bit buffer and align the output on a byte boundary\n        internal void bi_windup()\n        {\n            if (bi_valid > 8)\n            {\n                pending[pendingCount++] = (byte)bi_buf;\n                pending[pendingCount++] = (byte)(bi_buf >> 8);\n            }\n            else if (bi_valid > 0)\n            {\n                //put_byte((byte)bi_buf);\n                pending[pendingCount++] = (byte)bi_buf;\n            }\n            bi_buf = 0;\n            bi_valid = 0;\n        }\n\n        // Copy a stored block, storing first the length and its\n        // one's complement if requested.\n        internal void copy_block(int buf, int len, bool header)\n        {\n            bi_windup(); // align on byte boundary\n            last_eob_len = 8; // enough lookahead for inflate\n\n            if (header)\n                unchecked\n                {\n                    //put_short((short)len);\n                    pending[pendingCount++] = (byte)len;\n                    pending[pendingCount++] = (byte)(len >> 8);\n                    //put_short((short)~len);\n                    pending[pendingCount++] = (byte)~len;\n                    pending[pendingCount++] = (byte)(~len >> 8);\n                }\n\n            put_bytes(window, buf, len);\n        }\n\n        internal void flush_block_only(bool eof)\n        {\n            _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof);\n            block_start = strstart;\n            _codec.flush_pending();\n        }\n\n        // Copy without compression as much as possible from the input stream, return\n        // the current block state.\n        // This function does not insert new strings in the dictionary since\n        // uncompressible data is probably not useful. This function is used\n        // only for the level=0 compression option.\n        // NOTE: this function should be optimized to avoid extra copying from\n        // window to pending_buf.\n        internal BlockState DeflateNone(FlushType flush)\n        {\n            // Stored blocks are limited to 0xffff bytes, pending is limited\n            // to pending_buf_size, and each stored block has a 5 byte header:\n\n            int max_block_size = 0xffff;\n            int max_start;\n\n            if (max_block_size > pending.Length - 5)\n            {\n                max_block_size = pending.Length - 5;\n            }\n\n            // Copy as much as possible from input to output:\n            while (true)\n            {\n                // Fill the window as much as possible:\n                if (lookahead <= 1)\n                {\n                    _fillWindow();\n                    if (lookahead == 0 && flush == FlushType.None)\n                        return BlockState.NeedMore;\n                    if (lookahead == 0)\n                        break; // flush the current block\n                }\n\n                strstart += lookahead;\n                lookahead = 0;\n\n                // Emit a stored block if pending will be full:\n                max_start = block_start + max_block_size;\n                if (strstart == 0 || strstart >= max_start)\n                {\n                    // strstart == 0 is possible when wraparound on 16-bit machine\n                    lookahead = (int)(strstart - max_start);\n                    strstart = (int)max_start;\n\n                    flush_block_only(false);\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n\n                // Flush if we may have to slide, otherwise block_start may become\n                // negative and the data will be gone:\n                if (strstart - block_start >= w_size - MIN_LOOKAHEAD)\n                {\n                    flush_block_only(false);\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n            }\n\n            flush_block_only(flush == FlushType.Finish);\n            if (_codec.AvailableBytesOut == 0)\n                return (flush == FlushType.Finish) ? BlockState.FinishStarted : BlockState.NeedMore;\n\n            return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone;\n        }\n\n\n        // Send a stored block\n        internal void _tr_stored_block(int buf, int stored_len, bool eof)\n        {\n            send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type\n            copy_block(buf, stored_len, true); // with header\n        }\n\n        // Determine the best encoding for the current block: dynamic trees, static\n        // trees or store, and output the encoded block to the zip file.\n        internal void _tr_flush_block(int buf, int stored_len, bool eof)\n        {\n            int opt_lenb, static_lenb; // opt_len and static_len in bytes\n            int max_blindex = 0; // index of last bit length code of non zero freq\n\n            // Build the Huffman trees unless a stored block is forced\n            if (compressionLevel > 0)\n            {\n                // Check if the file is ascii or binary\n                if (data_type == Z_UNKNOWN)\n                    set_data_type();\n\n                // Construct the literal and distance trees\n                treeLiterals.build_tree(this);\n\n                treeDistances.build_tree(this);\n\n                // At this point, opt_len and static_len are the total bit lengths of\n                // the compressed block data, excluding the tree representations.\n\n                // Build the bit length tree for the above two trees, and get the index\n                // in bl_order of the last bit length code to send.\n                max_blindex = build_bl_tree();\n\n                // Determine the best encoding. Compute first the block length in bytes\n                opt_lenb = (opt_len + 3 + 7) >> 3;\n                static_lenb = (static_len + 3 + 7) >> 3;\n\n                if (static_lenb <= opt_lenb)\n                    opt_lenb = static_lenb;\n            }\n            else\n            {\n                opt_lenb = static_lenb = stored_len + 5; // force a stored block\n            }\n\n            if (stored_len + 4 <= opt_lenb && buf != -1)\n            {\n                // 4: two words for the lengths\n                // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n                // Otherwise we can't have processed more than WSIZE input bytes since\n                // the last block flush, because compression would have been\n                // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n                // transform a block into a stored block.\n                _tr_stored_block(buf, stored_len, eof);\n            }\n            else if (static_lenb == opt_lenb)\n            {\n                send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3);\n                send_compressed_block(StaticTree.lengthAndLiteralsTreeCodes, StaticTree.distTreeCodes);\n            }\n            else\n            {\n                send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3);\n                send_all_trees(treeLiterals.max_code + 1, treeDistances.max_code + 1, max_blindex + 1);\n                send_compressed_block(dyn_ltree, dyn_dtree);\n            }\n\n            // The above check is made mod 2^32, for files larger than 512 MB\n            // and uLong implemented on 32 bits.\n\n            _InitializeBlocks();\n\n            if (eof)\n            {\n                bi_windup();\n            }\n        }\n\n        // Fill the window when the lookahead becomes insufficient.\n        // Updates strstart and lookahead.\n        //\n        // IN assertion: lookahead < MIN_LOOKAHEAD\n        // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n        //    At least one byte has been read, or avail_in == 0; reads are\n        //    performed for at least two bytes (required for the zip translate_eol\n        //    option -- not supported here).\n        private void _fillWindow()\n        {\n            int n, m;\n            int p;\n            int more; // Amount of free space at the end of the window.\n\n            do\n            {\n                more = (window_size - lookahead - strstart);\n\n                // Deal with !@#$% 64K limit:\n                if (more == 0 && strstart == 0 && lookahead == 0)\n                {\n                    more = w_size;\n                }\n                else if (more == -1)\n                {\n                    // Very unlikely, but possible on 16 bit machine if strstart == 0\n                    // and lookahead == 1 (input done one byte at time)\n                    more--;\n\n                    // If the window is almost full and there is insufficient lookahead,\n                    // move the upper half to the lower one to make room in the upper half.\n                }\n                else if (strstart >= w_size + w_size - MIN_LOOKAHEAD)\n                {\n                    Array.Copy(window, w_size, window, 0, w_size);\n                    match_start -= w_size;\n                    strstart -= w_size; // we now have strstart >= MAX_DIST\n                    block_start -= w_size;\n\n                    // Slide the hash table (could be avoided with 32 bit values\n                    // at the expense of memory usage). We slide even when level == 0\n                    // to keep the hash table consistent if we switch back to level > 0\n                    // later. (Using level 0 permanently is not an optimal usage of\n                    // zlib, so we don't care about this pathological case.)\n\n                    n = hash_size;\n                    p = n;\n                    do\n                    {\n                        m = (head[--p] & 0xffff);\n                        head[p] = (short)((m >= w_size) ? (m - w_size) : 0);\n                    }\n                    while (--n != 0);\n\n                    n = w_size;\n                    p = n;\n                    do\n                    {\n                        m = (prev[--p] & 0xffff);\n                        prev[p] = (short)((m >= w_size) ? (m - w_size) : 0);\n                        // If n is not on any hash chain, prev[n] is garbage but\n                        // its value will never be used.\n                    }\n                    while (--n != 0);\n                    more += w_size;\n                }\n\n                if (_codec.AvailableBytesIn == 0)\n                    return;\n\n                // If there was no sliding:\n                //    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n                //    more == window_size - lookahead - strstart\n                // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n                // => more >= window_size - 2*WSIZE + 2\n                // In the BIG_MEM or MMAP case (not yet supported),\n                //   window_size == input_size + MIN_LOOKAHEAD  &&\n                //   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n                // Otherwise, window_size == 2*WSIZE so more >= 2.\n                // If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n\n                n = _codec.read_buf(window, strstart + lookahead, more);\n                lookahead += n;\n\n                // Initialize the hash value now that we have some input:\n                if (lookahead >= MIN_MATCH)\n                {\n                    ins_h = window[strstart] & 0xff;\n                    ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask;\n                }\n                // If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n                // but this is not important since only literal bytes will be emitted.\n            }\n            while (lookahead < MIN_LOOKAHEAD && _codec.AvailableBytesIn != 0);\n        }\n\n        // Compress as much as possible from the input stream, return the current\n        // block state.\n        // This function does not perform lazy evaluation of matches and inserts\n        // new strings in the dictionary only for unmatched strings or for short\n        // matches. It is used only for the fast compression options.\n        internal BlockState DeflateFast(FlushType flush)\n        {\n            //    short hash_head = 0; // head of the hash chain\n            int hash_head = 0; // head of the hash chain\n            bool bflush; // set if current block must be flushed\n\n            while (true)\n            {\n                // Make sure that we always have enough lookahead, except\n                // at the end of the input file. We need MAX_MATCH bytes\n                // for the next match, plus MIN_MATCH bytes to insert the\n                // string following the next match.\n                if (lookahead < MIN_LOOKAHEAD)\n                {\n                    _fillWindow();\n                    if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None)\n                    {\n                        return BlockState.NeedMore;\n                    }\n                    if (lookahead == 0)\n                        break; // flush the current block\n                }\n\n                // Insert the string window[strstart .. strstart+2] in the\n                // dictionary, and set hash_head to the head of the hash chain:\n                if (lookahead >= MIN_MATCH)\n                {\n                    ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n\n                    //  prev[strstart&w_mask]=hash_head=head[ins_h];\n                    hash_head = (head[ins_h] & 0xffff);\n                    prev[strstart & w_mask] = head[ins_h];\n                    head[ins_h] = unchecked((short)strstart);\n                }\n\n                // Find the longest match, discarding those <= prev_length.\n                // At this point we have always match_length < MIN_MATCH\n\n                if (hash_head != 0L && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD)\n                {\n                    // To simplify the code, we prevent matches with the string\n                    // of window index 0 (in particular we have to avoid a match\n                    // of the string with itself at the start of the input file).\n                    if (compressionStrategy != CompressionStrategy.HuffmanOnly)\n                    {\n                        match_length = longest_match(hash_head);\n                    }\n                    // longest_match() sets match_start\n                }\n                if (match_length >= MIN_MATCH)\n                {\n                    //        check_match(strstart, match_start, match_length);\n\n                    bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH);\n\n                    lookahead -= match_length;\n\n                    // Insert new strings in the hash table only if the match length\n                    // is not too large. This saves time but degrades compression.\n                    if (match_length <= config.MaxLazy && lookahead >= MIN_MATCH)\n                    {\n                        match_length--; // string at strstart already in hash table\n                        do\n                        {\n                            strstart++;\n\n                            ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                            //      prev[strstart&w_mask]=hash_head=head[ins_h];\n                            hash_head = (head[ins_h] & 0xffff);\n                            prev[strstart & w_mask] = head[ins_h];\n                            head[ins_h] = unchecked((short)strstart);\n\n                            // strstart never exceeds WSIZE-MAX_MATCH, so there are\n                            // always MIN_MATCH bytes ahead.\n                        }\n                        while (--match_length != 0);\n                        strstart++;\n                    }\n                    else\n                    {\n                        strstart += match_length;\n                        match_length = 0;\n                        ins_h = window[strstart] & 0xff;\n\n                        ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask;\n                        // If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n                        // matter since it will be recomputed at next deflate call.\n                    }\n                }\n                else\n                {\n                    // No match, output a literal byte\n\n                    bflush = _tr_tally(0, window[strstart] & 0xff);\n                    lookahead--;\n                    strstart++;\n                }\n                if (bflush)\n                {\n                    flush_block_only(false);\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n            }\n\n            flush_block_only(flush == FlushType.Finish);\n            if (_codec.AvailableBytesOut == 0)\n            {\n                if (flush == FlushType.Finish)\n                    return BlockState.FinishStarted;\n                else\n                    return BlockState.NeedMore;\n            }\n            return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone;\n        }\n\n        // Same as above, but achieves better compression. We use a lazy\n        // evaluation for matches: a match is finally adopted only if there is\n        // no better match at the next window position.\n        internal BlockState DeflateSlow(FlushType flush)\n        {\n            //    short hash_head = 0;    // head of hash chain\n            int hash_head = 0; // head of hash chain\n            bool bflush; // set if current block must be flushed\n\n            // Process the input block.\n            while (true)\n            {\n                // Make sure that we always have enough lookahead, except\n                // at the end of the input file. We need MAX_MATCH bytes\n                // for the next match, plus MIN_MATCH bytes to insert the\n                // string following the next match.\n\n                if (lookahead < MIN_LOOKAHEAD)\n                {\n                    _fillWindow();\n                    if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None)\n                        return BlockState.NeedMore;\n\n                    if (lookahead == 0)\n                        break; // flush the current block\n                }\n\n                // Insert the string window[strstart .. strstart+2] in the\n                // dictionary, and set hash_head to the head of the hash chain:\n\n                if (lookahead >= MIN_MATCH)\n                {\n                    ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                    //  prev[strstart&w_mask]=hash_head=head[ins_h];\n                    hash_head = (head[ins_h] & 0xffff);\n                    prev[strstart & w_mask] = head[ins_h];\n                    head[ins_h] = unchecked((short)strstart);\n                }\n\n                // Find the longest match, discarding those <= prev_length.\n                prev_length = match_length;\n                prev_match = match_start;\n                match_length = MIN_MATCH - 1;\n\n                if (hash_head != 0 && prev_length < config.MaxLazy &&\n                    ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD)\n                {\n                    // To simplify the code, we prevent matches with the string\n                    // of window index 0 (in particular we have to avoid a match\n                    // of the string with itself at the start of the input file).\n\n                    if (compressionStrategy != CompressionStrategy.HuffmanOnly)\n                    {\n                        match_length = longest_match(hash_head);\n                    }\n                    // longest_match() sets match_start\n\n                    if (match_length <= 5 && (compressionStrategy == CompressionStrategy.Filtered ||\n                                              (match_length == MIN_MATCH && strstart - match_start > 4096)))\n                    {\n\n                        // If prev_match is also MIN_MATCH, match_start is garbage\n                        // but we will ignore the current match anyway.\n                        match_length = MIN_MATCH - 1;\n                    }\n                }\n\n                // If there was a match at the previous step and the current\n                // match is not better, output the previous match:\n                if (prev_length >= MIN_MATCH && match_length <= prev_length)\n                {\n                    int max_insert = strstart + lookahead - MIN_MATCH;\n                    // Do not insert strings in hash table beyond this.\n\n                    //          check_match(strstart-1, prev_match, prev_length);\n\n                    bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH);\n\n                    // Insert in hash table all strings up to the end of the match.\n                    // strstart-1 and strstart are already inserted. If there is not\n                    // enough lookahead, the last two strings are not inserted in\n                    // the hash table.\n                    lookahead -= (prev_length - 1);\n                    prev_length -= 2;\n                    do\n                    {\n                        if (++strstart <= max_insert)\n                        {\n                            ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                            //prev[strstart&w_mask]=hash_head=head[ins_h];\n                            hash_head = (head[ins_h] & 0xffff);\n                            prev[strstart & w_mask] = head[ins_h];\n                            head[ins_h] = unchecked((short)strstart);\n                        }\n                    }\n                    while (--prev_length != 0);\n                    match_available = 0;\n                    match_length = MIN_MATCH - 1;\n                    strstart++;\n\n                    if (bflush)\n                    {\n                        flush_block_only(false);\n                        if (_codec.AvailableBytesOut == 0)\n                            return BlockState.NeedMore;\n                    }\n                }\n                else if (match_available != 0)\n                {\n\n                    // If there was no match at the previous position, output a\n                    // single literal. If there was a match but the current match\n                    // is longer, truncate the previous match to a single literal.\n\n                    bflush = _tr_tally(0, window[strstart - 1] & 0xff);\n\n                    if (bflush)\n                    {\n                        flush_block_only(false);\n                    }\n                    strstart++;\n                    lookahead--;\n                    if (_codec.AvailableBytesOut == 0)\n                        return BlockState.NeedMore;\n                }\n                else\n                {\n                    // There is no previous match to compare with, wait for\n                    // the next step to decide.\n\n                    match_available = 1;\n                    strstart++;\n                    lookahead--;\n                }\n            }\n\n            if (match_available != 0)\n            {\n                bflush = _tr_tally(0, window[strstart - 1] & 0xff);\n                match_available = 0;\n            }\n            flush_block_only(flush == FlushType.Finish);\n\n            if (_codec.AvailableBytesOut == 0)\n            {\n                if (flush == FlushType.Finish)\n                    return BlockState.FinishStarted;\n                else\n                    return BlockState.NeedMore;\n            }\n\n            return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone;\n        }\n\n\n        internal int longest_match(int cur_match)\n        {\n            int chain_length = config.MaxChainLength; // max hash chain length\n            int scan         = strstart;              // current string\n            int match;                                // matched string\n            int len;                                  // length of current match\n            int best_len     = prev_length;           // best match length so far\n            int limit        = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0;\n\n            int niceLength = config.NiceLength;\n\n            // Stop when cur_match becomes <= limit. To simplify the code,\n            // we prevent matches with the string of window index 0.\n\n            int wmask = w_mask;\n\n            int strend = strstart + MAX_MATCH;\n            byte scan_end1 = window[scan + best_len - 1];\n            byte scan_end = window[scan + best_len];\n\n            // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n            // It is easy to get rid of this optimization if necessary.\n\n            // Do not waste too much time if we already have a good match:\n            if (prev_length >= config.GoodLength)\n            {\n                chain_length >>= 2;\n            }\n\n            // Do not look for matches beyond the end of the input. This is necessary\n            // to make deflate deterministic.\n            if (niceLength > lookahead)\n                niceLength = lookahead;\n\n            do\n            {\n                match = cur_match;\n\n                // Skip to next match if the match length cannot increase\n                // or if the match length is less than 2:\n                if (window[match + best_len] != scan_end ||\n                    window[match + best_len - 1] != scan_end1 ||\n                    window[match] != window[scan] ||\n                    window[++match] != window[scan + 1])\n                    continue;\n\n                // The check at best_len-1 can be removed because it will be made\n                // again later. (This heuristic is not always a win.)\n                // It is not necessary to compare scan[2] and match[2] since they\n                // are always equal when the other bytes match, given that\n                // the hash keys are equal and that HASH_BITS >= 8.\n                scan += 2; match++;\n\n                // We check for insufficient lookahead only every 8th comparison;\n                // the 256th check will be made at strstart+258.\n                do\n                {\n                }\n                while (window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] &&\n                       window[++scan] == window[++match] && scan < strend);\n\n                len = MAX_MATCH - (int)(strend - scan);\n                scan = strend - MAX_MATCH;\n\n                if (len > best_len)\n                {\n                    match_start = cur_match;\n                    best_len = len;\n                    if (len >= niceLength)\n                        break;\n                    scan_end1 = window[scan + best_len - 1];\n                    scan_end = window[scan + best_len];\n                }\n            }\n            while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length != 0);\n\n            if (best_len <= lookahead)\n                return best_len;\n            return lookahead;\n        }\n\n\n        private bool Rfc1950BytesEmitted = false;\n        private bool _WantRfc1950HeaderBytes = true;\n        internal bool WantRfc1950HeaderBytes\n        {\n            get { return _WantRfc1950HeaderBytes; }\n            set { _WantRfc1950HeaderBytes = value; }\n        }\n\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level)\n        {\n            return Initialize(codec, level, ZlibConstants.WindowBitsMax);\n        }\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits)\n        {\n            return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, CompressionStrategy.Default);\n        }\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits, CompressionStrategy compressionStrategy)\n        {\n            return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, compressionStrategy);\n        }\n\n        internal int Initialize(ZlibCodec codec, CompressionLevel level, int windowBits, int memLevel, CompressionStrategy strategy)\n        {\n            _codec = codec;\n            _codec.Message = null;\n\n            // validation\n            if (windowBits < 9 || windowBits > 15)\n                throw new ZlibException(\"windowBits must be in the range 9..15.\");\n\n            if (memLevel < 1 || memLevel > MEM_LEVEL_MAX)\n                throw new ZlibException(String.Format(\"memLevel must be in the range 1.. {0}\", MEM_LEVEL_MAX));\n\n            _codec.dstate = this;\n\n            w_bits = windowBits;\n            w_size = 1 << w_bits;\n            w_mask = w_size - 1;\n\n            hash_bits = memLevel + 7;\n            hash_size = 1 << hash_bits;\n            hash_mask = hash_size - 1;\n            hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n            window = new byte[w_size * 2];\n            prev = new short[w_size];\n            head = new short[hash_size];\n\n            // for memLevel==8, this will be 16384, 16k\n            lit_bufsize = 1 << (memLevel + 6);\n\n            // Use a single array as the buffer for data pending compression,\n            // the output distance codes, and the output length codes (aka tree).\n            // orig comment: This works just fine since the average\n            // output size for (length,distance) codes is <= 24 bits.\n            pending = new byte[lit_bufsize * 4];\n            _distanceOffset = lit_bufsize;\n            _lengthOffset = (1 + 2) * lit_bufsize;\n\n            // So, for memLevel 8, the length of the pending buffer is 65536. 64k.\n            // The first 16k are pending bytes.\n            // The middle slice, of 32k, is used for distance codes.\n            // The final 16k are length codes.\n\n            this.compressionLevel = level;\n            this.compressionStrategy = strategy;\n\n            Reset();\n            return ZlibConstants.Z_OK;\n        }\n\n\n        internal void Reset()\n        {\n            _codec.TotalBytesIn = _codec.TotalBytesOut = 0;\n            _codec.Message = null;\n            //strm.data_type = Z_UNKNOWN;\n\n            pendingCount = 0;\n            nextPending = 0;\n\n            Rfc1950BytesEmitted = false;\n\n            status = (WantRfc1950HeaderBytes) ? INIT_STATE : BUSY_STATE;\n            _codec._Adler32 = Adler.Adler32(0, null, 0, 0);\n\n            last_flush = (int)FlushType.None;\n\n            _InitializeTreeData();\n            _InitializeLazyMatch();\n        }\n\n\n        internal int End()\n        {\n            if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE)\n            {\n                return ZlibConstants.Z_STREAM_ERROR;\n            }\n            // Deallocate in reverse order of allocations:\n            pending = null;\n            head = null;\n            prev = null;\n            window = null;\n            // free\n            // dstate=null;\n            return status == BUSY_STATE ? ZlibConstants.Z_DATA_ERROR : ZlibConstants.Z_OK;\n        }\n\n\n        private void SetDeflater()\n        {\n            switch (config.Flavor)\n            {\n                case DeflateFlavor.Store:\n                    DeflateFunction = DeflateNone;\n                    break;\n                case DeflateFlavor.Fast:\n                    DeflateFunction = DeflateFast;\n                    break;\n                case DeflateFlavor.Slow:\n                    DeflateFunction = DeflateSlow;\n                    break;\n            }\n        }\n\n\n        internal int SetParams(CompressionLevel level, CompressionStrategy strategy)\n        {\n            int result = ZlibConstants.Z_OK;\n\n            if (compressionLevel != level)\n            {\n                Config newConfig = Config.Lookup(level);\n\n                // change in the deflate flavor (Fast vs slow vs none)?\n                if (newConfig.Flavor != config.Flavor && _codec.TotalBytesIn != 0)\n                {\n                    // Flush the last buffer:\n                    result = _codec.Deflate(FlushType.Partial);\n                }\n\n                compressionLevel = level;\n                config = newConfig;\n                SetDeflater();\n            }\n\n            // no need to flush with change in strategy?  Really?\n            compressionStrategy = strategy;\n\n            return result;\n        }\n\n\n        internal int SetDictionary(byte[] dictionary)\n        {\n            int length = dictionary.Length;\n            int index = 0;\n\n            if (dictionary == null || status != INIT_STATE)\n                throw new ZlibException(\"Stream error.\");\n\n            _codec._Adler32 = Adler.Adler32(_codec._Adler32, dictionary, 0, dictionary.Length);\n\n            if (length < MIN_MATCH)\n                return ZlibConstants.Z_OK;\n            if (length > w_size - MIN_LOOKAHEAD)\n            {\n                length = w_size - MIN_LOOKAHEAD;\n                index = dictionary.Length - length; // use the tail of the dictionary\n            }\n            Array.Copy(dictionary, index, window, 0, length);\n            strstart = length;\n            block_start = length;\n\n            // Insert all strings in the hash table (except for the last two bytes).\n            // s->lookahead stays null, so s->ins_h will be recomputed at the next\n            // call of fill_window.\n\n            ins_h = window[0] & 0xff;\n            ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask;\n\n            for (int n = 0; n <= length - MIN_MATCH; n++)\n            {\n                ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask;\n                prev[n & w_mask] = head[ins_h];\n                head[ins_h] = (short)n;\n            }\n            return ZlibConstants.Z_OK;\n        }\n\n\n\n        internal int Deflate(FlushType flush)\n        {\n            int old_flush;\n\n            if (_codec.OutputBuffer == null ||\n                (_codec.InputBuffer == null && _codec.AvailableBytesIn != 0) ||\n                (status == FINISH_STATE && flush != FlushType.Finish))\n            {\n                _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_STREAM_ERROR)];\n                throw new ZlibException(String.Format(\"Something is fishy. [{0}]\", _codec.Message));\n            }\n            if (_codec.AvailableBytesOut == 0)\n            {\n                _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)];\n                throw new ZlibException(\"OutputBuffer is full (AvailableBytesOut == 0)\");\n            }\n\n            old_flush = last_flush;\n            last_flush = (int)flush;\n\n            // Write the zlib (rfc1950) header bytes\n            if (status == INIT_STATE)\n            {\n                int header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8;\n                int level_flags = (((int)compressionLevel - 1) & 0xff) >> 1;\n\n                if (level_flags > 3)\n                    level_flags = 3;\n                header |= (level_flags << 6);\n                if (strstart != 0)\n                    header |= PRESET_DICT;\n                header += 31 - (header % 31);\n\n                status = BUSY_STATE;\n                //putShortMSB(header);\n                unchecked\n                {\n                    pending[pendingCount++] = (byte)(header >> 8);\n                    pending[pendingCount++] = (byte)header;\n                }\n                // Save the adler32 of the preset dictionary:\n                if (strstart != 0)\n                {\n                    pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24);\n                    pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16);\n                    pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8);\n                    pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF);\n                }\n                _codec._Adler32 = Adler.Adler32(0, null, 0, 0);\n            }\n\n            // Flush as much pending output as possible\n            if (pendingCount != 0)\n            {\n                _codec.flush_pending();\n                if (_codec.AvailableBytesOut == 0)\n                {\n                    //System.out.println(\"  avail_out==0\");\n                    // Since avail_out is 0, deflate will be called again with\n                    // more output space, but possibly with both pending and\n                    // avail_in equal to zero. There won't be anything to do,\n                    // but this is not an error situation so make sure we\n                    // return OK instead of BUF_ERROR at next call of deflate:\n                    last_flush = -1;\n                    return ZlibConstants.Z_OK;\n                }\n\n                // Make sure there is something to do and avoid duplicate consecutive\n                // flushes. For repeated and useless calls with Z_FINISH, we keep\n                // returning Z_STREAM_END instead of Z_BUFF_ERROR.\n            }\n            else if (_codec.AvailableBytesIn == 0 &&\n                     (int)flush <= old_flush &&\n                     flush != FlushType.Finish)\n            {\n                // workitem 8557\n                //\n                // Not sure why this needs to be an error.  pendingCount == 0, which\n                // means there's nothing to deflate.  And the caller has not asked\n                // for a FlushType.Finish, but...  that seems very non-fatal.  We\n                // can just say \"OK\" and do nothing.\n\n                // _codec.Message = z_errmsg[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)];\n                // throw new ZlibException(\"AvailableBytesIn == 0 && flush<=old_flush && flush != FlushType.Finish\");\n\n                return ZlibConstants.Z_OK;\n            }\n\n            // User must not provide more input after the first FINISH:\n            if (status == FINISH_STATE && _codec.AvailableBytesIn != 0)\n            {\n                _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)];\n                throw new ZlibException(\"status == FINISH_STATE && _codec.AvailableBytesIn != 0\");\n            }\n\n            // Start a new block or continue the current one.\n            if (_codec.AvailableBytesIn != 0 || lookahead != 0 || (flush != FlushType.None && status != FINISH_STATE))\n            {\n                BlockState bstate = DeflateFunction(flush);\n\n                if (bstate == BlockState.FinishStarted || bstate == BlockState.FinishDone)\n                {\n                    status = FINISH_STATE;\n                }\n                if (bstate == BlockState.NeedMore || bstate == BlockState.FinishStarted)\n                {\n                    if (_codec.AvailableBytesOut == 0)\n                    {\n                        last_flush = -1; // avoid BUF_ERROR next call, see above\n                    }\n                    return ZlibConstants.Z_OK;\n                    // If flush != Z_NO_FLUSH && avail_out == 0, the next call\n                    // of deflate should use the same flush parameter to make sure\n                    // that the flush is complete. So we don't have to output an\n                    // empty block here, this will be done at next call. This also\n                    // ensures that for a very small output buffer, we emit at most\n                    // one empty block.\n                }\n\n                if (bstate == BlockState.BlockDone)\n                {\n                    if (flush == FlushType.Partial)\n                    {\n                        _tr_align();\n                    }\n                    else\n                    {\n                        // FlushType.Full or FlushType.Sync\n                        _tr_stored_block(0, 0, false);\n                        // For a full flush, this empty block will be recognized\n                        // as a special marker by inflate_sync().\n                        if (flush == FlushType.Full)\n                        {\n                            // clear hash (forget the history)\n                            for (int i = 0; i < hash_size; i++)\n                                head[i] = 0;\n                        }\n                    }\n                    _codec.flush_pending();\n                    if (_codec.AvailableBytesOut == 0)\n                    {\n                        last_flush = -1; // avoid BUF_ERROR at next call, see above\n                        return ZlibConstants.Z_OK;\n                    }\n                }\n            }\n\n            if (flush != FlushType.Finish)\n                return ZlibConstants.Z_OK;\n\n            if (!WantRfc1950HeaderBytes || Rfc1950BytesEmitted)\n                return ZlibConstants.Z_STREAM_END;\n\n            // Write the zlib trailer (adler32)\n            pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24);\n            pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16);\n            pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8);\n            pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF);\n            //putShortMSB((int)(SharedUtils.URShift(_codec._Adler32, 16)));\n            //putShortMSB((int)(_codec._Adler32 & 0xffff));\n\n            _codec.flush_pending();\n\n            // If avail_out is zero, the application will call deflate again\n            // to flush the rest.\n\n            Rfc1950BytesEmitted = true; // write the trailer only once!\n\n            return pendingCount != 0 ? ZlibConstants.Z_OK : ZlibConstants.Z_STREAM_END;\n        }\n\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/DeflateStream.cs",
    "content": "// DeflateStream.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009-2010 Dino Chiesa.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2011-July-31 14:48:11>\n//\n// ------------------------------------------------------------------\n//\n// This module defines the DeflateStream class, which can be used as a replacement for\n// the System.IO.Compression.DeflateStream class in the .NET BCL.\n//\n// ------------------------------------------------------------------\n\n\nusing System;\n\nnamespace Ionic.Zlib\n{\n    /// <summary>\n    /// A class for compressing and decompressing streams using the Deflate algorithm.\n    /// </summary>\n    ///\n    /// <remarks>\n    ///\n    /// <para>\n    ///   The DeflateStream is a <see\n    ///   href=\"http://en.wikipedia.org/wiki/Decorator_pattern\">Decorator</see> on a <see\n    ///   cref=\"System.IO.Stream\"/>.  It adds DEFLATE compression or decompression to any\n    ///   stream.\n    /// </para>\n    ///\n    /// <para>\n    ///   Using this stream, applications can compress or decompress data via stream\n    ///   <c>Read</c> and <c>Write</c> operations.  Either compresssion or decompression\n    ///   can occur through either reading or writing. The compression format used is\n    ///   DEFLATE, which is documented in <see\n    ///   href=\"http://www.ietf.org/rfc/rfc1951.txt\">IETF RFC 1951</see>, \"DEFLATE\n    ///   Compressed Data Format Specification version 1.3.\".\n    /// </para>\n    ///\n    /// <para>\n    ///   This class is similar to <see cref=\"ZlibStream\"/>, except that\n    ///   <c>ZlibStream</c> adds the <see href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC\n    ///   1950 - ZLIB</see> framing bytes to a compressed stream when compressing, or\n    ///   expects the RFC1950 framing bytes when decompressing. The <c>DeflateStream</c>\n    ///   does not.\n    /// </para>\n    ///\n    /// </remarks>\n    ///\n    /// <seealso cref=\"ZlibStream\" />\n    /// <seealso cref=\"GZipStream\" />\n    public class DeflateStream : System.IO.Stream\n    {\n        internal ZlibBaseStream _baseStream;\n        internal System.IO.Stream _innerStream;\n        bool _disposed;\n\n        /// <summary>\n        ///   Create a DeflateStream using the specified CompressionMode.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   When mode is <c>CompressionMode.Compress</c>, the DeflateStream will use\n        ///   the default compression level. The \"captive\" stream will be closed when\n        ///   the DeflateStream is closed.\n        /// </remarks>\n        ///\n        /// <example>\n        /// This example uses a DeflateStream to compress data from a file, and writes\n        /// the compressed data to another file.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".deflated\"))\n        ///     {\n        ///         using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".deflated\")\n        ///         Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the DeflateStream will compress or decompress.</param>\n        public DeflateStream(System.IO.Stream stream, CompressionMode mode)\n            : this(stream, mode, CompressionLevel.Default, false)\n        {\n        }\n\n        /// <summary>\n        /// Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Decompress</c>, the level parameter is\n        ///   ignored.  The \"captive\" stream will be closed when the DeflateStream is\n        ///   closed.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        ///   This example uses a DeflateStream to compress data from a file, and writes\n        ///   the compressed data to another file.\n        ///\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".deflated\"))\n        ///     {\n        ///         using (Stream compressor = new DeflateStream(raw,\n        ///                                                      CompressionMode.Compress,\n        ///                                                      CompressionLevel.BestCompression))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n= -1;\n        ///             while (n != 0)\n        ///             {\n        ///                 if (n &gt; 0)\n        ///                     compressor.Write(buffer, 0, n);\n        ///                 n= input.Read(buffer, 0, buffer.Length);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".deflated\")\n        ///         Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream to be read or written while deflating or inflating.</param>\n        /// <param name=\"mode\">Indicates whether the <c>DeflateStream</c> will compress or decompress.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public DeflateStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level)\n            : this(stream, mode, level, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>DeflateStream</c> using the specified\n        ///   <c>CompressionMode</c>, and explicitly specify whether the\n        ///   stream should be left open after Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   memory stream that will be re-read after compression.  Specify true for\n        ///   the <paramref name=\"leaveOpen\"/> parameter to leave the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   The <c>DeflateStream</c> will use the default compression level.\n        /// </para>\n        ///\n        /// <para>\n        ///   See the other overloads of this constructor for example code.\n        /// </para>\n        /// </remarks>\n        ///\n        /// <param name=\"stream\">\n        ///   The stream which will be read or written. This is called the\n        ///   \"captive\" stream in other places in this documentation.\n        /// </param>\n        ///\n        /// <param name=\"mode\">\n        ///   Indicates whether the <c>DeflateStream</c> will compress or decompress.\n        /// </param>\n        ///\n        /// <param name=\"leaveOpen\">true if the application would like the stream to\n        /// remain open after inflation/deflation.</param>\n        public DeflateStream(System.IO.Stream stream, CompressionMode mode, bool leaveOpen)\n            : this(stream, mode, CompressionLevel.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>DeflateStream</c> using the specified <c>CompressionMode</c>\n        ///   and the specified <c>CompressionLevel</c>, and explicitly specify whether\n        ///   the stream should be left open after Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Decompress</c>, the level parameter is ignored.\n        /// </para>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   <see cref=\"System.IO.MemoryStream\"/> that will be re-read after\n        ///   compression.  Specify true for the <paramref name=\"leaveOpen\"/> parameter\n        ///   to leave the stream open.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        ///   This example shows how to use a <c>DeflateStream</c> to compress data from\n        ///   a file, and store the compressed data into another file.\n        ///\n        /// <code>\n        /// using (var output = System.IO.File.Create(fileToCompress + \".deflated\"))\n        /// {\n        ///     using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        ///     {\n        ///         using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n= -1;\n        ///             while (n != 0)\n        ///             {\n        ///                 if (n &gt; 0)\n        ///                     compressor.Write(buffer, 0, n);\n        ///                 n= input.Read(buffer, 0, buffer.Length);\n        ///             }\n        ///         }\n        ///     }\n        ///     // can write additional data to the output stream here\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using output As FileStream = File.Create(fileToCompress &amp; \".deflated\")\n        ///     Using input As Stream = File.OpenRead(fileToCompress)\n        ///         Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        ///     ' can write additional data to the output stream here.\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the DeflateStream will compress or decompress.</param>\n        /// <param name=\"leaveOpen\">true if the application would like the stream to remain open after inflation/deflation.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public DeflateStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen)\n        {\n            _innerStream = stream;\n            _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.DEFLATE, leaveOpen);\n        }\n\n        #region Zlib properties\n\n        /// <summary>\n        /// This property sets the flush behavior on the stream.\n        /// </summary>\n        /// <remarks> See the ZLIB documentation for the meaning of the flush behavior.\n        /// </remarks>\n        virtual public FlushType FlushMode\n        {\n            get { return (this._baseStream._flushMode); }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n                this._baseStream._flushMode = value;\n            }\n        }\n\n        /// <summary>\n        ///   The size of the working buffer for the compression codec.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The working buffer is used for all stream operations.  The default size is\n        ///   1024 bytes.  The minimum size is 128 bytes. You may get better performance\n        ///   with a larger buffer.  Then again, you might not.  You would have to test\n        ///   it.\n        /// </para>\n        ///\n        /// <para>\n        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the\n        ///   stream. If you try to set it afterwards, it will throw.\n        /// </para>\n        /// </remarks>\n        public int BufferSize\n        {\n            get\n            {\n                return this._baseStream._bufferSize;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n                if (this._baseStream._workingBuffer != null)\n                    throw new ZlibException(\"The working buffer is already set.\");\n                if (value < ZlibConstants.WorkingBufferSizeMin)\n                    throw new ZlibException(String.Format(\"Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.\", value, ZlibConstants.WorkingBufferSizeMin));\n                this._baseStream._bufferSize = value;\n            }\n        }\n\n        /// <summary>\n        ///   The ZLIB strategy to be used during compression.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   By tweaking this parameter, you may be able to optimize the compression for\n        ///   data with particular characteristics.\n        /// </remarks>\n        public CompressionStrategy Strategy\n        {\n            get\n            {\n                return this._baseStream.Strategy;\n            }\n            set\n            {\n            if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n                this._baseStream.Strategy = value;\n            }\n        }\n\n        /// <summary> Returns the total number of bytes input so far.</summary>\n        virtual public long TotalIn\n        {\n            get\n            {\n                return this._baseStream._z.TotalBytesIn;\n            }\n        }\n\n        /// <summary> Returns the total number of bytes output so far.</summary>\n        virtual public long TotalOut\n        {\n            get\n            {\n                return this._baseStream._z.TotalBytesOut;\n            }\n        }\n\n        #endregion\n\n        #region System.IO.Stream methods\n        /// <summary>\n        ///   Dispose the stream.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This may or may not result in a <c>Close()</c> call on the captive\n        ///     stream.  See the constructors that have a <c>leaveOpen</c> parameter\n        ///     for more information.\n        ///   </para>\n        ///   <para>\n        ///     Application code won't call this code directly.  This method may be\n        ///     invoked in two distinct scenarios.  If disposing == true, the method\n        ///     has been called directly or indirectly by a user's code, for example\n        ///     via the public Dispose() method. In this case, both managed and\n        ///     unmanaged resources can be referenced and disposed.  If disposing ==\n        ///     false, the method has been called by the runtime from inside the\n        ///     object finalizer and this method should not reference other objects;\n        ///     in that case only unmanaged resources must be referenced or\n        ///     disposed.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"disposing\">\n        ///   true if the Dispose method was invoked by user code.\n        /// </param>\n        protected override void Dispose(bool disposing)\n        {\n            try\n            {\n                if (!_disposed)\n                {\n                    if (disposing && (this._baseStream != null))\n                        this._baseStream.Close();\n                    _disposed = true;\n                }\n            }\n            finally\n            {\n                base.Dispose(disposing);\n            }\n        }\n\n\n\n        /// <summary>\n        /// Indicates whether the stream can be read.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports reading.\n        /// </remarks>\n        public override bool CanRead\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n                return _baseStream._stream.CanRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports Seek operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be written.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports writing.\n        /// </remarks>\n        public override bool CanWrite\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n                return _baseStream._stream.CanWrite;\n            }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n            _baseStream.Flush();\n        }\n\n        /// <summary>\n        /// Reading this property always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        public override long Length\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        /// The position of the stream pointer.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Setting this property always throws a <see\n        ///   cref=\"NotImplementedException\"/>. Reading will return the total bytes\n        ///   written out, if used in writing, or the total bytes read in, if used in\n        ///   reading.  The count may refer to compressed bytes or uncompressed bytes,\n        ///   depending on how you've used the stream.\n        /// </remarks>\n        public override long Position\n        {\n            get\n            {\n                if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Writer)\n                    return this._baseStream._z.TotalBytesOut;\n                if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Reader)\n                    return this._baseStream._z.TotalBytesIn;\n                return 0;\n            }\n            set { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        /// Read data from the stream.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   If you wish to use the <c>DeflateStream</c> to compress data while\n        ///   reading, you can create a <c>DeflateStream</c> with\n        ///   <c>CompressionMode.Compress</c>, providing an uncompressed data stream.\n        ///   Then call Read() on that <c>DeflateStream</c>, and the data read will be\n        ///   compressed as you read.  If you wish to use the <c>DeflateStream</c> to\n        ///   decompress data while reading, you can create a <c>DeflateStream</c> with\n        ///   <c>CompressionMode.Decompress</c>, providing a readable compressed data\n        ///   stream.  Then call Read() on that <c>DeflateStream</c>, and the data read\n        ///   will be decompressed as you read.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>DeflateStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but not both.\n        /// </para>\n        ///\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer into which the read data should be placed.</param>\n        /// <param name=\"offset\">the offset within that data array to put the first byte read.</param>\n        /// <param name=\"count\">the number of bytes to read.</param>\n        /// <returns>the number of bytes actually read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n            return _baseStream.Read(buffer, offset, count);\n        }\n\n\n        /// <summary>\n        /// Calling this method always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        /// <param name=\"offset\">this is irrelevant, since it will always throw!</param>\n        /// <param name=\"origin\">this is irrelevant, since it will always throw!</param>\n        /// <returns>irrelevant!</returns>\n        public override long Seek(long offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Calling this method always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        /// <param name=\"value\">this is irrelevant, since it will always throw!</param>\n        public override void SetLength(long value)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        ///   Write data to the stream.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   If you wish to use the <c>DeflateStream</c> to compress data while\n        ///   writing, you can create a <c>DeflateStream</c> with\n        ///   <c>CompressionMode.Compress</c>, and a writable output stream.  Then call\n        ///   <c>Write()</c> on that <c>DeflateStream</c>, providing uncompressed data\n        ///   as input.  The data sent to the output stream will be the compressed form\n        ///   of the data written.  If you wish to use the <c>DeflateStream</c> to\n        ///   decompress data while writing, you can create a <c>DeflateStream</c> with\n        ///   <c>CompressionMode.Decompress</c>, and a writable output stream.  Then\n        ///   call <c>Write()</c> on that stream, providing previously compressed\n        ///   data. The data sent to the output stream will be the decompressed form of\n        ///   the data written.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>DeflateStream</c> can be used for <c>Read()</c> or <c>Write()</c>,\n        ///   but not both.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"buffer\">The buffer holding data to write to the stream.</param>\n        /// <param name=\"offset\">the offset within that data array to find the first byte to write.</param>\n        /// <param name=\"count\">the number of bytes to write.</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"DeflateStream\");\n            _baseStream.Write(buffer, offset, count);\n        }\n        #endregion\n\n\n\n\n        /// <summary>\n        ///   Compress a string into a byte array using DEFLATE (RFC 1951).\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"DeflateStream.UncompressString(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"DeflateStream.UncompressString(byte[])\">DeflateStream.UncompressString(byte[])</seealso>\n        /// <seealso cref=\"DeflateStream.CompressBuffer(byte[])\">DeflateStream.CompressBuffer(byte[])</seealso>\n        /// <seealso cref=\"GZipStream.CompressString(string)\">GZipStream.CompressString(string)</seealso>\n        /// <seealso cref=\"ZlibStream.CompressString(string)\">ZlibStream.CompressString(string)</seealso>\n        ///\n        /// <param name=\"s\">\n        ///   A string to compress. The string will first be encoded\n        ///   using UTF8, then compressed.\n        /// </param>\n        ///\n        /// <returns>The string in compressed form</returns>\n        public static byte[] CompressString(String s)\n        {\n            using (var ms = new System.IO.MemoryStream())\n            {\n                System.IO.Stream compressor =\n                    new DeflateStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n                ZlibBaseStream.CompressString(s, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Compress a byte array into a new byte array using DEFLATE.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"DeflateStream.UncompressBuffer(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"DeflateStream.CompressString(string)\">DeflateStream.CompressString(string)</seealso>\n        /// <seealso cref=\"DeflateStream.UncompressBuffer(byte[])\">DeflateStream.UncompressBuffer(byte[])</seealso>\n        /// <seealso cref=\"GZipStream.CompressBuffer(byte[])\">GZipStream.CompressBuffer(byte[])</seealso>\n        /// <seealso cref=\"ZlibStream.CompressBuffer(byte[])\">ZlibStream.CompressBuffer(byte[])</seealso>\n        ///\n        /// <param name=\"b\">\n        ///   A buffer to compress.\n        /// </param>\n        ///\n        /// <returns>The data in compressed form</returns>\n        public static byte[] CompressBuffer(byte[] b)\n        {\n            using (var ms = new System.IO.MemoryStream())\n            {\n                System.IO.Stream compressor =\n                    new DeflateStream( ms, CompressionMode.Compress, CompressionLevel.BestCompression );\n\n                ZlibBaseStream.CompressBuffer(b, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a DEFLATE'd byte array into a single string.\n        /// </summary>\n        ///\n        /// <seealso cref=\"DeflateStream.CompressString(String)\">DeflateStream.CompressString(String)</seealso>\n        /// <seealso cref=\"DeflateStream.UncompressBuffer(byte[])\">DeflateStream.UncompressBuffer(byte[])</seealso>\n        /// <seealso cref=\"GZipStream.UncompressString(byte[])\">GZipStream.UncompressString(byte[])</seealso>\n        /// <seealso cref=\"ZlibStream.UncompressString(byte[])\">ZlibStream.UncompressString(byte[])</seealso>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing DEFLATE-compressed data.\n        /// </param>\n        ///\n        /// <returns>The uncompressed string</returns>\n        public static String UncompressString(byte[] compressed)\n        {\n            using (var input = new System.IO.MemoryStream(compressed))\n            {\n                System.IO.Stream decompressor =\n                    new DeflateStream(input, CompressionMode.Decompress);\n\n                return ZlibBaseStream.UncompressString(compressed, decompressor);\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a DEFLATE'd byte array into a byte array.\n        /// </summary>\n        ///\n        /// <seealso cref=\"DeflateStream.CompressBuffer(byte[])\">DeflateStream.CompressBuffer(byte[])</seealso>\n        /// <seealso cref=\"DeflateStream.UncompressString(byte[])\">DeflateStream.UncompressString(byte[])</seealso>\n        /// <seealso cref=\"GZipStream.UncompressBuffer(byte[])\">GZipStream.UncompressBuffer(byte[])</seealso>\n        /// <seealso cref=\"ZlibStream.UncompressBuffer(byte[])\">ZlibStream.UncompressBuffer(byte[])</seealso>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing data that has been compressed with DEFLATE.\n        /// </param>\n        ///\n        /// <returns>The data in uncompressed form</returns>\n        public static byte[] UncompressBuffer(byte[] compressed)\n        {\n            using (var input = new System.IO.MemoryStream(compressed))\n            {\n                System.IO.Stream decompressor =\n                    new DeflateStream( input, CompressionMode.Decompress );\n\n                return ZlibBaseStream.UncompressBuffer(compressed, decompressor);\n            }\n        }\n\n    }\n\n}\n\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/GZipStream.cs",
    "content": "// GZipStream.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2011-August-08 18:14:39>\n//\n// ------------------------------------------------------------------\n//\n// This module defines the GZipStream class, which can be used as a replacement for\n// the System.IO.Compression.GZipStream class in the .NET BCL.  NB: The design is not\n// completely OO clean: there is some intelligence in the ZlibBaseStream that reads the\n// GZip header.\n//\n// ------------------------------------------------------------------\n\n\nusing System;\nusing System.IO;\n\nnamespace Ionic.Zlib\n{\n    /// <summary>\n    ///   A class for compressing and decompressing GZIP streams.\n    /// </summary>\n    /// <remarks>\n    ///\n    /// <para>\n    ///   The <c>GZipStream</c> is a <see\n    ///   href=\"http://en.wikipedia.org/wiki/Decorator_pattern\">Decorator</see> on a\n    ///   <see cref=\"Stream\"/>. It adds GZIP compression or decompression to any\n    ///   stream.\n    /// </para>\n    ///\n    /// <para>\n    ///   Like the <c>System.IO.Compression.GZipStream</c> in the .NET Base Class Library, the\n    ///   <c>Ionic.Zlib.GZipStream</c> can compress while writing, or decompress while\n    ///   reading, but not vice versa.  The compression method used is GZIP, which is\n    ///   documented in <see href=\"http://www.ietf.org/rfc/rfc1952.txt\">IETF RFC\n    ///   1952</see>, \"GZIP file format specification version 4.3\".</para>\n    ///\n    /// <para>\n    ///   A <c>GZipStream</c> can be used to decompress data (through <c>Read()</c>) or\n    ///   to compress data (through <c>Write()</c>), but not both.\n    /// </para>\n    ///\n    /// <para>\n    ///   If you wish to use the <c>GZipStream</c> to compress data, you must wrap it\n    ///   around a write-able stream. As you call <c>Write()</c> on the <c>GZipStream</c>, the\n    ///   data will be compressed into the GZIP format.  If you want to decompress data,\n    ///   you must wrap the <c>GZipStream</c> around a readable stream that contains an\n    ///   IETF RFC 1952-compliant stream.  The data will be decompressed as you call\n    ///   <c>Read()</c> on the <c>GZipStream</c>.\n    /// </para>\n    ///\n    /// <para>\n    ///   Though the GZIP format allows data from multiple files to be concatenated\n    ///   together, this stream handles only a single segment of GZIP format, typically\n    ///   representing a single file.\n    /// </para>\n    ///\n    /// <para>\n    ///   This class is similar to <see cref=\"ZlibStream\"/> and <see cref=\"DeflateStream\"/>.\n    ///   <c>ZlibStream</c> handles RFC1950-compliant streams.  <see cref=\"DeflateStream\"/>\n    ///   handles RFC1951-compliant streams. This class handles RFC1952-compliant streams.\n    /// </para>\n    ///\n    /// </remarks>\n    ///\n    /// <seealso cref=\"DeflateStream\" />\n    /// <seealso cref=\"ZlibStream\" />\n    public class GZipStream : System.IO.Stream\n    {\n        // GZip format\n        // source: http://tools.ietf.org/html/rfc1952\n        //\n        //  header id:           2 bytes    1F 8B\n        //  compress method      1 byte     8= DEFLATE (none other supported)\n        //  flag                 1 byte     bitfield (See below)\n        //  mtime                4 bytes    time_t (seconds since jan 1, 1970 UTC of the file.\n        //  xflg                 1 byte     2 = max compress used , 4 = max speed (can be ignored)\n        //  OS                   1 byte     OS for originating archive. set to 0xFF in compression.\n        //  extra field length   2 bytes    optional - only if FEXTRA is set.\n        //  extra field          varies\n        //  filename             varies     optional - if FNAME is set.  zero terminated. ISO-8859-1.\n        //  file comment         varies     optional - if FCOMMENT is set. zero terminated. ISO-8859-1.\n        //  crc16                1 byte     optional - present only if FHCRC bit is set\n        //  compressed data      varies\n        //  CRC32                4 bytes\n        //  isize                4 bytes    data size modulo 2^32\n        //\n        //     FLG (FLaGs)\n        //                bit 0   FTEXT - indicates file is ASCII text (can be safely ignored)\n        //                bit 1   FHCRC - there is a CRC16 for the header immediately following the header\n        //                bit 2   FEXTRA - extra fields are present\n        //                bit 3   FNAME - the zero-terminated filename is present. encoding; ISO-8859-1.\n        //                bit 4   FCOMMENT  - a zero-terminated file comment is present. encoding: ISO-8859-1\n        //                bit 5   reserved\n        //                bit 6   reserved\n        //                bit 7   reserved\n        //\n        // On consumption:\n        // Extra field is a bunch of nonsense and can be safely ignored.\n        // Header CRC and OS, likewise.\n        //\n        // on generation:\n        // all optional fields get 0, except for the OS, which gets 255.\n        //\n\n\n\n        /// <summary>\n        ///   The comment on the GZIP stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The GZIP format allows for each file to optionally have an associated\n        ///   comment stored with the file.  The comment is encoded with the ISO-8859-1\n        ///   code page.  To include a comment in a GZIP stream you create, set this\n        ///   property before calling <c>Write()</c> for the first time on the\n        ///   <c>GZipStream</c>.\n        /// </para>\n        ///\n        /// <para>\n        ///   When using <c>GZipStream</c> to decompress, you can retrieve this property\n        ///   after the first call to <c>Read()</c>.  If no comment has been set in the\n        ///   GZIP bytestream, the Comment property will return <c>null</c>\n        ///   (<c>Nothing</c> in VB).\n        /// </para>\n        /// </remarks>\n        public String Comment\n        {\n            get\n            {\n                return _Comment;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                _Comment = value;\n            }\n        }\n\n        /// <summary>\n        ///   The FileName for the GZIP stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   The GZIP format optionally allows each file to have an associated\n        ///   filename.  When compressing data (through <c>Write()</c>), set this\n        ///   FileName before calling <c>Write()</c> the first time on the <c>GZipStream</c>.\n        ///   The actual filename is encoded into the GZIP bytestream with the\n        ///   ISO-8859-1 code page, according to RFC 1952. It is the application's\n        ///   responsibility to insure that the FileName can be encoded and decoded\n        ///   correctly with this code page.\n        /// </para>\n        ///\n        /// <para>\n        ///   When decompressing (through <c>Read()</c>), you can retrieve this value\n        ///   any time after the first <c>Read()</c>.  In the case where there was no filename\n        ///   encoded into the GZIP bytestream, the property will return <c>null</c> (<c>Nothing</c>\n        ///   in VB).\n        /// </para>\n        /// </remarks>\n        public String FileName\n        {\n            get { return _FileName; }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                _FileName = value;\n                if (_FileName == null) return;\n                if (_FileName.IndexOf(\"/\") != -1)\n                {\n                    _FileName = _FileName.Replace(\"/\", \"\\\\\");\n                }\n                if (_FileName.EndsWith(\"\\\\\"))\n                    throw new Exception(\"Illegal filename\");\n                if (_FileName.IndexOf(\"\\\\\") != -1)\n                {\n                    // trim any leading path\n                    _FileName = Path.GetFileName(_FileName);\n                }\n            }\n        }\n\n        /// <summary>\n        ///   The last modified time for the GZIP stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   GZIP allows the storage of a last modified time with each GZIP entry.\n        ///   When compressing data, you can set this before the first call to\n        ///   <c>Write()</c>.  When decompressing, you can retrieve this value any time\n        ///   after the first call to <c>Read()</c>.\n        /// </remarks>\n        public DateTime? LastModified;\n\n        /// <summary>\n        /// The CRC on the GZIP stream.\n        /// </summary>\n        /// <remarks>\n        /// This is used for internal error checking. You probably don't need to look at this property.\n        /// </remarks>\n        public int Crc32 { get { return _Crc32; } }\n\n        private int _headerByteCount;\n        internal ZlibBaseStream _baseStream;\n        bool _disposed;\n        bool _firstReadDone;\n        string _FileName;\n        string _Comment;\n        int _Crc32;\n\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c>.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Compress</c>, the <c>GZipStream</c> will use the\n        ///   default compression level.\n        /// </para>\n        ///\n        /// <para>\n        ///   As noted in the class documentation, the <c>CompressionMode</c> (Compress\n        ///   or Decompress) also establishes the \"direction\" of the stream.  A\n        ///   <c>GZipStream</c> with <c>CompressionMode.Compress</c> works only through\n        ///   <c>Write()</c>.  A <c>GZipStream</c> with\n        ///   <c>CompressionMode.Decompress</c> works only through <c>Read()</c>.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///   This example shows how to use a GZipStream to compress data.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(outputFile))\n        ///     {\n        ///         using (Stream compressor = new GZipStream(raw, CompressionMode.Compress))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Dim outputFile As String = (fileToCompress &amp; \".compressed\")\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(outputFile)\n        ///     Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress)\n        ///         Dim buffer As Byte() = New Byte(4096) {}\n        ///         Dim n As Integer = -1\n        ///         Do While (n &lt;&gt; 0)\n        ///             If (n &gt; 0) Then\n        ///                 compressor.Write(buffer, 0, n)\n        ///             End If\n        ///             n = input.Read(buffer, 0, buffer.Length)\n        ///         Loop\n        ///     End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <example>\n        /// This example shows how to use a GZipStream to uncompress a file.\n        /// <code>\n        /// private void GunZipFile(string filename)\n        /// {\n        ///     if (!filename.EndsWith(\".gz))\n        ///         throw new ArgumentException(\"filename\");\n        ///     var DecompressedFile = filename.Substring(0,filename.Length-3);\n        ///     byte[] working = new byte[WORKING_BUFFER_SIZE];\n        ///     int n= 1;\n        ///     using (System.IO.Stream input = System.IO.File.OpenRead(filename))\n        ///     {\n        ///         using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true))\n        ///         {\n        ///             using (var output = System.IO.File.Create(DecompressedFile))\n        ///             {\n        ///                 while (n !=0)\n        ///                 {\n        ///                     n= decompressor.Read(working, 0, working.Length);\n        ///                     if (n > 0)\n        ///                     {\n        ///                         output.Write(working, 0, n);\n        ///                     }\n        ///                 }\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Private Sub GunZipFile(ByVal filename as String)\n        ///     If Not (filename.EndsWith(\".gz)) Then\n        ///         Throw New ArgumentException(\"filename\")\n        ///     End If\n        ///     Dim DecompressedFile as String = filename.Substring(0,filename.Length-3)\n        ///     Dim working(WORKING_BUFFER_SIZE) as Byte\n        ///     Dim n As Integer = 1\n        ///     Using input As Stream = File.OpenRead(filename)\n        ///         Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True)\n        ///             Using output As Stream = File.Create(UncompressedFile)\n        ///                 Do\n        ///                     n= decompressor.Read(working, 0, working.Length)\n        ///                     If n > 0 Then\n        ///                         output.Write(working, 0, n)\n        ///                     End IF\n        ///                 Loop While (n  > 0)\n        ///             End Using\n        ///         End Using\n        ///     End Using\n        /// End Sub\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the GZipStream will compress or decompress.</param>\n        public GZipStream(Stream stream, CompressionMode mode)\n            : this(stream, mode, CompressionLevel.Default, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c> and\n        ///   the specified <c>CompressionLevel</c>.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   The <c>CompressionMode</c> (Compress or Decompress) also establishes the\n        ///   \"direction\" of the stream.  A <c>GZipStream</c> with\n        ///   <c>CompressionMode.Compress</c> works only through <c>Write()</c>.  A\n        ///   <c>GZipStream</c> with <c>CompressionMode.Decompress</c> works only\n        ///   through <c>Read()</c>.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        /// This example shows how to use a <c>GZipStream</c> to compress a file into a .gz file.\n        ///\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".gz\"))\n        ///     {\n        ///         using (Stream compressor = new GZipStream(raw,\n        ///                                                   CompressionMode.Compress,\n        ///                                                   CompressionLevel.BestCompression))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".gz\")\n        ///         Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream to be read or written while deflating or inflating.</param>\n        /// <param name=\"mode\">Indicates whether the <c>GZipStream</c> will compress or decompress.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level)\n            : this(stream, mode, level, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c>, and\n        ///   explicitly specify whether the stream should be left open after Deflation\n        ///   or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   memory stream that will be re-read after compressed data has been written\n        ///   to it.  Specify true for the <paramref name=\"leaveOpen\"/> parameter to leave\n        ///   the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   The <see cref=\"CompressionMode\"/> (Compress or Decompress) also\n        ///   establishes the \"direction\" of the stream.  A <c>GZipStream</c> with\n        ///   <c>CompressionMode.Compress</c> works only through <c>Write()</c>.  A <c>GZipStream</c>\n        ///   with <c>CompressionMode.Decompress</c> works only through <c>Read()</c>.\n        /// </para>\n        ///\n        /// <para>\n        ///   The <c>GZipStream</c> will use the default compression level. If you want\n        ///   to specify the compression level, see <see cref=\"GZipStream(Stream,\n        ///   CompressionMode, CompressionLevel, bool)\"/>.\n        /// </para>\n        ///\n        /// <para>\n        ///   See the other overloads of this constructor for example code.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"stream\">\n        ///   The stream which will be read or written. This is called the \"captive\"\n        ///   stream in other places in this documentation.\n        /// </param>\n        ///\n        /// <param name=\"mode\">Indicates whether the GZipStream will compress or decompress.\n        /// </param>\n        ///\n        /// <param name=\"leaveOpen\">\n        ///   true if the application would like the base stream to remain open after\n        ///   inflation/deflation.\n        /// </param>\n        public GZipStream(Stream stream, CompressionMode mode, bool leaveOpen)\n            : this(stream, mode, CompressionLevel.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>GZipStream</c> using the specified <c>CompressionMode</c> and the\n        ///   specified <c>CompressionLevel</c>, and explicitly specify whether the\n        ///   stream should be left open after Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   memory stream that will be re-read after compressed data has been written\n        ///   to it.  Specify true for the <paramref name=\"leaveOpen\"/> parameter to\n        ///   leave the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   As noted in the class documentation, the <c>CompressionMode</c> (Compress\n        ///   or Decompress) also establishes the \"direction\" of the stream.  A\n        ///   <c>GZipStream</c> with <c>CompressionMode.Compress</c> works only through\n        ///   <c>Write()</c>.  A <c>GZipStream</c> with <c>CompressionMode.Decompress</c> works only\n        ///   through <c>Read()</c>.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///   This example shows how to use a <c>GZipStream</c> to compress data.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(outputFile))\n        ///     {\n        ///         using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Dim outputFile As String = (fileToCompress &amp; \".compressed\")\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(outputFile)\n        ///     Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True)\n        ///         Dim buffer As Byte() = New Byte(4096) {}\n        ///         Dim n As Integer = -1\n        ///         Do While (n &lt;&gt; 0)\n        ///             If (n &gt; 0) Then\n        ///                 compressor.Write(buffer, 0, n)\n        ///             End If\n        ///             n = input.Read(buffer, 0, buffer.Length)\n        ///         Loop\n        ///     End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the GZipStream will compress or decompress.</param>\n        /// <param name=\"leaveOpen\">true if the application would like the stream to remain open after inflation/deflation.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen)\n        {\n            _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, leaveOpen);\n        }\n\n        #region Zlib properties\n\n        /// <summary>\n        /// This property sets the flush behavior on the stream.\n        /// </summary>\n        virtual public FlushType FlushMode\n        {\n            get { return (this._baseStream._flushMode); }\n            set {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                this._baseStream._flushMode = value;\n            }\n        }\n\n        /// <summary>\n        ///   The size of the working buffer for the compression codec.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The working buffer is used for all stream operations.  The default size is\n        ///   1024 bytes.  The minimum size is 128 bytes. You may get better performance\n        ///   with a larger buffer.  Then again, you might not.  You would have to test\n        ///   it.\n        /// </para>\n        ///\n        /// <para>\n        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the\n        ///   stream. If you try to set it afterwards, it will throw.\n        /// </para>\n        /// </remarks>\n        public int BufferSize\n        {\n            get\n            {\n                return this._baseStream._bufferSize;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                if (this._baseStream._workingBuffer != null)\n                    throw new ZlibException(\"The working buffer is already set.\");\n                if (value < ZlibConstants.WorkingBufferSizeMin)\n                    throw new ZlibException(String.Format(\"Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.\", value, ZlibConstants.WorkingBufferSizeMin));\n                this._baseStream._bufferSize = value;\n            }\n        }\n\n\n        /// <summary> Returns the total number of bytes input so far.</summary>\n        virtual public long TotalIn\n        {\n            get\n            {\n                return this._baseStream._z.TotalBytesIn;\n            }\n        }\n\n        /// <summary> Returns the total number of bytes output so far.</summary>\n        virtual public long TotalOut\n        {\n            get\n            {\n                return this._baseStream._z.TotalBytesOut;\n            }\n        }\n\n        #endregion\n\n        #region Stream methods\n\n        /// <summary>\n        ///   Dispose the stream.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This may or may not result in a <c>Close()</c> call on the captive\n        ///     stream.  See the constructors that have a <c>leaveOpen</c> parameter\n        ///     for more information.\n        ///   </para>\n        ///   <para>\n        ///     This method may be invoked in two distinct scenarios.  If disposing\n        ///     == true, the method has been called directly or indirectly by a\n        ///     user's code, for example via the public Dispose() method. In this\n        ///     case, both managed and unmanaged resources can be referenced and\n        ///     disposed.  If disposing == false, the method has been called by the\n        ///     runtime from inside the object finalizer and this method should not\n        ///     reference other objects; in that case only unmanaged resources must\n        ///     be referenced or disposed.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"disposing\">\n        ///   indicates whether the Dispose method was invoked by user code.\n        /// </param>\n        protected override void Dispose(bool disposing)\n        {\n            try\n            {\n                if (!_disposed)\n                {\n                    if (disposing && (this._baseStream != null))\n                    {\n                        this._baseStream.Close();\n                        this._Crc32 = _baseStream.Crc32;\n                    }\n                    _disposed = true;\n                }\n            }\n            finally\n            {\n                base.Dispose(disposing);\n            }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be read.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports reading.\n        /// </remarks>\n        public override bool CanRead\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                return _baseStream._stream.CanRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports Seek operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be written.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports writing.\n        /// </remarks>\n        public override bool CanWrite\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n                return _baseStream._stream.CanWrite;\n            }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n            _baseStream.Flush();\n        }\n\n        /// <summary>\n        /// Reading this property always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        public override long Length\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        ///   The position of the stream pointer.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Setting this property always throws a <see\n        ///   cref=\"NotImplementedException\"/>. Reading will return the total bytes\n        ///   written out, if used in writing, or the total bytes read in, if used in\n        ///   reading.  The count may refer to compressed bytes or uncompressed bytes,\n        ///   depending on how you've used the stream.\n        /// </remarks>\n        public override long Position\n        {\n            get\n            {\n                if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Writer)\n                    return this._baseStream._z.TotalBytesOut + _headerByteCount;\n                if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Reader)\n                    return this._baseStream._z.TotalBytesIn + this._baseStream._gzipHeaderByteCount;\n                return 0;\n            }\n\n            set { throw new NotImplementedException(); }\n        }\n\n        /// <summary>\n        ///   Read and decompress data from the source stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   With a <c>GZipStream</c>, decompression is done through reading.\n        /// </remarks>\n        ///\n        /// <example>\n        /// <code>\n        /// byte[] working = new byte[WORKING_BUFFER_SIZE];\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile))\n        /// {\n        ///     using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true))\n        ///     {\n        ///         using (var output = System.IO.File.Create(_DecompressedFile))\n        ///         {\n        ///             int n;\n        ///             while ((n= decompressor.Read(working, 0, working.Length)) !=0)\n        ///             {\n        ///                 output.Write(working, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// </example>\n        /// <param name=\"buffer\">The buffer into which the decompressed data should be placed.</param>\n        /// <param name=\"offset\">the offset within that data array to put the first byte read.</param>\n        /// <param name=\"count\">the number of bytes to read.</param>\n        /// <returns>the number of bytes actually read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n            int n = _baseStream.Read(buffer, offset, count);\n\n            // Console.WriteLine(\"GZipStream::Read(buffer, off({0}), c({1}) = {2}\", offset, count, n);\n            // Console.WriteLine( Util.FormatByteArray(buffer, offset, n) );\n\n            if (!_firstReadDone)\n            {\n                _firstReadDone = true;\n                FileName = _baseStream._GzipFileName;\n                Comment = _baseStream._GzipComment;\n            }\n            return n;\n        }\n\n\n\n        /// <summary>\n        ///   Calling this method always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        /// <param name=\"offset\">irrelevant; it will always throw!</param>\n        /// <param name=\"origin\">irrelevant; it will always throw!</param>\n        /// <returns>irrelevant!</returns>\n        public override long Seek(long offset, SeekOrigin origin)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        ///   Calling this method always throws a <see cref=\"NotImplementedException\"/>.\n        /// </summary>\n        /// <param name=\"value\">irrelevant; this method will always throw!</param>\n        public override void SetLength(long value)\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        ///   Write data to the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   If you wish to use the <c>GZipStream</c> to compress data while writing,\n        ///   you can create a <c>GZipStream</c> with <c>CompressionMode.Compress</c>, and a\n        ///   writable output stream.  Then call <c>Write()</c> on that <c>GZipStream</c>,\n        ///   providing uncompressed data as input.  The data sent to the output stream\n        ///   will be the compressed form of the data written.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>GZipStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but not\n        ///   both. Writing implies compression.  Reading implies decompression.\n        /// </para>\n        ///\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer holding data to write to the stream.</param>\n        /// <param name=\"offset\">the offset within that data array to find the first byte to write.</param>\n        /// <param name=\"count\">the number of bytes to write.</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            if (_disposed) throw new ObjectDisposedException(\"GZipStream\");\n            if (_baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Undefined)\n            {\n                //Console.WriteLine(\"GZipStream: First write\");\n                if (_baseStream._wantCompress)\n                {\n                    // first write in compression, therefore, emit the GZIP header\n                    _headerByteCount = EmitHeader();\n                }\n                else\n                {\n                    throw new InvalidOperationException();\n                }\n            }\n\n            _baseStream.Write(buffer, offset, count);\n        }\n        #endregion\n\n\n        internal static readonly System.DateTime _unixEpoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);\n#if SILVERLIGHT || NETCF\n        internal static readonly System.Text.Encoding iso8859dash1 = new Ionic.Encoding.Iso8859Dash1Encoding();\n#else\n        internal static readonly System.Text.Encoding iso8859dash1 = System.Text.Encoding.GetEncoding(\"iso-8859-1\");\n#endif\n\n\n        private int EmitHeader()\n        {\n            byte[] commentBytes = (Comment == null) ? null : iso8859dash1.GetBytes(Comment);\n            byte[] filenameBytes = (FileName == null) ? null : iso8859dash1.GetBytes(FileName);\n\n            int cbLength = (Comment == null) ? 0 : commentBytes.Length + 1;\n            int fnLength = (FileName == null) ? 0 : filenameBytes.Length + 1;\n\n            int bufferLength = 10 + cbLength + fnLength;\n            byte[] header = new byte[bufferLength];\n            int i = 0;\n            // ID\n            header[i++] = 0x1F;\n            header[i++] = 0x8B;\n\n            // compression method\n            header[i++] = 8;\n            byte flag = 0;\n            if (Comment != null)\n                flag ^= 0x10;\n            if (FileName != null)\n                flag ^= 0x8;\n\n            // flag\n            header[i++] = flag;\n\n            // mtime\n            if (!LastModified.HasValue) LastModified = DateTime.Now;\n            System.TimeSpan delta = LastModified.Value - _unixEpoch;\n            Int32 timet = (Int32)delta.TotalSeconds;\n            Array.Copy(BitConverter.GetBytes(timet), 0, header, i, 4);\n            i += 4;\n\n            // xflg\n            header[i++] = 0;    // this field is totally useless\n            // OS\n            header[i++] = 0xFF; // 0xFF == unspecified\n\n            // extra field length - only if FEXTRA is set, which it is not.\n            //header[i++]= 0;\n            //header[i++]= 0;\n\n            // filename\n            if (fnLength != 0)\n            {\n                Array.Copy(filenameBytes, 0, header, i, fnLength - 1);\n                i += fnLength - 1;\n                header[i++] = 0; // terminate\n            }\n\n            // comment\n            if (cbLength != 0)\n            {\n                Array.Copy(commentBytes, 0, header, i, cbLength - 1);\n                i += cbLength - 1;\n                header[i++] = 0; // terminate\n            }\n\n            _baseStream._stream.Write(header, 0, header.Length);\n\n            return header.Length; // bytes written\n        }\n\n\n\n        /// <summary>\n        ///   Compress a string into a byte array using GZip.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"GZipStream.UncompressString(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"GZipStream.UncompressString(byte[])\"/>\n        /// <seealso cref=\"GZipStream.CompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"s\">\n        ///   A string to compress. The string will first be encoded\n        ///   using UTF8, then compressed.\n        /// </param>\n        ///\n        /// <returns>The string in compressed form</returns>\n        public static byte[] CompressString(String s)\n        {\n            using (var ms = new MemoryStream())\n            {\n                System.IO.Stream compressor =\n                    new GZipStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n                ZlibBaseStream.CompressString(s, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Compress a byte array into a new byte array using GZip.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"GZipStream.UncompressBuffer(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"GZipStream.CompressString(string)\"/>\n        /// <seealso cref=\"GZipStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"b\">\n        ///   A buffer to compress.\n        /// </param>\n        ///\n        /// <returns>The data in compressed form</returns>\n        public static byte[] CompressBuffer(byte[] b)\n        {\n            using (var ms = new MemoryStream())\n            {\n                System.IO.Stream compressor =\n                    new GZipStream( ms, CompressionMode.Compress, CompressionLevel.BestCompression );\n\n                ZlibBaseStream.CompressBuffer(b, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a GZip'ed byte array into a single string.\n        /// </summary>\n        ///\n        /// <seealso cref=\"GZipStream.CompressString(String)\"/>\n        /// <seealso cref=\"GZipStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing GZIP-compressed data.\n        /// </param>\n        ///\n        /// <returns>The uncompressed string</returns>\n        public static String UncompressString(byte[] compressed)\n        {\n            using (var input = new MemoryStream(compressed))\n            {\n                Stream decompressor = new GZipStream(input, CompressionMode.Decompress);\n                return ZlibBaseStream.UncompressString(compressed, decompressor);\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a GZip'ed byte array into a byte array.\n        /// </summary>\n        ///\n        /// <seealso cref=\"GZipStream.CompressBuffer(byte[])\"/>\n        /// <seealso cref=\"GZipStream.UncompressString(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing data that has been compressed with GZip.\n        /// </param>\n        ///\n        /// <returns>The data in uncompressed form</returns>\n        public static byte[] UncompressBuffer(byte[] compressed)\n        {\n            using (var input = new System.IO.MemoryStream(compressed))\n            {\n                System.IO.Stream decompressor =\n                    new GZipStream( input, CompressionMode.Decompress );\n\n                return ZlibBaseStream.UncompressBuffer(compressed, decompressor);\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/InfTree.cs",
    "content": "// Inftree.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.  \n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License. \n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs): \n// Time-stamp: <2009-October-28 12:43:54>\n//\n// ------------------------------------------------------------------\n//\n// This module defines classes used in  decompression. This code is derived\n// from the jzlib implementation of zlib. In keeping with the license for jzlib, \n// the copyright to that code is below.\n//\n// ------------------------------------------------------------------\n// \n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// \n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n// \n// 2. Redistributions in binary form must reproduce the above copyright \n// notice, this list of conditions and the following disclaimer in \n// the documentation and/or other materials provided with the distribution.\n// \n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// \n// -----------------------------------------------------------------------\n//\n// This program is based on zlib-1.1.3; credit to authors\n// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n// and contributors of zlib.\n//\n// -----------------------------------------------------------------------\n\n\n\nusing System;\nnamespace Ionic.Zlib\n{\n        \n        sealed class InfTree\n        {\n                \n                private const int MANY = 1440;\n                \n                private const int Z_OK = 0;\n                private const int Z_STREAM_END = 1;\n                private const int Z_NEED_DICT = 2;\n                private const int Z_ERRNO = - 1;\n                private const int Z_STREAM_ERROR = - 2;\n                private const int Z_DATA_ERROR = - 3;\n                private const int Z_MEM_ERROR = - 4;\n                private const int Z_BUF_ERROR = - 5;\n                private const int Z_VERSION_ERROR = - 6;\n                \n                internal const int fixed_bl = 9;\n                internal const int fixed_bd = 5;\n                \n                //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_tl'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n                internal static readonly int[] fixed_tl = new int[]{96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, \n                        0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, \n                        14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255};\n                //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_td'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n                internal static readonly int[] fixed_td = new int[]{80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577};\n                \n                // Tables for deflate from PKZIP's appnote.txt.\n                //UPGRADE_NOTE: Final was removed from the declaration of 'cplens'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n                internal static readonly int[] cplens = new int[]{3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};\n                \n                // see note #13 above about 258\n                //UPGRADE_NOTE: Final was removed from the declaration of 'cplext'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n                internal static readonly int[] cplext = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112};\n                \n                //UPGRADE_NOTE: Final was removed from the declaration of 'cpdist'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n                internal static readonly int[] cpdist = new int[]{1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};\n                \n                //UPGRADE_NOTE: Final was removed from the declaration of 'cpdext'. \"ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'\"\n                internal static readonly int[] cpdext = new int[]{0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13};\n                \n                // If BMAX needs to be larger than 16, then h and x[] should be uLong.\n                internal const int BMAX = 15; // maximum bit length of any code\n                \n                internal int[] hn = null; // hufts used in space\n                internal int[] v = null; // work area for huft_build \n                internal int[] c = null; // bit length count table\n                internal int[] r = null; // table entry for structure assignment\n                internal int[] u = null; // table stack\n                internal int[] x = null; // bit offsets, then code stack\n                \n                private int huft_build(int[] b, int bindex, int n, int s, int[] d, int[] e, int[] t, int[] m, int[] hp, int[] hn, int[] v)\n                {\n                        // Given a list of code lengths and a maximum table size, make a set of\n                        // tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR\n                        // if the given code set is incomplete (the tables are still built in this\n                        // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of\n                        // lengths), or Z_MEM_ERROR if not enough memory.\n                        \n                        int a; // counter for codes of length k\n                        int f; // i repeats in table every f entries\n                        int g; // maximum code length\n                        int h; // table level\n                        int i; // counter, current code\n                        int j; // counter\n                        int k; // number of bits in current code\n                        int l; // bits per table (returned in m)\n                        int mask; // (1 << w) - 1, to avoid cc -O bug on HP\n                        int p; // pointer into c[], b[], or v[]\n                        int q; // points to current table\n                        int w; // bits before this table == (l * h)\n                        int xp; // pointer into x\n                        int y; // number of dummy codes added\n                        int z; // number of entries in current table\n                        \n                        // Generate counts for each bit length\n                        \n                        p = 0; i = n;\n                        do \n                        {\n                                c[b[bindex + p]]++; p++; i--; // assume all entries <= BMAX\n                        }\n                        while (i != 0);\n                        \n                        if (c[0] == n)\n                        {\n                                // null input--all zero length codes\n                                t[0] = - 1;\n                                m[0] = 0;\n                                return Z_OK;\n                        }\n                        \n                        // Find minimum and maximum length, bound *m by those\n                        l = m[0];\n                        for (j = 1; j <= BMAX; j++)\n                                if (c[j] != 0)\n                                        break;\n                        k = j; // minimum code length\n                        if (l < j)\n                        {\n                                l = j;\n                        }\n                        for (i = BMAX; i != 0; i--)\n                        {\n                                if (c[i] != 0)\n                                        break;\n                        }\n                        g = i; // maximum code length\n                        if (l > i)\n                        {\n                                l = i;\n                        }\n                        m[0] = l;\n                        \n                        // Adjust last length count to fill out codes, if needed\n                        for (y = 1 << j; j < i; j++, y <<= 1)\n                        {\n                                if ((y -= c[j]) < 0)\n                                {\n                                        return Z_DATA_ERROR;\n                                }\n                        }\n                        if ((y -= c[i]) < 0)\n                        {\n                                return Z_DATA_ERROR;\n                        }\n                        c[i] += y;\n                        \n                        // Generate starting offsets into the value table for each length\n                        x[1] = j = 0;\n                        p = 1; xp = 2;\n                        while (--i != 0)\n                        {\n                                // note that i == g from above\n                                x[xp] = (j += c[p]);\n                                xp++;\n                                p++;\n                        }\n                        \n                        // Make a table of values in order of bit lengths\n                        i = 0; p = 0;\n                        do \n                        {\n                                if ((j = b[bindex + p]) != 0)\n                                {\n                                        v[x[j]++] = i;\n                                }\n                                p++;\n                        }\n                        while (++i < n);\n                        n = x[g]; // set n to length of v\n                        \n                        // Generate the Huffman codes and for each, make the table entries\n                        x[0] = i = 0; // first Huffman code is zero\n                        p = 0; // grab values in bit order\n                        h = - 1; // no tables yet--level -1\n                        w = - l; // bits decoded == (l * h)\n                        u[0] = 0; // just to keep compilers happy\n                        q = 0; // ditto\n                        z = 0; // ditto\n                        \n                        // go through the bit lengths (k already is bits in shortest code)\n                        for (; k <= g; k++)\n                        {\n                                a = c[k];\n                                while (a-- != 0)\n                                {\n                                        // here i is the Huffman code of length k bits for value *p\n                                        // make tables up to required level\n                                        while (k > w + l)\n                                        {\n                                                h++;\n                                                w += l; // previous table always l bits\n                                                // compute minimum size table less than or equal to l bits\n                                                z = g - w;\n                                                z = (z > l)?l:z; // table size upper limit\n                                                if ((f = 1 << (j = k - w)) > a + 1)\n                                                {\n                                                        // try a k-w bit table\n                                                        // too few codes for k-w bit table\n                                                        f -= (a + 1); // deduct codes from patterns left\n                                                        xp = k;\n                                                        if (j < z)\n                                                        {\n                                                                while (++j < z)\n                                                                {\n                                                                        // try smaller tables up to z bits\n                                                                        if ((f <<= 1) <= c[++xp])\n                                                                                break; // enough codes to use up j bits\n                                                                        f -= c[xp]; // else deduct codes from patterns\n                                                                }\n                                                        }\n                                                }\n                                                z = 1 << j; // table entries for j-bit table\n                                                \n                                                // allocate new table\n                                                if (hn[0] + z > MANY)\n                                                {\n                                                        // (note: doesn't matter for fixed)\n                                                        return Z_DATA_ERROR; // overflow of MANY\n                                                }\n                                                u[h] = q = hn[0]; // DEBUG\n                                                hn[0] += z;\n                                                \n                                                // connect to last table, if there is one\n                                                if (h != 0)\n                                                {\n                                                        x[h] = i; // save pattern for backing up\n                                                        r[0] = (sbyte) j; // bits in this table\n                                                        r[1] = (sbyte) l; // bits to dump before this table\n                                                        j = SharedUtils.URShift(i, (w - l));\n                                                        r[2] = (int) (q - u[h - 1] - j); // offset to this table\n                                                        Array.Copy(r, 0, hp, (u[h - 1] + j) * 3, 3); // connect to last table\n                                                }\n                                                else\n                                                {\n                                                        t[0] = q; // first table is returned result\n                                                }\n                                        }\n                                        \n                                        // set up table entry in r\n                                        r[1] = (sbyte) (k - w);\n                                        if (p >= n)\n                                        {\n                                                r[0] = 128 + 64; // out of values--invalid code\n                                        }\n                                        else if (v[p] < s)\n                                        {\n                                                r[0] = (sbyte) (v[p] < 256?0:32 + 64); // 256 is end-of-block\n                                                r[2] = v[p++]; // simple code is just the value\n                                        }\n                                        else\n                                        {\n                                                r[0] = (sbyte) (e[v[p] - s] + 16 + 64); // non-simple--look up in lists\n                                                r[2] = d[v[p++] - s];\n                                        }\n                                        \n                                        // fill code-like entries with r\n                                        f = 1 << (k - w);\n                                        for (j = SharedUtils.URShift(i, w); j < z; j += f)\n                                        {\n                                                Array.Copy(r, 0, hp, (q + j) * 3, 3);\n                                        }\n                                        \n                                        // backwards increment the k-bit code i\n                                        for (j = 1 << (k - 1); (i & j) != 0; j = SharedUtils.URShift(j, 1))\n                                        {\n                                                i ^= j;\n                                        }\n                                        i ^= j;\n                                        \n                                        // backup over finished tables\n                                        mask = (1 << w) - 1; // needed on HP, cc -O bug\n                                        while ((i & mask) != x[h])\n                                        {\n                                                h--; // don't need to update q\n                                                w -= l;\n                                                mask = (1 << w) - 1;\n                                        }\n                                }\n                        }\n                        // Return Z_BUF_ERROR if we were given an incomplete table\n                        return y != 0 && g != 1?Z_BUF_ERROR:Z_OK;\n                }\n                \n                internal int inflate_trees_bits(int[] c, int[] bb, int[] tb, int[] hp, ZlibCodec z)\n                {\n                        int result;\n                        initWorkArea(19);\n                        hn[0] = 0;\n                        result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v);\n                        \n                        if (result == Z_DATA_ERROR)\n                        {\n                                z.Message = \"oversubscribed dynamic bit lengths tree\";\n                        }\n                        else if (result == Z_BUF_ERROR || bb[0] == 0)\n                        {\n                                z.Message = \"incomplete dynamic bit lengths tree\";\n                                result = Z_DATA_ERROR;\n                        }\n                        return result;\n                }\n                \n                internal int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int[] bd, int[] tl, int[] td, int[] hp, ZlibCodec z)\n                {\n                        int result;\n                        \n                        // build literal/length tree\n                        initWorkArea(288);\n                        hn[0] = 0;\n                        result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v);\n                        if (result != Z_OK || bl[0] == 0)\n                        {\n                                if (result == Z_DATA_ERROR)\n                                {\n                                        z.Message = \"oversubscribed literal/length tree\";\n                                }\n                                else if (result != Z_MEM_ERROR)\n                                {\n                                        z.Message = \"incomplete literal/length tree\";\n                                        result = Z_DATA_ERROR;\n                                }\n                                return result;\n                        }\n                        \n                        // build distance tree\n                        initWorkArea(288);\n                        result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v);\n                        \n                        if (result != Z_OK || (bd[0] == 0 && nl > 257))\n                        {\n                                if (result == Z_DATA_ERROR)\n                                {\n                                        z.Message = \"oversubscribed distance tree\";\n                                }\n                                else if (result == Z_BUF_ERROR)\n                                {\n                                        z.Message = \"incomplete distance tree\";\n                                        result = Z_DATA_ERROR;\n                                }\n                                else if (result != Z_MEM_ERROR)\n                                {\n                                        z.Message = \"empty distance tree with lengths\";\n                                        result = Z_DATA_ERROR;\n                                }\n                                return result;\n                        }\n                        \n                        return Z_OK;\n                }\n                \n                internal static int inflate_trees_fixed(int[] bl, int[] bd, int[][] tl, int[][] td, ZlibCodec z)\n                {\n                        bl[0] = fixed_bl;\n                        bd[0] = fixed_bd;\n                        tl[0] = fixed_tl;\n                        td[0] = fixed_td;\n                        return Z_OK;\n                }\n                \n                private void  initWorkArea(int vsize)\n                {\n                        if (hn == null)\n                        {\n                                hn = new int[1];\n                                v = new int[vsize];\n                                c = new int[BMAX + 1];\n                                r = new int[3];\n                                u = new int[BMAX];\n                                x = new int[BMAX + 1];\n                        }\n                        else\n                        {\n                            if (v.Length < vsize)\n                            {\n                                v = new int[vsize];\n                            }\n                            Array.Clear(v,0,vsize);\n                            Array.Clear(c,0,BMAX+1);\n                            r[0]=0; r[1]=0; r[2]=0;\n                            //  for(int i=0; i<BMAX; i++){u[i]=0;}\n                            //Array.Copy(c, 0, u, 0, BMAX);\n                            Array.Clear(u,0,BMAX);\n                            //  for(int i=0; i<BMAX+1; i++){x[i]=0;}\n                            //Array.Copy(c, 0, x, 0, BMAX + 1);\n                            Array.Clear(x,0,BMAX+1);\n                        }\n                }\n        }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/Inflate.cs",
    "content": "// Inflate.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2010-January-08 18:32:12>\n//\n// ------------------------------------------------------------------\n//\n// This module defines classes for decompression. This code is derived\n// from the jzlib implementation of zlib, but significantly modified.\n// The object model is not the same, and many of the behaviors are\n// different.  Nonetheless, in keeping with the license for jzlib, I am\n// reproducing the copyright to that code here.\n//\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in\n// the documentation and/or other materials provided with the distribution.\n//\n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// -----------------------------------------------------------------------\n//\n// This program is based on zlib-1.1.3; credit to authors\n// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n// and contributors of zlib.\n//\n// -----------------------------------------------------------------------\n\n\nusing System;\nnamespace Ionic.Zlib\n{\n    sealed class InflateBlocks\n    {\n        private const int MANY = 1440;\n\n        // Table for deflate from PKZIP's appnote.txt.\n        internal static readonly int[] border = new int[]\n        { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };\n\n        private enum InflateBlockMode\n        {\n            TYPE   = 0,                     // get type bits (3, including end bit)\n            LENS   = 1,                     // get lengths for stored\n            STORED = 2,                     // processing stored block\n            TABLE  = 3,                     // get table lengths\n            BTREE  = 4,                     // get bit lengths tree for a dynamic block\n            DTREE  = 5,                     // get length, distance trees for a dynamic block\n            CODES  = 6,                     // processing fixed or dynamic block\n            DRY    = 7,                     // output remaining window bytes\n            DONE   = 8,                     // finished last block, done\n            BAD    = 9,                     // ot a data error--stuck here\n        }\n\n        private InflateBlockMode mode;                    // current inflate_block mode\n\n        internal int left;                                // if STORED, bytes left to copy\n\n        internal int table;                               // table lengths (14 bits)\n        internal int index;                               // index into blens (or border)\n        internal int[] blens;                             // bit lengths of codes\n        internal int[] bb = new int[1];                   // bit length tree depth\n        internal int[] tb = new int[1];                   // bit length decoding tree\n\n        internal InflateCodes codes = new InflateCodes(); // if CODES, current state\n\n        internal int last;                                // true if this block is the last block\n\n        internal ZlibCodec _codec;                        // pointer back to this zlib stream\n\n                                                          // mode independent information\n        internal int bitk;                                // bits in bit buffer\n        internal int bitb;                                // bit buffer\n        internal int[] hufts;                             // single malloc for tree space\n        internal byte[] window;                           // sliding window\n        internal int end;                                 // one byte after sliding window\n        internal int readAt;                              // window read pointer\n        internal int writeAt;                             // window write pointer\n        internal System.Object checkfn;                   // check function\n        internal uint check;                              // check on output\n\n        internal InfTree inftree = new InfTree();\n\n        internal InflateBlocks(ZlibCodec codec, System.Object checkfn, int w)\n        {\n            _codec = codec;\n            hufts = new int[MANY * 3];\n            window = new byte[w];\n            end = w;\n            this.checkfn = checkfn;\n            mode = InflateBlockMode.TYPE;\n            Reset();\n        }\n\n        internal uint Reset()\n        {\n            uint oldCheck = check;\n            mode = InflateBlockMode.TYPE;\n            bitk = 0;\n            bitb = 0;\n            readAt = writeAt = 0;\n\n            if (checkfn != null)\n                _codec._Adler32 = check = Adler.Adler32(0, null, 0, 0);\n            return oldCheck;\n        }\n\n\n        internal int Process(int r)\n        {\n            int t; // temporary storage\n            int b; // bit buffer\n            int k; // bits in bit buffer\n            int p; // input data pointer\n            int n; // bytes available there\n            int q; // output window write pointer\n            int m; // bytes to end of window or read pointer\n\n            // copy input/output information to locals (UPDATE macro restores)\n\n            p = _codec.NextIn;\n            n = _codec.AvailableBytesIn;\n            b = bitb;\n            k = bitk;\n\n            q = writeAt;\n            m = (int)(q < readAt ? readAt - q - 1 : end - q);\n\n\n            // process input based on current state\n            while (true)\n            {\n                switch (mode)\n                {\n                    case InflateBlockMode.TYPE:\n\n                        while (k < (3))\n                        {\n                            if (n != 0)\n                            {\n                                r = ZlibConstants.Z_OK;\n                            }\n                            else\n                            {\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n\n                            n--;\n                            b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n                        t = (int)(b & 7);\n                        last = t & 1;\n\n                        switch ((uint)t >> 1)\n                        {\n                            case 0:  // stored\n                                b >>= 3; k -= (3);\n                                t = k & 7; // go to byte boundary\n                                b >>= t; k -= t;\n                                mode = InflateBlockMode.LENS; // get length of stored block\n                                break;\n\n                            case 1:  // fixed\n                                int[] bl = new int[1];\n                                int[] bd = new int[1];\n                                int[][] tl = new int[1][];\n                                int[][] td = new int[1][];\n                                InfTree.inflate_trees_fixed(bl, bd, tl, td, _codec);\n                                codes.Init(bl[0], bd[0], tl[0], 0, td[0], 0);\n                                b >>= 3; k -= 3;\n                                mode = InflateBlockMode.CODES;\n                                break;\n\n                            case 2:  // dynamic\n                                b >>= 3; k -= 3;\n                                mode = InflateBlockMode.TABLE;\n                                break;\n\n                            case 3:  // illegal\n                                b >>= 3; k -= 3;\n                                mode = InflateBlockMode.BAD;\n                                _codec.Message = \"invalid block type\";\n                                r = ZlibConstants.Z_DATA_ERROR;\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                        }\n                        break;\n\n                    case InflateBlockMode.LENS:\n\n                        while (k < (32))\n                        {\n                            if (n != 0)\n                            {\n                                r = ZlibConstants.Z_OK;\n                            }\n                            else\n                            {\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n                            ;\n                            n--;\n                            b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        if ( ( ((~b)>>16) & 0xffff) != (b & 0xffff))\n                        {\n                            mode = InflateBlockMode.BAD;\n                            _codec.Message = \"invalid stored block lengths\";\n                            r = ZlibConstants.Z_DATA_ERROR;\n\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n                        left = (b & 0xffff);\n                        b = k = 0; // dump bits\n                        mode = left != 0 ? InflateBlockMode.STORED : (last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE);\n                        break;\n\n                    case InflateBlockMode.STORED:\n                        if (n == 0)\n                        {\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n\n                        if (m == 0)\n                        {\n                            if (q == end && readAt != 0)\n                            {\n                                q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                            }\n                            if (m == 0)\n                            {\n                                writeAt = q;\n                                r = Flush(r);\n                                q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                                if (q == end && readAt != 0)\n                                {\n                                    q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                                }\n                                if (m == 0)\n                                {\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n                            }\n                        }\n                        r = ZlibConstants.Z_OK;\n\n                        t = left;\n                        if (t > n)\n                            t = n;\n                        if (t > m)\n                            t = m;\n                        Array.Copy(_codec.InputBuffer, p, window, q, t);\n                        p += t; n -= t;\n                        q += t; m -= t;\n                        if ((left -= t) != 0)\n                            break;\n                        mode = last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE;\n                        break;\n\n                    case InflateBlockMode.TABLE:\n\n                        while (k < (14))\n                        {\n                            if (n != 0)\n                            {\n                                r = ZlibConstants.Z_OK;\n                            }\n                            else\n                            {\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n\n                            n--;\n                            b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        table = t = (b & 0x3fff);\n                        if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)\n                        {\n                            mode = InflateBlockMode.BAD;\n                            _codec.Message = \"too many length or distance symbols\";\n                            r = ZlibConstants.Z_DATA_ERROR;\n\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n                        t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);\n                        if (blens == null || blens.Length < t)\n                        {\n                            blens = new int[t];\n                        }\n                        else\n                        {\n                            Array.Clear(blens, 0, t);\n                            // for (int i = 0; i < t; i++)\n                            // {\n                            //     blens[i] = 0;\n                            // }\n                        }\n\n                        b >>= 14;\n                        k -= 14;\n\n\n                        index = 0;\n                        mode = InflateBlockMode.BTREE;\n                        goto case InflateBlockMode.BTREE;\n\n                    case InflateBlockMode.BTREE:\n                        while (index < 4 + (table >> 10))\n                        {\n                            while (k < (3))\n                            {\n                                if (n != 0)\n                                {\n                                    r = ZlibConstants.Z_OK;\n                                }\n                                else\n                                {\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n\n                                n--;\n                                b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                                k += 8;\n                            }\n\n                            blens[border[index++]] = b & 7;\n\n                            b >>= 3; k -= 3;\n                        }\n\n                        while (index < 19)\n                        {\n                            blens[border[index++]] = 0;\n                        }\n\n                        bb[0] = 7;\n                        t = inftree.inflate_trees_bits(blens, bb, tb, hufts, _codec);\n                        if (t != ZlibConstants.Z_OK)\n                        {\n                            r = t;\n                            if (r == ZlibConstants.Z_DATA_ERROR)\n                            {\n                                blens = null;\n                                mode = InflateBlockMode.BAD;\n                            }\n\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n\n                        index = 0;\n                        mode = InflateBlockMode.DTREE;\n                        goto case InflateBlockMode.DTREE;\n\n                    case InflateBlockMode.DTREE:\n                        while (true)\n                        {\n                            t = table;\n                            if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f)))\n                            {\n                                break;\n                            }\n\n                            int i, j, c;\n\n                            t = bb[0];\n\n                            while (k < t)\n                            {\n                                if (n != 0)\n                                {\n                                    r = ZlibConstants.Z_OK;\n                                }\n                                else\n                                {\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n\n                                n--;\n                                b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                                k += 8;\n                            }\n\n                            t = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 1];\n                            c = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 2];\n\n                            if (c < 16)\n                            {\n                                b >>= t; k -= t;\n                                blens[index++] = c;\n                            }\n                            else\n                            {\n                                // c == 16..18\n                                i = c == 18 ? 7 : c - 14;\n                                j = c == 18 ? 11 : 3;\n\n                                while (k < (t + i))\n                                {\n                                    if (n != 0)\n                                    {\n                                        r = ZlibConstants.Z_OK;\n                                    }\n                                    else\n                                    {\n                                        bitb = b; bitk = k;\n                                        _codec.AvailableBytesIn = n;\n                                        _codec.TotalBytesIn += p - _codec.NextIn;\n                                        _codec.NextIn = p;\n                                        writeAt = q;\n                                        return Flush(r);\n                                    }\n\n                                    n--;\n                                    b |= (_codec.InputBuffer[p++] & 0xff) << k;\n                                    k += 8;\n                                }\n\n                                b >>= t; k -= t;\n\n                                j += (b & InternalInflateConstants.InflateMask[i]);\n\n                                b >>= i; k -= i;\n\n                                i = index;\n                                t = table;\n                                if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1))\n                                {\n                                    blens = null;\n                                    mode = InflateBlockMode.BAD;\n                                    _codec.Message = \"invalid bit length repeat\";\n                                    r = ZlibConstants.Z_DATA_ERROR;\n\n                                    bitb = b; bitk = k;\n                                    _codec.AvailableBytesIn = n;\n                                    _codec.TotalBytesIn += p - _codec.NextIn;\n                                    _codec.NextIn = p;\n                                    writeAt = q;\n                                    return Flush(r);\n                                }\n\n                                c = (c == 16) ? blens[i-1] : 0;\n                                do\n                                {\n                                    blens[i++] = c;\n                                }\n                                while (--j != 0);\n                                index = i;\n                            }\n                        }\n\n                        tb[0] = -1;\n                        {\n                            int[] bl = new int[] { 9 };  // must be <= 9 for lookahead assumptions\n                            int[] bd = new int[] { 6 }; // must be <= 9 for lookahead assumptions\n                            int[] tl = new int[1];\n                            int[] td = new int[1];\n\n                            t = table;\n                            t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl, bd, tl, td, hufts, _codec);\n\n                            if (t != ZlibConstants.Z_OK)\n                            {\n                                if (t == ZlibConstants.Z_DATA_ERROR)\n                                {\n                                    blens = null;\n                                    mode = InflateBlockMode.BAD;\n                                }\n                                r = t;\n\n                                bitb = b; bitk = k;\n                                _codec.AvailableBytesIn = n;\n                                _codec.TotalBytesIn += p - _codec.NextIn;\n                                _codec.NextIn = p;\n                                writeAt = q;\n                                return Flush(r);\n                            }\n                            codes.Init(bl[0], bd[0], hufts, tl[0], hufts, td[0]);\n                        }\n                        mode = InflateBlockMode.CODES;\n                        goto case InflateBlockMode.CODES;\n\n                    case InflateBlockMode.CODES:\n                        bitb = b; bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n\n                        r = codes.Process(this, r);\n                        if (r != ZlibConstants.Z_STREAM_END)\n                        {\n                            return Flush(r);\n                        }\n\n                        r = ZlibConstants.Z_OK;\n                        p = _codec.NextIn;\n                        n = _codec.AvailableBytesIn;\n                        b = bitb;\n                        k = bitk;\n                        q = writeAt;\n                        m = (int)(q < readAt ? readAt - q - 1 : end - q);\n\n                        if (last == 0)\n                        {\n                            mode = InflateBlockMode.TYPE;\n                            break;\n                        }\n                        mode = InflateBlockMode.DRY;\n                        goto case InflateBlockMode.DRY;\n\n                    case InflateBlockMode.DRY:\n                        writeAt = q;\n                        r = Flush(r);\n                        q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q);\n                        if (readAt != writeAt)\n                        {\n                            bitb = b; bitk = k;\n                            _codec.AvailableBytesIn = n;\n                            _codec.TotalBytesIn += p - _codec.NextIn;\n                            _codec.NextIn = p;\n                            writeAt = q;\n                            return Flush(r);\n                        }\n                        mode = InflateBlockMode.DONE;\n                        goto case InflateBlockMode.DONE;\n\n                    case InflateBlockMode.DONE:\n                        r = ZlibConstants.Z_STREAM_END;\n                        bitb = b;\n                        bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n                        return Flush(r);\n\n                    case InflateBlockMode.BAD:\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        bitb = b; bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n                        return Flush(r);\n\n\n                    default:\n                        r = ZlibConstants.Z_STREAM_ERROR;\n\n                        bitb = b; bitk = k;\n                        _codec.AvailableBytesIn = n;\n                        _codec.TotalBytesIn += p - _codec.NextIn;\n                        _codec.NextIn = p;\n                        writeAt = q;\n                        return Flush(r);\n                }\n            }\n        }\n\n\n        internal void Free()\n        {\n            Reset();\n            window = null;\n            hufts = null;\n        }\n\n        internal void SetDictionary(byte[] d, int start, int n)\n        {\n            Array.Copy(d, start, window, 0, n);\n            readAt = writeAt = n;\n        }\n\n        // Returns true if inflate is currently at the end of a block generated\n        // by Z_SYNC_FLUSH or Z_FULL_FLUSH.\n        internal int SyncPoint()\n        {\n            return mode == InflateBlockMode.LENS ? 1 : 0;\n        }\n\n        // copy as much as possible from the sliding window to the output area\n        internal int Flush(int r)\n        {\n            int nBytes;\n\n            for (int pass=0; pass < 2; pass++)\n            {\n                if (pass==0)\n                {\n                    // compute number of bytes to copy as far as end of window\n                    nBytes = (int)((readAt <= writeAt ? writeAt : end) - readAt);\n                }\n                else\n                {\n                    // compute bytes to copy\n                    nBytes = writeAt - readAt;\n                }\n\n                // workitem 8870\n                if (nBytes == 0)\n                {\n                    if (r == ZlibConstants.Z_BUF_ERROR)\n                        r = ZlibConstants.Z_OK;\n                    return r;\n                }\n\n                if (nBytes > _codec.AvailableBytesOut)\n                    nBytes = _codec.AvailableBytesOut;\n\n                if (nBytes != 0 && r == ZlibConstants.Z_BUF_ERROR)\n                    r = ZlibConstants.Z_OK;\n\n                // update counters\n                _codec.AvailableBytesOut -= nBytes;\n                _codec.TotalBytesOut += nBytes;\n\n                // update check information\n                if (checkfn != null)\n                    _codec._Adler32 = check = Adler.Adler32(check, window, readAt, nBytes);\n\n                // copy as far as end of window\n                Array.Copy(window, readAt, _codec.OutputBuffer, _codec.NextOut, nBytes);\n                _codec.NextOut += nBytes;\n                readAt += nBytes;\n\n                // see if more to copy at beginning of window\n                if (readAt == end && pass == 0)\n                {\n                    // wrap pointers\n                    readAt = 0;\n                    if (writeAt == end)\n                        writeAt = 0;\n                }\n                else pass++;\n            }\n\n            // done\n            return r;\n        }\n    }\n\n\n    internal static class InternalInflateConstants\n    {\n        // And'ing with mask[n] masks the lower n bits\n        internal static readonly int[] InflateMask = new int[] {\n            0x00000000, 0x00000001, 0x00000003, 0x00000007,\n            0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,\n            0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,\n            0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff };\n    }\n\n\n    sealed class InflateCodes\n    {\n        // waiting for \"i:\"=input,\n        //             \"o:\"=output,\n        //             \"x:\"=nothing\n        private const int START   = 0; // x: set up for LEN\n        private const int LEN     = 1; // i: get length/literal/eob next\n        private const int LENEXT  = 2; // i: getting length extra (have base)\n        private const int DIST    = 3; // i: get distance next\n        private const int DISTEXT = 4; // i: getting distance extra\n        private const int COPY    = 5; // o: copying bytes in window, waiting for space\n        private const int LIT     = 6; // o: got literal, waiting for output space\n        private const int WASH    = 7; // o: got eob, possibly still output waiting\n        private const int END     = 8; // x: got eob and all data flushed\n        private const int BADCODE = 9; // x: got error\n\n        internal int mode;        // current inflate_codes mode\n\n        // mode dependent information\n        internal int len;\n\n        internal int[] tree;      // pointer into tree\n        internal int tree_index = 0;\n        internal int need;        // bits needed\n\n        internal int lit;\n\n        // if EXT or COPY, where and how much\n        internal int bitsToGet;   // bits to get for extra\n        internal int dist;        // distance back to copy from\n\n        internal byte lbits;      // ltree bits decoded per branch\n        internal byte dbits;      // dtree bits decoder per branch\n        internal int[] ltree;     // literal/length/eob tree\n        internal int ltree_index; // literal/length/eob tree\n        internal int[] dtree;     // distance tree\n        internal int dtree_index; // distance tree\n\n        internal InflateCodes()\n        {\n        }\n\n        internal void Init(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index)\n        {\n            mode = START;\n            lbits = (byte)bl;\n            dbits = (byte)bd;\n            ltree = tl;\n            ltree_index = tl_index;\n            dtree = td;\n            dtree_index = td_index;\n            tree = null;\n        }\n\n        internal int Process(InflateBlocks blocks, int r)\n        {\n            int j;      // temporary storage\n            int tindex; // temporary pointer\n            int e;      // extra bits or operation\n            int b = 0;  // bit buffer\n            int k = 0;  // bits in bit buffer\n            int p = 0;  // input data pointer\n            int n;      // bytes available there\n            int q;      // output window write pointer\n            int m;      // bytes to end of window or read pointer\n            int f;      // pointer to copy strings from\n\n            ZlibCodec z = blocks._codec;\n\n            // copy input/output information to locals (UPDATE macro restores)\n            p = z.NextIn;\n            n = z.AvailableBytesIn;\n            b = blocks.bitb;\n            k = blocks.bitk;\n            q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n            // process input and output based on current state\n            while (true)\n            {\n                switch (mode)\n                {\n                    // waiting for \"i:\"=input, \"o:\"=output, \"x:\"=nothing\n                    case START:  // x: set up for LEN\n                        if (m >= 258 && n >= 10)\n                        {\n                            blocks.bitb = b; blocks.bitk = k;\n                            z.AvailableBytesIn = n;\n                            z.TotalBytesIn += p - z.NextIn;\n                            z.NextIn = p;\n                            blocks.writeAt = q;\n                            r = InflateFast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, blocks, z);\n\n                            p = z.NextIn;\n                            n = z.AvailableBytesIn;\n                            b = blocks.bitb;\n                            k = blocks.bitk;\n                            q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                            if (r != ZlibConstants.Z_OK)\n                            {\n                                mode = (r == ZlibConstants.Z_STREAM_END) ? WASH : BADCODE;\n                                break;\n                            }\n                        }\n                        need = lbits;\n                        tree = ltree;\n                        tree_index = ltree_index;\n\n                        mode = LEN;\n                        goto case LEN;\n\n                    case LEN:  // i: get length/literal/eob next\n                        j = need;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n;\n                                z.TotalBytesIn += p - z.NextIn;\n                                z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--;\n                            b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3;\n\n                        b >>= (tree[tindex + 1]);\n                        k -= (tree[tindex + 1]);\n\n                        e = tree[tindex];\n\n                        if (e == 0)\n                        {\n                            // literal\n                            lit = tree[tindex + 2];\n                            mode = LIT;\n                            break;\n                        }\n                        if ((e & 16) != 0)\n                        {\n                            // length\n                            bitsToGet = e & 15;\n                            len = tree[tindex + 2];\n                            mode = LENEXT;\n                            break;\n                        }\n                        if ((e & 64) == 0)\n                        {\n                            // next table\n                            need = e;\n                            tree_index = tindex / 3 + tree[tindex + 2];\n                            break;\n                        }\n                        if ((e & 32) != 0)\n                        {\n                            // end of block\n                            mode = WASH;\n                            break;\n                        }\n                        mode = BADCODE; // invalid code\n                        z.Message = \"invalid literal/length code\";\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n;\n                        z.TotalBytesIn += p - z.NextIn;\n                        z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n\n                    case LENEXT:  // i: getting length extra (have base)\n                        j = bitsToGet;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--; b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        len += (b & InternalInflateConstants.InflateMask[j]);\n\n                        b >>= j;\n                        k -= j;\n\n                        need = dbits;\n                        tree = dtree;\n                        tree_index = dtree_index;\n                        mode = DIST;\n                        goto case DIST;\n\n                    case DIST:  // i: get distance next\n                        j = need;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--; b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3;\n\n                        b >>= tree[tindex + 1];\n                        k -= tree[tindex + 1];\n\n                        e = (tree[tindex]);\n                        if ((e & 0x10) != 0)\n                        {\n                            // distance\n                            bitsToGet = e & 15;\n                            dist = tree[tindex + 2];\n                            mode = DISTEXT;\n                            break;\n                        }\n                        if ((e & 64) == 0)\n                        {\n                            // next table\n                            need = e;\n                            tree_index = tindex / 3 + tree[tindex + 2];\n                            break;\n                        }\n                        mode = BADCODE; // invalid code\n                        z.Message = \"invalid distance code\";\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n\n                    case DISTEXT:  // i: getting distance extra\n                        j = bitsToGet;\n\n                        while (k < j)\n                        {\n                            if (n != 0)\n                                r = ZlibConstants.Z_OK;\n                            else\n                            {\n                                blocks.bitb = b; blocks.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                blocks.writeAt = q;\n                                return blocks.Flush(r);\n                            }\n                            n--; b |= (z.InputBuffer[p++] & 0xff) << k;\n                            k += 8;\n                        }\n\n                        dist += (b & InternalInflateConstants.InflateMask[j]);\n\n                        b >>= j;\n                        k -= j;\n\n                        mode = COPY;\n                        goto case COPY;\n\n                    case COPY:  // o: copying bytes in window, waiting for space\n                        f = q - dist;\n                        while (f < 0)\n                        {\n                            // modulo window size-\"while\" instead\n                            f += blocks.end; // of \"if\" handles invalid distances\n                        }\n                        while (len != 0)\n                        {\n                            if (m == 0)\n                            {\n                                if (q == blocks.end && blocks.readAt != 0)\n                                {\n                                    q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                                }\n                                if (m == 0)\n                                {\n                                    blocks.writeAt = q; r = blocks.Flush(r);\n                                    q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                                    if (q == blocks.end && blocks.readAt != 0)\n                                    {\n                                        q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                                    }\n\n                                    if (m == 0)\n                                    {\n                                        blocks.bitb = b; blocks.bitk = k;\n                                        z.AvailableBytesIn = n;\n                                        z.TotalBytesIn += p - z.NextIn;\n                                        z.NextIn = p;\n                                        blocks.writeAt = q;\n                                        return blocks.Flush(r);\n                                    }\n                                }\n                            }\n\n                            blocks.window[q++] = blocks.window[f++]; m--;\n\n                            if (f == blocks.end)\n                                f = 0;\n                            len--;\n                        }\n                        mode = START;\n                        break;\n\n                    case LIT:  // o: got literal, waiting for output space\n                        if (m == 0)\n                        {\n                            if (q == blocks.end && blocks.readAt != 0)\n                            {\n                                q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                            }\n                            if (m == 0)\n                            {\n                                blocks.writeAt = q; r = blocks.Flush(r);\n                                q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                                if (q == blocks.end && blocks.readAt != 0)\n                                {\n                                    q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n                                }\n                                if (m == 0)\n                                {\n                                    blocks.bitb = b; blocks.bitk = k;\n                                    z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                    blocks.writeAt = q;\n                                    return blocks.Flush(r);\n                                }\n                            }\n                        }\n                        r = ZlibConstants.Z_OK;\n\n                        blocks.window[q++] = (byte)lit; m--;\n\n                        mode = START;\n                        break;\n\n                    case WASH:  // o: got eob, possibly more output\n                        if (k > 7)\n                        {\n                            // return unused byte, if any\n                            k -= 8;\n                            n++;\n                            p--; // can always return one\n                        }\n\n                        blocks.writeAt = q; r = blocks.Flush(r);\n                        q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q;\n\n                        if (blocks.readAt != blocks.writeAt)\n                        {\n                            blocks.bitb = b; blocks.bitk = k;\n                            z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                            blocks.writeAt = q;\n                            return blocks.Flush(r);\n                        }\n                        mode = END;\n                        goto case END;\n\n                    case END:\n                        r = ZlibConstants.Z_STREAM_END;\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n                    case BADCODE:  // x: got error\n\n                        r = ZlibConstants.Z_DATA_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n\n                    default:\n                        r = ZlibConstants.Z_STREAM_ERROR;\n\n                        blocks.bitb = b; blocks.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        blocks.writeAt = q;\n                        return blocks.Flush(r);\n                }\n            }\n        }\n\n\n        // Called with number of bytes left to write in window at least 258\n        // (the maximum string length) and number of input bytes available\n        // at least ten.  The ten bytes are six bytes for the longest length/\n        // distance pair plus four bytes for overloading the bit buffer.\n\n        internal int InflateFast(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, InflateBlocks s, ZlibCodec z)\n        {\n            int t;        // temporary pointer\n            int[] tp;     // temporary pointer\n            int tp_index; // temporary pointer\n            int e;        // extra bits or operation\n            int b;        // bit buffer\n            int k;        // bits in bit buffer\n            int p;        // input data pointer\n            int n;        // bytes available there\n            int q;        // output window write pointer\n            int m;        // bytes to end of window or read pointer\n            int ml;       // mask for literal/length tree\n            int md;       // mask for distance tree\n            int c;        // bytes to copy\n            int d;        // distance back to copy from\n            int r;        // copy source pointer\n\n            int tp_index_t_3; // (tp_index+t)*3\n\n            // load input, output, bit values\n            p = z.NextIn; n = z.AvailableBytesIn; b = s.bitb; k = s.bitk;\n            q = s.writeAt; m = q < s.readAt ? s.readAt - q - 1 : s.end - q;\n\n            // initialize masks\n            ml = InternalInflateConstants.InflateMask[bl];\n            md = InternalInflateConstants.InflateMask[bd];\n\n            // do until not enough input or output space for fast loop\n            do\n            {\n                // assume called with m >= 258 && n >= 10\n                // get literal/length code\n                while (k < (20))\n                {\n                    // max bits for literal/length code\n                    n--;\n                    b |= (z.InputBuffer[p++] & 0xff) << k; k += 8;\n                }\n\n                t = b & ml;\n                tp = tl;\n                tp_index = tl_index;\n                tp_index_t_3 = (tp_index + t) * 3;\n                if ((e = tp[tp_index_t_3]) == 0)\n                {\n                    b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n\n                    s.window[q++] = (byte)tp[tp_index_t_3 + 2];\n                    m--;\n                    continue;\n                }\n                do\n                {\n\n                    b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n\n                    if ((e & 16) != 0)\n                    {\n                        e &= 15;\n                        c = tp[tp_index_t_3 + 2] + ((int)b & InternalInflateConstants.InflateMask[e]);\n\n                        b >>= e; k -= e;\n\n                        // decode distance base of block to copy\n                        while (k < 15)\n                        {\n                            // max bits for distance code\n                            n--;\n                            b |= (z.InputBuffer[p++] & 0xff) << k; k += 8;\n                        }\n\n                        t = b & md;\n                        tp = td;\n                        tp_index = td_index;\n                        tp_index_t_3 = (tp_index + t) * 3;\n                        e = tp[tp_index_t_3];\n\n                        do\n                        {\n\n                            b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n\n                            if ((e & 16) != 0)\n                            {\n                                // get extra bits to add to distance base\n                                e &= 15;\n                                while (k < e)\n                                {\n                                    // get extra bits (up to 13)\n                                    n--;\n                                    b |= (z.InputBuffer[p++] & 0xff) << k; k += 8;\n                                }\n\n                                d = tp[tp_index_t_3 + 2] + (b & InternalInflateConstants.InflateMask[e]);\n\n                                b >>= e; k -= e;\n\n                                // do the copy\n                                m -= c;\n                                if (q >= d)\n                                {\n                                    // offset before dest\n                                    //  just copy\n                                    r = q - d;\n                                    if (q - r > 0 && 2 > (q - r))\n                                    {\n                                        s.window[q++] = s.window[r++]; // minimum count is three,\n                                        s.window[q++] = s.window[r++]; // so unroll loop a little\n                                        c -= 2;\n                                    }\n                                    else\n                                    {\n                                        Array.Copy(s.window, r, s.window, q, 2);\n                                        q += 2; r += 2; c -= 2;\n                                    }\n                                }\n                                else\n                                {\n                                    // else offset after destination\n                                    r = q - d;\n                                    do\n                                    {\n                                        r += s.end; // force pointer in window\n                                    }\n                                    while (r < 0); // covers invalid distances\n                                    e = s.end - r;\n                                    if (c > e)\n                                    {\n                                        // if source crosses,\n                                        c -= e; // wrapped copy\n                                        if (q - r > 0 && e > (q - r))\n                                        {\n                                            do\n                                            {\n                                                s.window[q++] = s.window[r++];\n                                            }\n                                            while (--e != 0);\n                                        }\n                                        else\n                                        {\n                                            Array.Copy(s.window, r, s.window, q, e);\n                                            q += e; r += e; e = 0;\n                                        }\n                                        r = 0; // copy rest from start of window\n                                    }\n                                }\n\n                                // copy all or what's left\n                                if (q - r > 0 && c > (q - r))\n                                {\n                                    do\n                                    {\n                                        s.window[q++] = s.window[r++];\n                                    }\n                                    while (--c != 0);\n                                }\n                                else\n                                {\n                                    Array.Copy(s.window, r, s.window, q, c);\n                                    q += c; r += c; c = 0;\n                                }\n                                break;\n                            }\n                            else if ((e & 64) == 0)\n                            {\n                                t += tp[tp_index_t_3 + 2];\n                                t += (b & InternalInflateConstants.InflateMask[e]);\n                                tp_index_t_3 = (tp_index + t) * 3;\n                                e = tp[tp_index_t_3];\n                            }\n                            else\n                            {\n                                z.Message = \"invalid distance code\";\n\n                                c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n                                s.bitb = b; s.bitk = k;\n                                z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                                s.writeAt = q;\n\n                                return ZlibConstants.Z_DATA_ERROR;\n                            }\n                        }\n                        while (true);\n                        break;\n                    }\n\n                    if ((e & 64) == 0)\n                    {\n                        t += tp[tp_index_t_3 + 2];\n                        t += (b & InternalInflateConstants.InflateMask[e]);\n                        tp_index_t_3 = (tp_index + t) * 3;\n                        if ((e = tp[tp_index_t_3]) == 0)\n                        {\n                            b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]);\n                            s.window[q++] = (byte)tp[tp_index_t_3 + 2];\n                            m--;\n                            break;\n                        }\n                    }\n                    else if ((e & 32) != 0)\n                    {\n                        c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n                        s.bitb = b; s.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        s.writeAt = q;\n\n                        return ZlibConstants.Z_STREAM_END;\n                    }\n                    else\n                    {\n                        z.Message = \"invalid literal/length code\";\n\n                        c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n                        s.bitb = b; s.bitk = k;\n                        z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n                        s.writeAt = q;\n\n                        return ZlibConstants.Z_DATA_ERROR;\n                    }\n                }\n                while (true);\n            }\n            while (m >= 258 && n >= 10);\n\n            // not enough input or output--restore pointers and return\n            c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3);\n\n            s.bitb = b; s.bitk = k;\n            z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p;\n            s.writeAt = q;\n\n            return ZlibConstants.Z_OK;\n        }\n    }\n\n\n    internal sealed class InflateManager\n    {\n        // preset dictionary flag in zlib header\n        private const int PRESET_DICT = 0x20;\n\n        private const int Z_DEFLATED = 8;\n\n        private enum InflateManagerMode\n        {\n            METHOD = 0,  // waiting for method byte\n            FLAG   = 1,  // waiting for flag byte\n            DICT4  = 2,  // four dictionary check bytes to go\n            DICT3  = 3,  // three dictionary check bytes to go\n            DICT2  = 4,  // two dictionary check bytes to go\n            DICT1  = 5,  // one dictionary check byte to go\n            DICT0  = 6,  // waiting for inflateSetDictionary\n            BLOCKS = 7,  // decompressing blocks\n            CHECK4 = 8,  // four check bytes to go\n            CHECK3 = 9,  // three check bytes to go\n            CHECK2 = 10, // two check bytes to go\n            CHECK1 = 11, // one check byte to go\n            DONE   = 12, // finished check, done\n            BAD    = 13, // got an error--stay here\n        }\n\n        private InflateManagerMode mode; // current inflate mode\n        internal ZlibCodec _codec; // pointer back to this zlib stream\n\n        // mode dependent information\n        internal int method; // if FLAGS, method byte\n\n        // if CHECK, check values to compare\n        internal uint computedCheck; // computed check value\n        internal uint expectedCheck; // stream check value\n\n        // if BAD, inflateSync's marker bytes count\n        internal int marker;\n\n        // mode independent information\n        //internal int nowrap; // flag for no wrapper\n        private bool _handleRfc1950HeaderBytes = true;\n        internal bool HandleRfc1950HeaderBytes\n        {\n            get { return _handleRfc1950HeaderBytes; }\n            set { _handleRfc1950HeaderBytes = value; }\n        }\n        internal int wbits; // log2(window size)  (8..15, defaults to 15)\n\n        internal InflateBlocks blocks; // current inflate_blocks state\n\n        public InflateManager() { }\n\n        public InflateManager(bool expectRfc1950HeaderBytes)\n        {\n            _handleRfc1950HeaderBytes = expectRfc1950HeaderBytes;\n        }\n\n        internal int Reset()\n        {\n            _codec.TotalBytesIn = _codec.TotalBytesOut = 0;\n            _codec.Message = null;\n            mode = HandleRfc1950HeaderBytes ? InflateManagerMode.METHOD : InflateManagerMode.BLOCKS;\n            blocks.Reset();\n            return ZlibConstants.Z_OK;\n        }\n\n        internal int End()\n        {\n            if (blocks != null)\n                blocks.Free();\n            blocks = null;\n            return ZlibConstants.Z_OK;\n        }\n\n        internal int Initialize(ZlibCodec codec, int w)\n        {\n            _codec = codec;\n            _codec.Message = null;\n            blocks = null;\n\n            // handle undocumented nowrap option (no zlib header or check)\n            //nowrap = 0;\n            //if (w < 0)\n            //{\n            //    w = - w;\n            //    nowrap = 1;\n            //}\n\n            // set window size\n            if (w < 8 || w > 15)\n            {\n                End();\n                throw new ZlibException(\"Bad window size.\");\n\n                //return ZlibConstants.Z_STREAM_ERROR;\n            }\n            wbits = w;\n\n            blocks = new InflateBlocks(codec,\n                HandleRfc1950HeaderBytes ? this : null,\n                1 << w);\n\n            // reset state\n            Reset();\n            return ZlibConstants.Z_OK;\n        }\n\n\n        internal int Inflate(FlushType flush)\n        {\n            int b;\n\n            if (_codec.InputBuffer == null)\n                throw new ZlibException(\"InputBuffer is null. \");\n\n//             int f = (flush == FlushType.Finish)\n//                 ? ZlibConstants.Z_BUF_ERROR\n//                 : ZlibConstants.Z_OK;\n\n            // workitem 8870\n            int f = ZlibConstants.Z_OK;\n            int r = ZlibConstants.Z_BUF_ERROR;\n\n            while (true)\n            {\n                switch (mode)\n                {\n                    case InflateManagerMode.METHOD:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        if (((method = _codec.InputBuffer[_codec.NextIn++]) & 0xf) != Z_DEFLATED)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = String.Format(\"unknown compression method (0x{0:X2})\", method);\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n                        if ((method >> 4) + 8 > wbits)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = String.Format(\"invalid window size ({0})\", (method >> 4) + 8);\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n                        mode = InflateManagerMode.FLAG;\n                        break;\n\n\n                    case InflateManagerMode.FLAG:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        b = (_codec.InputBuffer[_codec.NextIn++]) & 0xff;\n\n                        if ((((method << 8) + b) % 31) != 0)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = \"incorrect header check\";\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n\n                        mode = ((b & PRESET_DICT) == 0)\n                            ? InflateManagerMode.BLOCKS\n                            : InflateManagerMode.DICT4;\n                        break;\n\n                    case InflateManagerMode.DICT4:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000);\n                        mode = InflateManagerMode.DICT3;\n                        break;\n\n                    case InflateManagerMode.DICT3:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000);\n                        mode = InflateManagerMode.DICT2;\n                        break;\n\n                    case InflateManagerMode.DICT2:\n\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00);\n                        mode = InflateManagerMode.DICT1;\n                        break;\n\n\n                    case InflateManagerMode.DICT1:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--; _codec.TotalBytesIn++;\n                        expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff);\n                        _codec._Adler32 = expectedCheck;\n                        mode = InflateManagerMode.DICT0;\n                        return ZlibConstants.Z_NEED_DICT;\n\n\n                    case InflateManagerMode.DICT0:\n                        mode = InflateManagerMode.BAD;\n                        _codec.Message = \"need dictionary\";\n                        marker = 0; // can try inflateSync\n                        return ZlibConstants.Z_STREAM_ERROR;\n\n\n                    case InflateManagerMode.BLOCKS:\n                        r = blocks.Process(r);\n                        if (r == ZlibConstants.Z_DATA_ERROR)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            marker = 0; // can try inflateSync\n                            break;\n                        }\n\n                        if (r == ZlibConstants.Z_OK) r = f;\n\n                        if (r != ZlibConstants.Z_STREAM_END)\n                            return r;\n\n                        r = f;\n                        computedCheck = blocks.Reset();\n                        if (!HandleRfc1950HeaderBytes)\n                        {\n                            mode = InflateManagerMode.DONE;\n                            return ZlibConstants.Z_STREAM_END;\n                        }\n                        mode = InflateManagerMode.CHECK4;\n                        break;\n\n                    case InflateManagerMode.CHECK4:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000);\n                        mode = InflateManagerMode.CHECK3;\n                        break;\n\n                    case InflateManagerMode.CHECK3:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--; _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000);\n                        mode = InflateManagerMode.CHECK2;\n                        break;\n\n                    case InflateManagerMode.CHECK2:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--;\n                        _codec.TotalBytesIn++;\n                        expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00);\n                        mode = InflateManagerMode.CHECK1;\n                        break;\n\n                    case InflateManagerMode.CHECK1:\n                        if (_codec.AvailableBytesIn == 0) return r;\n                        r = f;\n                        _codec.AvailableBytesIn--; _codec.TotalBytesIn++;\n                        expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff);\n                        if (computedCheck != expectedCheck)\n                        {\n                            mode = InflateManagerMode.BAD;\n                            _codec.Message = \"incorrect data check\";\n                            marker = 5; // can't try inflateSync\n                            break;\n                        }\n                        mode = InflateManagerMode.DONE;\n                        return ZlibConstants.Z_STREAM_END;\n\n                    case InflateManagerMode.DONE:\n                        return ZlibConstants.Z_STREAM_END;\n\n                    case InflateManagerMode.BAD:\n                        throw new ZlibException(String.Format(\"Bad state ({0})\", _codec.Message));\n\n                    default:\n                        throw new ZlibException(\"Stream error.\");\n\n                }\n            }\n        }\n\n\n\n        internal int SetDictionary(byte[] dictionary)\n        {\n            int index = 0;\n            int length = dictionary.Length;\n            if (mode != InflateManagerMode.DICT0)\n                throw new ZlibException(\"Stream error.\");\n\n            if (Adler.Adler32(1, dictionary, 0, dictionary.Length) != _codec._Adler32)\n            {\n                return ZlibConstants.Z_DATA_ERROR;\n            }\n\n            _codec._Adler32 = Adler.Adler32(0, null, 0, 0);\n\n            if (length >= (1 << wbits))\n            {\n                length = (1 << wbits) - 1;\n                index = dictionary.Length - length;\n            }\n            blocks.SetDictionary(dictionary, index, length);\n            mode = InflateManagerMode.BLOCKS;\n            return ZlibConstants.Z_OK;\n        }\n\n\n        private static readonly byte[] mark = new byte[] { 0, 0, 0xff, 0xff };\n\n        internal int Sync()\n        {\n            int n; // number of bytes to look at\n            int p; // pointer to bytes\n            int m; // number of marker bytes found in a row\n            long r, w; // temporaries to save total_in and total_out\n\n            // set up\n            if (mode != InflateManagerMode.BAD)\n            {\n                mode = InflateManagerMode.BAD;\n                marker = 0;\n            }\n            if ((n = _codec.AvailableBytesIn) == 0)\n                return ZlibConstants.Z_BUF_ERROR;\n            p = _codec.NextIn;\n            m = marker;\n\n            // search\n            while (n != 0 && m < 4)\n            {\n                if (_codec.InputBuffer[p] == mark[m])\n                {\n                    m++;\n                }\n                else if (_codec.InputBuffer[p] != 0)\n                {\n                    m = 0;\n                }\n                else\n                {\n                    m = 4 - m;\n                }\n                p++; n--;\n            }\n\n            // restore\n            _codec.TotalBytesIn += p - _codec.NextIn;\n            _codec.NextIn = p;\n            _codec.AvailableBytesIn = n;\n            marker = m;\n\n            // return no joy or set up to restart on a new block\n            if (m != 4)\n            {\n                return ZlibConstants.Z_DATA_ERROR;\n            }\n            r = _codec.TotalBytesIn;\n            w = _codec.TotalBytesOut;\n            Reset();\n            _codec.TotalBytesIn = r;\n            _codec.TotalBytesOut = w;\n            mode = InflateManagerMode.BLOCKS;\n            return ZlibConstants.Z_OK;\n        }\n\n\n        // Returns true if inflate is currently at the end of a block generated\n        // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP\n        // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH\n        // but removes the length bytes of the resulting empty stored block. When\n        // decompressing, PPP checks that at the end of input packet, inflate is\n        // waiting for these length bytes.\n        internal int SyncPoint(ZlibCodec z)\n        {\n            return blocks.SyncPoint();\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/Iso8859Dash1Encoding.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Ionic.Encoding\n{\n    /// <summary>\n    /// Provides a text encoder for the iso-8859-1 encoding, aka Latin1 encoding,\n    /// for platforms that do not support it, for example on Silverlight or some\n    /// Compact Framework platforms.\n    /// </summary>\n    public class Iso8859Dash1Encoding : System.Text.Encoding\n    {\n        /// <summary>\n        /// Gets the name registered with the\n        /// Internet Assigned Numbers Authority (IANA) for the current encoding.\n        /// </summary>\n        /// <returns>\n        /// Always returns \"iso-8859-1\".\n        /// </returns>\n        public override string WebName\n        {\n            get { return \"iso-8859-1\"; }\n        }\n\n        /// <summary>\n        /// Encodes a set of characters from a character array into\n        /// a byte array.\n        /// </summary>\n        /// <returns>\n        /// The actual number of bytes written into <paramref name=\"bytes\"/>.\n        /// </returns>\n        /// <param name=\"chars\">The character array containing the set of characters to encode.\n        /// </param><param name=\"start\">The index of the first character to encode.\n        /// </param><param name=\"count\">The number of characters to encode.\n        /// </param><param name=\"bytes\">The byte array to contain the resulting sequence of bytes.\n        /// </param><param name=\"byteIndex\">The index at which to start writing the resulting sequence of bytes.\n        /// </param>\n        public override int GetBytes(char[] chars, int start, int count, byte[] bytes, int byteIndex)\n        {\n            if (chars == null)\n                throw new ArgumentNullException(\"chars\", \"null array\");\n\n            if (bytes == null)\n                throw new ArgumentNullException(\"bytes\", \"null array\");\n\n            if (start < 0)\n                throw new ArgumentOutOfRangeException(\"start\");\n            if (count < 0)\n                throw new ArgumentOutOfRangeException(\"charCount\");\n\n            if ((chars.Length - start) < count)\n                throw new ArgumentOutOfRangeException(\"chars\");\n\n            if ((byteIndex < 0) || (byteIndex > bytes.Length))\n                throw new ArgumentOutOfRangeException(\"byteIndex\");\n\n            // iso-8859-1 is special in that it was adopted as the first page of\n            // UCS - ISO's Universal Coding Standard, described in ISO 10646,\n            // which is the same as Unicode. This means that a a Unicode\n            // character in the range of 0 to FF maps to the iso-8859-1 character\n            // with the same value. Because of that the encoding and decoding is\n            // trivial.\n            for (int i=0; i < count; i++)\n            {\n                char c = chars[start+i]; // get the unicode char\n\n                if (c >= '\\x00FF') // out of range?\n                    bytes[byteIndex+i] = (byte) '?';\n                else\n                    bytes[byteIndex+i] = (byte) c;\n            }\n            return count;\n        }\n\n\n        /// <summary>\n        /// Decodes a sequence of bytes from the specified byte array into the specified character array.\n        /// </summary>\n        /// <returns>\n        /// The actual number of characters written into <paramref name=\"chars\"/>.\n        /// </returns>\n        /// <param name=\"bytes\">The byte array containing the sequence of bytes to decode.\n        /// </param><param name=\"start\">The index of the first byte to decode.\n        /// </param><param name=\"count\">The number of bytes to decode.\n        /// </param><param name=\"chars\">The character array to contain the resulting set of characters.\n        /// </param><param name=\"charIndex\">The index at which to start writing the resulting set of characters.\n        /// </param>\n        public override int GetChars(byte[] bytes, int start, int count, char[] chars, int charIndex)\n        {\n            if (chars == null)\n                throw new ArgumentNullException(\"chars\", \"null array\");\n\n            if (bytes == null)\n                throw new ArgumentNullException(\"bytes\", \"null array\");\n\n            if (start < 0)\n                throw new ArgumentOutOfRangeException(\"start\");\n            if (count < 0)\n                throw new ArgumentOutOfRangeException(\"charCount\");\n\n            if ((bytes.Length - start) < count)\n                throw new ArgumentOutOfRangeException(\"bytes\");\n\n            if ((charIndex < 0) || (charIndex > chars.Length))\n                throw new ArgumentOutOfRangeException(\"charIndex\");\n\n            // In the range 00 to FF, the Unicode characters are the same as the\n            // iso-8859-1 characters; because of that, decoding is trivial.\n            for (int i = 0; i < count; i++)\n                chars[charIndex + i] = (char) bytes[i + start];\n\n            return count;\n        }\n\n\n        /// <summary>\n        /// Calculates the number of bytes produced by encoding a set of characters\n        /// from the specified character array.\n        /// </summary>\n        /// <returns>\n        /// The number of bytes produced by encoding the specified characters. This class\n        /// alwas returns the value of <paramref name=\"count\"/>.\n        /// </returns>\n        public override int GetByteCount(char[] chars, int index, int count)\n        {\n            return count;\n        }\n\n\n        /// <summary>\n        /// Calculates the number of characters produced by decoding a sequence\n        /// of bytes from the specified byte array.\n        /// </summary>\n        /// <returns>\n        /// The number of characters produced by decoding the specified sequence of bytes. This class\n        /// alwas returns the value of <paramref name=\"count\"/>.\n        /// </returns>\n        public override int GetCharCount(byte[] bytes, int index, int count)\n        {\n            return count;\n        }\n\n\n        /// <summary>\n        /// Calculates the maximum number of bytes produced by encoding the specified number of characters.\n        /// </summary>\n        /// <returns>\n        /// The maximum number of bytes produced by encoding the specified number of characters. This\n        /// class alwas returns the value of <paramref name=\"charCount\"/>.\n        /// </returns>\n        /// <param name=\"charCount\">The number of characters to encode.\n        /// </param>\n        public override int GetMaxByteCount(int charCount)\n        {\n            return charCount;\n        }\n\n        /// <summary>\n        /// Calculates the maximum number of characters produced by decoding the specified number of bytes.\n        /// </summary>\n        /// <returns>\n        /// The maximum number of characters produced by decoding the specified number of bytes. This class\n        /// alwas returns the value of <paramref name=\"byteCount\"/>.\n        /// </returns>\n        /// <param name=\"byteCount\">The number of bytes to decode.</param>\n        public override int GetMaxCharCount(int byteCount)\n        {\n            return byteCount;\n        }\n\n        /// <summary>\n        /// Gets the number of characters that are supported by this encoding.\n        /// This property returns a maximum value of 256, as the encoding class\n        /// only supports single byte encodings (1 byte == 256 possible values).\n        /// </summary>\n        public static int CharacterCount\n        {\n            get { return 256; }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/LICENSE.jzlib.txt",
    "content": "The ZLIB library, available as Ionic.Zlib.dll or as part of DotNetZip,\nis a ported-then-modified version of jzlib.  The following applies to jzlib:\n\nJZlib 0.0.* were released under the GNU LGPL license.  Later, we have switched\nover to a BSD-style license.\n\n------------------------------------------------------------------------------\nCopyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  1. Redistributions of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n\n  2. Redistributions in binary form must reproduce the above copyright\n     notice, this list of conditions and the following disclaimer in\n     the documentation and/or other materials provided with the distribution.\n\n  3. The names of the authors may not be used to endorse or promote products\n     derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\nINCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\nINC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\nOR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/License.zlib.txt",
    "content": "The ZLIB library, available as Ionic.Zlib.dll or as part of DotNetZip,\nis a ported-then-modified version of jzlib, which itself is based on\nzlib-1.1.3, the well-known C-language compression library.\n\nThe following notice applies to zlib:\n\n-----------------------------------------------------------------------\n\nCopyright (C) 1995-2004 Jean-loup Gailly and Mark Adler\n\n  The ZLIB software is provided 'as-is', without any express or implied\n  warranty.  In no event will the authors be held liable for any damages\n  arising from the use of this software.\n\n  Permission is granted to anyone to use this software for any purpose,\n  including commercial applications, and to alter it and redistribute it\n  freely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not\n     claim that you wrote the original software. If you use this software\n     in a product, an acknowledgment in the product documentation would be\n     appreciated but is not required.\n  2. Altered source versions must be plainly marked as such, and must not be\n     misrepresented as being the original software.\n  3. This notice may not be removed or altered from any source distribution.\n\n  Jean-loup Gailly jloup@gzip.org\n  Mark Adler madler@alumni.caltech.edu\n\n\n-----------------------------------------------------------------------\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/ParallelDeflateOutputStream.cs",
    "content": "//#define Trace\n\n// ParallelDeflateOutputStream.cs\n// ------------------------------------------------------------------\n//\n// A DeflateStream that does compression only, it uses a\n// divide-and-conquer approach with multiple threads to exploit multiple\n// CPUs for the DEFLATE computation.\n//\n// last saved: <2011-July-31 14:49:40>\n//\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009-2011 by Dino Chiesa\n// All rights reserved!\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing Ionic.Zlib;\nusing System.IO;\n\n\nnamespace Ionic.Zlib\n{\n    internal class WorkItem\n    {\n        public byte[] buffer;\n        public byte[] compressed;\n        public int crc;\n        public int index;\n        public int ordinal;\n        public int inputBytesAvailable;\n        public int compressedBytesAvailable;\n        public ZlibCodec compressor;\n\n        public WorkItem(int size,\n                        Ionic.Zlib.CompressionLevel compressLevel,\n                        CompressionStrategy strategy,\n                        int ix)\n        {\n            this.buffer= new byte[size];\n            // alloc 5 bytes overhead for every block (margin of safety= 2)\n            int n = size + ((size / 32768)+1) * 5 * 2;\n            this.compressed = new byte[n];\n            this.compressor = new ZlibCodec();\n            this.compressor.InitializeDeflate(compressLevel, false);\n            this.compressor.OutputBuffer = this.compressed;\n            this.compressor.InputBuffer = this.buffer;\n            this.index = ix;\n        }\n    }\n\n    /// <summary>\n    ///   A class for compressing streams using the\n    ///   Deflate algorithm with multiple threads.\n    /// </summary>\n    ///\n    /// <remarks>\n    /// <para>\n    ///   This class performs DEFLATE compression through writing.  For\n    ///   more information on the Deflate algorithm, see IETF RFC 1951,\n    ///   \"DEFLATE Compressed Data Format Specification version 1.3.\"\n    /// </para>\n    ///\n    /// <para>\n    ///   This class is similar to <see cref=\"Ionic.Zlib.DeflateStream\"/>, except\n    ///   that this class is for compression only, and this implementation uses an\n    ///   approach that employs multiple worker threads to perform the DEFLATE.  On\n    ///   a multi-cpu or multi-core computer, the performance of this class can be\n    ///   significantly higher than the single-threaded DeflateStream, particularly\n    ///   for larger streams.  How large?  Anything over 10mb is a good candidate\n    ///   for parallel compression.\n    /// </para>\n    ///\n    /// <para>\n    ///   The tradeoff is that this class uses more memory and more CPU than the\n    ///   vanilla DeflateStream, and also is less efficient as a compressor. For\n    ///   large files the size of the compressed data stream can be less than 1%\n    ///   larger than the size of a compressed data stream from the vanialla\n    ///   DeflateStream.  For smaller files the difference can be larger.  The\n    ///   difference will also be larger if you set the BufferSize to be lower than\n    ///   the default value.  Your mileage may vary. Finally, for small files, the\n    ///   ParallelDeflateOutputStream can be much slower than the vanilla\n    ///   DeflateStream, because of the overhead associated to using the thread\n    ///   pool.\n    /// </para>\n    ///\n    /// </remarks>\n    /// <seealso cref=\"Ionic.Zlib.DeflateStream\" />\n    public class ParallelDeflateOutputStream : System.IO.Stream\n    {\n\n        private static readonly int IO_BUFFER_SIZE_DEFAULT = 64 * 1024;  // 128k\n        private static readonly int BufferPairsPerCore = 4;\n\n        private System.Collections.Generic.List<WorkItem> _pool;\n        private bool                        _leaveOpen;\n        private bool                        emitting;\n        private System.IO.Stream            _outStream;\n        private int                         _maxBufferPairs;\n        private int                         _bufferSize = IO_BUFFER_SIZE_DEFAULT;\n        private AutoResetEvent              _newlyCompressedBlob;\n        //private ManualResetEvent            _writingDone;\n        //private ManualResetEvent            _sessionReset;\n        private object                      _outputLock = new object();\n        private bool                        _isClosed;\n        private bool                        _firstWriteDone;\n        private int                         _currentlyFilling;\n        private int                         _lastFilled;\n        private int                         _lastWritten;\n        private int                         _latestCompressed;\n        private int                         _Crc32;\n        private Ionic.Crc.CRC32             _runningCrc;\n        private object                      _latestLock = new object();\n        private System.Collections.Generic.Queue<int>     _toWrite;\n        private System.Collections.Generic.Queue<int>     _toFill;\n        private Int64                       _totalBytesProcessed;\n        private Ionic.Zlib.CompressionLevel _compressLevel;\n        private volatile Exception          _pendingException;\n        private bool                        _handlingException;\n        private object                      _eLock = new Object();  // protects _pendingException\n\n        // This bitfield is used only when Trace is defined.\n        //private TraceBits _DesiredTrace = TraceBits.Write | TraceBits.WriteBegin |\n        //TraceBits.WriteDone | TraceBits.Lifecycle | TraceBits.Fill | TraceBits.Flush |\n        //TraceBits.Session;\n\n        //private TraceBits _DesiredTrace = TraceBits.WriteBegin | TraceBits.WriteDone | TraceBits.Synch | TraceBits.Lifecycle  | TraceBits.Session ;\n\n        private TraceBits _DesiredTrace =\n            TraceBits.Session |\n            TraceBits.Compress |\n            TraceBits.WriteTake |\n            TraceBits.WriteEnter |\n            TraceBits.EmitEnter |\n            TraceBits.EmitDone |\n            TraceBits.EmitLock |\n            TraceBits.EmitSkip |\n            TraceBits.EmitBegin;\n\n        /// <summary>\n        /// Create a ParallelDeflateOutputStream.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   This stream compresses data written into it via the DEFLATE\n        ///   algorithm (see RFC 1951), and writes out the compressed byte stream.\n        /// </para>\n        ///\n        /// <para>\n        ///   The instance will use the default compression level, the default\n        ///   buffer sizes and the default number of threads and buffers per\n        ///   thread.\n        /// </para>\n        ///\n        /// <para>\n        ///   This class is similar to <see cref=\"Ionic.Zlib.DeflateStream\"/>,\n        ///   except that this implementation uses an approach that employs\n        ///   multiple worker threads to perform the DEFLATE.  On a multi-cpu or\n        ///   multi-core computer, the performance of this class can be\n        ///   significantly higher than the single-threaded DeflateStream,\n        ///   particularly for larger streams.  How large?  Anything over 10mb is\n        ///   a good candidate for parallel compression.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        /// This example shows how to use a ParallelDeflateOutputStream to compress\n        /// data.  It reads a file, compresses it, and writes the compressed data to\n        /// a second, output file.\n        ///\n        /// <code>\n        /// byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        /// int n= -1;\n        /// String outputFile = fileToCompress + \".compressed\";\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(outputFile))\n        ///     {\n        ///         using (Stream compressor = new ParallelDeflateOutputStream(raw))\n        ///         {\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Dim buffer As Byte() = New Byte(4096) {}\n        /// Dim n As Integer = -1\n        /// Dim outputFile As String = (fileToCompress &amp; \".compressed\")\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(outputFile)\n        ///         Using compressor As Stream = New ParallelDeflateOutputStream(raw)\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        /// <param name=\"stream\">The stream to which compressed data will be written.</param>\n        public ParallelDeflateOutputStream(System.IO.Stream stream)\n            : this(stream, CompressionLevel.Default, CompressionStrategy.Default, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a ParallelDeflateOutputStream using the specified CompressionLevel.\n        /// </summary>\n        /// <remarks>\n        ///   See the <see cref=\"ParallelDeflateOutputStream(System.IO.Stream)\"/>\n        ///   constructor for example code.\n        /// </remarks>\n        /// <param name=\"stream\">The stream to which compressed data will be written.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public ParallelDeflateOutputStream(System.IO.Stream stream, CompressionLevel level)\n            : this(stream, level, CompressionStrategy.Default, false)\n        {\n        }\n\n        /// <summary>\n        /// Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open\n        /// when the ParallelDeflateOutputStream is closed.\n        /// </summary>\n        /// <remarks>\n        ///   See the <see cref=\"ParallelDeflateOutputStream(System.IO.Stream)\"/>\n        ///   constructor for example code.\n        /// </remarks>\n        /// <param name=\"stream\">The stream to which compressed data will be written.</param>\n        /// <param name=\"leaveOpen\">\n        ///    true if the application would like the stream to remain open after inflation/deflation.\n        /// </param>\n        public ParallelDeflateOutputStream(System.IO.Stream stream, bool leaveOpen)\n            : this(stream, CompressionLevel.Default, CompressionStrategy.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        /// Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open\n        /// when the ParallelDeflateOutputStream is closed.\n        /// </summary>\n        /// <remarks>\n        ///   See the <see cref=\"ParallelDeflateOutputStream(System.IO.Stream)\"/>\n        ///   constructor for example code.\n        /// </remarks>\n        /// <param name=\"stream\">The stream to which compressed data will be written.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        /// <param name=\"leaveOpen\">\n        ///    true if the application would like the stream to remain open after inflation/deflation.\n        /// </param>\n        public ParallelDeflateOutputStream(System.IO.Stream stream, CompressionLevel level, bool leaveOpen)\n            : this(stream, CompressionLevel.Default, CompressionStrategy.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        /// Create a ParallelDeflateOutputStream using the specified\n        /// CompressionLevel and CompressionStrategy, and specifying whether to\n        /// leave the captive stream open when the ParallelDeflateOutputStream is\n        /// closed.\n        /// </summary>\n        /// <remarks>\n        ///   See the <see cref=\"ParallelDeflateOutputStream(System.IO.Stream)\"/>\n        ///   constructor for example code.\n        /// </remarks>\n        /// <param name=\"stream\">The stream to which compressed data will be written.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        /// <param name=\"strategy\">\n        ///   By tweaking this parameter, you may be able to optimize the compression for\n        ///   data with particular characteristics.\n        /// </param>\n        /// <param name=\"leaveOpen\">\n        ///    true if the application would like the stream to remain open after inflation/deflation.\n        /// </param>\n        public ParallelDeflateOutputStream(System.IO.Stream stream,\n                                           CompressionLevel level,\n                                           CompressionStrategy strategy,\n                                           bool leaveOpen)\n        {\n            TraceOutput(TraceBits.Lifecycle | TraceBits.Session, \"-------------------------------------------------------\");\n            TraceOutput(TraceBits.Lifecycle | TraceBits.Session, \"Create {0:X8}\", this.GetHashCode());\n            _outStream = stream;\n            _compressLevel= level;\n            Strategy = strategy;\n            _leaveOpen = leaveOpen;\n            this.MaxBufferPairs = 16; // default\n        }\n\n\n        /// <summary>\n        ///   The ZLIB strategy to be used during compression.\n        /// </summary>\n        ///\n        public CompressionStrategy Strategy\n        {\n            get;\n            private set;\n        }\n\n        /// <summary>\n        ///   The maximum number of buffer pairs to use.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   This property sets an upper limit on the number of memory buffer\n        ///   pairs to create.  The implementation of this stream allocates\n        ///   multiple buffers to facilitate parallel compression.  As each buffer\n        ///   fills up, this stream uses <see\n        ///   cref=\"System.Threading.ThreadPool.QueueUserWorkItem(WaitCallback)\">\n        ///   ThreadPool.QueueUserWorkItem()</see>\n        ///   to compress those buffers in a background threadpool thread. After a\n        ///   buffer is compressed, it is re-ordered and written to the output\n        ///   stream.\n        /// </para>\n        ///\n        /// <para>\n        ///   A higher number of buffer pairs enables a higher degree of\n        ///   parallelism, which tends to increase the speed of compression on\n        ///   multi-cpu computers.  On the other hand, a higher number of buffer\n        ///   pairs also implies a larger memory consumption, more active worker\n        ///   threads, and a higher cpu utilization for any compression. This\n        ///   property enables the application to limit its memory consumption and\n        ///   CPU utilization behavior depending on requirements.\n        /// </para>\n        ///\n        /// <para>\n        ///   For each compression \"task\" that occurs in parallel, there are 2\n        ///   buffers allocated: one for input and one for output.  This property\n        ///   sets a limit for the number of pairs.  The total amount of storage\n        ///   space allocated for buffering will then be (N*S*2), where N is the\n        ///   number of buffer pairs, S is the size of each buffer (<see\n        ///   cref=\"BufferSize\"/>).  By default, DotNetZip allocates 4 buffer\n        ///   pairs per CPU core, so if your machine has 4 cores, and you retain\n        ///   the default buffer size of 128k, then the\n        ///   ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer\n        ///   memory in total, or 4mb, in blocks of 128kb.  If you then set this\n        ///   property to 8, then the number will be 8 * 2 * 128kb of buffer\n        ///   memory, or 2mb.\n        /// </para>\n        ///\n        /// <para>\n        ///   CPU utilization will also go up with additional buffers, because a\n        ///   larger number of buffer pairs allows a larger number of background\n        ///   threads to compress in parallel. If you find that parallel\n        ///   compression is consuming too much memory or CPU, you can adjust this\n        ///   value downward.\n        /// </para>\n        ///\n        /// <para>\n        ///   The default value is 16. Different values may deliver better or\n        ///   worse results, depending on your priorities and the dynamic\n        ///   performance characteristics of your storage and compute resources.\n        /// </para>\n        ///\n        /// <para>\n        ///   This property is not the number of buffer pairs to use; it is an\n        ///   upper limit. An illustration: Suppose you have an application that\n        ///   uses the default value of this property (which is 16), and it runs\n        ///   on a machine with 2 CPU cores. In that case, DotNetZip will allocate\n        ///   4 buffer pairs per CPU core, for a total of 8 pairs.  The upper\n        ///   limit specified by this property has no effect.\n        /// </para>\n        ///\n        /// <para>\n        ///   The application can set this value at any time, but it is effective\n        ///   only before the first call to Write(), which is when the buffers are\n        ///   allocated.\n        /// </para>\n        /// </remarks>\n        public int MaxBufferPairs\n        {\n            get\n            {\n                return _maxBufferPairs;\n            }\n            set\n            {\n                if (value < 4)\n                    throw new ArgumentException(\"MaxBufferPairs\",\n                                                \"Value must be 4 or greater.\");\n                _maxBufferPairs = value;\n            }\n        }\n\n        /// <summary>\n        ///   The size of the buffers used by the compressor threads.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   The default buffer size is 128k. The application can set this value\n        ///   at any time, but it is effective only before the first Write().\n        /// </para>\n        ///\n        /// <para>\n        ///   Larger buffer sizes implies larger memory consumption but allows\n        ///   more efficient compression. Using smaller buffer sizes consumes less\n        ///   memory but may result in less effective compression.  For example,\n        ///   using the default buffer size of 128k, the compression delivered is\n        ///   within 1% of the compression delivered by the single-threaded <see\n        ///   cref=\"Ionic.Zlib.DeflateStream\"/>.  On the other hand, using a\n        ///   BufferSize of 8k can result in a compressed data stream that is 5%\n        ///   larger than that delivered by the single-threaded\n        ///   <c>DeflateStream</c>.  Excessively small buffer sizes can also cause\n        ///   the speed of the ParallelDeflateOutputStream to drop, because of\n        ///   larger thread scheduling overhead dealing with many many small\n        ///   buffers.\n        /// </para>\n        ///\n        /// <para>\n        ///   The total amount of storage space allocated for buffering will be\n        ///   (N*S*2), where N is the number of buffer pairs, and S is the size of\n        ///   each buffer (this property). There are 2 buffers used by the\n        ///   compressor, one for input and one for output.  By default, DotNetZip\n        ///   allocates 4 buffer pairs per CPU core, so if your machine has 4\n        ///   cores, then the number of buffer pairs used will be 16. If you\n        ///   accept the default value of this property, 128k, then the\n        ///   ParallelDeflateOutputStream will use 16 * 2 * 128kb of buffer memory\n        ///   in total, or 4mb, in blocks of 128kb.  If you set this property to\n        ///   64kb, then the number will be 16 * 2 * 64kb of buffer memory, or\n        ///   2mb.\n        /// </para>\n        ///\n        /// </remarks>\n        public int BufferSize\n        {\n            get { return _bufferSize;}\n            set\n            {\n                if (value < 1024)\n                    throw new ArgumentOutOfRangeException(\"BufferSize\",\n                                                          \"BufferSize must be greater than 1024 bytes\");\n                _bufferSize = value;\n            }\n        }\n\n        /// <summary>\n        /// The CRC32 for the data that was written out, prior to compression.\n        /// </summary>\n        /// <remarks>\n        /// This value is meaningful only after a call to Close().\n        /// </remarks>\n        public int Crc32 { get { return _Crc32; } }\n\n\n        /// <summary>\n        /// The total number of uncompressed bytes processed by the ParallelDeflateOutputStream.\n        /// </summary>\n        /// <remarks>\n        /// This value is meaningful only after a call to Close().\n        /// </remarks>\n        public Int64 BytesProcessed { get { return _totalBytesProcessed; } }\n\n\n        private void _InitializePoolOfWorkItems()\n        {\n            _toWrite = new Queue<int>();\n            _toFill = new Queue<int>();\n            _pool = new System.Collections.Generic.List<WorkItem>();\n            int nTasks = BufferPairsPerCore * Environment.ProcessorCount;\n            nTasks = Math.Min(nTasks, _maxBufferPairs);\n            for(int i=0; i < nTasks; i++)\n            {\n                _pool.Add(new WorkItem(_bufferSize, _compressLevel, Strategy, i));\n                _toFill.Enqueue(i);\n            }\n\n            _newlyCompressedBlob = new AutoResetEvent(false);\n            _runningCrc = new Ionic.Crc.CRC32();\n            _currentlyFilling = -1;\n            _lastFilled = -1;\n            _lastWritten = -1;\n            _latestCompressed = -1;\n        }\n\n\n\n\n        /// <summary>\n        ///   Write data to the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   To use the ParallelDeflateOutputStream to compress data, create a\n        ///   ParallelDeflateOutputStream with CompressionMode.Compress, passing a\n        ///   writable output stream.  Then call Write() on that\n        ///   ParallelDeflateOutputStream, providing uncompressed data as input.  The\n        ///   data sent to the output stream will be the compressed form of the data\n        ///   written.\n        /// </para>\n        ///\n        /// <para>\n        ///   To decompress data, use the <see cref=\"Ionic.Zlib.DeflateStream\"/> class.\n        /// </para>\n        ///\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer holding data to write to the stream.</param>\n        /// <param name=\"offset\">the offset within that data array to find the first byte to write.</param>\n        /// <param name=\"count\">the number of bytes to write.</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            bool mustWait = false;\n\n            // This method does this:\n            //   0. handles any pending exceptions\n            //   1. write any buffers that are ready to be written,\n            //   2. fills a work buffer; when full, flip state to 'Filled',\n            //   3. if more data to be written,  goto step 1\n\n            if (_isClosed)\n                throw new InvalidOperationException();\n\n            // dispense any exceptions that occurred on the BG threads\n            if (_pendingException != null)\n            {\n                _handlingException = true;\n                var pe = _pendingException;\n                _pendingException = null;\n                throw pe;\n            }\n\n            if (count == 0) return;\n\n            if (!_firstWriteDone)\n            {\n                // Want to do this on first Write, first session, and not in the\n                // constructor.  We want to allow MaxBufferPairs to\n                // change after construction, but before first Write.\n                _InitializePoolOfWorkItems();\n                _firstWriteDone = true;\n            }\n\n\n            do\n            {\n                // may need to make buffers available\n                EmitPendingBuffers(false, mustWait);\n\n                mustWait = false;\n                // use current buffer, or get a new buffer to fill\n                int ix = -1;\n                if (_currentlyFilling >= 0)\n                {\n                    ix = _currentlyFilling;\n                    TraceOutput(TraceBits.WriteTake,\n                                \"Write    notake   wi({0}) lf({1})\",\n                                ix,\n                                _lastFilled);\n                }\n                else\n                {\n                    TraceOutput(TraceBits.WriteTake, \"Write    take?\");\n                    if (_toFill.Count == 0)\n                    {\n                        // no available buffers, so... need to emit\n                        // compressed buffers.\n                        mustWait = true;\n                        continue;\n                    }\n\n                    ix = _toFill.Dequeue();\n                    TraceOutput(TraceBits.WriteTake,\n                                \"Write    take     wi({0}) lf({1})\",\n                                ix,\n                                _lastFilled);\n                    ++_lastFilled;\n                }\n\n                WorkItem workitem = _pool[ix];\n\n                int limit = ((workitem.buffer.Length - workitem.inputBytesAvailable) > count)\n                    ? count\n                    : (workitem.buffer.Length - workitem.inputBytesAvailable);\n\n                workitem.ordinal = _lastFilled;\n\n                TraceOutput(TraceBits.Write,\n                            \"Write    lock     wi({0}) ord({1}) iba({2})\",\n                            workitem.index,\n                            workitem.ordinal,\n                            workitem.inputBytesAvailable\n                            );\n\n                // copy from the provided buffer to our workitem, starting at\n                // the tail end of whatever data we might have in there currently.\n                Buffer.BlockCopy(buffer,\n                                 offset,\n                                 workitem.buffer,\n                                 workitem.inputBytesAvailable,\n                                 limit);\n\n                count -= limit;\n                offset += limit;\n                workitem.inputBytesAvailable += limit;\n                if (workitem.inputBytesAvailable == workitem.buffer.Length)\n                {\n                    // No need for interlocked.increment: the Write()\n                    // method is documented as not multi-thread safe, so\n                    // we can assume Write() calls come in from only one\n                    // thread.\n                    TraceOutput(TraceBits.Write,\n                                \"Write    QUWI     wi({0}) ord({1}) iba({2}) nf({3})\",\n                                workitem.index,\n                                workitem.ordinal,\n                                workitem.inputBytesAvailable );\n\n                    if (!ThreadPool.QueueUserWorkItem( _DeflateOne, workitem ))\n                        throw new Exception(\"Cannot enqueue workitem\");\n\n                    _currentlyFilling = -1; // will get a new buffer next time\n                }\n                else\n                    _currentlyFilling = ix;\n\n                if (count > 0)\n                    TraceOutput(TraceBits.WriteEnter, \"Write    more\");\n            }\n            while (count > 0);  // until no more to write\n\n            TraceOutput(TraceBits.WriteEnter, \"Write    exit\");\n            return;\n        }\n\n\n\n        private void _FlushFinish()\n        {\n            // After writing a series of compressed buffers, each one closed\n            // with Flush.Sync, we now write the final one as Flush.Finish,\n            // and then stop.\n            byte[] buffer = new byte[128];\n            var compressor = new ZlibCodec();\n            int rc = compressor.InitializeDeflate(_compressLevel, false);\n            compressor.InputBuffer = null;\n            compressor.NextIn = 0;\n            compressor.AvailableBytesIn = 0;\n            compressor.OutputBuffer = buffer;\n            compressor.NextOut = 0;\n            compressor.AvailableBytesOut = buffer.Length;\n            rc = compressor.Deflate(FlushType.Finish);\n\n            if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK)\n                throw new Exception(\"deflating: \" + compressor.Message);\n\n            if (buffer.Length - compressor.AvailableBytesOut > 0)\n            {\n                TraceOutput(TraceBits.EmitBegin,\n                            \"Emit     begin    flush bytes({0})\",\n                            buffer.Length - compressor.AvailableBytesOut);\n\n                _outStream.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut);\n\n                TraceOutput(TraceBits.EmitDone,\n                            \"Emit     done     flush\");\n            }\n\n            compressor.EndDeflate();\n\n            _Crc32 = _runningCrc.Crc32Result;\n        }\n\n\n        private void _Flush(bool lastInput)\n        {\n            if (_isClosed)\n                throw new InvalidOperationException();\n\n            if (emitting) return;\n\n            // compress any partial buffer\n            if (_currentlyFilling >= 0)\n            {\n                WorkItem workitem = _pool[_currentlyFilling];\n                _DeflateOne(workitem);\n                _currentlyFilling = -1; // get a new buffer next Write()\n            }\n\n            if (lastInput)\n            {\n                EmitPendingBuffers(true, false);\n                _FlushFinish();\n            }\n            else\n            {\n                EmitPendingBuffers(false, false);\n            }\n        }\n\n\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            if (_pendingException != null)\n            {\n                _handlingException = true;\n                var pe = _pendingException;\n                _pendingException = null;\n                throw pe;\n            }\n            if (_handlingException)\n                return;\n\n            _Flush(false);\n        }\n\n\n        /// <summary>\n        /// Close the stream.\n        /// </summary>\n        /// <remarks>\n        /// You must call Close on the stream to guarantee that all of the data written in has\n        /// been compressed, and the compressed data has been written out.\n        /// </remarks>\n        public override void Close()\n        {\n            TraceOutput(TraceBits.Session, \"Close {0:X8}\", this.GetHashCode());\n\n            if (_pendingException != null)\n            {\n                _handlingException = true;\n                var pe = _pendingException;\n                _pendingException = null;\n                throw pe;\n            }\n\n            if (_handlingException)\n                return;\n\n            if (_isClosed) return;\n\n            _Flush(true);\n\n            if (!_leaveOpen)\n                _outStream.Close();\n\n            _isClosed= true;\n        }\n\n\n\n        // workitem 10030 - implement a new Dispose method\n\n        /// <summary>Dispose the object</summary>\n        /// <remarks>\n        ///   <para>\n        ///     Because ParallelDeflateOutputStream is IDisposable, the\n        ///     application must call this method when finished using the instance.\n        ///   </para>\n        ///   <para>\n        ///     This method is generally called implicitly upon exit from\n        ///     a <c>using</c> scope in C# (<c>Using</c> in VB).\n        ///   </para>\n        /// </remarks>\n        new public void Dispose()\n        {\n            TraceOutput(TraceBits.Lifecycle, \"Dispose  {0:X8}\", this.GetHashCode());\n            Close();\n            _pool = null;\n            Dispose(true);\n        }\n\n\n\n        /// <summary>The Dispose method</summary>\n        /// <param name=\"disposing\">\n        ///   indicates whether the Dispose method was invoked by user code.\n        /// </param>\n        protected override void Dispose(bool disposing)\n        {\n            base.Dispose(disposing);\n        }\n\n\n        /// <summary>\n        ///   Resets the stream for use with another stream.\n        /// </summary>\n        /// <remarks>\n        ///   Because the ParallelDeflateOutputStream is expensive to create, it\n        ///   has been designed so that it can be recycled and re-used.  You have\n        ///   to call Close() on the stream first, then you can call Reset() on\n        ///   it, to use it again on another stream.\n        /// </remarks>\n        ///\n        /// <param name=\"stream\">\n        ///   The new output stream for this era.\n        /// </param>\n        ///\n        /// <example>\n        /// <code>\n        /// ParallelDeflateOutputStream deflater = null;\n        /// foreach (var inputFile in listOfFiles)\n        /// {\n        ///     string outputFile = inputFile + \".compressed\";\n        ///     using (System.IO.Stream input = System.IO.File.OpenRead(inputFile))\n        ///     {\n        ///         using (var outStream = System.IO.File.Create(outputFile))\n        ///         {\n        ///             if (deflater == null)\n        ///                 deflater = new ParallelDeflateOutputStream(outStream,\n        ///                                                            CompressionLevel.Best,\n        ///                                                            CompressionStrategy.Default,\n        ///                                                            true);\n        ///             deflater.Reset(outStream);\n        ///\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 deflater.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// </example>\n        public void Reset(Stream stream)\n        {\n            TraceOutput(TraceBits.Session, \"-------------------------------------------------------\");\n            TraceOutput(TraceBits.Session, \"Reset {0:X8} firstDone({1})\", this.GetHashCode(), _firstWriteDone);\n\n            if (!_firstWriteDone) return;\n\n            // reset all status\n            _toWrite.Clear();\n            _toFill.Clear();\n            foreach (var workitem in _pool)\n            {\n                _toFill.Enqueue(workitem.index);\n                workitem.ordinal = -1;\n            }\n\n            _firstWriteDone = false;\n            _totalBytesProcessed = 0L;\n            _runningCrc = new Ionic.Crc.CRC32();\n            _isClosed= false;\n            _currentlyFilling = -1;\n            _lastFilled = -1;\n            _lastWritten = -1;\n            _latestCompressed = -1;\n            _outStream = stream;\n        }\n\n\n\n\n        private void EmitPendingBuffers(bool doAll, bool mustWait)\n        {\n            // When combining parallel deflation with a ZipSegmentedStream, it's\n            // possible for the ZSS to throw from within this method.  In that\n            // case, Close/Dispose will be called on this stream, if this stream\n            // is employed within a using or try/finally pair as required. But\n            // this stream is unaware of the pending exception, so the Close()\n            // method invokes this method AGAIN.  This can lead to a deadlock.\n            // Therefore, failfast if re-entering.\n\n            if (emitting) return;\n            emitting = true;\n            if (doAll || mustWait)\n                _newlyCompressedBlob.WaitOne();\n\n            do\n            {\n                int firstSkip = -1;\n                int millisecondsToWait = doAll ? 200 : (mustWait ? -1 : 0);\n                int nextToWrite = -1;\n\n                do\n                {\n                    if (Monitor.TryEnter(_toWrite, millisecondsToWait))\n                    {\n                        nextToWrite = -1;\n                        try\n                        {\n                            if (_toWrite.Count > 0)\n                                nextToWrite = _toWrite.Dequeue();\n                        }\n                        finally\n                        {\n                            Monitor.Exit(_toWrite);\n                        }\n\n                        if (nextToWrite >= 0)\n                        {\n                            WorkItem workitem = _pool[nextToWrite];\n                            if (workitem.ordinal != _lastWritten + 1)\n                            {\n                                // out of order. requeue and try again.\n                                TraceOutput(TraceBits.EmitSkip,\n                                            \"Emit     skip     wi({0}) ord({1}) lw({2}) fs({3})\",\n                                            workitem.index,\n                                            workitem.ordinal,\n                                            _lastWritten,\n                                            firstSkip);\n\n                                lock(_toWrite)\n                                {\n                                    _toWrite.Enqueue(nextToWrite);\n                                }\n\n                                if (firstSkip == nextToWrite)\n                                {\n                                    // We went around the list once.\n                                    // None of the items in the list is the one we want.\n                                    // Now wait for a compressor to signal again.\n                                    _newlyCompressedBlob.WaitOne();\n                                    firstSkip = -1;\n                                }\n                                else if (firstSkip == -1)\n                                    firstSkip = nextToWrite;\n\n                                continue;\n                            }\n\n                            firstSkip = -1;\n\n                            TraceOutput(TraceBits.EmitBegin,\n                                        \"Emit     begin    wi({0}) ord({1})              cba({2})\",\n                                        workitem.index,\n                                        workitem.ordinal,\n                                        workitem.compressedBytesAvailable);\n\n                            _outStream.Write(workitem.compressed, 0, workitem.compressedBytesAvailable);\n                            _runningCrc.Combine(workitem.crc, workitem.inputBytesAvailable);\n                            _totalBytesProcessed += workitem.inputBytesAvailable;\n                            workitem.inputBytesAvailable = 0;\n\n                            TraceOutput(TraceBits.EmitDone,\n                                        \"Emit     done     wi({0}) ord({1})              cba({2}) mtw({3})\",\n                                        workitem.index,\n                                        workitem.ordinal,\n                                        workitem.compressedBytesAvailable,\n                                        millisecondsToWait);\n\n                            _lastWritten = workitem.ordinal;\n                            _toFill.Enqueue(workitem.index);\n\n                            // don't wait next time through\n                            if (millisecondsToWait == -1) millisecondsToWait = 0;\n                        }\n                    }\n                    else\n                        nextToWrite = -1;\n\n                } while (nextToWrite >= 0);\n\n            } while (doAll && (_lastWritten != _latestCompressed));\n\n            emitting = false;\n        }\n\n\n\n#if OLD\n        private void _PerpetualWriterMethod(object state)\n        {\n            TraceOutput(TraceBits.WriterThread, \"_PerpetualWriterMethod START\");\n\n            try\n            {\n                do\n                {\n                    // wait for the next session\n                    TraceOutput(TraceBits.Synch | TraceBits.WriterThread, \"Synch    _sessionReset.WaitOne(begin) PWM\");\n                    _sessionReset.WaitOne();\n                    TraceOutput(TraceBits.Synch | TraceBits.WriterThread, \"Synch    _sessionReset.WaitOne(done)  PWM\");\n\n                    if (_isDisposed) break;\n\n                    TraceOutput(TraceBits.Synch | TraceBits.WriterThread, \"Synch    _sessionReset.Reset()        PWM\");\n                    _sessionReset.Reset();\n\n                    // repeatedly write buffers as they become ready\n                    WorkItem workitem = null;\n                    Ionic.Zlib.CRC32 c= new Ionic.Zlib.CRC32();\n                    do\n                    {\n                        workitem = _pool[_nextToWrite % _pc];\n                        lock(workitem)\n                        {\n                            if (_noMoreInputForThisSegment)\n                                TraceOutput(TraceBits.Write,\n                                               \"Write    drain    wi({0}) stat({1}) canuse({2})  cba({3})\",\n                                               workitem.index,\n                                               workitem.status,\n                                               (workitem.status == (int)WorkItem.Status.Compressed),\n                                               workitem.compressedBytesAvailable);\n\n                            do\n                            {\n                                if (workitem.status == (int)WorkItem.Status.Compressed)\n                                {\n                                    TraceOutput(TraceBits.WriteBegin,\n                                                   \"Write    begin    wi({0}) stat({1})              cba({2})\",\n                                                   workitem.index,\n                                                   workitem.status,\n                                                   workitem.compressedBytesAvailable);\n\n                                    workitem.status = (int)WorkItem.Status.Writing;\n                                    _outStream.Write(workitem.compressed, 0, workitem.compressedBytesAvailable);\n                                    c.Combine(workitem.crc, workitem.inputBytesAvailable);\n                                    _totalBytesProcessed += workitem.inputBytesAvailable;\n                                    _nextToWrite++;\n                                    workitem.inputBytesAvailable= 0;\n                                    workitem.status = (int)WorkItem.Status.Done;\n\n                                    TraceOutput(TraceBits.WriteDone,\n                                                   \"Write    done     wi({0}) stat({1})              cba({2})\",\n                                                   workitem.index,\n                                                   workitem.status,\n                                                   workitem.compressedBytesAvailable);\n\n\n                                    Monitor.Pulse(workitem);\n                                    break;\n                                }\n                                else\n                                {\n                                    int wcycles = 0;\n                                    // I've locked a workitem I cannot use.\n                                    // Therefore, wake someone else up, and then release the lock.\n                                    while (workitem.status != (int)WorkItem.Status.Compressed)\n                                    {\n                                        TraceOutput(TraceBits.WriteWait,\n                                                       \"Write    waiting  wi({0}) stat({1}) nw({2}) nf({3}) nomore({4})\",\n                                                       workitem.index,\n                                                       workitem.status,\n                                                       _nextToWrite, _nextToFill,\n                                                       _noMoreInputForThisSegment );\n\n                                        if (_noMoreInputForThisSegment && _nextToWrite == _nextToFill)\n                                            break;\n\n                                        wcycles++;\n\n                                        // wake up someone else\n                                        Monitor.Pulse(workitem);\n                                        // release and wait\n                                        Monitor.Wait(workitem);\n\n                                        if (workitem.status == (int)WorkItem.Status.Compressed)\n                                            TraceOutput(TraceBits.WriteWait,\n                                                           \"Write    A-OK     wi({0}) stat({1}) iba({2}) cba({3}) cyc({4})\",\n                                                           workitem.index,\n                                                           workitem.status,\n                                                           workitem.inputBytesAvailable,\n                                                           workitem.compressedBytesAvailable,\n                                                           wcycles);\n                                    }\n\n                                    if (_noMoreInputForThisSegment && _nextToWrite == _nextToFill)\n                                        break;\n\n                                }\n                            }\n                            while (true);\n                        }\n\n                        if (_noMoreInputForThisSegment)\n                            TraceOutput(TraceBits.Write,\n                                           \"Write    nomore  nw({0}) nf({1}) break({2})\",\n                                           _nextToWrite, _nextToFill, (_nextToWrite == _nextToFill));\n\n                        if (_noMoreInputForThisSegment && _nextToWrite == _nextToFill)\n                            break;\n\n                    } while (true);\n\n\n                    // Finish:\n                    // After writing a series of buffers, closing each one with\n                    // Flush.Sync, we now write the final one as Flush.Finish, and\n                    // then stop.\n                    byte[] buffer = new byte[128];\n                    ZlibCodec compressor = new ZlibCodec();\n                    int rc = compressor.InitializeDeflate(_compressLevel, false);\n                    compressor.InputBuffer = null;\n                    compressor.NextIn = 0;\n                    compressor.AvailableBytesIn = 0;\n                    compressor.OutputBuffer = buffer;\n                    compressor.NextOut = 0;\n                    compressor.AvailableBytesOut = buffer.Length;\n                    rc = compressor.Deflate(FlushType.Finish);\n\n                    if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK)\n                        throw new Exception(\"deflating: \" + compressor.Message);\n\n                    if (buffer.Length - compressor.AvailableBytesOut > 0)\n                    {\n                        TraceOutput(TraceBits.WriteBegin,\n                                       \"Write    begin    flush bytes({0})\",\n                                       buffer.Length - compressor.AvailableBytesOut);\n\n                        _outStream.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut);\n\n                        TraceOutput(TraceBits.WriteBegin,\n                                       \"Write    done     flush\");\n                    }\n\n                    compressor.EndDeflate();\n\n                    _Crc32 = c.Crc32Result;\n\n                    // signal that writing is complete:\n                    TraceOutput(TraceBits.Synch, \"Synch    _writingDone.Set()           PWM\");\n                    _writingDone.Set();\n                }\n                while (true);\n            }\n            catch (System.Exception exc1)\n            {\n                lock(_eLock)\n                {\n                    // expose the exception to the main thread\n                    if (_pendingException!=null)\n                        _pendingException = exc1;\n                }\n            }\n\n            TraceOutput(TraceBits.WriterThread, \"_PerpetualWriterMethod FINIS\");\n        }\n#endif\n\n\n\n\n        private void _DeflateOne(Object wi)\n        {\n            // compress one buffer\n            WorkItem workitem = (WorkItem) wi;\n            try\n            {\n                int myItem = workitem.index;\n                Ionic.Crc.CRC32 crc = new Ionic.Crc.CRC32();\n\n                // calc CRC on the buffer\n                crc.SlurpBlock(workitem.buffer, 0, workitem.inputBytesAvailable);\n\n                // deflate it\n                DeflateOneSegment(workitem);\n\n                // update status\n                workitem.crc = crc.Crc32Result;\n                TraceOutput(TraceBits.Compress,\n                            \"Compress          wi({0}) ord({1}) len({2})\",\n                            workitem.index,\n                            workitem.ordinal,\n                            workitem.compressedBytesAvailable\n                            );\n\n                lock(_latestLock)\n                {\n                    if (workitem.ordinal > _latestCompressed)\n                        _latestCompressed = workitem.ordinal;\n                }\n                lock (_toWrite)\n                {\n                    _toWrite.Enqueue(workitem.index);\n                }\n                _newlyCompressedBlob.Set();\n            }\n            catch (System.Exception exc1)\n            {\n                lock(_eLock)\n                {\n                    // expose the exception to the main thread\n                    if (_pendingException!=null)\n                        _pendingException = exc1;\n                }\n            }\n        }\n\n\n\n\n        private bool DeflateOneSegment(WorkItem workitem)\n        {\n            ZlibCodec compressor = workitem.compressor;\n            int rc= 0;\n            compressor.ResetDeflate();\n            compressor.NextIn = 0;\n\n            compressor.AvailableBytesIn = workitem.inputBytesAvailable;\n\n            // step 1: deflate the buffer\n            compressor.NextOut = 0;\n            compressor.AvailableBytesOut =  workitem.compressed.Length;\n            do\n            {\n                compressor.Deflate(FlushType.None);\n            }\n            while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0);\n\n            // step 2: flush (sync)\n            rc = compressor.Deflate(FlushType.Sync);\n\n            workitem.compressedBytesAvailable= (int) compressor.TotalBytesOut;\n            return true;\n        }\n\n\n        [System.Diagnostics.ConditionalAttribute(\"Trace\")]\n        private void TraceOutput(TraceBits bits, string format, params object[] varParams)\n        {\n            if ((bits & _DesiredTrace) != 0)\n            {\n                lock(_outputLock)\n                {\n                    int tid = Thread.CurrentThread.GetHashCode();\n#if !SILVERLIGHT\n                    Console.ForegroundColor = (ConsoleColor) (tid % 8 + 8);\n#endif\n                    Console.Write(\"{0:000} PDOS \", tid);\n                    Console.WriteLine(format, varParams);\n#if !SILVERLIGHT\n                    Console.ResetColor();\n#endif\n                }\n            }\n        }\n\n\n        // used only when Trace is defined\n        [Flags]\n        enum TraceBits : uint\n        {\n            None         = 0,\n            NotUsed1     = 1,\n            EmitLock     = 2,\n            EmitEnter    = 4,    // enter _EmitPending\n            EmitBegin    = 8,    // begin to write out\n            EmitDone     = 16,   // done writing out\n            EmitSkip     = 32,   // writer skipping a workitem\n            EmitAll      = 58,   // All Emit flags\n            Flush        = 64,\n            Lifecycle    = 128,  // constructor/disposer\n            Session      = 256,  // Close/Reset\n            Synch        = 512,  // thread synchronization\n            Instance     = 1024, // instance settings\n            Compress     = 2048,  // compress task\n            Write        = 4096,    // filling buffers, when caller invokes Write()\n            WriteEnter   = 8192,    // upon entry to Write()\n            WriteTake    = 16384,    // on _toFill.Take()\n            All          = 0xffffffff,\n        }\n\n\n\n        /// <summary>\n        /// Indicates whether the stream supports Seek operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream supports Read operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanRead\n        {\n            get {return false;}\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports Write operations.\n        /// </summary>\n        /// <remarks>\n        /// Returns true if the provided stream is writable.\n        /// </remarks>\n        public override bool CanWrite\n        {\n            get { return _outStream.CanWrite; }\n        }\n\n        /// <summary>\n        /// Reading this property always throws a NotSupportedException.\n        /// </summary>\n        public override long Length\n        {\n            get { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// Returns the current position of the output stream.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     Because the output gets written by a background thread,\n        ///     the value may change asynchronously.  Setting this\n        ///     property always throws a NotSupportedException.\n        ///   </para>\n        /// </remarks>\n        public override long Position\n        {\n            get { return _outStream.Position; }\n            set { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// This method always throws a NotSupportedException.\n        /// </summary>\n        /// <param name=\"buffer\">\n        ///   The buffer into which data would be read, IF THIS METHOD\n        ///   ACTUALLY DID ANYTHING.\n        /// </param>\n        /// <param name=\"offset\">\n        ///   The offset within that data array at which to insert the\n        ///   data that is read, IF THIS METHOD ACTUALLY DID\n        ///   ANYTHING.\n        /// </param>\n        /// <param name=\"count\">\n        ///   The number of bytes to write, IF THIS METHOD ACTUALLY DID\n        ///   ANYTHING.\n        /// </param>\n        /// <returns>nothing.</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// This method always throws a NotSupportedException.\n        /// </summary>\n        /// <param name=\"offset\">\n        ///   The offset to seek to....\n        ///   IF THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        /// <param name=\"origin\">\n        ///   The reference specifying how to apply the offset....  IF\n        ///   THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        /// <returns>nothing. It always throws.</returns>\n        public override long Seek(long offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// This method always throws a NotSupportedException.\n        /// </summary>\n        /// <param name=\"value\">\n        ///   The new value for the stream length....  IF\n        ///   THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        public override void SetLength(long value)\n        {\n            throw new NotSupportedException();\n        }\n\n    }\n\n}\n\n\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/Tree.cs",
    "content": "// Tree.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.  \n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License. \n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs): \n// Time-stamp: <2009-October-28 13:29:50>\n//\n// ------------------------------------------------------------------\n//\n// This module defines classes for zlib compression and\n// decompression. This code is derived from the jzlib implementation of\n// zlib. In keeping with the license for jzlib, the copyright to that\n// code is below.\n//\n// ------------------------------------------------------------------\n// \n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// \n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n// \n// 2. Redistributions in binary form must reproduce the above copyright \n// notice, this list of conditions and the following disclaimer in \n// the documentation and/or other materials provided with the distribution.\n// \n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// \n// -----------------------------------------------------------------------\n//\n// This program is based on zlib-1.1.3; credit to authors\n// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n// and contributors of zlib.\n//\n// -----------------------------------------------------------------------\n\n\nusing System;\n\nnamespace Ionic.Zlib\n{\n    sealed class Tree\n    {\n        private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1);\n                \n        // extra bits for each length code\n        internal static readonly int[] ExtraLengthBits = new int[]\n        {\n            0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n            3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0\n        };\n                \n        // extra bits for each distance code\n        internal static readonly int[] ExtraDistanceBits = new int[]\n        {\n            0, 0, 0, 0, 1, 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,\n            7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13\n        };\n                \n        // extra bits for each bit length code\n        internal static readonly int[] extra_blbits = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7};\n                \n        internal static readonly sbyte[] bl_order = new sbyte[]{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};\n                \n                \n        // The lengths of the bit length codes are sent in order of decreasing\n        // probability, to avoid transmitting the lengths for unused bit\n        // length codes.\n                \n        internal const int Buf_size = 8 * 2;\n                \n        // see definition of array dist_code below\n        //internal const int DIST_CODE_LEN = 512;\n                \n        private static readonly sbyte[] _dist_code = new sbyte[]\n        {\n            0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7, \n            8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,\n            10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, \n            11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, \n            12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, \n            12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, \n            13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, \n            13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, \n            0,   0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, \n            22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, \n            24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, \n            25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, \n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, \n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, \n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, \n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, \n            29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29\n        };\n                \n        internal static readonly sbyte[] LengthCode = new sbyte[]\n        {\n            0,   1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11,\n            12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n            16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17,\n            18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19,\n            20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\n            21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n            22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n            23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n            24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n            24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n            25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n            25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n            26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n            27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28\n        };\n                \n\n        internal static readonly int[] LengthBase = new int[]\n        {\n            0,   1,  2,  3,  4,  5,  6,   7,   8,  10,  12,  14, 16, 20, 24, 28,\n            32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0\n        };\n                \n\n        internal static readonly int[] DistanceBase = new int[]\n        {\n            0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192,\n            256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576\n        };\n\n        \n        /// <summary>\n        /// Map from a distance to a distance code.\n        /// </summary>\n        /// <remarks> \n        /// No side effects. _dist_code[256] and _dist_code[257] are never used.\n        /// </remarks>\n        internal static int DistanceCode(int dist)\n        {\n            return (dist < 256)\n                ? _dist_code[dist]\n                : _dist_code[256 + SharedUtils.URShift(dist, 7)];\n        }\n\n        internal short[] dyn_tree; // the dynamic tree\n        internal int max_code; // largest code with non zero frequency\n        internal StaticTree staticTree; // the corresponding static tree\n                \n        // Compute the optimal bit lengths for a tree and update the total bit length\n        // for the current block.\n        // IN assertion: the fields freq and dad are set, heap[heap_max] and\n        //    above are the tree nodes sorted by increasing frequency.\n        // OUT assertions: the field len is set to the optimal bit length, the\n        //     array bl_count contains the frequencies for each bit length.\n        //     The length opt_len is updated; static_len is also updated if stree is\n        //     not null.\n        internal void  gen_bitlen(DeflateManager s)\n        {\n            short[] tree = dyn_tree;\n            short[] stree = staticTree.treeCodes;\n            int[] extra = staticTree.extraBits;\n            int base_Renamed = staticTree.extraBase;\n            int max_length = staticTree.maxLength;\n            int h; // heap index\n            int n, m; // iterate over the tree elements\n            int bits; // bit length\n            int xbits; // extra bits\n            short f; // frequency\n            int overflow = 0; // number of elements with bit length too large\n                        \n            for (bits = 0; bits <= InternalConstants.MAX_BITS; bits++)\n                s.bl_count[bits] = 0;\n                        \n            // In a first pass, compute the optimal bit lengths (which may\n            // overflow in the case of the bit length tree).\n            tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap\n                        \n            for (h = s.heap_max + 1; h < HEAP_SIZE; h++)\n            {\n                n = s.heap[h];\n                bits = tree[tree[n * 2 + 1] * 2 + 1] + 1;\n                if (bits > max_length)\n                {\n                    bits = max_length; overflow++;\n                }\n                tree[n * 2 + 1] = (short) bits;\n                // We overwrite tree[n*2+1] which is no longer needed\n                                \n                if (n > max_code)\n                    continue; // not a leaf node\n                                \n                s.bl_count[bits]++;\n                xbits = 0;\n                if (n >= base_Renamed)\n                    xbits = extra[n - base_Renamed];\n                f = tree[n * 2];\n                s.opt_len += f * (bits + xbits);\n                if (stree != null)\n                    s.static_len += f * (stree[n * 2 + 1] + xbits);\n            }\n            if (overflow == 0)\n                return ;\n                        \n            // This happens for example on obj2 and pic of the Calgary corpus\n            // Find the first bit length which could increase:\n            do \n            {\n                bits = max_length - 1;\n                while (s.bl_count[bits] == 0)\n                    bits--;\n                s.bl_count[bits]--; // move one leaf down the tree\n                s.bl_count[bits + 1] = (short) (s.bl_count[bits + 1] + 2); // move one overflow item as its brother\n                s.bl_count[max_length]--;\n                // The brother of the overflow item also moves one step up,\n                // but this does not affect bl_count[max_length]\n                overflow -= 2;\n            }\n            while (overflow > 0);\n                        \n            for (bits = max_length; bits != 0; bits--)\n            {\n                n = s.bl_count[bits];\n                while (n != 0)\n                {\n                    m = s.heap[--h];\n                    if (m > max_code)\n                        continue;\n                    if (tree[m * 2 + 1] != bits)\n                    {\n                        s.opt_len = (int) (s.opt_len + ((long) bits - (long) tree[m * 2 + 1]) * (long) tree[m * 2]);\n                        tree[m * 2 + 1] = (short) bits;\n                    }\n                    n--;\n                }\n            }\n        }\n                \n        // Construct one Huffman tree and assigns the code bit strings and lengths.\n        // Update the total bit length for the current block.\n        // IN assertion: the field freq is set for all tree elements.\n        // OUT assertions: the fields len and code are set to the optimal bit length\n        //     and corresponding code. The length opt_len is updated; static_len is\n        //     also updated if stree is not null. The field max_code is set.\n        internal void  build_tree(DeflateManager s)\n        {\n            short[] tree  = dyn_tree;\n            short[] stree = staticTree.treeCodes;\n            int elems     = staticTree.elems;\n            int n, m;            // iterate over heap elements\n            int max_code  = -1;  // largest code with non zero frequency\n            int node;            // new node being created\n                        \n            // Construct the initial heap, with least frequent element in\n            // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n            // heap[0] is not used.\n            s.heap_len = 0;\n            s.heap_max = HEAP_SIZE;\n                        \n            for (n = 0; n < elems; n++)\n            {\n                if (tree[n * 2] != 0)\n                {\n                    s.heap[++s.heap_len] = max_code = n;\n                    s.depth[n] = 0;\n                }\n                else\n                {\n                    tree[n * 2 + 1] = 0;\n                }\n            }\n                        \n            // The pkzip format requires that at least one distance code exists,\n            // and that at least one bit should be sent even if there is only one\n            // possible code. So to avoid special checks later on we force at least\n            // two codes of non zero frequency.\n            while (s.heap_len < 2)\n            {\n                node = s.heap[++s.heap_len] = (max_code < 2?++max_code:0);\n                tree[node * 2] = 1;\n                s.depth[node] = 0;\n                s.opt_len--;\n                if (stree != null)\n                    s.static_len -= stree[node * 2 + 1];\n                // node is 0 or 1 so it does not have extra bits\n            }\n            this.max_code = max_code;\n                        \n            // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n            // establish sub-heaps of increasing lengths:\n                        \n            for (n = s.heap_len / 2; n >= 1; n--)\n                s.pqdownheap(tree, n);\n                        \n            // Construct the Huffman tree by repeatedly combining the least two\n            // frequent nodes.\n                        \n            node = elems; // next internal node of the tree\n            do \n            {\n                // n = node of least frequency\n                n = s.heap[1];\n                s.heap[1] = s.heap[s.heap_len--];\n                s.pqdownheap(tree, 1);\n                m = s.heap[1]; // m = node of next least frequency\n                                \n                s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency\n                s.heap[--s.heap_max] = m;\n                                \n                // Create a new node father of n and m\n                tree[node * 2] = unchecked((short) (tree[n * 2] + tree[m * 2]));\n                s.depth[node] = (sbyte) (System.Math.Max((byte) s.depth[n], (byte) s.depth[m]) + 1);\n                tree[n * 2 + 1] = tree[m * 2 + 1] = (short) node;\n                                \n                // and insert the new node in the heap\n                s.heap[1] = node++;\n                s.pqdownheap(tree, 1);\n            }\n            while (s.heap_len >= 2);\n                        \n            s.heap[--s.heap_max] = s.heap[1];\n                        \n            // At this point, the fields freq and dad are set. We can now\n            // generate the bit lengths.\n                        \n            gen_bitlen(s);\n                        \n            // The field len is now set, we can generate the bit codes\n            gen_codes(tree, max_code, s.bl_count);\n        }\n                \n        // Generate the codes for a given tree and bit counts (which need not be\n        // optimal).\n        // IN assertion: the array bl_count contains the bit length statistics for\n        // the given tree and the field len is set for all tree elements.\n        // OUT assertion: the field code is set for all tree elements of non\n        //     zero code length.\n        internal static void  gen_codes(short[] tree, int max_code, short[] bl_count)\n        {\n            short[] next_code = new short[InternalConstants.MAX_BITS + 1]; // next code value for each bit length\n            short code = 0; // running code value\n            int bits; // bit index\n            int n; // code index\n                        \n            // The distribution counts are first used to generate the code values\n            // without bit reversal.\n            for (bits = 1; bits <= InternalConstants.MAX_BITS; bits++)\n                unchecked {\n                    next_code[bits] = code = (short) ((code + bl_count[bits - 1]) << 1);\n                }\n                        \n            // Check that the bit counts in bl_count are consistent. The last code\n            // must be all ones.\n            //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n            //        \"inconsistent bit counts\");\n            //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n                        \n            for (n = 0; n <= max_code; n++)\n            {\n                int len = tree[n * 2 + 1];\n                if (len == 0)\n                    continue;\n                // Now reverse the bits\n                tree[n * 2] =  unchecked((short) (bi_reverse(next_code[len]++, len)));\n            }\n        }\n                \n        // Reverse the first len bits of a code, using straightforward code (a faster\n        // method would use a table)\n        // IN assertion: 1 <= len <= 15\n        internal static int bi_reverse(int code, int len)\n        {\n            int res = 0;\n            do \n            {\n                res |= code & 1;\n                code >>= 1; //SharedUtils.URShift(code, 1);\n                res <<= 1;\n            }\n            while (--len > 0);\n            return res >> 1;\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/Zlib.cs",
    "content": "// Zlib.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009-2011 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// Last Saved: <2011-August-03 19:52:28>\n//\n// ------------------------------------------------------------------\n//\n// This module defines classes for ZLIB compression and\n// decompression. This code is derived from the jzlib implementation of\n// zlib, but significantly modified.  The object model is not the same,\n// and many of the behaviors are new or different.  Nonetheless, in\n// keeping with the license for jzlib, the copyright to that code is\n// included below.\n//\n// ------------------------------------------------------------------\n//\n// The following notice applies to jzlib:\n//\n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in\n// the documentation and/or other materials provided with the distribution.\n//\n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// -----------------------------------------------------------------------\n//\n// jzlib is based on zlib-1.1.3.\n//\n// The following notice applies to zlib:\n//\n// -----------------------------------------------------------------------\n//\n// Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler\n//\n//   The ZLIB software is provided 'as-is', without any express or implied\n//   warranty.  In no event will the authors be held liable for any damages\n//   arising from the use of this software.\n//\n//   Permission is granted to anyone to use this software for any purpose,\n//   including commercial applications, and to alter it and redistribute it\n//   freely, subject to the following restrictions:\n//\n//   1. The origin of this software must not be misrepresented; you must not\n//      claim that you wrote the original software. If you use this software\n//      in a product, an acknowledgment in the product documentation would be\n//      appreciated but is not required.\n//   2. Altered source versions must be plainly marked as such, and must not be\n//      misrepresented as being the original software.\n//   3. This notice may not be removed or altered from any source distribution.\n//\n//   Jean-loup Gailly jloup@gzip.org\n//   Mark Adler madler@alumni.caltech.edu\n//\n// -----------------------------------------------------------------------\n\n\n\nusing System;\nusing Interop=System.Runtime.InteropServices;\n\nnamespace Ionic.Zlib\n{\n\n    /// <summary>\n    /// Describes how to flush the current deflate operation.\n    /// </summary>\n    /// <remarks>\n    /// The different FlushType values are useful when using a Deflate in a streaming application.\n    /// </remarks>\n    public enum FlushType\n    {\n        /// <summary>No flush at all.</summary>\n        None = 0,\n\n        /// <summary>Closes the current block, but doesn't flush it to\n        /// the output. Used internally only in hypothetical\n        /// scenarios.  This was supposed to be removed by Zlib, but it is\n        /// still in use in some edge cases.\n        /// </summary>\n        Partial,\n\n        /// <summary>\n        /// Use this during compression to specify that all pending output should be\n        /// flushed to the output buffer and the output should be aligned on a byte\n        /// boundary.  You might use this in a streaming communication scenario, so that\n        /// the decompressor can get all input data available so far.  When using this\n        /// with a ZlibCodec, <c>AvailableBytesIn</c> will be zero after the call if\n        /// enough output space has been provided before the call.  Flushing will\n        /// degrade compression and so it should be used only when necessary.\n        /// </summary>\n        Sync,\n\n        /// <summary>\n        /// Use this during compression to specify that all output should be flushed, as\n        /// with <c>FlushType.Sync</c>, but also, the compression state should be reset\n        /// so that decompression can restart from this point if previous compressed\n        /// data has been damaged or if random access is desired.  Using\n        /// <c>FlushType.Full</c> too often can significantly degrade the compression.\n        /// </summary>\n        Full,\n\n        /// <summary>Signals the end of the compression/decompression stream.</summary>\n        Finish,\n    }\n\n\n    /// <summary>\n    /// The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress.\n    /// </summary>\n    public enum CompressionLevel\n    {\n        /// <summary>\n        /// None means that the data will be simply stored, with no change at all.\n        /// If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None\n        /// cannot be opened with the default zip reader. Use a different CompressionLevel.\n        /// </summary>\n        None= 0,\n        /// <summary>\n        /// Same as None.\n        /// </summary>\n        Level0 = 0,\n\n        /// <summary>\n        /// The fastest but least effective compression.\n        /// </summary>\n        BestSpeed = 1,\n\n        /// <summary>\n        /// A synonym for BestSpeed.\n        /// </summary>\n        Level1 = 1,\n\n        /// <summary>\n        /// A little slower, but better, than level 1.\n        /// </summary>\n        Level2 = 2,\n\n        /// <summary>\n        /// A little slower, but better, than level 2.\n        /// </summary>\n        Level3 = 3,\n\n        /// <summary>\n        /// A little slower, but better, than level 3.\n        /// </summary>\n        Level4 = 4,\n\n        /// <summary>\n        /// A little slower than level 4, but with better compression.\n        /// </summary>\n        Level5 = 5,\n\n        /// <summary>\n        /// The default compression level, with a good balance of speed and compression efficiency.\n        /// </summary>\n        Default = 6,\n        /// <summary>\n        /// A synonym for Default.\n        /// </summary>\n        Level6 = 6,\n\n        /// <summary>\n        /// Pretty good compression!\n        /// </summary>\n        Level7 = 7,\n\n        /// <summary>\n        ///  Better compression than Level7!\n        /// </summary>\n        Level8 = 8,\n\n        /// <summary>\n        /// The \"best\" compression, where best means greatest reduction in size of the input data stream.\n        /// This is also the slowest compression.\n        /// </summary>\n        BestCompression = 9,\n\n        /// <summary>\n        /// A synonym for BestCompression.\n        /// </summary>\n        Level9 = 9,\n    }\n\n    /// <summary>\n    /// Describes options for how the compression algorithm is executed.  Different strategies\n    /// work better on different sorts of data.  The strategy parameter can affect the compression\n    /// ratio and the speed of compression but not the correctness of the compresssion.\n    /// </summary>\n    public enum CompressionStrategy\n    {\n        /// <summary>\n        /// The default strategy is probably the best for normal data.\n        /// </summary>\n        Default = 0,\n\n        /// <summary>\n        /// The <c>Filtered</c> strategy is intended to be used most effectively with data produced by a\n        /// filter or predictor.  By this definition, filtered data consists mostly of small\n        /// values with a somewhat random distribution.  In this case, the compression algorithm\n        /// is tuned to compress them better.  The effect of <c>Filtered</c> is to force more Huffman\n        /// coding and less string matching; it is a half-step between <c>Default</c> and <c>HuffmanOnly</c>.\n        /// </summary>\n        Filtered = 1,\n\n        /// <summary>\n        /// Using <c>HuffmanOnly</c> will force the compressor to do Huffman encoding only, with no\n        /// string matching.\n        /// </summary>\n        HuffmanOnly = 2,\n    }\n\n\n    /// <summary>\n    /// An enum to specify the direction of transcoding - whether to compress or decompress.\n    /// </summary>\n    public enum CompressionMode\n    {\n        /// <summary>\n        /// Used to specify that the stream should compress the data.\n        /// </summary>\n        Compress= 0,\n        /// <summary>\n        /// Used to specify that the stream should decompress the data.\n        /// </summary>\n        Decompress = 1,\n    }\n\n\n    /// <summary>\n    /// A general purpose exception class for exceptions in the Zlib library.\n    /// </summary>\n    [Interop.GuidAttribute(\"ebc25cf6-9120-4283-b972-0e5520d0000E\")]\n    public class ZlibException : System.Exception\n    {\n        /// <summary>\n        /// The ZlibException class captures exception information generated\n        /// by the Zlib library.\n        /// </summary>\n        public ZlibException()\n            : base()\n        {\n        }\n\n        /// <summary>\n        /// This ctor collects a message attached to the exception.\n        /// </summary>\n        /// <param name=\"s\">the message for the exception.</param>\n        public ZlibException(System.String s)\n            : base(s)\n        {\n        }\n    }\n\n\n    internal class SharedUtils\n    {\n        /// <summary>\n        /// Performs an unsigned bitwise right shift with the specified number\n        /// </summary>\n        /// <param name=\"number\">Number to operate on</param>\n        /// <param name=\"bits\">Ammount of bits to shift</param>\n        /// <returns>The resulting number from the shift operation</returns>\n        public static int URShift(int number, int bits)\n        {\n            return (int)((uint)number >> bits);\n        }\n\n#if NOT\n        /// <summary>\n        /// Performs an unsigned bitwise right shift with the specified number\n        /// </summary>\n        /// <param name=\"number\">Number to operate on</param>\n        /// <param name=\"bits\">Ammount of bits to shift</param>\n        /// <returns>The resulting number from the shift operation</returns>\n        public static long URShift(long number, int bits)\n        {\n            return (long) ((UInt64)number >> bits);\n        }\n#endif\n\n        /// <summary>\n        ///   Reads a number of characters from the current source TextReader and writes\n        ///   the data to the target array at the specified index.\n        /// </summary>\n        ///\n        /// <param name=\"sourceTextReader\">The source TextReader to read from</param>\n        /// <param name=\"target\">Contains the array of characteres read from the source TextReader.</param>\n        /// <param name=\"start\">The starting index of the target array.</param>\n        /// <param name=\"count\">The maximum number of characters to read from the source TextReader.</param>\n        ///\n        /// <returns>\n        ///   The number of characters read. The number will be less than or equal to\n        ///   count depending on the data available in the source TextReader. Returns -1\n        ///   if the end of the stream is reached.\n        /// </returns>\n        public static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count)\n        {\n            // Returns 0 bytes if not enough space in target\n            if (target.Length == 0) return 0;\n\n            char[] charArray = new char[target.Length];\n            int bytesRead = sourceTextReader.Read(charArray, start, count);\n\n            // Returns -1 if EOF\n            if (bytesRead == 0) return -1;\n\n            for (int index = start; index < start + bytesRead; index++)\n                target[index] = (byte)charArray[index];\n\n            return bytesRead;\n        }\n\n\n        internal static byte[] ToByteArray(System.String sourceString)\n        {\n            return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString);\n        }\n\n\n        internal static char[] ToCharArray(byte[] byteArray)\n        {\n            return System.Text.UTF8Encoding.UTF8.GetChars(byteArray);\n        }\n    }\n\n    internal static class InternalConstants\n    {\n        internal static readonly int MAX_BITS     = 15;\n        internal static readonly int BL_CODES     = 19;\n        internal static readonly int D_CODES      = 30;\n        internal static readonly int LITERALS     = 256;\n        internal static readonly int LENGTH_CODES = 29;\n        internal static readonly int L_CODES      = (LITERALS + 1 + LENGTH_CODES);\n\n        // Bit length codes must not exceed MAX_BL_BITS bits\n        internal static readonly int MAX_BL_BITS  = 7;\n\n        // repeat previous bit length 3-6 times (2 bits of repeat count)\n        internal static readonly int REP_3_6      = 16;\n\n        // repeat a zero length 3-10 times  (3 bits of repeat count)\n        internal static readonly int REPZ_3_10    = 17;\n\n        // repeat a zero length 11-138 times  (7 bits of repeat count)\n        internal static readonly int REPZ_11_138  = 18;\n\n    }\n\n    internal sealed class StaticTree\n    {\n        internal static readonly short[] lengthAndLiteralsTreeCodes = new short[] {\n            12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8,\n            28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8,\n             2, 8, 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8,\n            18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8,\n            10, 8, 138, 8, 74, 8, 202, 8, 42, 8, 170, 8, 106, 8, 234, 8,\n            26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8,\n             6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8,\n            22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8,\n            14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8,\n            30, 8, 158, 8, 94, 8, 222, 8, 62, 8, 190, 8, 126, 8, 254, 8,\n             1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8,\n            17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, 8, 241, 8,\n             9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8,\n            25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8,\n             5, 8, 133, 8, 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8,\n            21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8,\n            13, 8, 141, 8, 77, 8, 205, 8, 45, 8, 173, 8, 109, 8, 237, 8,\n            29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8,\n            19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9,\n            51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9,\n            11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9,\n            43, 9, 299, 9, 171, 9, 427, 9, 107, 9, 363, 9, 235, 9, 491, 9,\n            27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9,\n            59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, 9, 251, 9, 507, 9,\n             7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9,\n            39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9,\n            23, 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9,\n            55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9,\n            15, 9, 271, 9, 143, 9, 399, 9, 79, 9, 335, 9, 207, 9, 463, 9,\n            47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9,\n            31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, 223, 9, 479, 9,\n            63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9,\n             0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7,\n             8, 7, 72, 7, 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7,\n             4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7,\n             3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, 99, 8, 227, 8\n        };\n\n        internal static readonly short[] distTreeCodes = new short[] {\n            0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5,\n            2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5,\n            1, 5, 17, 5, 9, 5, 25, 5, 5, 5, 21, 5, 13, 5, 29, 5,\n            3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 };\n\n        internal static readonly StaticTree Literals;\n        internal static readonly StaticTree Distances;\n        internal static readonly StaticTree BitLengths;\n\n        internal short[] treeCodes; // static tree or null\n        internal int[] extraBits;   // extra bits for each code or null\n        internal int extraBase;     // base index for extra_bits\n        internal int elems;         // max number of elements in the tree\n        internal int maxLength;     // max bit length for the codes\n\n        private StaticTree(short[] treeCodes, int[] extraBits, int extraBase, int elems, int maxLength)\n        {\n            this.treeCodes = treeCodes;\n            this.extraBits = extraBits;\n            this.extraBase = extraBase;\n            this.elems = elems;\n            this.maxLength = maxLength;\n        }\n        static StaticTree()\n        {\n            Literals = new StaticTree(lengthAndLiteralsTreeCodes, Tree.ExtraLengthBits, InternalConstants.LITERALS + 1, InternalConstants.L_CODES, InternalConstants.MAX_BITS);\n            Distances = new StaticTree(distTreeCodes, Tree.ExtraDistanceBits, 0, InternalConstants.D_CODES, InternalConstants.MAX_BITS);\n            BitLengths = new StaticTree(null, Tree.extra_blbits, 0, InternalConstants.BL_CODES, InternalConstants.MAX_BL_BITS);\n        }\n    }\n\n\n\n    /// <summary>\n    /// Computes an Adler-32 checksum.\n    /// </summary>\n    /// <remarks>\n    /// The Adler checksum is similar to a CRC checksum, but faster to compute, though less\n    /// reliable.  It is used in producing RFC1950 compressed streams.  The Adler checksum\n    /// is a required part of the \"ZLIB\" standard.  Applications will almost never need to\n    /// use this class directly.\n    /// </remarks>\n    ///\n    /// <exclude/>\n    public sealed class Adler\n    {\n        // largest prime smaller than 65536\n        private static readonly uint BASE = 65521;\n        // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1\n        private static readonly int NMAX = 5552;\n\n\n#pragma warning disable 3001\n#pragma warning disable 3002\n\n        /// <summary>\n        ///   Calculates the Adler32 checksum.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This is used within ZLIB.  You probably don't need to use this directly.\n        ///   </para>\n        /// </remarks>\n        /// <example>\n        ///    To compute an Adler32 checksum on a byte array:\n        ///  <code>\n        ///    var adler = Adler.Adler32(0, null, 0, 0);\n        ///    adler = Adler.Adler32(adler, buffer, index, length);\n        ///  </code>\n        /// </example>\n        public static uint Adler32(uint adler, byte[] buf, int index, int len)\n        {\n            if (buf == null)\n                return 1;\n\n            uint s1 = (uint) (adler & 0xffff);\n            uint s2 = (uint) ((adler >> 16) & 0xffff);\n\n            while (len > 0)\n            {\n                int k = len < NMAX ? len : NMAX;\n                len -= k;\n                while (k >= 16)\n                {\n                    //s1 += (buf[index++] & 0xff); s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    s1 += buf[index++]; s2 += s1;\n                    k -= 16;\n                }\n                if (k != 0)\n                {\n                    do\n                    {\n                        s1 += buf[index++];\n                        s2 += s1;\n                    }\n                    while (--k != 0);\n                }\n                s1 %= BASE;\n                s2 %= BASE;\n            }\n            return (uint)((s2 << 16) | s1);\n        }\n#pragma warning restore 3001\n#pragma warning restore 3002\n\n    }\n\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/ZlibBaseStream.cs",
    "content": "// ZlibBaseStream.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2011-August-06 21:22:38>\n//\n// ------------------------------------------------------------------\n//\n// This module defines the ZlibBaseStream class, which is an intnernal\n// base class for DeflateStream, ZlibStream and GZipStream.\n//\n// ------------------------------------------------------------------\n\nusing System;\nusing System.IO;\n\nnamespace Ionic.Zlib\n{\n\n    internal enum ZlibStreamFlavor { ZLIB = 1950, DEFLATE = 1951, GZIP = 1952 }\n\n    internal class ZlibBaseStream : System.IO.Stream\n    {\n        protected internal ZlibCodec _z = null; // deferred init... new ZlibCodec();\n\n        protected internal StreamMode _streamMode = StreamMode.Undefined;\n        protected internal FlushType _flushMode;\n        protected internal ZlibStreamFlavor _flavor;\n        protected internal CompressionMode _compressionMode;\n        protected internal CompressionLevel _level;\n        protected internal bool _leaveOpen;\n        protected internal byte[] _workingBuffer;\n        protected internal int _bufferSize = ZlibConstants.WorkingBufferSizeDefault;\n        protected internal byte[] _buf1 = new byte[1];\n\n        protected internal System.IO.Stream _stream;\n        protected internal CompressionStrategy Strategy = CompressionStrategy.Default;\n\n        // workitem 7159\n        Ionic.Crc.CRC32 crc;\n        protected internal string _GzipFileName;\n        protected internal string _GzipComment;\n        protected internal DateTime _GzipMtime;\n        protected internal int _gzipHeaderByteCount;\n\n        internal int Crc32 { get { if (crc == null) return 0; return crc.Crc32Result; } }\n\n        public ZlibBaseStream(System.IO.Stream stream,\n                              CompressionMode compressionMode,\n                              CompressionLevel level,\n                              ZlibStreamFlavor flavor,\n                              bool leaveOpen)\n            : base()\n        {\n            this._flushMode = FlushType.None;\n            //this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT];\n            this._stream = stream;\n            this._leaveOpen = leaveOpen;\n            this._compressionMode = compressionMode;\n            this._flavor = flavor;\n            this._level = level;\n            // workitem 7159\n            if (flavor == ZlibStreamFlavor.GZIP)\n            {\n                this.crc = new Ionic.Crc.CRC32();\n            }\n        }\n\n\n        protected internal bool _wantCompress\n        {\n            get\n            {\n                return (this._compressionMode == CompressionMode.Compress);\n            }\n        }\n\n        private ZlibCodec z\n        {\n            get\n            {\n                if (_z == null)\n                {\n                    bool wantRfc1950Header = (this._flavor == ZlibStreamFlavor.ZLIB);\n                    _z = new ZlibCodec();\n                    if (this._compressionMode == CompressionMode.Decompress)\n                    {\n                        _z.InitializeInflate(wantRfc1950Header);\n                    }\n                    else\n                    {\n                        _z.Strategy = Strategy;\n                        _z.InitializeDeflate(this._level, wantRfc1950Header);\n                    }\n                }\n                return _z;\n            }\n        }\n\n\n\n        private byte[] workingBuffer\n        {\n            get\n            {\n                if (_workingBuffer == null)\n                    _workingBuffer = new byte[_bufferSize];\n                return _workingBuffer;\n            }\n        }\n\n\n\n        public override void Write(System.Byte[] buffer, int offset, int count)\n        {\n            // workitem 7159\n            // calculate the CRC on the unccompressed data  (before writing)\n            if (crc != null)\n                crc.SlurpBlock(buffer, offset, count);\n\n            if (_streamMode == StreamMode.Undefined)\n                _streamMode = StreamMode.Writer;\n            else if (_streamMode != StreamMode.Writer)\n                throw new ZlibException(\"Cannot Write after Reading.\");\n\n            if (count == 0)\n                return;\n\n            // first reference of z property will initialize the private var _z\n            z.InputBuffer = buffer;\n            _z.NextIn = offset;\n            _z.AvailableBytesIn = count;\n            bool done = false;\n            do\n            {\n                _z.OutputBuffer = workingBuffer;\n                _z.NextOut = 0;\n                _z.AvailableBytesOut = _workingBuffer.Length;\n                int rc = (_wantCompress)\n                    ? _z.Deflate(_flushMode)\n                    : _z.Inflate(_flushMode);\n                if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END)\n                    throw new ZlibException((_wantCompress ? \"de\" : \"in\") + \"flating: \" + _z.Message);\n\n                //if (_workingBuffer.Length - _z.AvailableBytesOut > 0)\n                _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut);\n\n                done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0;\n\n                // If GZIP and de-compress, we're done when 8 bytes remain.\n                if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress)\n                    done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0);\n\n            }\n            while (!done);\n        }\n\n\n\n        private void finish()\n        {\n            if (_z == null) return;\n\n            if (_streamMode == StreamMode.Writer)\n            {\n                bool done = false;\n                do\n                {\n                    _z.OutputBuffer = workingBuffer;\n                    _z.NextOut = 0;\n                    _z.AvailableBytesOut = _workingBuffer.Length;\n                    int rc = (_wantCompress)\n                        ? _z.Deflate(FlushType.Finish)\n                        : _z.Inflate(FlushType.Finish);\n\n                    if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK)\n                    {\n                        string verb = (_wantCompress ? \"de\" : \"in\") + \"flating\";\n                        if (_z.Message == null)\n                            throw new ZlibException(String.Format(\"{0}: (rc = {1})\", verb, rc));\n                        else\n                            throw new ZlibException(verb + \": \" + _z.Message);\n                    }\n\n                    if (_workingBuffer.Length - _z.AvailableBytesOut > 0)\n                    {\n                        _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut);\n                    }\n\n                    done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0;\n                    // If GZIP and de-compress, we're done when 8 bytes remain.\n                    if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress)\n                        done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0);\n\n                }\n                while (!done);\n\n                Flush();\n\n                // workitem 7159\n                if (_flavor == ZlibStreamFlavor.GZIP)\n                {\n                    if (_wantCompress)\n                    {\n                        // Emit the GZIP trailer: CRC32 and  size mod 2^32\n                        int c1 = crc.Crc32Result;\n                        _stream.Write(BitConverter.GetBytes(c1), 0, 4);\n                        int c2 = (Int32)(crc.TotalBytesRead & 0x00000000FFFFFFFF);\n                        _stream.Write(BitConverter.GetBytes(c2), 0, 4);\n                    }\n                    else\n                    {\n                        throw new ZlibException(\"Writing with decompression is not supported.\");\n                    }\n                }\n            }\n            // workitem 7159\n            else if (_streamMode == StreamMode.Reader)\n            {\n                if (_flavor == ZlibStreamFlavor.GZIP)\n                {\n                    if (!_wantCompress)\n                    {\n                        // workitem 8501: handle edge case (decompress empty stream)\n                        if (_z.TotalBytesOut == 0L)\n                            return;\n\n                        // Read and potentially verify the GZIP trailer:\n                        // CRC32 and size mod 2^32\n                        byte[] trailer = new byte[8];\n\n                        // workitems 8679 & 12554\n                        if (_z.AvailableBytesIn < 8)\n                        {\n                            // Make sure we have read to the end of the stream\n                            Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, _z.AvailableBytesIn);\n                            int bytesNeeded = 8 - _z.AvailableBytesIn;\n                            int bytesRead = _stream.Read(trailer,\n                                                         _z.AvailableBytesIn,\n                                                         bytesNeeded);\n                            if (bytesNeeded != bytesRead)\n                            {\n                                throw new ZlibException(String.Format(\"Missing or incomplete GZIP trailer. Expected 8 bytes, got {0}.\",\n                                                                      _z.AvailableBytesIn + bytesRead));\n                            }\n                        }\n                        else\n                        {\n                            Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, trailer.Length);\n                        }\n\n                        Int32 crc32_expected = BitConverter.ToInt32(trailer, 0);\n                        Int32 crc32_actual = crc.Crc32Result;\n                        Int32 isize_expected = BitConverter.ToInt32(trailer, 4);\n                        Int32 isize_actual = (Int32)(_z.TotalBytesOut & 0x00000000FFFFFFFF);\n\n                        if (crc32_actual != crc32_expected)\n                            throw new ZlibException(String.Format(\"Bad CRC32 in GZIP trailer. (actual({0:X8})!=expected({1:X8}))\", crc32_actual, crc32_expected));\n\n                        if (isize_actual != isize_expected)\n                            throw new ZlibException(String.Format(\"Bad size in GZIP trailer. (actual({0})!=expected({1}))\", isize_actual, isize_expected));\n\n                    }\n                    else\n                    {\n                        throw new ZlibException(\"Reading with compression is not supported.\");\n                    }\n                }\n            }\n        }\n\n\n        private void end()\n        {\n            if (z == null)\n                return;\n            if (_wantCompress)\n            {\n                _z.EndDeflate();\n            }\n            else\n            {\n                _z.EndInflate();\n            }\n            _z = null;\n        }\n\n\n        public override void Close()\n        {\n            if (_stream == null) return;\n            try\n            {\n                finish();\n            }\n            finally\n            {\n                end();\n                if (!_leaveOpen) _stream.Close();\n                _stream = null;\n            }\n        }\n\n        public override void Flush()\n        {\n            _stream.Flush();\n        }\n\n        public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotImplementedException();\n            //_outStream.Seek(offset, origin);\n        }\n        public override void SetLength(System.Int64 value)\n        {\n            _stream.SetLength(value);\n        }\n\n\n#if NOT\n        public int Read()\n        {\n            if (Read(_buf1, 0, 1) == 0)\n                return 0;\n            // calculate CRC after reading\n            if (crc!=null)\n                crc.SlurpBlock(_buf1,0,1);\n            return (_buf1[0] & 0xFF);\n        }\n#endif\n\n        private bool nomoreinput = false;\n\n\n\n        private string ReadZeroTerminatedString()\n        {\n            var list = new System.Collections.Generic.List<byte>();\n            bool done = false;\n            do\n            {\n                // workitem 7740\n                int n = _stream.Read(_buf1, 0, 1);\n                if (n != 1)\n                    throw new ZlibException(\"Unexpected EOF reading GZIP header.\");\n                else\n                {\n                    if (_buf1[0] == 0)\n                        done = true;\n                    else\n                        list.Add(_buf1[0]);\n                }\n            } while (!done);\n            byte[] a = list.ToArray();\n            return GZipStream.iso8859dash1.GetString(a, 0, a.Length);\n        }\n\n\n        private int _ReadAndValidateGzipHeader()\n        {\n            int totalBytesRead = 0;\n            // read the header on the first read\n            byte[] header = new byte[10];\n            int n = _stream.Read(header, 0, header.Length);\n\n            // workitem 8501: handle edge case (decompress empty stream)\n            if (n == 0)\n                return 0;\n\n            if (n != 10)\n                throw new ZlibException(\"Not a valid GZIP stream.\");\n\n            if (header[0] != 0x1F || header[1] != 0x8B || header[2] != 8)\n                throw new ZlibException(\"Bad GZIP header.\");\n\n            Int32 timet = BitConverter.ToInt32(header, 4);\n            _GzipMtime = GZipStream._unixEpoch.AddSeconds(timet);\n            totalBytesRead += n;\n            if ((header[3] & 0x04) == 0x04)\n            {\n                // read and discard extra field\n                n = _stream.Read(header, 0, 2); // 2-byte length field\n                totalBytesRead += n;\n\n                Int16 extraLength = (Int16)(header[0] + header[1] * 256);\n                byte[] extra = new byte[extraLength];\n                n = _stream.Read(extra, 0, extra.Length);\n                if (n != extraLength)\n                    throw new ZlibException(\"Unexpected end-of-file reading GZIP header.\");\n                totalBytesRead += n;\n            }\n            if ((header[3] & 0x08) == 0x08)\n                _GzipFileName = ReadZeroTerminatedString();\n            if ((header[3] & 0x10) == 0x010)\n                _GzipComment = ReadZeroTerminatedString();\n            if ((header[3] & 0x02) == 0x02)\n                Read(_buf1, 0, 1); // CRC16, ignore\n\n            return totalBytesRead;\n        }\n\n\n\n        public override System.Int32 Read(System.Byte[] buffer, System.Int32 offset, System.Int32 count)\n        {\n            // According to MS documentation, any implementation of the IO.Stream.Read function must:\n            // (a) throw an exception if offset & count reference an invalid part of the buffer,\n            //     or if count < 0, or if buffer is null\n            // (b) return 0 only upon EOF, or if count = 0\n            // (c) if not EOF, then return at least 1 byte, up to <count> bytes\n\n            if (_streamMode == StreamMode.Undefined)\n            {\n                if (!this._stream.CanRead) throw new ZlibException(\"The stream is not readable.\");\n                // for the first read, set up some controls.\n                _streamMode = StreamMode.Reader;\n                // (The first reference to _z goes through the private accessor which\n                // may initialize it.)\n                z.AvailableBytesIn = 0;\n                if (_flavor == ZlibStreamFlavor.GZIP)\n                {\n                    _gzipHeaderByteCount = _ReadAndValidateGzipHeader();\n                    // workitem 8501: handle edge case (decompress empty stream)\n                    if (_gzipHeaderByteCount == 0)\n                        return 0;\n                }\n            }\n\n            if (_streamMode != StreamMode.Reader)\n                throw new ZlibException(\"Cannot Read after Writing.\");\n\n            if (count == 0) return 0;\n            if (nomoreinput && _wantCompress) return 0;  // workitem 8557\n            if (buffer == null) throw new ArgumentNullException(\"buffer\");\n            if (count < 0) throw new ArgumentOutOfRangeException(\"count\");\n            if (offset < buffer.GetLowerBound(0)) throw new ArgumentOutOfRangeException(\"offset\");\n            if ((offset + count) > buffer.GetLength(0)) throw new ArgumentOutOfRangeException(\"count\");\n\n            int rc = 0;\n\n            // set up the output of the deflate/inflate codec:\n            _z.OutputBuffer = buffer;\n            _z.NextOut = offset;\n            _z.AvailableBytesOut = count;\n\n            // This is necessary in case _workingBuffer has been resized. (new byte[])\n            // (The first reference to _workingBuffer goes through the private accessor which\n            // may initialize it.)\n            _z.InputBuffer = workingBuffer;\n\n            do\n            {\n                // need data in _workingBuffer in order to deflate/inflate.  Here, we check if we have any.\n                if ((_z.AvailableBytesIn == 0) && (!nomoreinput))\n                {\n                    // No data available, so try to Read data from the captive stream.\n                    _z.NextIn = 0;\n                    _z.AvailableBytesIn = _stream.Read(_workingBuffer, 0, _workingBuffer.Length);\n                    if (_z.AvailableBytesIn == 0)\n                        nomoreinput = true;\n\n                }\n                // we have data in InputBuffer; now compress or decompress as appropriate\n                rc = (_wantCompress)\n                    ? _z.Deflate(_flushMode)\n                    : _z.Inflate(_flushMode);\n\n                if (nomoreinput && (rc == ZlibConstants.Z_BUF_ERROR))\n                    return 0;\n\n                if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END)\n                    throw new ZlibException(String.Format(\"{0}flating:  rc={1}  msg={2}\", (_wantCompress ? \"de\" : \"in\"), rc, _z.Message));\n\n                if ((nomoreinput || rc == ZlibConstants.Z_STREAM_END) && (_z.AvailableBytesOut == count))\n                    break; // nothing more to read\n            }\n            //while (_z.AvailableBytesOut == count && rc == ZlibConstants.Z_OK);\n            while (_z.AvailableBytesOut > 0 && !nomoreinput && rc == ZlibConstants.Z_OK);\n\n\n            // workitem 8557\n            // is there more room in output?\n            if (_z.AvailableBytesOut > 0)\n            {\n                if (rc == ZlibConstants.Z_OK && _z.AvailableBytesIn == 0)\n                {\n                    // deferred\n                }\n\n                // are we completely done reading?\n                if (nomoreinput)\n                {\n                    // and in compression?\n                    if (_wantCompress)\n                    {\n                        // no more input data available; therefore we flush to\n                        // try to complete the read\n                        rc = _z.Deflate(FlushType.Finish);\n\n                        if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END)\n                            throw new ZlibException(String.Format(\"Deflating:  rc={0}  msg={1}\", rc, _z.Message));\n                    }\n                }\n            }\n\n\n            rc = (count - _z.AvailableBytesOut);\n\n            // calculate CRC after reading\n            if (crc != null)\n                crc.SlurpBlock(buffer, offset, rc);\n\n            return rc;\n        }\n\n\n\n        public override System.Boolean CanRead\n        {\n            get { return this._stream.CanRead; }\n        }\n\n        public override System.Boolean CanSeek\n        {\n            get { return this._stream.CanSeek; }\n        }\n\n        public override System.Boolean CanWrite\n        {\n            get { return this._stream.CanWrite; }\n        }\n\n        public override System.Int64 Length\n        {\n            get { return _stream.Length; }\n        }\n\n        public override long Position\n        {\n            get { throw new NotImplementedException(); }\n            set { throw new NotImplementedException(); }\n        }\n\n        internal enum StreamMode\n        {\n            Writer,\n            Reader,\n            Undefined,\n        }\n\n\n        public static void CompressString(String s, Stream compressor)\n        {\n            byte[] uncompressed = System.Text.Encoding.UTF8.GetBytes(s);\n            using (compressor)\n            {\n                compressor.Write(uncompressed, 0, uncompressed.Length);\n            }\n        }\n\n        public static void CompressBuffer(byte[] b, Stream compressor)\n        {\n            // workitem 8460\n            using (compressor)\n            {\n                compressor.Write(b, 0, b.Length);\n            }\n        }\n\n        public static String UncompressString(byte[] compressed, Stream decompressor)\n        {\n            // workitem 8460\n            byte[] working = new byte[1024];\n            var encoding = System.Text.Encoding.UTF8;\n            using (var output = new MemoryStream())\n            {\n                using (decompressor)\n                {\n                    int n;\n                    while ((n = decompressor.Read(working, 0, working.Length)) != 0)\n                    {\n                        output.Write(working, 0, n);\n                    }\n                }\n\n                // reset to allow read from start\n                output.Seek(0, SeekOrigin.Begin);\n                var sr = new StreamReader(output, encoding);\n                return sr.ReadToEnd();\n            }\n        }\n\n        public static byte[] UncompressBuffer(byte[] compressed, Stream decompressor)\n        {\n            // workitem 8460\n            byte[] working = new byte[1024];\n            using (var output = new MemoryStream())\n            {\n                using (decompressor)\n                {\n                    int n;\n                    while ((n = decompressor.Read(working, 0, working.Length)) != 0)\n                    {\n                        output.Write(working, 0, n);\n                    }\n                }\n                return output.ToArray();\n            }\n        }\n\n    }\n\n\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/ZlibCodec.cs",
    "content": "// ZlibCodec.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.  \n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License. \n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs): \n// Time-stamp: <2009-November-03 15:40:51>\n//\n// ------------------------------------------------------------------\n//\n// This module defines a Codec for ZLIB compression and\n// decompression. This code extends code that was based the jzlib\n// implementation of zlib, but this code is completely novel.  The codec\n// class is new, and encapsulates some behaviors that are new, and some\n// that were present in other classes in the jzlib code base.  In\n// keeping with the license for jzlib, the copyright to the jzlib code\n// is included below.\n//\n// ------------------------------------------------------------------\n// \n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// \n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n// \n// 2. Redistributions in binary form must reproduce the above copyright \n// notice, this list of conditions and the following disclaimer in \n// the documentation and/or other materials provided with the distribution.\n// \n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// \n// -----------------------------------------------------------------------\n//\n// This program is based on zlib-1.1.3; credit to authors\n// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n// and contributors of zlib.\n//\n// -----------------------------------------------------------------------\n\n\nusing System;\nusing Interop=System.Runtime.InteropServices;\n\nnamespace Ionic.Zlib\n{\n    /// <summary>\n    /// Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951).\n    /// </summary>\n    ///\n    /// <remarks>\n    /// This class compresses and decompresses data according to the Deflate algorithm\n    /// and optionally, the ZLIB format, as documented in <see\n    /// href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC 1950 - ZLIB</see> and <see\n    /// href=\"http://www.ietf.org/rfc/rfc1951.txt\">RFC 1951 - DEFLATE</see>.\n    /// </remarks>\n    [Interop.GuidAttribute(\"ebc25cf6-9120-4283-b972-0e5520d0000D\")]\n    [Interop.ComVisible(true)]\n//#if !NETCF    \n//    [Interop.ClassInterface(Interop.ClassInterfaceType.AutoDispatch)]\n//#endif\n    sealed public class ZlibCodec\n    {\n        /// <summary>\n        /// The buffer from which data is taken.\n        /// </summary>\n        public byte[] InputBuffer;\n\n        /// <summary>\n        /// An index into the InputBuffer array, indicating where to start reading. \n        /// </summary>\n        public int NextIn;\n\n        /// <summary>\n        /// The number of bytes available in the InputBuffer, starting at NextIn. \n        /// </summary>\n        /// <remarks>\n        /// Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. \n        /// The class will update this number as calls to Inflate/Deflate are made.\n        /// </remarks>\n        public int AvailableBytesIn;\n\n        /// <summary>\n        /// Total number of bytes read so far, through all calls to Inflate()/Deflate().\n        /// </summary>\n        public long TotalBytesIn;\n\n        /// <summary>\n        /// Buffer to store output data.\n        /// </summary>\n        public byte[] OutputBuffer;\n\n        /// <summary>\n        /// An index into the OutputBuffer array, indicating where to start writing. \n        /// </summary>\n        public int NextOut;\n\n        /// <summary>\n        /// The number of bytes available in the OutputBuffer, starting at NextOut. \n        /// </summary>\n        /// <remarks>\n        /// Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. \n        /// The class will update this number as calls to Inflate/Deflate are made.\n        /// </remarks>\n        public int AvailableBytesOut;\n\n        /// <summary>\n        /// Total number of bytes written to the output so far, through all calls to Inflate()/Deflate().\n        /// </summary>\n        public long TotalBytesOut;\n\n        /// <summary>\n        /// used for diagnostics, when something goes wrong!\n        /// </summary>\n        public System.String Message;\n\n        internal DeflateManager dstate;\n        internal InflateManager istate;\n\n        internal uint _Adler32;\n\n        /// <summary>\n        /// The compression level to use in this codec.  Useful only in compression mode.\n        /// </summary>\n        public CompressionLevel CompressLevel = CompressionLevel.Default;\n\n        /// <summary>\n        /// The number of Window Bits to use.  \n        /// </summary>\n        /// <remarks>\n        /// This gauges the size of the sliding window, and hence the \n        /// compression effectiveness as well as memory consumption. It's best to just leave this \n        /// setting alone if you don't know what it is.  The maximum value is 15 bits, which implies\n        /// a 32k window.  \n        /// </remarks>\n        public int WindowBits = ZlibConstants.WindowBitsDefault;\n\n        /// <summary>\n        /// The compression strategy to use.\n        /// </summary>\n        /// <remarks>\n        /// This is only effective in compression.  The theory offered by ZLIB is that different\n        /// strategies could potentially produce significant differences in compression behavior\n        /// for different data sets.  Unfortunately I don't have any good recommendations for how\n        /// to set it differently.  When I tested changing the strategy I got minimally different\n        /// compression performance. It's best to leave this property alone if you don't have a\n        /// good feel for it.  Or, you may want to produce a test harness that runs through the\n        /// different strategy options and evaluates them on different file types. If you do that,\n        /// let me know your results.\n        /// </remarks>\n        public CompressionStrategy Strategy = CompressionStrategy.Default;\n\n\n        /// <summary>\n        /// The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this.\n        /// </summary>\n        public int Adler32 { get { return (int)_Adler32; } }\n\n\n        /// <summary>\n        /// Create a ZlibCodec.\n        /// </summary>\n        /// <remarks>\n        /// If you use this default constructor, you will later have to explicitly call \n        /// InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress \n        /// or decompress. \n        /// </remarks>\n        public ZlibCodec() { }\n\n        /// <summary>\n        /// Create a ZlibCodec that either compresses or decompresses.\n        /// </summary>\n        /// <param name=\"mode\">\n        /// Indicates whether the codec should compress (deflate) or decompress (inflate).\n        /// </param>\n        public ZlibCodec(CompressionMode mode)\n        {\n            if (mode == CompressionMode.Compress)\n            {\n                int rc = InitializeDeflate();\n                if (rc != ZlibConstants.Z_OK) throw new ZlibException(\"Cannot initialize for deflate.\");\n            }\n            else if (mode == CompressionMode.Decompress)\n            {\n                int rc = InitializeInflate();\n                if (rc != ZlibConstants.Z_OK) throw new ZlibException(\"Cannot initialize for inflate.\");\n            }\n            else throw new ZlibException(\"Invalid ZlibStreamFlavor.\");\n        }\n\n        /// <summary>\n        /// Initialize the inflation state. \n        /// </summary>\n        /// <remarks>\n        /// It is not necessary to call this before using the ZlibCodec to inflate data; \n        /// It is implicitly called when you call the constructor.\n        /// </remarks>\n        /// <returns>Z_OK if everything goes well.</returns>\n        public int InitializeInflate()\n        {\n            return InitializeInflate(this.WindowBits);\n        }\n\n        /// <summary>\n        /// Initialize the inflation state with an explicit flag to\n        /// govern the handling of RFC1950 header bytes.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// By default, the ZLIB header defined in <see\n        /// href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC 1950</see> is expected.  If\n        /// you want to read a zlib stream you should specify true for\n        /// expectRfc1950Header.  If you have a deflate stream, you will want to specify\n        /// false. It is only necessary to invoke this initializer explicitly if you\n        /// want to specify false.\n        /// </remarks>\n        ///\n        /// <param name=\"expectRfc1950Header\">whether to expect an RFC1950 header byte\n        /// pair when reading the stream of data to be inflated.</param>\n        ///\n        /// <returns>Z_OK if everything goes well.</returns>\n        public int InitializeInflate(bool expectRfc1950Header)\n        {\n            return InitializeInflate(this.WindowBits, expectRfc1950Header);\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for inflation, with the specified number of window bits. \n        /// </summary>\n        /// <param name=\"windowBits\">The number of window bits to use. If you need to ask what that is, \n        /// then you shouldn't be calling this initializer.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int InitializeInflate(int windowBits)\n        {\n            this.WindowBits = windowBits;            \n            return InitializeInflate(windowBits, true);\n        }\n\n        /// <summary>\n        /// Initialize the inflation state with an explicit flag to govern the handling of\n        /// RFC1950 header bytes. \n        /// </summary>\n        ///\n        /// <remarks>\n        /// If you want to read a zlib stream you should specify true for\n        /// expectRfc1950Header. In this case, the library will expect to find a ZLIB\n        /// header, as defined in <see href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC\n        /// 1950</see>, in the compressed stream.  If you will be reading a DEFLATE or\n        /// GZIP stream, which does not have such a header, you will want to specify\n        /// false.\n        /// </remarks>\n        ///\n        /// <param name=\"expectRfc1950Header\">whether to expect an RFC1950 header byte pair when reading \n        /// the stream of data to be inflated.</param>\n        /// <param name=\"windowBits\">The number of window bits to use. If you need to ask what that is, \n        /// then you shouldn't be calling this initializer.</param>\n        /// <returns>Z_OK if everything goes well.</returns>\n        public int InitializeInflate(int windowBits, bool expectRfc1950Header)\n        {\n            this.WindowBits = windowBits;\n            if (dstate != null) throw new ZlibException(\"You may not call InitializeInflate() after calling InitializeDeflate().\");\n            istate = new InflateManager(expectRfc1950Header);\n            return istate.Initialize(this, windowBits);\n        }\n\n        /// <summary>\n        /// Inflate the data in the InputBuffer, placing the result in the OutputBuffer.\n        /// </summary>\n        /// <remarks>\n        /// You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and \n        /// AvailableBytesOut  before calling this method.\n        /// </remarks>\n        /// <example>\n        /// <code>\n        /// private void InflateBuffer()\n        /// {\n        ///     int bufferSize = 1024;\n        ///     byte[] buffer = new byte[bufferSize];\n        ///     ZlibCodec decompressor = new ZlibCodec();\n        /// \n        ///     Console.WriteLine(\"\\n============================================\");\n        ///     Console.WriteLine(\"Size of Buffer to Inflate: {0} bytes.\", CompressedBytes.Length);\n        ///     MemoryStream ms = new MemoryStream(DecompressedBytes);\n        /// \n        ///     int rc = decompressor.InitializeInflate();\n        /// \n        ///     decompressor.InputBuffer = CompressedBytes;\n        ///     decompressor.NextIn = 0;\n        ///     decompressor.AvailableBytesIn = CompressedBytes.Length;\n        /// \n        ///     decompressor.OutputBuffer = buffer;\n        /// \n        ///     // pass 1: inflate \n        ///     do\n        ///     {\n        ///         decompressor.NextOut = 0;\n        ///         decompressor.AvailableBytesOut = buffer.Length;\n        ///         rc = decompressor.Inflate(FlushType.None);\n        /// \n        ///         if (rc != ZlibConstants.Z_OK &amp;&amp; rc != ZlibConstants.Z_STREAM_END)\n        ///             throw new Exception(\"inflating: \" + decompressor.Message);\n        /// \n        ///         ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut);\n        ///     }\n        ///     while (decompressor.AvailableBytesIn &gt; 0 || decompressor.AvailableBytesOut == 0);\n        /// \n        ///     // pass 2: finish and flush\n        ///     do\n        ///     {\n        ///         decompressor.NextOut = 0;\n        ///         decompressor.AvailableBytesOut = buffer.Length;\n        ///         rc = decompressor.Inflate(FlushType.Finish);\n        /// \n        ///         if (rc != ZlibConstants.Z_STREAM_END &amp;&amp; rc != ZlibConstants.Z_OK)\n        ///             throw new Exception(\"inflating: \" + decompressor.Message);\n        /// \n        ///         if (buffer.Length - decompressor.AvailableBytesOut &gt; 0)\n        ///             ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut);\n        ///     }\n        ///     while (decompressor.AvailableBytesIn &gt; 0 || decompressor.AvailableBytesOut == 0);\n        /// \n        ///     decompressor.EndInflate();\n        /// }\n        ///\n        /// </code>\n        /// </example>\n        /// <param name=\"flush\">The flush to use when inflating.</param>\n        /// <returns>Z_OK if everything goes well.</returns>\n        public int Inflate(FlushType flush)\n        {\n            if (istate == null)\n                throw new ZlibException(\"No Inflate State!\");\n            return istate.Inflate(flush);\n        }\n\n\n        /// <summary>\n        /// Ends an inflation session. \n        /// </summary>\n        /// <remarks>\n        /// Call this after successively calling Inflate().  This will cause all buffers to be flushed. \n        /// After calling this you cannot call Inflate() without a intervening call to one of the\n        /// InitializeInflate() overloads.\n        /// </remarks>\n        /// <returns>Z_OK if everything goes well.</returns>\n        public int EndInflate()\n        {\n            if (istate == null)\n                throw new ZlibException(\"No Inflate State!\");\n            int ret = istate.End();\n            istate = null;\n            return ret;\n        }\n\n        /// <summary>\n        /// I don't know what this does!\n        /// </summary>\n        /// <returns>Z_OK if everything goes well.</returns>\n        public int SyncInflate()\n        {\n            if (istate == null)\n                throw new ZlibException(\"No Inflate State!\");\n            return istate.Sync();\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation.\n        /// </summary>\n        /// <remarks>\n        /// The codec will use the MAX window bits and the default level of compression.\n        /// </remarks>\n        /// <example>\n        /// <code>\n        ///  int bufferSize = 40000;\n        ///  byte[] CompressedBytes = new byte[bufferSize];\n        ///  byte[] DecompressedBytes = new byte[bufferSize];\n        ///  \n        ///  ZlibCodec compressor = new ZlibCodec();\n        ///  \n        ///  compressor.InitializeDeflate(CompressionLevel.Default);\n        ///  \n        ///  compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress);\n        ///  compressor.NextIn = 0;\n        ///  compressor.AvailableBytesIn = compressor.InputBuffer.Length;\n        ///  \n        ///  compressor.OutputBuffer = CompressedBytes;\n        ///  compressor.NextOut = 0;\n        ///  compressor.AvailableBytesOut = CompressedBytes.Length;\n        ///  \n        ///  while (compressor.TotalBytesIn != TextToCompress.Length &amp;&amp; compressor.TotalBytesOut &lt; bufferSize)\n        ///  {\n        ///    compressor.Deflate(FlushType.None);\n        ///  }\n        ///  \n        ///  while (true)\n        ///  {\n        ///    int rc= compressor.Deflate(FlushType.Finish);\n        ///    if (rc == ZlibConstants.Z_STREAM_END) break;\n        ///  }\n        ///  \n        ///  compressor.EndDeflate();\n        ///   \n        /// </code>\n        /// </example>\n        /// <returns>Z_OK if all goes well. You generally don't need to check the return code.</returns>\n        public int InitializeDeflate()\n        {\n            return _InternalInitializeDeflate(true);\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel.\n        /// </summary>\n        /// <remarks>\n        /// The codec will use the maximum window bits (15) and the specified\n        /// CompressionLevel.  It will emit a ZLIB stream as it compresses.\n        /// </remarks>\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int InitializeDeflate(CompressionLevel level)\n        {\n            this.CompressLevel = level;\n            return _InternalInitializeDeflate(true);\n        }\n\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, \n        /// and the explicit flag governing whether to emit an RFC1950 header byte pair.\n        /// </summary>\n        /// <remarks>\n        /// The codec will use the maximum window bits (15) and the specified CompressionLevel.\n        /// If you want to generate a zlib stream, you should specify true for\n        /// wantRfc1950Header. In this case, the library will emit a ZLIB\n        /// header, as defined in <see href=\"http://www.ietf.org/rfc/rfc1950.txt\">RFC\n        /// 1950</see>, in the compressed stream.  \n        /// </remarks>\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <param name=\"wantRfc1950Header\">whether to emit an initial RFC1950 byte pair in the compressed stream.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int InitializeDeflate(CompressionLevel level, bool wantRfc1950Header)\n        {\n            this.CompressLevel = level;\n            return _InternalInitializeDeflate(wantRfc1950Header);\n        }\n\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, \n        /// and the specified number of window bits. \n        /// </summary>\n        /// <remarks>\n        /// The codec will use the specified number of window bits and the specified CompressionLevel.\n        /// </remarks>\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <param name=\"bits\">the number of window bits to use.  If you don't know what this means, don't use this method.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int InitializeDeflate(CompressionLevel level, int bits)\n        {\n            this.CompressLevel = level;\n            this.WindowBits = bits;\n            return _InternalInitializeDeflate(true);\n        }\n\n        /// <summary>\n        /// Initialize the ZlibCodec for deflation operation, using the specified\n        /// CompressionLevel, the specified number of window bits, and the explicit flag\n        /// governing whether to emit an RFC1950 header byte pair.\n        /// </summary>\n        ///\n        /// <param name=\"level\">The compression level for the codec.</param>\n        /// <param name=\"wantRfc1950Header\">whether to emit an initial RFC1950 byte pair in the compressed stream.</param>\n        /// <param name=\"bits\">the number of window bits to use.  If you don't know what this means, don't use this method.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int InitializeDeflate(CompressionLevel level, int bits, bool wantRfc1950Header)\n        {\n            this.CompressLevel = level;\n            this.WindowBits = bits;\n            return _InternalInitializeDeflate(wantRfc1950Header);\n        }\n\n        private int _InternalInitializeDeflate(bool wantRfc1950Header)\n        {\n            if (istate != null) throw new ZlibException(\"You may not call InitializeDeflate() after calling InitializeInflate().\");\n            dstate = new DeflateManager();\n            dstate.WantRfc1950HeaderBytes = wantRfc1950Header;\n\n            return dstate.Initialize(this, this.CompressLevel, this.WindowBits, this.Strategy);\n        }\n\n        /// <summary>\n        /// Deflate one batch of data.\n        /// </summary>\n        /// <remarks>\n        /// You must have set InputBuffer and OutputBuffer before calling this method.\n        /// </remarks>\n        /// <example>\n        /// <code>\n        /// private void DeflateBuffer(CompressionLevel level)\n        /// {\n        ///     int bufferSize = 1024;\n        ///     byte[] buffer = new byte[bufferSize];\n        ///     ZlibCodec compressor = new ZlibCodec();\n        /// \n        ///     Console.WriteLine(\"\\n============================================\");\n        ///     Console.WriteLine(\"Size of Buffer to Deflate: {0} bytes.\", UncompressedBytes.Length);\n        ///     MemoryStream ms = new MemoryStream();\n        /// \n        ///     int rc = compressor.InitializeDeflate(level);\n        /// \n        ///     compressor.InputBuffer = UncompressedBytes;\n        ///     compressor.NextIn = 0;\n        ///     compressor.AvailableBytesIn = UncompressedBytes.Length;\n        /// \n        ///     compressor.OutputBuffer = buffer;\n        /// \n        ///     // pass 1: deflate \n        ///     do\n        ///     {\n        ///         compressor.NextOut = 0;\n        ///         compressor.AvailableBytesOut = buffer.Length;\n        ///         rc = compressor.Deflate(FlushType.None);\n        /// \n        ///         if (rc != ZlibConstants.Z_OK &amp;&amp; rc != ZlibConstants.Z_STREAM_END)\n        ///             throw new Exception(\"deflating: \" + compressor.Message);\n        /// \n        ///         ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut);\n        ///     }\n        ///     while (compressor.AvailableBytesIn &gt; 0 || compressor.AvailableBytesOut == 0);\n        /// \n        ///     // pass 2: finish and flush\n        ///     do\n        ///     {\n        ///         compressor.NextOut = 0;\n        ///         compressor.AvailableBytesOut = buffer.Length;\n        ///         rc = compressor.Deflate(FlushType.Finish);\n        /// \n        ///         if (rc != ZlibConstants.Z_STREAM_END &amp;&amp; rc != ZlibConstants.Z_OK)\n        ///             throw new Exception(\"deflating: \" + compressor.Message);\n        /// \n        ///         if (buffer.Length - compressor.AvailableBytesOut &gt; 0)\n        ///             ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut);\n        ///     }\n        ///     while (compressor.AvailableBytesIn &gt; 0 || compressor.AvailableBytesOut == 0);\n        /// \n        ///     compressor.EndDeflate();\n        /// \n        ///     ms.Seek(0, SeekOrigin.Begin);\n        ///     CompressedBytes = new byte[compressor.TotalBytesOut];\n        ///     ms.Read(CompressedBytes, 0, CompressedBytes.Length);\n        /// }\n        /// </code>\n        /// </example>\n        /// <param name=\"flush\">whether to flush all data as you deflate. Generally you will want to \n        /// use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to \n        /// flush everything. \n        /// </param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int Deflate(FlushType flush)\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            return dstate.Deflate(flush);\n        }\n\n        /// <summary>\n        /// End a deflation session.\n        /// </summary>\n        /// <remarks>\n        /// Call this after making a series of one or more calls to Deflate(). All buffers are flushed.\n        /// </remarks>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int EndDeflate()\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            dstate = null;\n            return ZlibConstants.Z_OK; //ret;\n        }\n\n        /// <summary>\n        /// Reset a codec for another deflation session.\n        /// </summary>\n        /// <remarks>\n        /// Call this to reset the deflation state.  For example if a thread is deflating\n        /// non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first\n        /// block and before the next Deflate(None) of the second block.\n        /// </remarks>\n        /// <returns>Z_OK if all goes well.</returns>\n        public void ResetDeflate()\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            dstate.Reset();\n        }\n\n\n        /// <summary>\n        /// Set the CompressionStrategy and CompressionLevel for a deflation session.\n        /// </summary>\n        /// <param name=\"level\">the level of compression to use.</param>\n        /// <param name=\"strategy\">the strategy to use for compression.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int SetDeflateParams(CompressionLevel level, CompressionStrategy strategy)\n        {\n            if (dstate == null)\n                throw new ZlibException(\"No Deflate State!\");\n            return dstate.SetParams(level, strategy);\n        }\n\n\n        /// <summary>\n        /// Set the dictionary to be used for either Inflation or Deflation.\n        /// </summary>\n        /// <param name=\"dictionary\">The dictionary bytes to use.</param>\n        /// <returns>Z_OK if all goes well.</returns>\n        public int SetDictionary(byte[] dictionary)\n        {\n            if (istate != null)\n                return istate.SetDictionary(dictionary);\n\n            if (dstate != null)\n                return dstate.SetDictionary(dictionary);\n\n            throw new ZlibException(\"No Inflate or Deflate state!\");\n        }\n\n        // Flush as much pending output as possible. All deflate() output goes\n        // through this function so some applications may wish to modify it\n        // to avoid allocating a large strm->next_out buffer and copying into it.\n        // (See also read_buf()).\n        internal void flush_pending()\n        {\n            int len = dstate.pendingCount;\n\n            if (len > AvailableBytesOut)\n                len = AvailableBytesOut;\n            if (len == 0)\n                return;\n\n            if (dstate.pending.Length <= dstate.nextPending ||\n                OutputBuffer.Length <= NextOut ||\n                dstate.pending.Length < (dstate.nextPending + len) ||\n                OutputBuffer.Length < (NextOut + len))\n            {\n                throw new ZlibException(String.Format(\"Invalid State. (pending.Length={0}, pendingCount={1})\",\n                    dstate.pending.Length, dstate.pendingCount));\n            }\n\n            Array.Copy(dstate.pending, dstate.nextPending, OutputBuffer, NextOut, len);\n\n            NextOut             += len;\n            dstate.nextPending  += len;\n            TotalBytesOut       += len;\n            AvailableBytesOut   -= len;\n            dstate.pendingCount -= len;\n            if (dstate.pendingCount == 0)\n            {\n                dstate.nextPending = 0;\n            }\n        }\n\n        // Read a new buffer from the current input stream, update the adler32\n        // and total number of bytes read.  All deflate() input goes through\n        // this function so some applications may wish to modify it to avoid\n        // allocating a large strm->next_in buffer and copying from it.\n        // (See also flush_pending()).\n        internal int read_buf(byte[] buf, int start, int size)\n        {\n            int len = AvailableBytesIn;\n\n            if (len > size)\n                len = size;\n            if (len == 0)\n                return 0;\n\n            AvailableBytesIn -= len;\n\n            if (dstate.WantRfc1950HeaderBytes)\n            {\n                _Adler32 = Adler.Adler32(_Adler32, InputBuffer, NextIn, len);\n            }\n            Array.Copy(InputBuffer, NextIn, buf, start, len);\n            NextIn += len;\n            TotalBytesIn += len;\n            return len;\n        }\n\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/ZlibConstants.cs",
    "content": "// ZlibConstants.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.  \n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License. \n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs): \n// Time-stamp: <2009-November-03 18:50:19>\n//\n// ------------------------------------------------------------------\n//\n// This module defines constants used by the zlib class library.  This\n// code is derived from the jzlib implementation of zlib, but\n// significantly modified.  In keeping with the license for jzlib, the\n// copyright to that code is included here.\n//\n// ------------------------------------------------------------------\n// \n// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n// \n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n// \n// 2. Redistributions in binary form must reproduce the above copyright \n// notice, this list of conditions and the following disclaimer in \n// the documentation and/or other materials provided with the distribution.\n// \n// 3. The names of the authors may not be used to endorse or promote products\n// derived from this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// \n// -----------------------------------------------------------------------\n//\n// This program is based on zlib-1.1.3; credit to authors\n// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n// and contributors of zlib.\n//\n// -----------------------------------------------------------------------\n\n\nusing System;\n\nnamespace Ionic.Zlib\n{\n    /// <summary>\n    /// A bunch of constants used in the Zlib interface.\n    /// </summary>\n    public static class ZlibConstants\n    {\n        /// <summary>\n        /// The maximum number of window bits for the Deflate algorithm.\n        /// </summary>\n        public const int WindowBitsMax = 15; // 32K LZ77 window\n\n        /// <summary>\n        /// The default number of window bits for the Deflate algorithm.\n        /// </summary>\n        public const int WindowBitsDefault = WindowBitsMax;\n\n        /// <summary>\n        /// indicates everything is A-OK\n        /// </summary>\n        public const int Z_OK = 0;\n\n        /// <summary>\n        /// Indicates that the last operation reached the end of the stream.\n        /// </summary>\n        public const int Z_STREAM_END = 1;\n\n        /// <summary>\n        /// The operation ended in need of a dictionary. \n        /// </summary>\n        public const int Z_NEED_DICT = 2;\n\n        /// <summary>\n        /// There was an error with the stream - not enough data, not open and readable, etc.\n        /// </summary>\n        public const int Z_STREAM_ERROR = -2;\n\n        /// <summary>\n        /// There was an error with the data - not enough data, bad data, etc.\n        /// </summary>\n        public const int Z_DATA_ERROR = -3;\n\n        /// <summary>\n        /// There was an error with the working buffer.\n        /// </summary>\n        public const int Z_BUF_ERROR = -5;\n\n        /// <summary>\n        /// The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes.\n        /// </summary>\n#if SILVERLIGHT || NETCF        \n        public const int WorkingBufferSizeDefault = 8192;\n#else\n        public const int WorkingBufferSizeDefault = 16384; \n#endif\n        /// <summary>\n        /// The minimum size of the working buffer used in the ZlibCodec class.  Currently it is 128 bytes.\n        /// </summary>\n        public const int WorkingBufferSizeMin = 1024;\n    }\n\n}\n\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Iconic.ZLib/ZlibStream.cs",
    "content": "// ZlibStream.cs\n// ------------------------------------------------------------------\n//\n// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation.\n// All rights reserved.\n//\n// This code module is part of DotNetZip, a zipfile class library.\n//\n// ------------------------------------------------------------------\n//\n// This code is licensed under the Microsoft Public License.\n// See the file License.txt for the license details.\n// More info on: http://dotnetzip.codeplex.com\n//\n// ------------------------------------------------------------------\n//\n// last saved (in emacs):\n// Time-stamp: <2011-July-31 14:53:33>\n//\n// ------------------------------------------------------------------\n//\n// This module defines the ZlibStream class, which is similar in idea to\n// the System.IO.Compression.DeflateStream and\n// System.IO.Compression.GZipStream classes in the .NET BCL.\n//\n// ------------------------------------------------------------------\n\nusing System;\nusing System.IO;\n\nnamespace Ionic.Zlib\n{\n\n    /// <summary>\n    /// Represents a Zlib stream for compression or decompression.\n    /// </summary>\n    /// <remarks>\n    ///\n    /// <para>\n    /// The ZlibStream is a <see\n    /// href=\"http://en.wikipedia.org/wiki/Decorator_pattern\">Decorator</see> on a <see\n    /// cref=\"System.IO.Stream\"/>.  It adds ZLIB compression or decompression to any\n    /// stream.\n    /// </para>\n    ///\n    /// <para> Using this stream, applications can compress or decompress data via\n    /// stream <c>Read()</c> and <c>Write()</c> operations.  Either compresssion or\n    /// decompression can occur through either reading or writing. The compression\n    /// format used is ZLIB, which is documented in <see\n    /// href=\"http://www.ietf.org/rfc/rfc1950.txt\">IETF RFC 1950</see>, \"ZLIB Compressed\n    /// Data Format Specification version 3.3\". This implementation of ZLIB always uses\n    /// DEFLATE as the compression method.  (see <see\n    /// href=\"http://www.ietf.org/rfc/rfc1951.txt\">IETF RFC 1951</see>, \"DEFLATE\n    /// Compressed Data Format Specification version 1.3.\") </para>\n    ///\n    /// <para>\n    /// The ZLIB format allows for varying compression methods, window sizes, and dictionaries.\n    /// This implementation always uses the DEFLATE compression method, a preset dictionary,\n    /// and 15 window bits by default.\n    /// </para>\n    ///\n    /// <para>\n    /// This class is similar to <see cref=\"DeflateStream\"/>, except that it adds the\n    /// RFC1950 header and trailer bytes to a compressed stream when compressing, or expects\n    /// the RFC1950 header and trailer bytes when decompressing.  It is also similar to the\n    /// <see cref=\"GZipStream\"/>.\n    /// </para>\n    /// </remarks>\n    /// <seealso cref=\"DeflateStream\" />\n    /// <seealso cref=\"GZipStream\" />\n    public class ZlibStream : System.IO.Stream\n    {\n        internal ZlibBaseStream _baseStream;\n        bool _disposed;\n\n        /// <summary>\n        /// Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c>.\n        /// </summary>\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Compress</c>, the <c>ZlibStream</c>\n        ///   will use the default compression level. The \"captive\" stream will be\n        ///   closed when the <c>ZlibStream</c> is closed.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        /// This example uses a <c>ZlibStream</c> to compress a file, and writes the\n        /// compressed data to another file.\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".zlib\"))\n        ///     {\n        ///         using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".zlib\")\n        ///     Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress)\n        ///         Dim buffer As Byte() = New Byte(4096) {}\n        ///         Dim n As Integer = -1\n        ///         Do While (n &lt;&gt; 0)\n        ///             If (n &gt; 0) Then\n        ///                 compressor.Write(buffer, 0, n)\n        ///             End If\n        ///             n = input.Read(buffer, 0, buffer.Length)\n        ///         Loop\n        ///     End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode)\n            : this(stream, mode, CompressionLevel.Default, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c> and\n        ///   the specified <c>CompressionLevel</c>.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Decompress</c>, the level parameter is ignored.\n        ///   The \"captive\" stream will be closed when the <c>ZlibStream</c> is closed.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///   This example uses a <c>ZlibStream</c> to compress data from a file, and writes the\n        ///   compressed data to another file.\n        ///\n        /// <code>\n        /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        /// {\n        ///     using (var raw = System.IO.File.Create(fileToCompress + \".zlib\"))\n        ///     {\n        ///         using (Stream compressor = new ZlibStream(raw,\n        ///                                                   CompressionMode.Compress,\n        ///                                                   CompressionLevel.BestCompression))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        /// }\n        /// </code>\n        ///\n        /// <code lang=\"VB\">\n        /// Using input As Stream = File.OpenRead(fileToCompress)\n        ///     Using raw As FileStream = File.Create(fileToCompress &amp; \".zlib\")\n        ///         Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream to be read or written while deflating or inflating.</param>\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        /// <param name=\"level\">A tuning knob to trade speed for effectiveness.</param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level)\n            : this(stream, mode, level, false)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c>, and\n        ///   explicitly specify whether the captive stream should be left open after\n        ///   Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Compress</c>, the <c>ZlibStream</c> will use\n        ///   the default compression level.\n        /// </para>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive stream\n        ///   remain open after the deflation or inflation occurs.  By default, after\n        ///   <c>Close()</c> is called on the stream, the captive stream is also\n        ///   closed. In some cases this is not desired, for example if the stream is a\n        ///   <see cref=\"System.IO.MemoryStream\"/> that will be re-read after\n        ///   compression.  Specify true for the <paramref name=\"leaveOpen\"/> parameter to leave the stream\n        ///   open.\n        /// </para>\n        ///\n        /// <para>\n        /// See the other overloads of this constructor for example code.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written. This is called the\n        /// \"captive\" stream in other places in this documentation.</param>\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        /// <param name=\"leaveOpen\">true if the application would like the stream to remain\n        /// open after inflation/deflation.</param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode, bool leaveOpen)\n            : this(stream, mode, CompressionLevel.Default, leaveOpen)\n        {\n        }\n\n        /// <summary>\n        ///   Create a <c>ZlibStream</c> using the specified <c>CompressionMode</c>\n        ///   and the specified <c>CompressionLevel</c>, and explicitly specify\n        ///   whether the stream should be left open after Deflation or Inflation.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   This constructor allows the application to request that the captive\n        ///   stream remain open after the deflation or inflation occurs.  By\n        ///   default, after <c>Close()</c> is called on the stream, the captive\n        ///   stream is also closed. In some cases this is not desired, for example\n        ///   if the stream is a <see cref=\"System.IO.MemoryStream\"/> that will be\n        ///   re-read after compression.  Specify true for the <paramref\n        ///   name=\"leaveOpen\"/> parameter to leave the stream open.\n        /// </para>\n        ///\n        /// <para>\n        ///   When mode is <c>CompressionMode.Decompress</c>, the level parameter is\n        ///   ignored.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <example>\n        ///\n        /// This example shows how to use a ZlibStream to compress the data from a file,\n        /// and store the result into another file. The filestream remains open to allow\n        /// additional data to be written to it.\n        ///\n        /// <code>\n        /// using (var output = System.IO.File.Create(fileToCompress + \".zlib\"))\n        /// {\n        ///     using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))\n        ///     {\n        ///         using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true))\n        ///         {\n        ///             byte[] buffer = new byte[WORKING_BUFFER_SIZE];\n        ///             int n;\n        ///             while ((n= input.Read(buffer, 0, buffer.Length)) != 0)\n        ///             {\n        ///                 compressor.Write(buffer, 0, n);\n        ///             }\n        ///         }\n        ///     }\n        ///     // can write additional data to the output stream here\n        /// }\n        /// </code>\n        /// <code lang=\"VB\">\n        /// Using output As FileStream = File.Create(fileToCompress &amp; \".zlib\")\n        ///     Using input As Stream = File.OpenRead(fileToCompress)\n        ///         Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True)\n        ///             Dim buffer As Byte() = New Byte(4096) {}\n        ///             Dim n As Integer = -1\n        ///             Do While (n &lt;&gt; 0)\n        ///                 If (n &gt; 0) Then\n        ///                     compressor.Write(buffer, 0, n)\n        ///                 End If\n        ///                 n = input.Read(buffer, 0, buffer.Length)\n        ///             Loop\n        ///         End Using\n        ///     End Using\n        ///     ' can write additional data to the output stream here.\n        /// End Using\n        /// </code>\n        /// </example>\n        ///\n        /// <param name=\"stream\">The stream which will be read or written.</param>\n        ///\n        /// <param name=\"mode\">Indicates whether the ZlibStream will compress or decompress.</param>\n        ///\n        /// <param name=\"leaveOpen\">\n        /// true if the application would like the stream to remain open after\n        /// inflation/deflation.\n        /// </param>\n        ///\n        /// <param name=\"level\">\n        /// A tuning knob to trade speed for effectiveness. This parameter is\n        /// effective only when mode is <c>CompressionMode.Compress</c>.\n        /// </param>\n        public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen)\n        {\n            _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.ZLIB, leaveOpen);\n        }\n\n        #region Zlib properties\n\n        /// <summary>\n        /// This property sets the flush behavior on the stream.\n        /// Sorry, though, not sure exactly how to describe all the various settings.\n        /// </summary>\n        virtual public FlushType FlushMode\n        {\n            get { return (this._baseStream._flushMode); }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                this._baseStream._flushMode = value;\n            }\n        }\n\n        /// <summary>\n        ///   The size of the working buffer for the compression codec.\n        /// </summary>\n        ///\n        /// <remarks>\n        /// <para>\n        ///   The working buffer is used for all stream operations.  The default size is\n        ///   1024 bytes. The minimum size is 128 bytes. You may get better performance\n        ///   with a larger buffer.  Then again, you might not.  You would have to test\n        ///   it.\n        /// </para>\n        ///\n        /// <para>\n        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the\n        ///   stream. If you try to set it afterwards, it will throw.\n        /// </para>\n        /// </remarks>\n        public int BufferSize\n        {\n            get\n            {\n                return this._baseStream._bufferSize;\n            }\n            set\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                if (this._baseStream._workingBuffer != null)\n                    throw new ZlibException(\"The working buffer is already set.\");\n                if (value < ZlibConstants.WorkingBufferSizeMin)\n                    throw new ZlibException(String.Format(\"Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.\", value, ZlibConstants.WorkingBufferSizeMin));\n                this._baseStream._bufferSize = value;\n            }\n        }\n\n        /// <summary> Returns the total number of bytes input so far.</summary>\n        virtual public long TotalIn\n        {\n            get { return this._baseStream._z.TotalBytesIn; }\n        }\n\n        /// <summary> Returns the total number of bytes output so far.</summary>\n        virtual public long TotalOut\n        {\n            get { return this._baseStream._z.TotalBytesOut; }\n        }\n\n        #endregion\n\n        #region System.IO.Stream methods\n\n        /// <summary>\n        ///   Dispose the stream.\n        /// </summary>\n        /// <remarks>\n        ///   <para>\n        ///     This may or may not result in a <c>Close()</c> call on the captive\n        ///     stream.  See the constructors that have a <c>leaveOpen</c> parameter\n        ///     for more information.\n        ///   </para>\n        ///   <para>\n        ///     This method may be invoked in two distinct scenarios.  If disposing\n        ///     == true, the method has been called directly or indirectly by a\n        ///     user's code, for example via the public Dispose() method. In this\n        ///     case, both managed and unmanaged resources can be referenced and\n        ///     disposed.  If disposing == false, the method has been called by the\n        ///     runtime from inside the object finalizer and this method should not\n        ///     reference other objects; in that case only unmanaged resources must\n        ///     be referenced or disposed.\n        ///   </para>\n        /// </remarks>\n        /// <param name=\"disposing\">\n        ///   indicates whether the Dispose method was invoked by user code.\n        /// </param>\n        protected override void Dispose(bool disposing)\n        {\n            try\n            {\n                if (!_disposed)\n                {\n                    if (disposing && (this._baseStream != null))\n                        this._baseStream.Close();\n                    _disposed = true;\n                }\n            }\n            finally\n            {\n                base.Dispose(disposing);\n            }\n        }\n\n\n        /// <summary>\n        /// Indicates whether the stream can be read.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports reading.\n        /// </remarks>\n        public override bool CanRead\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                return _baseStream._stream.CanRead;\n            }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream supports Seek operations.\n        /// </summary>\n        /// <remarks>\n        /// Always returns false.\n        /// </remarks>\n        public override bool CanSeek\n        {\n            get { return false; }\n        }\n\n        /// <summary>\n        /// Indicates whether the stream can be written.\n        /// </summary>\n        /// <remarks>\n        /// The return value depends on whether the captive stream supports writing.\n        /// </remarks>\n        public override bool CanWrite\n        {\n            get\n            {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n                return _baseStream._stream.CanWrite;\n            }\n        }\n\n        /// <summary>\n        /// Flush the stream.\n        /// </summary>\n        public override void Flush()\n        {\n            if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n            _baseStream.Flush();\n        }\n\n        /// <summary>\n        /// Reading this property always throws a <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        public override long Length\n        {\n            get { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        ///   The position of the stream pointer.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Setting this property always throws a <see\n        ///   cref=\"NotSupportedException\"/>. Reading will return the total bytes\n        ///   written out, if used in writing, or the total bytes read in, if used in\n        ///   reading.  The count may refer to compressed bytes or uncompressed bytes,\n        ///   depending on how you've used the stream.\n        /// </remarks>\n        public override long Position\n        {\n            get\n            {\n                if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Writer)\n                    return this._baseStream._z.TotalBytesOut;\n                if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Reader)\n                    return this._baseStream._z.TotalBytesIn;\n                return 0;\n            }\n\n            set { throw new NotSupportedException(); }\n        }\n\n        /// <summary>\n        /// Read data from the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   If you wish to use the <c>ZlibStream</c> to compress data while reading,\n        ///   you can create a <c>ZlibStream</c> with <c>CompressionMode.Compress</c>,\n        ///   providing an uncompressed data stream.  Then call <c>Read()</c> on that\n        ///   <c>ZlibStream</c>, and the data read will be compressed.  If you wish to\n        ///   use the <c>ZlibStream</c> to decompress data while reading, you can create\n        ///   a <c>ZlibStream</c> with <c>CompressionMode.Decompress</c>, providing a\n        ///   readable compressed data stream.  Then call <c>Read()</c> on that\n        ///   <c>ZlibStream</c>, and the data will be decompressed as it is read.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>ZlibStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but\n        ///   not both.\n        /// </para>\n        ///\n        /// </remarks>\n        ///\n        /// <param name=\"buffer\">\n        /// The buffer into which the read data should be placed.</param>\n        ///\n        /// <param name=\"offset\">\n        /// the offset within that data array to put the first byte read.</param>\n        ///\n        /// <param name=\"count\">the number of bytes to read.</param>\n        ///\n        /// <returns>the number of bytes read</returns>\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n            return _baseStream.Read(buffer, offset, count);\n        }\n\n        /// <summary>\n        /// Calling this method always throws a <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        /// <param name=\"offset\">\n        ///   The offset to seek to....\n        ///   IF THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        /// <param name=\"origin\">\n        ///   The reference specifying how to apply the offset....  IF\n        ///   THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        ///\n        /// <returns>nothing. This method always throws.</returns>\n        public override long Seek(long offset, System.IO.SeekOrigin origin)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Calling this method always throws a <see cref=\"NotSupportedException\"/>.\n        /// </summary>\n        /// <param name=\"value\">\n        ///   The new value for the stream length....  IF\n        ///   THIS METHOD ACTUALLY DID ANYTHING.\n        /// </param>\n        public override void SetLength(long value)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Write data to the stream.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///\n        /// <para>\n        ///   If you wish to use the <c>ZlibStream</c> to compress data while writing,\n        ///   you can create a <c>ZlibStream</c> with <c>CompressionMode.Compress</c>,\n        ///   and a writable output stream.  Then call <c>Write()</c> on that\n        ///   <c>ZlibStream</c>, providing uncompressed data as input.  The data sent to\n        ///   the output stream will be the compressed form of the data written.  If you\n        ///   wish to use the <c>ZlibStream</c> to decompress data while writing, you\n        ///   can create a <c>ZlibStream</c> with <c>CompressionMode.Decompress</c>, and a\n        ///   writable output stream.  Then call <c>Write()</c> on that stream,\n        ///   providing previously compressed data. The data sent to the output stream\n        ///   will be the decompressed form of the data written.\n        /// </para>\n        ///\n        /// <para>\n        ///   A <c>ZlibStream</c> can be used for <c>Read()</c> or <c>Write()</c>, but not both.\n        /// </para>\n        /// </remarks>\n        /// <param name=\"buffer\">The buffer holding data to write to the stream.</param>\n        /// <param name=\"offset\">the offset within that data array to find the first byte to write.</param>\n        /// <param name=\"count\">the number of bytes to write.</param>\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n                if (_disposed) throw new ObjectDisposedException(\"ZlibStream\");\n            _baseStream.Write(buffer, offset, count);\n        }\n        #endregion\n\n\n        /// <summary>\n        ///   Compress a string into a byte array using ZLIB.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"ZlibStream.UncompressString(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"ZlibStream.UncompressString(byte[])\"/>\n        /// <seealso cref=\"ZlibStream.CompressBuffer(byte[])\"/>\n        /// <seealso cref=\"GZipStream.CompressString(string)\"/>\n        ///\n        /// <param name=\"s\">\n        ///   A string to compress.  The string will first be encoded\n        ///   using UTF8, then compressed.\n        /// </param>\n        ///\n        /// <returns>The string in compressed form</returns>\n        public static byte[] CompressString(String s)\n        {\n            using (var ms = new MemoryStream())\n            {\n                Stream compressor =\n                    new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression);\n                ZlibBaseStream.CompressString(s, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Compress a byte array into a new byte array using ZLIB.\n        /// </summary>\n        ///\n        /// <remarks>\n        ///   Uncompress it with <see cref=\"ZlibStream.UncompressBuffer(byte[])\"/>.\n        /// </remarks>\n        ///\n        /// <seealso cref=\"ZlibStream.CompressString(string)\"/>\n        /// <seealso cref=\"ZlibStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"b\">\n        /// A buffer to compress.\n        /// </param>\n        ///\n        /// <returns>The data in compressed form</returns>\n        public static byte[] CompressBuffer(byte[] b)\n        {\n            using (var ms = new MemoryStream())\n            {\n                Stream compressor =\n                    new ZlibStream( ms, CompressionMode.Compress, CompressionLevel.BestCompression );\n\n                ZlibBaseStream.CompressBuffer(b, compressor);\n                return ms.ToArray();\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a ZLIB-compressed byte array into a single string.\n        /// </summary>\n        ///\n        /// <seealso cref=\"ZlibStream.CompressString(String)\"/>\n        /// <seealso cref=\"ZlibStream.UncompressBuffer(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing ZLIB-compressed data.\n        /// </param>\n        ///\n        /// <returns>The uncompressed string</returns>\n        public static String UncompressString(byte[] compressed)\n        {\n            using (var input = new MemoryStream(compressed))\n            {\n                Stream decompressor =\n                    new ZlibStream(input, CompressionMode.Decompress);\n\n                return ZlibBaseStream.UncompressString(compressed, decompressor);\n            }\n        }\n\n\n        /// <summary>\n        ///   Uncompress a ZLIB-compressed byte array into a byte array.\n        /// </summary>\n        ///\n        /// <seealso cref=\"ZlibStream.CompressBuffer(byte[])\"/>\n        /// <seealso cref=\"ZlibStream.UncompressString(byte[])\"/>\n        ///\n        /// <param name=\"compressed\">\n        ///   A buffer containing ZLIB-compressed data.\n        /// </param>\n        ///\n        /// <returns>The data in uncompressed form</returns>\n        public static byte[] UncompressBuffer(byte[] compressed)\n        {\n            using (var input = new MemoryStream(compressed))\n            {\n                Stream decompressor =\n                    new ZlibStream( input, CompressionMode.Decompress );\n\n                return ZlibBaseStream.UncompressBuffer(compressed, decompressor);\n            }\n        }\n\n    }\n\n\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/InvalidQueryException.cs",
    "content": "﻿/*****************************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 5/2/09 -\n * \n * Refactored as standard exception: \n * \n *      - derives from Application\n *      - has standard exception constructors\n *      - beyond the type name, it looks nothing like the original\n *****************************************************************/\nusing System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// custom exception for handling bad queries\n    /// </summary>\n    public class InvalidQueryException : Exception\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public InvalidQueryException()\n            : this(\"Invalid query: reason not specified.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public InvalidQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public InvalidQueryException(string message, Exception inner)\n            : base(message, inner) { }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/LinqExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class LinqExtensions\n    {\n        /// <summary>\n        /// Takes a single element and returns an IEnumerable of just that element.\n        /// </summary>\n        /// <typeparam name=\"T\">What kind of element we're enumerating</typeparam>\n        /// <param name=\"oneOff\">The one element in the resulting enumeration</param>\n        /// <returns>An IEnumerable that has one element (consisting of the oneOff parameter)</returns>\n        public static IEnumerable<T> ToEnumerable<T>(this T oneOff)\n        {\n            yield return oneOff;\n        }\n\n        public static TTo ItemCast<TFrom, TTo>(this TFrom item, TTo defaultValue)\n            where TTo: class\n        {\n            if (item is TTo)\n                return item as TTo;\n            else\n                return defaultValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Media.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public class Media\n    {\n        /// <summary>\n        /// Media contents in bytes\n        /// </summary>\n        public byte[] Data { get; set; }\n\n        /// <summary>\n        /// Media name\n        /// </summary>\n        public string FileName { get; set; }\n\n        /// <summary>\n        /// Mime content type\n        /// </summary>\n        public MediaContentType ContentType { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/MediaType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum MediaContentType\n    {\n        /// <summary>\n        /// image/gif\n        /// </summary>\n        Gif,\n\n        /// <summary>\n        /// image/jpeg\n        /// </summary>\n        Jpeg,\n\n        /// <summary>\n        /// image/png\n        /// </summary>\n        Png,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/MethodCallExpressionTypeFinder.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Common\n{\n    internal class MethodCallExpressionTypeFinder : ExpressionVisitor\n    {\n        private Type genericType;\n\n        /// <summary>\n        /// Gets the underlying type of the whole method call expression\n        /// </summary>\n        /// <param name=\"exp\">MethodCallExpression</param>\n        /// <returns>Type</returns>\n        public Type GetGenericType(Expression exp)\n        {\n            Visit(exp);\n            return genericType;\n        }\n\n\n        /// <summary>\n        /// Sets the expression type when found\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (expression.Arguments.Count > 0)\n                genericType = expression.Method.GetGenericArguments()[0];\n\n            // look at extension source to see if there is an inner type\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CharExtensions.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    public static class CharExtensions\n    {\n        internal const char HighSurrogateStart = '\\ud800';\n        internal const char HighSurrogateEnd = '\\udbff';\n        internal const char LowSurrogateStart = '\\udc00';\n        internal const char LowSurrogateEnd = '\\udfff';\n\n        public static bool IsHighSurrogate(this char c)\n        {\n            return ((c >= HighSurrogateStart) && (c <= HighSurrogateEnd));\n        }\n\n        public static bool IsLowSurrogate(this char c)\n        {\n            return ((c >= LowSurrogateStart) && (c <= LowSurrogateEnd));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CodeCharts/Lower.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"Lower.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides safe character positions for the lower section of the UTF code tables.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application.CodeCharts\n{\n    using System.Collections;\n\n    /// <summary>\n    /// Provides safe character positions for the lower section of the UTF code tables.\n    /// </summary>\n    internal static class Lower\n    {\n        /// <summary>\n        /// Determines if the specified flag is set.\n        /// </summary>\n        /// <param name=\"flags\">The value to check.</param>\n        /// <param name=\"flagToCheck\">The flag to check for.</param>\n        /// <returns>true if the flag is set, otherwise false.</returns>\n        public static bool IsFlagSet(LowerCodeCharts flags, LowerCodeCharts flagToCheck)\n        {\n            return (flags & flagToCheck) != 0;\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Basic Latin code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable BasicLatin()\n        {\n            for (int i = 0x0020; i <= 0x007E; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Latin 1 Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Latin1Supplement()\n        {\n            for (int i = 0x00A1; i <= 0x00FF; i++)\n            {\n                if (i == 0x00AD)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Latin Extended A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable LatinExtendedA()\n        {\n            for (int i = 0x0100; i <= 0x17F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Latin Extended B code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable LatinExtendedB()\n        {\n            for (int i = 0x0180; i <= 0x024F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the IPA Extensions code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable IpaExtensions()\n        {\n            for (int i = 0x0250; i <= 0x2AF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Spacing Modifiers code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SpacingModifierLetters()\n        {\n            for (int i = 0x02B0; i <= 0x2FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Combining Diacritical Marks code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CombiningDiacriticalMarks()\n        {\n            for (int i = 0x0300; i <= 0x36F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Greek and Coptic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable GreekAndCoptic()\n        {\n            for (int i = 0x0370; i <= 0x03FF; i++)\n            {\n                if (i == 0x378 ||\n                    i == 0x379 ||\n                    (i >= 0x37F && i <= 0x383) ||\n                    i == 0x38B ||\n                    i == 0x38D ||\n                    i == 0x3A2)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cyrillic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Cyrillic()\n        {\n            for (int i = 0x0400; i <= 0x04FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cyrillic Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CyrillicSupplement()\n        {\n            for (int i = 0x0500; i <= 0x0525; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Armenian code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>        \n        public static IEnumerable Armenian()\n        {\n            for (int i = 0x0531; i <= 0x058A; i++)\n            {\n                if (i == 0x0557 ||\n                    i == 0x0558 ||\n                    i == 0x0560 ||\n                    i == 0x0588)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hebrew code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Hebrew()\n        {\n            for (int i = 0x0591; i <= 0x05F4; i++)\n            {\n                if ((i >= 0x05C8 && i <= 0x05CF) ||\n                    (i >= 0x05EB && i <= 0x05EF))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Arabic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Arabic()\n        {\n            for (int i = 0x0600; i <= 0x06FF; i++)\n            {\n                if (i == 0x0604 ||\n                    i == 0x0605 ||\n                    i == 0x061C ||\n                    i == 0x061d ||\n                    i == 0x0620 ||\n                    i == 0x065F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Syriac code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Syriac()\n        {\n            for (int i = 0x0700; i <= 0x074F; i++)\n            {\n                if (i == 0x070E ||\n                    i == 0x074B ||\n                    i == 0x074C)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Arabic Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable ArabicSupplement()\n        {\n            for (int i = 0x0750; i <= 0x077F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Thaana code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Thaana()\n        {\n            for (int i = 0x0780; i <= 0x07B1; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Nko code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Nko()\n        {\n            for (int i = 0x07C0; i <= 0x07FA; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Samaritan code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Samaritan()\n        {\n            for (int i = 0x0800; i <= 0x083E; i++)\n            {\n                if (i == 0x082E ||\n                    i == 0x082F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Devenagari code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Devanagari()\n        {\n            for (int i = 0x0900; i <= 0x097F; i++)\n            {\n                if (i == 0x093A ||\n                    i == 0x093B ||\n                    i == 0x094F ||\n                    i == 0x0956 ||\n                    i == 0x0957 ||\n                    (i >= 0x0973 && i <= 0x0978))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Bengali code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Bengali()\n        {\n            for (int i = 0x0981; i <= 0x09FB; i++)\n            {\n                if (i == 0x0984 ||\n                    i == 0x098D || \n                    i == 0x098E ||\n                    i == 0x0991 ||\n                    i == 0x0992 ||\n                    i == 0x09A9 || \n                    i == 0x09B1 ||\n                    i == 0x09B3 ||\n                    i == 0x09B4 ||\n                    i == 0x09B5 ||\n                    i == 0x09BA ||\n                    i == 0x09BB ||\n                    i == 0x09C5 ||\n                    i == 0x09C6 ||\n                    i == 0x09C9 ||\n                    i == 0x09CA ||\n                    (i >= 0x09CF && i <= 0x09D6) ||\n                    (i >= 0x09D8 && i <= 0x09DB) ||\n                    i == 0x09DE ||\n                    i == 0x09E4 ||\n                    i == 0x09E5)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Gurmukhi code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Gurmukhi()\n        {\n            for (int i = 0x0A01; i <= 0x0A75; i++)\n            {\n                if (i == 0x0A04 ||\n                    (i >= 0x0A0B && i <= 0x0A0E) ||\n                    i == 0x0A11 ||\n                    i == 0x0A12 ||\n                    i == 0x0A29 ||\n                    i == 0x0A31 ||\n                    i == 0x0A34 ||\n                    i == 0x0A37 ||\n                    i == 0x0A3A ||\n                    i == 0x0A3B ||\n                    i == 0x0A3D ||\n                    (i >= 0x0A43 && i <= 0x0A46) ||\n                    i == 0x0A49 ||\n                    i == 0x0A4A ||\n                    (i >= 0x0A4E && i <= 0x0A50) ||\n                    (i >= 0x0A52 && i <= 0x0A58) ||\n                    i == 0x0A5D ||\n                    (i >= 0x0A5F && i <= 0x0A65))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Gujarati code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Gujarati()\n        {\n            for (int i = 0x0A81; i <= 0x0AF1; i++)\n            {\n                if (i == 0x0A84 ||\n                    i == 0x0A8E ||\n                    i == 0x0A92 ||\n                    i == 0x0AA9 ||\n                    i == 0x0AB1 ||\n                    i == 0x0AB4 ||\n                    i == 0x0ABA ||\n                    i == 0x0ABB ||\n                    i == 0x0AC6 ||\n                    i == 0x0ACA ||\n                    i == 0x0ACE ||\n                    i == 0x0ACF ||\n                    (i >= 0xAD1 && i <= 0x0ADF) ||\n                    i == 0x0AE4 ||\n                    i == 0x0AE5 ||\n                    i == 0x0AF0)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Oriya code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Oriya()\n        {\n            for (int i = 0x0B01; i <= 0x0B71; i++)\n            {\n                if (i == 0x0B04 ||\n                    i == 0x0B0D ||\n                    i == 0x0B0E ||\n                    i == 0x0B11 ||\n                    i == 0x0B12 ||\n                    i == 0x0B29 ||\n                    i == 0x0B31 ||\n                    i == 0x0B34 ||\n                    i == 0x0B3A ||\n                    i == 0x0B3B ||\n                    i == 0x0B45 ||\n                    i == 0x0B46 ||\n                    i == 0x0B49 ||\n                    i == 0x0B4A ||\n                    (i >= 0x0B4E && i <= 0x0B55) ||\n                    (i >= 0x0B58 && i <= 0x0B5B) ||\n                    i == 0x0B5E ||\n                    i == 0x0B64 ||\n                    i == 0x0B65)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tamil code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Tamil()\n        {\n            for (int i = 0x0B82; i <= 0x0BFA; i++)\n            {\n                if (i == 0x0B84 ||\n                    i == 0x0B8B ||\n                    i == 0x0B8C ||\n                    i == 0x0B8D ||\n                    i == 0x0B91 ||\n                    i == 0x0B96 ||\n                    i == 0x0B97 ||\n                    i == 0x0B98 ||\n                    i == 0x0B9B ||\n                    i == 0x0B9D ||\n                    i == 0x0BA0 ||\n                    i == 0x0BA1 ||\n                    i == 0x0BA2 ||\n                    i == 0x0BA5 ||\n                    i == 0x0BA6 ||\n                    i == 0x0BA7 ||\n                    i == 0x0BAB ||\n                    i == 0x0BAC ||\n                    i == 0x0BAD ||\n                    (i >= 0x0BBA && i <= 0x0BBD) ||\n                    i == 0x0BC3 ||\n                    i == 0x0BC4 ||\n                    i == 0x0BC5 ||\n                    i == 0x0BC9 ||\n                    i == 0x0BCE ||\n                    i == 0x0BCF ||\n                    (i >= 0x0BD1 && i <= 0x0BD6) ||                    \n                    (i >= 0x0BD8 && i <= 0x0BE5))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Telugu code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Telugu()\n        {\n            for (int i = 0x0C01; i <= 0x0C7F; i++)\n            {\n                if (i == 0x0C04 ||\n                    i == 0x0C0D ||\n                    i == 0x0C11 ||\n                    i == 0x0C29 ||\n                    i == 0x0C34 ||\n                    i == 0x0C3A ||\n                    i == 0x0C3B ||\n                    i == 0x0C3C ||\n                    i == 0x0C45 ||\n                    i == 0x0C49 ||\n                    (i >= 0x0C4E && i <= 0x0C54) ||\n                    i == 0x0C57 ||\n                    (i >= 0x0C5A && i <= 0x0C5F) ||\n                    i == 0x0C64 ||\n                    i == 0x0C65 ||\n                    (i >= 0x0C70 && i <= 0x0C77))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Kannada code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>        \n        public static IEnumerable Kannada()\n        {\n            for (int i = 0x0C82; i <= 0x0CF2; i++)\n            {\n                if (i == 0x0C84 ||\n                    i == 0x0C8D || \n                    i == 0x0C91 ||\n                    i == 0x0CA9 ||\n                    i == 0x0CB4 ||\n                    i == 0x0CBA ||\n                    i == 0x0CBB ||\n                    i == 0x0CC5 ||\n                    i == 0x0CC9 || \n                    (i >= 0x0CCE && i <= 0x0CD4) ||\n                    (i >= 0x0CD7 && i <= 0x0CDD) ||\n                    i == 0x0CDF ||\n                    i == 0x0CE4 ||\n                    i == 0x0CE5 ||\n                    i == 0x0CF0)\n                {\n                    continue;\n                }\n                \n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Malayalam code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Malayalam()\n        {\n            for (int i = 0x0D02; i <= 0x0D7F; i++)\n            {\n                if (i == 0x0D04 ||\n                    i == 0x0D0D ||\n                    i == 0x0D11 ||\n                    i == 0x0D29 ||\n                    i == 0x0D3A ||\n                    i == 0x0D3B ||\n                    i == 0x0D3C ||\n                    i == 0x0D45 ||\n                    i == 0x0D49 ||\n                    (i >= 0x0D4E && i <= 0x0D56) ||\n                    (i >= 0x0D58 && i <= 0x0D5F) ||\n                    i == 0x0D64 ||\n                    i == 0x0D65 ||\n                    i == 0x0D76 ||\n                    i == 0x0D77 ||\n                    i == 0x0D78)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Sinhala code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Sinhala()\n        {\n            for (int i = 0x0D82; i <= 0x0DF4; i++)\n            {\n                if (i == 0x0D84 ||\n                    i == 0x0D97 ||\n                    i == 0X0D98 ||\n                    i == 0x0D99 ||\n                    i == 0x0DB2 ||\n                    i == 0x0DBC ||\n                    i == 0x0DBE ||\n                    i == 0x0DBF ||\n                    i == 0x0DC7 ||\n                    i == 0x0DC8 ||\n                    i == 0x0DC9 ||\n                    (i >= 0x0DCB && i <= 0x0DCE) ||\n                    i == 0x0DD5 ||\n                    i == 0x0DD7 ||\n                    (i >= 0x0DE0 && i <= 0x0DF1))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Thai code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Thai()\n        {\n            for (int i = 0x0E01; i <= 0x0E5B; i++)\n            {\n                if (i >= 0x0E3B && i <= 0x0E3E)\n                {\n                    continue;\n                }\n                \n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Lao code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Lao()\n        {\n            for (int i = 0x0E81; i <= 0x0EDD; i++)\n            {\n                if (i == 0x0E83 ||\n                    i == 0x0E85 ||\n                    i == 0x0E86 ||\n                    i == 0x0E89 ||\n                    i == 0x0E8B ||\n                    i == 0x0E8C ||\n                    (i >= 0x0E8E && i <= 0x0E93) ||\n                    i == 0x0E98 ||\n                    i == 0x0EA0 ||\n                    i == 0x0EA4 ||\n                    i == 0x0EA6 ||\n                    i == 0x0EA8 ||\n                    i == 0x0EA9 ||\n                    i == 0x0EAC ||\n                    i == 0x0EBA ||\n                    i == 0x0EBE ||\n                    i == 0x0EBF ||\n                    i == 0x0EC5 ||\n                    i == 0x0EC7 ||\n                    i == 0x0ECE ||\n                    i == 0x0ECF ||\n                    i == 0x0EDA ||\n                    i == 0x0EDB)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tibetan code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Tibetan()\n        {\n            for (int i = 0x0F00; i <= 0x0FD8; i++)\n            {\n                if (i == 0x0F48 ||\n                    (i >= 0x0F6D && i <= 0x0F70) ||\n                    (i >= 0x0F8C && i <= 0x0F8F) ||\n                    i == 0x0F98 ||\n                    i == 0x0FBD ||\n                    i == 0x0FCD)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CodeCharts/LowerMiddle.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"LowerMiddle.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides safe character positions for the lower middle section of the UTF code tables.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application.CodeCharts\n{\n    using System.Collections;\n\n    /// <summary>\n    /// Provides safe character positions for the lower middle section of the UTF code tables.\n    /// </summary>\n    internal static class LowerMiddle\n    {\n        /// <summary>\n        /// Determines if the specified flag is set.\n        /// </summary>\n        /// <param name=\"flags\">The value to check.</param>\n        /// <param name=\"flagToCheck\">The flag to check for.</param>\n        /// <returns>true if the flag is set, otherwise false.</returns>\n        public static bool IsFlagSet(LowerMidCodeCharts flags, LowerMidCodeCharts flagToCheck)\n        {\n            return (flags & flagToCheck) != 0;\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Myanmar code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Myanmar()\n        {\n            for (int i = 0x1000; i <= 0x109F; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Georgian code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>        \n        public static IEnumerable Georgian()\n        {\n            for (int i = 0x10A0; i <= 0x10FC; i++)\n            {\n                if (i >= 0x10C6 && i <= 0x10CF)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hangul Jamo code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable HangulJamo()\n        {\n            for (int i = 0x1100; i <= 0x11FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Ethiopic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable Ethiopic()\n        {\n            for (int i = 0x1200; i <= 0x137C; i++)\n            {\n                if (i == 0x1249 ||\n                    i == 0x124E ||\n                    i == 0x124F ||\n                    i == 0x1257 ||\n                    i == 0x1259 ||\n                    i == 0x125E ||\n                    i == 0x125F ||\n                    i == 0x1289 ||\n                    i == 0x128E ||\n                    i == 0x128F ||\n                    i == 0x12B1 ||\n                    i == 0x12B6 ||\n                    i == 0x12B7 ||\n                    i == 0x12BF ||\n                    i == 0x12C1 ||\n                    i == 0x12C6 ||\n                    i == 0x12C7 ||\n                    i == 0x12D7 ||\n                    i == 0x1311 ||\n                    i == 0x1316 ||\n                    i == 0x1317 ||\n                    (i >= 0x135B && i <= 0x135E))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Ethiopic Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable EthiopicSupplement()\n        {\n            for (int i = 0x1380; i <= 0x1399; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cherokee code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable Cherokee()\n        {\n            for (int i = 0x13A0; i <= 0x13F4; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Unified Canadian Aboriginal Syllabic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable UnifiedCanadianAboriginalSyllabics()\n        {\n            for (int i = 0x1400; i <= 0x167F; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Ogham code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Ogham()\n        {\n            for (int i = 0x1680; i <= 0x169C; i++)\n            {\n                yield return i;\n            }              \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Runic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Runic()\n        {\n            for (int i = 0x16A0; i <= 0x16F0; i++)\n            {\n                yield return i;\n            }              \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tagalog code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Tagalog()\n        {\n            for (int i = 0x1700; i <= 0x1714; i++)\n            {\n                if (i == 0x170D)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }               \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hanunoo code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Hanunoo()\n        {\n            for (int i = 0x1720; i <= 0x1736; i++)\n            {\n                yield return i;\n            }             \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Buhid code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Buhid()\n        {\n            for (int i = 0x1740; i <= 0x1753; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tagbanwa code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Tagbanwa()\n        {\n            for (int i = 0x1760; i <= 0x1773; i++)\n            {\n                if (i == 0x176D ||\n                    i == 0x1771)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }                         \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Khmer code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Khmer()\n        {\n            for (int i = 0x1780; i <= 0x17F9; i++)\n            {\n                if (i == 0x17DE ||\n                    i == 0x17DF ||\n                    (i >= 0x17EA && i <= 0x17EF))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Mongolian code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns> \n        public static IEnumerable Mongolian()\n        {\n            for (int i = 0x1800; i <= 0x18AA; i++)\n            {\n                if (i == 0x180F ||\n                    (i >= 0x181A && i <= 0x181F) ||\n                    (i >= 0x1878 && i <= 0x187F))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Unified Canadian Aboriginal Syllabic Extended code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable UnifiedCanadianAboriginalSyllabicsExtended()\n        {\n            for (int i = 0x18B0; i <= 0x18F5; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Limbu code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable Limbu()\n        {\n            for (int i = 0x1900; i <= 0x194F; i++)\n            {\n                if (i == 0x191D ||\n                    i == 0x191E ||\n                    i == 0x191F ||\n                    (i >= 0x192C && i <= 0x192F) ||\n                    (i >= 0x193C && i <= 0x193F) ||\n                    i == 0x1941 ||\n                    i == 0x1942 ||\n                    i == 0x1943)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tai Le code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable TaiLe()\n        {\n            for (int i = 0x1950; i <= 0x1974; i++)\n            {\n                if (i == 0x196E ||\n                    i == 0x196F)\n                {\n                    continue;\n                }\n                \n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the New Tai Lue code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>          \n        public static IEnumerable NewTaiLue()\n        {\n            for (int i = 0x1980; i <= 0x19DF; i++)\n            {\n                if ((i >= 0x19AC && i <= 0x19AF) ||\n                    (i >= 0x19CA && i <= 0x19CF) ||\n                    (i >= 0x19DB && i <= 0x19DD))\n                {\n                    continue;\n                }\n\n                yield return i;            \n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Khmer Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable KhmerSymbols()\n        {\n            for (int i = 0x19E0; i <= 0x19FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Khmer Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable Buginese()\n        {\n            for (int i = 0x1A00; i <= 0x1A1F; i++)\n            {\n                if (i == 0x1A1C ||\n                    i == 0x1A1D)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tai Tham code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable TaiTham()\n        {\n            for (int i = 0x1A20; i <= 0x1AAD; i++)\n            {\n                if (i == 0x1A5F ||\n                    i == 0x1A7D ||\n                    i == 0x1A7E ||\n                    (i >= 0x1A8A && i <= 0x1A8F) ||\n                    (i >= 0x1A9A && i <= 0x1A9F))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Balinese code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable Balinese()\n        {\n            for (int i = 0x1B00; i <= 0x1B7C; i++)\n            {\n                if (i >= 0x1B4C && i <= 0x1B4F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Sudanese code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable Sudanese()\n        {\n            for (int i = 0x1B80; i <= 0x1BB9; i++)\n            {\n                if (i >= 0x1BAB && i <= 0x1BAD)\n                {\n                    continue;\n                }\n\n                yield return i;                \n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Lepcha code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>   \n        public static IEnumerable Lepcha()\n        {\n            for (int i = 0x1C00; i <= 0x1C4F; i++)\n            {\n                if ((i >= 0x1C38 && i <= 0x1C3A) ||\n                    (i >= 0x1C4A && i <= 0x1C4C))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Ol Chiki code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable OlChiki()\n        {\n            for (int i = 0x1C50; i <= 0x1C7F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Vedic Extensions code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable VedicExtensions()\n        {\n            for (int i = 0x1CD0; i <= 0x1CF2; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Phonetic Extensions code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable PhoneticExtensions()\n        {\n            for (int i = 0x1D00; i <= 0x1D7F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Phonetic Extensions Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable PhoneticExtensionsSupplement()\n        {\n            for (int i = 0x1D80; i <= 0x1DBF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Combining Diacritical Marks Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable CombiningDiacriticalMarksSupplement()\n        {\n            for (int i = 0x1DC0; i <= 0x1DFF; i++)\n            {\n                if (i >= 0x1DE7 && i <= 0x1DFC)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Latin Extended Addition code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>  \n        public static IEnumerable LatinExtendedAdditional()\n        {\n            for (int i = 0x1E00; i <= 0x1EFF; i++)\n            {\n                yield return i;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CodeCharts/Middle.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"Middle.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides safe character positions for the lower middle section of the UTF code tables.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application.CodeCharts\n{\n    using System.Collections;\n\n    /// <summary>\n    /// Provides safe character positions for the middle section of the UTF code tables.\n    /// </summary>\n    internal static class Middle\n    {\n        /// <summary>\n        /// Determines if the specified flag is set.\n        /// </summary>\n        /// <param name=\"flags\">The value to check.</param>\n        /// <param name=\"flagToCheck\">The flag to check for.</param>\n        /// <returns>true if the flag is set, otherwise false.</returns>\n        public static bool IsFlagSet(MidCodeCharts flags, MidCodeCharts flagToCheck)\n        {\n            return (flags & flagToCheck) != 0;\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Greek Extended code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable GreekExtended()\n        {\n            for (int i = 0x1F00; i <= 0x1FFE; i++)\n            {\n                if (i == 0x1F16 ||\n                    i == 0x1F17 ||\n                    i == 0x1F1E ||\n                    i == 0x1F1F ||\n                    i == 0x1F46 ||\n                    i == 0x1F47 ||\n                    i == 0x1F4E ||\n                    i == 0x1F4F ||\n                    i == 0x1F58 ||\n                    i == 0x1F5A ||\n                    i == 0x1F5C ||\n                    i == 0x1F5E ||\n                    i == 0x1F7E ||\n                    i == 0x1F7F ||\n                    i == 0x1FB5 ||\n                    i == 0x1FC5 ||\n                    i == 0x1FD4 ||\n                    i == 0x1FD5 ||\n                    i == 0x1FDC ||\n                    i == 0x1FF0 ||\n                    i == 0x1FF1 ||\n                    i == 0x1FF5)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the General Punctuation code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable GeneralPunctuation()\n        {\n            for (int i = 0x2000; i <= 0x206F; i++)\n            {\n                if (i >= 0x2065 && i <= 0x2069)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Superscripts and subscripts code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SuperscriptsAndSubscripts()\n        {\n            for (int i = 0x2070; i <= 0x2094; i++)\n            {\n                if (i == 0x2072 ||\n                    i == 0x2073 ||\n                    i == 0x208F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Currency Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CurrencySymbols()\n        {\n            for (int i = 0x20A0; i <= 0x20B8; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Combining Diacritrical Marks for Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CombiningDiacriticalMarksForSymbols()\n        {\n            for (int i = 0x20D0; i <= 0x20F0; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Letterlike Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable LetterlikeSymbols()\n        {\n            for (int i = 0x2100; i <= 0x214F; i++)\n            {\n                yield return i;\n            }\n        }\n    \n        /// <summary>\n        /// Provides the safe characters for the Number Forms code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable NumberForms()\n        {\n            for (int i = 0x2150; i <= 0x2189; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Arrows code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Arrows()\n        {\n            for (int i = 0x2190; i <= 0x21FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Mathematical Operators code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MathematicalOperators()\n        {\n            for (int i = 0x2200; i <= 0x22FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Miscellaneous Technical code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MiscellaneousTechnical()\n        {\n            for (int i = 0x2300; i <= 0x23E8; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Control Pictures code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable ControlPictures()\n        {\n            for (int i = 0x2400; i <= 0x2426; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the OCR code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable OpticalCharacterRecognition()\n        {\n            for (int i = 0x2440; i <= 0x244A; i++)\n            {\n                yield return i;\n            }        \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Enclosed Alphanumerics code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable EnclosedAlphanumerics()\n        {\n            for (int i = 0x2460; i <= 0x24FF; i++)\n            {\n                yield return i;\n            }                \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Box Drawing code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable BoxDrawing()\n        {\n            for (int i = 0x2500; i <= 0x257F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Block Elements code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable BlockElements()\n        {\n            for (int i = 0x2580; i <= 0x259F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Geometric Shapes code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable GeometricShapes()\n        {\n            for (int i = 0x25A0; i <= 0x25FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Miscellaneous Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MiscellaneousSymbols()\n        {\n            for (int i = 0x2600; i <= 0x26FF; i++)\n            {\n                if (i == 0x26CE || \n                    i == 0x26E2 ||\n                    (i >= 0x26E4 && i <= 0x26E7))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Dingbats code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Dingbats()\n        {\n            for (int i = 0x2701; i <= 0x27BE; i++)\n            {\n                if (i == 0x2705 ||\n                    i == 0x270A ||\n                    i == 0x270B ||\n                    i == 0x2728 ||\n                    i == 0x274C ||\n                    i == 0x274E ||\n                    i == 0x2753 ||\n                    i == 0x2754 ||\n                    i == 0x2755 ||\n                    i == 0x275F ||\n                    i == 0x2760 ||\n                    i == 0x2795 ||\n                    i == 0x2796 ||\n                    i == 0x2797 ||\n                    i == 0x27B0)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n        \n        /// <summary>\n        /// Provides the safe characters for the Miscellaneous Mathematical Symbols A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MiscellaneousMathematicalSymbolsA()\n        {\n            for (int i = 0x27C0; i <= 0x27EF; i++)\n            {\n                if (i == 0x27CB ||\n                    i == 0x27CD ||\n                    i == 0x27CE ||\n                    i == 0x27CF)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Supplemental Arrows A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SupplementalArrowsA()\n        {\n            for (int i = 0x27F0; i <= 0x27FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Braille Patterns code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable BraillePatterns()\n        {\n            for (int i = 0x2800; i <= 0x28FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Supplemental Arrows B code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SupplementalArrowsB()\n        {\n            for (int i = 0x2900; i <= 0x297F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Miscellaneous Mathematical Symbols B code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MiscellaneousMathematicalSymbolsB()\n        {\n            for (int i = 0x2980; i <= 0x29FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Supplemental Mathematical Operators code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SupplementalMathematicalOperators()\n        {\n            for (int i = 0x2A00; i <= 0x2AFF; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Miscellaneous Symbols and Arrows code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MiscellaneousSymbolsAndArrows()\n        {\n            for (int i = 0x2B00; i <= 0x2B59; i++)\n            {\n                if (i == 0x2B4D || \n                    i == 0x2B4E ||\n                    i == 0x2B4F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Glagolitic code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Glagolitic()\n        {\n            for (int i = 0x2C00; i <= 0x2C5E; i++)\n            {\n                if (i == 0x2C2F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Latin Extended C code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable LatinExtendedC()\n        {\n            for (int i = 0x2C60; i <= 0x2C7F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Coptic table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Coptic()\n        {\n            for (int i = 0x2C80; i <= 0x2CFF; i++)\n            {\n                if (i >= 0x2CF2 && i <= 0x2CF8)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Georgian Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable GeorgianSupplement()\n        {\n            for (int i = 0x2D00; i <= 0x2D25; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Tifinagh code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Tifinagh()\n        {\n            for (int i = 0x2D30; i <= 0x2D6F; i++)\n            {\n                if (i >= 0x2D66 && i <= 0x2D6E)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Ethiopic Extended code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable EthiopicExtended()\n        {\n            for (int i = 0x2D80; i <= 0x2DDE; i++)\n            {\n                if ((i >= 0x2D97 && i <= 0x2D9F) ||\n                    i == 0x2DA7 ||\n                    i == 0x2DAF ||\n                    i == 0x2DB7 ||\n                    i == 0x2DBF ||\n                    i == 0x2DC7 ||\n                    i == 0x2DCF ||\n                    i == 0x2DD7 ||\n                    i == 0x2DDF)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CodeCharts/Upper.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"Upper.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides safe character positions for the upper section of the UTF code tables.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application.CodeCharts\n{\n    using System.Collections;\n\n    /// <summary>\n    /// Provides safe character positions for the upper section of the UTF code tables.\n    /// </summary>\n    internal static class Upper\n    {\n        /// <summary>\n        /// Determines if the specified flag is set.\n        /// </summary>\n        /// <param name=\"flags\">The value to check.</param>\n        /// <param name=\"flagToCheck\">The flag to check for.</param>\n        /// <returns>true if the flag is set, otherwise false.</returns>\n        public static bool IsFlagSet(UpperCodeCharts flags, UpperCodeCharts flagToCheck)\n        {\n            return (flags & flagToCheck) != 0;\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Devanagari Extended code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable DevanagariExtended()\n        {\n            for (int i = 0xA8E0; i <= 0xA8FB; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Kayah Li code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable KayahLi()\n        {\n            for (int i = 0xA900; i <= 0xA92F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Rejang code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Rejang()\n        {\n            for (int i = 0xA930; i <= 0xA953; i++)\n            {\n                yield return i;\n            }\n\n            yield return 0xA95F;\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hangul Jamo Extended A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable HangulJamoExtendedA()\n        {\n            for (int i = 0xA960; i <= 0xA97C; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Javanese code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Javanese()\n        {\n            for (int i = 0xA980; i <= 0xA9DF; i++)\n            {\n                if (i == 0xA9CE ||\n                    (i >= 0xA9DA && i <= 0xA9DD))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cham code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Cham()\n        {\n            for (int i = 0xAA00; i <= 0xAA5F; i++)\n            {\n                if ((i >= 0xAA37 && i <= 0xAA3F) ||\n                    i == 0xAA4E ||\n                    i == 0xAA4F ||\n                    i == 0xAA5A ||\n                    i == 0xAA5B)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Myanmar Extended A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MyanmarExtendedA()\n        {\n            for (int i = 0xAA60; i <= 0xAA7B; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Myanmar Extended A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable TaiViet()\n        {\n            for (int i = 0xAA80; i <= 0xAAC2; i++)\n            {\n                yield return i;\n            }\n\n            for (int i = 0xAADB; i <= 0xAADF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Meetei Mayek code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable MeeteiMayek()\n        {\n            for (int i = 0xABC0; i <= 0xABF9; i++)\n            {\n                if (i == 0xABEE ||\n                    i == 0xABEF)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hangul Syllables code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable HangulSyllables()\n        {\n            for (int i = 0xAC00; i <= 0xD7A3; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hangul Jamo Extended B code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable HangulJamoExtendedB()\n        {\n            for (int i = 0xD7B0; i <= 0xD7FB; i++)\n            {\n                if (i == 0xD7C7 ||\n                    i == 0xD7C8 ||\n                    i == 0xD7C9 ||\n                    i == 0xD7CA)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Compatibility Ideographs code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkCompatibilityIdeographs()\n        {\n            for (int i = 0xF900; i <= 0xFAD9; i++)\n            {\n                if (i == 0xFA2E ||\n                    i == 0xFA2F ||\n                    i == 0xFA6E ||\n                    i == 0xFA6F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Alphabetic Presentation Forms code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable AlphabeticPresentationForms()\n        {\n            for (int i = 0xFB00; i <= 0xFB4F; i++)\n            {\n                if ((i >= 0xFB07 && i <= 0xFB12) ||\n                    (i >= 0xFB18 && i <= 0xFB1C) ||\n                    i == 0xFB37 ||\n                    i == 0xFB3D ||\n                    i == 0xFB3F ||\n                    i == 0xFB42 ||\n                    i == 0xFB45)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Arabic Presentation Forms A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable ArabicPresentationFormsA()\n        {\n            for (int i = 0xFB50; i <= 0xFDFD; i++)\n            {\n                if ((i >= 0xFBB2 && i <= 0xFBD2) || \n                    (i >= 0xFD40 && i <= 0xFD4F) ||\n                    i == 0xFD90 ||\n                    i == 0xFD91 ||\n                    (i >= 0xFDC8 && i <= 0xFDEF))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Variation Selectors code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable VariationSelectors()\n        {\n            for (int i = 0xFE00; i <= 0xFE0F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Vertical Forms code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable VerticalForms()\n        {\n            for (int i = 0xFE10; i <= 0xFE19; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Combining Half Marks code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CombiningHalfMarks()\n        {\n            for (int i = 0xFE20; i <= 0xFE26; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Compatibility Forms code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkCompatibilityForms()\n        {\n            for (int i = 0xFE30; i <= 0xFE4F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Small Form Variants code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SmallFormVariants()\n        {\n            for (int i = 0xFE50; i <= 0xFE6B; i++)\n            {\n                if (i == 0xFE53 || i == 0xFE67)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Arabic Presentation Forms B code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable ArabicPresentationFormsB()\n        {\n            for (int i = 0xFE70; i <= 0xFEFC; i++)\n            {\n                if (i == 0xFE75)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Half Width and Full Width Forms code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable HalfWidthAndFullWidthForms()\n        {\n            for (int i = 0xFF01; i <= 0xFFEE; i++)\n            {\n                if (i == 0xFFBF ||\n                    i == 0xFFC0 ||\n                    i == 0xFFC1 ||\n                    i == 0xFFC8 ||\n                    i == 0xFFC9 ||\n                    i == 0xFFD0 ||\n                    i == 0xFFD1 ||\n                    i == 0xFFD8 ||\n                    i == 0xFFD9 ||\n                    i == 0xFFDD ||\n                    i == 0xFFDE ||\n                    i == 0xFFDF ||\n                    i == 0xFFE7)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Specials code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Specials()\n        {\n            for (int i = 0xFFF9; i <= 0xFFFD; i++)\n            {\n                yield return i;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CodeCharts/UpperMiddle.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"UpperMiddle.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides safe character positions for the upper middle section of the UTF code tables.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application.CodeCharts\n{\n    using System.Collections;\n\n    /// <summary>\n    /// Provides safe character positions for the upper middle section of the UTF code tables.\n    /// </summary>\n    internal static class UpperMiddle\n    {\n        /// <summary>\n        /// Determines if the specified flag is set.\n        /// </summary>\n        /// <param name=\"flags\">The value to check.</param>\n        /// <param name=\"flagToCheck\">The flag to check for.</param>\n        /// <returns>true if the flag is set, otherwise false.</returns>\n        public static bool IsFlagSet(UpperMidCodeCharts flags, UpperMidCodeCharts flagToCheck)\n        {\n            return (flags & flagToCheck) != 0;\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cyrillic Extended A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CyrillicExtendedA()\n        {\n            for (int i = 0x2DE0; i <= 0x2DFF; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cyrillic Extended A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SupplementalPunctuation()\n        {\n            for (int i = 0x2E00; i <= 0x2E31; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Radicals Supplement code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkRadicalsSupplement()\n        {\n            for (int i = 0x2E80; i <= 0x2EF3; i++)\n            {\n                if (i == 0x2E9A)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Kangxi Radicals code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable KangxiRadicals()\n        {\n            for (int i = 0x2F00; i <= 0x2FD5; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Ideographic Description Characters code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable IdeographicDescriptionCharacters()\n        {\n            for (int i = 0x2FF0; i <= 0x2FFB; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Symbols and Punctuation code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkSymbolsAndPunctuation()\n        {\n            for (int i = 0x3000; i <= 0x303F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hiragana code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Hiragana()\n        {\n            for (int i = 0x3041; i <= 0x309F; i++)\n            {\n                if (i == 0x3097 ||\n                    i == 0x3098)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hiragana code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Katakana()\n        {\n            for (int i = 0x30A0; i <= 0x30FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Bopomofo code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Bopomofo()\n        {\n            for (int i = 0x3105; i <= 0x312D; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Hangul Compatibility Jamo code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable HangulCompatibilityJamo()\n        {\n            for (int i = 0x3131; i <= 0x318E; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Kanbun code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Kanbun()\n        {\n            for (int i = 0x3190; i <= 0x319F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Bopomofo Extended code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable BopomofoExtended()\n        {\n            for (int i = 0x31A0; i <= 0x31B7; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Strokes code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkStrokes()\n        {\n            for (int i = 0x31C0; i <= 0x31E3; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Katakana Phonetic Extensions code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable KatakanaPhoneticExtensions()\n        {\n            for (int i = 0x31F0; i <= 0x31FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Enclosed CJK Letters and Months code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable EnclosedCjkLettersAndMonths()\n        {\n            for (int i = 0x3200; i <= 0x32FE; i++)\n            {\n                if (i == 0x321F)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Compatibility code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkCompatibility()\n        {\n            for (int i = 0x3300; i <= 0x33FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Unified Ideographs Extension A code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkUnifiedIdeographsExtensionA()\n        {\n            for (int i = 0x3400; i <= 0x4DB5; i++)\n            {\n                yield return i;\n            }            \n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Yijing Hexagram Symbols code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable YijingHexagramSymbols()\n        {\n            for (int i = 0x4DC0; i <= 0x4DFF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the CJK Unified Ideographs code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CjkUnifiedIdeographs()\n        {\n            for (int i = 0x4E00; i <= 0x9FCB; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Yi Syllables code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable YiSyllables()\n        {\n            for (int i = 0xA000; i <= 0xA48C; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Yi Radicals code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable YiRadicals()\n        {\n            for (int i = 0xA490; i <= 0xA4C6; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Lisu code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Lisu()\n        {\n            for (int i = 0xA4D0; i <= 0xA4FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Vai code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Vai()\n        {\n            for (int i = 0xA500; i <= 0xA62B; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Cyrillic Extended B code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CyrillicExtendedB()\n        {\n            for (int i = 0xA640; i <= 0xA697; i++)\n            {\n                if (i == 0xA660 ||\n                    i == 0xA661 ||\n                    (i >= 0xA674 && i <= 0xA67b))\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Bamum code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Bamum()\n        {\n            for (int i = 0xA6A0; i <= 0xA6F7; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Modifier Tone Letters code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable ModifierToneLetters()\n        {\n            for (int i = 0xA700; i <= 0xA71F; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Latin Extended D code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable LatinExtendedD()\n        {\n            for (int i = 0xA720; i <= 0xA78C; i++)\n            {\n                yield return i;\n            }\n\n            for (int i = 0xA7FB; i <= 0xA7FF; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Syloti Nagri code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable SylotiNagri()\n        {\n            for (int i = 0xA800; i <= 0xA82B; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Common Indic Number Forms code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable CommonIndicNumberForms()\n        {\n            for (int i = 0xA830; i <= 0xA839; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Phags-pa code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Phagspa()\n        {\n            for (int i = 0xA840; i <= 0xA877; i++)\n            {\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for the Saurashtra code table.\n        /// </summary>\n        /// <returns>The safe characters for the code table.</returns>\n        public static IEnumerable Saurashtra()\n        {\n            for (int i = 0xA880; i <= 0xA8D9; i++)\n            {\n                if (i >= 0xA8C5 && i <= 0xA8CD)\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CodeCharts.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"CodeCharts.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Enumerations for the various printable code tables within the Unicode UTF space.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application\n{\n    using System;\n\n    /// <summary>\n    /// Values for the lowest section of the UTF8 Unicode code tables, from U0000 to U0FFF.\n    /// </summary>\n    [Flags]\n    public enum LowerCodeCharts : long\n    {\n        /// <summary>\n        /// No code charts from the lower region of the Unicode tables are safe-listed.\n        /// </summary>\n        None                                        = 0,\n\n        /// <summary>\n        /// The Basic Latin code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0000.pdf</remarks>\n        BasicLatin                                  = 1 << 0x00,\n        \n        /// <summary>\n        /// The C1 Controls and Latin-1 Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0080.pdf</remarks>\n        C1ControlsAndLatin1Supplement               = 1 << 0x01,\n\n        /// <summary>\n        /// The Latin Extended-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0100.pdf</remarks>\n        LatinExtendedA                              = 1 << 0x02,\n        \n        /// <summary>\n        /// The Latin Extended-B code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0180.pdf</remarks>\n        LatinExtendedB                              = 1 << 0x03,\n        \n        /// <summary>\n        /// The IPA Extensions code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0250.pdf</remarks>\n        IpaExtensions                               = 1 << 0x04,\n        \n        /// <summary>\n        /// The Spacing Modifier Letters code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U02B0.pdf</remarks>\n        SpacingModifierLetters                      = 1 << 0x05,\n\n        /// <summary>\n        /// The Combining Diacritical Marks code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0300.pdf</remarks>\n        CombiningDiacriticalMarks                   = 1 << 0x06,        \n\n        /// <summary>\n        /// The Greek and Coptic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0370.pdf</remarks>\n        GreekAndCoptic                              = 1 << 0x07,\n        \n        /// <summary>\n        /// The Cyrillic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0400.pdf</remarks>\n        Cyrillic                                    = 1 << 0x08,\n\n        /// <summary>\n        /// The Cyrillic Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0500.pdf</remarks>\n        CyrillicSupplement                          = 1 << 0x09,\n        \n        /// <summary>\n        /// The Armenian code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0530.pdf</remarks>\n        Armenian                                    = 1 << 0x0A,\n\n        /// <summary>\n        /// The Hebrew code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0590.pdf</remarks>\n        Hebrew                                      = 1 << 0x0B,\n        \n        /// <summary>\n        /// The Arabic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0600.pdf</remarks>\n        Arabic                                      = 1 << 0x0C,\n                \n        /// <summary>\n        /// The Syriac code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0700.pdf</remarks>\n        Syriac                                      = 1 << 0x0D,\n        \n        /// <summary>\n        /// The Arabic Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0750.pdf</remarks>\n        ArabicSupplement                            = 1 << 0x0E,\n        \n        /// <summary>\n        /// The Thaana code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0780.pdf</remarks>\n        Thaana                                      = 1 << 0x0F,\n\n        /// <summary>\n        /// The Nko code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U07C0.pdf</remarks>\n        Nko                                         = 1 << 0x10,\n        \n        /// <summary>\n        /// The Samaritan code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0800.pdf</remarks>\n        Samaritan                                   = 1 << 0x11,\n        \n        /// <summary>\n        /// The Devanagari code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0900.pdf</remarks>\n        Devanagari                                  = 1 << 0x12,\n        \n        /// <summary>\n        /// The Bengali code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0980.pdf</remarks>\n        Bengali                                     = 1 << 0x13,\n        \n        /// <summary>\n        /// The Gurmukhi code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0A00.pdf</remarks>\n        Gurmukhi                                    = 1 << 0x14,\n        \n        /// <summary>\n        /// The Gujarati code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0A80.pdf</remarks>\n        Gujarati                                    = 1 << 0x15,\n\n        /// <summary>\n        /// The Oriya code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0B00.pdf</remarks>\n        Oriya                                       = 1 << 0x16,\n        \n        /// <summary>\n        /// The Tamil code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0B80.pdf</remarks>\n        Tamil                                       = 1 << 0x17,\n\n        /// <summary>\n        /// The Telugu code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0C00.pdf</remarks>\n        Telugu                                      = 1 << 0x18,\n\n        /// <summary>\n        /// The Kannada code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0C80.pdf</remarks>\n        Kannada                                     = 1 << 0x19,\n\n        /// <summary>\n        /// The Malayalam code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0D00.pdf</remarks>\n        Malayalam                                   = 1 << 0x1A,\n\n        /// <summary>\n        /// The Sinhala code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0D80.pdf</remarks>\n        Sinhala                                     = 1 << 0x1B,\n\n        /// <summary>\n        /// The Thai code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0E00.pdf</remarks>\n        Thai                                        = 1 << 0x1C,\n\n        /// <summary>\n        /// The Lao code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0E80.pdf</remarks>\n        Lao                                         = 1 << 0x1D,\n\n        /// <summary>\n        /// The Tibetan code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U0F00.pdf</remarks>\n        Tibetan                                     = 1 << 0x1E,\n\n        /// <summary>\n        /// The default code tables marked as safe on initialisation.\n        /// </summary>\n        Default = BasicLatin | C1ControlsAndLatin1Supplement | LatinExtendedA | LatinExtendedB | SpacingModifierLetters | IpaExtensions | CombiningDiacriticalMarks\n    }\n\n    /// <summary>\n    /// Values for the lower-mid section of the UTF8 Unicode code tables, from U1000 to U1EFF.\n    /// </summary>\n    [Flags]\n    public enum LowerMidCodeCharts : long\n    {\n        /// <summary>\n        /// No code charts from the lower-mid region of the Unicode tables are safe-listed.\n        /// </summary>\n        None                                        = 0,\n\n        /// <summary>\n        /// The Myanmar code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1000.pdf</remarks>\n        Myanmar                                      = 1 << 0x00,\n\n        /// <summary>\n        /// The Georgian code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U10A0.pdf</remarks>\n        Georgian                                    = 1 << 0x01,\n\n        /// <summary>\n        /// The Hangul Jamo code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1100.pdf</remarks>\n        HangulJamo                                  = 1 << 0x02,\n\n        /// <summary>\n        /// The Ethiopic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1200.pdf</remarks>\n        Ethiopic                                    = 1 << 0x03,\n\n        /// <summary>\n        /// The Ethiopic supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1380.pdf</remarks>\n        EthiopicSupplement                          = 1 << 0x04,\n\n        /// <summary>\n        /// The Cherokee code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U13A0.pdf</remarks>\n        Cherokee                                    = 1 << 0x05,\n\n        /// <summary>\n        /// The Unified Canadian Aboriginal Syllabics code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1400.pdf</remarks>\n        UnifiedCanadianAboriginalSyllabics          = 1 << 0x06,\n        \n        /// <summary>\n        /// The Ogham code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1680.pdf</remarks>\n        Ogham                                       = 1 << 0x07,\n                        \n        /// <summary>\n        /// The Runic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U16A0.pdf</remarks>\n        Runic                                       = 1 << 0x08,\n\n        /// <summary>\n        /// The Tagalog code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1700.pdf</remarks>\n        Tagalog                                     = 1 << 0x09,\n\n        /// <summary>\n        /// The Hanunoo code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1720.pdf</remarks>\n        Hanunoo                                     = 1 << 0x0A,\n\n        /// <summary>\n        /// The Buhid code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1740.pdf</remarks>\n        Buhid                                       = 1 << 0x0B,\n\n        /// <summary>\n        /// The Tagbanwa code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1760.pdf</remarks>\n        Tagbanwa                                    = 1 << 0x0C,\n\n        /// <summary>\n        /// The Khmer code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1780.pdf</remarks>\n        Khmer                                       = 1 << 0x0D,\n\n        /// <summary>\n        /// The Mongolian code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1800.pdf</remarks>\n        Mongolian                                   = 1 << 0x0E,\n                \n        /// <summary>\n        /// The Unified Canadian Aboriginal Syllabics Extended code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U18B0.pdf</remarks>\n        UnifiedCanadianAboriginalSyllabicsExtended  = 1 << 0x0F,\n\n        /// <summary>\n        /// The Limbu code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1900.pdf</remarks>\n        Limbu                                       = 1 << 0x10,\n        \n        /// <summary>\n        /// The Tai Le code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1950.pdf</remarks>\n        TaiLe                                       = 1 << 0x11,\n\n        /// <summary>\n        /// The New Tai Lue code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1980.pdf</remarks>\n        NewTaiLue                                   = 1 << 0x12,\n\n        /// <summary>\n        /// The Khmer Symbols code table\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U19E0.pdf</remarks>\n        KhmerSymbols                                = 1 << 0x13,\n\n        /// <summary>\n        /// The Buginese code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1A00.pdf</remarks>\n        Buginese                                    = 1 << 0x14,\n        \n        /// <summary>\n        /// The Tai Tham code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1A20.pdf</remarks>\n        TaiTham                                     = 1 << 0x15,\n\n        /// <summary>\n        /// The Balinese code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1B00.pdf</remarks>\n        Balinese                                    = 1 << 0x16,\n\n        /// <summary>\n        /// The Sudanese code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1B80.pdf</remarks>\n        Sudanese                                    = 1 << 0x17,\n        \n        /// <summary>\n        /// The Lepcha code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1C00.pdf</remarks>\n        Lepcha                                      = 1 << 0x18,\n        \n        /// <summary>\n        /// The Ol Chiki code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1C50.pdf</remarks>\n        OlChiki                                     = 1 << 0x19,\n        \n        /// <summary>\n        /// The Vedic Extensions code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1CD0.pdf</remarks>\n        VedicExtensions                             = 1 << 0x1A,\n        \n        /// <summary>\n        /// The Phonetic Extensions code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1D00.pdf</remarks>\n        PhoneticExtensions                          = 1 << 0x1B,\n        \n        /// <summary>\n        /// The Phonetic Extensions Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1D80.pdf</remarks>\n        PhoneticExtensionsSupplement                = 1 << 0x1C,        \n        \n        /// <summary>\n        /// The Combining Diacritical Marks Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1DC0.pdf</remarks>        \n        CombiningDiacriticalMarksSupplement         = 1 << 0x1D,\n\n        /// <summary>\n        /// The Latin Extended Additional code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1E00.pdf</remarks>\n        LatinExtendedAdditional                     = 1 << 0x0E\n    }\n\n    /// <summary>\n    /// Values for the middle section of the UTF8 Unicode code tables, from U1F00 to U2DDF\n    /// </summary>\n    [Flags]\n    public enum MidCodeCharts : long\n    {\n        /// <summary>\n        /// No code charts from the lower region of the Unicode tables are safe-listed.\n        /// </summary>\n        None                                        = 0,\n        \n        /// <summary>\n        /// The Greek Extended code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U1F00.pdf</remarks>\n        GreekExtended                               = 1 << 0x00,\n\n        /// <summary>\n        /// The General Punctuation code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2000.pdf</remarks>\n        GeneralPunctuation                          = 1 << 0x01,\n        \n        /// <summary>\n        /// The Superscripts and Subscripts code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2070.pdf</remarks>\n        SuperscriptsAndSubscripts                   = 1 << 0x02,\n        \n        /// <summary>\n        /// The Currency Symbols code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U20A0.pdf</remarks>\n        CurrencySymbols                             = 1 << 0x03,\n\n        /// <summary>\n        /// The Combining Diacritical Marks for Symbols code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U20D0.pdf</remarks>\n        CombiningDiacriticalMarksForSymbols         = 1 << 0x04,\n\n        /// <summary>\n        /// The Letterlike Symbols code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2100.pdf</remarks>\n        LetterlikeSymbols                           = 1 << 0x05,\n\n        /// <summary>\n        /// The Number Forms code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2150.pdf</remarks>\n        NumberForms                                 = 1 << 0x06,\n\n        /// <summary>\n        /// The Arrows code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2190.pdf</remarks>\n        Arrows                                      = 1 << 0x07,\n\n        /// <summary>\n        /// The Mathematical Operators code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2200.pdf</remarks>\n        MathematicalOperators                       = 1 << 0x08,\n        \n        /// <summary>\n        /// The Miscellaneous Technical code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2300.pdf</remarks>\n        MiscellaneousTechnical                      = 1 << 0x09,\n\n        /// <summary>\n        /// The Control Pictures code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2400.pdf</remarks>\n        ControlPictures                             = 1 << 0x0A,\n\n        /// <summary>\n        /// The Optical Character Recognition table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2440.pdf</remarks>\n        OpticalCharacterRecognition                 = 1 << 0x0B,\n\n        /// <summary>\n        /// The Enclosed Alphanumeric code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2460.pdf</remarks>\n        EnclosedAlphanumerics                       = 1 << 0x0C,\n\n        /// <summary>\n        /// The Box Drawing code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2500.pdf</remarks>\n        BoxDrawing                                  = 1 << 0x0D,\n\n        /// <summary>\n        /// The Block Elements code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2580.pdf</remarks>\n        BlockElements                               = 1 << 0x0E,\n\n        /// <summary>\n        /// The Geometric Shapes code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U25A0.pdf</remarks>\n        GeometricShapes                             = 1 << 0x0F,\n\n        /// <summary>\n        /// The Miscellaneous Symbols code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2600.pdf</remarks>\n        MiscellaneousSymbols                        = 1 << 0x10,\n\n        /// <summary>\n        /// The Dingbats code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2700.pdf</remarks>\n        Dingbats                                    = 1 << 0x11,\n        \n        /// <summary>\n        /// The Miscellaneous Mathematical Symbols-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U27C0.pdf</remarks>\n        MiscellaneousMathematicalSymbolsA           = 1 << 0x12,\n        \n        /// <summary>\n        /// The Supplemental Arrows-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U27F0.pdf</remarks>\n        SupplementalArrowsA                         = 1 << 0x13,\n\n        /// <summary>\n        /// The Braille Patterns code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2800.pdf</remarks>\n        BraillePatterns                             = 1 << 0x14,\n        \n        /// <summary>\n        /// The Supplemental Arrows-B code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2900.pdf</remarks>\n        SupplementalArrowsB                         = 1 << 0x15,\n\n        /// <summary>\n        /// The Miscellaneous Mathematical Symbols-B code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2980.pdf</remarks>                \n        MiscellaneousMathematicalSymbolsB           = 1 << 0x16,\n                \n        /// <summary>\n        /// The Supplemental Mathematical Operators code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2A00.pdf</remarks>\n        SupplementalMathematicalOperators           = 1 << 0x17,\n\n        /// <summary>\n        /// The Miscellaneous Symbols and Arrows code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2B00.pdf</remarks>        \n        MiscellaneousSymbolsAndArrows               = 1 << 0x18,\n        \n        /// <summary>\n        /// The Glagolitic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2C00.pdf</remarks>\n        Glagolitic                                  = 1 << 0x19,\n        \n        /// <summary>\n        /// The Latin Extended-C code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2C60.pdf</remarks>        \n        LatinExtendedC                              = 1 << 0x1A,\n        \n        /// <summary>\n        /// The Coptic code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2C80.pdf</remarks>\n        Coptic                                      = 1 << 0x1B,\n        \n        /// <summary>\n        /// The Georgian Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2D00.pdf</remarks>\n        GeorgianSupplement                          = 1 << 0x1C,\n\n        /// <summary>\n        /// The Tifinagh code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2D30.pdf</remarks>\n        Tifinagh                                    = 1 << 0x1D,\n\n        /// <summary>\n        /// The Ethiopic Extended code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2D80.pdf</remarks>\n        EthiopicExtended                            = 1 << 0x0E,    \n    }\n\n    /// <summary>\n    /// Values for the upper middle section of the UTF8 Unicode code tables, from U2DE0 to UA8DF\n    /// </summary>\n    [Flags]\n    public enum UpperMidCodeCharts : long\n    {\n        /// <summary>\n        /// No code charts from the lower region of the Unicode tables are safe-listed.\n        /// </summary>\n        None                                        = 0,                  \n        \n        /// <summary>\n        /// The Cyrillic Extended-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2DE0.pdf</remarks>\n        CyrillicExtendedA                           = 1 << 0x00,\n        \n        /// <summary>\n        /// The Supplemental Punctuation code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2E00.pdf</remarks>\n        SupplementalPunctuation                     = 1 << 0x01,\n        \n        /// <summary>\n        /// The CJK Radicials Supplement code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2E80.pdf</remarks>\n        CjkRadicalsSupplement                       = 1 << 0x02,\n        \n        /// <summary>\n        /// The Kangxi Radicials code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2F00.pdf</remarks>\n        KangxiRadicals                              = 1 << 0x03,\n        \n        /// <summary>\n        /// The Ideographic Description Characters code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U2FF0.pdf</remarks>\n        IdeographicDescriptionCharacters            = 1 << 0x04,\n        \n        /// <summary>\n        /// The CJK Symbols and Punctuation code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3000.pdf</remarks>\n        CjkSymbolsAndPunctuation                    = 1 << 0x05,\n\n        /// <summary>\n        /// The Hiragana code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3040.pdf</remarks>\n        Hiragana                                    = 1 << 0x06,\n        \n        /// <summary>\n        /// The Katakana code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U30A0.pdf</remarks>\n        Katakana                                    = 1 << 0x07,\n\n        /// <summary>\n        /// The Bopomofo code table.\n        /// <seealso cref=\"BopomofoExtended\"/>\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3100.pdf</remarks>\n        Bopomofo                                    = 1 << 0x08,\n\n        /// <summary>\n        /// The Hangul Compatbility Jamo code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3130.pdf</remarks>\n        HangulCompatibilityJamo                     = 1 << 0x09,\n\n        /// <summary>\n        /// The Kanbun code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3190.pdf</remarks>\n        Kanbun                                      = 1 << 0x0A,\n\n        /// <summary>\n        /// The Bopomofu Extended code table.\n        /// <seealso cref=\"Bopomofo\"/>\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U31A0.pdf</remarks>\n        BopomofoExtended                            = 1 << 0x0B,\n\n        /// <summary>\n        /// The CJK Strokes code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U31C0.pdf</remarks>\n        CjkStrokes                                  = 1 << 0x0C,\n        \n        /// <summary>\n        /// The Katakana Phonetic Extensoins code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U31F0.pdf</remarks>\n        KatakanaPhoneticExtensions                  = 1 << 0x0D,\n\n        /// <summary>\n        /// The Enclosed CJK Letters and Months code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3200.pdf</remarks>\n        EnclosedCjkLettersAndMonths                 = 1 << 0x0E,\n\n        /// <summary>\n        /// The CJK Compatibility code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3300.pdf</remarks>\n        CjkCompatibility                            = 1 << 0x0F,\n\n        /// <summary>\n        /// The CJK Unified Ideographs Extension A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U3400.pdf</remarks>\n        CjkUnifiedIdeographsExtensionA              = 1 << 0x10,\n\n        /// <summary>\n        /// The Yijing Hexagram Symbols code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U4DC0.pdf</remarks>\n        YijingHexagramSymbols                       = 1 << 0x11,\n        \n        /// <summary>\n        /// The CJK Unified Ideographs code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/U4E00.pdf</remarks>\n        CjkUnifiedIdeographs                        = 1 << 0x12,\n        \n        /// <summary>\n        /// The Yi Syllables code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA000.pdf</remarks>\n        YiSyllables                                 = 1 << 0x13,\n\n        /// <summary>\n        /// The Yi Radicals code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA490.pdf</remarks>\n        YiRadicals                                  = 1 << 0x14,\n\n        /// <summary>\n        /// The Lisu code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA4D0.pdf</remarks>        \n        Lisu                                        = 1 << 0x15,\n\n        /// <summary>\n        /// The Vai code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA500.pdf</remarks>\n        Vai                                         = 1 << 0x16,\n\n        /// <summary>\n        /// The Cyrillic Extended-B code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA640.pdf</remarks>\n        CyrillicExtendedB                           = 1 << 0x17,\n\n        /// <summary>\n        /// The Bamum code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA6A0.pdf</remarks>\n        Bamum                                       = 1 << 0x18,\n\n        /// <summary>\n        /// The Modifier Tone Letters code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA700.pdf</remarks>\n        ModifierToneLetters                         = 1 << 0x19,\n\n        /// <summary>\n        /// The Latin Extended-D code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA720.pdf</remarks>\n        LatinExtendedD                              = 1 << 0x1A,\n\n        /// <summary>\n        /// The Syloti Nagri code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA800.pdf</remarks>\n        SylotiNagri                                 = 1 << 0x1B,\n\n        /// <summary>\n        /// The Common Indic Number Forms code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA830.pdf</remarks>\n        CommonIndicNumberForms                      = 1 << 0x1C,\n\n        /// <summary>\n        /// The Phags-pa code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA840.pdf</remarks>\n        Phagspa                                     = 1 << 0x1D,\n\n        /// <summary>\n        /// The Saurashtra code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA880.pdf</remarks>\n        Saurashtra                                  = 1 << 0x1E,\n    }\n\n    /// <summary>\n    /// Values for the upper section of the UTF8 Unicode code tables, from UA8E0 to UFFFD\n    /// </summary>\n    [Flags]\n    public enum UpperCodeCharts\n    {\n        /// <summary>\n        /// No code charts from the upper region of the Unicode tables are safe-listed.\n        /// </summary>\n        None                                        = 0,\n\n        /// <summary>\n        /// The Devanagari Extended code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA8E0.pdf</remarks>\n        DevanagariExtended                          = 1 << 0x00,\n\n        /// <summary>\n        /// The Kayah Li code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA900.pdf</remarks>\n        KayahLi                                     = 1 << 0x01,\n\n        /// <summary>\n        /// The Rejang code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA930.pdf</remarks>\n        Rejang                                      = 1 << 0x02,\n\n        /// <summary>\n        /// The Hangul Jamo Extended-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA960.pdf</remarks>\n        HangulJamoExtendedA                         = 1 << 0x03,\n\n        /// <summary>\n        /// The Javanese code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UA980.pdf</remarks>\n        Javanese                                    = 1 << 0x04,\n\n        /// <summary>\n        /// The Cham code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UAA00.pdf</remarks>\n        Cham                                        = 1 << 0x05,\n\n        /// <summary>\n        /// The Myanmar Extended-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UAA60.pdf</remarks>\n        MyanmarExtendedA                            = 1 << 0x06,\n\n        /// <summary>\n        /// The Tai Viet code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UAA80.pdf</remarks>\n        TaiViet                                     = 1 << 0x07,\n\n        /// <summary>\n        /// The Meetei Mayek code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UABC0.pdf</remarks>\n        MeeteiMayek                                 = 1 << 0x08,\n\n        /// <summary>\n        /// The Hangul Syllables code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UAC00.pdf</remarks>\n        HangulSyllables                             = 1 << 0x09,\n\n        /// <summary>\n        /// The Hangul Jamo Extended-B code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UD7B0.pdf</remarks>\n        HangulJamoExtendedB                         = 1 << 0x0A,\n        \n        /// <summary>\n        /// The CJK Compatibility Ideographs code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UF900.pdf</remarks>\n        CjkCompatibilityIdeographs                  = 1 << 0x0B,\n        \n        /// <summary>\n        /// The Alphabetic Presentation Forms code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFB00.pdf</remarks>\n        AlphabeticPresentationForms                 = 1 << 0x0C,\n        \n        /// <summary>\n        /// The Arabic Presentation Forms-A code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFB50.pdf</remarks>\n        ArabicPresentationFormsA                    = 1 << 0x0D,\n        \n        /// <summary>\n        /// The Variation Selectors code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFE00.pdf</remarks>\n        VariationSelectors                          = 1 << 0x0E,\n        \n        /// <summary>\n        /// The Vertical Forms code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFE10.pdf</remarks>\n        VerticalForms                               = 1 << 0x0F,\n        \n        /// <summary>\n        /// The Combining Half Marks code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFE20.pdf</remarks>\n        CombiningHalfMarks                          = 1 << 0x10,\n        \n        /// <summary>\n        /// The CJK Compatibility Forms code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFE30.pdf</remarks>\n        CjkCompatibilityForms                       = 1 << 0x11,\n        \n        /// <summary>\n        /// The Small Form Variants code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFE50.pdf</remarks>\n        SmallFormVariants                           = 1 << 0x12,\n        \n        /// <summary>\n        /// The Arabic Presentation Forms-B code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFE70.pdf</remarks>\n        ArabicPresentationFormsB                    = 1 << 0x13,\n        \n        /// <summary>\n        /// The half width and full width Forms code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFF00.pdf</remarks>\n        HalfWidthAndFullWidthForms                  = 1 << 0x14,\n        \n        /// <summary>\n        /// The Specials code table.\n        /// </summary>\n        /// <remarks>http://www.unicode.org/charts/PDF/UFFF0.pdf</remarks>\n        Specials                                    = 1 << 0x15,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/CssEncoder.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"CssEncoder.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides CSS Encoding methods.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter.Security.Application\n{\n    using System.Collections;\n\n    /// <summary>\n    /// Provides CSS Encoding methods.\n    /// </summary>\n    internal static class CssEncoder\n    {\n        /// <summary>\n        /// A lock object to use when performing safe listing.\n        /// </summary>\n        private static readonly ReaderWriterLock syncLock = new ReaderWriterLock();\n\n        /// <summary>\n        /// The values to output for each character.\n        /// </summary>\n        private static char[][] characterValues;\n\n        /// <summary>\n        /// Encodes according to the CSS encoding rules.\n        /// </summary>\n        /// <param name=\"input\">The string to encode.</param>\n        /// <returns>The encoded string.</returns>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        internal static string Encode(string input)\n        {\n            if (string.IsNullOrEmpty(input))\n            {\n                return input;\n            }\n\n            if (characterValues == null)\n            {\n                InitialiseSafeList();\n            }\n\n            // Setup a new character array for output.\n            char[] inputAsArray = input.ToCharArray();\n            int outputLength = 0;\n            int inputLength = inputAsArray.Length;\n            char[] encodedInput = new char[inputLength * 7]; // Worse case scenario - CSS encoding wants \\XXXXXX for encoded characters.\n\n            syncLock.EnterReadLock();\n            try\n            {\n                for (int i = 0; i < inputLength; i++)\n                {\n                    char currentCharacter = inputAsArray[i];\n                    int currentCodePoint = inputAsArray[i];\n\n                    // Check for invalid values\n                    if (currentCodePoint == 0xFFFE ||\n                        currentCodePoint == 0xFFFF)\n                    {\n                        throw new InvalidUnicodeValueException(currentCodePoint);\n                    }\n                    else if (currentCharacter.IsHighSurrogate())\n                    {\n                        if (i + 1 == inputLength)\n                        {\n                            throw new InvalidSurrogatePairException(currentCharacter, '\\0');\n                        }\n\n                        // Now peak ahead and check if the following character is a low surrogate.\n                        char nextCharacter = inputAsArray[i + 1];\n                        char nextCodePoint = inputAsArray[i + 1];\n                        if (!nextCharacter.IsLowSurrogate())\n                        {\n                            throw new InvalidSurrogatePairException(currentCharacter, nextCharacter);\n                        }\n\n                        // Look-ahead was good, so skip.\n                        i++;\n\n                        // Calculate the combined code point\n                        long combinedCodePoint =\n                            0x10000 + ((currentCodePoint - 0xD800) * 0x400) + (nextCodePoint - 0xDC00);\n                        char[] encodedCharacter = SafeList.SlashThenSixDigitHexValueGenerator(combinedCodePoint);\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n                    }\n                    else if (currentCharacter.IsLowSurrogate())\n                    {\n                        throw new InvalidSurrogatePairException('\\0', currentCharacter);\n                    }\n                    else if (currentCodePoint > characterValues.Length - 1)\n                    {\n                        char[] encodedCharacter = SafeList.SlashThenSixDigitHexValueGenerator(currentCodePoint);\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n                    }\n                    else if (characterValues[currentCodePoint] != null)\n                    {\n                        // character needs to be encoded\n                        char[] encodedCharacter = characterValues[currentCodePoint];\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n                    }\n                    else\n                    {\n                        // character does not need encoding\n                        encodedInput[outputLength++] = currentCharacter;\n                    }\n                }\n            }\n            finally\n            {\n                syncLock.ExitReadLock();\n            }\n\n            return new string(encodedInput, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Initializes the HTML safe list.\n        /// </summary>\n        private static void InitialiseSafeList()\n        {\n            syncLock.EnterWriteLock();\n            try\n            {\n                if (characterValues == null)\n                {\n                    characterValues = SafeList.Generate(0xFF, SafeList.SlashThenSixDigitHexValueGenerator);\n                    SafeList.PunchSafeList(ref characterValues, CssSafeList());\n                }\n            }\n            finally\n            {\n                syncLock.ExitWriteLock();\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for CS encoding.\n        /// </summary>\n        /// <returns>The safe characters for CSS encoding.</returns>\n        /// <remarks>See http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet </remarks>\n        private static IEnumerable CssSafeList()\n        {\n            for (int i = '0'; i <= '9'; i++)\n            {\n                yield return i;\n            }\n\n            for (int i = 'A'; i <= 'Z'; i++)\n            {\n                yield return i;\n            }\n\n            for (int i = 'a'; i <= 'z'; i++)\n            {\n                yield return i;\n            }\n\n            // Extended higher ASCII, Ç to É\n            for (int i = 0x80; i <= 0x90; i++)\n            {\n                yield return i;\n            }\n\n            // Extended higher ASCII, ô to Ü\n            for (int i = 0x93; i <= 0x9A; i++)\n            {\n                yield return i;\n            }\n\n            // Extended higher ASCII, á to Ñ\n            for (int i = 0xA0; i <= 0xA5; i++)\n            {\n                yield return i;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/Encoder.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"Encoder.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Performs encoding of input strings to provide protection against\n//   Cross-Site Scripting (XSS) attacks and LDAP injection attacks in\n//   various contexts.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application\n{\n    using System;\n    using System.Globalization;\n    using System.Text;\n\n    /// <summary>\n    /// Performs encoding of input strings to provide protection against\n    /// Cross-Site Scripting (XSS) attacks and LDAP injection attacks in \n    /// various contexts.\n    /// </summary>\n    /// <remarks>\n    /// This encoding library uses the Principle of Inclusions, \n    /// sometimes referred to as \"safe-listing\" to provide protection \n    /// against injection attacks.  With safe-listing protection, \n    /// algorithms look for valid inputs and automatically treat \n    /// everything outside that set as a potential attack.  This library \n    /// can be used as a defense in depth approach with other mitigation \n    /// techniques. It is suitable for applications with high security \n    /// requirements.\n    /// </remarks>\n    public static class Encoder\n    {\n        /// <summary>\n        /// Empty string for Visual Basic Script context\n        /// </summary>\n        private const string VbScriptEmptyString = \"\\\"\\\"\";\n\n        /// <summary>\n        /// Empty string for Java Script context\n        /// </summary>\n        private const string JavaScriptEmptyString = \"''\";\n\n        /// <summary>\n        /// Initializes character Html encoding array\n        /// </summary>\n        private static readonly char[][] safeListCodes = InitializeSafeList();\n\n        /// <summary>\n        /// Encodes input strings for use as a value  in Lightweight Directory Access Protocol (LDAP) filter queries.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>Encoded string for use as a value in LDAP filter queries.</returns>\n        /// <remarks>This method encodes all but known safe characters defined in the safe list.\n        /// <newpara/>\n        /// RFC 4515 defines the format in which special characters need to be \n        /// escaped to be used inside a search filter. Special characters need to be \n        /// encoded in \\XX format where XX is the hex representation of the character.\n        /// <newpara/>\n        /// The following examples illustrate the use of the escaping mechanism.\n        /// <list type=\"table\">\n        /// <item><term>Parens R Us (for all your parenthetical needs)</term><description>Parens R Us \\28for all your parenthetical needs\\29</description></item>\n        /// <item><term>*</term><description>\\2A</description></item>\n        /// <item><term>C:\\MyFile</term><description>C:\\5CMyFile</description></item>\n        /// <item><term>NULLNULLNULLEOT (binary)</term><description>\\00\\00\\00\\04</description></item>\n        /// <item><term>Lučić</term><description>Lu\\C4\\8Di\\C4\\87</description></item>\n        /// </list>\n        /// </remarks>\n        public static string LdapFilterEncode(string input)\n        {\n            return LdapEncoder.FilterEncode(input);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use as a value in Lightweight Directory Access Protocol (LDAP) DNs.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>Encoded string for use as a value in LDAP DNs.</returns>\n        /// <remarks>This method encodes all but known safe characters defined in the safe list.\n        /// <newpara/>\n        /// RFC 2253 defines the format in which special characters need to be \n        /// escaped to be used inside a search filter. Special characters need to be \n        /// encoded in #XX format where XX is the hex representation of the character or a \n        /// specific \\ escape format.\n        /// <newpara/>\n        /// The following examples illustrate the use of the escaping mechanism.\n        /// <list type=\"table\">\n        /// <item><term>, + \\ \" \\ &lt; &gt;</term><description>\\, \\+ \\\" \\\\ \\&lt; \\&gt;</description></item>\n        /// <item><term> hello</term><description>\\ hello</description></item>\n        /// <item><term>hello </term><description>hello \\ </description></item>\n        /// <item><term>#hello</term><description>\\#hello</description></item>\n        /// <item><term>Lučić</term><description>Lu#C4#8Di#C4#87</description></item>\n        /// </list>\n        /// </remarks>\n        public static string LdapDistinguishedNameEncode(string input)\n        {\n            return LdapDistinguishedNameEncode(input, true, true);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use as a value in Lightweight Directory Access Protocol (LDAP) DNs.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"useInitialCharacterRules\">Value indicating whether the special case rules for encoding of spaces and octothorpes at the start of a string are used.</param>\n        /// <param name=\"useFinalCharacterRule\">Value indicating whether the special case for encoding of final character spaces is used.</param>\n        /// <returns>Encoded string for use as a value in LDAP DNs.</returns>\\\n        /// <remarks>This method encodes all but known safe characters defined in the safe list.\n        /// <newpara/>\n        /// RFC 2253 defines the format in which special characters need to be \n        /// escaped to be used inside a search filter. Special characters need to be \n        /// encoded in #XX format where XX is the hex representation of the character or a \n        /// specific \\ escape format.\n        /// <newpara/>\n        /// The following examples illustrate the use of the escaping mechanism.\n        /// <list type=\"table\">\n        /// <item><term>, + \\ \" \\ &lt; &gt;</term><description>\\, \\+ \\\" \\\\ \\&lt; \\&gt;</description></item>\n        /// <item><term> hello</term><description>\\ hello</description></item>\n        /// <item><term>hello </term><description>hello\\ </description></item>\n        /// <item><term>#hello</term><description>\\#hello</description></item>\n        /// <item><term>Lučić</term><description>Lu#C4#8Di#C4#87</description></item>\n        /// </list>\n        /// If useInitialCharacterRules is set to false then escaping of the initial space or octothorpe characters is not performed;\n        /// <list type=\"table\">\n        /// <item><term>, + \\ \" \\ &lt; &gt;</term><description>\\, \\+ \\\" \\\\ \\&lt; \\&gt;</description></item>\n        /// <item><term> hello</term><description> hello</description></item>\n        /// <item><term>hello </term><description>hello\\ </description></item>\n        /// <item><term>#hello</term><description>#hello</description></item>\n        /// <item><term>Lučić</term><description>Lu#C4#8Di#C4#87</description></item>\n        /// </list>\n        /// If useFinalCharacterRule is set to false then escaping of a space at the end of a string is not performed;\n        /// <list type=\"table\">\n        /// <item><term>, + \\ \" \\ &lt; &gt;</term><description>\\, \\+ \\\" \\\\ \\&lt; \\&gt;</description></item>\n        /// <item><term> hello</term><description> hello</description></item>\n        /// <item><term>hello </term><description>hello </description></item>\n        /// <item><term>#hello</term><description>#hello</description></item>\n        /// <item><term>Lučić</term><description>Lu#C4#8Di#C4#87</description></item>\n        /// </list>\n        /// </remarks>\n        public static string LdapDistinguishedNameEncode(string input, bool useInitialCharacterRules, bool useFinalCharacterRule)\n        {\n            return LdapEncoder.DistinguishedNameEncode(input, useInitialCharacterRules, useFinalCharacterRule);\n        }\n\n        /// <summary>\n        /// Encodes input strings to be used as a value in Lightweight Directory Access Protocol (LDAP) search queries.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>Encoded string for use in LDAP search queries.</returns>\n        /// <remarks>This method encodes all but known safe characters defined in the safe list.\n        /// <newpara/>\n        /// RFC 4515 defines the format in which special characters need to be \n        /// escaped to be used inside a search filter. Special characters need to be \n        /// encoded in \\XX format where XX is the hex representation of the character.\n        /// <newpara/>\n        /// The following examples illustrate the use of the escaping mechanism.\n        /// <list type=\"table\">\n        /// <item><term>Parens R Us (for all your parenthetical needs)</term><description>Parens R Us \\28for all your parenthetical needs\\29</description></item>\n        /// <item><term>*</term><description>\\2A</description></item>\n        /// <item><term>C:\\MyFile</term><description>C:\\5CMyFile</description></item>\n        /// <item><term>NULLNULLNULLEOT (binary)</term><description>\\00\\00\\00\\04</description></item>\n        /// <item><term>Lučić</term><description>Lu\\C4\\8Di\\C4\\87</description></item>\n        /// </list>\n        /// </remarks>\n        [Obsolete(\"This method has been deprecated. Please use Encoder.LdapFilterEncode() instead.\")]\n        public static string LdapEncode(string input)\n        {\n            return LdapFilterEncode(input);\n        }\n\n        /// <summary>\n        /// Encodes input strings used in Cascading Style Sheet (CSS) elements values.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>Encoded string for use in CSS element values.</returns>\n        /// <remarks>This method encodes all but known safe characters defined in the safe list.\n        /// <newpara/>\n        /// The CSS character escape sequence consists of a backslash character (\\) followed by \n        /// between one and six hexadecimal digits that represent a character code from the \n        /// ISO 10646 standard (which is equivalent to Unicode, for all intents and purposes). Any \n        /// character other than a hexadecimal digit will terminate the escape sequence. If a \n        /// character following the escape sequence is also a valid hexadecimal digit then it must \n        /// either include six digits in the escape, or use a whitespace character to terminate the \n        /// escape. This encoder enforces the six digit rule.\n        /// For example \\000020 denotes a space.\n        /// </remarks>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        //public static string CssEncode(string input)\n        //{\n        //    return CssEncoder.Encode(input);\n        //}\n\n        /// <summary>\n        /// Encodes input strings for use in HTML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in HTML.\n        /// </returns>\n        /// <remarks>\n        /// All characters not safe listed are encoded to their Unicode decimal value, using &amp;#DECIMAL; notation.\n        /// The default safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>'</term><description>Apostrophe</description></item>\n        /// <item><term> </term><description>Space</description></item>\n        /// </list>\n        /// The safe list may be adjusted using <see cref=\"UnicodeCharacterEncoder.MarkAsSafe\"/>.\n        /// <newpara/>\n        /// Example inputs and their related encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>&lt;script&gt;alert('XSS Attack!');&lt;/script&gt;</term><description>&amp;lt;script&amp;gt;alert('XSS Attack!');&amp;lt;/script&amp;gt;</description></item>\n        /// <item><term>user@contoso.com</term><description>user@contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross Site Scripting Library</description></item>\n        /// <item><term>\"Anti-Cross Site Scripting Library\"</term><description>&amp;quote;Anti-Cross Site Scripting Library&amp;quote;</description></item>\n        /// </list>\n        /// </remarks>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        public static string HtmlEncode(string input)\n        {\n            return HtmlEncode(input, false);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in HTML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"useNamedEntities\">Value indicating if the HTML 4.0 named entities should be used.</param>\n        /// <returns>\n        /// Encoded string for use in HTML.\n        /// </returns>\n        /// <remarks>\n        /// All characters not safe listed are encoded to their Unicode decimal value, using &amp;#DECIMAL; notation.\n        /// If you choose to use named entities then if a character is an HTML4.0 named entity the named entity will be used.\n        /// The default safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>'</term><description>Apostrophe</description></item>\n        /// <item><term> </term><description>Space</description></item>\n        /// </list>\n        /// The safe list may be adjusted using <see cref=\"UnicodeCharacterEncoder.MarkAsSafe\"/>.\n        /// <newpara/>\n        /// Example inputs and their related encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>&lt;script&gt;alert('XSS Attack!');&lt;/script&gt;</term><description>&amp;lt;script&amp;gt;alert('XSS Attack!');&amp;lt;/script&amp;gt;</description></item>\n        /// <item><term>user@contoso.com</term><description>user@contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross Site Scripting Library</description></item>\n        /// <item><term>\"Anti-Cross Site Scripting Library\"</term><description>&amp;quote;Anti-Cross Site Scripting Library&amp;quote;</description></item>\n        /// </list>\n        /// </remarks>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        public static string HtmlEncode(string input, bool useNamedEntities)\n        {\n            return UnicodeCharacterEncoder.HtmlEncode(input, useNamedEntities);\n        }\n\n        /// <summary>\n        /// Encodes an input string for use in an HTML attribute.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>The input string encoded for use in an HTML attribute.</returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are encoded using  &amp;#DECIMAL; notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// </list>\n        /// The safe list may be adjusted using <see cref=\"UnicodeCharacterEncoder.MarkAsSafe\"/>.\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>alert(&amp;#39;XSS&amp;#32;Attack!&amp;#39;);</description></item>\n        /// <item><term>user@contoso.com</term><description>user@contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross&amp;#32;Site&amp;#32;Scripting&amp;#32;Library</description></item>\n        /// </list>\n        /// </remarks>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        public static string HtmlAttributeEncode(string input)\n        {\n            return UnicodeCharacterEncoder.HtmlAttributeEncode(input);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in universal resource locators (URLs).\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in URLs.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are encoded using %SINGLE_BYTE_HEX \n        /// and %DOUBLE_BYTE_HEX notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>~</term><description>Tilde</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>alert%28%27XSS%20Attack%21%27%29%3b</description></item>\n        /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross%20Site%20Scripting%20Library</description></item>\n        /// </list>\n        /// </remarks>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\n            \"Microsoft.Design\",\n            \"CA1055:UriReturnValuesShouldNotBeStrings\",\n            Justification = \"As this is meant as a replacement for HttpUility.Encode we must keep the same return type.\")]\n        public static string UrlEncode(string input)\n        {\n            return UrlEncode(input, Encoding.UTF8);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in application/x-www-form-urlencoded form submissions.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in URLs.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are encoded using %SINGLE_BYTE_HEX \n        /// and %DOUBLE_BYTE_HEX notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>~</term><description>Tilde</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>alert%28%27XSS+Attack%21%27%29%3b</description></item>\n        /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross+Site+Scripting+Library</description></item>\n        /// </list>\n        /// </remarks>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\n            \"Microsoft.Design\",\n            \"CA1055:UriReturnValuesShouldNotBeStrings\",\n            Justification = \"This does not return a URL so the return type can be a string.\")]\n        public static string HtmlFormUrlEncode(string input)\n        {\n            return HtmlFormUrlEncode(input, Encoding.UTF8);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in universal resource locators (URLs).\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"codePage\">Codepage number of the input.</param>\n        /// <returns>\n        /// Encoded string for use in URLs.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes the output as per the encoding parameter (codepage) passed to it. It encodes \n        /// all but known safe characters.  Characters are encoded using %SINGLE_BYTE_HEX and %DOUBLE_BYTE_HEX notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>~</term><description>Tilde</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSSあAttack!');</term><description>alert%28%27XSS%82%a0Attack%21%27%29%3b</description></item>\n        /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross%20Site%20Scripting%20Library</description></item>\n        /// </list>\n        /// </remarks>\n        //[System.Diagnostics.CodeAnalysis.SuppressMessage(\n        //    \"Microsoft.Design\",\n        //    \"CA1055:UriReturnValuesShouldNotBeStrings\",\n        //    Justification = \"This does not return a URL so the return type can be a string.\")]\n        //public static string UrlEncode(string input, int codePage)\n        //{\n        //    return UrlEncode(input, Encoding.GetEncoding(codePage));\n        //}\n\n        /// <summary>\n        /// Encodes input strings for use in application/x-www-form-urlencoded form submissions.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"codePage\">Codepage number of the input.</param>\n        /// <returns>\n        /// Encoded string for use in URLs.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes the output as per the encoding parameter (codepage) passed to it. It encodes \n        /// all but known safe characters.  Characters are encoded using %SINGLE_BYTE_HEX and %DOUBLE_BYTE_HEX notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>~</term><description>Tilde</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSSあAttack!');</term><description>alert%28%27XSS%82%a0Attack%21%27%29%3b</description></item>\n        /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross+Site+Scripting+Library</description></item>\n        /// </list>\n        /// </remarks>\n        //[System.Diagnostics.CodeAnalysis.SuppressMessage(\n        //    \"Microsoft.Design\",\n        //    \"CA1055:UriReturnValuesShouldNotBeStrings\",\n        //    Justification = \"This not not return a URL, so the return type can be a string.\")]\n        //public static string HtmlFormUrlEncode(string input, int codePage)\n        //{\n        //    return HtmlFormUrlEncode(input, Encoding.GetEncoding(codePage));\n        //}\n\n        /// <summary>\n        /// Encodes input strings for use in universal resource locators (URLs).\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"inputEncoding\">Input encoding type.</param>\n        /// <returns>\n        /// Encoded string for use in URLs.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes the output as per the encoding parameter (codepage) passed to it. It encodes \n        /// all but known safe characters.  Characters are encoded using %SINGLE_BYTE_HEX and %DOUBLE_BYTE_HEX notation.\n        /// If the inputEncoding is null then UTF-8 is assumed by default.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>~</term><description>Tilde</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSSあAttack!');</term><description>alert%28%27XSS%82%a0Attack%21%27%29%3b</description></item>\n        /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross%20Site%20Scripting%20Library</description></item>\n        /// </list>\n        /// </remarks>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\n            \"Microsoft.Design\",\n            \"CA1055:UriReturnValuesShouldNotBeStrings\",\n            Justification = \"This does not return a URL so the return type can be a string.\")]\n        public static string UrlEncode(string input, Encoding inputEncoding)\n        {\n            // Assuming the default to be UTF-8\n            if (inputEncoding == null)\n            {\n                inputEncoding = Encoding.UTF8;\n            }\n\n            return HtmlParameterEncoder.QueryStringParameterEncode(input, inputEncoding);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in application/x-www-form-urlencoded form submissions.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"inputEncoding\">Input encoding type.</param>\n        /// <returns>\n        /// Encoded string for use in URLs.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes the output as per the encoding parameter (codepage) passed to it. It encodes \n        /// all but known safe characters.  Characters are encoded using %SINGLE_BYTE_HEX and %DOUBLE_BYTE_HEX notation.\n        /// If the inputEncoding is null then UTF-8 is assumed by default.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term>~</term><description>Tilde</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSSあAttack!');</term><description>alert%28%27XSS%82%a0Attack%21%27%29%3b</description></item>\n        /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross+Site+Scripting+Library</description></item>\n        /// </list>\n        /// </remarks>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\n            \"Microsoft.Design\",\n            \"CA1055:UriReturnValuesShouldNotBeStrings\",\n            Justification = \"This does not return a URL so the return type can be a string.\")]\n        public static string HtmlFormUrlEncode(string input, Encoding inputEncoding)\n        {\n            // Assuming the default to be UTF-8\n            if (inputEncoding == null)\n            {\n                inputEncoding = Encoding.UTF8;\n            }\n\n            return HtmlParameterEncoder.FormStringParameterEncode(input, inputEncoding);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in XML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in XML.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters. Characters are encoded using &amp;#DECIMAL; notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term> </term><description>Space</description></item>\n        /// </list>\n        /// The safe list may be adjusted using <see cref=\"UnicodeCharacterEncoder.MarkAsSafe\"/>.\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>alert(&amp;apos;XSS Attack!&amp;apos;);</description></item>\n        /// <item><term>user@contoso.com</term><description>user@contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross Site Scripting Library</description></item>\n        /// </list>\n        /// </remarks>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        public static string XmlEncode(string input)\n        {\n            return UnicodeCharacterEncoder.XmlEncode(input);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in XML attributes.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in XML attributes.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are encoded using &amp;#DECIMAL; notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// </list>\n        /// The safe list may be adjusted using <see cref=\"UnicodeCharacterEncoder.MarkAsSafe\"/>.\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>alert(&amp;apos;XSS&#32;Attack!&amp;apos);</description></item>\n        /// <item><term>user@contoso.com</term><description>user@contoso.com</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross&amp;#32;Site&amp;#32;Scripting&amp;#32;Library</description></item>\n        /// </list>\n        /// </remarks>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        public static string XmlAttributeEncode(string input)\n        {\n            // HtmlEncodeAttribute will handle input\n            return UnicodeCharacterEncoder.XmlAttributeEncode(input);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in JavaScript.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in JavaScript.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are encoded using \\xSINGLE_BYTE_HEX and \\uDOUBLE_BYTE_HEX notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term> </term><description>Space</description></item>\n        /// <item><term> </term><description>Other International character ranges</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>'alert\\x28\\x27XSS Attack\\x21\\x27\\x29\\x3b'</description></item>\n        /// <item><term>user@contoso.com</term><description>'user\\x40contoso.com'</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>'Anti-Cross Site Scripting Library'</description></item>\n        /// </list>\n        /// </remarks>\n        public static string JavaScriptEncode(string input)\n        {\n            return JavaScriptEncode(input, true);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in JavaScript.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <param name=\"emitQuotes\">value indicating whether or not to emit quotes. true = emit quote. false = no quote.</param>\n        /// <returns>\n        /// Encoded string for use in JavaScript and does not return the output with en quotes.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are encoded using \\xSINGLE_BYTE_HEX and \\uDOUBLE_BYTE_HEX notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term> </term><description>Space</description></item>\n        /// <item><term> </term><description>Other International character ranges</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>'alert\\x28\\x27XSS Attack\\x21\\x27\\x29\\x3b'</description></item>\n        /// <item><term>user@contoso.com</term><description>'user\\x40contoso.com'</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>'Anti-Cross Site Scripting Library'</description></item>\n        /// </list>\n        /// </remarks>\n        public static string JavaScriptEncode(string input, bool emitQuotes)\n        {\n            // Input validation: empty or null string condition\n            if (string.IsNullOrEmpty(input))\n            {\n                return emitQuotes ? JavaScriptEmptyString : string.Empty;\n            }\n\n            // Use a new char array.\n            int outputLength = 0;\n            int inputLength = input.Length;\n            char[] returnMe = new char[inputLength * 8]; // worst case length scenario\n\n            // First step is to start the encoding with an apostrophe if flag is true.\n            if (emitQuotes)\n            {\n                returnMe[outputLength++] = '\\'';\n            }\n\n            for (int i = 0; i < inputLength; i++)\n            {\n                int currentCharacterAsInteger = input[i];\n                char currentCharacter = input[i];\n                if (safeListCodes[currentCharacterAsInteger] != null || currentCharacterAsInteger == 92 || (currentCharacterAsInteger >= 123 && currentCharacterAsInteger <= 127))\n                {\n                    // character needs to be encoded\n                    if (currentCharacterAsInteger >= 127)\n                    {\n                        returnMe[outputLength++] = '\\\\';\n                        returnMe[outputLength++] = 'u';\n                        string hex = ((int)currentCharacter).ToString(\"x\", CultureInfo.InvariantCulture).PadLeft(4, '0');\n                        returnMe[outputLength++] = hex[0];\n                        returnMe[outputLength++] = hex[1];\n                        returnMe[outputLength++] = hex[2];\n                        returnMe[outputLength++] = hex[3];\n                    }\n                    else\n                    {\n                        returnMe[outputLength++] = '\\\\';\n                        returnMe[outputLength++] = 'x';\n                        string hex = ((int)currentCharacter).ToString(\"x\", CultureInfo.InvariantCulture).PadLeft(2, '0');\n                        returnMe[outputLength++] = hex[0];\n                        returnMe[outputLength++] = hex[1];\n                    }\n                }\n                else\n                {\n                    // character does not need encoding\n                    returnMe[outputLength++] = input[i];\n                }\n            }\n\n            // Last step is to end the encoding with an apostrophe if flag is true.\n            if (emitQuotes)\n            {\n                returnMe[outputLength++] = '\\'';\n            }\n\n            return new string(returnMe, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in Visual Basic Script.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded.</param>\n        /// <returns>\n        /// Encoded string for use in Visual Basic Script.\n        /// </returns>\n        /// <remarks>\n        /// This function encodes all but known safe characters.  Characters are \n        /// encoded using &#38;chrw(DECIMAL) notation.\n        /// <newpara/>\n        /// Safe characters include:\n        /// <list type=\"table\">\n        /// <item><term>a-z</term><description>Lower case alphabet</description></item>\n        /// <item><term>A-Z</term><description>Upper case alphabet</description></item>\n        /// <item><term>0-9</term><description>Numbers</description></item>\n        /// <item><term>,</term><description>Comma</description></item>\n        /// <item><term>.</term><description>Period</description></item>\n        /// <item><term>-</term><description>Dash</description></item>\n        /// <item><term>_</term><description>Underscore</description></item>\n        /// <item><term> </term><description>Space</description></item>\n        /// </list>\n        /// <newpara/>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>alert('XSS Attack!');</term><description>\"alert\"&#38;chrw(40)&#38;chrw(39)&#38;\"XSS Attack\"&#38;chrw(33)&#38;chrw(39)&#38;chrw(41)&#38;chrw(59)</description></item>\n        /// <item><term>user@contoso.com</term><description>\"user\"&#38;chrw(64)&#38;\"contoso.com\"</description></item>\n        /// <item><term>Anti-Cross Site Scripting Library</term><description>\"Anti-Cross Site Scripting Library\"</description></item>\n        /// </list></remarks>\n        public static string VisualBasicScriptEncode(string input)\n        {\n            // Input validation: empty or null string condition\n            if (string.IsNullOrEmpty(input))\n            {\n                return VbScriptEmptyString;\n            }\n\n            // Use a new char array.\n            int outputLength = 0;\n            int inputLength = input.Length;\n            char[] encodedInput = new char[inputLength * 12]; // worst case length scenario\n\n            // flag to surround double quotes around safe characters\n            bool isInQuotes = false;\n\n            for (int i = 0; i < inputLength; i++)\n            {\n                int currentCharacterAsInteger = input[i];\n                char currentCharacter = input[i];\n                if (safeListCodes[currentCharacterAsInteger] != null)\n                {\n                    // character needs to be encoded\n\n                    // surround in quotes\n                    if (isInQuotes)\n                    {\n                        // get out of quotes\n                        encodedInput[outputLength++] = '\"';\n                        isInQuotes = false;\n                    }\n\n                    // adding \"encoded\" characters\n                    string temp = \"&chrw(\" + ((uint)currentCharacter) + \")\";\n                    foreach (char ch in temp)\n                    {\n                        encodedInput[outputLength++] = ch;\n                    }\n                }\n                else\n                {\n                    // character does not need encoding\n                    // surround in quotes\n                    if (!isInQuotes)\n                    {\n                        // add quotes to start\n                        encodedInput[outputLength++] = '&';\n                        encodedInput[outputLength++] = '\"';\n                        isInQuotes = true;\n                    }\n\n                    encodedInput[outputLength++] = input[i];\n                }\n            }\n\n            // if we're inside of quotes, close them\n            if (isInQuotes)\n            {\n                encodedInput[outputLength++] = '\"';\n            }\n\n            // finally strip extraneous \"&\" from beginning of the string, if necessary and RETURN\n            if (encodedInput.Length > 0 && encodedInput[0] == '&')\n            {\n                return new string(encodedInput, 1, outputLength - 1);\n            }\n\n            return new string(encodedInput, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Initializes the safe list.\n        /// </summary>\n        /// <returns>A two dimensional character array containing characters and their encoded values.</returns>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Maintainability\", \"CA1502:AvoidExcessiveComplexity\", Justification = \"This is necessary complexity.\")]\n        private static char[][] InitializeSafeList()\n        {\n            char[][] allCharacters = new char[65536][];\n            for (int i = 0; i < allCharacters.Length; i++)\n            {\n                if (\n                    (i >= 97 && i <= 122) ||        // a-z\n                    (i >= 65 && i <= 90) ||         // A-Z\n                    (i >= 48 && i <= 57) ||         // 0-9\n                    i == 32 ||                      // space\n                    i == 46 ||                      // .\n                    i == 44 ||                      // ,\n                    i == 45 ||                      // -\n                    i == 95 ||                      // _\n                    (i >= 256 && i <= 591) ||       // Latin,Extended-A,Latin Extended-B        \n                    (i >= 880 && i <= 2047) ||      // Greek and Coptic,Cyrillic,Cyrillic Supplement,Armenian,Hebrew,Arabic,Syriac,Arabic,Supplement,Thaana,NKo\n                    (i >= 2304 && i <= 6319) ||     // Devanagari,Bengali,Gurmukhi,Gujarati,Oriya,Tamil,Telugu,Kannada,Malayalam,Sinhala,Thai,Lao,Tibetan,Myanmar,eorgian,Hangul Jamo,Ethiopic,Ethiopic Supplement,Cherokee,Unified Canadian Aboriginal Syllabics,Ogham,Runic,Tagalog,Hanunoo,Buhid,Tagbanwa,Khmer,Mongolian   \n                    (i >= 6400 && i <= 6687) ||     // Limbu, Tai Le, New Tai Lue, Khmer, Symbols, Buginese\n                    (i >= 6912 && i <= 7039) ||     // Balinese         \n                    (i >= 7680 && i <= 8191) ||     // Latin Extended Additional, Greek Extended        \n                    (i >= 11264 && i <= 11743) ||   // Glagolitic, Latin Extended-C, Coptic, Georgian Supplement, Tifinagh, Ethiopic Extended    \n                    (i >= 12352 && i <= 12591) ||   // Hiragana, Katakana, Bopomofo       \n                    (i >= 12688 && i <= 12735) ||   // Kanbun, Bopomofo Extended        \n                    (i >= 12784 && i <= 12799) ||   // Katakana, Phonetic Extensions         \n                    (i >= 19968 && i <= 40899) ||   // Mixed japanese/chinese/korean\n                    (i >= 40960 && i <= 42191) ||   // Yi Syllables, Yi Radicals        \n                    (i >= 42784 && i <= 43055) ||   // Latin Extended-D, Syloti, Nagri        \n                    (i >= 43072 && i <= 43135) ||   // Phags-pa         \n                    (i >= 44032 && i <= 55215) /* Hangul Syllables */)\n                {\n                    allCharacters[i] = null;\n                }\n                else\n                {\n                    string integerStringValue = i.ToString(CultureInfo.InvariantCulture);\n                    int integerStringLength = integerStringValue.Length;\n                    char[] thisChar = new char[integerStringLength];\n                    for (int j = 0; j < integerStringLength; j++)\n                    {\n                        thisChar[j] = integerStringValue[j];\n                    }\n\n                    allCharacters[i] = thisChar;\n                }\n            }\n\n            return allCharacters;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/GlobalSuppressions.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"GlobalSuppressions.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n// </copyright>\n// <summary>\n//   Global FXCop supressions.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\n\n[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Usage\", \"CA2243:AttributeStringLiteralsShouldParseCorrectly\")]\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/HtmlParameterEncoder.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"HtmlParameterEncoder.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides HTML Parameter Encoding methods.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter.Security.Application\n{\n    using System;\n    using System.Collections;\n    using System.Text;\n\n    /// <summary>\n    /// The type of space encoding to use.\n    /// </summary>\n    internal enum EncodingType\n    {\n        /// <summary>\n        /// Encode spaces for use in query strings\n        /// </summary>\n        QueryString = 1,\n\n        /// <summary>\n        /// Encode spaces for use in form data\n        /// </summary>\n        HtmlForm = 2\n    }\n\n    /// <summary>\n    /// Provides Html Parameter Encoding methods.\n    /// </summary>\n    internal static class HtmlParameterEncoder\n    {\n        /// <summary>\n        /// A lock object to use when performing safe listing.\n        /// </summary>\n        private static readonly ReaderWriterLock syncLock = new ReaderWriterLock();\n\n        /// <summary>\n        /// The value to use when encoding a space for query strings.\n        /// </summary>\n        private static readonly char[] queryStringSpace = \"%20\".ToCharArray();\n\n        /// <summary>\n        /// The value to use when encoding a space for form data.\n        /// </summary>\n        private static readonly char[] FormStringSpace = \"+\".ToCharArray();\n\n        /// <summary>\n        /// The values to output for each character.\n        /// </summary>\n        private static char[][] characterValues;\n\n        /// <summary>\n        /// Encodes a string for query string encoding and returns the encoded string.\n        /// </summary>\n        /// <param name=\"s\">The text to URL-encode.</param>\n        /// <param name=\"encoding\">The encoding for the text parameter.</param>\n        /// <returns>The URL-encoded text.</returns>\n        /// <remarks>URL encoding ensures that all browsers will correctly transmit text in URL strings. \n        /// Characters such as a question mark (?), ampersand (&amp;), slash mark (/), and spaces might be truncated or corrupted by some browsers. \n        /// As a result, these characters must be encoded in &lt;a&gt; tags or in query strings where the strings can be re-sent by a browser \n        /// in a request string.</remarks>\n        /// <exception cref=\"ArgumentNullException\">Thrown if the encoding is null.</exception>\n        internal static string QueryStringParameterEncode(string s, Encoding encoding)\n        {\n            return FormQueryEncode(s, encoding, EncodingType.QueryString);\n        }\n\n        /// <summary>\n        /// Encodes a string for form URL encoding and returns the encoded string.\n        /// </summary>\n        /// <param name=\"s\">The text to URL-encode.</param>\n        /// <param name=\"encoding\">The encoding for the text parameter.</param>\n        /// <returns>The URL-encoded text.</returns>\n        /// <remarks>URL encoding ensures that all browsers will correctly transmit text in URL strings. \n        /// Characters such as a question mark (?), ampersand (&amp;), slash mark (/), and spaces might be truncated or corrupted by some browsers. \n        /// As a result, these characters must be encoded in &lt;a&gt; tags or in query strings where the strings can be re-sent by a browser \n        /// in a request string.</remarks>\n        /// <exception cref=\"ArgumentNullException\">Thrown if the encoding is null.</exception>\n        internal static string FormStringParameterEncode(string s, Encoding encoding)\n        {\n            return FormQueryEncode(s, encoding, EncodingType.HtmlForm);\n        }\n\n        /// <summary>\n        /// Encodes a string for Query String or Form Data encoding.\n        /// </summary>\n        /// <param name=\"s\">The text to URL-encode.</param>\n        /// <param name=\"encoding\">The encoding for the text parameter.</param>\n        /// <param name=\"encodingType\">The encoding type to use.</param>\n        /// <returns>The encoded text.</returns>\n        private static string FormQueryEncode(string s, Encoding encoding, EncodingType encodingType)\n        {\n            if (string.IsNullOrEmpty(s))\n            {\n                return s;\n            }\n\n            if (encoding == null)\n            {\n                throw new ArgumentNullException(\"encoding\");\n            }\n\n            if (characterValues == null)\n            {\n                InitialiseSafeList();\n            }\n\n            // RFC 3986 states strings must be converted to their UTF8 value before URL encoding.\n            // See http://tools.ietf.org/html/rfc3986\n            // Conversion to char[] keeps null characters inline.\n            byte[] utf8Bytes = encoding.GetBytes(s.ToCharArray());\n            char[] encodedInput = new char[utf8Bytes.Length * 3]; // Each byte can potentially be encoded as %xx\n            int outputLength = 0;\n\n            for (int characterPosition = 0; characterPosition < utf8Bytes.Length; characterPosition++)\n            {\n                byte currentCharacter = utf8Bytes[characterPosition];\n\n                if (currentCharacter == 0x00 || currentCharacter == 0x20 || currentCharacter > characterValues.Length || characterValues[currentCharacter] != null)\n                {                \n                    // character needs to be encoded\n                    char[] encodedCharacter;\n                    \n                    if (currentCharacter == 0x20)\n                    {\n                        switch (encodingType)\n                        {\n                            case EncodingType.QueryString:\n                                encodedCharacter = queryStringSpace;\n                                break;\n                            \n                            // Special case for Html Form data, from http://www.w3.org/TR/html401/appendix/notes.html#non-ascii-chars\n                            case EncodingType.HtmlForm:\n                                encodedCharacter = FormStringSpace;\n                                break;\n                            \n                            default:\n                                throw new ArgumentOutOfRangeException(\"encodingType\");\n                        }\n                    }\n                    else\n                    {\n                        encodedCharacter = characterValues[currentCharacter];\n                    }\n\n                    for (int j = 0; j < encodedCharacter.Length; j++)\n                    {\n                        encodedInput[outputLength++] = encodedCharacter[j];\n                    }\n                }\n                else\n                {\n                    // character does not need encoding\n                    encodedInput[outputLength++] = (char)currentCharacter;\n                }\n            }\n\n            return new string(encodedInput, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Initializes the HTML safe list.\n        /// </summary>\n        private static void InitialiseSafeList()\n        {\n            syncLock.EnterWriteLock();\n            try\n            {\n                characterValues = SafeList.Generate(255, SafeList.PercentThenHexValueGenerator);\n                SafeList.PunchSafeList(ref characterValues, UrlParameterSafeList());\n            }\n            finally\n            {\n                syncLock.ExitWriteLock();\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for URL parameter encoding.\n        /// </summary>\n        /// <returns>The safe characters for URL parameter encoding.</returns>\n        private static IEnumerable UrlParameterSafeList()\n        {\n            // Hyphen\n            yield return 0x2D;\n\n            // Full stop/period\n            yield return 0x2E;\n\n            // Digits\n            for (int i = 0x30; i <= 0x39; i++)\n            {\n                yield return i;\n            }  \n            \n            // Upper case alphabet\n            for (int i = 0x41; i <= 0x5A; i++)\n            {\n                yield return i;\n            }\n\n            // Underscore\n            yield return 0x5F;\n\n            // Lower case alphabet\n            for (int i = 0x61; i <= 0x7A; i++)\n            {\n                yield return i;\n            }\n     \n            // Tilde\n            yield return 0x7E;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/InvalidSurrogatePairException.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InvalidSurrogatePairException.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Thrown when a bad surrogate pair is encountered.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application\n{\n    using System;\n    using System.Globalization;\n\n    /// <summary>\n    /// Thrown when a bad surrogate pair is encountered.\n    /// </summary>\n    [System.Diagnostics.CodeAnalysis.SuppressMessage(\n        \"Microsoft.Usage\",\n        \"CA2237:MarkISerializableTypesWithSerializable\",\n        Justification = \"The exception does not leave the application domain and serialization breaks medium trust.\")]\n    [System.Diagnostics.CodeAnalysis.SuppressMessage(\n        \"Microsoft.Design\",\n        \"CA1032:ImplementStandardExceptionConstructors\",\n        Justification = \"The exception does not leave the application domain and serialization breaks medium trust.\")]\n    public class InvalidSurrogatePairException : Exception\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidSurrogatePairException\"/> class.\n        /// </summary>\n        public InvalidSurrogatePairException()\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidSurrogatePairException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        public InvalidSurrogatePairException(string message)\n            : base(message)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidSurrogatePairException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        /// <param name=\"inner\">The inner exception.</param>\n        public InvalidSurrogatePairException(string message, Exception inner)\n            : base(message, inner)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidSurrogatePairException\"/> class.\n        /// </summary>\n        /// <param name=\"highSurrogate\">The high surrogate value which caused the error.</param>\n        /// <param name=\"lowSurrogate\">The low surrogate value which caused the error.</param>\n        public InvalidSurrogatePairException(char highSurrogate, char lowSurrogate)\n        {\n            this.HighSurrogate = highSurrogate;\n            this.LowSurrogate = lowSurrogate;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidSurrogatePairException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        /// <param name=\"highSurrogate\">The high surrogate value which caused the error.</param>\n        /// <param name=\"lowSurrogate\">The low surrogate value which caused the error.</param>\n        public InvalidSurrogatePairException(string message, char highSurrogate, char lowSurrogate)\n            : base(message)\n        {\n            this.HighSurrogate = highSurrogate;\n            this.LowSurrogate = lowSurrogate;\n        }\n\n        /// <summary>\n        /// Gets or sets the high surrogate value.\n        /// </summary>\n        /// <value>The high surrogate.</value>\n        public char HighSurrogate\n        {\n            get;\n            protected set;\n        }\n\n        /// <summary>\n        /// Gets or sets the low surrogate value.\n        /// </summary>\n        /// <value>The low surrogate.</value>\n        public char LowSurrogate\n        {\n            get;\n            protected set;\n        }\n\n        /// <summary>\n        /// Gets a message that describes the current exception.\n        /// </summary>\n        /// <returns>The error message that explains the reason for the exception, or an empty string(\"\").</returns>\n        public override string Message\n        {\n            get\n            {\n                if (this.HighSurrogate == 0 && this.LowSurrogate == 0)\n                {\n                    return base.Message;\n                }\n\n                string surrogatePair = string.Format(\n                    CultureInfo.CurrentUICulture,\n                    \"Surrogate Pair = \t{0:x4}:{1:x4}\", \n                    Convert.ToInt32(this.HighSurrogate), \n                    Convert.ToInt32(this.LowSurrogate));\n\n                return surrogatePair + Environment.NewLine + \"Message: \" + base.Message;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/InvalidUnicodeValueException.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InvalidUnicodeValueException.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Thrown when a invalid Unicode valid is encountered.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application\n{\n    using System;\n    using System.Globalization;\n\n    /// <summary>\n    /// Thrown when a invalid Unicode valid is encountered.\n    /// </summary>\n    [System.Diagnostics.CodeAnalysis.SuppressMessage(\n        \"Microsoft.Usage\",\n        \"CA2237:MarkISerializableTypesWithSerializable\",\n        Justification = \"The exception does not leave the application domain and serialization breaks medium trust.\")]\n    [System.Diagnostics.CodeAnalysis.SuppressMessage(\n        \"Microsoft.Design\",\n        \"CA1032:ImplementStandardExceptionConstructors\",\n        Justification = \"The exception does not leave the application domain and serialization breaks medium trust.\")]\n    public class InvalidUnicodeValueException : Exception\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidUnicodeValueException\"/> class.\n        /// </summary>\n        public InvalidUnicodeValueException()\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidUnicodeValueException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        public InvalidUnicodeValueException(string message)\n            : base(message)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidUnicodeValueException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        /// <param name=\"inner\">The inner exception.</param>\n        public InvalidUnicodeValueException(string message, Exception inner)\n            : base(message, inner)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidUnicodeValueException\"/> class.\n        /// </summary>\n        /// <param name=\"value\">The invalid value.</param>\n        public InvalidUnicodeValueException(int value)\n        {\n            this.Value = value;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"InvalidUnicodeValueException\"/> class.\n        /// </summary>\n        /// <param name=\"message\">The message.</param>\n        /// <param name=\"value\">The invalid value.</param>\n        public InvalidUnicodeValueException(string message, int value)\n            : base(message)\n        {\n            this.Value = value;\n        }\n\n        /// <summary>\n        /// Gets or sets the the invalid value.\n        /// </summary>\n        /// <value>The invalid value.</value>\n        public int Value\n        {\n            get;\n            protected set;\n        }\n\n        /// <summary>\n        /// Gets a message that describes the current exception.\n        /// </summary>\n        /// <returns>The error message that explains the reason for the exception, or an empty string(\"\").</returns>\n        public override string Message\n        {\n            get\n            {\n                if (this.Value == 0)\n                {\n                    return base.Message;\n                }\n\n                return string.Format(CultureInfo.CurrentUICulture, \"Value : {0:x4}\", this.Value) + Environment.NewLine + \"Message: \" + base.Message;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/LdapEncoder.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"LdapEncoder.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides LDAP Encoding methods.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter.Security.Application\n{\n    using System.Collections;\n    using System.Text;\n\n    /// <summary>\n    /// Provides LDAP Encoding methods.\n    /// </summary>\n    internal static class LdapEncoder\n    {\n        /// <summary>\n        /// A lock object to use when performing filter safe listing initialization.\n        /// </summary>\n        private static readonly ReaderWriterLock FilterSafeListSyncLock = new ReaderWriterLock();\n\n        /// <summary>\n        /// A lock object to use when performing DN safe listing initialization.\n        /// </summary>\n        private static readonly ReaderWriterLock DistinguishedNameSafeListSyncLock = new ReaderWriterLock();\n\n        /// <summary>\n        /// The values to output for each character when filter encoding.\n        /// </summary>\n        private static char[][] filterCharacterValues;\n\n        /// <summary>\n        /// The values to output for each character when DN encoding.\n        /// </summary>\n        private static char[][] distinguishedNameCharacterValues;\n\n        /// <summary>\n        /// Encodes the input string for use in LDAP filters.\n        /// </summary>\n        /// <param name=\"input\">The string to encode.</param>\n        /// <returns>An encoded version of the input string suitable for use in LDAP filters.</returns>\n        internal static string FilterEncode(string input)\n        {\n            if (string.IsNullOrEmpty(input))\n            {\n                return input;\n            }\n\n            if (filterCharacterValues == null)\n            {\n                InitialiseFilterSafeList();\n            }\n\n            // RFC 4515 states strings must be converted to their UTF8 value before search filter encoding.\n            // See http://tools.ietf.org/html/rfc4515\n            // Conversion to char[] keeps null characters inline.\n            byte[] utf8Bytes = Encoding.UTF8.GetBytes(input.ToCharArray());\n            char[] encodedInput = new char[utf8Bytes.Length * 3]; // Each byte can potentially be encoded as %xx\n            int outputLength = 0;\n\n            FilterSafeListSyncLock.EnterReadLock();\n            try\n            {\n                for (int characterPosition = 0; characterPosition < utf8Bytes.Length; characterPosition++)\n                {\n                    byte currentCharacter = utf8Bytes[characterPosition];\n\n                    if (filterCharacterValues[currentCharacter] != null)\n                    {\n                        // Character needs encoding.\n                        char[] encodedCharacter = filterCharacterValues[currentCharacter];\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n                    }\n                    else\n                    {\n                        // Character does not need encoding.\n                        encodedInput[outputLength++] = (char)currentCharacter;\n                    }\n                }\n            }\n            finally\n            {\n                FilterSafeListSyncLock.ExitReadLock();\n            }\n\n            return new string(encodedInput, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Encodes the input string for use in LDAP DNs.\n        /// </summary>\n        /// <param name=\"input\">The string to encode.</param>\n        /// <param name=\"useInitialCharacterRules\">Value indicating whether the special case rules for encoding of spaces and octothorpes at the start of a string are used.</param>\n        /// <param name=\"useFinalCharacterRule\">Value indicating whether the special case for encoding of final character spaces is used.</param>\n        /// <returns>An encoded version of the input string suitable for use in LDAP DNs.</returns>\n        internal static string DistinguishedNameEncode(string input, bool useInitialCharacterRules, bool useFinalCharacterRule)\n        {\n            if (string.IsNullOrEmpty(input))\n            {\n                return input;\n            }\n\n            if (distinguishedNameCharacterValues == null)\n            {\n                InitialiseDistinguishedNameSafeList();\n            }\n\n            byte[] utf8Bytes = Encoding.UTF8.GetBytes(input.ToCharArray());\n            char[] encodedInput = new char[utf8Bytes.Length * 3]; // Each byte can potentially be encoded as #xx\n            int outputLength = 0;\n\n            DistinguishedNameSafeListSyncLock.EnterReadLock();\n            try\n            {\n                for (int characterPosition = 0; characterPosition < utf8Bytes.Length; characterPosition++)\n                {\n                    byte currentCharacter = utf8Bytes[characterPosition];\n\n                    if (characterPosition == 0 && currentCharacter == ' ' && useInitialCharacterRules)\n                    {\n                        // rfc2253 states spaces at the start of a string must be escaped\n                        encodedInput[outputLength++] = '\\\\';\n                        encodedInput[outputLength++] = ' ';\n                    }\n                    else if (characterPosition == 0 && currentCharacter == '#' && useInitialCharacterRules)\n                    {\n                        // rfc2253 states hashes at the start of a string must be escaped\n                        encodedInput[outputLength++] = '\\\\';\n                        encodedInput[outputLength++] = '#';\n                    }\n                    else if (characterPosition == (utf8Bytes.Length - 1) && currentCharacter == ' ' &&\n                             useFinalCharacterRule)\n                    {\n                        // rfc2253 states spaces at the end of a string must be escaped\n                        encodedInput[outputLength++] = '\\\\';\n                        encodedInput[outputLength++] = ' ';\n                    }\n                    else if (distinguishedNameCharacterValues[currentCharacter] != null)\n                    {\n                        // Character needs encoding.\n                        char[] encodedCharacter = distinguishedNameCharacterValues[currentCharacter];\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n                    }\n                    else\n                    {\n                        // Character does not need encoding.\n                        encodedInput[outputLength++] = (char)currentCharacter;\n                    }\n                }\n            }\n            finally\n            {\n                DistinguishedNameSafeListSyncLock.ExitReadLock();\n            }\n\n            return new string(encodedInput, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Initializes the LDAP filter safe lists.\n        /// </summary>\n        private static void InitialiseFilterSafeList()\n        {\n            FilterSafeListSyncLock.EnterWriteLock();\n            try\n            {\n                if (filterCharacterValues == null)\n                {\n                    filterCharacterValues = SafeList.Generate(255, SafeList.SlashThenHexValueGenerator);\n                    SafeList.PunchSafeList(ref filterCharacterValues, FilterEncodingSafeList());\n                }\n            }\n            finally\n            {\n                FilterSafeListSyncLock.ExitWriteLock();\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for LDAP filter encoding.\n        /// </summary>\n        /// <returns>The safe characters for LDAP filter encoding.</returns>\n        /// <remarks>See http://tools.ietf.org/html/rfc4515/</remarks>\n        private static IEnumerable FilterEncodingSafeList()\n        {\n            for (int i = 0x20; i <= 0x7E; i++)\n            {\n                // Escape dangerous filter characters\n                // See http://projects.webappsec.org/LDAP-Injection\n                if (i == '(' ||\n                    i == ')' ||\n                    i == '*' ||\n                    i == '/' ||\n                    i == '\\\\')\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Initializes the LDAP DN safe lists.\n        /// </summary>\n        private static void InitialiseDistinguishedNameSafeList()\n        {\n            DistinguishedNameSafeListSyncLock.EnterWriteLock();\n            try\n            {\n                if (distinguishedNameCharacterValues == null)\n                {\n                    distinguishedNameCharacterValues = SafeList.Generate(255, SafeList.HashThenHexValueGenerator);\n                    SafeList.PunchSafeList(ref distinguishedNameCharacterValues, DistinguishedNameSafeList());\n\n                    // Now mark up the specially listed characters from http://www.ietf.org/rfc/rfc2253.txt\n                    EscapeDistinguisedNameCharacter(',');\n                    EscapeDistinguisedNameCharacter('+');\n                    EscapeDistinguisedNameCharacter('\"');\n                    EscapeDistinguisedNameCharacter('\\\\');\n                    EscapeDistinguisedNameCharacter('<');\n                    EscapeDistinguisedNameCharacter('>');\n                    EscapeDistinguisedNameCharacter(';');\n                }\n            }\n            finally\n            {\n                DistinguishedNameSafeListSyncLock.ExitWriteLock();\n            }\n        }\n\n        /// <summary>\n        /// Provides the safe characters for LDAP filter encoding.\n        /// </summary>\n        /// <returns>The safe characters for LDAP filter encoding.</returns>\n        /// <remarks>See http://www.ietf.org/rfc/rfc2253.txt </remarks>\n        private static IEnumerable DistinguishedNameSafeList()\n        {\n            for (int i = 0x20; i <= 0x7E; i++)\n            {\n                // RFC mandated escapes.\n                if (i == ',' ||\n                    i == '+' ||\n                    i == '\"' ||\n                    i == '\\\\' ||\n                    i == '<' ||\n                    i == '>')\n                {\n                    continue;\n                }\n\n                // Safety escapes\n                // See http://projects.webappsec.org/LDAP-Injection\n                if (i == '&' ||\n                    i == '!' ||\n                    i == '|' ||\n                    i == '=' ||\n                    i == '-' ||\n                    i == '\\'' ||\n                    i == ';')\n                {\n                    continue;\n                }\n\n                yield return i;\n            }\n        }\n\n        /// <summary>\n        /// Escapes a special DN character.\n        /// </summary>\n        /// <param name=\"c\">The character to escape.</param>\n        private static void EscapeDistinguisedNameCharacter(char c)\n        {\n            distinguishedNameCharacterValues[c] = new[] { '\\\\', c };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/SafeList.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"SafeList.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides safe list utility functions.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\nnamespace LinqToTwitter.Security.Application\n{\n    using System.Collections;\n    using System.Globalization;\n\n    /// <summary>\n    /// Provides safe list utility functions.\n    /// </summary>\n    internal static class SafeList\n    {\n        /// <summary>\n        /// Generates a safe character array representing the specified value.\n        /// </summary>\n        /// <returns>A safe character array representing the specified value.</returns>\n        /// <param name=\"value\">The value to generate a safe representation for.</param>\n        internal delegate char[] GenerateSafeValue(int value);\n\n        /// <summary>\n        /// Generates a new safe list of the specified size, using the specified function to produce safe values.\n        /// </summary>\n        /// <param name=\"length\">The length of the safe list to generate.</param>\n        /// <param name=\"generateSafeValue\">The <see cref=\"GenerateSafeValue\"/> function to use.</param>\n        /// <returns>A new safe list.</returns>\n        internal static char[][] Generate(int length, GenerateSafeValue generateSafeValue)\n        {\n            char[][] allCharacters = new char[length + 1][];\n            for (int i = 0; i <= length; i++)\n            {\n                allCharacters[i] = generateSafeValue(i);\n            }\n\n            return allCharacters;\n        }\n\n        /// <summary>\n        /// Marks characters from the specified languages as safe.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch holes in.</param>\n        /// <param name=\"lowerCodeCharts\">The combination of lower code charts to use.</param>\n        /// <param name=\"lowerMidCodeCharts\">The combination of lower mid code charts to use.</param>\n        /// <param name=\"midCodeCharts\">The combination of mid code charts to use.</param>\n        /// <param name=\"upperMidCodeCharts\">The combination of upper mid code charts to use.</param>\n        /// <param name=\"upperCodeCharts\">The combination of upper code charts to use.</param>\n        internal static void PunchUnicodeThrough(\n            ref char[][] safeList,\n            LowerCodeCharts lowerCodeCharts, \n            LowerMidCodeCharts lowerMidCodeCharts, \n            MidCodeCharts midCodeCharts, \n            UpperMidCodeCharts upperMidCodeCharts, \n            UpperCodeCharts upperCodeCharts)\n        {\n            if (lowerCodeCharts != LowerCodeCharts.None)\n            {\n                PunchCodeCharts(ref safeList, lowerCodeCharts);\n            }\n\n            if (lowerMidCodeCharts != LowerMidCodeCharts.None)\n            {\n                PunchCodeCharts(ref safeList, lowerMidCodeCharts);\n            }\n\n            if (midCodeCharts != MidCodeCharts.None)\n            {\n                PunchCodeCharts(ref safeList, midCodeCharts);\n            }\n\n            if (upperMidCodeCharts != UpperMidCodeCharts.None)\n            {\n                PunchCodeCharts(ref safeList, upperMidCodeCharts);\n            }\n\n            if (upperCodeCharts != UpperCodeCharts.None)\n            {\n                PunchCodeCharts(ref safeList, upperCodeCharts);\n            }\n        }\n\n        /// <summary>\n        /// Punches holes as necessary.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"whiteListedCharacters\">The list of character positions to punch.</param>\n        internal static void PunchSafeList(ref char[][] safeList, IEnumerable whiteListedCharacters)\n        {\n            PunchHolesIfNeeded(ref safeList, true, whiteListedCharacters);\n        }\n\n        /// <summary>\n        /// Generates a hash prefixed character array representing the specified value.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>#1</description></item>\n        /// <item><term>10</term><description>#10</description></item>\n        /// <item><term>100</term><description>#100</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] HashThenValueGenerator(int value)\n        {\n            return StringToCharArrayWithHashPrefix(value.ToString(CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a hash prefixed character array representing the specified value in hexadecimal.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>#1</description></item>\n        /// <item><term>10</term><description>#0a</description></item>\n        /// <item><term>100</term><description>#64</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] HashThenHexValueGenerator(int value)\n        {\n            return StringToCharArrayWithHashPrefix(value.ToString(\"x2\", CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a percent prefixed character array representing the specified value in hexadecimal.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>%01</description></item>\n        /// <item><term>10</term><description>%0a</description></item>\n        /// <item><term>100</term><description>%64</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] PercentThenHexValueGenerator(int value)\n        {\n            return StringToCharArrayWithPercentPrefix(value.ToString(\"x2\", CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a slash prefixed character array representing the specified value in hexadecimal.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>\\01</description></item>\n        /// <item><term>10</term><description>\\0a</description></item>\n        /// <item><term>100</term><description>\\64</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] SlashThenHexValueGenerator(int value)\n        {\n            return StringToCharArrayWithSlashPrefix(value.ToString(\"x2\", CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a slash prefixed character array representing the specified value in hexadecimal.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>\\000001</description></item>\n        /// <item><term>10</term><description>\\000000A</description></item>\n        /// <item><term>100</term><description>\\000064</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] SlashThenSixDigitHexValueGenerator(long value)\n        {\n            return StringToCharArrayWithSlashPrefix(value.ToString(\"X6\", CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a slash prefixed character array representing the specified value in hexadecimal.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>\\000001</description></item>\n        /// <item><term>10</term><description>\\000000A</description></item>\n        /// <item><term>100</term><description>\\000064</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] SlashThenSixDigitHexValueGenerator(int value)\n        {\n            return StringToCharArrayWithSlashPrefix(value.ToString(\"X6\", CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a hash prefixed character array representing the specified value.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>#1</description></item>\n        /// <item><term>10</term><description>#10</description></item>\n        /// <item><term>100</term><description>#100</description></item>\n        /// </list>\n        /// </remarks>\n        internal static char[] HashThenValueGenerator(long value)\n        {\n            return StringToCharArrayWithHashPrefix(value.ToString(CultureInfo.InvariantCulture));\n        }\n\n        /// <summary>\n        /// Generates a hash prefixed character array from the specified string.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>#1</description></item>\n        /// <item><term>10</term><description>#10</description></item>\n        /// <item><term>100</term><description>#100</description></item>\n        /// </list>\n        /// </remarks>\n        private static char[] StringToCharArrayWithHashPrefix(string value)\n        {\n            return StringToCharArrayWithPrefix(value, '#');            \n        }\n\n        /// <summary>\n        /// Generates a percent prefixed character array from the specified string.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>%1</description></item>\n        /// <item><term>10</term><description>%10</description></item>\n        /// <item><term>100</term><description>%100</description></item>\n        /// </list>\n        /// </remarks>\n        private static char[] StringToCharArrayWithPercentPrefix(string value)\n        {\n            return StringToCharArrayWithPrefix(value, '%');            \n        }\n\n        /// <summary>\n        /// Generates a slash prefixed character array from the specified string.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <returns>A character array representing the specified value.</returns>\n        /// <remarks>\n        /// Example inputs and encoded outputs:\n        /// <list type=\"table\">\n        /// <item><term>1</term><description>\\1</description></item>\n        /// <item><term>10</term><description>\\10</description></item>\n        /// <item><term>100</term><description>\\100</description></item>\n        /// </list>\n        /// </remarks>\n        private static char[] StringToCharArrayWithSlashPrefix(string value)\n        {\n            return StringToCharArrayWithPrefix(value, '\\\\');\n        }\n\n        /// <summary>\n        /// Generates a prefixed character array from the specified string and prefix.\n        /// </summary>\n        /// <param name=\"value\">The source value.</param>\n        /// <param name=\"prefix\">The prefix to use.</param>\n        /// <returns>A prefixed character array representing the specified value.</returns>\n        private static char[] StringToCharArrayWithPrefix(string value, char prefix)\n        {\n            int valueAsStringLength = value.Length;\n\n            char[] valueAsCharArray = new char[valueAsStringLength + 1];\n            valueAsCharArray[0] = prefix;\n            for (int j = 0; j < valueAsStringLength; j++)\n            {\n                valueAsCharArray[j + 1] = value[j];\n            }\n\n            return valueAsCharArray;\n        }\n\n        /// <summary>\n        /// Punch appropriate holes for the selected code charts.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"codeCharts\">The code charts to punch.</param>\n        private static void PunchCodeCharts(ref char[][] safeList, LowerCodeCharts codeCharts)\n        {\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.BasicLatin), CodeCharts.Lower.BasicLatin());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.C1ControlsAndLatin1Supplement), CodeCharts.Lower.Latin1Supplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.LatinExtendedA), CodeCharts.Lower.LatinExtendedA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.LatinExtendedB), CodeCharts.Lower.LatinExtendedB());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.IpaExtensions), CodeCharts.Lower.IpaExtensions());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.SpacingModifierLetters), CodeCharts.Lower.SpacingModifierLetters());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.CombiningDiacriticalMarks), CodeCharts.Lower.CombiningDiacriticalMarks());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.GreekAndCoptic), CodeCharts.Lower.GreekAndCoptic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Cyrillic), CodeCharts.Lower.Cyrillic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.CyrillicSupplement), CodeCharts.Lower.CyrillicSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Armenian), CodeCharts.Lower.Armenian());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Hebrew), CodeCharts.Lower.Hebrew());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Arabic), CodeCharts.Lower.Arabic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Syriac), CodeCharts.Lower.Syriac());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.ArabicSupplement), CodeCharts.Lower.ArabicSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Thaana), CodeCharts.Lower.Thaana());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Nko), CodeCharts.Lower.Nko());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Samaritan), CodeCharts.Lower.Samaritan());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Devanagari), CodeCharts.Lower.Devanagari());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Bengali), CodeCharts.Lower.Bengali());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Gurmukhi), CodeCharts.Lower.Gurmukhi());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Gujarati), CodeCharts.Lower.Gujarati());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Oriya), CodeCharts.Lower.Oriya());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Tamil), CodeCharts.Lower.Tamil());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Telugu), CodeCharts.Lower.Telugu());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Kannada), CodeCharts.Lower.Kannada());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Malayalam), CodeCharts.Lower.Malayalam());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Sinhala), CodeCharts.Lower.Sinhala());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Thai), CodeCharts.Lower.Thai());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Lao), CodeCharts.Lower.Lao());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Lower.IsFlagSet(codeCharts, LowerCodeCharts.Tibetan), CodeCharts.Lower.Tibetan());\n        }\n\n        /// <summary>\n        /// Punch appropriate holes for the selected code charts.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"codeCharts\">The code charts to punch.</param>\n        private static void PunchCodeCharts(ref char[][] safeList, LowerMidCodeCharts codeCharts)\n        {\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Myanmar), CodeCharts.LowerMiddle.Myanmar());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Georgian), CodeCharts.LowerMiddle.Georgian());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.HangulJamo), CodeCharts.LowerMiddle.HangulJamo());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Ethiopic), CodeCharts.LowerMiddle.Ethiopic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.EthiopicSupplement), CodeCharts.LowerMiddle.EthiopicSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Cherokee), CodeCharts.LowerMiddle.Cherokee());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.UnifiedCanadianAboriginalSyllabics), CodeCharts.LowerMiddle.UnifiedCanadianAboriginalSyllabics());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Ogham), CodeCharts.LowerMiddle.Ogham());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Runic), CodeCharts.LowerMiddle.Runic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Tagalog), CodeCharts.LowerMiddle.Tagalog());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Hanunoo), CodeCharts.LowerMiddle.Hanunoo());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Buhid), CodeCharts.LowerMiddle.Buhid());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Tagbanwa), CodeCharts.LowerMiddle.Tagbanwa());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Khmer), CodeCharts.LowerMiddle.Khmer());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Mongolian), CodeCharts.LowerMiddle.Mongolian());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.UnifiedCanadianAboriginalSyllabicsExtended), CodeCharts.LowerMiddle.UnifiedCanadianAboriginalSyllabicsExtended());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Limbu), CodeCharts.LowerMiddle.Limbu());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.TaiLe), CodeCharts.LowerMiddle.TaiLe());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.NewTaiLue), CodeCharts.LowerMiddle.NewTaiLue());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.KhmerSymbols), CodeCharts.LowerMiddle.KhmerSymbols());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Buginese), CodeCharts.LowerMiddle.Buginese());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.TaiTham), CodeCharts.LowerMiddle.TaiTham());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Balinese), CodeCharts.LowerMiddle.Balinese());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Sudanese), CodeCharts.LowerMiddle.Sudanese());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.Lepcha), CodeCharts.LowerMiddle.Lepcha());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.OlChiki), CodeCharts.LowerMiddle.OlChiki());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.VedicExtensions), CodeCharts.LowerMiddle.VedicExtensions());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.PhoneticExtensions), CodeCharts.LowerMiddle.PhoneticExtensions());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.PhoneticExtensionsSupplement), CodeCharts.LowerMiddle.PhoneticExtensionsSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.CombiningDiacriticalMarksSupplement), CodeCharts.LowerMiddle.CombiningDiacriticalMarksSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.LowerMiddle.IsFlagSet(codeCharts, LowerMidCodeCharts.LatinExtendedAdditional), CodeCharts.LowerMiddle.LatinExtendedAdditional());\n        }\n\n        /// <summary>\n        /// Punch appropriate holes for the selected code charts.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"codeCharts\">The code charts to punch.</param>\n        private static void PunchCodeCharts(ref char[][] safeList, MidCodeCharts codeCharts)\n        {\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.GreekExtended), CodeCharts.Middle.GreekExtended());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.GeneralPunctuation), CodeCharts.Middle.GeneralPunctuation());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.SuperscriptsAndSubscripts), CodeCharts.Middle.SuperscriptsAndSubscripts());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.CurrencySymbols), CodeCharts.Middle.CurrencySymbols());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.CombiningDiacriticalMarksForSymbols), CodeCharts.Middle.CombiningDiacriticalMarksForSymbols());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.LetterlikeSymbols), CodeCharts.Middle.LetterlikeSymbols());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.NumberForms), CodeCharts.Middle.NumberForms());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.Arrows), CodeCharts.Middle.Arrows());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.MathematicalOperators), CodeCharts.Middle.MathematicalOperators());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.MiscellaneousTechnical), CodeCharts.Middle.MiscellaneousTechnical());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.ControlPictures), CodeCharts.Middle.ControlPictures());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.OpticalCharacterRecognition), CodeCharts.Middle.OpticalCharacterRecognition());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.EnclosedAlphanumerics), CodeCharts.Middle.EnclosedAlphanumerics());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.BoxDrawing), CodeCharts.Middle.BoxDrawing());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.BlockElements), CodeCharts.Middle.BlockElements());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.GeometricShapes), CodeCharts.Middle.GeometricShapes());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.MiscellaneousSymbols), CodeCharts.Middle.MiscellaneousSymbols());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.Dingbats), CodeCharts.Middle.Dingbats());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.MiscellaneousMathematicalSymbolsA), CodeCharts.Middle.MiscellaneousMathematicalSymbolsA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.SupplementalArrowsA), CodeCharts.Middle.SupplementalArrowsA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.BraillePatterns), CodeCharts.Middle.BraillePatterns());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.SupplementalArrowsB), CodeCharts.Middle.SupplementalArrowsB());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.MiscellaneousMathematicalSymbolsB), CodeCharts.Middle.MiscellaneousMathematicalSymbolsB());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.SupplementalMathematicalOperators), CodeCharts.Middle.SupplementalMathematicalOperators());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.MiscellaneousSymbolsAndArrows), CodeCharts.Middle.MiscellaneousSymbolsAndArrows());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.Glagolitic), CodeCharts.Middle.Glagolitic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.LatinExtendedC), CodeCharts.Middle.LatinExtendedC());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.Coptic), CodeCharts.Middle.Coptic());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.GeorgianSupplement), CodeCharts.Middle.GeorgianSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.Tifinagh), CodeCharts.Middle.Tifinagh());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Middle.IsFlagSet(codeCharts, MidCodeCharts.EthiopicExtended), CodeCharts.Middle.EthiopicExtended());\n        }\n\n        /// <summary>\n        /// Punch appropriate holes for the selected code charts.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"codeCharts\">The code charts to punch.</param>\n        private static void PunchCodeCharts(ref char[][] safeList, UpperMidCodeCharts codeCharts)\n        {\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CyrillicExtendedA), CodeCharts.UpperMiddle.CyrillicExtendedA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.SupplementalPunctuation), CodeCharts.UpperMiddle.SupplementalPunctuation());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CjkRadicalsSupplement), CodeCharts.UpperMiddle.CjkRadicalsSupplement());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.KangxiRadicals), CodeCharts.UpperMiddle.KangxiRadicals());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.IdeographicDescriptionCharacters), CodeCharts.UpperMiddle.IdeographicDescriptionCharacters());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CjkSymbolsAndPunctuation), CodeCharts.UpperMiddle.CjkSymbolsAndPunctuation());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Hiragana), CodeCharts.UpperMiddle.Hiragana());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Katakana), CodeCharts.UpperMiddle.Katakana());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Bopomofo), CodeCharts.UpperMiddle.Bopomofo());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.HangulCompatibilityJamo), CodeCharts.UpperMiddle.HangulCompatibilityJamo());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Kanbun), CodeCharts.UpperMiddle.Kanbun());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.BopomofoExtended), CodeCharts.UpperMiddle.BopomofoExtended());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CjkStrokes), CodeCharts.UpperMiddle.CjkStrokes());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.KatakanaPhoneticExtensions), CodeCharts.UpperMiddle.KatakanaPhoneticExtensions());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.EnclosedCjkLettersAndMonths), CodeCharts.UpperMiddle.EnclosedCjkLettersAndMonths());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CjkCompatibility), CodeCharts.UpperMiddle.CjkCompatibility());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CjkUnifiedIdeographsExtensionA), CodeCharts.UpperMiddle.CjkUnifiedIdeographsExtensionA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.YijingHexagramSymbols), CodeCharts.UpperMiddle.YijingHexagramSymbols());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CjkUnifiedIdeographs), CodeCharts.UpperMiddle.CjkUnifiedIdeographs());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.YiSyllables), CodeCharts.UpperMiddle.YiSyllables());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.YiRadicals), CodeCharts.UpperMiddle.YiRadicals());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Lisu), CodeCharts.UpperMiddle.Lisu());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Vai), CodeCharts.UpperMiddle.Vai());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CyrillicExtendedB), CodeCharts.UpperMiddle.CyrillicExtendedB());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Bamum), CodeCharts.UpperMiddle.Bamum());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.ModifierToneLetters), CodeCharts.UpperMiddle.ModifierToneLetters());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.LatinExtendedD), CodeCharts.UpperMiddle.LatinExtendedD());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.SylotiNagri), CodeCharts.UpperMiddle.SylotiNagri());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.CommonIndicNumberForms), CodeCharts.UpperMiddle.CommonIndicNumberForms());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Phagspa), CodeCharts.UpperMiddle.Phagspa());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.UpperMiddle.IsFlagSet(codeCharts, UpperMidCodeCharts.Saurashtra), CodeCharts.UpperMiddle.Saurashtra());\n        }\n\n        /// <summary>\n        /// Punch appropriate holes for the selected code charts.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"codeCharts\">The code charts to punch.</param>\n        private static void PunchCodeCharts(ref char[][] safeList, UpperCodeCharts codeCharts)\n        {\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.DevanagariExtended), CodeCharts.Upper.DevanagariExtended());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.KayahLi), CodeCharts.Upper.KayahLi());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.Rejang), CodeCharts.Upper.Rejang());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.HangulJamoExtendedA), CodeCharts.Upper.HangulJamoExtendedA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.Javanese), CodeCharts.Upper.Javanese());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.Cham), CodeCharts.Upper.Cham());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.MyanmarExtendedA), CodeCharts.Upper.MyanmarExtendedA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.TaiViet), CodeCharts.Upper.TaiViet());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.MeeteiMayek), CodeCharts.Upper.MeeteiMayek());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.HangulSyllables), CodeCharts.Upper.HangulSyllables());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.HangulJamoExtendedB), CodeCharts.Upper.HangulJamoExtendedB());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.CjkCompatibilityIdeographs), CodeCharts.Upper.CjkCompatibilityIdeographs());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.AlphabeticPresentationForms), CodeCharts.Upper.AlphabeticPresentationForms());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.ArabicPresentationFormsA), CodeCharts.Upper.ArabicPresentationFormsA());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.VariationSelectors), CodeCharts.Upper.VariationSelectors());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.VerticalForms), CodeCharts.Upper.VerticalForms());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.CombiningHalfMarks), CodeCharts.Upper.CombiningHalfMarks());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.CjkCompatibilityForms), CodeCharts.Upper.CjkCompatibilityForms());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.SmallFormVariants), CodeCharts.Upper.SmallFormVariants());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.ArabicPresentationFormsB), CodeCharts.Upper.ArabicPresentationFormsB());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.HalfWidthAndFullWidthForms), CodeCharts.Upper.HalfWidthAndFullWidthForms());\n            PunchHolesIfNeeded(ref safeList, CodeCharts.Upper.IsFlagSet(codeCharts, UpperCodeCharts.Specials), CodeCharts.Upper.Specials());\n        }\n\n        /// <summary>\n        /// Punches holes as necessary.\n        /// </summary>\n        /// <param name=\"safeList\">The safe list to punch through.</param>\n        /// <param name=\"isNeeded\">Value indicating whether the holes should be punched.</param>\n        /// <param name=\"whiteListedCharacters\">The list of character positions to punch.</param>\n        private static void PunchHolesIfNeeded(ref char[][] safeList, bool isNeeded, IEnumerable whiteListedCharacters)\n        {\n            if (!isNeeded)\n            {\n                return;\n            }\n\n            foreach (int offset in whiteListedCharacters)\n            {\n                safeList[offset] = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Microsoft.Security.Application.Encoder/UnicodeCharacterEncoder.cs",
    "content": "﻿// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"UnicodeCharacterEncoder.cs\" company=\"Microsoft Corporation\">\n//   Copyright (c) 2008, 2009, 2010 All Rights Reserved, Microsoft Corporation\n//\n//   This source is subject to the Microsoft Permissive License.\n//   Please see the License.txt file for more information.\n//   All other rights reserved.\n//\n//   THIS CODE AND INFORMATION ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY \n//   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n//   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n//   PARTICULAR PURPOSE.\n//\n// </copyright>\n// <summary>\n//   Provides HTML Encoding methods.\n// </summary>\n// --------------------------------------------------------------------------------------------------------------------\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter.Security.Application\n{\n    /// <summary>\n    /// Provides HTML encoding methods.\n    /// </summary>\n    public static class UnicodeCharacterEncoder\n    {\n        /// <summary>\n        /// A lock object to use when performing safe listing.\n        /// </summary>\n        private static readonly ReaderWriterLock SyncLock = new ReaderWriterLock();\n\n        /// <summary>\n        /// The HTML escaped value for a space, used in attribute encoding.\n        /// </summary>\n        private static readonly char[] UnicodeSpace = \"&#32;\".ToCharArray();\n\n        /// <summary>\n        /// The Unicode value for an apostrophe, used in attribute encoding.\n        /// </summary>\n        private static readonly char[] UnicodeApostrophe = \"&#39;\".ToCharArray();\n\n        /// <summary>\n        /// The XML named entity for an apostrophe, used in XML encoding.\n        /// </summary>\n        private static readonly char[] XmlApostrophe = \"&apos;\".ToCharArray();\n        \n        /// <summary>\n        /// The current lower code chart settings.\n        /// </summary>\n        private static LowerCodeCharts currentLowerCodeChartSettings = LowerCodeCharts.None;\n\n        /// <summary>\n        /// The current lower middle code chart settings.\n        /// </summary>\n        private static LowerMidCodeCharts currentLowerMidCodeChartSettings = LowerMidCodeCharts.None;\n\n        /// <summary>\n        /// The current middle code chart settings.\n        /// </summary>\n        private static MidCodeCharts currentMidCodeChartSettings = MidCodeCharts.None;\n\n        /// <summary>\n        /// The current upper middle code chart settings.\n        /// </summary>\n        private static UpperMidCodeCharts currentUpperMidCodeChartSettings = UpperMidCodeCharts.None;\n\n        /// <summary>\n        /// The current upper code chart settings.\n        /// </summary>\n        private static UpperCodeCharts currentUpperCodeChartSettings = UpperCodeCharts.None;\n\n        /// <summary>\n        /// The values to output for each character.\n        /// </summary>\n        private static char[][] characterValues;\n\n        /// <summary>\n        /// The values to output for HTML named entities.\n        /// </summary>\n        private static char[][] namedEntities;\n\n        /// <summary>\n        /// Provides method specific encoding of characters.\n        /// </summary>\n        /// <param name=\"input\">The character to encode</param>\n        /// <param name=\"output\">The encoded character, if it has been encoded.</param>\n        /// <returns>True if the character has been encoded, otherwise false.</returns>\n        private delegate bool MethodSpecificEncoder(char input, out char[] output);\n\n        /// <summary>\n        /// Marks characters from the specified languages as safe.\n        /// </summary>\n        /// <param name=\"lowerCodeCharts\">The combination of lower code charts to use.</param>\n        /// <param name=\"lowerMidCodeCharts\">The combination of lower mid code charts to use.</param>\n        /// <param name=\"midCodeCharts\">The combination of mid code charts to use.</param>\n        /// <param name=\"upperMidCodeCharts\">The combination of upper mid code charts to use.</param>\n        /// <param name=\"upperCodeCharts\">The combination of upper code charts to use.</param>\n        /// <remarks>The safe list affects all HTML and XML encoding functions.</remarks>\n        public static void MarkAsSafe(\n            LowerCodeCharts lowerCodeCharts,\n            LowerMidCodeCharts lowerMidCodeCharts,\n            MidCodeCharts midCodeCharts,\n            UpperMidCodeCharts upperMidCodeCharts,\n            UpperCodeCharts upperCodeCharts)\n        {\n            if (lowerCodeCharts == currentLowerCodeChartSettings &&\n                lowerMidCodeCharts == currentLowerMidCodeChartSettings &&\n                midCodeCharts == currentMidCodeChartSettings &&\n                upperMidCodeCharts == currentUpperMidCodeChartSettings &&\n                upperCodeCharts == currentUpperCodeChartSettings)\n            {\n                return;\n            }\n\n            SyncLock.EnterWriteLock();\n            try\n            {\n                if (characterValues == null)\n                {\n                    characterValues = SafeList.Generate(65536, SafeList.HashThenValueGenerator);\n                }\n\n                SafeList.PunchUnicodeThrough(\n                    ref characterValues,\n                    lowerCodeCharts,\n                    lowerMidCodeCharts,\n                    midCodeCharts,\n                    upperMidCodeCharts,\n                    upperCodeCharts);\n\n                ApplyHtmlSpecificValues();\n\n                currentLowerCodeChartSettings = lowerCodeCharts;\n                currentLowerMidCodeChartSettings = lowerMidCodeCharts;\n                currentMidCodeChartSettings = midCodeCharts;\n                currentUpperMidCodeChartSettings = upperMidCodeCharts;\n                currentUpperCodeChartSettings = upperCodeCharts;\n            }\n            finally\n            {\n                SyncLock.ExitWriteLock();\n            }\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in XML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded</param>\n        /// <returns>\n        /// Encoded string for use in XML.\n        /// </returns>\n        internal static string XmlEncode(string input)\n        {\n            return HtmlEncode(input, false, XmlTweak);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in XML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded</param>\n        /// <returns>\n        /// Encoded string for use in XML.\n        /// </returns>\n        internal static string XmlAttributeEncode(string input)\n        {\n            return HtmlEncode(input, false, XmlAttributeTweak);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in HTML attributes.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded</param>\n        /// <returns>\n        /// Encoded string for use in HTML attributes.\n        /// </returns>\n        internal static string HtmlAttributeEncode(string input)\n        {\n            return HtmlEncode(input, false, HtmlAttributeTweak);\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in HTML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded</param>\n        /// <param name=\"useNamedEntities\">Value indicating if the HTML 4.0 named entities should be used.</param>\n        /// <returns>\n        /// Encoded string for use in HTML.\n        /// </returns>\n        internal static string HtmlEncode(string input, bool useNamedEntities)\n        {\n            return HtmlEncode(input, useNamedEntities, null);\n        }\n\n        /// <summary>\n        /// HTML Attribute Encoding specific tweaks.\n        /// </summary>\n        /// <param name=\"input\">The character to potentially encode.</param>\n        /// <param name=\"output\">The encoded character, if any.</param>\n        /// <returns>True if encoding took place, otherwise false.</returns>\n        private static bool HtmlAttributeTweak(char input, out char[] output)\n        {\n            if (input == '\\'')\n            {\n                output = UnicodeApostrophe;\n                return true;\n            }\n\n            if (input == ' ')\n            {\n                output = UnicodeSpace;\n                return true;\n            }\n\n            output = null;\n            return false;\n        }\n\n        /// <summary>\n        /// XML specific tweaks.\n        /// </summary>\n        /// <param name=\"input\">The character to potentially encode.</param>\n        /// <param name=\"output\">The encoded character, if any.</param>\n        /// <returns>True if encoding took place, otherwise false.</returns>\n        private static bool XmlTweak(char input, out char[] output)\n        {\n            if (input == '\\'')\n            {\n                output = XmlApostrophe;\n                return true;\n            }\n\n            output = null;\n            return false;\n        }\n\n        /// <summary>\n        /// XML Attribute Encoding specific tweaks.\n        /// </summary>\n        /// <param name=\"input\">The character to potentially encode.</param>\n        /// <param name=\"output\">The encoded character, if any.</param>\n        /// <returns>True if encoding took place, otherwise false.</returns>\n        private static bool XmlAttributeTweak(char input, out char[] output)\n        {\n            if (input == '\\'')\n            {\n                output = XmlApostrophe;\n                return true;\n            }\n\n            if (input == ' ')\n            {\n                output = UnicodeSpace;\n                return true;\n            }\n\n            output = null;\n            return false;\n        }\n\n        /// <summary>\n        /// Encodes input strings for use in HTML.\n        /// </summary>\n        /// <param name=\"input\">String to be encoded</param>\n        /// <param name=\"useNamedEntities\">Value indicating if the HTML 4.0 named entities should be used.</param>\n        /// <param name=\"encoderTweak\">A <see cref=\"MethodSpecificEncoder\"/> function, if needed.</param>\n        /// <returns>\n        /// Encoded string for use in HTML.\n        /// </returns>\n        /// <exception cref=\"InvalidUnicodeValueException\">Thrown if a character with an invalid Unicode value is encountered within the input string.</exception>\n        /// <exception cref=\"InvalidSurrogatePairException\">Thrown if a high surrogate code point is encoded without a following low surrogate code point, or a \n        /// low surrogate code point is encounter without having been preceded by a high surrogate code point.</exception>\n        private static string HtmlEncode(string input, bool useNamedEntities, MethodSpecificEncoder encoderTweak)\n        {\n            if (string.IsNullOrEmpty(input))\n            {\n                return input;\n            }\n\n            if (characterValues == null)\n            {\n                InitialiseSafeList();\n            }\n\n            if (useNamedEntities && namedEntities == null)\n            {\n                InitialiseNamedEntityList();\n            }\n\n            // Setup a new character array for output.\n            char[] inputAsArray = input.ToCharArray();\n            int outputLength = 0;\n            int inputLength = inputAsArray.Length;\n            char[] encodedInput = new char[inputLength * 10]; // Worse case scenario - the longest entity name, thetasym is 10 characters, including the & and ;.\n\n            SyncLock.EnterReadLock();\n            try\n            {\n                for (int i = 0; i < inputLength; i++)\n                {\n                    char currentCharacter = inputAsArray[i];\n                    int currentCodePoint = inputAsArray[i];\n                    char[] tweekedValue;\n\n                    // Check for invalid values\n                    if (currentCodePoint == 0xFFFE ||\n                        currentCodePoint == 0xFFFF)\n                    {\n                        throw new InvalidUnicodeValueException(currentCodePoint);\n                    }\n                    else if (currentCharacter.IsHighSurrogate()) \n                    {\n                        if (i + 1 == inputLength)\n                        {\n                            throw new InvalidSurrogatePairException(currentCharacter, '\\0');                            \n                        }\n\n                        // Now peak ahead and check if the following character is a low surrogate.\n                        char nextCharacter = inputAsArray[i + 1];\n                        char nextCodePoint = inputAsArray[i + 1];\n                        if (!nextCharacter.IsLowSurrogate())\n                        {\n                            throw new InvalidSurrogatePairException(currentCharacter, nextCharacter);\n                        }\n\n                        // Look-ahead was good, so skip.\n                        i++;\n\n                        // Calculate the combined code point\n                        long combinedCodePoint =\n                            0x10000 + ((currentCodePoint - 0xD800) * 0x400) + (nextCodePoint - 0xDC00);\n                        char[] encodedCharacter = SafeList.HashThenValueGenerator(combinedCodePoint);\n                        encodedInput[outputLength++] = '&';\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n\n                        encodedInput[outputLength++] = ';';\n                    }\n                    else if (currentCharacter.IsLowSurrogate())\n                    {\n                        throw new InvalidSurrogatePairException('\\0', currentCharacter);    \n                    }\n                    else if (encoderTweak != null && encoderTweak(currentCharacter, out tweekedValue))\n                    {\n                        for (int j = 0; j < tweekedValue.Length; j++)\n                        {\n                            encodedInput[outputLength++] = tweekedValue[j];\n                        }\n                    }\n                    else if (useNamedEntities && namedEntities[currentCodePoint] != null)\n                    {\n                        char[] encodedCharacter = namedEntities[currentCodePoint];\n                        encodedInput[outputLength++] = '&';\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n\n                        encodedInput[outputLength++] = ';';\n                    }\n                    else if (characterValues[currentCodePoint] != null)\n                    {\n                        // character needs to be encoded\n                        char[] encodedCharacter = characterValues[currentCodePoint];\n                        encodedInput[outputLength++] = '&';\n\n                        for (int j = 0; j < encodedCharacter.Length; j++)\n                        {\n                            encodedInput[outputLength++] = encodedCharacter[j];\n                        }\n\n                        encodedInput[outputLength++] = ';';\n                    }\n                    else\n                    {\n                        // character does not need encoding\n                        encodedInput[outputLength++] = currentCharacter;\n                    }\n                }\n            }\n            finally\n            {\n                SyncLock.ExitReadLock();\n            }\n\n            return new string(encodedInput, 0, outputLength);\n        }\n\n        /// <summary>\n        /// Initializes the HTML safe list.\n        /// </summary>\n        private static void InitialiseSafeList()\n        {\n            SyncLock.EnterWriteLock();\n            try\n            {\n                if (characterValues == null)\n                {\n                    characterValues = SafeList.Generate(0xFFFF, SafeList.HashThenValueGenerator);\n                    SafeList.PunchUnicodeThrough(\n                        ref characterValues,\n                        LowerCodeCharts.Default,\n                        LowerMidCodeCharts.None,\n                        MidCodeCharts.None,\n                        UpperMidCodeCharts.None,\n                        UpperCodeCharts.None);\n                    ApplyHtmlSpecificValues();\n                }\n            }\n            finally\n            {\n                SyncLock.ExitWriteLock();\n            }\n        }\n\n        /// <summary>\n        /// Applies Html specific values to the internal value list.\n        /// </summary>\n        private static void ApplyHtmlSpecificValues()\n        {\n            characterValues['<'] = \"lt\".ToCharArray();\n            characterValues['>'] = \"gt\".ToCharArray();\n            characterValues['&'] = \"amp\".ToCharArray();\n            characterValues['\"'] = \"quot\".ToCharArray();\n        }\n\n        /// <summary>\n        /// Initialises the HTML named entities list.\n        /// </summary>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\n            \"Microsoft.Maintainability\", \n            \"CA1505:AvoidUnmaintainableCode\", \n            Justification = \"Splitting or initialising via lookups has too large a performance increase.\")]\n        private static void InitialiseNamedEntityList()\n        {\n            namedEntities = new char[65536][];\n            namedEntities[160] = \"nbsp\".ToCharArray();\n            namedEntities[161] = \"iexcl\".ToCharArray();\n            namedEntities[162] = \"cent\".ToCharArray();\n            namedEntities[163] = \"pound\".ToCharArray();\n            namedEntities[164] = \"curren\".ToCharArray();\n            namedEntities[165] = \"yen\".ToCharArray();\n            namedEntities[166] = \"brvbar\".ToCharArray();\n            namedEntities[167] = \"sect\".ToCharArray();\n            namedEntities[168] = \"uml\".ToCharArray();\n            namedEntities[169] = \"copy\".ToCharArray();\n            namedEntities[170] = \"ordf\".ToCharArray();\n            namedEntities[171] = \"laquo\".ToCharArray();\n            namedEntities[172] = \"not\".ToCharArray();\n            namedEntities[173] = \"shy\".ToCharArray();\n            namedEntities[174] = \"reg\".ToCharArray();\n            namedEntities[175] = \"macr\".ToCharArray();\n            namedEntities[176] = \"deg\".ToCharArray();\n            namedEntities[177] = \"plusmn\".ToCharArray();\n            namedEntities[178] = \"sup2\".ToCharArray();\n            namedEntities[179] = \"sup3\".ToCharArray();\n            namedEntities[180] = \"acute\".ToCharArray();\n            namedEntities[181] = \"micro\".ToCharArray();\n            namedEntities[182] = \"para\".ToCharArray();\n            namedEntities[183] = \"middot\".ToCharArray();\n            namedEntities[184] = \"cedil\".ToCharArray();\n            namedEntities[185] = \"sup1\".ToCharArray();\n            namedEntities[186] = \"ordm\".ToCharArray();\n            namedEntities[187] = \"raquo\".ToCharArray();\n            namedEntities[188] = \"frac14\".ToCharArray();\n            namedEntities[189] = \"frac12\".ToCharArray();\n            namedEntities[190] = \"frac34\".ToCharArray();\n            namedEntities[191] = \"iquest\".ToCharArray();\n            namedEntities[192] = \"Agrave\".ToCharArray();\n            namedEntities[193] = \"Aacute\".ToCharArray();\n            namedEntities[194] = \"Acirc\".ToCharArray();\n            namedEntities[195] = \"Atilde\".ToCharArray();\n            namedEntities[196] = \"Auml\".ToCharArray();\n            namedEntities[197] = \"Aring\".ToCharArray();\n            namedEntities[198] = \"AElig\".ToCharArray();\n            namedEntities[199] = \"Ccedil\".ToCharArray();\n            namedEntities[200] = \"Egrave\".ToCharArray();\n            namedEntities[201] = \"Eacute\".ToCharArray();\n            namedEntities[202] = \"Ecirc\".ToCharArray();\n            namedEntities[203] = \"Euml\".ToCharArray();\n            namedEntities[204] = \"Igrave\".ToCharArray();\n            namedEntities[205] = \"Iacute\".ToCharArray();\n            namedEntities[206] = \"Icirc\".ToCharArray();\n            namedEntities[207] = \"Iuml\".ToCharArray();\n            namedEntities[208] = \"ETH\".ToCharArray();\n            namedEntities[209] = \"Ntilde\".ToCharArray();\n            namedEntities[210] = \"Ograve\".ToCharArray();\n            namedEntities[211] = \"Oacute\".ToCharArray();\n            namedEntities[212] = \"Ocirc\".ToCharArray();\n            namedEntities[213] = \"Otilde\".ToCharArray();\n            namedEntities[214] = \"Ouml\".ToCharArray();\n            namedEntities[215] = \"times\".ToCharArray();\n            namedEntities[216] = \"Oslash\".ToCharArray();\n            namedEntities[217] = \"Ugrave\".ToCharArray();\n            namedEntities[218] = \"Uacute\".ToCharArray();\n            namedEntities[219] = \"Ucirc\".ToCharArray();\n            namedEntities[220] = \"Uuml\".ToCharArray();\n            namedEntities[221] = \"Yacute\".ToCharArray();\n            namedEntities[222] = \"THORN\".ToCharArray();\n            namedEntities[223] = \"szlig\".ToCharArray();\n            namedEntities[224] = \"agrave\".ToCharArray();\n            namedEntities[225] = \"aacute\".ToCharArray();\n            namedEntities[226] = \"acirc\".ToCharArray();\n            namedEntities[227] = \"atilde\".ToCharArray();\n            namedEntities[228] = \"auml\".ToCharArray();\n            namedEntities[229] = \"aring\".ToCharArray();\n            namedEntities[230] = \"aelig\".ToCharArray();\n            namedEntities[231] = \"ccedil\".ToCharArray();\n            namedEntities[232] = \"egrave\".ToCharArray();\n            namedEntities[233] = \"eacute\".ToCharArray();\n            namedEntities[234] = \"ecirc\".ToCharArray();\n            namedEntities[235] = \"euml\".ToCharArray();\n            namedEntities[236] = \"igrave\".ToCharArray();\n            namedEntities[237] = \"iacute\".ToCharArray();\n            namedEntities[238] = \"icirc\".ToCharArray();\n            namedEntities[239] = \"iuml\".ToCharArray();\n            namedEntities[240] = \"eth\".ToCharArray();\n            namedEntities[241] = \"ntilde\".ToCharArray();\n            namedEntities[242] = \"ograve\".ToCharArray();\n            namedEntities[243] = \"oacute\".ToCharArray();\n            namedEntities[244] = \"ocirc\".ToCharArray();\n            namedEntities[245] = \"otilde\".ToCharArray();\n            namedEntities[246] = \"ouml\".ToCharArray();\n            namedEntities[247] = \"divide\".ToCharArray();\n            namedEntities[248] = \"oslash\".ToCharArray();\n            namedEntities[249] = \"ugrave\".ToCharArray();\n            namedEntities[250] = \"uacute\".ToCharArray();\n            namedEntities[251] = \"ucirc\".ToCharArray();\n            namedEntities[252] = \"uuml\".ToCharArray();\n            namedEntities[253] = \"yacute\".ToCharArray();\n            namedEntities[254] = \"thorn\".ToCharArray();\n            namedEntities[255] = \"yuml\".ToCharArray();\n                    \n            namedEntities[338] = \"OElig\".ToCharArray();\n            namedEntities[339] = \"oelig\".ToCharArray();\n            namedEntities[352] = \"Scaron\".ToCharArray();\n            namedEntities[353] = \"scaron\".ToCharArray();\n            namedEntities[376] = \"Yuml\".ToCharArray();\n            namedEntities[402] = \"fnof\".ToCharArray();\n            namedEntities[710] = \"circ\".ToCharArray();\n            namedEntities[732] = \"tilde\".ToCharArray();\n\n            namedEntities[913] = \"Alpha\".ToCharArray();\n            namedEntities[914] = \"Beta\".ToCharArray();\n            namedEntities[915] = \"Gamma\".ToCharArray();\n            namedEntities[916] = \"Delta\".ToCharArray();\n            namedEntities[917] = \"Epsilon\".ToCharArray();\n            namedEntities[918] = \"Zeta\".ToCharArray();\n            namedEntities[919] = \"Eta\".ToCharArray();\n            namedEntities[920] = \"Theta\".ToCharArray();\n            namedEntities[921] = \"Iota\".ToCharArray();\n            namedEntities[922] = \"Kappa\".ToCharArray();\n            namedEntities[923] = \"Lambda\".ToCharArray();\n            namedEntities[924] = \"Mu\".ToCharArray();\n            namedEntities[925] = \"Nu\".ToCharArray();\n            namedEntities[926] = \"Xi\".ToCharArray();\n            namedEntities[927] = \"Omicron\".ToCharArray();\n            namedEntities[928] = \"Pi\".ToCharArray();\n            namedEntities[929] = \"Rho\".ToCharArray();\n            namedEntities[931] = \"Sigma\".ToCharArray();\n            namedEntities[932] = \"Tau\".ToCharArray();\n            namedEntities[933] = \"Upsilon\".ToCharArray();\n            namedEntities[934] = \"Phi\".ToCharArray();\n            namedEntities[935] = \"Chi\".ToCharArray();\n            namedEntities[936] = \"Psi\".ToCharArray();\n            namedEntities[937] = \"Omega\".ToCharArray();\n            namedEntities[945] = \"alpha\".ToCharArray();\n            namedEntities[946] = \"beta\".ToCharArray();\n            namedEntities[947] = \"gamma\".ToCharArray();\n            namedEntities[948] = \"delta\".ToCharArray();\n            namedEntities[949] = \"epsilon\".ToCharArray();\n            namedEntities[950] = \"zeta\".ToCharArray();\n            namedEntities[951] = \"eta\".ToCharArray();\n            namedEntities[952] = \"theta\".ToCharArray();\n            namedEntities[953] = \"iota\".ToCharArray();\n            namedEntities[954] = \"kappa\".ToCharArray();\n            namedEntities[955] = \"lambda\".ToCharArray();\n            namedEntities[956] = \"mu\".ToCharArray();\n            namedEntities[957] = \"nu\".ToCharArray();\n            namedEntities[958] = \"xi\".ToCharArray();\n            namedEntities[959] = \"omicron\".ToCharArray();\n            namedEntities[960] = \"pi\".ToCharArray();\n            namedEntities[961] = \"rho\".ToCharArray();\n            namedEntities[962] = \"sigmaf\".ToCharArray();\n            namedEntities[963] = \"sigma\".ToCharArray();\n            namedEntities[964] = \"tau\".ToCharArray();\n            namedEntities[965] = \"upsilon\".ToCharArray();\n            namedEntities[966] = \"phi\".ToCharArray();\n            namedEntities[967] = \"chi\".ToCharArray();\n            namedEntities[968] = \"psi\".ToCharArray();\n            namedEntities[969] = \"omega\".ToCharArray();\n            namedEntities[977] = \"thetasym\".ToCharArray();\n            namedEntities[978] = \"upsih\".ToCharArray();\n            namedEntities[982] = \"piv\".ToCharArray();\n            \n            namedEntities[0x2002] = \"ensp\".ToCharArray();\n            namedEntities[0x2003] = \"emsp\".ToCharArray();\n            namedEntities[0x2009] = \"thinsp\".ToCharArray();\n            namedEntities[0x200C] = \"zwnj\".ToCharArray();\n            namedEntities[0x200D] = \"zwj\".ToCharArray();\n            namedEntities[0x200E] = \"lrm\".ToCharArray();\n            namedEntities[0x200F] = \"rlm\".ToCharArray();\n            namedEntities[0x2013] = \"ndash\".ToCharArray();\n            namedEntities[0x2014] = \"mdash\".ToCharArray();\n            namedEntities[0x2018] = \"lsquo\".ToCharArray();\n            namedEntities[0x2019] = \"rsquo\".ToCharArray();\n            namedEntities[0x201A] = \"sbquo\".ToCharArray();\n            namedEntities[0x201C] = \"ldquo\".ToCharArray();\n            namedEntities[0x201D] = \"rdquo\".ToCharArray();\n            namedEntities[0x201E] = \"bdquo\".ToCharArray();\n            namedEntities[0x2020] = \"dagger\".ToCharArray();\n            namedEntities[0x2021] = \"Dagger\".ToCharArray();\n            namedEntities[0x2022] = \"bull\".ToCharArray();\n            namedEntities[0x2026] = \"hellip\".ToCharArray();\n            namedEntities[0x2030] = \"permil\".ToCharArray();\n            namedEntities[0x2032] = \"prime\".ToCharArray();\n            namedEntities[0x2033] = \"Prime\".ToCharArray();\n            namedEntities[0x2039] = \"lsaquo\".ToCharArray();\n            namedEntities[0x203A] = \"rsaquo\".ToCharArray();\n            namedEntities[0x203E] = \"oline\".ToCharArray();\n            namedEntities[0x2044] = \"frasl\".ToCharArray();\n            namedEntities[0x20AC] = \"euro\".ToCharArray();\n            namedEntities[0x2111] = \"image\".ToCharArray();\n            namedEntities[0x2118] = \"weierp\".ToCharArray();\n            namedEntities[0x211C] = \"real\".ToCharArray();\n            namedEntities[0x2122] = \"trade\".ToCharArray();\n            namedEntities[0x2135] = \"alefsym\".ToCharArray();\n            namedEntities[0x2190] = \"larr\".ToCharArray();\n            namedEntities[0x2191] = \"uarr\".ToCharArray();\n            namedEntities[0x2192] = \"rarr\".ToCharArray();\n            namedEntities[0x2193] = \"darr\".ToCharArray();\n            namedEntities[0x2194] = \"harr\".ToCharArray();\n            namedEntities[0x21B5] = \"crarr\".ToCharArray();\n            namedEntities[0x21D0] = \"lArr\".ToCharArray();\n            namedEntities[0x21D1] = \"uArr\".ToCharArray();\n            namedEntities[0x21D2] = \"rArr\".ToCharArray();\n            namedEntities[0x21D3] = \"dArr\".ToCharArray();\n            namedEntities[0x21D4] = \"hArr\".ToCharArray();\n            namedEntities[0x2200] = \"forall\".ToCharArray();\n            namedEntities[0x2202] = \"part\".ToCharArray();\n            namedEntities[0x2203] = \"exist\".ToCharArray();\n            namedEntities[0x2205] = \"empty\".ToCharArray();\n            namedEntities[0x2207] = \"nabla\".ToCharArray();\n            namedEntities[0x2208] = \"isin\".ToCharArray();\n            namedEntities[0x2209] = \"notin\".ToCharArray();\n            namedEntities[0x220B] = \"ni\".ToCharArray();\n            namedEntities[0x220F] = \"prod\".ToCharArray();\n            namedEntities[0x2211] = \"sum\".ToCharArray();\n            namedEntities[0x2212] = \"minus\".ToCharArray();\n            namedEntities[0x2217] = \"lowast\".ToCharArray();\n            namedEntities[0x221A] = \"radic\".ToCharArray();\n            namedEntities[0x221D] = \"prop\".ToCharArray();\n            namedEntities[0x221E] = \"infin\".ToCharArray();\n            namedEntities[0x2220] = \"ang\".ToCharArray();\n            namedEntities[0x2227] = \"and\".ToCharArray();\n            namedEntities[0x2228] = \"or\".ToCharArray();\n            namedEntities[0x2229] = \"cap\".ToCharArray();\n            namedEntities[0x222A] = \"cup\".ToCharArray();\n            namedEntities[0x222B] = \"int\".ToCharArray();\n            namedEntities[0x2234] = \"there4\".ToCharArray();\n            namedEntities[0x223C] = \"sim\".ToCharArray();\n            namedEntities[0x2245] = \"cong\".ToCharArray();\n            namedEntities[0x2248] = \"asymp\".ToCharArray();\n            namedEntities[0x2260] = \"ne\".ToCharArray();\n            namedEntities[0x2261] = \"equiv\".ToCharArray();\n            namedEntities[0x2264] = \"le\".ToCharArray();\n            namedEntities[0x2265] = \"ge\".ToCharArray();\n            namedEntities[0x2282] = \"sub\".ToCharArray();\n            namedEntities[0x2283] = \"sup\".ToCharArray();\n            namedEntities[0x2284] = \"nsub\".ToCharArray();\n            namedEntities[0x2286] = \"sube\".ToCharArray();\n            namedEntities[0x2287] = \"supe\".ToCharArray();\n            namedEntities[0x2295] = \"oplus\".ToCharArray();\n            namedEntities[0x2297] = \"otimes\".ToCharArray();\n            namedEntities[0x22A5] = \"perp\".ToCharArray();\n            namedEntities[0x22C5] = \"sdot\".ToCharArray();\n            namedEntities[0x2308] = \"lceil\".ToCharArray();\n            namedEntities[0x2309] = \"rceil\".ToCharArray();\n            namedEntities[0x230A] = \"lfloor\".ToCharArray();\n            namedEntities[0x230B] = \"rfloor\".ToCharArray();\n            namedEntities[0x2329] = \"lang\".ToCharArray();\n            namedEntities[0x232A] = \"rang\".ToCharArray();\n            namedEntities[0x25CA] = \"loz\".ToCharArray();\n            namedEntities[0x2660] = \"spades\".ToCharArray();\n            namedEntities[0x2663] = \"clubs\".ToCharArray();\n            namedEntities[0x2665] = \"hearts\".ToCharArray();\n            namedEntities[0x2666] = \"diams\".ToCharArray();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/ParameterFinder.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// extracts parameters from an expression\n    /// - called for extracting parameters and values on where clauses\n    /// </summary>\n    /// <typeparam name=\"T\">type to get parameters for</typeparam>\n    internal class ParameterFinder<T> : ExpressionVisitor\n    {\n        /// <summary>\n        /// expression being searched\n        /// </summary>\n        private readonly Expression expression;\n\n        /// <summary>\n        /// parameters to search for\n        /// </summary>\n        private Dictionary<string, string> parameters;\n\n        /// <summary>\n        /// keep track of expression and parameter list\n        /// </summary>\n        /// <param name=\"exp\">expression to search</param>\n        /// <param name=\"parameters\">parameters to search for</param>\n        public ParameterFinder(Expression exp, List<string> parameters)\n        {\n            expression = exp;\n            ParameterNames = parameters;\n        }\n\n        /// <summary>\n        /// name/value pairs of parameters and their values\n        /// </summary>\n        public Dictionary<string, string> Parameters\n        {\n            get\n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    Visit(expression);\n                }\n                return parameters;\n            }\n        }\n\n        /// <summary>\n        /// names of input parameters\n        /// </summary>\n        public List<string> ParameterNames { get; set; }\n\n        /// <summary>\n        /// extracts values from equality expressions that match parameter names\n        /// </summary>\n        /// <param name=\"be\">binary expression to evaluate</param>\n        /// <returns>binary expression - supports recursive tree traversal in visitor</returns>\n        protected override Expression VisitBinary(BinaryExpression be)\n        {\n            if (be.NodeType == ExpressionType.Equal || \n                be.NodeType == ExpressionType.GreaterThan ||\n                be.NodeType == ExpressionType.GreaterThanOrEqual ||\n                be.NodeType == ExpressionType.LessThan ||\n                be.NodeType == ExpressionType.LessThanOrEqual ||\n                be.NodeType == ExpressionType.NotEqual)\n            {\n                foreach (var param in ParameterNames)\n                {\n                    if (ExpressionTreeHelpers.IsMemberEqualsValueExpression(be, typeof(T), param))\n                    {\n                        parameters.Add(param, ExpressionTreeHelpers.GetValueFromEqualsExpression(be, typeof(T), param));\n                        return be;\n                    }\n                }\n\n                return base.VisitBinary(be);\n            }\n            else\n                return base.VisitBinary(be);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/QueryParameter.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Provides an structure to hold the query parameters\n    /// </summary>\n    public class QueryParameter : IComparable<QueryParameter>, IComparable\n    {\n        private readonly string name = null;\n        private string value = null;\n\n        public QueryParameter(string name, string value)\n        {\n            this.name = name;\n            this.value = value;\n        }\n\n        public string Name\n        {\n            get { return name; }\n        }\n\n        public string Value\n        {\n            get { return value; }\n            internal set { this.value = value; }\n        }\n\n        public int CompareTo(object obj)\n        {\n            if (Object.ReferenceEquals(obj, null))\n                return Object.ReferenceEquals(this, null) ? 0 : 1;\n\n            var other = obj as QueryParameter;\n            return CompareTo(other);\n        }\n\n        public int CompareTo(QueryParameter other)\n        {\n            return defaultComparer.Compare(this, other);\n        }\n\n        public static IComparer<QueryParameter> defaultComparer = new QueryParameterComparer();\n    }\n\n    /// <summary>\n    /// Comparer class used to perform the sorting of the query parameters\n    /// </summary>\n    public class QueryParameterComparer : IComparer<QueryParameter>\n    {\n        public int Compare(QueryParameter x, QueryParameter y)\n        {\n            if (x.Name.Equals(y.Name))\n            {\n                return string.Compare(x.Value, y.Value);\n            }\n            else\n            {\n                return string.Compare(x.Name, y.Name);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/ReaderWriterLock.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Threading;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// A reader-writer lock implementation that is intended to be simple, yet very\n    /// efficient.  In particular only 1 interlocked operation is taken for any lock \n    /// operation (we use spin locks to achieve this).  The spin lock is never held\n    /// for more than a few instructions (in particular, we never call event APIs\n    /// or in fact any non-trivial API while holding the spin lock).   \n    /// \n    /// Currently this ReaderWriterLock does not support recurision, however it is \n    /// not hard to add \n    /// </summary>\n    public class ReaderWriterLock\n    {\n        // Lock specifiation for myLock:  This lock protects exactly the local fields associted\n        // instance of ReaderWriterLock.  It does NOT protect the memory associted with the\n        // the events that hang off this lock (eg writeEvent, readEvent upgradeEvent).\n        int myLock;\n\n        // Who owns the lock owners > 0 => readers\n        // owners = -1 means there is one writer.  Owners must be >= -1.  \n        int owners;\n\n        // These variables allow use to avoid Setting events (which is expensive) if we don't have to. \n        uint numWriteWaiters;        // maximum number of threads that can be doing a WaitOne on the writeEvent \n        uint numReadWaiters;         // maximum number of threads that can be doing a WaitOne on the readEvent\n        uint numUpgradeWaiters;      // maximum number of threads that can be doing a WaitOne on the upgradeEvent (at most 1). \n\n        // conditions we wait on. \n        EventWaitHandle writeEvent;    // threads waiting to aquire a write lock go here.\n        EventWaitHandle readEvent;     // threads waiting to aquire a read lock go here (will be released in bulk)\n        EventWaitHandle upgradeEvent;  // thread waiting to upgrade a read lock to a write lock go here (at most one)\n\n        public void EnterReadLock()\n        {\n            AcquireReaderLock(int.MaxValue);\n        }\n\n        public void AcquireReaderLock(int millisecondsTimeout)\n        {\n            EnterMyLock();\n            for (; ; )\n            {\n                // We can enter a read lock if there are only read-locks have been given out\n                // and a writer is not trying to get in.  \n                if (owners >= 0 && numWriteWaiters == 0)\n                {\n                    // Good case, there is no contention, we are basically done\n                    owners++;       // Indicate we have another reader\n                    break;\n                }\n\n                // Drat, we need to wait.  Mark that we have waiters and wait.  \n                if (readEvent == null)      // Create the needed event \n                {\n                    LazyCreateEvent(ref readEvent, false);\n                    continue;   // since we left the lock, start over. \n                }\n\n                WaitOnEvent(readEvent, ref numReadWaiters, millisecondsTimeout);\n            }\n            ExitMyLock();\n        }\n\n        public void EnterWriteLock()\n        {\n            AcquireWriterLock(int.MaxValue);\n        }\n\n        public void AcquireWriterLock(int millisecondsTimeout)\n        {\n            EnterMyLock();\n            for (; ; )\n            {\n                if (owners == 0)\n                {\n                    // Good case, there is no contention, we are basically done\n                    owners = -1;    // indicate we have a writer.\n                    break;\n                }\n\n                // Drat, we need to wait.  Mark that we have waiters and wait.\n                if (writeEvent == null)     // create the needed event.\n                {\n                    LazyCreateEvent(ref writeEvent, true);\n                    continue;   // since we left the lock, start over. \n                }\n\n                WaitOnEvent(writeEvent, ref numWriteWaiters, millisecondsTimeout);\n            }\n            ExitMyLock();\n        }\n\n        public void UpgradeToWriterLock(int millisecondsTimeout)\n        {\n            EnterMyLock();\n            for (; ; )\n            {\n                Debug.Assert(owners > 0, \"Upgrading when no reader lock held\");\n                if (owners == 1)\n                {\n                    // Good case, there is no contention, we are basically done\n                    owners = -1;    // inidicate we have a writer. \n                    break;\n                }\n\n                // Drat, we need to wait.  Mark that we have waiters and wait. \n                if (upgradeEvent == null)   // Create the needed event\n                {\n                    LazyCreateEvent(ref upgradeEvent, false);\n                    continue;   // since we left the lock, start over. \n                }\n\n                if (numUpgradeWaiters > 0)\n                {\n                    ExitMyLock();\n                    throw new Exception(\"UpgradeToWriterLock already in process.  Deadlock!\");\n                }\n\n                WaitOnEvent(upgradeEvent, ref numUpgradeWaiters, millisecondsTimeout);\n            }\n            ExitMyLock();\n        }\n\n        public void ExitReadLock()\n        {\n            ReleaseReaderLock();\n        }\n\n        public void ReleaseReaderLock()\n        {\n            EnterMyLock();\n            Debug.Assert(owners > 0, \"ReleasingReaderLock: releasing lock and no read lock taken\");\n            --owners;\n            ExitAndWakeUpAppropriateWaiters();\n        }\n\n        public void ExitWriteLock()\n        {\n            ReleaseWriterLock();\n        }\n\n        public void ReleaseWriterLock()\n        {\n            EnterMyLock();\n            Debug.Assert(owners == -1, \"Calling ReleaseWriterLock when no write lock is held\");\n            Debug.Assert(numUpgradeWaiters == 0);\n            owners++;\n            ExitAndWakeUpAppropriateWaiters();\n        }\n\n        public void DowngradeToReaderLock()\n        {\n            EnterMyLock();\n            Debug.Assert(owners == -1, \"Downgrading when no writer lock held\");\n            owners = 1;\n            ExitAndWakeUpAppropriateWaiters();\n        }\n\n        /// <summary>\n        /// A routine for lazily creating a event outside the lock (so if errors\n        /// happen they are outside the lock and that we don't do much work\n        /// while holding a spin lock).  If all goes well, reenter the lock and\n        /// set 'waitEvent' \n        /// </summary>\n        private void LazyCreateEvent(ref EventWaitHandle waitEvent, bool makeAutoResetEvent)\n        {\n            Debug.Assert(MyLockHeld);\n            Debug.Assert(waitEvent == null);\n\n            ExitMyLock();\n            EventWaitHandle newEvent;\n            if (makeAutoResetEvent)\n                newEvent = new AutoResetEvent(false);\n            else\n                newEvent = new ManualResetEvent(false);\n            EnterMyLock();\n            if (waitEvent == null)          // maybe someone snuck in. \n                waitEvent = newEvent;\n        }\n\n        /// <summary>\n        /// Waits on 'waitEvent' with a timeout of 'millisceondsTimeout.  \n        /// Before the wait 'numWaiters' is incremented and is restored before leaving this routine.\n        /// </summary>\n        private void WaitOnEvent(EventWaitHandle waitEvent, ref uint numWaiters, int millisecondsTimeout)\n        {\n            Debug.Assert(MyLockHeld);\n\n            waitEvent.Reset();\n            numWaiters++;\n\n            bool waitSuccessful = false;\n            ExitMyLock();      // Do the wait outside of any lock \n            try\n            {\n                if (!waitEvent.WaitOne(millisecondsTimeout))\n                    throw new Exception(\"ReaderWriterLock timeout expired\");\n                waitSuccessful = true;\n            }\n            finally\n            {\n                EnterMyLock();\n                --numWaiters;\n                if (!waitSuccessful)        // We are going to throw for some reason.  Exit myLock. \n                    ExitMyLock();\n            }\n        }\n\n        /// <summary>\n        /// Determines the appropriate events to set, leaves the locks, and sets the events. \n        /// </summary>\n        private void ExitAndWakeUpAppropriateWaiters()\n        {\n            Debug.Assert(MyLockHeld);\n\n            if (owners == 0 && numWriteWaiters > 0)\n            {\n                ExitMyLock();      // Exit before signaling to improve efficiency (wakee will need the lock)\n                writeEvent.Set();   // release one writer. \n            }\n            else if (owners == 1 && numUpgradeWaiters != 0)\n            {\n                ExitMyLock();          // Exit before signaling to improve efficiency (wakee will need the lock)\n                upgradeEvent.Set();     // release all upgraders (however there can be at most one). \n                // two threads upgrading is a guarenteed deadlock, so we throw in that case. \n            }\n            else if (owners >= 0 && numReadWaiters != 0)\n            {\n                ExitMyLock();    // Exit before signaling to improve efficiency (wakee will need the lock)\n                readEvent.Set();  // release all readers. \n            }\n            else\n                ExitMyLock();\n        }\n\n        private void EnterMyLock()\n        {\n            if (Interlocked.CompareExchange(ref myLock, 1, 0) != 0)\n                EnterMyLockSpin();\n        }\n        \n        private void EnterMyLockSpin()\n        {\n            for (int i = 0; ; i++)\n            {\n                if (i < 3 && Environment.ProcessorCount > 1)\n#if NETFX_CORE\n                    SpinWait.SpinUntil(() => false, 20);\n#else\n                Thread.SpinWait(20);    // Wait a few dozen instructions to let another processor release lock. \n#endif\n                else\n#if NETFX_CORE\n                    SpinWait.SpinUntil(() => false, 0);\n#else\n                    Thread.Sleep(0);        // Give up my quantum.  \n#endif\n\n                if (Interlocked.CompareExchange(ref myLock, 1, 0) == 0)\n                    return;\n            }\n        }\n        private void ExitMyLock()\n        {\n            Debug.Assert(myLock != 0, \"Exiting spin lock that is not held\");\n            myLock = 0;\n        }\n\n        private bool MyLockHeld { get { return myLock != 0; } }\n\n    };\n\n    //public class Program\n    //{\n    //    /// <summary>\n    //    /// </summary>\n    //    public static void Main(string[] args)\n    //    {\n    //        MeasureMonitor();\n    //        MeasureReaderWriter();\n    //    }\n\n    //    public static void MeasureMonitor()\n    //    {\n    //        object aLock = new Object();\n    //        Stopwatch sw = new Stopwatch();\n    //        sw.Start();\n    //        for (int i = 0; i < 100000000; i++)\n    //        {\n    //            Monitor.Enter(aLock);\n    //            Monitor.Exit(aLock);\n    //        }\n    //        sw.Stop();\n    //        Console.WriteLine(\"100M Enter/Exit \" + sw.ElapsedMilliseconds);\n\n    //    }\n\n    //    public static void MeasureReaderWriter()\n    //    {\n    //        ReaderWriterLock myLock = new ReaderWriterLock();\n\n    //        myLock.AcquireReaderLock(Timeout.Infinite);\n    //        myLock.ReleaseReaderLock();\n\n    //        Stopwatch sw = new Stopwatch();\n    //        sw.Start();\n    //        for (int i = 0; i < 100000000; i++)\n    //        {\n    //            myLock.AcquireReaderLock(Timeout.Infinite);\n    //            myLock.ReleaseReaderLock();\n    //        }\n    //        sw.Stop();\n    //        Console.WriteLine(\"100M Acquire/Release \" + sw.ElapsedMilliseconds);\n    //    }\n    //};\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/Request.cs",
    "content": "using System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public class Request\n    {\n        public string Endpoint { get; set; }\n        public IList<QueryParameter> RequestParameters { get; internal set; }\n\n        public string QueryString\n        {\n            get\n            {\n                return Utilities.BuildQueryString(RequestParameters);\n            }\n        }\n\n        public string FullUrl\n        {\n            get\n            {\n                var queryString = this.QueryString;\n\n                if (queryString.Length > 0)\n                    return Endpoint + \"?\" + QueryString;\n                else return Endpoint;\n            }\n        }\n\n        public Request(string endpoint)\n        {\n            this.Endpoint = endpoint;\n            this.RequestParameters = new List<QueryParameter>();\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/RequestProcessorHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// reusable methods for all request processors\n    /// </summary>\n    internal class RequestProcessorHelper\n    {\n        /// <summary>\n        /// All queries have an enum type that specifies the query sub-type;\n        /// This method determines if the type parameter parsed is a string\n        /// or int and performs the conversion to the enum type.\n        /// </summary>\n        /// <remarks>\n        /// Delphi enums come to the IRequestProcessor as pneumonic strings,\n        /// but C# enums arrive as the underlying int type of the enum;\n        /// therefore, we must determine what we're working with to succeed.\n        /// </remarks>\n        /// <typeparam name=\"T\">Enum type to convert to</typeparam>\n        /// <param name=\"queryType\">\n        /// Either a string enum member name (from Delphi Prism)\n        /// or an underlying int value (from C#/VB)\n        /// </param>\n        /// <returns>Requested enum type</returns>\n        internal static T ParseQueryEnumType<T>(string queryType)\n        {\n            T statusType;\n\n            if (queryType.GetType() == typeof(string))\n            {\n                statusType = (T)Enum.Parse(typeof(T), queryType, /*ignoreCase:*/ true);\n            }\n            else\n            {\n                statusType = (T)Enum.ToObject(typeof(T), int.Parse(queryType));\n            }\n\n            return statusType;\n        }\n\n        /// <summary>\n        /// Determines if a parameter is true\n        /// </summary>\n        /// <param name=\"parameters\">Name/Value list of parameters</param>\n        /// <param name=\"key\">Name of parameter to check.</param>\n        /// <returns>Boolean value of parameter (false if value is false or not bool)</returns>\n        internal static bool FlagTrue(IDictionary<string, string> parameters, string key)\n        {\n            bool flag;\n\n            if (!bool.TryParse(parameters[key], out flag))\n            {\n                flag = false;\n            }\n\n            return flag;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/State.cs",
    "content": "﻿#if !NETFX_CORE && !L2T_PCL\nusing System;\nusing System.IO;\nusing System.IO.IsolatedStorage;\n\nnamespace LinqToTwitter\n{\n    public class State\n    {\n        public static void Save(string data, string fileName)\n        {\n            using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())\n            {\n                using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isf))\n                {\n                    using (StreamWriter sw = new StreamWriter(isfs))\n                    {\n                        sw.Write(data);\n                    }\n                }\n            }\n        }\n\n        public static string Load(string fileName)\n        {\n            string data = String.Empty;\n            using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())\n            {\n                if (!isf.FileExists(fileName))\n                {\n                    return \"<state><consumer_key></consumer_key><consumer_secret></consumer_secret><code></code><access_token></access_token><authorizing></authorizing></state>\";\n                }\n\n                using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Open, isf))\n                {\n                    using (StreamReader sr = new StreamReader(isfs))\n                    {\n                        string lineOfData = String.Empty;\n                        while ((lineOfData = sr.ReadLine()) != null) data += lineOfData;\n                    }\n                }\n            }\n            return data;\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TargetFramework.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Utility methods for normalizing differences between \n    /// different .NET Framework Target versions\n    /// </summary>\n    public class TargetFramework\n    {\n        /// <summary>\n        /// Safely parses a string into an Enum\n        /// </summary>\n        /// <remarks>\n        /// .NET 3.5 doesn't have Enum.TryParse. This method catches exceptions and returns a default value.  \n        /// If you're interested in potential exceptions, you should use System.Enum.Parse.\n        /// </remarks>\n        /// <typeparam name=\"T\">Enum type</typeparam>\n        /// <param name=\"value\">Value to parse</param>\n        /// <returns>Parsed enum</returns>\n        public static T ParseEnum<T>(string value)\n            where T : struct\n        {\n            return ParseEnum(value, true, default(T));\n        }\n\n        /// <summary>\n        /// Safely parses a string into an Enum\n        /// </summary>\n        /// <remarks>\n        /// .NET 3.5 doesn't have Enum.TryParse. This method catches exceptions and returns a default value.  \n        /// If you're interested in potential exceptions, you should use System.Enum.Parse.\n        /// </remarks>\n        /// <typeparam name=\"T\">Enum type</typeparam>\n        /// <param name=\"value\">Value to parse</param>\n        /// <param name=\"ignoreCase\">Do case-insensitive parse</param>\n        /// <param name=\"defaultValue\">Default</param>\n        /// <returns>Parsed enum</returns>\n        public static T ParseEnum<T>(string value, bool ignoreCase, T defaultValue)\n            where T : struct\n        {\n            T parsedVal;\n\n            try\n            {\n                parsedVal = \n                    !string.IsNullOrEmpty(value.Trim()) ?\n                        (T)Enum.Parse(typeof (T), value, ignoreCase) :\n                        defaultValue;\n            }\n            catch\n            {\n                parsedVal = defaultValue;\n            }\n\n            return parsedVal;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TwitterAsyncResponse.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response info from an asynchronous Twitter request\n    /// </summary>\n    public class TwitterAsyncResponse<TState>\n    {\n        public TwitterAsyncResponse()\n        {\n            Status = TwitterErrorStatus.Success;\n            Message = \"Your request succeeded. Error property is null.\";\n        }\n\n        /// <summary>\n        /// You can check this value in the callback to\n        /// see if the request succeeded or failed\n        /// </summary>\n        public TwitterErrorStatus Status { get; set; }\n\n        /// <summary>\n        /// Additional info, specific to Status\n        /// </summary>\n        public string Message { get; set; }\n\n        /// <summary>\n        /// Will contain Exception if there was an error\n        /// </summary>\n        public Exception Exception { get; set; }\n\n        /// <summary>\n        /// Request specific info\n        /// </summary>\n        public TState State { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TwitterErrorStatus.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of result from processing an \n    /// asynchronous request to Twitter\n    /// </summary>\n    public enum TwitterErrorStatus\n    {\n        /// <summary>\n        /// No error\n        /// </summary>\n        Success,\n\n        /// <summary>\n        /// Error received from Twitter\n        /// </summary>\n        TwitterApiError,\n\n        /// <summary>\n        /// Error detected by LINQ to Twitter\n        /// while processing request\n        /// </summary>\n        RequestProcessingException,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TwitterHashResponse.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Response for HTTP errors and end response\n    /// </summary>\n    public class TwitterHashResponse\n    {\n        /// <summary>\n        /// URL action from request\n        /// </summary>\n        public string Request { get; set; }\n\n        /// <summary>\n        /// Response message\n        /// </summary>\n        public string Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TwitterProgressEventArgs.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Lets caller know the percentage of completion of operation\n    /// </summary>\n    public class TwitterProgressEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Percentage of completion\n        /// </summary>\n        public int PercentComplete { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TwitterQueryException.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Use for errors returned from HTTP GET and POST to Twitter\n    /// </summary>\n    public class TwitterQueryException : InvalidQueryException\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public TwitterQueryException()\n            : this(\"Twitter returned an error from your query.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public TwitterQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public TwitterQueryException(string message, Exception inner)\n            : base(message, inner) { }\n\n        /// <summary>\n        /// provides the request url and error response message\n        /// </summary>\n        [Obsolete(\"TwitterHashResponse is deprecated. You can use ErrorCode and Message to see what Twitter's response is.\")]\n        public TwitterHashResponse Response { get; set; }\n\n        /// <summary>\n        /// the HTTP error from the original exception\n        /// </summary>\n        public string HttpError { get; set; }\n\n        /// <summary>\n        /// Error code assigned by Twitter\n        /// </summary>\n        public int ErrorCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TypeConversionExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Collections.Generic;\n\nusing LitJson;\n\nnamespace LinqToTwitter.Common\n{\n    public static class TypeConversionExtensions\n    {\n\n        public static ulong GetULong(this string val, ulong defaultValue /* = 0*/)\n        {\n            ulong result;\n\n            return String.IsNullOrEmpty(val) ||\n                !ulong.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this string val, double defaultValue /* = 0*/)\n        {\n            double result;\n\n            return String.IsNullOrEmpty(val) ||\n                !double.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        private static readonly string[] dateFormats = { \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n                                                         \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n                                                         \"yyyy-MM-dd HH:mm:ss\",\n                                                         \"yyyy-MM-dd HH:mm\"};\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            DateTime result;\n\n            return String.IsNullOrEmpty(date) ||\n                !DateTime.TryParseExact(date,\n                        dateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string date, DateTime defaultValue)\n        {\n            var epochSeconds = date.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n            \n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value))\n                return (T)value;\n\n            return default(T);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key, T defaultValue)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value))\n                return (T)value;\n            \n            return defaultValue;\n        }\n\n        public static T GetValue<T>(this JsonData data, string key)\n        {\n            return GetValue(data, key, default(T));\n        }\n\n        public static T GetValue<T>(this JsonData data, string key, T defaultValue)\n        {\n            object value = defaultValue;\n            if (data != null && data.InstObject != null && \n                data.InstObject.ContainsKey(key) && data.InstObject[key] != null)\n            {\n                var dataItem = data.InstObject[key] as IJsonWrapper;\n\n                string type = typeof (T).Name;\n                switch (type)\n                {\n                    case \"String\":\n                        value = dataItem.GetString();\n                        break;\n                    case \"Int32\":\n                        value = dataItem.GetInt();\n                        break;\n                    case \"Int64\":\n                        value = dataItem.GetLong();\n                        break;\n                    case \"Double\":\n                        value = dataItem.GetDouble();\n                        break;\n                    case \"Boolean\":\n                        value = dataItem.GetBoolean();\n                        break;\n                    case \"Decimal\":\n                        value = dataItem.GetDecimal();\n                        break;\n                    case \"UInt64\":\n                        value = dataItem.GetUlong();\n                        break;\n                    case \"JsonData\":\n                        value = data.InstObject[key];\n                        break;\n                    case \"Nullable`1\":\n                        if (typeof(T) == typeof(int?) && dataItem.IsInt) { value = dataItem.GetInt(); break; }\n                        if (typeof(T) == typeof(long?) && dataItem.IsLong) { value = dataItem.GetLong(); break; }\n                        if (typeof(T) == typeof(double?) && dataItem.IsDouble) { value = dataItem.GetDouble(); break; }\n                        if (typeof(T) == typeof(bool?) && dataItem.IsBoolean) { value = dataItem.GetBoolean(); break; }\n                        if (typeof(T) == typeof(decimal?) && dataItem.IsDecimal) { value = dataItem.GetDecimal(); break; }\n                        if (typeof(T) == typeof(ulong?) && dataItem.IsULong) { value = dataItem.GetUlong(); break; }\n                        break;\n                }\n            }\n\n            return (T)value;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/TypeSystem.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n#if NETFX_CORE\nusing System.Reflection;\n#endif\n\nnamespace LinqToTwitter\n{\n    internal static class TypeSystem\n    {\n#if NETFX_CORE\n        internal static Type GetElementType(Type seqType)\n        {\n            Type ienum = FindIEnumerable(seqType);\n            if (ienum == null) return seqType;\n            return ienum.GenericTypeArguments[0];\n        }\n\n        private static Type FindIEnumerable(Type seqType)\n        {\n            TypeInfo seqTypeInfo = seqType.GetTypeInfo();\n            if (seqType == null || seqType == typeof(string))\n                return null;\n\n            if (seqTypeInfo.IsArray)\n                return typeof(IEnumerable<>).MakeGenericType(seqTypeInfo.GetElementType());\n\n            if (seqTypeInfo.IsGenericType)\n            {\n                foreach (Type arg in seqTypeInfo.GenericTypeArguments)\n                {\n                    Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n                    if (ienum.GetTypeInfo().IsAssignableFrom(seqTypeInfo))\n                    {\n                        return ienum;\n                    }\n                }\n            }\n\n            Type[] ifaces = seqTypeInfo.ImplementedInterfaces.ToArray();\n            if (ifaces != null && ifaces.Length > 0)\n            {\n                foreach (Type iface in ifaces)\n                {\n                    Type ienum = FindIEnumerable(iface);\n                    if (ienum != null) return ienum;\n                }\n            }\n\n            if (seqTypeInfo.BaseType != null && seqTypeInfo.BaseType != typeof(object))\n            {\n                return FindIEnumerable(seqTypeInfo.BaseType);\n            }\n\n            return null;\n        }\n#else\n        internal static Type GetElementType(Type seqType)\n        {\n            Type ienum = FindIEnumerable(seqType);\n            if (ienum == null) return seqType;\n            return ienum.GetGenericArguments()[0];\n        }\n\n        private static Type FindIEnumerable(Type seqType)\n        {\n            if (seqType == null || seqType == typeof(string))\n                return null;\n\n            if (seqType.IsArray)\n                return typeof(IEnumerable<>).MakeGenericType(seqType.GetElementType());\n\n            if (seqType.IsGenericType)\n            {\n                foreach (Type arg in seqType.GetGenericArguments())\n                {\n                    Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n                    if (ienum.IsAssignableFrom(seqType))\n                    {\n                        return ienum;\n                    }\n                }\n            }\n\n            Type[] ifaces = seqType.GetInterfaces();\n            if (ifaces != null && ifaces.Length > 0)\n            {\n                foreach (Type iface in ifaces)\n                {\n                    Type ienum = FindIEnumerable(iface);\n                    if (ienum != null) return ienum;\n                }\n            }\n\n            if (seqType.BaseType != null && seqType.BaseType != typeof(object))\n            {\n                return FindIEnumerable(seqType.BaseType);\n            }\n\n            return null;\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Common/WhereClauseFinder.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// finds where clauses in the expression tree\n    /// </summary>\n    internal class WhereClauseFinder : LinqToTwitter.ExpressionVisitor\n    {\n        static readonly string[] WhereMethodNames = { \"Where\", \"Single\", \"SingleOrDefault\", \"First\", \"FirstOrDefault\" };\n\n        // holds all where expressions\n        readonly List<MethodCallExpression> whereExpressions = new List<MethodCallExpression>();\n\n        /// <summary>\n        /// searches expression tree for wheres and returns collection of all it finds.\n        /// </summary>\n        /// <param name=\"expression\">query expression to search.</param>\n        /// <returns>collection of where expressions.</returns>\n        public MethodCallExpression[] GetAllWheres(Expression expression)\n        {\n            Visit(expression);\n            return whereExpressions.ToArray();\n        }\n\n        /// <summary>\n        /// custom processing of MethodCallExpression NodeType that checks for a\n        /// where clause and retains expression as member of list of where clauses.\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (WhereMethodNames.Contains(expression.Method.Name) && expression.Arguments.Count == 2)\n            {\n                whereExpressions.Add(expression);\n            }\n\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/DirectMessage/DirectMessage.cs",
    "content": "﻿using System;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Direct message elements contain a set of values that describe a message.\n    /// </summary>\n    public class DirectMessage\n    {\n        public DirectMessage() { }\n        public DirectMessage(JsonData dmJson)\n        {\n            CreatedAt = dmJson.GetValue<string>(\"created_at\").GetDate(DateTime.MinValue);\n            SenderID = dmJson.GetValue<ulong>(\"sender_id\");\n            SenderScreenName = dmJson.GetValue<string>(\"sender_screen_name\");\n            Sender = new User(dmJson.GetValue<JsonData>(\"sender\"));\n            RecipientID = dmJson.GetValue<ulong>(\"recipient_id\");\n            RecipientScreenName = dmJson.GetValue<string>(\"recipient_screen_name\");\n            Recipient = new User(dmJson.GetValue<JsonData>(\"recipient\"));\n            IDResponse = dmJson.GetValue<ulong>(\"id\");\n            IDString = dmJson.GetValue<string>(\"id_str\");\n            Text = dmJson.GetValue<string>(\"text\");\n            Entities = new Entities(dmJson.GetValue<JsonData>(\"entities\"));\n        }\n\n        public DirectMessageType Type { get; set; }\n\n        /// <summary>\n        /// Direct Message ID input\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Direct Message ID Returned from Twitter\n        /// </summary>\n        public ulong IDResponse { get; set; }\n\n        /// <summary>\n        /// Direct Message ID in string format from JSON\n        /// </summary>\n        /// <remarks>>\n        /// Twitter added this to the API because of the possibility that the real ID in ulong format wasn't accurate\n        /// </remarks>\n        public string IDString { get; set; }\n\n        /// <summary>\n        /// User ID of sender\n        /// </summary>\n        public ulong SenderID { get; set; }\n\n        /// <summary>\n        /// since this message ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to return\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// page number to return\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// number of items to return (works for SentBy and SentTo\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Set to true to not include statuses\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// DM Text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// User ID of Recipient\n        /// </summary>\n        public ulong RecipientID { get; set; }\n\n        /// <summary>\n        /// When DM was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// ScreenName of Sender\n        /// </summary>\n        public string SenderScreenName { get; set; }\n\n        /// <summary>\n        /// ScreenName of Recipient\n        /// </summary>\n        public string RecipientScreenName { get; set; }\n\n        /// <summary>\n        /// User object for sender\n        /// </summary>\n        public User Sender { get; set; }\n\n        /// <summary>\n        /// User object for recipient\n        /// </summary>\n        public User Recipient { get; set; }\n\n        /// <summary>\n        /// Entities withing this DM\n        /// </summary>\n        public Entities Entities { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/DirectMessage/DirectMessageExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class DirectMessageExtensions\n    {\n        /// <summary>\n        /// sends a new direct message to specified user\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"user\">UserID or ScreenName of user to send to</param>\n        /// <param name=\"text\">Direct message contents</param>\n        /// <returns>Direct message element</returns>\n        public static DirectMessage NewDirectMessage(this TwitterContext ctx, string user, string text)\n        {\n            return NewDirectMessage(ctx, user, text, null);\n        }\n\n        /// <summary>\n        /// sends a new direct message to specified userr\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"user\">UserID or ScreenName of user to send to</param>\n        /// <param name=\"text\">Direct message contents</param>\n        /// <param name=\"wrapLinks\">Shorten links using Twitter's t.co wrapper</param>\n        /// <param name=\"callback\">Async Callback</param>\n        /// <returns>Direct message element</returns>\n        public static DirectMessage NewDirectMessage(this TwitterContext ctx, string user, string text, Action<TwitterAsyncResponse<DirectMessage>> callback)\n        {\n            if (string.IsNullOrEmpty(user))\n            {\n                throw new ArgumentException(\"user is a required parameter.\", \"user\");\n            }\n\n            if (string.IsNullOrEmpty(text))\n            {\n                throw new ArgumentException(\"text is a required parameter.\", \"text\");\n            }\n\n            var newUrl = ctx.BaseUrl + \"direct_messages/new.json\";\n\n            var reqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            var twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"user\", user},\n                        {\"text\", text}\n                    },\n                    response => reqProc.ProcessActionResult(response, DirectMessageType.Show));\n\n            DirectMessage dm = reqProc.ProcessActionResult(resultsJson, DirectMessageType.Show);\n            return dm;\n        }\n\n        /// <summary>\n        /// deletes a direct message\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"id\">id of direct message</param>\n        /// <returns>direct message element</returns>\n        public static DirectMessage DestroyDirectMessage(this TwitterContext ctx, string id, bool includeEntites)\n        {\n            return DestroyDirectMessage(ctx, id, includeEntites, null);\n        }\n\n        /// <summary>\n        /// deletes a direct message\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"id\">id of direct message</param>\n        /// <param name=\"callback\">Async Callback</param>\n        /// <returns>direct message element</returns>\n        public static DirectMessage DestroyDirectMessage(this TwitterContext ctx, string id, bool includeEntites, Action<TwitterAsyncResponse<DirectMessage>> callback)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n            }\n\n            var destroyUrl = ctx.BaseUrl + \"direct_messages/destroy.json\";\n\n            var reqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            var twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    destroyUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id},\n                        {\"include_entities\", includeEntites.ToString().ToLower()}\n                    },\n                    response => reqProc.ProcessActionResult(response, DirectMessageType.Show));\n\n            DirectMessage dm = reqProc.ProcessActionResult(resultsJson, DirectMessageType.Show);\n            return dm;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/DirectMessage/DirectMessageRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Direct Messages\n    /// </summary>\n    public class DirectMessageRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Direct Message\n        /// </summary>\n        internal DirectMessageType Type { get; set; }\n\n        /// <summary>\n        /// since this message ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to return\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// page number to return\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// number of items to return (works for SentBy and SentTo\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// ID of DM\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// Include entities in tweets\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<DirectMessage>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"Page\",\n                       \"Count\",\n                       \"ID\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<DirectMessageType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case DirectMessageType.SentBy:\n                    return BuildSentByUrl(parameters);\n                case DirectMessageType.SentTo:\n                    return BuildSentToUrl(parameters);\n                case DirectMessageType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        private Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            const string IdParam = \"ID\";\n            if (parameters == null || !parameters.ContainsKey(IdParam))\n                throw new ArgumentNullException(IdParam, \"ID is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/show.json\");\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[IdParam]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct message sent to a user\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        private Request BuildSentToUrl(Dictionary<string, string> parameters)\n        {\n            return BuildSentUrlParameters(parameters, \"direct_messages.json\");\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct message sent by a user\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        private Request BuildSentByUrl(Dictionary<string, string> parameters)\n        {\n            return BuildSentUrlParameters(parameters, \"direct_messages/sent.json\");\n        }\n\n        /// <summary>\n        /// common code for building parameter list for both sent by and sent to urls\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <param name=\"url\">url to start with</param>\n        /// <returns>new url with parameters</returns>\n        private Request BuildSentUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", MaxID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", Page.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            var dmJson = JsonMapper.ToObject(responseJson);\n\n            IEnumerable<DirectMessage> dmList;\n\n            switch (Type)\n            {\n                case DirectMessageType.SentBy:\n                case DirectMessageType.SentTo:\n                    dmList = HandleMultipleDirectMessages(dmJson);\n                    break;\n                case DirectMessageType.Show:\n                    dmList = HandleSingleDirectMessage(dmJson);\n                    break;\n                default:\n                    dmList = new List<DirectMessage>();\n                    break;\n            }\n\n            return dmList.OfType<T>().ToList();\n        }\n  \n        IEnumerable<DirectMessage> HandleMultipleDirectMessages(JsonData dmJson)\n        {\n            var dmList =\n                from JsonData dm in dmJson\n                select new DirectMessage(dm)\n                {\n                    Type = Type,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    Page = Page,\n                    Count = Count,\n                    ID = ID,\n                    IncludeEntities = IncludeEntities,\n                    SkipStatus = SkipStatus\n                };\n\n            return dmList;\n        }\n\n        IEnumerable<DirectMessage> HandleSingleDirectMessage(JsonData dmJson)\n        {\n            return new List<DirectMessage> \n            { \n                new DirectMessage(dmJson) \n                {\n                    Type = Type,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    Page = Page,\n                    Count = Count,\n                    ID = ID,\n                    IncludeEntities = IncludeEntities,\n                    SkipStatus = SkipStatus\n                }\n            };\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData dmJson = JsonMapper.ToObject(responseJson);\n\n            var dm = new DirectMessage(dmJson);\n\n            return dm.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/DirectMessage/DirectMessageType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of direct message query\n    /// </summary>\n    public enum DirectMessageType\n    {\n        /// <summary>\n        /// direct messages sent by a user\n        /// </summary>\n        SentBy,\n\n        /// <summary>\n        /// direct messages sent to a user\n        /// </summary>\n        SentTo,\n\n        /// <summary>\n        /// get a single direct message\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Favorites/Favorites.cs",
    "content": "﻿using System.Xml.Serialization;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter favorites info\n    /// </summary>\n    public class Favorites : Status\n    {\n        public Favorites() { }\n\n        public Favorites(JsonData favJson) : base(favJson) { }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        [XmlIgnore]\n        public new FavoritesType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new string UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new string ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new bool IncludeEntities { get; set; }\n\n        //\n        // The following types support XML serialization\n        //\n\n        [XmlIgnore]\n        FavoritesType type;\n        [XmlAttribute(AttributeName = \"Type\")]\n        FavoritesType TypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlIgnore]\n        string userID;\n        [XmlAttribute(AttributeName=\"UserID\")]\n        public string UserIDXml\n        {\n            get { return userID; }\n            set { userID = value; }\n        }\n\n        [XmlIgnore]\n        string screenName;\n        [XmlAttribute(AttributeName=\"ScreenName\")]\n        public string ScreenNameXml\n        {\n            get { return screenName; }\n            set { screenName = value; }\n        }\n\n        [XmlIgnore]\n        int count;\n        [XmlAttribute(AttributeName=\"Count\")]\n        public int CountXml\n        {\n            get { return count; }\n            set { count = value; }\n        }\n\n        [XmlIgnore]\n        ulong sinceID;\n        [XmlAttribute(AttributeName=\"SinceID\")]\n        public ulong SinceIDXml\n        {\n            get { return sinceID; }\n            set { sinceID = value; }\n        }\n\n        [XmlIgnore]\n        ulong maxID;\n        [XmlAttribute(AttributeName=\"MaxID\")]\n        public ulong MaxIDXml\n        {\n            get { return maxID; }\n            set { maxID = value; }\n        }\n        \n        [XmlIgnore]\n        bool includeEntities;\n        [XmlAttribute(AttributeName=\"IncludeEntities\")]\n        public bool IncludeEntitiesXml\n        {\n            get { return includeEntities; }\n            set { includeEntities = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Favorites/FavoritesAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FavoritesAction\n    {\n        SingleStatus\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Favorites/FavoritesExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class FavoritesExtensions\n    {\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        public static Status CreateFavorite(this TwitterContext ctx, string id)\n        {\n            return CreateFavorite(ctx, id, true, null);\n        }\n\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        public static Status CreateFavorite(this TwitterContext ctx, string id, bool includeEntities)\n        {\n            return CreateFavorite(ctx, id, true, null);\n        }\n\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>status of favorite</returns>\n        public static Status CreateFavorite(this TwitterContext ctx, string id, bool includeEntities, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n            }\n\n            var favoritesUrl = ctx.BaseUrl + \"favorites/create.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            ITwitterExecute twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    favoritesUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    response => reqProc.ProcessActionResult(response, FavoritesAction.SingleStatus));\n\n            Status result = reqProc.ProcessActionResult(resultsJson, FavoritesAction.SingleStatus);\n            return result;\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        public static Status DestroyFavorite(this TwitterContext ctx, string id)\n        {\n            return DestroyFavorite(ctx, id, true, null);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        public static Status DestroyFavorite(this TwitterContext ctx, string id, bool includeEntities)\n        {\n            return DestroyFavorite(ctx, id, includeEntities, null);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>status of favorite</returns>\n        public static Status DestroyFavorite(this TwitterContext ctx, string id, bool includeEntities, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n            }\n\n            var favoritesUrl = ctx.BaseUrl + \"favorites/destroy.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            ITwitterExecute twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    favoritesUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    response => reqProc.ProcessActionResult(response, FavoritesAction.SingleStatus));\n\n            Status result = reqProc.ProcessActionResult(resultsJson, FavoritesAction.SingleStatus);\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Favorites/FavoritesRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Manages request processing for favorites\n    /// </summary>\n    public class FavoritesRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        private FavoritesType Type { get; set; }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        private string UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Favorites>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Count\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"IncludeEntities\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            const string ParamsParam = \"parameters\";\n\n            if (parameters == null)\n                throw new ArgumentException(\"You must pass a \\\"parameters\\\" Dictionary<string, string> parameter.\", ParamsParam);\n\n            if (!parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<FavoritesType>(parameters[\"Type\"]);\n\n            return BuildFavoritesUrlParameters(parameters);\n        }\n\n        /// <summary>\n        /// appends parameters for Favorites request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        private Request BuildFavoritesUrlParameters(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"favorites/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n\n        /// <summary>\n        /// transforms Twitter response into list of Favorites\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of Favorite</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData favoritesJson = JsonMapper.ToObject(responseJson);\n\n            var statusList =\n                from JsonData favJson in favoritesJson\n                select new Favorites(favJson)\n                {\n                    Type = Type,\n                    UserID = UserID,\n                    ScreenName = ScreenName,\n                    Count = Count,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    IncludeEntities = IncludeEntities\n                };\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            var status = new Status(statusJson);\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Favorites/FavoritesType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of favorites queries\n    /// </summary>\n    public enum FavoritesType\n    {\n        /// <summary>\n        /// Get favorites list for user\n        /// </summary>\n        Favorites\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Friendship/Friendship.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// parameters for freindship actions\n    /// </summary>\n    public class Friendship\n    {\n        public const ulong UserIDNotIncluded = 0;\n        public const string ScreenNameNotIncluded = null;\n\n        public Friendship() { }\n        public Friendship(JsonData friendJson)\n        {\n            if (friendJson == null) return;\n\n            TargetRelationship = new Relationship(friendJson.GetValue<JsonData>(\"target\"));\n            SourceRelationship = new Relationship(friendJson.GetValue<JsonData>(\"source\"));\n        }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        public FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user (Show query)\n        /// </summary>\n        public string SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user (Show query)\n        /// </summary>\n        public string SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user (Show query)\n        /// </summary>\n        public string TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user (Show query)\n        /// </summary>\n        public string TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to get for FriendshipList and FollowerList queries (input)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names for Lookup query\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs for Lookup query\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        [Obsolete(\"Please use IncludeUserEntities instead.\")]\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// info on friend\n        /// </summary>\n        public User Friend { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the source (Show query)\n        /// </summary>\n        public Relationship SourceRelationship { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the target (Show query)\n        /// </summary>\n        public Relationship TargetRelationship { get; set; }\n\n        /// <summary>\n        /// List of ids returned by Incoming and Outgoing queries\n        /// </summary>\n        public IDList IDInfo { get; set; }\n\n        /// <summary>\n        /// List of relationships from Lookup query\n        /// </summary>\n        public List<Relationship> Relationships { get; set; }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of User that are friends or followers, depending on type of query\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Friendship/FriendshipAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FriendshipAction\n    {\n        Create,\n        Destroy,\n        Update\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Friendship/FriendshipExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class FriendshipExtensions\n    {\n        /// <summary>\n        /// lets logged-in user follow another user\n        /// </summary>\n        /// <param name=\"userID\">Numeric ID of user to follow</param>\n        /// <param name=\"screenName\">Screen name of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public static User CreateFriendship(this TwitterContext ctx, string userID, string screenName, bool follow)\n        {\n            return CreateFriendship(ctx, userID, screenName, follow, null);\n        }\n\n        /// <summary>\n        /// lets logged-in user follow another user\n        /// </summary>\n        /// <param name=\"userID\">Numeric ID of user to follow</param>\n        /// <param name=\"screenName\">Screen name of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>followed friend user info</returns>\n        public static User CreateFriendship(this TwitterContext ctx, string userID, string screenName, bool follow, Action<TwitterAsyncResponse<User>> callback)\n        {\n            if (string.IsNullOrEmpty(userID) &&\n                string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either userID or screenName is a required parameter.\", \"UserIDOrScreenName\");\n            }\n\n            string destroyUrl = ctx.BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string>\n                {\n                    { \"user_id\", userID },\n                    { \"screen_name\", screenName }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n            {\n                createParams.Add(\"follow\", \"true\");\n            }\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            ITwitterExecute twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    destroyUrl,\n                    createParams,\n                    response => reqProc.ProcessActionResult(response, FriendshipAction.Create));\n\n            User results = reqProc.ProcessActionResult(resultsJson, FriendshipAction.Create);\n            return results;\n        }\n\n        /// <summary>\n        /// lets logged-in user follow another user\n        /// </summary>\n        /// <param name=\"userID\">Numeric ID of user to unfollow</param>\n        /// <param name=\"screenName\">Screen name of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public static User DestroyFriendship(this TwitterContext ctx, string userID, string screenName)\n        {\n            return DestroyFriendship(ctx, userID, screenName, null);\n        }\n\n        /// <summary>\n        /// lets logged-in user follow another user\n        /// </summary>\n        /// <param name=\"userID\">Numeric ID of user to unfollow</param>\n        /// <param name=\"screenName\">Screen name of user to unfollow</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>followed friend user info</returns>\n        public static User DestroyFriendship(this TwitterContext ctx, string userID, string screenName, Action<TwitterAsyncResponse<User>> callback)\n        {\n            if (string.IsNullOrEmpty(userID) &&\n                string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either id, userID, or screenName is a required parameter.\", \"UserIDOrScreenName\");\n            }\n\n            string destroyUrl = ctx.BaseUrl + \"friendships/destroy.json\";\n\n            var parms = new Dictionary<string, string>();\n            if (screenName != null) parms.Add(\"screen_name\", screenName);\n            if (userID != null) parms.Add(\"user_id\", userID);\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            ITwitterExecute twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    destroyUrl,\n                    parms,\n                    response => reqProc.ProcessActionResult(response, FriendshipAction.Destroy));\n\n            User results = reqProc.ProcessActionResult(resultsJson, FriendshipAction.Destroy);\n            return results;\n        }\n\n        /// <summary>\n        /// lets logged-in user set retweets and/or device notifications for a follower\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public static Friendship UpdateFriendshipSettings(this TwitterContext ctx, string screenName, bool retweets, bool device)\n        {\n            return UpdateFriendshipSettings(ctx, 0, screenName, retweets, device, null);\n        }\n\n        /// <summary>\n        /// lets logged-in user set retweets and/or device notifications for a follower\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public static Friendship UpdateFriendshipSettings(this TwitterContext ctx, ulong userID, bool retweets, bool device)\n        {\n            return UpdateFriendshipSettings(ctx, 0, null, retweets, device, null);\n        }\n\n        /// <summary>\n        /// lets logged-in user set retweets and/or device notifications for a follower\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>updated friend user info</returns>\n        public static Friendship UpdateFriendshipSettings(this TwitterContext ctx, ulong userID, string screenName, bool retweets, bool device, Action<TwitterAsyncResponse<Friendship>> callback)\n        {\n            if (string.IsNullOrEmpty(screenName) && userID <= 0)\n            {\n                throw new ArgumentNullException(\"screenNameOrUserID\", \"Either screenName or UserID is a required parameter.\");\n            }\n\n            var parms = new Dictionary<string, string>\n            {\n                { \"retweets\", retweets.ToString().ToLower() },\n                { \"device\", device.ToString().ToLower() }\n            };\n\n            if (screenName != null) parms.Add(\"screen_name\", screenName);\n            if (userID > 0) parms.Add(\"user_id\", userID.ToString());\n\n            string updateUrl = ctx.BaseUrl + \"friendships/update.json\";\n\n            var reqProc = new FriendshipRequestProcessor<Friendship>();\n\n            ITwitterExecute twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    updateUrl,\n                    parms,\n                    response => reqProc.ProcessActionResult(response, FriendshipAction.Update));\n\n            Friendship results = reqProc.ProcessActionResult(resultsJson, FriendshipAction.Update);\n            return results;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Friendship/FriendshipRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Friendship queries\n    /// </summary>\n    class FriendshipRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        internal FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user\n        /// </summary>\n        internal string SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user\n        /// </summary>\n        internal string SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user\n        /// </summary>\n        internal string TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user\n        /// </summary>\n        internal string TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of names for lookup\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs to lookup\n        /// </summary>\n        internal string UserID { get; set; }\n\n        /// <summary>\n        /// Number of items to get for FriendshipList and FollowerList queries (input)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        internal bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Friendship>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SourceUserID\",\n                       \"SourceScreenName\",\n                       \"TargetUserID\",\n                       \"TargetScreenName\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"ScreenName\",\n                       \"UserID\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<FriendshipType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case FriendshipType.Incoming:\n                    return BuildFriendshipIncomingUrl(parameters);\n                case FriendshipType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case FriendshipType.Outgoing:\n                    return BuildFriendshipOutgoingUrl(parameters);\n                case FriendshipType.Show:\n                    return BuildFriendshipShowUrl(parameters);\n                case FriendshipType.NoRetweetIDs:\n                    return BuildFriendshipNoRetweetIDsUrl();\n                case FriendshipType.FollowersList:\n                    return BuildFollowersListUrl(parameters);\n                case FriendshipType.FriendsList:\n                    return BuildFriendsListUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid FriendshipType\", \"Type\");\n            }\n        }\n\n        /// <summary>\n        /// Builds an url that retrieves ids of people who the logged in user doesn't want retweets for\n        /// </summary>\n        /// <returns>no_retweet_id URL</returns>\n        private Request BuildFriendshipNoRetweetIDsUrl()\n        {\n            return new Request(BaseUrl + \"friendships/no_retweet_ids.json\");\n        }\n\n        /// <summary>\n        /// builds an url for showing friendship details between two users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildFriendshipShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"SourceUserID\") && !parameters.ContainsKey(\"SourceScreenName\"))\n            {\n                throw new ArgumentException(\"You must specify either SourceUserID or SourceScreenName\");\n            }\n\n            if (!parameters.ContainsKey(\"TargetUserID\") && !parameters.ContainsKey(\"TargetScreenName\"))\n            {\n                throw new ArgumentException(\"You must specify either TargetUserID or TargetScreenName\");\n            }\n\n            var req = new Request(BaseUrl + \"friendships/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SourceUserID\"))\n            {\n                SourceUserID = parameters[\"SourceUserID\"];\n                urlParams.Add(new QueryParameter(\"source_id\", SourceUserID));\n            }\n\n            if (parameters.ContainsKey(\"SourceScreenName\"))\n            {\n                SourceScreenName = parameters[\"SourceScreenName\"];\n                urlParams.Add(new QueryParameter(\"source_screen_name\", SourceScreenName));\n            }\n\n            if (parameters.ContainsKey(\"TargetUserID\"))\n            {\n                TargetUserID = parameters[\"TargetUserID\"];\n                urlParams.Add(new QueryParameter(\"target_id\", TargetUserID));\n            }\n\n            if (parameters.ContainsKey(\"TargetScreenName\"))\n            {\n                TargetScreenName = parameters[\"TargetScreenName\"];\n                urlParams.Add(new QueryParameter(\"target_screen_name\", TargetScreenName));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining incoming friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for incoming</returns>\n        private Request BuildFriendshipIncomingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/incoming.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining relationship between logged in user and list of other users\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ScreenName</param>\n        /// <returns>Url for lookup</returns>\n        private Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n            {\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining outgoing friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for outgoing</returns>\n        private Request BuildFriendshipOutgoingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/outgoing.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowersListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"followers/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n            {\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", IncludeEntities.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", IncludeEntities.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFriendsListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friends/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n            {\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", IncludeUserEntities.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            Friendship friendship;\n\n            switch (Type)\n            {\n                case FriendshipType.Show:\n                    friendship = HandleShowResponse(responseJson);\n                    break;\n                case FriendshipType.Incoming:\n                case FriendshipType.Outgoing:\n                    friendship = HandleIdsResponse(responseJson);\n                    break;\n                case FriendshipType.Lookup:\n                    friendship = HandleLookupResponse(responseJson);\n                    break;\n                case FriendshipType.NoRetweetIDs:\n                    friendship = HandleNoRetweetIDsResponse(responseJson);\n                    break;\n                case FriendshipType.FriendsList:\n                case FriendshipType.FollowersList:\n                    friendship = HandleFriendsListOrFollowersListResponse(responseJson);\n                    break;\n                default:\n                    friendship = new Friendship();\n                    break;\n            }\n\n            friendship.Type = Type;\n            friendship.SourceUserID = SourceUserID;\n            friendship.SourceScreenName = SourceScreenName;\n            friendship.TargetUserID = TargetUserID;\n            friendship.TargetScreenName = TargetScreenName;\n            friendship.Count = Count;\n            friendship.Cursor = Cursor;\n            friendship.ScreenName = ScreenName;\n            friendship.UserID = UserID;\n            friendship.SkipStatus = SkipStatus;\n            friendship.IncludeUserEntities = IncludeUserEntities;\n\n            var friendList = new List<Friendship>\n            {\n                friendship\n            };\n\n            return friendList.OfType<T>().ToList();\n        }\n  \n        Friendship HandleShowResponse(string responseJson)\n        {\n            JsonData showJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship(showJson.GetValue<JsonData>(\"relationship\"));\n            return friendship;\n        }\n  \n        Friendship HandleIdsResponse(string responseJson)\n        {\n            JsonData idsJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship\n            {\n                IDInfo = new IDList(idsJson)\n            };\n            return friendship;\n        }\n  \n        Friendship HandleLookupResponse(string responseJson)\n        {\n            JsonData lookupJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship\n            {\n                Relationships =\n                    (from JsonData relationship in lookupJson\n                     select new Relationship(relationship))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        Friendship HandleNoRetweetIDsResponse(string responseJson)\n        {\n            string idsJson = \"{ \\\"ids\\\":\" + responseJson + \" }\";\n            return HandleIdsResponse(idsJson);\n        }\n\n        private Friendship HandleFriendsListOrFollowersListResponse(string responseJson)\n        {\n            JsonData friendsOrFollowersJson = JsonMapper.ToObject(responseJson);\n            var users = friendsOrFollowersJson.GetValue<JsonData>(\"users\");\n\n            var friendship = new Friendship\n            {\n                CursorMovement = new Cursors(friendsOrFollowersJson),\n                Users =\n                    (from JsonData user in users\n                     select new User(user))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData friendJson = JsonMapper.ToObject(responseJson);\n\n            switch ((FriendshipAction) theAction)\n            {\n                case FriendshipAction.Create:\n                case FriendshipAction.Destroy:\n                    var user = new User(friendJson);\n                    return user.ItemCast(default(T));\n                case FriendshipAction.Update:\n                    var friendship = new Friendship(friendJson.GetValue<JsonData>(\"relationship\"));\n                    return friendship.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Friendship/FriendshipType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of friendship actions\n    /// </summary>\n    public enum FriendshipType\n    {\n        /// <summary>\n        /// Detailed information on the relationship between two people\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show IDs of all users requesting friendship with logged in user\n        /// </summary>\n        Incoming,\n\n        /// <summary>\n        /// Show IDs of all users logged in user is requesting friendship with\n        /// </summary>\n        Outgoing,\n\n        /// <summary>\n        /// Allows you to examine the relationship of a list of users, ScreenName,\n        /// to the logged in user\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// List of user IDs logged in user doesn't want to receive retweets for\n        /// </summary>\n        NoRetweetIDs,\n\n        /// <summary>\n        /// List of User entities of friends (people the authenticated user follows)\n        /// </summary>\n        FriendsList,\n\n        /// <summary>\n        /// List of User entities of followers (people who follow the authenticated user)\n        /// </summary>\n        FollowersList\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Friendship/Relationship.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Friendship details for either a Source or Target\n    /// </summary>\n    public class Relationship\n    {\n        public Relationship() { }\n        public Relationship(JsonData relJson)\n        {\n            if (relJson == null) return;\n\n            ScreenName = relJson.GetValue<string>(\"screen_name\");\n            Name = relJson.GetValue<string>(\"name\");\n            RetweetsWanted = relJson.GetValue<bool>(\"want_retweets\");\n            AllReplies = relJson.GetValue<bool>(\"all_replies\");\n            MarkedSpam = relJson.GetValue<bool>(\"marked_spam\");\n            FollowedBy = relJson.GetValue<bool>(\"followed_by\");\n            ID = relJson.GetValue<string>(\"id_str\");\n            Blocking = relJson.GetValue<bool>(\"blocking\");\n            NotificationsEnabled = relJson.GetValue<bool>(\"notifications_enabled\");\n            Following = relJson.GetValue<bool>(\"following\");\n            CanDm = relJson.GetValue<bool>(\"can_dm\");\n            var connections = relJson.GetValue<JsonData>(\"connections\");\n            if (connections != null)\n            {\n                Connections =\n                    (from JsonData connection in connections\n                        select connection.ToString())\n                    .ToList(); \n            }\n        }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// User's screen name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// User's name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Is this user following the other\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Does the other user follow this one\n        /// </summary>\n        public bool FollowedBy { get; set; }\n\n        /// <summary>\n        /// Is this user blocking the other\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? Blocking { get; set; }\n\n        /// <summary>\n        /// Are this user's notifications enabled\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? NotificationsEnabled { get; set; }\n\n        /// <summary>\n        /// Does the user want to receive retweets from person they follow\n        /// </summary>\n        public bool RetweetsWanted { get; set; }\n\n        /// <summary>\n        /// Shows relationships between the logged in user and \n        /// the person identified by this relationship\n        /// </summary>\n        public List<string> Connections { get; set; }\n\n        /// <summary>\n        /// Sees all replies\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Marked as SPAM\n        /// </summary>\n        public bool MarkedSpam { get; set; }\n\n        /// <summary>\n        /// Allowed to send direct messages\n        /// </summary>\n        public bool CanDm { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/Coordinate.cs",
    "content": "﻿using System.Linq;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical coordinates\n    /// </summary>\n    public class Coordinate\n    {\n        public const int LongitudePos = 0;\n        public const int LatitudePos = 1;\n\n        public Coordinate() { }\n        internal Coordinate(JsonData coord)\n        {\n            if (coord == null) return;\n            var jsonLatitude = coord[LatitudePos];\n            Latitude = jsonLatitude.IsDouble ? (double)jsonLatitude : (int)jsonLatitude;\n            var jsonLongitude = coord[LongitudePos];\n            Longitude = jsonLongitude.IsDouble ? (double)jsonLongitude : (int)jsonLongitude;\n        }\n\n        /// <summary>\n        /// Type of Coordinate\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/Geo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geo info for querying and reading results\n    /// </summary>\n    public class Geo\n    {\n        public Geo() { }\n        public Geo(JsonData geo)\n        {\n            if (geo == null) return;\n\n            JsonData result = geo.GetValue<JsonData>(\"result\");\n            JsonData places = result.GetValue<JsonData>(\"places\");\n\n            Token = result.GetValue<string>(\"token\");\n\n            if (places != null)\n            {\n                Places =\n                    (from JsonData place in places\n                        select new Place(place))\n                    .ToList(); \n            }\n        }\n\n        /// <summary>\n        /// Type of Geo query (Reverse or ID)\n        /// </summary>\n        public GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        public string IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        public string Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        public string Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        public string ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        public string Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        public string PlaceName { get; set; }\n\n        /// <summary>\n        /// Place token returned from a Similar Places query and used in CreatePlace\n        /// </summary>\n        public string Token { get; set; }\n\n        /// <summary>\n        /// Results showing places matching query\n        /// </summary>\n        public List<Place> Places { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string ID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/GeoAction.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    enum GeoAction\n    {\n        CreatePlace\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/GeoRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing LinqToTwitter.Serialization.Extensions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Saved Search requests\n    /// </summary>\n    public class GeoRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T: class\n    {\n        const string AttributeParam = \"Attribute\";\n        const string IDParam = \"ID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of Geo operation (Reverse or ID)\n        /// </summary>\n        internal GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        internal double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        internal double Longitude { get; set; }\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        internal string IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        internal string Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        internal string Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        internal int MaxResults { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        internal string ID { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        internal string ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        internal string Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        internal string PlaceName { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Geo>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Latitude\",\n                   \"Longitude\",\n                   \"IP\",\n                   \"Accuracy\",\n                   \"Granularity\",\n                   \"MaxResults\",\n                   \"ID\",\n                   \"Query\",\n                   \"ContainedWithin\",\n                   \"Attribute\",\n                   \"PlaceName\"\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<GeoType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    return BuildIDUrl(parameters);\n                case GeoType.Reverse:\n                    return BuildReverseUrl(parameters);\n                case GeoType.Search:\n                    return BuildSearchUrl(parameters);\n                case GeoType.SimilarPlaces:\n                    return BuildSimilarPlacesUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        void HandleAttributeParams(Dictionary<string, string> parameters, IList<QueryParameter> urlParams)\n        {\n            if (parameters.ContainsKey(AttributeParam))\n            {\n                // TODO should really be able to search for more than one Attribute\n                Attribute = parameters[AttributeParam] ?? String.Empty;\n                var parts = Attribute.Split('=');\n\n                if (parts.Length < 2)\n                {\n                    throw new ArgumentException(\n                        \"Attribute must be a name/value pair (i.e. street_address=123); actual value: \" + Attribute,\n                        AttributeParam);\n                }\n\n                urlParams.Add(new QueryParameter(\"attribute:\" + parts[0], parts[1]));\n            }\n        }\n\n        /// <summary>\n        /// Builds an url for search query\n        /// </summary>\n        /// <param name=\"parameters\">URL parameters</param>\n        /// <returns>URL for nearby places + parameters</returns>\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"IP\") &&\n                !(parameters.ContainsKey(\"Latitude\") &&\n                  parameters.ContainsKey(\"Longitude\")))\n            {\n                throw new ArgumentException(\"Either Latitude and Longitude or IP address is required.\");\n            }\n\n            var req = new Request(BaseUrl + \"geo/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n            \n            if (parameters.ContainsKey(\"IP\"))\n            {\n                IP = parameters[\"IP\"];\n                urlParams.Add(new QueryParameter(\"ip\", IP));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base show url\n        /// </summary>\n        /// <returns>base url + show segment</returns>\n        Request BuildIDUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(IDParam))\n                throw new ArgumentException(\"ID is required for a Geo ID query.\", IDParam);\n\n            ID = parameters[IDParam];\n\n            var url = \"geo/id/\" + ID + \".json\";\n            return new Request(BaseUrl + url);\n        }\n\n        /// <summary>\n        /// return a saved searches url\n        /// </summary>\n        /// <returns>saved search url</returns>\n        Request BuildReverseUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/reverse_geocode.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// return a url for similar places\n        /// </summary>\n        /// <returns>saved search url</returns>\n        Request BuildSimilarPlacesUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            if (!parameters.ContainsKey(\"PlaceName\"))\n            {\n                const string LatLongParam = \"PlaceName\";\n                throw new ArgumentException(\"PlaceName is required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/similar_places.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"PlaceName\"))\n            {\n                PlaceName = parameters[\"PlaceName\"];\n                urlParams.Add(new QueryParameter(\"name\", PlaceName));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms response into List of SavedSearch\n        /// </summary>\n        /// <param name=\"responseJson\">Json with Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData geoJson = JsonMapper.ToObject(responseJson);\n\n            Geo geo;\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    geo = HandleIDResponse(geoJson);\n                    break;\n                case GeoType.Reverse:\n                case GeoType.Search:\n                case GeoType.SimilarPlaces:\n                    geo = HandleMultiplePlaceResponse(geoJson);\n                    break;\n                default:\n                    geo = new Geo();\n                    break;\n            }\n                \n            return new List<Geo> { geo }.OfType<T>().ToList();\n        }\n  \n        Geo HandleIDResponse(JsonData placeJson)\n        {\n            var sb = new StringBuilder();\n            var writer = new JsonWriter(sb);\n\n            writer.WriteObjectStart();\n\n                writer.WritePropertyName(\"result\");\n                    writer.WriteObjectStart();\n\n                        writer.WritePropertyName(\"places\");\n                            writer.WriteArrayStart();\n\n                                writer.WriteJsonData(placeJson);\n\n                            writer.WriteArrayEnd();\n\n                    writer.WriteObjectEnd();\n\n            writer.WriteObjectEnd();\n\n            var geoJson = JsonMapper.ToObject(sb.ToString());\n\n            return HandleMultiplePlaceResponse(geoJson);\n        }\n  \n        Geo HandleMultiplePlaceResponse(JsonData geoJson)\n        {\n            var geo =\n                new Geo(geoJson)\n                {\n                    Type = Type,\n                    Accuracy = Accuracy,\n                    Granularity = Granularity,\n                    ID = ID,\n                    Latitude = Latitude,\n                    Longitude = Longitude,\n                    IP = IP,\n                    MaxResults = MaxResults,\n                    Query = Query,\n                    ContainedWithin = ContainedWithin,\n                    Attribute = Attribute,\n                    PlaceName = PlaceName\n                };\n            return geo;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData geoJson = JsonMapper.ToObject(responseJson);\n\n            switch ((GeoAction)theAction)\n            {\n                case GeoAction.CreatePlace:\n                    var place = new Place(geoJson);\n                    return place.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/GeoType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with Twitter Geo places\n    /// </summary>\n    public enum GeoType\n    {\n        /// <summary>\n        /// Get a list of valid places (from Twitter) that can be attached to an Update\n        /// </summary>\n        Reverse,\n\n        /// <summary>\n        /// Get more details on a place (found via GeoType.Reverse)\n        /// </summary>\n        ID,\n\n        /// <summary>\n        /// Performs a search, based on various criteria\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Gets a list of nearby places with similar names\n        /// </summary>\n        SimilarPlaces\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/Geometry.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical area\n    /// </summary>\n    public class Geometry\n    {\n        public Geometry() {}\n        internal Geometry(JsonData geometry)\n        {\n            if (geometry == null) return;\n\n            Type = geometry.GetValue<string>(\"type\");\n\n            var coordinates = geometry.GetValue<JsonData>(\"coordinates\");\n            Coordinates =\n                (from JsonData outer in coordinates\n                 from JsonData coord in outer\n                 select new Coordinate(coord))\n                .ToList();\n        }\n\n        /// <summary>\n        /// Type of bouding box\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Coordinates for bounding box\n        /// </summary>\n        public List<Coordinate> Coordinates { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Geo/Place.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing System.Xml.Serialization;\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A general description of a geographical location in Twitter\n    /// </summary>\n    public class Place\n    {\n        public Place() {}\n        internal Place(JsonData place)\n        {\n            if (place == null) return;\n\n            ID = place.GetValue<string>(\"id\");\n            Name = place.GetValue<string>(\"name\");\n            Country = place.GetValue<string>(\"country\");\n            CountryCode = place.GetValue<string>(\"country_code\");\n            FullName = place.GetValue<string>(\"full_name\");\n            PlaceType = place.GetValue<string>(\"place_type\");\n            Url = place.GetValue<string>(\"url\");\n            BoundingBox = new Geometry(place.GetValue<JsonData>(\"bounding_box\"));\n            Geometry = new Geometry(place.GetValue<JsonData>(\"geometry\"));\n\n            var containedWithin = place.GetValue<JsonData>(\"contained_within\");\n            ContainedWithin = \n                containedWithin != null && containedWithin.Count > 0 ? \n                    new Place(containedWithin[0]) :\n                    null;\n\n            var polyLines = place.GetValue<JsonData>(\"polylines\");\n            PolyLines = \n                polyLines == null ? \n                    new List<string>() \n                        : \n                    (from JsonData line in polyLines\n                     select line.ToString())\n                    .ToList();\n\n            var attrDict = place.GetValue<JsonData>(\"attributes\") as IDictionary<string, JsonData>;\n            Attributes =\n                attrDict == null ?\n                    new Dictionary<string, string>() \n                        :\n                    (from string key in attrDict.Keys\n                     select new \n                     { \n                         Key = key, \n                         Val = attrDict[key].ToString()\n                     })\n                    .ToDictionary(\n                        attr => attr.Key,\n                        attr => attr.Val);\n        }\n\n        /// <summary>\n        /// Name of place\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Country code abbreviation\n        /// </summary>\n        public string CountryCode { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Name of country\n        /// </summary>\n        public string Country { get; set; }\n\n        /// <summary>\n        /// Type of place (i.e. neighborhood, city, country, etc.)\n        /// </summary>\n        public string PlaceType { get; set; }\n\n        /// <summary>\n        /// Url to get more details on place\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Full name of place\n        /// </summary>\n        public string FullName { get; set; }\n\n        /// <summary>\n        /// Place related metadata\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string> Attributes { get; set; }\n\n        /// <summary>\n        /// Geographical outline of place\n        /// </summary>\n        public Geometry BoundingBox { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public Geometry Geometry { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<string> PolyLines { get; set; }\n\n        /// <summary>\n        /// Containing place (i.e. a neighborhood is contained within a city)\n        /// </summary>\n        public Place ContainedWithin { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/Configuration.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public class Configuration\n    {\n        /// <summary>\n        /// Length of a t.co short url\n        /// </summary>\n        public int ShortUrlLength { get; set; }\n\n        /// <summary>\n        /// Lenght of an https t.co short url\n        /// </summary>\n        public int ShortUrlLengthHttps { get; set; }\n\n        /// <summary>\n        /// Twitter slugs that are not usernames\n        /// </summary>\n        public List<string> NonUserNamePaths { get; set; }\n\n        /// <summary>\n        /// Max photo size\n        /// </summary>\n        public int PhotoSizeLimit { get; set; }\n\n        /// <summary>\n        /// Max number of items that can be uploaded at one time\n        /// </summary>\n        public int MaxMediaPerUpload { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public int CharactersReservedPerMedia { get; set; }\n\n        /// <summary>\n        /// Sizing allowances/behaviors for each type of photo\n        /// </summary>\n        public List<PhotoSize> PhotoSizes { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/Help.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public class Help\n    {\n        /// <summary>\n        /// Help Type (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        public string Resources { get; set; }\n\n        /// <summary>\n        /// Will be true if help Test succeeds\n        /// </summary>\n        public bool OK { get; set; }\n\n        /// <summary>\n        /// Populated for Help Configuration query\n        /// </summary>\n        public Configuration Configuration { get; set; }\n\n        /// <summary>\n        /// List of languages, codes, and statuses\n        /// </summary>\n        public List<Language> Languages { get; set; }\n\n        /// <summary>\n        /// Access token for which rate limit applies\n        /// </summary>\n        public string RateLimitAccountContext { get; set; }\n\n        /// <summary>\n        /// Rate limit statuses\n        /// </summary>\n        public Dictionary<string, List<RateLimits>> RateLimits { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/HelpRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// used for processing help messages - we only use the request processing part\n    /// </summary>\n    public class HelpRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Help request (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        internal string Resources { get; set; }\n\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Help>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Resources\"\n               })\n               .Parameters;\n        }\n\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<HelpType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case HelpType.Configuration:\n                    return new Request(BaseUrl + \"help/configuration.json\");\n                case HelpType.Languages:\n                    return new Request(BaseUrl + \"help/languages.json\");\n                case HelpType.RateLimits:\n                    return BuildRateLimitsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        private Request BuildRateLimitsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"application/rate_limit_status.json\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Resources\"))\n            {\n                Resources = parameters[\"Resources\"];\n                urlParams.Add(new QueryParameter(\"resources\", Resources.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// return response from help request\n        /// </summary>\n        /// <param name=\"responseJson\">response from twitter</param>\n        /// <returns>true</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Help help;\n\n            switch (Type)\n            {\n                case HelpType.Configuration:\n                    help = HandleHelpConfiguration(responseJson);\n                    break;\n                case HelpType.Languages:\n                    help = HandleHelpLanguages(responseJson);\n                    break;\n                case HelpType.RateLimits:\n                    help = HandleHelpRateLimits(responseJson);\n                    break;\n                default:\n                    help = new Help();\n                    break;\n            }\n\n            var helpList = new List<Help> { help };\n\n            return helpList.OfType<T>().ToList();\n        }\n\n        Help HandleHelpConfiguration(string responseJson)\n        {\n            JsonData helpJson = JsonMapper.ToObject(responseJson);\n\n            var photoSizeDict = helpJson.GetValue<JsonData>(\"photo_sizes\") as IDictionary<string, JsonData>;\n\n            return new Help\n            {\n                Type = HelpType.Configuration,\n                Configuration = new Configuration\n                {\n                    CharactersReservedPerMedia = helpJson.GetValue<int>(\"characters_reserved_per_media\"),\n                    PhotoSizes =\n                        (from string key in photoSizeDict.Keys\n                         let photoSize = photoSizeDict[key]\n                         select new PhotoSize\n                         {\n                             Type = key,\n                             Height = photoSize.GetValue<int>(\"h\"),\n                             Width = photoSize.GetValue<int>(\"w\"),\n                             Resize = photoSize.GetValue<string>(\"resize\")\n                         })\n                        .ToList(),\n                    ShortUrlLength = helpJson.GetValue<int>(\"short_url_length\"),\n                    PhotoSizeLimit = helpJson.GetValue<int>(\"photo_size_limit\"),\n                    NonUserNamePaths =\n                        (from JsonData path in helpJson.GetValue<JsonData>(\"non_username_paths\")\n                         select path.ToString())\n                        .ToList(),\n                    MaxMediaPerUpload = helpJson.GetValue<int>(\"max_media_per_upload\"),\n                    ShortUrlLengthHttps = helpJson.GetValue<int>(\"short_url_length_https\")\n                }\n            };\n        }\n\n        Help HandleHelpLanguages(string responseJson)\n        {\n            JsonData helpJson = JsonMapper.ToObject(responseJson);\n\n            return new Help\n            {\n                Type = HelpType.Languages,\n                Languages =\n                    (from JsonData lang in helpJson\n                     select new Language\n                     {\n                         Code = lang.GetValue<string>(\"code\"),\n                         Name = lang.GetValue<string>(\"name\"),\n                         Status = lang.GetValue<string>(\"status\")\n                     })\n                    .ToList()\n            };\n        }\n\n        Help HandleHelpRateLimits(string responseJson)\n        {\n            JsonData helpJson = JsonMapper.ToObject(responseJson);\n\n            var context = helpJson.GetValue<JsonData>(\"rate_limit_context\");\n            var resources = helpJson.GetValue<JsonData>(\"resources\") as IDictionary<string, JsonData>;\n\n            return new Help\n            {\n                Type = HelpType.RateLimits,\n                Resources = Resources,\n                RateLimitAccountContext = context.GetValue<string>(\"access_token\"),\n                RateLimits = \n                    (from key in resources.Keys\n                     let category = resources[key] as IDictionary<string, JsonData>\n                     select new\n                     {\n                         Key = key,\n                         Value =\n                            (from cat in category.Keys\n                             let limit = category[cat]\n                             select new RateLimits\n                             {\n                                 Resource = cat,\n                                 Limit = limit.GetValue<int>(\"limit\"),\n                                 Remaining = limit.GetValue<int>(\"remaining\"),\n                                 Reset = limit.GetValue<ulong>(\"reset\")\n                             })\n                            .ToList()\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Value)\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/HelpType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum HelpType\n    {\n        /// <summary>\n        /// Various settings such as image size, t.co url sizes, and more (should be cached and reused, but refreshed no more than once a day)\n        /// </summary>\n        Configuration,\n\n        /// <summary>\n        /// Languages supported by Twitter\n        /// </summary>\n        Languages,\n\n        /// <summary>\n        /// Provides Rate Limit Status\n        /// </summary>\n        RateLimits,\n\n        /// <summary>\n        /// Get Twitter Terms of Service\n        /// </summary>\n        Tos\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/Language.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public class Language\n    {\n        /// <summary>\n        /// Long description of language name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Two character major language code\n        /// </summary>\n        public string Code { get; set; }\n\n        /// <summary>\n        /// Twitter status\n        /// </summary>\n        public string Status { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/PhotoSize.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public class PhotoSize\n    {\n        /// <summary>\n        /// Type of photo (i.e. Large, Small, etc.)\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Photo Width\n        /// </summary>\n        public int Width { get; set; }\n\n        /// <summary>\n        /// Photo Height\n        /// </summary>\n        public int Height { get; set; }\n\n        /// <summary>\n        /// Resize Behavior (i.e. crop, fit, ...)\n        /// </summary>\n        public string Resize { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Help/RateLimits.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public class RateLimits\n    {\n        /// <summary>\n        /// Url Segment representing resource that rate limits apply to\n        /// </summary>\n        public string Resource { get; set; }\n\n        /// <summary>\n        /// Number of requests left in this time period\n        /// </summary>\n        public int Remaining { get; set; }\n\n        /// <summary>\n        /// Epoch seconds when rate limits reset\n        /// </summary>\n        public ulong Reset { get; set; }\n\n        /// <summary>\n        /// Number of requests allowed\n        /// </summary>\n        public int Limit { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitter/ITwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Members for communicating with Twitter\n    /// </summary>\n    public interface ITwitterExecute\n    {\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        ITwitterAuthorizer AuthorizedClient { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        string LastUrl { get; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        string UserAgent { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        int Timeout { get; set; }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        string PostToTwitter<T>(string url, IDictionary<string, string> postData, Func<string, T> getResult);\n\n#if !NETFX_CORE\n        /// <summary>\n        /// performs HTTP POST file upload to Twitter\n        /// </summary>\n        /// <param name=\"filePath\">full path of file to upload</param>\n        /// <param name=\"parameters\">query string parameters</param>\n        /// <param name=\"url\">url to upload to</param>\n        /// <returns>XML Results from Twitter</returns>\n        string PostTwitterFile<T>(string url, IDictionary<string, string> postData, string filePath, IRequestProcessor<T> reqProc);\n#endif\n\n        /// <summary>\n        /// performs HTTP POST image byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"image\">byte array containing image to upload</param>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <returns>XML results From Twitter</returns>\n        string PostTwitterImage<T>(string url, IDictionary<string, string> postData, byte[] image, string fileName, string imageType, IRequestProcessor<T> reqProc);\n\n        /// <summary>\n        /// performs HTTP POST media byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">request parameters</param>\n        /// <param name=\"mediaItems\">list of Media each media item to upload</param>\n        /// <param name=\"reqProc\">request processor for handling results</param>\n        /// <returns>XML results From Twitter</returns>\n        string PostMedia<T>(string url, IDictionary<string, string> postData, List<Media> mediaItems, IRequestProcessor<T> reqProc);\n\n        /// <summary>\n        /// makes HTTP call to Twitter API\n        /// </summary>\n        /// <param name=\"url\">URL with all query info</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Results from Twitter</returns>\n        string QueryTwitter<T>(Request req, IRequestProcessor<T> reqProc);\n\n        /// <summary>\n        /// Query for Twitter Streaming APIs\n        /// </summary>\n        /// <param name=\"url\">URL with all query info</param>\n        /// <returns>Raw results from Twitter</returns>\n        string QueryTwitterStream(Request req);\n\n        /// <summary>\n        /// Used to notify callers of changes in image upload progress\n        /// </summary>\n        event EventHandler<TwitterProgressEventArgs> UploadProgressChanged;\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        Action<StreamContent> StreamingCallback { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        bool CloseStream { get; set; }\n\n        /// <summary>\n        /// Only for streaming credentials, use OAuth for non-streaming APIs\n        /// </summary>\n        string StreamingUserName { get; set; }\n\n        /// <summary>\n        /// Only for streaming credentials, use OAuth for non-streaming APIs\n        /// </summary>\n        string StreamingPassword { get; set; }\n\n        /// <summary>\n        /// Executed for async calls\n        /// </summary>\n        Delegate AsyncCallback { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitter/TwitterContext.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n ***********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Net;\nusing LinqToTwitter.Common;\n\n#if SILVERLIGHT\nusing System.Net.Browser;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// manages access to Twitter API\n    /// </summary>\n    public class TwitterContext : IDisposable\n    {\n        //\n        // header constants\n        //\n\n        public const string XRateLimitLimitKey = \"x-rate-limit-limit\";\n        public const string XRateLimitRemainingKey = \"x-rate-limit-remaining\";\n        public const string XRateLimitResetKey = \"x-rate-limit-reset\";\n        public const string RetryAfterKey = \"Retry-After\";\n        public const string XMediaRateLimitLimitKey = \"x-mediaratelimit-limit\";\n        public const string XMediaRateLimitRemainingKey = \"x-mediaratelimit-remaining\";\n        public const string XMediaRateLimitResetKey = \"x-mediaratelimit-reset\";\n        public const string DateKey = \"Date\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        [Obsolete(\"Twitter API v1.1 requires all queries to be authorized. Please visit http://linqtotwitter.codeplex.com/wikipage?title=Securing%20Your%20Applications for more guidance on how to use OAuth in your application.\", true)]\n        public TwitterContext()\n            : this(new AnonymousAuthorizer())\n        {\n            BaseUrl = \"https://api.twitter.com/1.1/\";\n            SearchUrl = \"https://api.twitter.com/1.1/search/\";\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"authorization\">The authorization.</param>\n        public TwitterContext(ITwitterAuthorizer authorization)\n#if SILVERLIGHT\n            : this(authorization, (IWebRequestCreate)null)\n#else\n            : this(new TwitterExecute(authorization))\n#endif\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"authorization\">The authorization.</param>\n        /// <param name=\"baseUrl\">Overwrites default base URL</param>\n        /// <param name=\"searchUrl\">Overwrites default search URL</param>\n        [Obsolete(\"The Search URL is now the same as the Base URL in Twitter API v1.1.\", true)]\n        public TwitterContext(ITwitterAuthorizer authorization, string baseUrl, string searchUrl)\n            : this(new TwitterExecute(authorization))\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"execute\">The <see cref=\"ITwitterExecute\"/> object to use.</param>\n        public TwitterContext(ITwitterExecute execute)\n        {\n            if (execute == null)\n            {\n                throw new ArgumentNullException(\"execute\");\n            }\n\n            TwitterExecutor = execute;\n            BaseUrl = \"https://api.twitter.com/1.1/\";\n            SearchUrl = \"https://api.twitter.com/1.1/search/\";\n            StreamingUrl = \"https://stream.twitter.com/1.1/\";\n            UserStreamUrl = \"https://userstream.twitter.com/1.1/\";\n            SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\";\n        }\n\n\n#if SILVERLIGHT\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"authorization\">The authorization.</param>\n        public TwitterContext(ITwitterAuthorizer authorization, IWebRequestCreate webReqCreateInput)\n            : this(new TwitterExecute(authorization))\n        {\n            IWebRequestCreate webReqCreator = webReqCreateInput;\n                \n            if (webReqCreateInput == null)\n                webReqCreator =WebRequestCreator.ClientHttp;\n#if !WINDOWS_PHONE\n            if (webReqCreateInput == null && \n                !System.Windows.Application.Current.IsRunningOutOfBrowser)\n                webReqCreator = WebRequestCreator.BrowserHttp;\n#endif\n            WebRequest.RegisterPrefix(\"http://\", webReqCreator);\n            WebRequest.RegisterPrefix(\"https://\", webReqCreator);\n        }\n#endif\n\n        /// <summary>\n        /// Gets the screen name of the user (only populated when a request for access token occurs)\n        /// </summary>\n        public string UserName\n        {\n            get { return AuthorizedClient.ScreenName; }\n        }\n\n        /// <summary>\n        /// base URL for accessing Twitter API\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        // TODO: BaseUrl and SearchUrl are the same in Twitter API v1.1. Remove SearchUrl and refactor as necessary.\n        /// <summary>\n        /// base URL for accessing Twitter Search API\n        /// </summary>\n        public string SearchUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing streaming APIs\n        /// </summary>\n        public string StreamingUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing user stream APIs\n        /// </summary>\n        public string UserStreamUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing site stream APIs\n        /// </summary>\n        public string SiteStreamUrl { get; set; }\n\n        /// <summary>\n        /// Only for streaming credentials, use OAuth for non-streaming APIs\n        /// </summary>\n        [Obsolete(\"Please use OAuth instead.\", true)]\n        public string StreamingUserName \n        {\n            get { return TwitterExecutor.StreamingUserName; }\n            set { TwitterExecutor.StreamingUserName = value; }\n        }\n\n        /// <summary>\n        /// Only for streaming credentials, use OAuth for non-streaming APIs\n        /// </summary>\n        [Obsolete(\"Please use OAuth instead.\", true)]\n        public string StreamingPassword\n        {\n            get { return TwitterExecutor.StreamingPassword; }\n            set { TwitterExecutor.StreamingPassword = value; }\n        }\n\n        /// <summary>\n        /// Assign the Log to the context\n        /// </summary>\n        public TextWriter Log\n        {\n            get { return TwitterExecute.Log; }\n            set { TwitterExecute.Log = value; }\n        }\n\n        /// <summary>\n        /// This contains the JSON string from the Twitter response to the most recent query.\n        /// </summary>\n        public string RawResult { get; set; }\n\n        /// <summary>\n        /// Used to notify callers of changes in image upload progress\n        /// </summary>\n        public event EventHandler<TwitterProgressEventArgs> UploadProgressChanged\n        {\n            add\n            {\n                TwitterExecutor.UploadProgressChanged += value;\n            }\n            remove\n            {\n                TwitterExecutor.UploadProgressChanged -= value;\n            }\n        }\n\n        //\n        // The routines in this region delegate to TwitterExecute\n        // which contains the methods for communicating with Twitter.\n        // This is necessary so we can make the side-effect methods\n        // more testable, using IoC.\n        //\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.UserAgent;\n                }\n                return string.Empty;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.UserAgent = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the read write timeout.\n        /// </summary>\n        /// <value>The read write timeout.</value>\n        public int ReadWriteTimeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.ReadWriteTimeout;\n                }\n                return TwitterExecute.DefaultReadWriteTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.ReadWriteTimeout = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public int Timeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.Timeout;\n                }\n                return TwitterExecute.DefaultTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.Timeout = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the authorized client on the <see cref=\"ITwitterExecute\"/> object.\n        /// </summary>\n        public ITwitterAuthorizer AuthorizedClient\n        {\n            get { return TwitterExecutor.AuthorizedClient; }\n            set { TwitterExecutor.AuthorizedClient = value; }\n        }\n\n#if !SILVERLIGHT && !NETFX_CORE\n        /// <summary>\n        /// Proxy for all HTTP communications\n        /// </summary>\n        public WebProxy Proxy\n        {\n            get { return AuthorizedClient.Proxy; }\n            set { AuthorizedClient.Proxy = value; }\n        }\n#endif\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public string LastUrl\n        {\n            get { return TwitterExecutor.LastUrl; }\n        }\n        \n        /// <summary>\n        /// Methods for communicating with Twitter\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// enables access to Twitter account information, such as Verify Credentials and Rate Limit Status\n        /// </summary>\n        public TwitterQueryable<Account> Account\n        {\n            get\n            {\n                return new TwitterQueryable<Account>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter blocking information, such as Exists, Blocks, and IDs\n        /// </summary>\n        public TwitterQueryable<Blocks> Blocks\n        {\n            get\n            {\n                return new TwitterQueryable<Blocks>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Control Streams, which manage and query Site Streams\n        /// </summary>\n        public TwitterQueryable<ControlStream> ControlStream\n        {\n            get\n            {\n                return new TwitterQueryable<ControlStream>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter User messages, such as Friends and Followers\n        /// </summary>\n        public TwitterQueryable<DirectMessage> DirectMessage\n        {\n            get\n            {\n                return new TwitterQueryable<DirectMessage>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Favorites\n        /// </summary>\n        public TwitterQueryable<Favorites> Favorites\n        {\n            get\n            {\n                return new TwitterQueryable<Favorites>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Friendship info\n        /// </summary>\n        public TwitterQueryable<Friendship> Friendship\n        {\n            get\n            {\n                return new TwitterQueryable<Friendship>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Geo info\n        /// </summary>\n        public TwitterQueryable<Geo> Geo\n        {\n            get\n            {\n                return new TwitterQueryable<Geo>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Help info\n        /// </summary>\n        public TwitterQueryable<Help> Help\n        {\n            get\n            {\n                return new TwitterQueryable<Help>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter List info\n        /// </summary>\n        public TwitterQueryable<List> List\n        {\n            get\n            {\n                return new TwitterQueryable<List>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Raw Query Extensibility\n        /// </summary>\n        public TwitterQueryable<Raw> RawQuery\n        {\n            get\n            {\n                return new TwitterQueryable<Raw>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Related Results Query Extensibility\n        /// </summary>\n        public TwitterQueryable<RelatedResults> RelatedResults\n        {\n            get\n            {\n                return new TwitterQueryable<RelatedResults>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Saved Searches\n        /// </summary>\n        public TwitterQueryable<SavedSearch> SavedSearch\n        {\n            get\n            {\n                return new TwitterQueryable<SavedSearch>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter SocialGraph to discover Friends and Followers\n        /// </summary>\n        public TwitterQueryable<SocialGraph> SocialGraph\n        {\n            get\n            {\n                return new TwitterQueryable<SocialGraph>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Search to query tweets\n        /// </summary>\n        public TwitterQueryable<Search> Search\n        {\n            get\n            {\n                return new TwitterQueryable<Search>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Status messages, such as Friends and Public\n        /// </summary>\n        public TwitterQueryable<Status> Status\n        {\n            get\n            {\n                return new TwitterQueryable<Status>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Status messages, such as Friends and Public\n        /// </summary>\n        public TwitterQueryable<Streaming> Streaming\n        {\n            get\n            {\n                return new TwitterQueryable<Streaming>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Trends, such as Trend, Current, Daily, and Weekly\n        /// </summary>\n        public TwitterQueryable<Trend> Trends\n        {\n            get\n            {\n                return new TwitterQueryable<Trend>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter User messages, such as Friends and Followers\n        /// </summary>\n        public TwitterQueryable<User> User\n        {\n            get\n            {\n                return new TwitterQueryable<User>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter UserStream for streaming access to user info\n        /// </summary>\n        public TwitterQueryable<UserStream> UserStream\n        {\n            get\n            {\n                return new TwitterQueryable<UserStream>(this);\n            }\n        }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to an int\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>int value from response</returns>\n        private int GetResponseHeaderAsInt(string responseHeader)\n        {\n            var headerVal = -1;\n            var headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                var headerValAsString = headers[responseHeader];\n\n                int.TryParse(headerValAsString, out headerVal);\n            }\n\n            return headerVal;\n        }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to a DateTime\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>DateTime value from response</returns>\n        /// <remarks>Expects a string like: Sat, 26 Feb 2011 01:12:08 GMT</remarks>\n        private DateTime? GetResponseHeaderAsDateTime(string responseHeader)\n        {\n            DateTime? headerVal = null;\n            var headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                var headerValAsString = headers[responseHeader];\n                DateTime value;\n\n                if (DateTime.TryParse(headerValAsString,\n                                        CultureInfo.InvariantCulture,\n                                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,\n                                        out value))\n                    headerVal = value;\n            }\n\n            return headerVal;\n        }\n        \n        /// <summary>\n        /// Response headers from Twitter Queries\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.ResponseHeaders;\n                }\n                return null;\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per minute\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent search query \n        /// that fails with an HTTP 503\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't exceeded search rate yet\n        /// </remarks>\n        public int RetryAfter\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(RetryAfterKey);\n            }\n        }\n\n\n        /// <summary>\n        /// Max number of requests per window for\n        /// TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitResetKey);\n            }\n        }\n\n\n        /// <summary>\n        /// Gets the response header Date and converts to a nullable-DateTime\n        /// </summary>\n        /// <remarks>\n        /// Returns null if the headers don't contain a valid Date value\n        /// i.e. you haven't performed a query yet or not convertable\n        /// </remarks>\n        public DateTime? TwitterDate\n        {\n            get\n            {\n                return GetResponseHeaderAsDateTime(DateKey);\n            }\n        }\n\n        /// <summary>\n        /// Called by QueryProvider to execute queries\n        /// </summary>\n        /// <param name=\"expression\">ExpressionTree to parse</param>\n        /// <param name=\"isEnumerable\">Indicates whether expression is enumerable</param>\n        /// <returns>list of objects with query results</returns>\n        public virtual object Execute<T>(Expression expression, bool isEnumerable)\n            where T: class\n        {\n            // request processor is specific to request type (i.e. Status, User, etc.)\n            var reqProc = CreateRequestProcessor<T>(expression);\n\n            // get input parameters that go on the REST query URL\n            var parameters = GetRequestParameters(expression, reqProc);\n\n            // construct REST endpoint, based on input parameters\n            var request = reqProc.BuildUrl(parameters);\n\n            string results;\n\n            // process request through Twitter\n            if (typeof(T) == typeof(Streaming) ||\n                typeof(T) == typeof(UserStream))\n            {\n                results = TwitterExecutor.QueryTwitterStream(request);\n            }\n            else\n            {\n                results = TwitterExecutor.QueryTwitter(request, reqProc);\n            }\n\n            RawResult = results;\n\n            // Transform results into objects\n            var queryableList = reqProc.ProcessResults(results);\n\n            // Copy the IEnumerable entities to an IQueryable.\n            var queryableItems = queryableList.AsQueryable();\n\n            // Copy the expression tree that was passed in, changing only the first\n            // argument of the innermost MethodCallExpression.\n            // -- Transforms IQueryable<T> into List<T>, which is (IEnumerable<T>)\n            var treeCopier = new ExpressionTreeModifier<T>(queryableItems);\n            Expression newExpressionTree = treeCopier.CopyAndModify(expression);\n\n            // This step creates an IQueryable that executes by replacing Queryable methods with Enumerable methods.\n            if (isEnumerable)\n                return queryableItems.Provider.CreateQuery(newExpressionTree);\n\n            return queryableItems.Provider.Execute(newExpressionTree);\n        }\n\n        /// <summary>\n        /// Search the where clause for query parameters\n        /// </summary>\n        /// <param name=\"expression\">Input query expression tree</param>\n        /// <param name=\"reqProc\">Processor specific to this request type</param>\n        /// <returns>Name/value pairs of query parameters</returns>\n        private static Dictionary<string, string> GetRequestParameters<T>(Expression expression, IRequestProcessor<T> reqProc)\n        {\n            var parameters = new Dictionary<string, string>();\n\n            // GHK FIX: Handle all wheres\n            var whereExpressions = new WhereClauseFinder().GetAllWheres(expression);\n            foreach (var whereExpression in whereExpressions)\n            {\n                var lambdaExpression = (LambdaExpression)((UnaryExpression)(whereExpression.Arguments[1])).Operand;\n\n                // translate variable references in expression into constants\n                lambdaExpression = (LambdaExpression)Evaluator.PartialEval(lambdaExpression);\n\n                var newParameters = reqProc.GetParameters(lambdaExpression);\n                foreach (var newParameter in newParameters)\n                {\n                    if (!parameters.ContainsKey(newParameter.Key))\n                    {\n                        parameters.Add(newParameter.Key, newParameter.Value);\n                    }\n                }\n            }\n\n            return parameters;\n        }\n\n        protected internal virtual IRequestProcessor<T> CreateRequestProcessor<T>()\n            where T : class\n        {\n            string requestType = typeof(T).Name;\n\n            IRequestProcessor<T> req = CreateRequestProcessor<T>(requestType);\n\n            return req;\n        }\n\n        /// <summary>\n        /// factory method for returning a request processor\n        /// </summary>\n        /// <typeparam name=\"T\">type of request</typeparam>\n        /// <returns>request processor matching type parameter</returns>\n        internal IRequestProcessor<T> CreateRequestProcessor<T>(Expression expression)\n            where T: class\n        {\n            if (expression == null)\n            {\n                const string NullExpressionMessage = \"Expression passed to CreateRequestProcessor must not be null.\";\n                throw new ArgumentNullException(\"Expression\", NullExpressionMessage);\n            }\n\n            string requestType = new MethodCallExpressionTypeFinder().GetGenericType(expression).Name;\n\n            IRequestProcessor<T> req = CreateRequestProcessor<T>(requestType);\n            return req;\n        }\n\n        protected internal IRequestProcessor<T> CreateRequestProcessor<T>(string requestType)\n            where T : class\n        {\n            var baseUrl = BaseUrl;\n            IRequestProcessor<T> req;\n\n            switch (requestType)\n            {\n                case \"Account\":\n                    req = new AccountRequestProcessor<T>();\n                    break;\n                case \"Blocks\":\n                    req = new BlocksRequestProcessor<T>();\n                    break;\n                case \"ControlStream\":\n                    req = new ControlStreamRequestProcessor<T>\n                        {\n                            SiteStreamUrl = SiteStreamUrl\n                        };\n                    break;\n                case \"DirectMessage\":\n                    req = new DirectMessageRequestProcessor<T>();\n                    break;\n                case \"Favorites\":\n                    req = new FavoritesRequestProcessor<T>();\n                    break;\n                case \"Friendship\":\n                    req = new FriendshipRequestProcessor<T>();\n                    break;\n                case \"Geo\":\n                    req = new GeoRequestProcessor<T>();\n                    break;\n                case \"Help\":\n                    req = new HelpRequestProcessor<T>();\n                    break;\n                case \"List\":\n                    req = new ListRequestProcessor<T>();\n                    break;\n                case \"Raw\":\n                    req = new RawRequestProcessor<T>();\n                    break;\n                case \"RelatedResults\":\n                    req = new RelatedResultsRequestProcessor<T>();\n                    break;\n                case \"SavedSearch\":\n                    req = new SavedSearchRequestProcessor<T>();\n                    break;\n                case \"SocialGraph\":\n                    req = new SocialGraphRequestProcessor<T>();\n                    break;\n                case \"Search\":\n                    baseUrl = SearchUrl;\n                    req = new SearchRequestProcessor<T>();\n                    break;\n                case \"Status\":\n                    req = new StatusRequestProcessor<T>();\n                    break;\n                case \"Streaming\":\n                    baseUrl = StreamingUrl;\n                    req = new StreamingRequestProcessor<T>\n                    {\n                        TwitterExecutor = TwitterExecutor\n                    };\n                    break;\n                case \"Trend\":\n                    req = new TrendRequestProcessor<T>();\n                    break;\n                case \"User\":\n                    req = new UserRequestProcessor<T>();\n                    break;\n                case \"UserStream\":\n                    baseUrl = null; // don't set that..\n                    req = new UserStreamRequestProcessor<T>\n                    {\n                        UserStreamUrl = UserStreamUrl,\n                        SiteStreamUrl = SiteStreamUrl,\n                        TwitterExecutor = TwitterExecutor\n                    };\n                    break;\n                default:\n                    throw new ArgumentException(\"Type, \" + requestType + \" isn't a supported LINQ to Twitter entity.\", \"requestType\");\n            }\n\n            if (baseUrl != null)\n                req.BaseUrl = baseUrl;\n\n            return req;\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                var disposableExecutor = TwitterExecutor as IDisposable;\n                if (disposableExecutor != null)\n                {\n                    disposableExecutor.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitter/TwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing LinqToTwitter.Common;\nusing LitJson;\n\n#if NETFX_CORE\nusing System.Threading.Tasks;\n#endif\n\n#if SILVERLIGHT && !WINDOWS_PHONE\n    using System.Windows.Browser;\n#elif !SILVERLIGHT && !WINDOWS_PHONE && !NETFX_CORE && !L2T_PCL\n#endif\n\n#if !SILVERLIGHT && !L2T_PCL\nusing System.IO.Compression;\n#else\nusing Ionic.Zlib;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Logic that performs actual communication with Twitter\n    /// </summary>\n    internal partial class TwitterExecute : ITwitterExecute, IDisposable\n    {\n        /// <summary>\n        /// Version used in UserAgent\n        /// </summary>\n        const string LinqToTwitterVersion = \"LINQ to Twitter v2.1\";\n\n        /// <summary>\n        /// Default for ReadWriteTimeout\n        /// </summary>\n        public const int DefaultReadWriteTimeout = 300000;\n\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        public ITwitterAuthorizer AuthorizedClient { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        public int ReadWriteTimeout\n        {\n            get { return (int)AuthorizedClient.ReadWriteTimeout.TotalMilliseconds; }\n            set { AuthorizedClient.ReadWriteTimeout = TimeSpan.FromMilliseconds(value); }\n        }\n\n        /// <summary>\n        /// Default for Timeout\n        /// </summary>\n        public const int DefaultTimeout = 100000;\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        public int Timeout\n        {\n            get { return (int)AuthorizedClient.Timeout.TotalMilliseconds; }\n            set { AuthorizedClient.Timeout = TimeSpan.FromMilliseconds(value); }\n        }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public string LastUrl { get; private set; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                return AuthorizedClient.UserAgent;\n            }\n            set\n            {\n                AuthorizedClient.UserAgent =\n                    string.IsNullOrEmpty(value) ?\n                        AuthorizedClient.UserAgent :\n                        value + \";\" + AuthorizedClient.UserAgent;\n            }\n        }\n\n        /// <summary>\n        /// Assign your TextWriter instance to receive LINQ to Twitter output\n        /// </summary>\n        public static TextWriter Log { get; set; }\n\n        readonly object streamingCallbackLock = new object();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Action<StreamContent> StreamingCallback { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        public bool CloseStream { get; set; }\n\n        /// <summary>\n        /// Only for streaming credentials, use OAuth for non-streaming APIs\n        /// </summary>\n        public string StreamingUserName { get; set; }\n\n        /// <summary>\n        /// Only for streaming credentials, use OAuth for non-streaming APIs\n        /// </summary>\n        public string StreamingPassword { get; set; }\n\n        readonly object asyncCallbackLock = new object();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Delegate AsyncCallback { get; set; }\n\n        /// <summary>\n        /// Used to notify callers of changes in image upload progress\n        /// </summary>\n        public event EventHandler<TwitterProgressEventArgs> UploadProgressChanged;\n\n        /// <summary>\n        /// Call this to notify users of percentage of completion of operation.\n        /// </summary>\n        /// <param name=\"percent\">Percent complete.</param>\n        void OnUploadProgressChanged(int percent)\n        {\n            if (UploadProgressChanged != null)\n            {\n                var progressEventArgs = new TwitterProgressEventArgs\n                {\n                    PercentComplete = percent\n                };\n                UploadProgressChanged(this, progressEventArgs);\n            }\n        }\n\n        /// <summary>\n        /// supports testing\n        /// </summary>\n        public TwitterExecute(ITwitterAuthorizer authorizedClient)\n        {\n            if (authorizedClient == null)\n            {\n                throw new ArgumentNullException(\"authorizedClient\");\n            }\n\n            AuthorizedClient = authorizedClient;\n            AuthorizedClient.UserAgent = LinqToTwitterVersion;\n        }\n\n        /// <summary>\n        /// Common code to construct a TwitterQueryException instance\n        /// </summary>\n        /// <param name=\"responseStr\">Response from Twitter</param>\n        /// <param name=\"wex\">WebException assigned as InnerException if available</param>\n        /// <returns>An Instance of TwitterQueryException</returns>\n        TwitterQueryException ConstructTwitterQueryException(string responseStr, WebException wex)\n        {\n            JsonData responseJson = JsonMapper.ToObject(responseStr);\n\n            TwitterQueryException twitterQueryEx = null;\n\n            var errors = responseJson.GetValue<JsonData>(\"errors\");\n            if (errors != null && errors.Count > 0)\n            {\n                var error = errors[0];\n                twitterQueryEx = new TwitterQueryException(error.GetValue<string>(\"message\"), wex)\n                {\n                    HttpError = wex == null ? string.Empty : wex.Status.ToString(),\n                    ErrorCode = error.GetValue<int>(\"code\")\n                };\n            }\n            else\n            {\n                twitterQueryEx = new TwitterQueryException(\"Error while querying Twitter.\", wex);\n            }\n\n            return twitterQueryEx;\n        }\n\n        /// <summary>\n        /// Throws exception if error returned from Twitter\n        /// </summary>\n        /// <param name=\"responseStr\">XML or JSON string response from Twitter</param>\n        /// <param name=\"status\">HTTP Error number</param>\n        internal void CheckResultsForTwitterError(string responseStr, string status)\n        {\n            if (responseStr.StartsWith(\"{\", StringComparison.Ordinal))\n            {\n                TwitterQueryException twitterQueryEx = ConstructTwitterQueryException(responseStr, null);\n\n                if (twitterQueryEx.ErrorCode != 0)\n                    throw twitterQueryEx;\n            }\n        }\n\n        /// <summary>\n        /// generates a new TwitterQueryException from a WebException\n        /// </summary>\n        /// <param name=\"wex\">Web Exception to Translate</param>\n        /// <returns>new TwitterQueryException instance</returns>\n        internal TwitterQueryException CreateTwitterQueryException(WebException wex)\n        {\n            const string DefaultResponse = @\"{\"\"errors\"\":[{\"\"message\"\":\"\"No message from Twitter\"\",\"\"code\"\":0}]}\";\n            string responseStr = DefaultResponse;\n\n            try\n            {\n                if (wex != null && wex.Response != null)\n                {\n                    responseStr = GetTwitterResponse(wex.Response);\n                }\n            }\n            catch (Exception)\n            {\n                responseStr = DefaultResponse;\n            }\n\n            if (!responseStr.StartsWith(\"{\", StringComparison.Ordinal))\n                responseStr = DefaultResponse;\n\n            TwitterQueryException twitterQueryEx = ConstructTwitterQueryException(responseStr, wex);\n\n            return twitterQueryEx;\n        }\n\n        string ReadStreamBytes(Stream stream)\n        {\n            const int ByteCount = 4096;\n            var sb = new StringBuilder();\n\n            using (var reader = new StreamReader(stream))\n            {\n                while (reader.Peek() >= 0)\n                {\n                    var buffer = new char[ByteCount];\n                    reader.ReadBlock(buffer, 0, ByteCount);\n                    sb.Append(buffer);\n                }\n            }\n\n            return sb.ToString().Trim('\\0');\n        }\n\n        /// <summary>\n        /// gets WebResponse contents from Twitter\n        /// </summary>\n        /// <param name=\"resp\">WebResponse to extract string from</param>\n        /// <returns>XML string response from Twitter</returns>\n        string GetTwitterResponse(WebResponse resp)\n        {\n            string responseBody;\n\n            using (var respStream = resp.GetResponseStream())\n            {\n                string contentEncoding = string.Empty;\n                \n#if !SILVERLIGHT\n                contentEncoding = resp.Headers[\"Content-Encoding\"] ?? \"\";\n#endif\n\n                if (contentEncoding.ToLower().Contains(\"gzip\"))\n                {\n                    using (var gzip = new GZipStream(respStream, CompressionMode.Decompress))\n                    {\n                        responseBody = ReadStreamBytes(gzip);\n                    }\n                }\n                else if (resp.ContentType.StartsWith(\"image\"))\n                {\n                    responseBody = \"{ \\\"imageUrl\\\": \\\"\" + resp.ResponseUri.ToString() + \"\\\" }\";\n                }\n                else\n                {\n                    responseBody = ReadStreamBytes(respStream);\n                }\n            }\n\n            var responseHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);\n\n#if !SILVERLIGHT\n            foreach (string key in resp.Headers.AllKeys)\n            {\n                responseHeaders.Add(key, resp.Headers[key].ToString());\n            }\n#endif\n\n            ResponseHeaders = responseHeaders;\n\n            return responseBody;\n        }\n\n        /// <summary>\n        /// makes HTTP call to Twitter API\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Respose from Twitter</returns>\n        public string QueryTwitter<T>(Request request, IRequestProcessor<T> reqProc)\n        {\n#if SILVERLIGHT && !NETFX_CORE\n            if (AsyncCallback == null)\n                throw new InvalidOperationException(\"Silverlight and Windows Phone applications require async queries.\");\n#endif\n\n            LastUrl = request.FullUrl;\n            WriteLog(LastUrl, \"QueryTwitter\");\n\n            string response = string.Empty;\n            string httpStatus = string.Empty;\n            Exception thrownException = null;\n\n            try\n            {\n                var req = AuthorizedClient.Get(request);\n\n#if !SILVERLIGHT\n                bool initialStateSignaled = AsyncCallback != null;\n\n                using (var resetEvent = new ManualResetEvent(initialStateSignaled))\n                {\n#endif\n                    req.BeginGetResponse(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                lock (asyncCallbackLock)\n                                {\n                                    var asyncResp = new TwitterAsyncResponse<IEnumerable<T>>();\n                                    try\n                                    {\n                                        var res = req.EndGetResponse(ar) as HttpWebResponse;\n                                        httpStatus = (int)res.StatusCode + \" \" + res.StatusDescription;\n                                        response = GetTwitterResponse(res);\n\n                                        if (AsyncCallback != null)\n                                            asyncResp.State = reqProc.ProcessResults(response);\n                                    }\n                                    catch (Exception ex)\n                                    {\n                                        if (AsyncCallback == null)\n                                            thrownException = ex;\n\n                                        asyncResp.Status = TwitterErrorStatus.RequestProcessingException;\n                                        asyncResp.Message = \"Processing failed. See Error property for more details.\";\n                                        asyncResp.Exception = ex;\n                                    }\n                                    finally\n                                    {\n                                        if (AsyncCallback != null)\n                                        {\n                                            if (AsyncCallback is Action<IEnumerable<T>>)\n                                                (AsyncCallback as Action<IEnumerable<T>>)(asyncResp.State);\n                                            else\n                                                (AsyncCallback as Action<TwitterAsyncResponse<IEnumerable<T>>>)(asyncResp);\n\n                                            AsyncCallback = null;\n                                        }\n#if !SILVERLIGHT\n                                        else\n                                            resetEvent.Set();\n#endif\n                                    }\n                                }\n                            }), null);\n#if !SILVERLIGHT\n                    if (AsyncCallback == null)\n                    {\n                        resetEvent.WaitOne();\n\n                        if (thrownException != null)\n                            throw thrownException;\n                    }\n                }\n#endif\n            }\n            catch (WebException wex)\n            {\n                var twitterQueryEx = CreateTwitterQueryException(wex);\n                throw twitterQueryEx;\n            }\n\n            CheckResultsForTwitterError(response, httpStatus);\n\n            return response;\n        }\n\n        /// <summary>\n        /// Performs a query on the Twitter Stream\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <returns>\n        /// Caller expects an XML formatted string response, but\n        /// real response(s) with streams is fed to the callback\n        /// </returns>\n        public string QueryTwitterStream(Request request)\n        {\n#if NETFX_CORE\n            Task.Run(() => ExecuteTwitterStream(request));\n#else\n            ThreadPool.QueueUserWorkItem(ExecuteTwitterStream, request);\n#endif\n            return \"<streaming></streaming>\";\n        }\n\n        /// <summary>\n        /// Processes stream results and performs error handling\n        /// </summary>\n        /// <param name=\"state\">The request</param>\n        void ExecuteTwitterStream(object state)\n        {\n            var request = state as Request;\n            var streamUrl = request.Endpoint;\n\n            using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n            {\n                try\n                {\n                    HttpWebRequest req = null;\n\n                    if (streamUrl.Contains(\"user.json\") || streamUrl.Contains(\"site.json\"))\n                    {\n                        req = GetUserStreamRequest(request);\n                    }\n                    else\n                    {\n                        req = GetHttpRequest(request);\n                    }\n\n                    req.BeginGetResponse(\n                        new AsyncCallback(ar =>\n                        {\n                            HttpWebResponse resp = null;\n\n                            try\n                            {\n                                resp = req.EndGetResponse(ar) as HttpWebResponse;\n\n                                using (var stream = resp.GetResponseStream())\n                                using (MemoryStream memory = new MemoryStream())\n                                using (GZipStream gzip = new GZipStream(memory, CompressionMode.Decompress))\n                                {\n                                    byte[] compressedBuffer = new byte[8192];\n                                    byte[] uncompressedBuffer = new byte[8192];\n                                    List<byte> output = new List<byte>();\n\n                                    try\n                                    {\n                                        lock (streamingCallbackLock)\n                                        {\n                                            while (stream.CanRead && !CloseStream)\n                                            {\n                                                int readCount = stream.Read(compressedBuffer, 0, compressedBuffer.Length);\n\n                                                // When Twitter breaks the connection, we need to exit the\n                                                // entire loop and start over. Otherwise, the reads\n                                                // keep returning blank lines that are incorrectly interpreted\n                                                // as keep-alive messages in a tight loop.\n                                                if (readCount == 0)\n                                                {\n                                                    if (!CloseStream)\n                                                    {\n                                                        CloseStream = true;\n                                                        throw new WebException(\"Twitter closed the stream.\", WebExceptionStatus.ConnectFailure);\n                                                    }\n\n                                                    return;\n                                                }\n                     \n                                                memory.Write(compressedBuffer.Take(readCount).ToArray(), 0, readCount);\n                                                memory.Position = 0;\n\n                                                int uncompressedLength = 0;\n\n                                                if (resp.Headers[\"content-encoding\"] != null &&\n                                                    resp.Headers[\"content-encoding\"].Contains(\"gzip\"))\n                                                {\n                                                    uncompressedLength = gzip.Read(uncompressedBuffer, 0, readCount);\n                                                }\n                                                else\n                                                {\n                                                    compressedBuffer.CopyTo(uncompressedBuffer, 0);\n                                                    uncompressedLength = readCount;\n                                                }\n\n                                                output.AddRange(uncompressedBuffer.Take(uncompressedLength));\n\n                                                if (!output.Contains(0x0D)) continue;\n\n                                                byte[] bytesToDecode = output.Take(output.LastIndexOf(0x0D) + 2).ToArray();\n                                                string outputString = Encoding.UTF8.GetString(bytesToDecode, 0, bytesToDecode.Length);\n                                                output.RemoveRange(0, bytesToDecode.Length);\n\n                                                string[] lines = outputString.Split(new[] { \"\\r\\n\" }, new StringSplitOptions());\n                                                for (int i = 0; i < (lines.Length - 1); i++)\n                                                {\n                                                    DoAsyncCallback(lines[i]);\n                                                }\n\n                                                compressedBuffer = new byte[8192];\n                                                uncompressedBuffer = new byte[8192];\n                                                output = new List<byte>();\n                                                memory.SetLength(0);\n                                            }\n                                        }\n                                    }\n                                    finally\n                                    {\n                                        if (req != null) req.Abort();\n                                    }\n                                }\n                            }\n                            catch (Exception ex)\n                            {\n                                WriteLog(ex.ToString(), \"ExecuteTwitterStream\");\n                                DoAsyncCallback(ex);\n                            }\n                            finally\n                            {\n                                if (req != null) req.Abort();\n                                if (resetEvent != null) resetEvent.Set();\n                            }\n                        }), null);\n\n                    resetEvent.WaitOne();\n                    resetEvent.Reset();\n                }\n                catch (Exception ex)\n                {\n                    WriteLog(ex.ToString(), \"ExecuteTwitterStream\");\n                    DoAsyncCallback(ex);\n                }\n                finally\n                {\n                    // user might want to try to reconnect with\n                    // the same instance of TwitterContext\n                    CloseStream = false;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Handles request initialization for sample, filter, and other basic streams\n        /// </summary>\n        /// <param name=\"request\">Stream endpoint and parameters</param>\n        /// <returns>Initialized Request</returns>\n        HttpWebRequest GetHttpRequest(Request request)\n        {\n            HttpWebRequest req = null;\n            byte[] bytes = new byte[0];\n            LastUrl = request.FullUrl;\n            bool shouldPostQuery = \n                LastUrl.Contains(\"filter.json\") ||\n                (LastUrl.Contains(\"/site/c/\") && LastUrl.Contains(\"friends/ids.json\"));\n\n            if (shouldPostQuery)\n            {\n                var postData =\n                    (from data in request.RequestParameters\n                     select new\n                     {\n                         data.Name,\n                         data.Value\n                     })\n                    .ToDictionary(key => key.Name, val => val.Value);\n\n                req = this.AuthorizedClient.PostRequest(request, null);\n                int qIndex = LastUrl.IndexOf('?');\n\n                string urlParams = LastUrl.Substring(qIndex + 1);\n                bytes = Encoding.UTF8.GetBytes(urlParams);\n\n                req.Method = \"POST\";\n                req.ContentType = \"application/x-www-form-urlencoded\";\n\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.ContentLength = bytes.Length;\n#endif\n\n#if !SILVERLIGHT && !NETFX_CORE\n                if (Timeout > 0)\n                    req.Timeout = Timeout;\n\n                if (ReadWriteTimeout > 0)\n                    req.ReadWriteTimeout = ReadWriteTimeout;\n\n                req.AutomaticDecompression = DecompressionMethods.None;\n#endif\n#if WINDOWS_PHONE\n                req.AllowReadStreamBuffering = false;\n#endif\n                using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n                {\n                    Exception asyncException = null;\n\n                    req.BeginGetRequestStream(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    using (var requestStream = req.EndGetRequestStream(ar))\n                                    {\n                                        requestStream.Write(bytes, 0, bytes.Length);\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                    WriteLog(ex.ToString(), \"GetBasicStreamRequest\");\n                                    throw;\n                                }\n\n                                resetEvent.Set();\n\n                            }), null);\n\n                    resetEvent.WaitOne();\n\n                    if (asyncException != null)\n                        throw asyncException;\n                }\n            }\n            else\n            {\n                req = this.AuthorizedClient.Get(request) as HttpWebRequest;\n            }\n\n#if !SILVERLIGHT && !NETFX_CORE\n            req.UserAgent = UserAgent;\n#endif\n\n            return req;\n        }\n\n        /// <summary>\n        /// Handles request initialization for user and site streams\n        /// </summary>\n        /// <param name=\"request\">Stream endpoint and parameters</param>\n        /// <returns>Initialized Request</returns>\n        HttpWebRequest GetUserStreamRequest(Request request)\n        {\n            this.LastUrl = request.FullUrl;\n            var req = this.AuthorizedClient.Get(request) as HttpWebRequest;\n#if !SILVERLIGHT && !NETFX_CORE\n            req.UserAgent = UserAgent;\n            req.AutomaticDecompression = DecompressionMethods.None;\n#endif\n#if WINDOWS_PHONE\n            req.AllowReadStreamBuffering = false;\n#endif\n\n            return req;\n        }\n\n        void DoAsyncCallback(object state)\n        {\n#if NETFX_CORE\n            Task.Run(() => InvokeStreamCallback(state));\n#else\n            ThreadPool.QueueUserWorkItem(InvokeStreamCallback, state);\n#endif\n        }\n\n        /// <summary>\n        /// Executes callback handler\n        /// </summary>\n        /// <remarks>\n        /// If the user's callback code fails to handle an exception\n        /// this code will log and re-throw.  The user should consider\n        /// ensuring the code they write doesn't do anything\n        /// that will get them rate-limited or black-listed on Twitter.\n        /// </remarks>\n        /// <param name=\"content\">Content from Twitter</param>\n        void InvokeStreamCallback(object content)\n        {\n            try\n            {\n                StreamContent strmContent = null;\n\n                if (content is string)\n                {\n                    strmContent = new StreamContent(this, content as string); \n                }\n                else\n                {\n                    const string Message =\n                        \"An error has occurred during processing. \" +\n                        \"This is sometimes an unknown error. \" +\n                        \"It can also happen when Twitter closes the stream. \" +\n                        \"Whatever the cause, your stream has been closed. \" +\n                        \"You can find more information about this exception in the 'Error' property.\";\n\n                    strmContent = new StreamContent(this, Message);\n                    strmContent.Status = TwitterErrorStatus.RequestProcessingException;\n                    strmContent.Error = content as Exception;\n                }\n\n                StreamingCallback(strmContent);\n            }\n            catch (Exception ex)\n            {\n                WriteLog(\"Unhandled exception in your StreamingCallback code.  \" + ex, \"InvokeCallback\");\n                throw;\n            }\n        }\n\n#if !NETFX_CORE\n        /// <summary>\n        /// performs HTTP POST file upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">query string parameters</param>\n        /// <param name=\"filePath\">full path of file to upload</param>\n        /// <param name=\"reqProc\">Processes results of async requests</param>\n        /// <returns>XML Respose from Twitter</returns>\n        public string PostTwitterFile<T>(string url, IDictionary<string, string> postData, string filePath, IRequestProcessor<T> reqProc)\n        {\n            var fileName = Path.GetFileName(filePath);\n\n            string imageType;\n\n            switch (Path.GetExtension(fileName).ToLower())\n            {\n                case \".jpg\":\n                case \".jpeg\":\n                    imageType = \"jpg\";\n                    break;\n                case \".gif\":\n                    imageType = \"gif\";\n                    break;\n                case \".png\":\n                    imageType = \"png\";\n                    break;\n                default:\n                    throw new ArgumentException(\n                        \"Can't recognize the extension of the file you're uploading. Please choose either a *.gif, *.jpg, *.jpeg, or *.png file.\", filePath);\n            }\n\n            byte[] fileBytes = Utilities.GetFileBytes(filePath);\n\n            return PostTwitterImage(url, postData, fileBytes, fileName, imageType, reqProc);\n        }\n#endif\n\n        /// <summary>\n        /// performs HTTP POST image byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">parameters to pass</param>\n        /// <param name=\"image\">byte array containing image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"reqProc\">Processes results of async requests</param>\n        /// <returns>XML Response from Twitter</returns>\n        public string PostTwitterImage<T>(string url, IDictionary<string, string> postData, byte[] image, string fileName, string imageType, IRequestProcessor<T> reqProc)\n        {\n#if SILVERLIGHT && !NETFX_CORE\n            if (AsyncCallback == null)\n                throw new InvalidOperationException(\"Silverlight and Windows Phone applications require async commands.\");\n#endif\n            string contentBoundaryBase = DateTime.Now.Ticks.ToString(\"x\");\n            string beginContentBoundary = string.Format(\"--{0}\\r\\n\", contentBoundaryBase);\n            var contentDisposition = string.Format(\"Content-Disposition:form-data; name=\\\"image\\\"; filename=\\\"{0}\\\"\\r\\nContent-Type: image/{1}\\r\\n\\r\\n\", fileName, imageType);\n            //var contentDisposition = string.Format(\"Content-Disposition:form-data); name=\\\"image\\\"); filename=\\\"{0}\\\"\\r\\nContent-Type: image/{1}\\r\\n\\r\\n\", fileName, imageType);\n            var endContentBoundary = string.Format(\"\\r\\n--{0}--\\r\\n\", contentBoundaryBase);\n\n            var formDataSb = new StringBuilder();\n\n            if (postData != null && postData.Count > 0)\n            {\n                foreach (var param in postData)\n                {\n                    if (param.Value == \"IMAGE_DATA\")\n                    {\n                        contentDisposition = contentDisposition.Replace(\"name=\\\"image\\\"\", \"name=\\\"\" + param.Key + \"\\\"\");\n                    }\n                    else\n                    {\n                        formDataSb.AppendFormat(\"--{0}\\r\\nContent-Disposition: form-data; name=\\\"{1}\\\"\\r\\n\\r\\n{2}\\r\\n\", contentBoundaryBase, param.Key, param.Value);\n                    }\n                }\n            }\n\n            var encoding = Encoding.GetEncoding(\"iso-8859-1\");\n            string imageByteString = encoding.GetString(image, 0, image.Length);\n\n            byte[] imageBytes =\n                encoding.GetBytes(\n                    formDataSb.ToString() +\n                    beginContentBoundary +\n                    contentDisposition +\n                    imageByteString +\n                    endContentBoundary);\n\n            string response = string.Empty;\n            string httpStatus = string.Empty;\n\n            try\n            {\n                LastUrl = url;\n                //Log\n                WriteLog(LastUrl, \"PostTwitterImage\");\n\n                var req = AuthorizedClient.PostRequest(new Request(url), new Dictionary<string, string>());\n                req.ContentType = \"multipart/form-data;boundary=\" + contentBoundaryBase;\n\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.AllowWriteStreamBuffering = true;\n                req.ContentLength = imageBytes.Length; \n#endif\n\n                Exception asyncException = null;\n                using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n                {\n\n                    req.BeginGetRequestStream(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    using (var reqStream = req.EndGetRequestStream(ar))\n                                    {\n                                        int offset = 0;\n                                        const int BufferSize = 4096;\n                                        int lastPercentage = 0;\n                                        while (offset < imageBytes.Length)\n                                        {\n                                            int bytesToWrite = Math.Min(BufferSize, imageBytes.Length - offset);\n                                            reqStream.Write(imageBytes, offset, bytesToWrite);\n                                            offset += bytesToWrite;\n\n                                            int percentComplete =\n                                                (int)((double)offset / (double)imageBytes.Length * 100);\n\n                                            // since we still need to get the response later\n                                            // in the algorithm, interpolate the results to\n                                            // give user a more accurate picture of completion.\n                                            // i.e. we don't want to shoot up to 100% here when\n                                            // we know there is more processing to do.\n                                            lastPercentage = percentComplete >= 98 ?\n                                                100 - ((98 - lastPercentage) / 2) :\n                                                percentComplete;\n\n                                            OnUploadProgressChanged(lastPercentage);\n                                        }\n\n                                        reqStream.Flush();\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                }\n                                finally\n                                {\n                                    resetEvent.Set();\n                                }\n                            }), null);\n\n                    resetEvent.WaitOne();\n\n                    if (asyncException != null)\n                        throw asyncException;\n\n                    resetEvent.Reset();\n\n                    req.BeginGetResponse(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    lock (this.asyncCallbackLock)\n                                    {\n                                        using (var res = req.EndGetResponse(ar) as HttpWebResponse)\n                                        {\n                                            httpStatus = res.Headers[\"Status\"];\n                                            response = GetTwitterResponse(res);\n\n                                            if (AsyncCallback != null)\n                                            {\n                                                List<T> responseObj = reqProc.ProcessResults(response);\n                                                var asyncResp = new TwitterAsyncResponse<T>();\n                                                asyncResp.State = responseObj.FirstOrDefault();\n                                                (AsyncCallback as Action<TwitterAsyncResponse<T>>)(asyncResp);\n                                                AsyncCallback = null; // set to null because (unlikely, but possible) the next query might not be async\n                                            }\n\n                                            // almost done\n                                            OnUploadProgressChanged(99);\n                                        } \n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                }\n                                finally\n                                {\n#if !WINDOWS_PHONE && !NETFX_CORE\n                                   resetEvent.Set();\n#endif\n                                }\n                            }), null);\n\n#if !WINDOWS_PHONE && !NETFX_CORE\n                    resetEvent.WaitOne();\n#endif\n\n                    if (asyncException != null)\n                        throw asyncException;\n                }\n            }\n            catch (WebException wex)\n            {\n                var twitterQueryEx = CreateTwitterQueryException(wex);\n                throw twitterQueryEx;\n            }\n\n            // make sure the caller knows it's done\n            OnUploadProgressChanged(100);\n\n            CheckResultsForTwitterError(response, httpStatus);\n\n            return response;\n        }\n\n        /// <summary>\n        /// performs HTTP POST media byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">request parameters</param>\n        /// <param name=\"mediaItems\">list of Media each media item to upload</param>\n        /// <param name=\"reqProc\">request processor for handling results</param>\n        /// <returns>XML results From Twitter</returns>\n        public string PostMedia<T>(string url, IDictionary<string, string> postData, List<Media> mediaItems, IRequestProcessor<T> reqProc)\n        {\n#if SILVERLIGHT && !NETFX_CORE\n            if (AsyncCallback == null)\n                throw new InvalidOperationException(\"Silverlight and Windows Phone applications require async commands.\");\n#endif\n            var encoding = Encoding.GetEncoding(\"iso-8859-1\");\n            string contentBoundaryBase = DateTime.Now.Ticks.ToString(\"x\");\n            string beginContentBoundary = string.Format(\"--{0}\\r\\n\", contentBoundaryBase);\n            var endContentBoundary = string.Format(\"\\r\\n--{0}--\\r\\n\", contentBoundaryBase);\n\n            var formDataSb = new StringBuilder();\n\n            if (postData != null && postData.Count > 0)\n            {\n                foreach (var param in postData)\n                {\n                    if (param.Value != null)\n                    {\n                        byte[] paramBytes = Encoding.UTF8.GetBytes(param.Value);\n                        string encodedParamVal = encoding.GetString(paramBytes, 0, paramBytes.Length);\n\n                        formDataSb.AppendFormat(\n                            \"--{0}\\r\\nContent-Disposition: form-data; name=\\\"{1}\\\"\\r\\n\\r\\n{2}\\r\\n\",\n                            contentBoundaryBase, param.Key, encodedParamVal);\n                    }\n                }\n            }\n\n            foreach (var media in mediaItems)\n            {\n                formDataSb.Append(beginContentBoundary);\n                formDataSb.Append(\n                    string.Format(\n                        \"Content-Disposition: form-data; name=\\\"media[]\\\"; \" +\n                        \"filename=\\\"{0}\\\"\\r\\nContent-Type: application/octet-stream\\r\\n\\r\\n\",\n                        media.FileName));\n                formDataSb.Append(encoding.GetString(media.Data, 0, media.Data.Length));\n            }\n\n            formDataSb.Append(endContentBoundary);\n\n            byte[] imageBytes = encoding.GetBytes(formDataSb.ToString());\n\n            string response = string.Empty;\n            string httpStatus = string.Empty;\n\n            try\n            {\n                LastUrl = url;\n\n                //Log\n                WriteLog(LastUrl, \"PostMedia\");\n\n                var dontIncludePostParametersInOAuthSignature = new Dictionary<string, string>();\n                var req = AuthorizedClient.PostRequest(new Request(url), dontIncludePostParametersInOAuthSignature);\n                req.ContentType = \"multipart/form-data;boundary=\" + contentBoundaryBase;\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.AllowWriteStreamBuffering = true;\n                req.ContentLength = imageBytes.Length; \n#endif\n\n                Exception asyncException = null;\n                using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n                {\n                    req.BeginGetRequestStream(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    using (var reqStream = req.EndGetRequestStream(ar))\n                                    {\n                                        int offset = 0;\n                                        const int BufferSize = 4096;\n                                        int lastPercentage = 0;\n                                        while (offset < imageBytes.Length)\n                                        {\n                                            int bytesToWrite = Math.Min(BufferSize, imageBytes.Length - offset);\n                                            reqStream.Write(imageBytes, offset, bytesToWrite);\n                                            offset += bytesToWrite;\n\n                                            int percentComplete =\n                                                (int)((double)offset / (double)imageBytes.Length * 100);\n\n                                            // since we still need to get the response later\n                                            // in the algorithm, interpolate the results to\n                                            // give user a more accurate picture of completion.\n                                            // i.e. we don't want to shoot up to 100% here when\n                                            // we know there is more processing to do.\n                                            lastPercentage = percentComplete >= 98 ?\n                                                100 - ((98 - lastPercentage) / 2) :\n                                                percentComplete;\n\n                                            OnUploadProgressChanged(lastPercentage);\n                                        }\n\n                                        reqStream.Flush();\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                }\n                                finally\n                                {\n                                    resetEvent.Set();\n                                }\n                            }), null);\n\n                    resetEvent.WaitOne();\n\n                    if (asyncException != null)\n                        throw asyncException;\n\n                    resetEvent.Reset();\n\n                    req.BeginGetResponse(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    lock (this.asyncCallbackLock)\n                                    {\n                                        using (var res = req.EndGetResponse(ar) as HttpWebResponse)\n                                        {\n                                            httpStatus = res.Headers[\"Status\"];\n                                            response = GetTwitterResponse(res);\n\n                                            if (AsyncCallback != null)\n                                            {\n                                                T responseObj = (reqProc as IRequestProcessorWithAction<T>).ProcessActionResult(response, StatusAction.SingleStatus);\n                                                var asyncResp = new TwitterAsyncResponse<T>();\n                                                asyncResp.State = responseObj;\n                                                (AsyncCallback as Action<TwitterAsyncResponse<T>>)(asyncResp);\n                                                AsyncCallback = null; // set to null because the next query might not be async\n                                            }\n\n                                            // almost done\n                                            OnUploadProgressChanged(99);\n                                        }\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                }\n                                finally\n                                {\n#if !WINDOWS_PHONE && !NETFX_CORE\n                                    resetEvent.Set();\n#endif\n                                }\n                            }), null);\n\n#if !WINDOWS_PHONE && !NETFX_CORE\n                    resetEvent.WaitOne();\n#endif\n                    if (asyncException != null)\n                        throw asyncException;\n                }\n            }\n            catch (WebException wex)\n            {\n                var twitterQueryEx = CreateTwitterQueryException(wex);\n                throw twitterQueryEx;\n            }\n\n            // make sure the caller knows it's done\n            OnUploadProgressChanged(100);\n\n            CheckResultsForTwitterError(response, httpStatus);\n\n            return response;\n        }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        public string PostToTwitter<T>(string url, IDictionary<string, string> postData, Func<string, T> getResult)\n        {\n#if SILVERLIGHT && !NETFX_CORE\n            if (AsyncCallback == null)\n                throw new InvalidOperationException(\"Silverlight and Windows Phone applications require async commands.\");\n#endif\n            var paramList = new List<string>();\n\n            if (postData != null && postData.Count > 0)\n            {\n                foreach (var param in postData)\n                {\n                    if (param.Value != null)\n                    {\n                        string urlEncodedValue = BuildUrlHelper.UrlEncode(param.Value);\n                        byte[] valueBytes = Encoding.UTF8.GetBytes(urlEncodedValue);\n                        string encodedParamVal = Encoding.UTF8.GetString(valueBytes, 0, valueBytes.Length);\n\n                        paramList.Add(param.Key + \"=\" + encodedParamVal);\n                    }\n                }\n            }\n\n            string postDataString = string.Join(\"&\", paramList.ToArray());\n            byte[] paramBytes = Encoding.UTF8.GetBytes(postDataString);\n\n            string response = string.Empty;\n            string httpStatus = string.Empty;\n\n            try\n            {\n                LastUrl = url;\n\n                //Log\n                WriteLog(LastUrl, \"PostToTwitter\");\n\n                var dontIncludePostParametersInOAuthSignature = new Dictionary<string, string>();\n                var request = new Request(url);\n                foreach (var key in postData.Keys)\n                {\n                    if (postData[key] != null)\n                        request.RequestParameters.Add(new QueryParameter(key, postData[key]));\n                }\n                var req = AuthorizedClient.PostRequest(request, dontIncludePostParametersInOAuthSignature);\n\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.AllowWriteStreamBuffering = true;\n                req.ContentLength = paramBytes.Length;\n#endif\n\n                Exception asyncException = null;\n                using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n                {\n                    req.BeginGetRequestStream(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    using (var reqStream = req.EndGetRequestStream(ar))\n                                    {\n                                        int offset = 0;\n                                        const int BufferSize = 4096;\n                                        int lastPercentage = 0;\n                                        while (offset < paramBytes.Length)\n                                        {\n                                            int bytesToWrite = Math.Min(BufferSize, paramBytes.Length - offset);\n                                            reqStream.Write(paramBytes, offset, bytesToWrite);\n                                            offset += bytesToWrite;\n\n                                            int percentComplete =\n                                                (int)((double)offset / (double)paramBytes.Length * 100);\n\n                                            // since we still need to get the response later\n                                            // in the algorithm, interpolate the results to\n                                            // give user a more accurate picture of completion.\n                                            // i.e. we don't want to shoot up to 100% here when\n                                            // we know there is more processing to do.\n                                            lastPercentage = percentComplete >= 98 ?\n                                                100 - ((98 - lastPercentage) / 2) :\n                                                percentComplete;\n\n                                            OnUploadProgressChanged(lastPercentage);\n                                        }\n\n                                        reqStream.Flush();\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                }\n                                finally\n                                {\n                                    resetEvent.Set();\n                                }\n                            }), null);\n\n                    resetEvent.WaitOne();\n\n                    if (asyncException != null)\n                        throw asyncException;\n\n                    resetEvent.Reset();\n\n                    req.BeginGetResponse(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    lock (this.asyncCallbackLock)\n                                    {\n                                        using (var res = req.EndGetResponse(ar) as HttpWebResponse)\n                                        {\n                                            httpStatus = res.StatusCode.ToString();\n                                            response = GetTwitterResponse(res);\n\n                                            if (AsyncCallback != null)\n                                            {\n                                                var asyncResp = new TwitterAsyncResponse<T>();\n                                                asyncResp.State = getResult(response);\n                                                (AsyncCallback as Action<TwitterAsyncResponse<T>>)(asyncResp);\n                                                AsyncCallback = null; // set to null because the next query might not be async\n                                            }\n\n                                            // almost done\n                                            OnUploadProgressChanged(99);\n                                        }\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    if (AsyncCallback == null)\n                                    {\n                                        asyncException = ex; \n                                    }\n                                    else\n                                    {\n                                        var asyncResp = new TwitterAsyncResponse<T>();\n                                        asyncResp.Status = TwitterErrorStatus.RequestProcessingException;\n                                        asyncResp.Message = \"Processing failed. See Error property for more details.\";\n                                        if (ex is WebException)\n                                        {\n                                            var twitterQueryEx = CreateTwitterQueryException(ex as WebException);\n                                            asyncResp.Exception = twitterQueryEx;\n                                        }\n                                        else\n                                        {\n                                            asyncResp.Exception = ex; \n                                        }\n                                        (AsyncCallback as Action<TwitterAsyncResponse<T>>)(asyncResp); \n                                    }\n\n                                    WriteLog(\"PostToTwitter\", \"Error querying Twitter: \" + ex.ToString());\n                                }\n                                finally\n                                {\n#if !SILVERLIGHT && !NETFX_CORE\n                                    resetEvent.Set();\n#endif\n                                }\n                            }), null);\n\n#if !SILVERLIGHT && !NETFX_CORE\n                    resetEvent.WaitOne();\n#endif\n                    if (asyncException != null)\n                        throw asyncException;\n                }\n            }\n            catch (WebException wex)\n            {\n                var twitterQueryEx = CreateTwitterQueryException(wex);\n                throw twitterQueryEx;\n            }\n\n            // make sure the caller knows it's done\n            OnUploadProgressChanged(100);\n\n            CheckResultsForTwitterError(response, httpStatus);\n\n            return response;\n        }\n\n        void WriteLog(string content, string currentMethod)\n        {\n            if (Log != null)\n            {\n                Log.WriteLine(\"--Log Starts Here--\");\n                Log.WriteLine(\"Query:\" + content);\n                Log.WriteLine(\"Method:\" + currentMethod);\n                Log.WriteLine(\"--Log Ends Here--\");\n                Log.Flush();\n            }\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                var disposableClient = this.AuthorizedClient as IDisposable;\n                if (disposableClient != null)\n                {\n                    disposableClient.Dispose();\n                }\n\n                if (Log != null)\n                {\n                    Log.Dispose();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitter/TwitterExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class TwitterExtensions\n    {\n        /// <summary>\n        /// Callback is invoked by LINQ to Twitter streaming support,\n        /// allowing you to process each individual response from Twitter.\n        /// \n        /// If your callback code fails to handle an exception,\n        /// LINQ to Twitter will log and re-throw. Remember to ensure\n        /// your code conforms with Twitter stream usage guidelines.\n        /// LINQ to Twitter has a conformant backoff/retry strategy, but\n        /// even that won't help if your code throws exceptions and\n        /// tries to re-connect in a way that violates Twitter policy.\n        /// Please review Twitter's Access and Rate Limiting policy\n        /// for more information:\n        /// \n        /// http://dev.twitter.com/pages/streaming_api_concepts#access-rate-limiting\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static IQueryable<Streaming> StreamingCallback(this IQueryable<Streaming> streaming, Action<StreamContent> callback)\n        {\n            (streaming.Provider as TwitterQueryProvider)\n                .Context\n                .TwitterExecutor\n                .StreamingCallback = callback;\n\n            return streaming;\n        }\n\n        /// <summary>\n        /// Callback is invoked by LINQ to Twitter streaming support,\n        /// allowing you to process each individual response from Twitter.\n        /// \n        /// If your callback code fails to handle an exception\n        /// LINQ to Twitter will log and re-throw. Remember to ensure\n        /// your code conforms with Twitter stream usage guidelines.\n        /// LINQ to Twitter has a conformant backoff/retry strategy, but\n        /// even that won't help if your code throws exceptions and\n        /// tries to re-connect in a way that violates Twitter policy.\n        /// Please review Twitter's Access and Rate Limiting policy\n        /// for more information:\n        /// \n        /// http://dev.twitter.com/pages/streaming_api_concepts#access-rate-limiting\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static IQueryable<UserStream> StreamingCallback(this IQueryable<UserStream> streaming, Action<StreamContent> callback)\n        {\n            (streaming.Provider as TwitterQueryProvider)\n                .Context\n                .TwitterExecutor\n                .StreamingCallback = callback;\n\n            return streaming;\n        }\n\n        public static IQueryable<T> AsyncCallback<T>(this IQueryable<T> queryType, Action<IEnumerable<T>> callback)\n        {\n            (queryType.Provider as TwitterQueryProvider)\n                .Context\n                .TwitterExecutor\n                .AsyncCallback = callback;\n\n            return queryType;\n        }\n\n        public static void MaterializedAsyncCallback<T>(this IQueryable<T> queryType, Action<TwitterAsyncResponse<IEnumerable<T>>> callback)\n        {\n            (queryType.Provider as TwitterQueryProvider)\n                .Context\n                .TwitterExecutor\n                .AsyncCallback = callback;\n\n            queryType.ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitter/TwitterQueryProvider.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo 8/26/08\n * \n * - Added Context property\n * - Changed Execute to delegate to TwitterContext through Context property\n * *********************************************************/\n\nusing System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// implementation of IQueryProvider, part of the LINQ Provider API\n    /// </summary>\n    public class TwitterQueryProvider : IQueryProvider\n    {\n        /// <summary>\n        /// refers to TwitterContext that calling code instantiated\n        /// </summary>\n        public TwitterContext Context { get; set; }\n\n        /// <summary>\n        /// Non-generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable CreateQuery(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n            try\n            {\n                return (IQueryable)Activator.CreateInstance(\n                    typeof(TwitterQueryable<>)\n                        .MakeGenericType(elementType), \n                    new object[] { this, expression });\n            }\n            catch (TargetInvocationException tie)\n            {\n                throw tie.InnerException;\n            }\n        }\n\n        /// <summary>\n        /// generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <typeparam name=\"TResult\">current object type being worked with</typeparam>\n        /// <param name=\"expression\">expression tree for query</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable<TResult> CreateQuery<TResult>(Expression expression)\n        {\n            return new TwitterQueryable<TResult>(this, expression);\n        }\n\n        /// <summary>\n        /// non-generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <param name=\"expression\">Expression Tree</param>\n        /// <returns>list of results from query</returns>\n        public object Execute(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n\n#if NETFX_CORE\n            return GetType().GetTypeInfo()\n                .DeclaredMethods.Where(meth => meth.IsGenericMethod && meth.Name == \"Execute\").First()\n                .Invoke(this, new object[] { expression });\n#else\n            return GetType()\n                .GetMethod(\"Execute\", new[] { elementType })\n                .Invoke(this, new object[] { expression });\n#endif\n        }\n\n        /// <summary>\n        /// generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <typeparam name=\"TResult\">type of query</typeparam>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>list of results from query</returns>\n        public TResult Execute<TResult>(Expression expression)\n        {\n            bool isEnumerable = \n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n#if NETFX_CORE\n            var methodInfo = Context.GetType().GetTypeInfo().GetDeclaredMethod(\"Execute\");\n#else\n            var methodInfo = Context.GetType().GetMethod(\"Execute\", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);\n#endif\n            MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var result = (TResult)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable });\n                return result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitter/TwitterQueryable.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 8/26/08\n * \n * Added constructor to pass TwitterContext to Provider\n * *********************************************************/\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n#if NETFX_CORE\nusing System.Reflection;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// IQueryable of T part of LINQ to Twitter\n    /// </summary>\n    /// <typeparam name=\"T\">Type to operate on</typeparam>\n    public class TwitterQueryable<T> : IOrderedQueryable<T>\n    {\n        /// <summary>\n        /// init with TwitterContext\n        /// </summary>\n        /// <param name=\"context\"></param>\n        public TwitterQueryable(TwitterContext context)\n        {\n            Provider = new TwitterQueryProvider();\n            Expression = Expression.Constant(this);\n\n            // lets provider reach back to TwitterContext, \n            // where execute implementation resides\n            ((TwitterQueryProvider) Provider).Context = context;\n        }\n\n        /// <summary>\n        /// modified as internal because LINQ to Twitter is Unusable \n        /// without TwitterContext, but provider still needs access\n        /// </summary>\n        /// <param name=\"provider\">IQueryProvider</param>\n        /// <param name=\"expression\">Expression Tree</param>\n        internal TwitterQueryable(\n            TwitterQueryProvider provider,\n            Expression expression)\n        {\n            if (provider == null)\n            {\n                throw new ArgumentNullException(\"provider\");\n            }\n\n            if (expression == null)\n            {\n                throw new ArgumentNullException(\"expression\");\n            }\n\n#if NETFX_CORE\n            if (!typeof(IQueryable<T>).GetTypeInfo().IsAssignableFrom(expression.Type.GetTypeInfo()))\n            {\n                throw new ArgumentOutOfRangeException(\"expression\");\n            }\n#else\n            if (!typeof(IQueryable<T>).IsAssignableFrom(expression.Type))\n            {\n                throw new ArgumentOutOfRangeException(\"expression\");\n            }\n#endif\n\n            Provider = provider;\n            Expression = expression;\n        }\n\n        /// <summary>\n        /// IQueryProvider part of LINQ to Twitter\n        /// </summary>\n        public IQueryProvider Provider { get; private set; }\n        \n        /// <summary>\n        /// expression tree\n        /// </summary>\n        public Expression Expression { get; private set; }\n\n        /// <summary>\n        /// type of T in IQueryable of T\n        /// </summary>\n        public Type ElementType\n        {\n            get { return typeof(T); }\n        }\n\n        /// <summary>\n        /// executes when iterating over collection\n        /// </summary>\n        /// <returns>query results</returns>\n        public IEnumerator<T> GetEnumerator()\n        {\n            var enumerator = (Provider.Execute<IEnumerable<T>>(Expression)).GetEnumerator();\n            return enumerator;\n        }\n\n        /// <summary>\n        /// non-generic execution when collection is iterated over\n        /// </summary>\n        /// <returns>query results</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return (Provider.Execute<IEnumerable>(Expression)).GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/LinqToTwitterAg.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.50727</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}</ProjectGuid>\n    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitterAg</AssemblyName>\n    <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>\n    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>\n    <SilverlightApplication>false</SilverlightApplication>\n    <ValidateXaml>true</ValidateXaml>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <TargetFrameworkProfile />\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <OldToolsVersion>4.0</OldToolsVersion>\n  </PropertyGroup>\n  <!-- This property group is only here to support building this project using the \n       MSBuild 3.5 toolset. In order to work correctly with this older toolset, it needs \n       to set the TargetFrameworkVersion to v3.5 -->\n  <PropertyGroup Condition=\"'$(MSBuildToolsVersion)' == '3.5'\">\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>TRACE;DEBUG;SILVERLIGHT</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\" />\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Runtime.Serialization.Json, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\Program Files (x86)\\Microsoft SDKs\\Silverlight\\v4.0\\Libraries\\Client\\System.Runtime.Serialization.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Windows\" />\n    <Reference Include=\"system\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Net\" />\n    <Reference Include=\"System.Windows.Browser\" />\n    <Reference Include=\"System.Xml.Linq, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\..\\Program Files (x86)\\Microsoft SDKs\\Silverlight\\v4.0\\Libraries\\Client\\System.Xml.Linq.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Account\\Account.cs\" />\n    <Compile Include=\"Account\\AccountAction.cs\" />\n    <Compile Include=\"Account\\AccountExtensions.cs\" />\n    <Compile Include=\"Account\\AccountRequestProcessor.cs\" />\n    <Compile Include=\"Account\\AccountType.cs\" />\n    <Compile Include=\"Account\\DeviceType.cs\" />\n    <Compile Include=\"Account\\RateLimitStatus.cs\" />\n    <Compile Include=\"Account\\Settings.cs\" />\n    <Compile Include=\"Account\\SleepTime.cs\" />\n    <Compile Include=\"Account\\Totals.cs\" />\n    <Compile Include=\"Account\\TZInfo.cs\" />\n    <Compile Include=\"Blocks\\BlockingType.cs\" />\n    <Compile Include=\"Blocks\\Blocks.cs\" />\n    <Compile Include=\"Blocks\\BlocksExtensions.cs\" />\n    <Compile Include=\"Blocks\\BlocksRequestProcessor.cs\" />\n    <Compile Include=\"Common\\BannerSize.cs\" />\n    <Compile Include=\"Common\\BuildUrlHelper.cs\" />\n    <Compile Include=\"Common\\Culture.cs\" />\n    <Compile Include=\"Common\\Cursors.cs\" />\n    <Compile Include=\"Common\\Entities\\SymbolEntity.cs\" />\n    <Compile Include=\"Common\\Evaluator.cs\" />\n    <Compile Include=\"Common\\ExpressionTreeHelpers.cs\" />\n    <Compile Include=\"Common\\ExpressionTreeModifier.cs\" />\n    <Compile Include=\"Common\\ExpressionTreeVisitor.cs\" />\n    <Compile Include=\"Common\\WhereClauseFinder.cs\" />\n    <Compile Include=\"Common\\HttpMethod.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\CRC32.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\Deflate.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\DeflateStream.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\GZipStream.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\Inflate.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\InfTree.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\Iso8859Dash1Encoding.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\ParallelDeflateOutputStream.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\Tree.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\Zlib.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\ZlibBaseStream.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\ZlibCodec.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\ZlibConstants.cs\" />\n    <Compile Include=\"Common\\Iconic.ZLib\\ZlibStream.cs\" />\n    <Compile Include=\"Common\\IDList.cs\" />\n    <Compile Include=\"Common\\InvalidQueryException.cs\" />\n    <Compile Include=\"Common\\IRequestProcessor.cs\" />\n    <Compile Include=\"Common\\LinqExtensions.cs\" />\n    <Compile Include=\"Common\\Media.cs\" />\n    <Compile Include=\"Common\\MediaType.cs\" />\n    <Compile Include=\"Common\\MethodCallExpressionTypeFinder.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\Encoder.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\SafeList.cs\" />\n    <Compile Include=\"Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs\" />\n    <Compile Include=\"Common\\ParameterFinder.cs\" />\n    <Compile Include=\"Common\\QueryParameter.cs\" />\n    <Compile Include=\"Common\\ReaderWriterLock.cs\" />\n    <Compile Include=\"Common\\Request.cs\" />\n    <Compile Include=\"Common\\RequestProcessorHelper.cs\" />\n    <Compile Include=\"Common\\State.cs\" />\n    <Compile Include=\"Common\\TargetFramework.cs\" />\n    <Compile Include=\"Common\\TwitterAsyncResponse.cs\" />\n    <Compile Include=\"Common\\TwitterErrorStatus.cs\" />\n    <Compile Include=\"Common\\TwitterHashResponse.cs\" />\n    <Compile Include=\"Common\\TwitterProgressEventArgs.cs\" />\n    <Compile Include=\"Common\\TwitterQueryException.cs\" />\n    <Compile Include=\"Common\\TypeConversionExtensions.cs\" />\n    <Compile Include=\"Common\\TypeSystem.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessage.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessageExtensions.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessageRequestProcessor.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessageType.cs\" />\n    <Compile Include=\"Favorites\\Favorites.cs\" />\n    <Compile Include=\"Favorites\\FavoritesAction.cs\" />\n    <Compile Include=\"Favorites\\FavoritesExtensions.cs\" />\n    <Compile Include=\"Favorites\\FavoritesRequestProcessor.cs\" />\n    <Compile Include=\"Favorites\\FavoritesType.cs\" />\n    <Compile Include=\"Friendship\\Friendship.cs\" />\n    <Compile Include=\"Friendship\\FriendshipAction.cs\" />\n    <Compile Include=\"Friendship\\FriendshipExtensions.cs\" />\n    <Compile Include=\"Friendship\\FriendshipRequestProcessor.cs\" />\n    <Compile Include=\"Friendship\\FriendshipType.cs\" />\n    <Compile Include=\"Friendship\\Relationship.cs\" />\n    <Compile Include=\"Geo\\Coordinate.cs\" />\n    <Compile Include=\"Geo\\Geo.cs\" />\n    <Compile Include=\"Geo\\GeoAction.cs\" />\n    <Compile Include=\"Geo\\Geometry.cs\" />\n    <Compile Include=\"Geo\\GeoRequestProcessor.cs\" />\n    <Compile Include=\"Geo\\GeoType.cs\" />\n    <Compile Include=\"Geo\\Place.cs\" />\n    <Compile Include=\"Help\\Configuration.cs\" />\n    <Compile Include=\"Help\\Help.cs\" />\n    <Compile Include=\"Help\\HelpRequestProcessor.cs\" />\n    <Compile Include=\"Help\\HelpType.cs\" />\n    <Compile Include=\"Help\\Language.cs\" />\n    <Compile Include=\"Help\\PhotoSize.cs\" />\n    <Compile Include=\"Help\\RateLimits.cs\" />\n    <Compile Include=\"LinqToTwitter\\ITwitterExecute.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterContext.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterExecute.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterExtensions.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterQueryable.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterQueryProvider.cs\" />\n    <Compile Include=\"List\\List.cs\" />\n    <Compile Include=\"List\\ListAction.cs\" />\n    <Compile Include=\"List\\ListExtensions.cs\" />\n    <Compile Include=\"List\\ListRequestProcessor.cs\" />\n    <Compile Include=\"List\\ListType.cs\" />\n    <Compile Include=\"OAuth\\AnonymousAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\ApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\AuthAccessType.cs\" />\n    <Compile Include=\"OAuth\\InMemoryCredentials.cs\" />\n    <Compile Include=\"OAuth\\IOAuthCredentials.cs\" />\n    <Compile Include=\"OAuth\\IOAuthHelper.cs\" />\n    <Compile Include=\"OAuth\\IOAuthTwitter.cs\" />\n    <Compile Include=\"OAuth\\IsolatedStorageCredentials.cs\" />\n    <Compile Include=\"OAuth\\ZIsolatedStorageCredentialsTest.cs\" />\n    <Compile Include=\"OAuth\\ITwitterAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\OAuthAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\OAuthBase.cs\" />\n    <Compile Include=\"OAuth\\OAuthSignatureTypes.cs\" />\n    <Compile Include=\"OAuth\\OAuthTwitter.cs\" />\n    <Compile Include=\"OAuth\\PinAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\SignInAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\SilverlightAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\SingleUserAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\SingleUserInMemoryCredentials.cs\" />\n    <Compile Include=\"OAuth\\WebAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\Utilities.cs\" />\n    <Compile Include=\"OAuth\\XAuthAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\XAuthCredentials.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Raw\\Raw.cs\" />\n    <Compile Include=\"Raw\\RawExtensions.cs\" />\n    <Compile Include=\"Raw\\RawRequestProcessor.cs\" />\n    <Compile Include=\"RelatedResults\\RelatedResults.cs\" />\n    <Compile Include=\"RelatedResults\\RelatedResultsRequestProcessor.cs\" />\n    <Compile Include=\"RelatedResults\\RelatedResultsType.cs\" />\n    <Compile Include=\"ReportSpam\\ReportSpamExtensions.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearch.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchAction.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchExtensions.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchRequestProcessor.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchType.cs\" />\n    <Compile Include=\"Search\\Attitude.cs\" />\n    <Compile Include=\"Search\\ResultType.cs\" />\n    <Compile Include=\"Search\\Search.cs\" />\n    <Compile Include=\"Search\\SearchEntry.cs\" />\n    <Compile Include=\"Search\\SearchMetaData.cs\" />\n    <Compile Include=\"Search\\SearchRequestProcessor.cs\" />\n    <Compile Include=\"Search\\SearchType.cs\" />\n    <Compile Include=\"Serialization\\Extensions\\DictionaryExtensions.cs\" />\n    <Compile Include=\"Serialization\\Extensions\\LitJsonExtensions.cs\" />\n    <Compile Include=\"Serialization\\Extensions\\StringExtensions.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\IJsonWrapper.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\IOrderedDictionary.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonData.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonException.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonMapper.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonReader.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonWriter.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\Lexer.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\ParserToken.cs\" />\n    <Compile Include=\"SocialGraph\\SocialGraph.cs\" />\n    <Compile Include=\"SocialGraph\\SocialGraphRequestProcessor.cs\" />\n    <Compile Include=\"SocialGraph\\SocialGraphType.cs\" />\n    <Compile Include=\"Status\\Annotation.cs\" />\n    <Compile Include=\"Status\\Contributor.cs\" />\n    <Compile Include=\"Common\\Entities\\Entities.cs\" />\n    <Compile Include=\"Common\\Entities\\HashTagEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\MediaEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\EntityBase.cs\" />\n    <Compile Include=\"Common\\Entities\\UrlEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\UserMentionEntity.cs\" />\n    <Compile Include=\"Status\\EmbeddedStatus.cs\" />\n    <Compile Include=\"Status\\EmbeddedStatusAlignment.cs\" />\n    <Compile Include=\"Status\\FilterLevel.cs\" />\n    <Compile Include=\"Status\\Retweet.cs\" />\n    <Compile Include=\"Status\\Status.cs\" />\n    <Compile Include=\"Status\\StatusAction.cs\" />\n    <Compile Include=\"Status\\StatusExtensions.cs\" />\n    <Compile Include=\"Status\\StatusMetaData.cs\" />\n    <Compile Include=\"Status\\StatusRequestProcessor.cs\" />\n    <Compile Include=\"Status\\StatusType.cs\" />\n    <Compile Include=\"Streaming\\ControlStream.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamExtensions.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamFollow.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamInfo.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamRequestProcessor.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamType.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamUser.cs\" />\n    <Compile Include=\"Streaming\\IStreamContent.cs\" />\n    <Compile Include=\"Streaming\\StreamContent.cs\" />\n    <Compile Include=\"Streaming\\Streaming.cs\" />\n    <Compile Include=\"Streaming\\StreamingRequestProcessor.cs\" />\n    <Compile Include=\"Streaming\\StreamingType.cs\" />\n    <Compile Include=\"Streaming\\UserStream.cs\" />\n    <Compile Include=\"Streaming\\UserStreamRequestProcessor.cs\" />\n    <Compile Include=\"Streaming\\UserStreamType.cs\" />\n    <Compile Include=\"Trend\\Location.cs\" />\n    <Compile Include=\"Trend\\Trend.cs\" />\n    <Compile Include=\"Trend\\TrendRequestProcessor.cs\" />\n    <Compile Include=\"Trend\\TrendType.cs\" />\n    <Compile Include=\"User\\Category.cs\" />\n    <Compile Include=\"User\\ProfileImageSize.cs\" />\n    <Compile Include=\"User\\User.cs\" />\n    <Compile Include=\"User\\UserAction.cs\" />\n    <Compile Include=\"User\\UserIdentifier.cs\" />\n    <Compile Include=\"User\\UserRequestProcessor.cs\" />\n    <Compile Include=\"User\\UserType.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Bin\\Debug\\\" />\n    <Folder Include=\"Bin\\Release\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"LinqToTwitter.snk\" />\n    <None Include=\"Serialization\\LitJson\\AUTHORS\" />\n    <None Include=\"Serialization\\LitJson\\COPYING\" />\n    <None Include=\"Serialization\\LitJson\\HACKING\" />\n    <None Include=\"Serialization\\LitJson\\README\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Common\\Iconic.ZLib\\LICENSE.jzlib.txt\" />\n    <Content Include=\"Common\\Iconic.ZLib\\License.zlib.txt\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Silverlight\\$(SilverlightVersion)\\Microsoft.Silverlight.CSharp.targets\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{A1591282-1198-4647-A2B1-27E5FF5F6F3B}\">\n        <SilverlightProjectProperties />\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n</Project>"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/List/List.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Information for a single Twitter List\n    /// </summary>\n    public class List\n    {\n        public List() { }\n        public List(JsonData listJson)\n        {\n            Name = listJson.GetValue<string>(\"name\");\n            FullName = listJson.GetValue<string>(\"full_name\");\n            MemberCount = listJson.GetValue<int>(\"member_count\");\n            Description = listJson.GetValue<string>(\"description\");\n            Mode = listJson.GetValue<string>(\"mode\");\n            Uri = listJson.GetValue<string>(\"uri\");\n            Users = new List<User> { new User(listJson.GetValue<JsonData>(\"user\")) };\n            ListIDResult = listJson.GetValue<string>(\"id_str\");\n            SubscriberCount = listJson.GetValue<int>(\"subscriber_count\");\n            CreatedAt = listJson.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            Following = listJson.GetValue<bool>(\"following\");\n            SlugResult = listJson.GetValue<string>(\"slug\");\n        }\n\n        /// <summary>\n        /// Type of List query to perform (Query Filter)\n        /// </summary>\n        public ListType Type { get; set; }\n\n        /// <summary>\n        /// Helps page results (Query Filter)\n        /// </summary>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// User ID (Query Filter)\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// ScreenName of user for query\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// List ID (Query Filter)\n        /// </summary>\n        public string ListID { get; set; }\n\n        /// <summary>\n        /// List ID (Returned from Twitter)\n        /// </summary>\n        public string ListIDResult { get; set; }\n\n        /// <summary>\n        /// Catchword for list (Query Filter)\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Catchword for list (Returned from Twitter)\n        /// </summary>\n        public string SlugResult { get; set; }\n\n        /// <summary>\n        /// ID of List Owner (Query Filter)\n        /// </summary>\n        public string OwnerID { get; set; }\n\n        /// <summary>\n        /// ScreenName of List Owner (Query Filter)\n        /// </summary>\n        public string OwnerScreenName { get; set; }\n\n        /// <summary>\n        /// Max ID to retrieve for statuses (Query Filter)\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Number of statuses per page (Query Filter)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Page number for statuses (Query Filter)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Truncate all user info, except for ID (Query Filter)\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (Query Filter, default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add retweets, in addition to normal tweets (Query Filter)\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Statuses since status ID (Query Filter)\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (Query Filter)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Causes Twitter to return the lists owned by the authenticated user first (Query Filter)\n        /// </summary>\n        public bool Reverse { get; set; }\n\n        /// <summary>\n        /// Short name of List (Returned from Twitter)\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Fully qualified name of list (Returned from Twitter)\n        /// </summary>\n        public string FullName { get; set; }\n\n        /// <summary>\n        /// Description of List's purpose (Returned from Twitter)\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// Number of subscribers (Returned from Twitter)\n        /// </summary>\n        public int SubscriberCount { get; set; }\n\n        /// <summary>\n        /// When the list was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// Is authenticated user following list\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Number of members (Returned from Twitter)\n        /// </summary>\n        public int MemberCount { get; set; }\n\n        /// <summary>\n        /// Uri of List (Returned from Twitter)\n        /// </summary>\n        public string Uri { get; set; }\n\n        /// <summary>\n        /// List mode (Returned from Twitter)\n        /// </summary>\n        public string Mode { get; set; }\n\n        /// <summary>\n        /// Users associated with List (Returned from Twitter)\n        /// </summary>\n        public List<User> Users { get; set; }\n\n        /// <summary>\n        /// Statuses for list (Returned from Twitter)\n        /// </summary>\n        public List<Status> Statuses { get; set; }\n\n        /// <summary>\n        /// Cursors for current request (Returned from Twitter)\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// Only returns lists that belong to authenticated \n        /// user or user identified by ID or ScreenName (Query Filter)\n        /// </summary>\n        public bool FilterToOwnedLists { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/List/ListAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum ListAction\n    {\n        Create,\n\n        Update,\n\n        Delete,\n\n        AddMember,\n\n        AddMemberRange,\n\n        DeleteMember,\n\n        Subscribe,\n\n        Unsubscribe, \n\n        DestroyAll\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/List/ListExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class ListExtensions\n    {\n        public const string ListIDOrSlugParam = \"ListIdOrSlug\";\n        public const string OwnerIDOrOwnerScreenNameParam = \"OwnerIdOrOwnerScreenName\";\n        public const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// Creates a new list\n        /// </summary>\n        /// <param name=\"listName\">name of list</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <returns>List info for new list</returns>\n        public static List CreateList(this TwitterContext ctx, string listName, string mode, string description)\n        {\n            return CreateList(ctx, listName, mode, description, null);\n        }\n\n        /// <summary>\n        /// Creates a new list\n        /// </summary>\n        /// <param name=\"listName\">name of list</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for new list</returns>\n        public static List CreateList(this TwitterContext ctx, string listName, string mode, string description, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listName))\n            {\n                throw new ArgumentException(\"listName is required.\", \"listName\");\n            }\n\n            var createUrl = ctx.BaseUrl + \"lists/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    createUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"name\", listName },\n                        { \"mode\", mode },\n                        { \"description\", description }\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.Create));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.Create);\n            return results;\n        }\n\n        /// <summary>\n        /// Modifies an existing list\n        /// </summary>\n        /// <param name=\"listID\">ID or slug of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <returns>List info for modified list</returns>\n        public static List UpdateList(this TwitterContext ctx, string listID, string slug, string name, string ownerID, string ownerScreenName, string mode, string description)\n        {\n            return UpdateList(ctx, listID, slug, name, ownerID, ownerScreenName, mode, description, null);\n        }\n\n        /// <summary>\n        /// Modifies an existing list\n        /// </summary>\n        /// <param name=\"listID\">ID of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for modified list</returns>\n        public static List UpdateList(this TwitterContext ctx, string listID, string slug, string name, string ownerID, string ownerScreenName, string mode, string description, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var updateListUrl = ctx.BaseUrl + \"lists/update.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    updateListUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                        { \"mode\", mode },\n                        { \"description\", description },\n                        { \"name\", name }\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.Update));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.Update);\n            return results;\n        }\n\n        /// <summary>\n        /// Deletes an existing list\n        /// </summary>\n        /// <param name=\"listID\">ID or slug of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for deleted list</returns>\n        public static List DeleteList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName)\n        {\n            return DeleteList(ctx, listID, slug, ownerID, ownerScreenName, null);\n        }\n\n        /// <summary>\n        /// Deletes an existing list\n        /// </summary>\n        /// <param name=\"listID\">ID or slug of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for deleted list</returns>\n        public static List DeleteList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"listID is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var deleteUrl = ctx.BaseUrl + \"lists/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    deleteUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName }\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.Delete));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.Delete);\n            return results;\n        }\n\n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to.</returns>\n        public static List AddMemberToList(this TwitterContext ctx, string userID, string screenName, string listID, string slug, string ownerID, string ownerScreenName)\n        {\n            return AddMemberToList(ctx, userID, screenName, listID, slug, ownerID, ownerScreenName, null);\n        }\n\n        /// <summary>\n        /// Adds a user as a list member\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list member added to</returns>\n        public static List AddMemberToList(this TwitterContext ctx, string userID, string screenName, string listID, string slug, string ownerID, string ownerScreenName, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(userID) && string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either userID or screenName is required.\", UserIDOrScreenNameParam);\n            }\n\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var addMemberUrl = ctx.BaseUrl + \"lists/members/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    addMemberUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID },\n                        { \"screen_name\", screenName },\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.AddMember));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.AddMember);\n            return results;\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members.</param>\n        /// <returns>List info for list members added to.</returns>\n        public static List AddMemberRangeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, List<string> screenNames)\n        {\n            return AddMemberRangeToList(ctx, listID, slug, ownerID, ownerScreenName, screenNames, null);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members. (max 100)</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list members added to.</returns>\n        public static List AddMemberRangeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, List<string> screenNames, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (screenNames == null || screenNames.Count == 0)\n            {\n                throw new ArgumentException(\"screenNames is required. Check to see if the argument is null or the List<string> is empty.\", \"screenNames\");\n            }\n\n            if (screenNames != null && screenNames.Count > 100)\n            {\n                throw new ArgumentException(\"Max screenNames is 100 at a time.\", \"screenNames\");\n            }\n\n            return AddMemberRangeToList(ctx, listID, slug, ownerID, ownerScreenName, null, screenNames, callback);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        public static List AddMemberRangeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, List<ulong> userIDs)\n        {\n            return AddMemberRangeToList(ctx, listID, slug, ownerID, ownerScreenName, userIDs, null);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list members added to.</returns>\n        public static List AddMemberRangeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, List<ulong> userIDs, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (userIDs == null || userIDs.Count == 0)\n            {\n                throw new ArgumentException(\"userIDs is required. Check to see if the argument is null or the List<ulong> is empty.\", \"userIDs\");\n            }\n\n            if (userIDs != null && userIDs.Count > 100)\n            {\n                throw new ArgumentException(\"Max user IDs is 100 at a time.\", \"userIDs\");\n            }\n\n            return AddMemberRangeToList(ctx, listID, slug, ownerID, ownerScreenName, userIDs, null, callback);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members. (max 100)</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list members added to.</returns>\n        static List AddMemberRangeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, IEnumerable<ulong> userIDs, List<string> screenNames, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var addMemberRangeUrl = ctx.BaseUrl + \"lists/members/create_all.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    addMemberRangeUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                        { \"user_id\", userIDs == null ? null : string.Join(\",\", userIDs.Select(id => id.ToString(CultureInfo.InvariantCulture)).ToArray()) },                        \n                        { \"screen_name\", screenNames == null ? null : string.Join(\",\", screenNames.ToArray()) }\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.AddMember));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.AddMember);\n            return results;\n        }\n\n        /// <summary>\n        /// Removes a user as a list member\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member removed from</returns>\n        public static List DeleteMemberFromList(this TwitterContext ctx, string userID, string screenName, string listID, string slug, string ownerID, string ownerScreenName)\n        {\n            return DeleteMemberFromList(ctx, userID, screenName, listID, slug, ownerID, ownerScreenName, null);\n        }\n\n        /// <summary>\n        /// Removes a user as a list member\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"callback\">Async callback</param>\n        /// <returns>List info for list member removed from</returns>\n        public static List DeleteMemberFromList(this TwitterContext ctx, string userID, string screenName, string listID, string slug, string ownerID, string ownerScreenName, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(userID) && string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either userID or screenName is required.\", UserIDOrScreenNameParam);\n            }\n\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var deleteUrl = ctx.BaseUrl + \"lists/members/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    deleteUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID },\n                        { \"screen_name\", screenName },\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.DeleteMember));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.DeleteMember);\n            return results;\n        }\n\n        /// <summary>\n        /// Adds a user as a list subscriber\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscribed to</returns>\n        public static List SubscribeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName)\n        {\n            return SubscribeToList(ctx, listID, slug, ownerID, ownerScreenName, null);\n        }\n\n        /// <summary>\n        /// Adds a user as a list subscriber\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list subscribed to</returns>\n        public static List SubscribeToList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var subscribeUrl = ctx.BaseUrl + \"lists/subscribers/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    subscribeUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.Subscribe));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.Subscribe);\n            return results;\n        }\n\n        /// <summary>\n        /// Removes a user as a list subscriber\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public static List UnsubscribeFromList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName)\n        {\n            return UnsubscribeFromList(ctx, listID, slug, ownerID, ownerScreenName, null);\n        }\n\n        /// <summary>\n        /// Removes a user as a list subscriber\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public static List UnsubscribeFromList(this TwitterContext ctx, string listID, string slug, string ownerID, string ownerScreenName, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (!string.IsNullOrEmpty(slug) && string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var unsubscribeUrl = ctx.BaseUrl + \"lists/subscribers/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    unsubscribeUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.Unsubscribe));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.Unsubscribe);\n            return results;\n        }\n\n        /// <summary>\n        /// Deletes membership for a comma-separated list of users\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"userIds\">Comma-separated list of user IDs of users to remove from list membership.</param>\n        /// <param name=\"screenNames\">Comma-separated list of screen names of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public static List DestroyAllFromList(this TwitterContext ctx, string listID, string slug, string userIds, string screenNames, string ownerID, string ownerScreenName)\n        {\n            return DestroyAllFromList(ctx, listID, slug, userIds, screenNames, ownerID, ownerScreenName, null);\n        }\n\n        /// <summary>\n        /// Deletes membership for a comma-separated list of users\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"userIds\">Comma-separated list of user IDs of users to remove from list membership.</param>\n        /// <param name=\"screenNames\">Comma-separated list of screen names of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public static List DestroyAllFromList(this TwitterContext ctx, string listID, string slug, string userIds, string screenNames, string ownerID, string ownerScreenName, Action<TwitterAsyncResponse<List>> callback)\n        {\n            if (string.IsNullOrEmpty(listID) && string.IsNullOrEmpty(slug))\n            {\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n            }\n\n            if (string.IsNullOrEmpty(listID) && !string.IsNullOrEmpty(slug) && \n                string.IsNullOrEmpty(ownerID) && string.IsNullOrEmpty(ownerScreenName))\n            {\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n            }\n\n            var destroyAllUrl = ctx.BaseUrl + \"lists/members/destroy_all.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    destroyAllUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID },\n                        { \"slug\", slug },\n                        { \"user_id\", userIds == null ? null : userIds.Replace(\" \", \"\") },\n                        { \"screen_name\", screenNames == null ? null : screenNames.Replace(\" \", \"\") },\n                        { \"owner_id\", ownerID },\n                        { \"owner_screen_name\", ownerScreenName },\n                    },\n                    response => reqProc.ProcessActionResult(response, ListAction.DestroyAll));\n\n            List results = reqProc.ProcessActionResult(resultsJson, ListAction.DestroyAll);\n            return results;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/List/ListRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class ListRequestProcessor<T> : \n        IRequestProcessor<T>, \n        IRequestProcessorWantsJson, \n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string TypeParam = \"Type\";\n        const string ListIdOrSlugParam = \"ListIdOrSlug\";\n        const string OwnerIdOrOwnerScreenName = \"OwnerIdOrOwnerScreenName\";\n        const string UserIdOrScreenName = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of list to query\n        /// </summary>\n        internal ListType Type { get; set; }\n\n        /// <summary>\n        /// Helps page results\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        internal string UserID { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        internal string ListID { get; set; }\n\n        /// <summary>\n        /// Catchword for list\n        /// </summary>\n        internal string Slug { get; set; }\n\n        /// <summary>\n        /// ID of List Owner\n        /// </summary>\n        internal string OwnerID { get; set; }\n\n        /// <summary>\n        /// ScreenName of List Owner\n        /// </summary>\n        internal string OwnerScreenName { get; set; }\n\n        /// <summary>\n        /// Statuses since status ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Max ID to retrieve for statuses\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Number of statuses per page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Page number for statuses\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// ScreenName of user for query\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Truncate all user info, except for ID\n        /// </summary>\n        internal bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add retweets, in addition to normal tweets\n        /// </summary>\n        internal bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Only returns lists that belong to authenticated \n        /// user or user identified by ID or ScreenName\n        /// </summary>\n        internal bool FilterToOwnedLists { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Causes Twitter to return the lists owned by the authenticated user first (Query Filter)\n        /// </summary>\n        internal bool Reverse { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<List>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Cursor\",\n                       \"ListID\",\n                       \"Slug\",\n                       \"OwnerID\",\n                       \"OwnerScreenName\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Page\",\n                       \"SinceID\",\n                       \"TrimUser\",\n                       \"IncludeEntities\",\n                       \"IncludeRetweets\",\n                       \"FilterToOwnedLists\",\n                       \"SkipStatus\",\n                       \"Reverse\"\n                   })\n                   .Parameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n            }\n\n            if (parameters.ContainsKey(\"FilterToOwnedLists\"))\n            {\n                FilterToOwnedLists = bool.Parse(parameters[\"FilterToOwnedLists\"]);\n            }\n\n            if (parameters.ContainsKey(\"Reverse\"))\n            {\n                Reverse = bool.Parse(parameters[\"Reverse\"]);\n            }\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(TypeParam))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<ListType>(parameters[TypeParam]);\n\n            switch (Type)\n            {\n                case ListType.Lists:\n                    return BuildListsUrl(parameters);\n                case ListType.Show:\n                    return BuildShowUrl(parameters);\n                case ListType.Statuses:\n                    return BuildStatusesUrl(parameters);\n                case ListType.Memberships:\n                    return BuildMembershipsUrl(parameters);\n                case ListType.Subscriptions:\n                    return BuildSubscriptionsUrl(parameters);\n                case ListType.Members:\n                    return BuildMembersUrl(parameters);\n                case ListType.IsMember:\n                    return BuildIsMemberUrl(parameters);\n                case ListType.Subscribers:\n                    return BuildSubscribersUrl(parameters);\n                case ListType.IsSubscribed:\n                    return BuildIsSubcribedUrl(parameters);\n                case ListType.Ownerships:\n                    return BuildOwnershipsUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid ListType\", TypeParam);\n            }\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve all of a user's lists\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildListsUrl(Dictionary<string, string> parameters)\n        {\n            const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrEmpty(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrEmpty(parameters[\"ScreenName\"])))\n            {\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIDOrScreenNameParam);\n            }\n\n            var req = new Request(BaseUrl + \"lists/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"Reverse\"))\n            {\n                Reverse = bool.Parse(parameters[\"Reverse\"]);\n                urlParams.Add(new QueryParameter(\"reverse\", parameters[\"Reverse\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve info on a specific List\n        /// </summary>\n        /// <param name=\"parameters\">Contains ID for List</param>\n        /// <returns>URL for List query</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrEmpty(parameters[\"ListID\"])) &&\n                (!parameters.ContainsKey(\"Slug\") || string.IsNullOrEmpty(parameters[\"Slug\"])))\n            {\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n            }\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrEmpty(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrEmpty(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + @\"lists/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting statuses for a list\n        /// </summary>\n        /// <param name=\"parameters\">Contains ListID and optionally MaxID, SinceID, Count, and Page</param>\n        /// <returns>URL for statuses query</returns>\n        Request BuildStatusesUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrEmpty(parameters[\"ListID\"])) &&\n                (!parameters.ContainsKey(\"Slug\") || string.IsNullOrEmpty(parameters[\"Slug\"])))\n            {\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n            }\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrEmpty(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrEmpty(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/statuses.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n                // twitter seems to be ignoring the documented \"count=\", but does honor \"per_page=\"\n                // for now, send BOTH\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting list memberships\n        /// </summary>\n        /// <param name=\"parameters\">NoChange required</param>\n        /// <returns>URL for memberships query</returns>\n        Request BuildMembershipsUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrEmpty(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrEmpty(parameters[\"ScreenName\"])))\n            {\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIdOrScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/memberships.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"FilterToOwnedLists\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"FilterToOwnedLists\"))\n                {\n                    FilterToOwnedLists = true;\n                    urlParams.Add(new QueryParameter(\"filter_to_owned_lists\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting list subscriptions\n        /// </summary>\n        /// <param name=\"parameters\">NoChange required</param>\n        /// <returns>URL for subscriptions query</returns>\n        Request BuildSubscriptionsUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrEmpty(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrEmpty(parameters[\"ScreenName\"])))\n            {\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIdOrScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/subscriptions.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting a list of members for a list\n        /// </summary>\n        /// <param name=\"parameters\">Contains ListID and optionally Cursor</param>\n        /// <returns>URL for members query</returns>\n        Request BuildMembersUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrEmpty(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrEmpty(parameters[\"Slug\"])))\n            {\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n            }\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrEmpty(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrEmpty(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/members.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url that determines if a user is a member of a list\n        /// </summary>\n        /// <param name=\"parameters\">Contains ID and ListID</param>\n        /// <returns>URL for list members query</returns>\n        Request BuildIsMemberUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrEmpty(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrEmpty(parameters[\"ScreenName\"])))\n            {\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n            }\n\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrEmpty(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrEmpty(parameters[\"Slug\"])))\n            {\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n            }\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrEmpty(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrEmpty(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/members/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL to retrieve subscribers of a list\n        /// </summary>\n        /// <param name=\"parameters\"></param>\n        /// <returns>URL for list subscribers query</returns>\n        Request BuildSubscribersUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrEmpty(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrEmpty(parameters[\"Slug\"])))\n            {\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n            }\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrEmpty(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrEmpty(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/subscribers.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build URL to see if user is subscribed to a list\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ID and ListID</param>\n        /// <returns>URL for IsSubscribed query</returns>\n        Request BuildIsSubcribedUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrEmpty(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrEmpty(parameters[\"ScreenName\"])))\n            {\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n            }\n\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrEmpty(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrEmpty(parameters[\"Slug\"])))\n            {\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n            }\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrEmpty(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrEmpty(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/subscribers/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = parameters[\"OwnerID\"];\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = parameters[\"ListID\"];\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build URL to see if user is subscribed to a list\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ID and ListID</param>\n        /// <returns>URL for IsSubscribed query</returns>\n        Request BuildOwnershipsUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrEmpty(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrEmpty(parameters[\"ScreenName\"])))\n            {\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/ownerships.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List\n        /// </summary>\n        /// <param name=\"responseJson\">Json Twitter response</param>\n        /// <returns>List of List</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData listJson = JsonMapper.ToObject(responseJson);\n\n            List<List> lists;\n            switch (Type)\n            {\n                case ListType.Lists:\n                case ListType.Memberships:\n                case ListType.Subscriptions:\n                case ListType.Ownerships:\n                    lists = HandleMultipleListsResponse(listJson);\n                    break;\n                case ListType.Show:\n                    lists = HandleSingleListResponse(listJson);\n                    break;\n                case ListType.Statuses:\n                    lists = HandleStatusesResponse(listJson);\n                    break;\n                case ListType.Members:\n                case ListType.Subscribers:\n                    lists = HandleMultipleUsersResponse(listJson);\n                    break;\n                case ListType.IsMember:\n                case ListType.IsSubscribed:\n                    lists = HandleSingleUserResponse(listJson);\n                    break;\n                default:\n                    lists = new List<List>();\n                    break;\n            }\n\n            var cursors = new Cursors(listJson);\n\n            foreach (var list in lists)\n            {\n                list.Type = Type;\n                list.Cursor = Cursor;\n                list.UserID = UserID;\n\n                if (String.IsNullOrEmpty(list.ListID) && !String.IsNullOrEmpty(ListID))\n                    list.ListID = ListID;\n\n                list.Slug = Slug;\n                list.OwnerID = OwnerID;\n                list.OwnerScreenName = OwnerScreenName;\n                list.MaxID = MaxID;\n                list.Count = Count;\n                list.Page = Page;\n                list.ScreenName = ScreenName;\n                list.SinceID = SinceID;\n                list.TrimUser = TrimUser;\n                list.IncludeEntities = IncludeEntities;\n                list.IncludeRetweets = IncludeRetweets;\n                list.FilterToOwnedLists = FilterToOwnedLists;\n                list.CursorMovement = cursors;\n                list.SkipStatus = SkipStatus;\n                list.Reverse = Reverse;\n            }\n\n            return lists.AsEnumerable().OfType<T>().ToList();\n        }\n  \n        private List<List> HandleSingleListResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List(listJson)\n            };\n\n            return lists;\n        }\n  \n        List<List> HandleMultipleListsResponse(JsonData listJson)\n        {\n            JsonData listsEnumerable =\n                listJson.GetValue<JsonData>(\"lists\") ?? listJson; \n\n            var lists =\n                (from JsonData list in listsEnumerable\n                 select new List(list))\n                .ToList();\n\n            return lists;\n        }\n  \n        List<List> HandleSingleUserResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Users = new List<User> { new User(listJson) }\n                }\n            };\n\n            return lists;\n        }\n\n        List<List> HandleMultipleUsersResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Users =\n                        (from JsonData user in listJson.GetValue<JsonData>(\"users\")\n                         select new User(user))\n                        .ToList()\n                }\n            };\n\n            return lists;\n        }\n\n        private List<List> HandleStatusesResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Statuses =\n                        (from JsonData status in listJson\n                         select new Status(status))\n                        .ToList()\n                }\n            };\n\n            return lists;\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            List list = null;\n\n            if (!string.IsNullOrEmpty(responseJson))\n            {\n                JsonData listJson = JsonMapper.ToObject(responseJson);\n\n                switch ((ListAction)theAction)\n                {\n                    case ListAction.Create:\n                    case ListAction.Update:\n                    case ListAction.Delete:\n                    case ListAction.AddMember:\n                    case ListAction.AddMemberRange:\n                    case ListAction.DeleteMember:\n                    case ListAction.Subscribe:\n                    case ListAction.Unsubscribe:\n                    case ListAction.DestroyAll:\n                        list = new List(listJson);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessActionResult should never execute because a Type must be specified.\");\n                }\n            }\n\n            return list.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/List/ListType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Available types of queries for the Twitter Lists API\n    /// </summary>\n    public enum ListType\n    {\n        /// <summary>\n        /// Lists for specified user\n        /// </summary>\n        Lists,\n\n        /// <summary>\n        /// Show specified list\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show tweet timeline for members of the specified list\n        /// </summary>\n        Statuses,\n\n        /// <summary>\n        /// Show lists that specified user is a member of\n        /// </summary>\n        Memberships,\n\n        /// <summary>\n        /// Shows the lists a user is subscribed to\n        /// </summary>\n        Subscriptions,\n\n        /// <summary>\n        /// Members of the specified list\n        /// </summary>\n        Members,\n\n        /// <summary>\n        /// Check if a user is a member of the specified list\n        /// </summary>\n        IsMember,\n\n        /// <summary>\n        /// List the users subscribed to the specified list\n        /// </summary>\n        Subscribers,\n\n        /// <summary>\n        /// Check if a user subscribes to the specified list\n        /// </summary>\n        IsSubscribed,\n\n        /// <summary>\n        /// Get lists belonging to the specified user\n        /// </summary>\n        Ownerships\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/AnonymousAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\n#if SILVERLIGHT\nusing System.Windows;\n#else\n#endif\n\nnamespace LinqToTwitter\n{\n    public class AnonymousAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        [Obsolete(\"Twitter API v1.1 requires all queries to be authorized. Please visit http://linqtotwitter.codeplex.com/wikipage?title=Securing%20Your%20Applications for more guidance on how to use OAuth in your application.\", true)]\n        public void Authorize()\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Gets the specified request URI.\n        /// </summary>\n        /// <param name=\"requestUri\">The request URI.</param>\n        /// <param name=\"args\">The args.</param>\n        /// <returns></returns>\n        public new WebRequest Get(Request request)\n        {\n            var url = request.Endpoint;\n            var queryString = request.QueryString;\n\n#if SILVERLIGHT\n            var fullUrl = \n                (ProxyUrl + url + \n                 (string.IsNullOrEmpty(ProxyUrl) ? \"?\" : \"&\") +\n                 queryString)\n                .Trim('?', '&');\n\n            var requestUri = new Uri(fullUrl);\n#else\n            var requestUri = new Uri(url + \"?\" + queryString);\n#endif\n            var req = WebRequest.Create(requestUri);\n            this.InitializeRequest(req);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Posts the specified request URI.\n        /// </summary>\n        /// <param name=\"requestUri\">The request URI.</param>\n        /// <returns></returns>\n        public override HttpWebRequest PostRequest(Request request, IDictionary<string, string> postData)\n        {\n            if (request == null)\n                throw new ArgumentNullException(\"request\");\n\n            var url = request.Endpoint;\n\n#if SILVERLIGHT\n            url = ProxyUrl + url;\n#endif\n            var requestUri = new Uri(url);\n            var req = WebRequest.Create(requestUri) as HttpWebRequest;\n            this.InitializeRequest(req);\n            req.Method = HttpMethod.POST.ToString();\n            return req;\n        }\n\n        /// <summary>\n        /// Posts the specified request URI.\n        /// </summary>\n        /// <param name=\"requestUri\">The request URI.</param>\n        /// <param name=\"args\">The args.</param>\n        /// <returns></returns>\n        public override HttpWebResponse Post(Request request, IDictionary<string, string> postData)\n        {\n            if (request == null)\n                throw new ArgumentNullException(\"request\");\n\n            var url = request.Endpoint;\n\n#if SILVERLIGHT\n             url = ProxyUrl + url;\n#endif\n            var requestUri = new Uri(url);\n            byte[] queryStringBytes = Encoding.UTF8.GetBytes(request.QueryString);\n\n            var req = WebRequest.Create(requestUri) as HttpWebRequest;\n\n            this.InitializeRequest(req);\n\n            req.Method = HttpMethod.POST.ToString();\n            //req.ServicePoint.Expect100Continue = false;\n            req.Headers[HttpRequestHeader.Expect] = null;\n            req.ContentType = \"x-www-form-urlencoded\";\n#if !WINDOWS_PHONE && !NETFX_CORE\n            req.ContentLength = queryStringBytes.Length; \n#endif\n\n            var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false);\n\n            req.BeginGetRequestStream(\n                new AsyncCallback(\n                    ar =>\n                    {\n                        using (var requestStream = req.EndGetRequestStream(ar))\n                        {\n                            requestStream.Write(queryStringBytes, 0, queryStringBytes.Length);\n                        }\n                        resetEvent.Set();\n                    }), null);\n\n            resetEvent.WaitOne();\n            resetEvent.Reset();\n\n            HttpWebResponse res = null;\n\n            req.BeginGetResponse(\n                new AsyncCallback(\n                    ar =>\n                    {\n                        res = req.EndGetResponse(ar) as HttpWebResponse;\n                        resetEvent.Set();\n                    }), null);\n\n            resetEvent.WaitOne();\n\n            return res;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/ApplicationOnlyAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Threading;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Security.Application;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class ApplicationOnlyAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        public string BasicToken { get; set; }\n        public string BearerToken { get; set; }\n        public string OAuth2Token { get; set; }\n        public string OAuth2InvalidateToken { get; set; }\n\n        public ApplicationOnlyAuthorizer()\n        {\n            OAuth2Token = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateToken = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public void Authorize()\n        {\n            EncodeCredentials();\n            GetBearerToken();\n        }\n\n        public override bool IsAuthorized\n        {\n            get\n            {\n                return !string.IsNullOrEmpty(BearerToken);\n            }\n        }\n\n        public void Invalidate()\n        {\n            EncodeCredentials();\n            string url = OAuth2InvalidateToken;\n#if SILVERLIGHT\n            url = ProxyUrl + OAuth2InvalidateToken;\n#endif\n\n            var req = WebRequest.Create(url) as HttpWebRequest;\n\n            req.Method = HttpMethod.POST.ToString();\n            req.Headers[HttpRequestHeader.Authorization] = \"Basic \" + BasicToken;\n            req.ContentType = \"application/x-www-form-urlencoded;charset=UTF-8\";\n            byte[] data = System.Text.Encoding.UTF8.GetBytes(\"access_token=\" + BearerToken);\n#if !WINDOWS_PHONE && !NETFX_CORE\n            req.UserAgent = UserAgent;\n            req.ContentLength = data.Length;\n#endif\n#if !SILVERLIGHT && !NETFX_CORE\n            req.Timeout = (int)Timeout.TotalMilliseconds;\n#endif\n\n            string response = null;\n\n            using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n            {\n                req.BeginGetRequestStream(\n                    ar =>\n                    {\n                        using (var reqStream = req.EndGetRequestStream(ar))\n                            reqStream.Write(data, 0, data.Length);\n\n                        req.BeginGetResponse(\n                            ar2 =>\n                            {\n                                var resp = req.EndGetResponse(ar2);\n                                response = resp.ReadReponse();\n#if !WINDOWS_PHONE && !NETFX_CORE\n                                resetEvent.Set();\n#endif\n                            },\n                            null);\n                    },\n                    null);\n#if !WINDOWS_PHONE && !NETFX_CORE\n                resetEvent.WaitOne();\n#endif\n\n                if (response != null)\n                {\n                    var responseJson = JsonMapper.ToObject(response);\n                    BearerToken = responseJson.GetValue<string>(\"access_token\");\n                }\n            }\n        }\n  \n        void GetBearerToken()\n        {\n            string url = OAuth2Token;\n#if SILVERLIGHT\n            url = ProxyUrl + OAuth2Token;\n#endif\n\n            var req = WebRequest.Create(url) as HttpWebRequest;\n\n            req.Method = HttpMethod.POST.ToString();\n            req.Headers[HttpRequestHeader.Authorization] = \"Basic \" + BasicToken;\n            req.ContentType = \"application/x-www-form-urlencoded;charset=UTF-8\";\n            byte[] data = System.Text.Encoding.UTF8.GetBytes(\"grant_type=client_credentials\");\n#if !WINDOWS_PHONE && !NETFX_CORE\n            req.UserAgent = UserAgent;\n            req.ContentLength = data.Length;\n#endif\n#if !SILVERLIGHT && !NETFX_CORE\n            req.Timeout = (int)Timeout.TotalMilliseconds;\n#endif\n\n            string response = null;\n\n            using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n            {\n                Exception thrownException = null;\n\n                req.BeginGetRequestStream(\n                    ar =>\n                    {\n                        try\n                        {\n                            using (var reqStream = req.EndGetRequestStream(ar))\n                                reqStream.Write(data, 0, data.Length);\n\n                            req.BeginGetResponse(\n                                ar2 =>\n                                {\n                                    try\n                                    {\n                                        var resp = req.EndGetResponse(ar2);\n                                        response = resp.ReadReponse();\n                                    }\n                                    catch (Exception ex)\n                                    {\n                                        thrownException = ex;\n                                    }\n                                    finally\n                                    {\n#if !WINDOWS_PHONE && !NETFX_CORE\n                                    resetEvent.Set();\n#endif\n                                    }\n                                },\n                                null);\n                        }\n                        catch (Exception ex)\n                        {\n                            thrownException = ex;\n#if !WINDOWS_PHONE && !NETFX_CORE\n                            resetEvent.Set();\n#endif\n                        }\n                    },\n                    null);\n#if !WINDOWS_PHONE && !NETFX_CORE\n                resetEvent.WaitOne();\n#endif\n                if (thrownException != null) throw thrownException;\n\n                if (response != null)\n                {\n                    var responseJson = JsonMapper.ToObject(response);\n                    BearerToken = responseJson.GetValue<string>(\"access_token\");\n                }\n            }\n\n        }\n\n        internal void EncodeCredentials()\n        {\n            string encodedConsumerKey = Encoder.UrlEncode(Credentials.ConsumerKey);\n            string encodedConsumerSecret = Encoder.UrlEncode(Credentials.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = System.Text.Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n        /// <summary>\n        /// OAuth Get\n        /// </summary>\n        /// <param name=\"request\">Request details</param>\n        /// <returns>Request to be sent to Twitter</returns>\n        public new WebRequest Get(Request request)\n        {\n#if SILVERLIGHT\n            var fullUrl = ProxyUrl + request.FullUrl;\n\n            var req = WebRequest.Create(fullUrl) as HttpWebRequest;\n            req.Headers[HttpRequestHeader.Authorization] = \"Bearer \" + BearerToken;\n#else\n            var req = WebRequest.Create(request.FullUrl) as HttpWebRequest;\n            if (req != null)\n            {\n                req.Headers[HttpRequestHeader.Authorization] =  \"Bearer \" + BearerToken;\n\n                InitializeRequest(req);\n            }\n#endif\n\n            return req;\n        }\n\n        /// <summary>\n        /// OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>request to send</returns>\n        public override HttpWebRequest PostRequest(Request request, IDictionary<string, string> postData)\n        {\n#if SILVERLIGHT\n            var req = HttpWebRequest.Create(\n                ProxyUrl + request.Endpoint +\n                (string.IsNullOrEmpty(ProxyUrl) ? \"?\" : \"&\") +\n                request.QueryString) as HttpWebRequest;\n#else\n            var req = WebRequest.Create(request.FullUrl) as HttpWebRequest;\n#endif\n\n            if (req != null)\n            {\n#if !SILVERLIGHT && !NETFX_CORE\n                req.ServicePoint.Expect100Continue = false;\n#endif\n                req.Method = HttpMethod.POST.ToString();\n                req.Headers[HttpRequestHeader.Authorization] = \"Bearer \" + BearerToken;\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.ContentLength = 0;\n#endif\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>request to send</returns>\n        public override HttpWebResponse Post(Request request, IDictionary<string, string> postData)\n        {\n            var req = PostRequest(request, postData);\n            return Utilities.AsyncGetResponse(req);\n        }\n\n        /// <summary>\n        /// Async OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>HttpWebRequest for post</returns>\n        public override HttpWebRequest PostAsync(Request request, IDictionary<string, string> postData)\n        {\n            var req = WebRequest.Create(\n                    ProxyUrl + request.Endpoint +\n                    (string.IsNullOrEmpty(ProxyUrl) ? \"?\" : \"&\") +\n                    request.QueryString)\n                as HttpWebRequest;\n\n            if (req != null)\n            {\n                req.Method = HttpMethod.POST.ToString();\n                req.Headers[HttpRequestHeader.Authorization] = \"Bearer \" + BearerToken; ;\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.ContentLength = 0;\n#endif\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/AuthAccessType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Restricts access type\n    /// </summary>\n    public enum AuthAccessType\n    {\n        /// <summary>\n        /// Default - use account settings access\n        /// </summary>\n        NoChange,\n\n        /// <summary>\n        /// Restrict to read-only\n        /// </summary>\n        Read,\n\n        /// <summary>\n        /// Read/write access\n        /// </summary>\n        Write\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/IOAuthCredentials.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Classes implementing this interface populate the\n    /// ConsumerKey and Consumer secret that you can get\n    /// from Twitter by registering an app at http://dev.twitter.com/apps.\n    /// \n    /// LINQ to Twitter populates the AccessToken when\n    /// the user authorizes your app.  Each user has a\n    /// unique access token that can be stored and reused\n    /// any time the same user uses your app again.\n    /// </summary>\n    public interface IOAuthCredentials\n    {\n        /// <summary>\n        /// Key provided by Twitter for your application\n        /// </summary>\n        string ConsumerKey { get; set; }\n\n        /// <summary>\n        /// Secret provided by Twitter for your application\n        /// </summary>\n        string ConsumerSecret { get; set; }\n\n        /// <summary>\n        /// Token provided by Twitter for making request\n        /// </summary>\n        string OAuthToken { get; set; }\n\n        /// <summary>\n        /// Unique access token for a user\n        /// </summary>\n        string AccessToken { get; set; }\n\n\n        /// <summary>\n        /// Twitter screen name\n        /// </summary>\n        string ScreenName { get; set; }\n\n        /// <summary>\n        /// Twitter user ID\n        /// </summary>\n        string UserId { get; set; }\n\n        /// <summary>\n        /// Populates this with credential values\n        /// </summary>\n        /// <param name=\"credentialsString\">comma separated string of ConsumerKey,ConsumerSecret,AccessToken</param>\n        void Load(string credentialsString);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/IOAuthHelper.cs",
    "content": "﻿using System.Net;\n\nnamespace LinqToTwitter\n{\n    public interface IOAuthHelper\n    {\n        ///// <summary>\n        ///// Encapsulates Process.Start so tests don't launch browser\n        ///// </summary>\n        ///// <param name=\"url\">Address for browser to navigate to</param>\n        //void LaunchBrowser(string url);\n\n        /// <summary>\n        /// Encapsulates GetResponse so tests don't invoke the request\n        /// </summary>\n        /// <param name=\"req\">Request to Twitter</param>\n        /// <returns>Response to Twitter</returns>\n        HttpWebResponse GetResponse(HttpWebRequest req);\n\n        ///// <summary>\n        ///// Encapsulates browser redirect so tests don't execute this code\n        ///// </summary>\n        ///// <param name=\"url\">URL to redirect to</param>\n        //void PerformRedirect(string url);\n\n        ///// <summary>\n        ///// Pulls request URL without oauth params\n        ///// </summary>\n        ///// <returns>Reqsuest Url</returns>\n        //string GetRequestUrl();\n\n        ///// <summary>\n        ///// Gets a parameter from an HttpRequest\n        ///// </summary>\n        ///// <param name=\"reqParam\">Parameter to get</param>\n        ///// <returns>Parameter value</returns>\n        //string GetRequestParam(string reqParam);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/IOAuthTwitter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\n\nnamespace LinqToTwitter\n{\n    public interface IOAuthTwitter\n    {\n        void AccessTokenGet(string authToken, string verifier, string accessTokenUrl, string callback, out string screenName, out string userID);\n\n        /// <summary>\n        /// Requests an access token from Twitter\n        /// </summary>\n        /// <param name=\"accessTokenUrl\">Base url for request</param>\n        /// <param name=\"postData\">POST body params</param>\n        /// <param name=\"screenName\">Returns user's Twitter screen name</param>\n        /// <param name=\"userID\">Returns user's Twitter ID</param>\n        void PostAccessToken(Request request, IDictionary<string, string> postData, out string screenName, out string userID);\n        void PostAccessTokenAsync(Request request, IDictionary<string, string> postData, Action<TwitterAsyncResponse<UserIdentifier>> authorizationCompleteCallback);\n\n        string AuthorizationLinkGet(string requestToken, string authorizeUrl, string callback, bool forceLogin, AuthAccessType authAccessToken);\n        void GetOAuthQueryString(HttpMethod method, Request request, string callback, out string outUrl, out string queryString);\n        string GetOAuthQueryStringForPost(Request request, IDictionary<string, string> postData);\n        string OAuthConsumerKey { get; set; }\n        string OAuthConsumerSecret { get; set; }\n        string OAuthToken { get; set; }\n        string OAuthTokenSecret { get; set; }\n        string OAuthUserAgent { get; set; }\n        string OAuthVerifier { get; set; }\n\n        /// <summary>\n        /// URL for Silverlight Proxy\n        /// </summary>\n        string ProxyUrl { get; set; }\n\n#if !SILVERLIGHT && !NETFX_CORE\n        /// <summary>\n        /// Proxy for authorization requests.\n        /// </summary>\n        WebProxy Proxy { get; set; }\n#endif\n\n        string OAuthWebRequest(HttpMethod method, Request request, IDictionary<string, string> postData, string callback);\n        string WebRequest(HttpMethod method, string url, string authHeader, IDictionary<string, string> postData);\n        string WebResponseGet(System.Net.HttpWebRequest webRequest);\n\n        void GetRequestTokenAsync(\n            Uri oauthRequestTokenUrl, \n            Uri oauthAuthorizeUrl, \n            string twitterCallbackUrl, \n            AuthAccessType authAccessType,\n            bool forceLogin, \n            Action<string> authorizationCallback, \n            Action<TwitterAsyncResponse<object>> authenticationCompleteCallback);\n\n        void GetAccessTokenAsync(\n            string verifier,\n            Uri oauthAccessTokenUrl,\n            string twitterCallbackUrl,\n            AuthAccessType authAccessType,\n            Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback);\n\n        /// <summary>\n        /// Removes OAuth parameters from URL\n        /// </summary>\n        /// <param name=\"fullUrl\">Raw url with OAuth parameters</param>\n        /// <returns>Filtered url without OAuth parameters</returns>\n        string FilterRequestParameters(Uri fullUrl);\n\n        /// <summary>\n        /// Extracts a value from a query string matching a key\n        /// </summary>\n        /// <param name=\"queryString\">query string</param>\n        /// <param name=\"paramKey\">key to match val</param>\n        /// <returns>value matching key</returns>\n        string GetUrlParamValue(string queryString, string paramKey);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/ITwitterAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\n\nnamespace LinqToTwitter\n{\n    public interface ITwitterAuthorizer\n    {\n        /// <summary>\n        /// Performs Twitter Authorization\n        /// </summary>\n        void Authorize();\n\n        /// <summary>\n        /// Prepares an authorized HTTP GET request.\n        /// </summary>\n        /// <returns>The <see cref=\"HttpWebRequest\"/> object that may be further customized.</returns>\n        WebRequest Get(Request request);\n\n        /// <summary>\n        /// Prepares an authorized HTTP POST request.\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Parameters to be posted</param>\n        /// <returns>\n        /// The HTTP request.\n        /// </returns>\n        HttpWebRequest PostRequest(Request request, IDictionary<string, string> postData);\n\n        // Was HttpWebResponse for calls with args\n        /// <summary>\n        /// Prepares and sends an authorized HTTP POST request.\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Parameters to be posted</param>\n        /// <returns>\n        /// The HTTP reponce.\n        /// </returns>\n        /// <exception cref=\"WebException\">Thrown if the server returns an error.</exception>\n        HttpWebResponse Post(Request request, IDictionary<string, string> postData);\n\n        /// <summary>\n        /// Async OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Parameters to be posted</param>\n        /// <returns>HttpWebRequest for post</returns>\n        HttpWebRequest PostAsync(Request request, IDictionary<string, string> postData);\n\n        /// <summary>\n        /// Gets a value indicating whether this instance is ready to send authorized GET and POST requests.\n        /// </summary>\n        /// <value>\n        /// \t<c>true</c> if this instance is authorized; otherwise, <c>false</c>.\n        /// </value>\n        bool IsAuthorized { get; }\n\n        /// <summary>\n        /// Gets the UserID that Twitter has assigned to the logged in user.\n        /// </summary>\n        /// <value>An integer number, represented as a string.</value>\n        string UserId { get; }\n\n        /// <summary>\n        /// Gets the screenname of the user logged into Twitter.\n        /// </summary>\n        string ScreenName { get; }\n\n        /// <summary>\n        /// Gets or sets the read write timeout.\n        /// </summary>\n        /// <value>The read write timeout.</value>\n        TimeSpan ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Gets or sets the timeout.\n        /// </summary>\n        /// <value>The timeout.</value>\n        TimeSpan Timeout { get; set; }\n\n        /// <summary>\n        /// Gets or sets the user agent.\n        /// </summary>\n        /// <value>The user agent.</value>\n        string UserAgent { get; set; }\n\n        /// <summary>\n        /// Indicates if you want to use enable compressed responses (GZip/deflate)\n        /// </summary>\n        bool UseCompression { get; set; }\n\n#if !SILVERLIGHT && !NETFX_CORE\n        /// <summary>\n        /// Proxy for authorization requests.\n        /// </summary>\n        WebProxy Proxy { get; set; }\n#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/InMemoryCredentials.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Holds credentials in memory. You must persist values \n    /// to save or work in stateless apps (such as Web apps).\n    /// </summary>\n    public class InMemoryCredentials : IOAuthCredentials\n    {\n        public virtual string ConsumerKey { get; set; }\n\n        public virtual string ConsumerSecret { get; set; }\n\n        public virtual string OAuthToken { get; set; }\n\n        public virtual string AccessToken { get; set; }\n\n        public virtual string ScreenName { get; set; }\n\n        public virtual string UserId { get; set; }\n\n        /// <summary>\n        /// Sets ConsumerKey, ConsumerSecret, and AccessToken with a comma-separated \n        /// list. You must reassign credentials to Authorizer after changing them.\n        /// </summary>\n        /// <param name=\"credentialString\"></param>\n        public virtual void Load(string credentialString)\n        {\n            string[] credentials = credentialString.Split(',');\n\n            ConsumerKey = credentials[0];\n            ConsumerSecret = credentials[1];\n            OAuthToken = credentials[2];\n            AccessToken = credentials[3];\n            ScreenName = credentials[4];\n            UserId = credentials[5];\n        }\n\n        /// <summary>\n        /// Gets a comma-separated list of ConsumerKey, ConsumerSecret, \n        /// and AccessToken that can be saved or serialized.\n        /// </summary>\n        /// <returns></returns>\n        public override string ToString()\n        {\n            return ConsumerKey + \",\" + ConsumerSecret + \",\" + OAuthToken + \",\" + AccessToken + \",\" + ScreenName + \",\" + UserId;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/IsolatedStorageCredentials.cs",
    "content": "﻿#if !NETFX_CORE\nusing System;\nusing System.IO;\nusing System.IO.IsolatedStorage;\n\nnamespace LinqToTwitter\n{\n    public class IsolatedStorageCredentials : IOAuthCredentials\n    {\n        const int ConsumerKeyIdx = 0;\n        const int ConsumerSecretIdx = 1;\n        const int OAuthTokenIdx = 2;\n        const int AccessTokenIdx = 3;\n        const int ScreenNameIdx = 4;\n        const int UserIdIdx = 5;\n\n        readonly string[] credentials = new string[6];\n\n        public IsolatedStorageCredentials()\n        {\n            LoadCredentialsFromIsolatedStorage();\n        }\n\n        public void Load(string credentialsString)\n        {\n            string[] tempCredentials = credentialsString.Split(',');\n\n            for (int i = 0; i < tempCredentials.Length; i++)\n            {\n                credentials[i] = tempCredentials[i];\n            }\n\n            SaveCredentialsToIsolatedStorage();\n        }\n\n        public override string ToString()\n        {\n            if (credentials == null)\n            {\n                LoadCredentialsFromIsolatedStorage();\n            }\n\n            return string.Join(\",\", credentials);\n        }\n\n        public void Save()\n        {\n            SaveCredentialsToIsolatedStorage();\n        }\n\n        public void Clear()\n        {\n            for (int i = 0; i < credentials.Length; i++)\n            {\n                credentials[i] = string.Empty;\n            }\n\n            SaveCredentialsToIsolatedStorage();\n        }\n\n        void LoadCredentialsFromIsolatedStorage()\n        {\n            string tempCredentialsString = null;\n\n            IsolatedStorageFile credentialsStore = IsolatedStorageFile.GetUserStoreForApplication();\n\n            using (var isoFileStream = new IsolatedStorageFileStream(\"Linq2TwitterCredentials.txt\", FileMode.OpenOrCreate, credentialsStore))\n            {\n                using (var isoFileReader = new StreamReader(isoFileStream))\n                {\n                    tempCredentialsString = isoFileReader.ReadLine();\n                }\n            }\n\n            if (tempCredentialsString != null)\n            {\n                string[] tempCredentialsArr = tempCredentialsString.Split(',');\n\n                for (int i = 0; i < tempCredentialsArr.Length; i++)\n                {\n                    credentials[i] = tempCredentialsArr[i];\n                }\n            }\n        }\n\n        void SaveCredentialsToIsolatedStorage()\n        {\n            var credentialsString = string.Join(\",\", credentials);\n\n            IsolatedStorageFile credentialsStore = IsolatedStorageFile.GetUserStoreForApplication();\n\n            using (var isoFileStream = new IsolatedStorageFileStream(\"Linq2TwitterCredentials.txt\", FileMode.OpenOrCreate, credentialsStore))\n            {\n                using (var isoFileWriter = new StreamWriter(isoFileStream))\n                {\n                    isoFileWriter.WriteLine(credentialsString);\n                }\n            }\n        }\n\n        public string AccessToken\n        {\n            get\n            {\n                if (credentials[AccessTokenIdx] == null)\n                {\n                    LoadCredentialsFromIsolatedStorage();\n                }\n\n                return credentials[AccessTokenIdx];\n            }\n            set\n            {\n                credentials[AccessTokenIdx] = value;\n            }\n        }\n\n        public string ConsumerSecret\n        {\n            get\n            {\n                if (credentials[ConsumerSecretIdx] == null)\n                {\n                    LoadCredentialsFromIsolatedStorage();\n                }\n\n                return credentials[ConsumerSecretIdx];\n            }\n            set\n            {\n                credentials[ConsumerSecretIdx] = value;\n            }\n        }\n\n        public string OAuthToken\n        {\n            get\n            {\n                if (credentials[OAuthTokenIdx] == null)\n                {\n                    LoadCredentialsFromIsolatedStorage();\n                }\n\n                return credentials[OAuthTokenIdx];\n            }\n            set\n            {\n                credentials[OAuthTokenIdx] = value;\n            }\n        }\n\n        public string ConsumerKey\n        {\n            get\n            {\n                if (credentials[ConsumerKeyIdx] == null)\n                {\n                    LoadCredentialsFromIsolatedStorage();\n                }\n\n                return credentials[ConsumerKeyIdx];\n            }\n            set\n            {\n                credentials[ConsumerKeyIdx] = value;\n            }\n        }\n\n        /// <summary>\n        /// Added by Sumit to enable Serialization of ScreenName\n        /// </summary>\n        public string ScreenName\n        {\n            get\n            {\n                if (credentials[ScreenNameIdx] == null)\n                {\n                    LoadCredentialsFromIsolatedStorage();\n                }\n                return credentials[ScreenNameIdx];\n            }\n            set\n            {\n                credentials[ScreenNameIdx] = value;\n            }\n        }\n\n        /// <summary>\n        /// Added by Sumit to enable serialization of UserId \n        /// </summary>\n        public string UserId\n        {\n            get\n            {\n                if (credentials[UserIdIdx] == null)\n                {\n                    LoadCredentialsFromIsolatedStorage();\n                }\n                return credentials[UserIdIdx];\n            }\n            set\n            {\n                credentials[UserIdIdx] = value;\n            }\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/OAuthAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\n\n#if SILVERLIGHT\nusing System.Windows;\n#endif\n\nnamespace LinqToTwitter\n{\n    public abstract class OAuthAuthorizer\n    {\n        protected OAuthAuthorizer()\n        {\n            OAuthRequestTokenUrl = \"https://api.twitter.com/oauth/request_token\";\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authorize\";\n            OAuthAccessTokenUrl = \"https://api.twitter.com/oauth/access_token\";\n\n            OAuthTwitter = new OAuthTwitter();\n\n#if SILVERLIGHT && !WINDOWS_PHONE\n            if (!Application.Current.IsRunningOutOfBrowser)\n            {\n                ProxyUrl =\n                        Application.Current.Host.Source.Scheme + \"://\" +\n                        Application.Current.Host.Source.Host + \":\" +\n                        Application.Current.Host.Source.Port + \"/LinqToTwitterProxy.ashx?url=\"; \n            }\n#else\n            ProxyUrl = string.Empty;\n#endif\n        }\n\n        /// <summary>\n        /// URL for OAuth Request Tokens\n        /// </summary>\n        public string OAuthRequestTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth authorization\n        /// </summary>\n        public string OAuthAuthorizeUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth Access Tokens\n        /// </summary>\n        public string OAuthAccessTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for Silverlight proxy\n        /// </summary>\n        public string ProxyUrl\n        {\n            get\n            {\n                return OAuthTwitter.ProxyUrl;\n            }\n            set\n            {\n                OAuthTwitter.ProxyUrl = value;\n            }\n        }\n#if !SILVERLIGHT && !NETFX_CORE\n        /// <summary>\n        /// Proxy for authorization requests.\n        /// </summary>\n        public WebProxy Proxy\n        {\n            get { return OAuthTwitter.Proxy; }\n            set { OAuthTwitter.Proxy = value; }\n        }\n#endif\n\n        public AuthAccessType AuthAccessType { get; set; }\n\n        /// <summary>\n        /// Contains general OAuth functionality\n        /// </summary>\n        public IOAuthTwitter OAuthTwitter { get; set; }\n\n        IOAuthCredentials credentials;\n\n        /// <summary>\n        /// Holds ConsumerKey, ConsumerSecret, and AccessToken\n        /// \n        /// Note: Populate Credentials before setting this property\n        /// </summary>\n        public IOAuthCredentials Credentials\n        {\n            get\n            {\n                if (credentials != null && credentials.OAuthToken == null)\n                {\n                    credentials.OAuthToken = OAuthTwitter.OAuthToken;\n                }\n\n                if (credentials != null && credentials.AccessToken == null)\n                {\n                    credentials.AccessToken = OAuthTwitter.OAuthTokenSecret;\n                }\n\n                return credentials;\n            }\n            set\n            {\n                credentials = value;\n                OAuthTwitter.OAuthConsumerKey = value.ConsumerKey;\n                OAuthTwitter.OAuthConsumerSecret = value.ConsumerSecret;\n                OAuthTwitter.OAuthToken = value.OAuthToken;\n                OAuthTwitter.OAuthTokenSecret = value.AccessToken;\n            }\n        }\n\n        public virtual bool IsAuthorized\n        {\n            get\n            {\n                if (Credentials == null)\n                {\n                    const string CredentialsParam = \"Credentials\";\n                    throw new ArgumentNullException(CredentialsParam, \"You must set the Credentials property.\");\n                }\n\n                return\n                    !string.IsNullOrEmpty(Credentials.ConsumerKey) &&\n                    !string.IsNullOrEmpty(Credentials.ConsumerSecret) &&\n                    !string.IsNullOrEmpty(Credentials.OAuthToken) &&\n                    !string.IsNullOrEmpty(Credentials.AccessToken);\n            }\n        }\n\n        public string UserId { get; set; }\n\n        public string ScreenName { get; set; }\n\n        public TimeSpan ReadWriteTimeout { get; set; }\n\n        public TimeSpan Timeout { get; set; }\n\n        public string UserAgent { get; set; }\n\n        public bool UseCompression { get; set; }\n\n        /// <summary>\n        /// Initializes the request in ways common to GET and POST requests.\n        /// </summary>\n        /// <param name=\"webRequest\">The request to initialize.</param>\n        protected void InitializeRequest(WebRequest webRequest)\n        {\n            var request = webRequest as HttpWebRequest;\n\n#if !SILVERLIGHT && !NETFX_CORE\n            if (request != null) {\n                request.UserAgent = UserAgent;\n\n                if (ReadWriteTimeout > TimeSpan.Zero)\n                    request.ReadWriteTimeout = (int)ReadWriteTimeout.TotalMilliseconds;\n\n                if (Timeout > TimeSpan.Zero)\n                    request.Timeout = (int)Timeout.TotalMilliseconds;\n\n                if (Proxy != null)\n                    request.Proxy = Proxy;\n\n                if (UseCompression)\n                {\n                    request.Headers.Add(HttpRequestHeader.AcceptEncoding, \"gzip, deflate\");\n                    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;\n                }\n            }\n#endif\n#if WINDOWS_PHONE && !NETFX_CORE\n            request.Headers[\"user-agent\"] = UserAgent;\n            request.Headers[\"host\"] = request.RequestUri.Host;\n#endif\n        }\n\n        /// <summary>\n        /// OAuth Get\n        /// </summary>\n        /// <param name=\"request\">Request details</param>\n        /// <returns>Request to be sent to Twitter</returns>\n        public WebRequest Get(Request request)\n        {\n            string outUrl;\n            string queryString;\n            OAuthTwitter.GetOAuthQueryString(HttpMethod.GET, request, string.Empty, out outUrl, out queryString);\n\n#if SILVERLIGHT\n            var fullUrl = ProxyUrl + request.FullUrl;\n\n            var req = WebRequest.Create(fullUrl) as HttpWebRequest;\n            req.Headers[HttpRequestHeader.Authorization] = new OAuthTwitter().PrepareAuthHeader(queryString);\n            InitializeRequest(req);\n#else\n            var req = WebRequest.Create(request.FullUrl) as HttpWebRequest;\n            if (req != null)\n            {\n                req.Headers[HttpRequestHeader.Authorization] = new OAuthTwitter().PrepareAuthHeader(queryString, request);\n\n                InitializeRequest(req);\n            }\n#endif\n\n            return req;\n        }\n\n        /// <summary>\n        /// OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>request to send</returns>\n        public virtual HttpWebRequest PostRequest(Request request, IDictionary<string, string> postData)\n        {\n            var auth = OAuthTwitter.GetOAuthQueryStringForPost(request, postData);\n\n#if SILVERLIGHT\n            var req = HttpWebRequest.Create(\n                ProxyUrl + request.Endpoint + \n                (string.IsNullOrEmpty(ProxyUrl) ? \"?\" : \"&\") +\n                request.QueryString) as HttpWebRequest;\n#else\n            var req = WebRequest.Create(request.Endpoint) as HttpWebRequest;\n#endif\n\n            if (req != null) {\n#if !SILVERLIGHT && !NETFX_CORE\n                req.ServicePoint.Expect100Continue = false;\n#endif\n                req.Method = HttpMethod.POST.ToString();\n                req.Headers[HttpRequestHeader.Authorization] = auth;\n#if !WINDOWS_PHONE\n                req.ContentType = \"application/x-www-form-urlencoded\";\n#endif\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.ContentLength = 0; \n#endif\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>request to send</returns>\n        public virtual HttpWebResponse Post(Request request, IDictionary<string, string> postData)\n        {\n            var req = PostRequest(request, postData);\n            return Utilities.AsyncGetResponse(req);\n        }\n\n        /// <summary>\n        /// Async OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>HttpWebRequest for post</returns>\n        public virtual HttpWebRequest PostAsync(Request request, IDictionary<string, string> postData)\n        {\n            var auth = OAuthTwitter.GetOAuthQueryStringForPost(request, postData);\n\n            var req = WebRequest.Create(\n                    ProxyUrl + request.Endpoint +\n                    (string.IsNullOrEmpty(ProxyUrl) ? \"?\" : \"&\") +\n                    request.QueryString)\n                as HttpWebRequest;\n\n            if (req != null) {\n                req.Method = HttpMethod.POST.ToString();\n                req.Headers[HttpRequestHeader.Authorization] = auth;\n#if !WINDOWS_PHONE && !NETFX_CORE\n                req.ContentLength = 0; \n#endif\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/OAuthBase.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Eran Sandler -\n * OAuthBase Class\n * \n * http://oauth.googlecode.com/svn/code/csharp/\n * \n * Shannon Whitley -\n * Example of how to use modified version of\n * Eran Sandler's OAuthBase class in C#\n * \n * http://www.voiceoftech.com/swhitley/?p=681\n * \n * PhotoBucket - Silverlight\n * \n * http://code.google.com/p/photobucket-silverlight/source/browse/trunk/photobucketapi/OAuthBase.cs?r=46\n * \n * Joe Mayo -\n * \n * Modified 5/17/09\n ***********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Globalization;\n\n#if NETFX_CORE\nusing Windows.Security.Cryptography.Core;\nusing Windows.Security.Cryptography;\nusing Windows.Storage.Streams;\n#else\nusing System.Security.Cryptography;\n#endif\n#if SILVERLIGHT && !WINDOWS_PHONE\n    using System.Windows.Browser;\n#elif !SILVERLIGHT && !WINDOWS_PHONE\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps implement OAuth authentication\n    /// </summary>\n    public class OAuthBase\n    {\n        protected const string OAuthVersion = \"1.0\";\n        protected const string OAuthParameterPrefix = \"oauth_\";\n\n        //\n        // List of known and used oauth parameters' names\n        //        \n        protected const string OAuthAccessTypeKey = \"oauth_access_type\";\n        protected const string OAuthConsumerKeyKey = \"oauth_consumer_key\";\n        protected const string OAuthCallbackKey = \"oauth_callback\";\n        protected const string OAuthVersionKey = \"oauth_version\";\n        protected const string OAuthXAccessTypeKey = \"x_auth_access_type\";\n        protected const string OAuthSignatureMethodKey = \"oauth_signature_method\";\n        protected const string OAuthSignatureKey = \"oauth_signature\";\n        protected const string OAuthTimestampKey = \"oauth_timestamp\";\n        protected const string OAuthNonceKey = \"oauth_nonce\";\n        protected const string OAuthTokenKey = \"oauth_token\";\n        protected const string OAuthVerifierKey = \"oauth_verifier\";\n        protected const string OAuthTokenSecretKey = \"oauth_token_secret\";\n\n        protected const string Hmacsha1SignatureType = \"HMAC-SHA1\";\n        protected const string PlainTextSignatureType = \"PLAINTEXT\";\n        protected const string Rsasha1SignatureType = \"RSA-SHA1\";\n\n        protected Random random = new Random();\n\n#if NETFX_CORE\n\n        internal string HashWith(string input, string key)\n        {\n            MacAlgorithmProvider mac = MacAlgorithmProvider.OpenAlgorithm(\"HMAC_SHA1\");\n            IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);\n            CryptographicKey cryptoKey = mac.CreateKey(keyMaterial);\n            //IBuffer hash = hashProvider.HashData(CryptographicBuffer.ConvertStringToBinary(input, BinaryStringEncoding.Utf8));\n            IBuffer hash = CryptographicEngine.Sign(cryptoKey, CryptographicBuffer.ConvertStringToBinary(input, BinaryStringEncoding.Utf8));\n            return CryptographicBuffer.EncodeToBase64String(hash);\n        }\n#else\n        /// <summary>\n        /// Helper function to compute a hash value\n        /// </summary>\n        /// <param name=\"hashAlgorithm\">The hashing algoirhtm used. If that algorithm needs some initialization, like HMAC and its derivatives, they should be initialized prior to passing it to this function</param>\n        /// <param name=\"data\">The data to hash</param>\n        /// <returns>a Base64 string of the hash value</returns>\n        internal string ComputeHash(HashAlgorithm hashAlgorithm, string data)\n        {\n            if (hashAlgorithm == null)\n            {\n                throw new ArgumentNullException(\"You must specify a hashAlgorithm\", \"hashAlgorithm\");\n            }\n\n            if (string.IsNullOrEmpty(data))\n            {\n                throw new ArgumentNullException(\"You must provide data to hash\", \"data\");\n            }\n\n            byte[] dataBuffer = Encoding.UTF8.GetBytes(data);\n            byte[] hashBytes = hashAlgorithm.ComputeHash(dataBuffer);\n\n            return Convert.ToBase64String(hashBytes);\n        } \n#endif\n\n        /// <summary>\n        /// Internal function to cut out all non oauth query string parameters (all parameters not begining with \"oauth_\")\n        /// </summary>\n        /// <param name=\"parameters\">The query string part of the Url</param>\n        /// <returns>A list of QueryParameter each containing the parameter name and value</returns>\n        private List<QueryParameter> CloneQueryParameters(IEnumerable<QueryParameter> parameters)\n        {\n            var result = new List<QueryParameter>();\n\n            foreach (var pair in parameters)\n            {\n                string name = pair.Name;\n                string value = pair.Value;\n\n                if (!string.IsNullOrEmpty(name)\n                    && (!name.StartsWith(OAuthParameterPrefix, StringComparison.Ordinal)\n                        || name.StartsWith(OAuthAccessTypeKey, StringComparison.Ordinal)))\n                {\n                    result.Add(new QueryParameter(name, value ?? String.Empty));\n                }\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// Normalizes the request parameters according to the spec\n        /// </summary>\n        /// <param name=\"parameters\">The list of parameters already sorted</param>\n        /// <returns>a string representing the normalized parameters</returns>\n        protected string NormalizeRequestParameters(IList<QueryParameter> parameters)\n        {\n            StringBuilder sb = new StringBuilder();\n\n            for (int i = 0; i < parameters.Count; i++)\n            {\n                QueryParameter p = parameters[i];\n                sb.AppendFormat(CultureInfo.InvariantCulture, \"{0}={1}\", p.Name, p.Value);\n                sb.Append(\"&\");\n            }\n\n            if (sb.Length > 1)\n                sb.Length--;\n\n            return sb.ToString();\n        }\n\n        /// <summary>\n        /// Generate the signature base that is used to produce the signature\n        /// </summary>\n        /// <param name=\"request\">Request details</param>\n        /// <param name=\"consumerKey\">The consumer key</param>        \n        /// <param name=\"token\">The token, if available. If not available pass null or an empty string</param>\n        /// <param name=\"tokenSecret\">The token secret, if available. If not available pass null or an empty string</param>\n        /// <param name=\"callback\">Redirect URL for Web apps</param>\n        /// <param name=\"httpMethod\">The http method used. Must be a valid HTTP method verb (POST,GET,PUT, etc)</param>\n        /// <param name=\"nonce\">Unique value for this particular request</param>\n        /// <param name=\"signatureType\">The signature type. To use the default values use <see cref=\"OAuthBase.SignatureTypes\">OAuthBase.SignatureTypes</see>.</param>\n        /// <param name=\"verifier\">Number if using PIN authorization</param>\n        /// <param name=\"timeStamp\">Timestamp for this request</param>\n        /// <param name=\"normalizedUrl\">Url returned to caller</param>\n        /// <param name=\"normalizedRequestParameters\">Parameters returned to caller</param>\n        /// <returns>The signature base</returns>\n        public string GenerateSignatureBase(Request request, string consumerKey, string token, string tokenSecret, string verifier, string callback, string httpMethod, string timeStamp, string nonce, string signatureType, out string normalizedUrl, out string normalizedRequestParameters)\n        {\n            if (token == null)\n            {\n                token = string.Empty;\n            }\n\n            if (tokenSecret == null)\n            {\n                tokenSecret = string.Empty;\n            }\n\n            if (string.IsNullOrEmpty(consumerKey))\n            {\n                throw new ArgumentNullException(\"You must provide a consumerKey.\", \"consumerKey\");\n            }\n\n            if (string.IsNullOrEmpty(httpMethod))\n            {\n                throw new ArgumentNullException(\"You must provide an httpMethod.\", \"httpMethod\");\n            }\n\n            if (string.IsNullOrEmpty(signatureType))\n            {\n                throw new ArgumentNullException(\"You must provide a signatureType.\", \"signatureType\");\n            }\n\n            var parameters = CloneQueryParameters(request.RequestParameters);\n            parameters.Add(new QueryParameter(OAuthVersionKey, OAuthVersion));\n            parameters.Add(new QueryParameter(OAuthNonceKey, nonce));\n            parameters.Add(new QueryParameter(OAuthTimestampKey, timeStamp));\n            parameters.Add(new QueryParameter(OAuthSignatureMethodKey, signatureType));\n            parameters.Add(new QueryParameter(OAuthConsumerKeyKey, consumerKey));\n\n            if (!string.IsNullOrEmpty(callback))\n            {\n                parameters.Add(new QueryParameter(OAuthCallbackKey, callback));\n            }\n\n            if (!string.IsNullOrEmpty(token))\n            {\n                parameters.Add(new QueryParameter(OAuthTokenKey, token));\n            }\n\n            if (!string.IsNullOrEmpty(verifier))\n            {\n                parameters.Add(new QueryParameter(OAuthVerifierKey, verifier));\n            }\n\n            // need to UrlEncode (per section 5.1) all the parameter values now, before sorting\n            // see: http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iv-signing-requests/\n            foreach (var parm in parameters)\n                parm.Value = BuildUrlHelper.UrlEncode(parm.Value);\n\n            parameters.Sort(QueryParameter.defaultComparer);\n\n            var url = new Uri(request.Endpoint);\n            normalizedUrl = url.Scheme + \"://\";\n#if !SILVERLIGHT\n            normalizedUrl += url.Authority;\n#else\n            normalizedUrl += url.Host;\n\n            if (!((url.Scheme == \"http\" && url.Port == 80)\n                  || (url.Scheme == \"https\" && url.Port == 443)))\n            {\n                normalizedUrl += \":\" + url.Port;\n            }\n#endif\n            normalizedUrl += url.AbsolutePath;\n            normalizedRequestParameters = NormalizeRequestParameters(parameters);\n\n            var signatureBase = new StringBuilder();\n\n            signatureBase.AppendFormat(CultureInfo.InvariantCulture, \"{0}&\", httpMethod.ToUpper());\n            signatureBase.AppendFormat(CultureInfo.InvariantCulture, \"{0}&\", BuildUrlHelper.UrlEncode(normalizedUrl));\n            signatureBase.AppendFormat(CultureInfo.InvariantCulture, \"{0}\", BuildUrlHelper.UrlEncode(normalizedRequestParameters));\n\n            return signatureBase.ToString();\n        }\n\n        /// <summary>\n        /// Generates a signature using the specified signatureType \n        /// </summary>\n        /// <param name=\"request\">Request details</param>\n        /// <param name=\"consumerKey\">The consumer key</param>\n        /// <param name=\"consumerSecret\">The consumer seceret</param>\n        /// <param name=\"token\">The token, if available. If not available pass null or an empty string</param>\n        /// <param name=\"tokenSecret\">The token secret, if available. If not available pass null or an empty string</param>\n        /// <param name=\"callback\">Redirect URL for Web apps</param>\n        /// <param name=\"httpMethod\">The http method used. Must be a valid HTTP method verb (POST,GET,PUT, etc)</param>\n        /// <param name=\"nonce\">Unique value for this particular request</param>\n        /// <param name=\"signatureType\">The type of signature to use</param>\n        /// <param name=\"verifier\">Number if using PIN authorization</param>\n        /// <param name=\"timeStamp\">Timestamp for this request</param>\n        /// <param name=\"normalizedUrl\">Url returned to caller</param>\n        /// <param name=\"normalizedRequestParameters\">Parameters returned to caller</param>\n        /// <returns>A base64 string of the hash value</returns>\n        public string GenerateSignature(Request request, string consumerKey, string consumerSecret, string token, string tokenSecret, string verifier, string callback, string httpMethod, string timeStamp, string nonce, OAuthSignatureTypes signatureType, out string normalizedUrl, out string normalizedRequestParameters)\n        {\n            normalizedUrl = null;\n            normalizedRequestParameters = null;\n\n            switch (signatureType)\n            {\n                case OAuthSignatureTypes.Plaintext:\n                    return BuildUrlHelper.UrlEncode(\n                        string.Format(CultureInfo.InvariantCulture, \"{0}&{1}\", consumerSecret, tokenSecret));\n                case OAuthSignatureTypes.Hmacsha1:\n                    string signatureBase = GenerateSignatureBase(request, consumerKey, token, tokenSecret, verifier, callback, httpMethod, timeStamp, nonce, Hmacsha1SignatureType, out normalizedUrl, out normalizedRequestParameters);\n#if NETFX_CORE\n                    string hashKey =\n                        string.Format(\n                            CultureInfo.InvariantCulture, \"{0}&{1}\",\n                            BuildUrlHelper.UrlEncode(consumerSecret),\n                            BuildUrlHelper.UrlEncode(tokenSecret));\n                    return HashWith(signatureBase, hashKey);\n#else\n                var hmacsha1 = new HMACSHA1\n                    {\n                        Key =\n                            Encoding.UTF8.GetBytes(\n                                string.Format(\n                                    CultureInfo.InvariantCulture, \"{0}&{1}\", \n                                    BuildUrlHelper.UrlEncode(consumerSecret),\n                                    BuildUrlHelper.UrlEncode(tokenSecret)))\n                    };\n                    return ComputeHash(hmacsha1, signatureBase);\n#endif\n                case OAuthSignatureTypes.Rsasha1:\n                    throw new NotImplementedException();\n                default:\n                    throw new ArgumentException(\"Unknown signature type\", \"signatureType\");\n            }\n        }\n\n        /// <summary>\n        /// Generate the timestamp for the signature        \n        /// </summary>\n        /// <returns>timestamp</returns>\n        public virtual string GenerateTimeStamp()\n        {\n            //// Default implementation of UNIX time of the current UTC time\n            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);\n            return Math.Floor(ts.TotalSeconds).ToString(CultureInfo.InvariantCulture);\n        }\n\n        /// <summary>\n        /// Generate a nonce\n        /// </summary>\n        /// <returns>nonce</returns>\n        public virtual string GenerateNonce()\n        {\n            // Just a simple implementation of a random number between 123400 and 9999999\n            return random.Next(123400, 9999999).ToString(CultureInfo.InvariantCulture);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/OAuthSignatureTypes.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Eran Sandler -\n * OAuthBase Class\n * \n * http://oauth.googlecode.com/svn/code/csharp/\n * \n * Shannon Whitley -\n * Example of how to use modified version of\n * Eran Sandler's OAuthBase class in C#\n * \n * http://www.voiceoftech.com/swhitley/?p=681\n * \n * Joe Mayo -\n * \n * Modified 5/3/09\n ***********************************************************/\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Provides a predefined set of algorithms that are supported officially by the protocol\n    /// </summary>\n    public enum OAuthSignatureTypes\n    {\n        Hmacsha1,\n        Plaintext,\n        Rsasha1\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/OAuthTwitter.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Eran Sandler -\n * OAuthBase Class\n * \n * http://oauth.googlecode.com/svn/code/csharp/\n * \n * Shannon Whitley -\n * Example of how to use modified version of\n * Eran Sandler's OAuthBase class in C#\n * \n * http://www.voiceoftech.com/swhitley/?p=681\n * \n * Joe Mayo -\n * \n * Modified 5/17/09\n ***********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Net;\nusing System.IO;\nusing System.Threading;\n\n#if !SILVERLIGHT && !L2T_PCL\nusing System.IO.Compression;\n#else\nusing Ionic.Zlib;\n#endif\n#if SILVERLIGHT && !WINDOWS_PHONE\nusing System.Windows.Browser;\n#elif !SILVERLIGHT && !WINDOWS_PHONE && !NETFX_CORE\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps perform OAuth Authorization for LINQ to Twitter\n    /// </summary>\n    public class OAuthTwitter : OAuthBase, IOAuthTwitter\n    {\n        /// <summary>\n        /// user agent header sent to Twitter\n        /// </summary>\n        public string OAuthUserAgent { get; set; }\n\n        /// <summary>\n        /// Consumer Key\n        /// </summary>\n        public string OAuthConsumerKey { get; set; }\n\n        /// <summary>\n        /// Consumer Secret\n        /// </summary>\n        public string OAuthConsumerSecret { get; set; }\n\n        /// <summary>\n        /// OAuth Token\n        /// </summary>\n        public string OAuthToken { get; set; }\n\n        /// <summary>\n        /// OAuth Verifier\n        /// </summary>\n        public string OAuthVerifier { get; set; }\n\n        /// <summary>\n        /// OAuth Token Secret\n        /// </summary>\n        public string OAuthTokenSecret { get; set; }\n\n        /// <summary>\n        /// URL for Silverlight Proxy\n        /// </summary>\n        public string ProxyUrl { get; set; }\n\n#if !SILVERLIGHT && !NETFX_CORE\n        /// <summary>\n        /// Proxy for authorization requests.\n        /// </summary>\n        public WebProxy Proxy { get; set; }\n#endif\n\n        /// <summary>\n        /// Get the link to Twitter's authorization page for this application.\n        /// </summary>\n        /// <param name=\"readOnly\">true for read-only, otherwise read/Write</param>\n        /// <returns>The url with a valid request token, or a null string.</returns>\n        public string AuthorizationLinkGet(string requestToken, string authorizeUrl, string callback, bool forceLogin, AuthAccessType authAccessToken)\n        {\n            var request = new Request(requestToken);\n\n            if (authAccessToken != AuthAccessType.NoChange)\n            {\n                request.RequestParameters.Add(\n                    new QueryParameter(OAuthXAccessTypeKey, authAccessToken.ToString().ToLower()));\n            }\n\n            var response = OAuthWebRequest(HttpMethod.GET, request, null, EncodeToProtectMultiByteCharUrl(callback));\n\n            return PrepareAuthorizeUrl(authorizeUrl, forceLogin, response);\n        }\n  \n        string EncodeToProtectMultiByteCharUrl(string callback)\n        {\n            return callback == \"oob\" ? \"oob\" : new Uri(callback).AbsoluteUri;\n        }\n\n        string PrepareAuthorizeUrl(string authorizeUrl, bool forceLogin, string response)\n        {\n            string authUrl = string.Empty;\n\n            if (response.Length > 0)\n            {\n                var prefixChar = \"?\";\n\n                string oAuthToken =\n                    (from nameValPair in response.Split('&')\n                     let pair = nameValPair.Split('=')\n                     where pair[0] == \"oauth_token\"\n                     select pair[1])\n                    .SingleOrDefault();\n\n                if (oAuthToken != null)\n                {\n                    OAuthToken = oAuthToken;\n                    authUrl = authorizeUrl + \"?oauth_token=\" + oAuthToken;\n                    prefixChar = \"&\";\n                }\n\n                if (forceLogin)\n                {\n                    authUrl += prefixChar + \"force_login=true\";\n                }\n            }\n            return authUrl;\n        }\n\n        /// <summary>\n        /// Requests an access token from Twitter\n        /// </summary>\n        /// <param name=\"accessTokenUrl\">Base url for request</param>\n        /// <param name=\"postData\">POST body params</param>\n        /// <param name=\"screenName\">Returns user's Twitter screen name</param>\n        /// <param name=\"userID\">Returns user's Twitter ID</param>\n        public void PostAccessToken(Request request, IDictionary<string, string> postData, out string screenName, out string userID)\n        {\n            screenName = string.Empty;\n            userID = string.Empty;\n            var response = OAuthWebRequest(HttpMethod.POST, request, postData, string.Empty);\n\n            ProcessAccessTokenResponse(ref screenName, ref userID, response);\n        }\n\n        /// <summary>\n        /// Exchange the request token for an access token.\n        /// </summary>\n        /// <param name=\"authToken\">The oauth_token is supplied by Twitter's authorization page following the callback.</param>\n        public void AccessTokenGet(string authToken, string verifier, string accessTokenUrl, string callback, out string screenName, out string userID)\n        {\n            screenName = string.Empty;\n            userID = string.Empty;\n\n            OAuthToken = authToken;\n            OAuthVerifier = verifier;\n            var request = new Request(accessTokenUrl);\n            var response = OAuthWebRequest(HttpMethod.GET, request, null, callback);\n\n            ProcessAccessTokenResponse(ref screenName, ref userID, response);\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"screenName\"></param>\n        /// <param name=\"userID\"></param>\n        /// <param name=\"response\"></param>\n        private void ProcessAccessTokenResponse(ref string screenName, ref string userID, string response)\n        {\n            if (response.Length > 0)\n            {\n                var qs =\n                    (from nameValPair in response.Split('&')\n                     let pair = nameValPair.Split('=')\n                     select new\n                     {\n                         Key = pair[0],\n                         Value = pair[1]\n                     })\n                    .ToDictionary(\n                        pair => pair.Key,\n                        pair => pair.Value);\n\n                if (qs[\"oauth_token\"] != null)\n                {\n                    OAuthToken = qs[\"oauth_token\"];\n                }\n\n                if (qs[\"oauth_token_secret\"] != null)\n                {\n                    OAuthTokenSecret = qs[\"oauth_token_secret\"];\n                }\n\n                if (qs[\"screen_name\"] != null)\n                {\n                    screenName = qs[\"screen_name\"];\n                }\n\n                if (qs[\"user_id\"] != null)\n                {\n                    userID = qs[\"user_id\"];\n                }\n            }\n        }\n\n        /// <summary>\n        /// returns a query string for an OAuth request\n        /// </summary>\n        /// <param name=\"url\">Twitter query</param>\n        /// <returns>Query string with OAuth parameters</returns>\n        public void GetOAuthQueryString(HttpMethod method, Request request, string callback, out string outUrl, out string queryString)\n        {\n            string nonce = GenerateNonce();\n            string timeStamp = GenerateTimeStamp();\n\n            //Generate Signature\n            string sig = GenerateSignature(request,\n                OAuthConsumerKey,\n                OAuthConsumerSecret,\n                OAuthToken,\n                OAuthTokenSecret,\n                OAuthVerifier,\n                callback,\n                method.ToString(),\n                timeStamp,\n                nonce,\n                OAuthSignatureTypes.Hmacsha1,\n                out outUrl,\n                out queryString);\n\n            queryString += \"&oauth_signature=\" + BuildUrlHelper.UrlEncode(sig);\n        }\n\n        /// <summary>\n        /// processes POST request parameters\n        /// </summary>\n        /// <param name=\"reqest\">request having endpoint without query string and any query parameters</param>\n        /// <param name=\"args\">extra query-string parameters</param>\n        public string GetOAuthQueryStringForPost(Request request, IDictionary<string, string> postData)\n        {\n            OAuthVerifier = null;\n\n            string outUrl;\n            string queryString;\n            GetOAuthQueryString(HttpMethod.POST, request, string.Empty, out outUrl, out queryString);\n\n            const int Key = 0;\n            const int Value = 1;\n\n            var headerItems =\n                from param in queryString.Split('&')\n                let keyValPair = param.Split('=')\n                select\n                    keyValPair[Key] +\n                    \"=\\\"\" +\n                    keyValPair[Value] +\n                    \"\\\"\";\n\n            return \"OAuth \" + string.Join(\",\", headerItems.ToArray());\n        }\n\n        internal string PrepareAuthHeader(string authHeader)\n        {\n            var encodedParams =\n                string.Join(\n                    \",\",\n                    (from param in authHeader.Split('&')\n                     let args = param.Split('=')\n                     where !args[0].Contains(\"realm\")\n                     select args[0] + \"=\\\"\" + args[1] + \"\\\"\")\n                    .ToArray());\n\n            return \"OAuth \" + encodedParams;\n        }\n\n        internal string PrepareAuthHeader(string authHeader, Request request)\n        {\n            var reqParams = request.RequestParameters.Select(rp => rp.Name);\n            var encodedParams =\n                string.Join(\n                    \",\",\n                    (from param in authHeader.Split('&')\n                     let args = param.Split('=')\n                     where !args[0].Contains(\"realm\") &&\n                           !reqParams.Contains(args[0])\n                     select args[0] + \"=\\\"\" + args[1] + \"\\\"\")\n                    .ToArray());\n\n            return \"OAuth \" + encodedParams;\n        }\n\n        private string GatherPostData(IDictionary<string, string> postData)\n        {\n            var queryParams = new StringBuilder();\n\n            if (postData != null && postData.Count > 0)\n            {\n                foreach (var entry in postData)\n                {\n                    queryParams\n                        .Append(entry.Key)\n                        .Append('=')\n                        .Append(BuildUrlHelper.UrlEncode(entry.Value))\n                        .Append('&');\n                }\n\n                queryParams.Length--;   // discard trailing &\n            }\n\n            return queryParams.ToString();\n        }\n\n        /// <summary>\n        /// Submit a web request using oAuth.\n        /// </summary>\n        /// <param name=\"method\">GET or POST</param>\n        /// <param name=\"request\">Request details</param>\n        /// <param name=\"postData\">Data to post (querystring format)</param>\n        /// <returns>The web server response.</returns>\n        public string OAuthWebRequest(HttpMethod method, Request request, IDictionary<string, string> postData, string callback)\n        {\n            //Setup postData for signing.\n            //Add the postData to the querystring.\n            var url = request.FullUrl;\n\n            if (method == HttpMethod.POST)\n            {\n                if (postData != null && postData.Count > 0)\n                {\n                    foreach (var postEntry in postData)\n                        if (!string.IsNullOrEmpty(postEntry.Value))\n                            request.RequestParameters.Add(new QueryParameter(postEntry.Key, postEntry.Value));\n                }\n            }\n\n            string nonce = GenerateNonce();\n            string timeStamp = GenerateTimeStamp();\n            string outUrl;\n            string querystring;\n\n            //Generate Signature\n            string sig = GenerateSignature(request,\n                OAuthConsumerKey,\n                OAuthConsumerSecret,\n                OAuthToken,\n                OAuthTokenSecret,\n                OAuthVerifier,\n                callback, \n                method.ToString(),\n                timeStamp,\n                nonce,\n                OAuthSignatureTypes.Hmacsha1,\n                out outUrl,\n                out querystring);\n\n            querystring += \"&oauth_signature=\" + BuildUrlHelper.UrlEncode(sig);\n\n            var ret = WebRequest(method, url, querystring, postData);\n            return ret;\n        }\n\n        /// <summary>\n        /// Web Request Wrapper\n        /// </summary>\n        /// <param name=\"method\">Http Method</param>\n        /// <param name=\"url\">Full url to the web resource</param>\n        /// <param name=\"postData\">Data to post in querystring format</param>\n        /// <returns>The web server response.</returns>\n        public string WebRequest(HttpMethod method, string url, string authHeader, IDictionary<string, string> postData)\n        {\n            string responseData = \"\";\n\n            var webRequest = System.Net.WebRequest.Create(ProxyUrl + url) as HttpWebRequest;\n            webRequest.Method = method.ToString();\n#if !SILVERLIGHT && !NETFX_CORE\n            webRequest.ServicePoint.Expect100Continue = false;\n            webRequest.UserAgent = OAuthUserAgent;\n            if (Proxy != null)\n                webRequest.Proxy = Proxy;\n#endif\n            webRequest.Headers[HttpRequestHeader.Authorization] = PrepareAuthHeader(authHeader);\n            webRequest.Headers[HttpRequestHeader.AcceptEncoding] = \"deflate,gzip\";\n\n            if (method == HttpMethod.POST)\n            {\n                webRequest.ContentType = \"application/x-www-form-urlencoded\";\n                var postBody = GatherPostData(postData);\n                byte[] postDataBytes = Encoding.UTF8.GetBytes(postBody);\n\n#if SILVERLIGHT\n                webRequest.BeginGetRequestStream(\n                    new AsyncCallback(\n                        ar =>\n                        {\n                            using (var requestStream = webRequest.EndGetRequestStream(ar))\n                            {\n                                requestStream.Write(postDataBytes, 0, postDataBytes.Length);\n                            }\n                        }), null);\n#else\n                Exception asyncException = null;\n\n                using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n                {\n                    webRequest.BeginGetRequestStream(\n                        new AsyncCallback(\n                            ar =>\n                            {\n                                try\n                                {\n                                    using (var requestStream = webRequest.EndGetRequestStream(ar))\n                                    {\n                                        requestStream.Write(postDataBytes, 0, postDataBytes.Length);\n                                    }\n                                }\n                                catch (Exception ex)\n                                {\n                                    asyncException = ex;\n                                }\n                                finally\n                                {\n                                    resetEvent.Set();\n                                }\n                            }), null);\n\n                    resetEvent.WaitOne();\n                }\n\n                if (asyncException != null)\n\t            {\n                    throw asyncException;\n\t            }\n#endif\n            }\n\n#if !SILVERLIGHT\n            responseData = WebResponseGet(webRequest); \n#endif\n\n            webRequest = null;\n\n            return responseData;\n        }\n\n        /// <summary>\n        /// Process the web response.\n        /// </summary>\n        /// <param name=\"webRequest\">The request object.</param>\n        /// <returns>The response data.</returns>\n        public string WebResponseGet(HttpWebRequest webRequest)\n        {\n            string responseData = \"\";\n\n            Exception asyncException = null;\n\n            using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n            {\n                HttpWebResponse res = null;\n\n                webRequest.BeginGetResponse(\n                    new AsyncCallback(\n                        ar =>\n                        {\n                            try\n                            {\n                                res = webRequest.EndGetResponse(ar) as HttpWebResponse;\n                                using (var respStream = res.GetResponseStream())\n                                {\n                                    string contentEncoding = res.Headers[\"Content-Encoding\"] ?? \"\";\n                                    if (contentEncoding.ToLower().Contains(\"gzip\"))\n                                    {\n                                        using (var gzip = new GZipStream(respStream, CompressionMode.Decompress))\n                                        {\n                                            using (var reader = new StreamReader(gzip))\n                                            {\n                                                responseData = reader.ReadToEnd();\n                                            }\n                                        }\n                                    }\n                                    else\n                                    {\n                                        using (var respReader = new StreamReader(respStream))\n                                        {\n                                            responseData = respReader.ReadToEnd();\n                                        }\n                                    }\n                                }\n                            }\n                            catch (Exception ex)\n                            {\n                                asyncException = ex;\n                            }\n                            finally\n                            {\n                                resetEvent.Set();\n                            }\n                        }), null);\n\n                resetEvent.WaitOne();\n            }\n\n            if (asyncException != null)\n            {\n                throw asyncException;\n            }\n\n            return responseData;\n        }\n\n        /// <summary>\n        /// Extracts a value from a query string matching a key\n        /// </summary>\n        /// <param name=\"queryString\">query string</param>\n        /// <param name=\"paramKey\">key to match val</param>\n        /// <returns>value matching key</returns>\n        public string GetUrlParamValue(string queryString, string paramKey)\n        {\n            if (string.IsNullOrEmpty(queryString))\n            {\n                return null;\n            }\n\n            string[] keyValPairs = queryString.TrimStart('?').Split('&');\n\n            var paramVal =\n                (from keyValPair in keyValPairs\n                 let pair = keyValPair.Split('=')\n                 let key = pair[0]\n                 let val = pair.Length == 2 ? pair[1] : string.Empty\n                 where key == paramKey\n                 select pair[1])\n                .SingleOrDefault();\n\n            return paramVal;\n        }\n\n        /// <summary>\n        /// Removes OAuth parameters from URL\n        /// </summary>\n        /// <param name=\"fullUrl\">Raw url with OAuth parameters</param>\n        /// <returns>Filtered url without OAuth parameters</returns>\n        public string FilterRequestParameters(Uri fullUrl)\n        {\n            const int Domain = 0;\n            const int Params = 1;\n\n            if (fullUrl == null)\n            {\n                return string.Empty;\n            }\n\n            string filteredParams = string.Empty;\n\n            string[] urlParts = fullUrl.ToString().Split('?');\n\n            if (urlParts.Length == 2 && !string.IsNullOrEmpty(urlParts[Params]))\n            {\n                filteredParams =\n                    string.Join(\n                        \"&\",\n                        (from param in urlParts[Params].Split('&')\n                         let args = param.Split('=')\n                         where !args[0].StartsWith(\"oauth_\")\n                         select param)\n                        .ToArray());\n            }\n\n            return urlParts[Domain] + (filteredParams == string.Empty ? string.Empty : \"?\" + filteredParams);\n        }\n\n        public HttpWebRequest GetHttpGetRequest(Uri oauthUrl, string callbackUrl, AuthAccessType authAccessType)\n        {\n            string signedUrl = null;\n            string queryString = null;\n            string callback = callbackUrl ?? string.Empty;\n            var request = new Request(oauthUrl.ToString());\n            GetOAuthQueryString(HttpMethod.GET, request, callback, out signedUrl, out queryString);\n            \n            var finalUrl = ProxyUrl + request.FullUrl;\n\n            var req = System.Net.WebRequest.Create(finalUrl) as HttpWebRequest;\n            req.Headers[HttpRequestHeader.Authorization] = PrepareAuthHeader(queryString);\n            req.Method = HttpMethod.GET.ToString();\n\n#if !SILVERLIGHT || WINDOWS_PHONE\n            req.Headers[HttpRequestHeader.AcceptEncoding] = \"deflate,gzip\";\n#endif\n\n#if !SILVERLIGHT && !NETFX_CORE\n            req.ServicePoint.Expect100Continue = false;\n            req.UserAgent = OAuthUserAgent;\n            if (Proxy != null)\n                req.Proxy = Proxy;\n#endif\n            return req;\n        }\n\n        public HttpWebRequest GetHttpPostRequest(Uri oauthUrl)\n        {\n            string url = oauthUrl.ToString();\n            var request = new Request(url);\n            string oauthSig = GetOAuthQueryStringForPost(request, null);\n            string baseUrl = url.Split('?')[0];\n\n            var finalUrl = ProxyUrl + baseUrl;\n\n            var req = System.Net.WebRequest.Create(finalUrl) as HttpWebRequest;\n            req.Headers[HttpRequestHeader.Authorization] = oauthSig;\n            req.Method = HttpMethod.POST.ToString();\n\n#if !SILVERLIGHT && !NETFX_CORE\n            req.ServicePoint.Expect100Continue = false;\n            req.UserAgent = OAuthUserAgent;\n#endif\n            return req;\n        }\n\n#if OLDSCHOOL\n        /// <summary>\n        /// Gets a signed OAuth Header\n        /// </summary>\n        /// <param name=\"url\">Request Url</param>\n        /// <param name=\"callbackUrl\">Callback Url</param>\n        /// <returns></returns>\n        public string GetOAuthHeader(Request request, Uri callbackUrl)\n        {\n            string outUrl = string.Empty;\n            string queryString = string.Empty;\n            string nonce = this.GenerateNonce();\n            string timeStamp = this.GenerateTimeStamp();\n            string callback = callbackUrl == null ? string.Empty : callbackUrl.ToString();\n\n            //Generate Signature\n            string sig = this.GenerateSignature(request,\n                this.OAuthConsumerKey,\n                this.OAuthConsumerSecret,\n                this.OAuthToken,\n                this.OAuthTokenSecret,\n                this.OAuthVerifier,\n                callback,\n                HttpMethod.GET.ToString(),\n                timeStamp,\n                nonce,\n                OAuthSignatureTypes.HMACSHA1,\n                out outUrl,\n                out queryString);\n\n            queryString += \"&oauth_signature=\" + HttpUtility.UrlEncode(sig);\n\n            return PrepareAuthHeader(queryString);\n        }\n#endif\n\n        /// <summary>\n        /// Asynchronous request for OAuth request token\n        /// </summary>\n        /// <param name=\"oauthRequestTokenUrl\">Url to make initial request on</param>\n        /// <param name=\"oauthAuthorizeUrl\">Url to send user to for authorization</param>\n        /// <param name=\"twitterCallbackUrl\">Url for Twitter to redirect to after authorization (null for Pin authorization)</param>\n        /// <param name=\"forceLogin\">Should user be forced to log in to authorize this app</param>\n        /// <param name=\"authorizationCallback\">Lambda to let program perform redirect to authorization page</param>\n        /// <param name=\"authenticationCompleteCallback\">Lambda to invoke to let user know when authorization completes</param>\n        public void GetRequestTokenAsync(\n            Uri oauthRequestTokenUrl, \n            Uri oauthAuthorizeUrl, \n            string twitterCallbackUrl, \n            AuthAccessType authAccessType,\n            bool forceLogin, \n            Action<string> authorizationCallback, \n            Action<TwitterAsyncResponse<object>> authenticationCompleteCallback)\n        {\n            var req = GetHttpGetRequest(oauthRequestTokenUrl, twitterCallbackUrl, authAccessType);\n\n            req.BeginGetResponse(\n                new AsyncCallback(\n                    ar =>\n                    {\n                        var twitterResponse = new TwitterAsyncResponse<object>();\n\n                        try\n                        {\n                            var res = req.EndGetResponse(ar) as HttpWebResponse;\n\n                            string requestTokenResponse = GetHttpResponse(res);\n\n                            string authorizationUrl = PrepareAuthorizeUrl(oauthAuthorizeUrl.ToString(), forceLogin, requestTokenResponse);\n\n                            authorizationCallback(authorizationUrl);\n                        }\n                        catch (TwitterQueryException tqe)\n                        {\n                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                            twitterResponse.Message = \"Error while communicating with Twitter. Please see Error property for details.\";\n                            twitterResponse.Exception = tqe;\n                        }\n                        catch (Exception ex)\n                        {\n                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                            twitterResponse.Message = \"Error during LINQ to Twitter processing. Please see Error property for details.\";\n                            twitterResponse.Exception = ex;\n                        }\n                        finally\n                        {\n                            if (authenticationCompleteCallback != null)\n                            {\n                                authenticationCompleteCallback(twitterResponse); \n                            }\n                        }\n                    }), null);\n        }\n  \n        /// <summary>\n        /// Asynchronous request for OAuth access token\n        /// </summary>\n        /// <param name=\"verifier\">Verification token provided by Twitter after user authorizes (7-digit number for Pin authorization too)</param>\n        /// <param name=\"oauthAccessTokenUrl\">Access token URL</param>\n        /// <param name=\"twitterCallbackUrl\">URL for your app that Twitter redirects to after authorization (null for Pin authorization)</param>\n        /// <param name=\"authenticationCompleteCallback\">Callback to application after response completes (contains UserID and ScreenName)</param>\n        public void GetAccessTokenAsync(\n            string verifier,\n            Uri oauthAccessTokenUrl,\n            string twitterCallbackUrl,\n            AuthAccessType authAccessType,\n            Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback)\n        {\n            OAuthVerifier = verifier;\n\n            var req = GetHttpGetRequest(oauthAccessTokenUrl, twitterCallbackUrl, authAccessType);\n\n            req.BeginGetResponse(\n                new AsyncCallback(\n                    ar =>\n                    {\n                        string screenName = string.Empty;\n                        string userID = string.Empty;\n\n                        var twitterResponse = new TwitterAsyncResponse<UserIdentifier>();\n\n                        try\n                        {\n\n                            var res = req.EndGetResponse(ar) as HttpWebResponse;\n\n                            string accessTokenResponse = GetHttpResponse(res);\n\n                            ProcessAccessTokenResponse(ref screenName, ref userID, accessTokenResponse);\n                        }\n                        catch (TwitterQueryException tqe)\n                        {\n                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                            twitterResponse.Message = \"Error while communicating with Twitter. Please see Error property for details.\";\n                            twitterResponse.Exception = tqe;\n                        }\n                        catch (Exception ex)\n                        {\n                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                            twitterResponse.Message = \"Error during LINQ to Twitter processing. Please see Error property for details.\";\n                            twitterResponse.Exception = ex;\n                        }\n                        finally\n                        {\n                            if (authenticationCompleteCallback != null)\n                            {\n                                twitterResponse.State =\n                                    new UserIdentifier\n                                    {\n                                        ID = userID,\n                                        UserID = userID,\n                                        ScreenName = screenName\n                                    };\n                                authenticationCompleteCallback(twitterResponse); \n                            }\n                        }\n                    }), null);\n\n        }\n\n        string GetHttpResponse(HttpWebResponse res)\n        {\n            const int WorkingBufferSize = 1024;\n            string requestTokenResponse = string.Empty;\n            string contentEncoding = string.Empty;\n\n            using (var respStream = res.GetResponseStream())\n            {\n#if !SILVERLIGHT || WINDOWS_PHONE\n                contentEncoding = res.Headers[\"Content-Encoding\"] ?? \"\";\n#endif\n                if (contentEncoding.ToLower().Contains(\"gzip\"))\n                {\n                    using (var gzip = new GZipStream(respStream, CompressionMode.Decompress))\n                    {\n                        using (var memStr = new MemoryStream())\n                        {\n                            byte[] buffer = new byte[WorkingBufferSize];\n                            int n;\n                            while ((n = gzip.Read(buffer, 0, buffer.Length)) != 0)\n                            {\n                                memStr.Write(buffer, 0, n);\n                            }\n                            memStr.Position = 0;\n                            using (var strmRdr = new StreamReader(memStr))\n                            {\n                                requestTokenResponse = strmRdr.ReadToEnd();\n                            }\n                        }\n                    }\n                }\n                else\n                {\n                    using (var respReader = new StreamReader(respStream))\n                    {\n                        requestTokenResponse = respReader.ReadToEnd();\n                    }\n                }\n            }\n\n            return requestTokenResponse;\n        }\n\n        /// <summary>\n        /// Posts asynchronously to Twitter for access token\n        /// </summary>\n        /// <param name=\"accessTokenUrl\">Access token URL</param>\n        /// <param name=\"postData\">Post info</param>\n        /// <param name=\"authorizationCompleteCallback\">Invoked when request finishes</param>\n        public void PostAccessTokenAsync(Request request, IDictionary<string, string> postData, Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback)\n        {\n            var accessTokenUrl = new Uri(request.FullUrl);\n            var req = GetHttpPostRequest(accessTokenUrl);\n\n            req.ContentType = \"application/x-www-form-urlencoded\";\n\n            var postBody = GatherPostData(postData);\n            byte[] postDataBytes = Encoding.UTF8.GetBytes(postBody);\n\n#if SILVERLIGHT\n                req.BeginGetRequestStream(\n                    new AsyncCallback(\n                        reqAr =>\n                        {\n                            using (var requestStream = req.EndGetRequestStream(reqAr))\n                            {\n                                requestStream.Write(postDataBytes, 0, postDataBytes.Length);\n                            }\n\n                            req.BeginGetResponse(\n                                new AsyncCallback(\n                                    resAr =>\n                                    {\n                                        string screenName = string.Empty;\n                                        string userID = string.Empty;\n\n                                        var twitterResponse = new TwitterAsyncResponse<UserIdentifier>();\n\n                                        try\n                                        {\n                                            string accessTokenResponse = string.Empty;\n\n                                            var res = req.EndGetResponse(resAr) as HttpWebResponse;\n\n                                            using (var respStream = res.GetResponseStream())\n                                            using (var respReader = new StreamReader(respStream))\n                                            {\n                                                accessTokenResponse = respReader.ReadToEnd();\n                                            }\n\n                                            ProcessAccessTokenResponse(ref screenName, ref userID, accessTokenResponse);\n                                        }\n                                        catch (TwitterQueryException tqe)\n                                        {\n                                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                                            twitterResponse.Message = \"Error while communicating with Twitter. Please see Error property for details.\";\n                                            twitterResponse.Exception = tqe;\n                                        }\n                                        catch (Exception ex)\n                                        {\n                                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                                            twitterResponse.Message = \"Error during LINQ to Twitter processing. Please see Error property for details.\";\n                                            twitterResponse.Exception = ex;\n                                        }\n                                        finally\n                                        {\n                                            if (authenticationCompleteCallback != null)\n                                            {\n                                                twitterResponse.State =\n                                                    new UserIdentifier\n                                                    {\n                                                        ID = userID,\n                                                        UserID = userID,\n                                                        ScreenName = screenName\n                                                    };\n                                                authenticationCompleteCallback(twitterResponse);\n                                            }\n                                        }\n                                    }), null);\n                        }), null);\n#else\n            Exception asyncException = null;\n\n            using (var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false))\n            {\n                req.BeginGetRequestStream(\n                    new AsyncCallback(\n                        ar =>\n                        {\n                            try\n                            {\n                                using (var requestStream = req.EndGetRequestStream(ar))\n                                {\n                                    requestStream.Write(postDataBytes, 0, postDataBytes.Length);\n                                }\n                            }\n                            catch (Exception ex)\n                            {\n                                asyncException = ex;\n                            }\n                            finally\n                            {\n                                resetEvent.Set();\n                            }\n                        }), null);\n\n                resetEvent.WaitOne();\n            }\n\n            if (asyncException != null)\n            {\n                throw asyncException;\n            }\n\n            req.BeginGetResponse(\n                new AsyncCallback(\n                    ar =>\n                    {\n                        string screenName = string.Empty;\n                        string userID = string.Empty;\n\n                        var twitterResponse = new TwitterAsyncResponse<UserIdentifier>();\n\n                        try\n                        {\n                            string accessTokenResponse = string.Empty;\n\n                            var res = req.EndGetResponse(ar) as HttpWebResponse;\n\n                            using (var respStream = res.GetResponseStream())\n                            using (var respReader = new StreamReader(respStream))\n                            {\n                                accessTokenResponse = respReader.ReadToEnd();\n                            }\n\n                            ProcessAccessTokenResponse(ref screenName, ref userID, accessTokenResponse);\n                        }\n                        catch (TwitterQueryException tqe)\n                        {\n                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                            twitterResponse.Message = \"Error while communicating with Twitter. Please see Error property for details.\";\n                            twitterResponse.Exception = tqe;\n                        }\n                        catch (Exception ex)\n                        {\n                            twitterResponse.Status = TwitterErrorStatus.TwitterApiError;\n                            twitterResponse.Message = \"Error during LINQ to Twitter processing. Please see Error property for details.\";\n                            twitterResponse.Exception = ex;\n                        }\n                        finally\n                        {\n                            if (authenticationCompleteCallback != null)\n                            {\n                                twitterResponse.State =\n                                    new UserIdentifier\n                                    {\n                                        ID = userID,\n                                        UserID = userID,\n                                        ScreenName = screenName\n                                    };\n                                authenticationCompleteCallback(twitterResponse);\n                            }\n                        }\n                    }), null);\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/PinAuthorizer.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public class PinAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        /// <summary>\n        /// PIN-based authorization requires a 7-digit pin that is provided by Twitter.\n        /// The user must copy that PIN and give it back to the program to use as a verifier\n        /// in getting the final access token from Twitter.  You should write code (a lambda)\n        /// that allows the user to provide this pin that this code will return.\n        /// </summary>\n        public Func<string> GetPin { get; set; }\n\n        /// <summary>\n        /// Action to redirect user to Twitter authorization page\n        /// </summary>\n        public Action<string> GoToTwitterAuthorization { get; set; }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        public void Authorize()\n        {\n            Authorize(false);\n        }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        /// <param name=\"forceLogin\">Force the user to enter their name.</param>\n        public void Authorize(bool forceLogin)\n        {\n            if (IsAuthorized) return;\n\n            if (GetPin == null)\n            {\n                throw new InvalidOperationException(\"GetPin must have a handler before calling Authorize.\");\n            }\n\n            if (GoToTwitterAuthorization == null)\n            {\n                throw new InvalidOperationException(\"GoToTwitterAuthorization must have a handler before calling Authorize.\");\n            }\n\n            string link = OAuthTwitter.AuthorizationLinkGet(OAuthRequestTokenUrl, OAuthAuthorizeUrl, \"oob\", forceLogin, AuthAccessType);\n            GoToTwitterAuthorization(link);\n\n            string verifier = GetPin();\n\n            // TODO: Refactor to share similar logic with WebAuthorizer\n            string oAuthToken =\n                (from nameValPair in new Uri(link).Query.TrimStart('?').Split('&')\n                 let pair = nameValPair.Split('=')\n                 where pair[0] == \"oauth_token\"\n                 select pair[1])\n                .SingleOrDefault();\n\n            string screenName;\n            string userID;\n            OAuthTwitter.AccessTokenGet(oAuthToken, verifier, OAuthAccessTokenUrl, string.Empty, out screenName, out userID);\n\n            ScreenName = screenName;\n            UserId = userID;\n\n            Credentials.OAuthToken = OAuthTwitter.OAuthToken;\n            Credentials.AccessToken = OAuthTwitter.OAuthTokenSecret;\n            Credentials.ScreenName = screenName;\n            Credentials.UserId = userID;\n        }\n\n        /// <summary>\n        /// Asynchronously starts the authorization process\n        /// </summary>\n        /// <param name=\"authorizationCompleteCallback\">Action you provide for when authorization completes.</param>\n        public void BeginAuthorize(Action<TwitterAsyncResponse<object>> authorizationCompleteCallback)\n        {\n            if (IsAuthorized) return;\n\n            if (GoToTwitterAuthorization == null)\n            {\n                throw new InvalidOperationException(\"GoToTwitterAuthorization must have a handler before calling BeginAuthorize.\");\n            }\n\n            OAuthTwitter.GetRequestTokenAsync(new Uri(OAuthRequestTokenUrl), new Uri(OAuthAuthorizeUrl), \"oob\", AuthAccessType, false, GoToTwitterAuthorization, authorizationCompleteCallback);\n        }\n\n        /// <summary>\n        /// Asynchronously finishes the authorization process\n        /// </summary>\n        /// <param name=\"pin\">Set this to the 7-digit PIN that Twitter provides after the user authorizes your application</param>\n        /// <param name=\"authorizationCompleteCallback\">Action you provide for when authorization completes.</param>\n        public void CompleteAuthorize(string pin, Action<TwitterAsyncResponse<UserIdentifier>> authorizationCompleteCallback)\n        {\n            if (IsAuthorized) return;\n\n            if (pin == null)\n            {\n                throw new ArgumentNullException(\"pin\", \"pin is required\");\n            }\n\n            OAuthTwitter.GetAccessTokenAsync(\n                pin, new Uri(OAuthAccessTokenUrl), \"oob\", AuthAccessType.NoChange, \n                resp =>\n                {\n                    Credentials.OAuthToken = OAuthTwitter.OAuthToken;\n                    Credentials.AccessToken = OAuthTwitter.OAuthTokenSecret;\n                    UserIdentifier user = resp.State;\n                    if (user != null)\n                    {\n                        Credentials.ScreenName = user.ScreenName;\n                        Credentials.UserId = user.UserID;\n                    }\n\n                    authorizationCompleteCallback(resp);\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/SignInAuthorizer.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class SignInAuthorizer : WebAuthorizer, ITwitterAuthorizer\n    {\n        public SignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        /// <param name=\"forceLogin\">Forces user to login for Sign-In with Twitter scenarios</param>\n        /// <param name=\"callback\">This is where you want Twitter to redirect to after authorization</param>\n        public new void BeginAuthorization(Uri callback, bool forceLogin)\n        {\n            base.BeginAuthorization(callback, forceLogin);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/SilverlightAuthorizer.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public class SilverlightAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public Uri Callback { get; set; }\n\n        /// <summary>\n        /// This is a hook where you can assign\n        /// a lambda to perform the technology\n        /// specific redirection action.\n        /// \n        /// The string passed as the lambda paramter\n        /// is the Twitter authorization URL.\n        /// </summary>\n        public Action<string> PerformRedirect { get; set; }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        public void Authorize()\n        {\n            throw new NotImplementedException();\n        }\n\n        /// <summary>\n        /// Asynchronously starts the authorization process\n        /// </summary>\n        /// <param name=\"authorizationCompleteCallback\">Action you provide for when authorization completes.</param>\n        public void BeginAuthorize(Uri callback, Action<TwitterAsyncResponse<object>> authorizationCompleteCallback)\n        {\n            if (IsAuthorized) return;\n\n            if (PerformRedirect == null)\n            {\n                throw new InvalidOperationException(\"GoToTwitterAuthorization must have a handler before calling BeginAuthorize.\");\n            }\n\n            OAuthTwitter.GetRequestTokenAsync(new Uri(OAuthRequestTokenUrl), new Uri(OAuthAuthorizeUrl), callback.ToString(), AuthAccessType, false, PerformRedirect, authorizationCompleteCallback);\n        }\n\n        public bool IsAuthorizing \n        {\n            get\n            {\n                return !string.IsNullOrEmpty(Credentials.OAuthToken);\n            }\n        }\n\n        /// <summary>\n        /// Asynchronously finishes the authorization process\n        /// </summary>\n        /// <param name=\"callback\">Callback Url that Twitter has added parameters to</param>\n        /// <param name=\"authorizationCompleteCallback\">Action you provide for when authorization completes.</param>\n        public void CompleteAuthorize(Uri callback, Action<TwitterAsyncResponse<UserIdentifier>> authorizationCompleteCallback)\n        {\n            if (IsAuthorized) return;\n\n            const int QueryPart = 1;\n            string[] callbackParts = callback.OriginalString.Split('?');\n\n            if (callbackParts.Length == 2)\n            {\n                string oauthToken = OAuthTwitter.GetUrlParamValue(callbackParts[QueryPart], \"oauth_token\");\n                Credentials.OAuthToken = oauthToken;\n                OAuthTwitter.OAuthToken = oauthToken;\n\n                // TODO: Page navigation (i.e. Twitter # handling) is a little quirky, this needs more analysis - Joe\n\n                // we have to split on # because Twitter appends #PageName at the end of the url, \n                // which identifies the Silverlight page to navigate to, but is not part of the verifier\n                string verifier = \n                    OAuthTwitter\n                        .GetUrlParamValue(callbackParts[QueryPart], \"oauth_verifier\")\n                        .Split('#')[0];\n\n                if (verifier != null)\n                {\n                    OAuthTwitter.GetAccessTokenAsync(verifier, new Uri(OAuthAccessTokenUrl), null, AuthAccessType.NoChange, authorizationCompleteCallback);\n                } \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/SingleUserAuthorizer.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public class SingleUserAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        /// <summary>\n        /// Required by interface to integrate with TwitterContext, but don't call (not used).\n        /// </summary>\n        public void Authorize()\n        {\n            if (!IsAuthorized)\n                throw new InvalidOperationException(\"SingleUserAuthorizer needs preset credentials; don't call Authorize unless you've completly set the Credentials\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/SingleUserInMemoryCredentials.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Maps the twitter-provided credentials to the in memory credentials \n    /// for in-memory use.\n    /// </summary>\n    public class SingleUserInMemoryCredentials : InMemoryCredentials\n    {\n        // The properties provided by Twitter are named AccessToken and\n        // AccessTokenSecret, we need to map them to what the \n        // IOAuthCredentials interface uses.\n        public virtual string TwitterAccessToken { get; set; }\n        public virtual string TwitterAccessTokenSecret { get; set; }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return TwitterAccessToken;\n            }\n            set\n            {\n                TwitterAccessToken = value;\n            }\n        }\n\n        public override string AccessToken {\n            get\n            {\n                return TwitterAccessTokenSecret;\n            }\n            set\n            {\n                TwitterAccessTokenSecret = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/Utilities.cs",
    "content": "﻿//-----------------------------------------------------------------------\n// <copyright file=\"Utilities.cs\">\n//     Copyright (c) Andrew Arnott. All rights reserved.\n// </copyright>\n// <license>\n//     Microsoft Public License (Ms-PL http://opensource.org/licenses/ms-pl.html).\n//     Contributors may add their own copyright notice above.\n// </license>\n//-----------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\n\nnamespace LinqToTwitter\n{\n    public static class Utilities\n    {\n        /// <summary>\n        /// Encapsulates GetResponse so tests don't invoke the request\n        /// </summary>\n        /// <param name=\"req\">Request to Twitter</param>\n        /// <returns>Response to Twitter</returns>\n        public static HttpWebResponse AsyncGetResponse(HttpWebRequest req)\n        {\n            Exception asyncException = null;\n\n            var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false);\n            HttpWebResponse res = null;\n\n            req.BeginGetResponse(\n                new AsyncCallback(\n                    ar =>\n                    {\n                        try\n                        {\n                            res = req.EndGetResponse(ar) as HttpWebResponse;\n                        }\n                        catch (Exception ex)\n                        {\n                            asyncException = ex;\n                        }\n                        finally\n                        {\n                            resetEvent.Set();\n                        }\n                    }), null);\n\n            resetEvent.WaitOne();\n\n            if (asyncException != null)\n            {\n                throw asyncException;\n            }\n\n            return res;\n        }\n\n        /// <summary>\n        /// Reads the web response stream into a string.\n        /// </summary>\n        /// <param name=\"resp\">The response to read</param>\n        /// <returns>a string containing the entire web response body</returns>\n        public static string ReadReponse(this WebResponse resp)\n        {\n            if (resp == null)\n                return null;\n\n            using (var respStream = resp.GetResponseStream())\n            using (var respReader = new StreamReader(respStream))\n            {\n                var responseBody = respReader.ReadToEnd();\n                return responseBody;\n            }\n        }\n\n        /// <summary>\n        /// Assembles a series of key=value pairs as a URI-escaped query-string.\n        /// </summary>\n        /// <param name=\"parameters\">The parameters to include.</param>\n        /// <returns>A query-string-like value such as a=b&c=d.  Does not include a leading question mark (?).</returns>\n        public static string BuildQueryString(IEnumerable<QueryParameter> parameters)\n        {\n            if (parameters == null)\n                throw new ArgumentNullException(\"parameters\");\n\n            StringBuilder builder = new StringBuilder();\n            foreach (var pair in parameters.Where(p => !string.IsNullOrEmpty(p.Value)))\n            {\n                builder.Append(BuildUrlHelper.UrlEncode(pair.Name));\n                builder.Append('=');\n                builder.Append(BuildUrlHelper.UrlEncode(pair.Value));\n                builder.Append('&');\n            }\n\n            if (builder.Length > 1)\n                builder.Length--;   // truncate trailing &\n\n            return builder.ToString();\n        }\n\n#if !NETFX_CORE\n        /// <summary>\n        /// Reads a file into a byte array\n        /// </summary>\n        /// <param name=\"filePath\">Full path of file to read.</param>\n        /// <returns>Byte array with file contents.</returns>\n        public static byte[] GetFileBytes(string filePath)\n        {\n            byte[] fileBytes = null;\n\n            using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))\n            using (var memStr = new MemoryStream())\n            {\n                byte[] buffer = new byte[4096];\n                memStr.Position = 0;\n                int bytesRead = 0;\n\n                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)\n                {\n                    memStr.Write(buffer, 0, bytesRead);\n                }\n\n                memStr.Position = 0;\n                fileBytes = memStr.GetBuffer();\n            }\n\n            return fileBytes;\n        } \n#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/WebAuthorizer.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Use this class, or a derivative, in Web applications for OAuth authentication.\n    /// </summary>\n    public class WebAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public Uri Callback { get; set; }\n\n        /// <summary>\n        /// This is a hook where you can assign\n        /// a lambda to perform the technology\n        /// specific redirection action.\n        /// \n        /// The string passed as the lambda paramter\n        /// is the Twitter authorization URL.\n        /// </summary>\n        public Action<string> PerformRedirect { get; set; }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        public void Authorize()\n        {\n            throw new InvalidOperationException(\"For ASP.NET apps, you should use BeginAuthorization and CompleteAuthorization instead. Please visit the LINQ to Twitter documentation and samples for examples on how to do this.\");\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        /// <param name=\"callback\">This is where you want Twitter to redirect to after authorization</param>\n        public void BeginAuthorization(Uri callback)\n        {\n            BeginAuthorization(callback, /*forceLogin:*/ false);\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        /// <param name=\"forceLogin\">Forces user to login for Sign-In with Twitter scenarios</param>\n        /// <param name=\"callback\">This is where you want Twitter to redirect to after authorization</param>\n        public void BeginAuthorization(Uri callback, bool forceLogin)\n        {\n            if (IsAuthorized) return;\n\n            string callbackStr = OAuthTwitter.FilterRequestParameters(callback);\n            string link = OAuthTwitter.AuthorizationLinkGet(OAuthRequestTokenUrl, OAuthAuthorizeUrl, callbackStr, forceLogin, AuthAccessType);\n\n            PerformRedirect(link);\n        }\n\n        /// <summary>\n        /// After the user Authorizes the app, Twitter will \n        /// redirect to the callback url, provided during \n        /// BeginAuthorization. When redirecting, Twitter will \n        /// also provide oauth_verifier and oauth_token \n        /// parameters. This method uses those parameters to \n        /// request an access token, which is used automatically\n        /// by LINQ to Twitter when executing queries.\n        /// </summary>\n        /// <param name=\"callback\">URL that Twitter redirected to after authorization</param>\n        /// <returns>True if successful</returns>\n        public bool CompleteAuthorization(Uri callback)\n        {\n            if (callback == null)\n            {\n                throw new ArgumentNullException(\"callback\", \"You must pass in the callback that Twitter returned after authentication.\");\n            }\n\n            if (IsAuthorized) return true;\n\n            string verifier = OAuthTwitter.GetUrlParamValue(callback.Query, \"oauth_verifier\");\n\n            if (verifier != null)\n            {\n                string oAuthToken = OAuthTwitter.GetUrlParamValue(callback.Query, \"oauth_token\");\n\n                string screenName;\n                string userID;\n                OAuthTwitter.AccessTokenGet(oAuthToken, verifier, OAuthAccessTokenUrl, string.Empty, out screenName, out userID);\n\n                ScreenName = screenName;\n                UserId = userID;\n\n                Credentials.OAuthToken = OAuthTwitter.OAuthToken;\n                Credentials.AccessToken = OAuthTwitter.OAuthTokenSecret;\n                Credentials.ScreenName = screenName;\n                Credentials.UserId = userID;\n            }\n\n            return IsAuthorized;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/XAuthAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public class XAuthAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        /// <summary>\n        /// Synchronous authorization\n        /// </summary>\n        public void Authorize()\n        {\n            if (IsAuthorized)\n                return;\n\n            var request = new Request(OAuthAccessTokenUrl);\n\n            var xauthCredentials = Credentials as XAuthCredentials;\n            var postData = new Dictionary<string, string>();\n            postData.Add(\"x_auth_username\", xauthCredentials.UserName);\n            postData.Add(\"x_auth_password\", xauthCredentials.Password);\n            postData.Add(\"x_auth_mode\", \"client_auth\");\n\n            string screenName;\n            string userID;\n            OAuthTwitter.PostAccessToken(request, postData, out screenName, out userID);\n\n            ScreenName = screenName;\n            UserId = userID;\n\n            Credentials.OAuthToken = OAuthTwitter.OAuthToken;\n            Credentials.AccessToken = OAuthTwitter.OAuthTokenSecret;\n            Credentials.ScreenName = screenName;\n            Credentials.UserId = userID;\n        }\n\n        /// <summary>\n        /// Asynchronously performs authorization for Silverlight apps\n        /// </summary>\n        /// <param name=\"authorizationCompleteCallback\">Action you provide for when authorization completes.</param>\n        public void BeginAuthorize(Action<TwitterAsyncResponse<UserIdentifier>> authorizationCompleteCallback)\n        {\n            if (IsAuthorized)\n                return;\n\n            var request = new Request(OAuthAccessTokenUrl);\n\n            var xauthCredentials = Credentials as XAuthCredentials;\n            var postData = new Dictionary<string, string>();\n            postData.Add(\"x_auth_username\", xauthCredentials.UserName);\n            postData.Add(\"x_auth_password\", xauthCredentials.Password);\n            postData.Add(\"x_auth_mode\", \"client_auth\");\n\n            OAuthTwitter.PostAccessTokenAsync(\n                request, \n                postData, \n                resp =>\n                {\n                    Credentials.OAuthToken = OAuthTwitter.OAuthToken;\n                    Credentials.AccessToken = OAuthTwitter.OAuthTokenSecret;\n                    UserIdentifier user = resp.State;\n                    if (user != null)\n                    {\n                        Credentials.ScreenName = user.ScreenName;\n                        Credentials.UserId = user.UserID; \n                    }\n\n                    authorizationCompleteCallback(resp);\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/XAuthCredentials.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Used for XAuthAuthorization, which requires permission from Twitter before using\n    /// </summary>\n    public class XAuthCredentials : InMemoryCredentials\n    {\n        /// <summary>\n        /// Twitter User Name\n        /// </summary>\n        public string UserName { get; set; }\n\n        /// <summary>\n        /// Twitter Password\n        /// </summary>\n        public string Password { get; set; }\n\n        public override void Load(string credentialString)\n        {\n            base.Load(credentialString);\n\n            string[] credentials = credentialString.Split(',');\n\n            UserName = credentials[4];\n            Password = credentials[5];\n        }\n\n        public override string ToString()\n        {\n            return base.ToString() + \",\" + UserName + \",\" + Password;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/OAuth/ZIsolatedStorageCredentialsTest.cs",
    "content": "﻿#if !NETFX_CORE && !L2T_PCL\nusing System.Xml.Linq;\n\nnamespace LinqToTwitter\n{\n    public class ZIsolatedStorageCredentialsTest : InMemoryCredentials\n    {\n        private const string StateFile = \"LinqToTwitter.json\";\n        private const string ConsumerKeyElement = \"consumer_key\";\n        private const string ConsumerSecretElement = \"consumer_secret\";\n        private const string CodeElement = \"code\";\n        private const string AccessTokenElement = \"access_token\";\n        private const string AuthorizingElement = \"authorizing\";\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return GetState(ConsumerKeyElement);\n            }\n            set\n            {\n                SetState(ConsumerKeyElement, value);\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return GetState(ConsumerSecretElement);\n            }\n            set\n            {\n                SetState(ConsumerSecretElement, value);\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return GetState(CodeElement);\n            }\n            set\n            {\n                SetState(CodeElement, value);\n            }\n        }\n\n        public override string AccessToken\n        {\n            get\n            {\n                return GetState(AccessTokenElement);\n            }\n            set\n            {\n                SetState(AccessTokenElement, value);\n            }\n        }\n\n        private void SetState(string elementName, string value)\n        {\n            var state = XElement.Parse(State.Load(StateFile));\n\n            if (state.Element(elementName).Value != value)\n            {\n                state.Element(elementName).Value = value;\n                State.Save(state.ToString(), StateFile);\n            }\n        }\n\n        private string GetState(string elementName)\n        {\n            var state = XElement.Parse(State.Load(StateFile));\n            return state.Element(elementName).Value;\n        }\n\n        public void ClearState()\n        {\n            var state = XElement.Parse(State.Load(StateFile));\n\n            state.Element(ConsumerKeyElement).Value = string.Empty;\n            state.Element(ConsumerSecretElement).Value = string.Empty;\n            state.Element(CodeElement).Value = string.Empty;\n            state.Element(AccessTokenElement).Value = string.Empty;\n            state.Element(AuthorizingElement).Value = string.Empty;\n\n            State.Save(state.ToString(), StateFile);\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq To Twitter for Silverlight\")]\n[assembly: AssemblyDescription(\"Open Source LINQ Provider for the Twitter Micro-Blogging Service (Silverlight)\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Joe Mayo\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter for Silverlight\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2008 - 2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"45613678-c72a-4bfa-893e-824bf9dbd76e\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"2.1.13\")]\n[assembly: AssemblyFileVersion(\"2.1.13\")]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitterXUnitTests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Raw/Raw.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Allows working at a low level with Twitter API\n    /// </summary>\n    public class Raw\n    {\n        /// <summary>\n        /// Query string with segments and parameters.  \n        /// Do not include BaseUrl as it will be prefixed \n        /// to this value. You're resposible for ensuring\n        /// the format of this part of the query is correct,\n        /// including encoding parameters.\n        /// </summary>\n        public string QueryString { get; set; }\n\n        /// <summary>\n        /// Raw result, returned directly from Twitter.\n        /// Currently only supports XML formatted results.\n        /// </summary>\n        public string Result { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Raw/RawExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public static class RawExtensions\n    {\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/public_timeline.json\" for a public status query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <returns></returns>\n        public static string ExecuteRaw(this TwitterContext ctx, string queryString, Dictionary<string, string> parameters)\n        {\n            return ExecuteRaw(ctx, queryString, parameters, null);\n        }\n\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/public_timeline.json\" for a public status query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns></returns>\n        public static string ExecuteRaw(this TwitterContext ctx, string queryString, Dictionary<string, string> parameters, Action<TwitterAsyncResponse<string>> callback)\n        {\n            string rawUrl = ctx.BaseUrl.TrimEnd('/') + \"/\" + queryString.TrimStart('/');\n\n            var reqProc = new RawRequestProcessor<Raw>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var results =\n                exec.PostToTwitter(\n                    rawUrl,\n                    parameters,\n                    response => reqProc.ProcessActionResult(response, HttpMethod.POST));\n\n            return results;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Raw/RawRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n#if SILVERLIGHT\n#else\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Raw requests, allowing free-form url and query strings\n    /// </summary>\n    public class RawRequestProcessor<T> : \n        IRequestProcessor<T>,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Actual query string sent to twitter\n        /// </summary>\n        public string QueryString { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        public string Result { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Raw>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"QueryString\"\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryStringParam = \"QueryString\";\n            if (parameters == null || !parameters.ContainsKey(\"QueryString\"))\n                throw new ArgumentNullException(QueryStringParam, \"QueryString parameter is required.\");\n\n            QueryString = parameters[\"QueryString\"].Trim();\n\n            if (QueryString == string.Empty)\n                throw new ArgumentException(\"Blank QueryString isn't valid.\", QueryStringParam);\n\n            string url = BaseUrl.TrimEnd('/') + \"/\" + QueryString.TrimStart('/');\n            var parts = url.Split('?');\n            var req = new Request(parts[0]);\n            var urlParams = req.RequestParameters;\n\n            if (parts.Length == 2)\n            {\n                var qsParms =\n                    (from pair in parts[1].Split('&')\n                     let keyVal = pair.Split('=')\n                     select new\n                     {\n                         Key = keyVal[0],\n                         Val = keyVal[1]\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Val);\n\n                foreach (KeyValuePair<string, string> parm in qsParms)\n                    urlParams.Add(new QueryParameter(parm.Key, parm.Value));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms response into List of Raw\n        /// </summary>\n        /// <param name=\"response\">Twitter response</param>\n        /// <returns>List of Raw</returns>\n        public virtual List<T> ProcessResults(string response)\n        {\n            var rawList = new List<Raw>\n            {\n                new Raw\n                {\n                    QueryString = QueryString,\n                    Result = response\n                }\n            };\n\n            return rawList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var raw = new Raw\n            {\n                Result = responseJson\n            };\n\n            return raw.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/RelatedResults/RelatedResults.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Information on related results - largely undocumented when first released, i.e. no indication of what Score and Kind mean.\n    /// </summary>\n    public class RelatedResults\n    {\n        public RelatedResults() { }\n        public RelatedResults(JsonData resultsJson)\n        {\n            if (resultsJson == null) return;\n\n            ResultAnnotations = new Annotation(resultsJson.GetValue<JsonData>(\"annotations\"));\n            Score = resultsJson.GetValue<double>(\"score\");\n            Kind = resultsJson.GetValue<string>(\"kind\");\n            JsonData value = resultsJson.GetValue<JsonData>(\"value\");\n            ValueAnnotations = new Annotation(value.GetValue<JsonData>(\"annotations\"));\n            Retweeted = value.GetValue<bool>(\"retweeted\");\n            InReplyToScreenName = value.GetValue<string>(\"in_reply_to_screen_name\");\n            var contributors = value.GetValue<JsonData>(\"contributors\");\n            Contributors =\n                contributors == null ?\n                    new List<Contributor>() :\n                    (from JsonData contributor in contributors\n                     select new Contributor(contributor))\n                    .ToList();\n            Coordinates = new Coordinate(value.GetValue<JsonData>(\"coordinates\"));\n            Place = new Place(value.GetValue<JsonData>(\"place\"));\n            User = new User(value.GetValue<JsonData>(\"user\"));\n            RetweetCount = value.GetValue<int>(\"retweet_count\");\n            IDString = value.GetValue<string>(\"id_str\");\n            InReplyToUserID = value.GetValue<ulong>(\"in_reply_to_user_id\");\n            Favorited = value.GetValue<bool>(\"favorited\");\n            InReplyToStatusIDString = value.GetValue<string>(\"in_reply_to_status_id_str\");\n            InReplyToStatusID = value.GetValue<ulong>(\"in_reply_to_status_id\");\n            Source = value.GetValue<string>(\"source\");\n            CreatedAt = value.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            InReplyToUserIDString = value.GetValue<string>(\"in_reply_to_user_id_str\");\n            Truncated = value.GetValue<bool>(\"truncated\");\n            Geo = new Geo(value.GetValue<JsonData>(\"geo\"));\n            Text = value.GetValue<string>(\"text\");\n        }\n\n        /// <summary>\n        /// Type of result\n        /// </summary>\n        public RelatedResultsType Type { get; set; }\n\n        /// <summary>\n        /// Tweet ID to get results for\n        /// </summary>\n        public ulong StatusID { get; set; }\n\n        /// <summary>\n        /// Annotations associated with Result Entry\n        /// </summary>\n        public Annotation ResultAnnotations { get; set; }\n\n        /// <summary>\n        /// Annotations associated with Tweet\n        /// </summary>\n        public Annotation ValueAnnotations { get; set; }\n\n        /// <summary>\n        /// Tweet Text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Is tweet truncated?\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// Place info for where Tweet originated\n        /// </summary>\n        public Place Place { get; set; }\n\n        /// <summary>\n        /// Latitude & Longitude on Tweet\n        /// </summary>\n        public Coordinate Coordinates { get; set; }\n\n        /// <summary>\n        /// Is tweet marked as a favorite\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// String representation of Tweet ID\n        /// </summary>\n        public string IDString { get; set; }\n\n        /// <summary>\n        /// Has tweet been retweeted?\n        /// </summary>\n        public bool Retweeted { get; set; }\n\n        /// <summary>\n        /// Number of retweets, Max is 100\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// What software or application produced tweet\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// When was this tweeted\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// Geographic location of result\n        /// </summary>\n        public Geo Geo { get; set; }\n\n        /// <summary>\n        /// List of contributors to tweet\n        /// </summary>\n        public List<Contributor> Contributors { get; set; }\n\n        /// <summary>\n        /// Screen Name of replier\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// ID of replier\n        /// </summary>\n        public string InReplyToStatusIDString { get; set; }\n\n        /// <summary>\n        /// ID of tweet replying to StatusID tweet\n        /// </summary>\n        public ulong InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// User ID, in string format, of person replying to tweet\n        /// </summary>\n        public string InReplyToUserIDString { get; set; }\n\n        /// <summary>\n        /// User ID of person replying to tweet\n        /// </summary>\n        public ulong InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Info on user who tweeted\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Score\n        /// </summary>\n        public double Score { get; set; }\n\n        /// <summary>\n        /// Kind\n        /// </summary>\n        public string Kind { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/RelatedResults/RelatedResultsRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps process related results requests\n    /// </summary>\n    public class RelatedResultsRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of related result to query i.e. Show\n        /// </summary>\n        private RelatedResultsType Type { get; set; }\n\n        /// <summary>\n        /// Tweet ID to get results for\n        /// </summary>\n        private ulong StatusID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<RelatedResults>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"StatusID\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", \"Type\");\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<RelatedResultsType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case RelatedResultsType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// Builds an URL for finding results related to a specific tweet\n        /// </summary>\n        /// <param name=\"parameters\">Parameters contain StatusID.</param>\n        /// <returns>Url for performing related results show query.</returns>\n        private Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(\"StatusID\"))\n                throw new ArgumentException(\"StatusID is a required parameter.\", \"StatusWeoID\");\n\n            StatusID = ulong.Parse(parameters[\"StatusID\"]);\n            var url = BuildUrlHelper.TransformParameterUrl(parameters, \"StatusID\", \"related_results/show.json\");\n                        \n            var req = new Request(BaseUrl + url);\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of RelatedResults\n        /// </summary>\n        /// <param name=\"responseJson\">response from Twitter</param>\n        /// <returns>List of RelatedResult</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData resultJson = JsonMapper.ToObject(responseJson);\n\n            List<RelatedResults> results =\n                (from JsonData response in resultJson\n                 from JsonData result in response.GetValue<JsonData>(\"results\")\n                 select\n                    new RelatedResults(result)\n                    {\n                        Type = Type,\n                        StatusID = StatusID\n                    })\n                .ToList();\n\n            return results.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/RelatedResults/RelatedResultsType.cs",
    "content": "﻿\n\nnamespace LinqToTwitter\n{\n    public enum RelatedResultsType\n    {\n        /// <summary>\n        /// Show related results\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/ReportSpam/ReportSpamExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public static class ReportSpamExtensions\n    {\n\n        /// <summary>\n        /// lets logged-in user report spam\n        /// </summary>\n        /// <param name=\"userID\">user id of alleged spammer</param>\n        /// <param name=\"screenName\">screen name of alleged spammer</param>\n        /// <returns>Alleged spammer user info</returns>\n        public static User ReportSpam(this TwitterContext ctx, string userID, string screenName)\n        {\n            return ReportSpam(ctx, userID, screenName, null);\n        }\n\n        /// <summary>\n        /// lets logged-in user report spam\n        /// </summary>\n        /// <param name=\"userID\">user id of alleged spammer</param>\n        /// <param name=\"screenName\">screen name of alleged spammer</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>Alleged spammer user info</returns>\n        public static User ReportSpam(this TwitterContext ctx, string userID, string screenName, Action<TwitterAsyncResponse<User>> callback)\n        {\n            if (string.IsNullOrEmpty(userID) &&\n                string.IsNullOrEmpty(screenName))\n            {\n                throw new ArgumentException(\"Either userID or screenName is a required parameter.\");\n            }\n\n            string reportSpamUrl = ctx.BaseUrl + \"users/report_spam.json\";\n\n            var createParams = new Dictionary<string, string>\n                {\n                    { \"user_id\", userID },\n                    { \"screen_name\", screenName }\n                };\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    reportSpamUrl,\n                    createParams,\n                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));\n\n            User user = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);\n            return user;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SavedSearch/SavedSearch.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// info for query and retrieval of saved searches\n    /// </summary>\n    public class SavedSearch\n    {\n        public SavedSearch() { }\n        public SavedSearch(JsonData searchJson)\n        {\n            Query = searchJson.GetValue<string>(\"query\");\n            Name = searchJson.GetValue<string>(\"name\");\n            Postition = searchJson.GetValue<int>(\"position\");\n            IDString = searchJson.GetValue<string>(\"id_str\");\n            CreatedAt = searchJson.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n        }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        public SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        public string IDString { get; set; }\n\n        /// <summary>\n        /// name of search\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// search query contents\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// position in search list\n        /// </summary>\n        public int Postition { get; set; }\n\n        /// <summary>\n        /// when search was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SavedSearch/SavedSearchAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum SavedSearchAction\n    {\n        Create,\n\n        Destroy\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SavedSearch/SavedSearchExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class SavedSearchExtensions\n    {\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"query\">Search query to add</param>\n        /// <returns>SavedSearch object</returns>\n        public static SavedSearch CreateSavedSearch(this TwitterContext ctx, string query)\n        {\n            return CreateSavedSearch(ctx, query, null);\n        }\n\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"query\">Search query to add</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>SavedSearch object</returns>\n        public static SavedSearch CreateSavedSearch(this TwitterContext ctx, string query, Action<TwitterAsyncResponse<SavedSearch>> callback)\n        {\n            if (string.IsNullOrEmpty(query))\n            {\n                throw new ArgumentException(\"query is required.\", \"query\");\n            }\n\n            var savedSearchUrl = ctx.BaseUrl + \"saved_searches/create.json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    savedSearchUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"query\", query }\n                    },\n                    response => reqProc.ProcessActionResult(response, SavedSearchAction.Create));\n\n            SavedSearch result = reqProc.ProcessActionResult(resultsJson, SavedSearchAction.Create);\n            return result;\n        }\n\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <returns>SavedSearch object</returns>\n        public static SavedSearch DestroySavedSearch(this TwitterContext ctx, int id)\n        {\n            return DestroySavedSearch(ctx, id, null);\n        }\n\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"id\">ID of saved search</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>SavedSearch object</returns>\n        public static SavedSearch DestroySavedSearch(this TwitterContext ctx, int id, Action<TwitterAsyncResponse<SavedSearch>> callback)\n        {\n            if (id < 1)\n            {\n                throw new ArgumentException(\"Invalid Saved Search ID: \" + id, \"id\");\n            }\n\n            var savedSearchUrl = ctx.BaseUrl + \"saved_searches/destroy/\" + id + \".json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    savedSearchUrl,\n                    new Dictionary<string, string>(),\n                    response => reqProc.ProcessActionResult(response, SavedSearchAction.Destroy));\n\n            SavedSearch result = reqProc.ProcessActionResult(resultsJson, SavedSearchAction.Destroy);\n            result.ID = id.ToString();\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SavedSearch/SavedSearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Saved Search requests\n    /// </summary>\n    public class SavedSearchRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        internal SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        private string ID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<SavedSearch>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", \"Type\");\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<SavedSearchType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    return BuildSearchesUrl();\n                case SavedSearchType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// construct a base show url\n        /// </summary>\n        /// <param name=\"url\">base show url</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required for a Saved Search Show query.\", \"ID\");\n\n            ID = parameters[\"ID\"];\n\n            var url = BuildUrlHelper.TransformIDUrl(parameters, \"saved_searches/show.json\");\n            return new Request(BaseUrl + url);\n        }\n\n        /// <summary>\n        /// return a saved searches url\n        /// </summary>\n        /// <returns>saved search url</returns>\n        Request BuildSearchesUrl()\n        {\n            return new Request(BaseUrl + \"saved_searches/list.json\");\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of SavedSearch\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData searchJson = JsonMapper.ToObject(responseJson);\n\n            List<SavedSearch> savedSearchList = null;\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    savedSearchList =\n                        (from JsonData search in searchJson\n                         select new SavedSearch(search))\n                        .ToList();\n                    break;\n                case SavedSearchType.Show:\n                    savedSearchList = new List<SavedSearch> { new SavedSearch(searchJson) };\n                    break;\n                default:\n                    break;\n            }\n\n            foreach (var search in savedSearchList)\n            {\n                search.Type = Type;\n                search.ID = ID;\n            };\n\n            return savedSearchList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData searchJson = JsonMapper.ToObject(responseJson);\n\n            var search = new SavedSearch(searchJson);\n\n            return search.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SavedSearch/SavedSearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of saved search queries\n    /// </summary>\n    public enum SavedSearchType\n    {\n        /// <summary>\n        /// query all searches by logged in user\n        /// </summary>\n        Searches,\n\n        /// <summary>\n        /// query for a single search by the search id\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/Attitude.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Search for tweets with different types of attitudes\n    /// </summary>\n    [Flags]\n    public enum Attitude\n    {\n        /// <summary>\n        /// Happy\n        /// </summary>\n        Positive = 0x01,\n\n        /// <summary>\n        /// Sad\n        /// </summary>\n        Negative = 0x02,\n\n        /// <summary>\n        /// Curious\n        /// </summary>\n        Question = 0x04\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/ResultType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of results to return in a search\n    /// </summary>\n    public enum ResultType\n    {\n        /// <summary>\n        /// Combination of popular and recent\n        /// </summary>\n        Mixed,\n\n        /// <summary>\n        /// Real-time results\n        /// </summary>\n        Recent,\n\n        /// <summary>\n        /// Most popular tweets\n        /// </summary>\n        Popular\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/Search.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// for performing Twitter searches\n    /// </summary>\n    public class Search\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        public SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        public string SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        public string Locale { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        public DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// first status ID\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        public string GeoCode { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result requested (mixed, recent, or popular)\n        /// </summary>\n        public ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// Include entities in results\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        public List<Status> Statuses { get; set; }\n\n        /// <summary>\n        /// Tweet metadata returned from search\n        /// </summary>\n        public SearchMetaData SearchMetaData { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/SearchEntry.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public class SearchEntry\n    {\n        /// <summary>\n        /// Date of tweet (defaults to Since if Twitter doesn't return a value)\n        /// </summary>\n        public DateTimeOffset CreatedAt { get; set; }\n\n        /// <summary>\n        /// Tweet entities (i.e. hash, media, url, or user)\n        /// </summary>\n        public Entities Entities { get; set; }\n\n        /// <summary>\n        /// ScreenName of tweet sender\n        /// </summary>\n        public string FromUser { get; set; }\n\n        /// <summary>\n        /// User ID of sender,\n        /// </summary>\n        public ulong FromUserID { get; set; }\n\n        /// <summary>\n        /// Name of tweet sender\n        /// </summary>\n        public string FromUserName { get; set; }\n\n        /// <summary>\n        /// Geo info\n        /// </summary>\n        public Geometry Geo { get; set; }\n\n        /// <summary>\n        /// Tweet ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Language of Tweet Text\n        /// </summary>\n        public string IsoLanguageCode { get; set; }\n\n        /// <summary>\n        /// Additional info, such as number of retweets and/or type of result\n        /// </summary>\n        public SearchMetaData MetaData { get; set; }\n\n        /// <summary>\n        /// Url where user's profile image is located\n        /// </summary>\n        public string ProfileImageUrl { get; set; }\n\n        /// <summary>\n        /// HTTPS Url where user's profile image is located\n        /// </summary>\n        public string ProfileImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// Html-encoded anchor tag to web page for App used to send tweet\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// Tweet text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// ScreenName @Mention of tweet, if reply or null if not a reply\n        /// </summary>\n        public string ToUser { get; set; }\n\n        /// <summary>\n        /// ID for @Mention of tweet, if reply or null if not a reply\n        /// </summary>\n        public ulong ToUserID { get; set; }\n\n        /// <summary>\n        /// Name of user mentioned in tweet\n        /// </summary>\n        public string ToUserName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/SearchMetaData.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class SearchMetaData\n    {\n        public SearchMetaData() { }\n        public SearchMetaData(JsonData metaData)\n        {\n            CompletedIn = metaData.GetValue<decimal>(\"completed_in\");\n            MaxID = metaData.GetValue<string>(\"max_id_str\").GetULong(0ul);\n            NextResults = metaData.GetValue<string>(\"next_results\");\n            Query = metaData.GetValue<string>(\"query\");\n            RefreshUrl = metaData.GetValue<string>(\"refresh_url\");\n            Count = metaData.GetValue<int>(\"count\");\n            SinceID = metaData.GetValue<string>(\"since_id_str\").GetULong(0ul);\n        }\n\n        /// <summary>\n        /// Processing time for search\n        /// </summary>\n        public decimal CompletedIn { get; set; }\n\n        /// <summary>\n        /// Max ID returned in search\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Query string to get next page\n        /// </summary>\n        public string NextResults { get; set; }\n\n        /// <summary>\n        /// Original Query\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Query string to refresh this search\n        /// </summary>\n        public string RefreshUrl { get; set; }\n\n        /// <summary>\n        /// Number of results per page to return on next query\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Don't return tweets older than this ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/SearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\n#if SILVERLIGHT && !WINDOWS_PHONE\n    using System.Windows.Browser;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes search queries\n    /// </summary>\n    class SearchRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        private SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        private string Query { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        private string GeoCode { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        private string SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        private string Locale { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result (mixed, recent, or popular)\n        /// </summary>\n        private ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        private int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        private DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        private ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Include entities in results (default: false)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// for getting tweets with ID that is less than or equal to this value\n        /// </summary>\n        private ulong MaxID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Search>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Query\",\n                       \"GeoCode\",\n                       \"SearchLanguage\",\n                       \"Locale\",\n                       \"ResultType\",\n                       \"Count\",\n                       \"Until\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"IncludeEntities\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            // Joe: Why force a Type when there is only one Type?\n            //\n            // Answer: This is a LINQ to Twitter idiom and is necessary for extensibility.  \n            // If we add another member to the enum in the future and this wasn't here, \n            // then adding this later would break a lot of code - Joe\n            Type = RequestProcessorHelper.ParseQueryEnumType<SearchType>(parameters[\"Type\"]);\n\n            return BuildSearchUrlParameters(parameters, \"tweets.json\");\n        }\n\n        /// <summary>\n        /// appends parameters for Search request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        private Request BuildSearchUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\") && !string.IsNullOrEmpty(parameters[\"Query\"]))\n            {\n                Query = parameters[\"Query\"];\n\n                urlParams.Add(new QueryParameter(\"q\", Query));\n            }\n            else\n            {\n                throw new ArgumentNullException(\"Query\", \"Query filter in where clause is required.\");\n            }\n\n            if (parameters.ContainsKey(\"GeoCode\"))\n            {\n                GeoCode = parameters[\"GeoCode\"];\n                urlParams.Add(new QueryParameter(\"geocode\" , GeoCode));\n            }\n\n            if (parameters.ContainsKey(\"SearchLanguage\"))\n            {\n                SearchLanguage = parameters[\"SearchLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", SearchLanguage));\n            }\n\n            if (parameters.ContainsKey(\"Locale\"))\n            {\n                Locale = parameters[\"Locale\"];\n                urlParams.Add(new QueryParameter(\"locale\", Locale));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Until\"))\n            {\n                Until = DateTime.Parse(parameters[\"Until\"]).Date;\n                urlParams.Add(new QueryParameter(\"until\",  Until.ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", MaxID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ResultType\"))\n            {\n                ResultType = RequestProcessorHelper.ParseQueryEnumType<ResultType>(parameters[\"ResultType\"]);\n                urlParams.Add(new QueryParameter(\"result_type\" , ResultType.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Search\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Search> search;\n\n            if (string.IsNullOrEmpty(responseJson))\n            {\n                search = new List<Search> { new Search() };\n            }\n            else\n            {\n                var searchResult = JsonSerialize(responseJson);\n\n                search = new List<Search> { searchResult };\n            }\n\n            return search.OfType<T>().ToList();\n        }\n\n        Search JsonSerialize(string responseJson)\n        {\n            JsonData search = JsonMapper.ToObject(responseJson);\n\n            var searchResult = new Search\n            {\n                Type = Type,\n                GeoCode = GeoCode,\n                Count = Count,\n                Query = Query,\n                MaxID = MaxID,\n                SinceID = SinceID,\n                SearchLanguage = SearchLanguage,\n                Locale = Locale,\n                Until = Until.Date,\n                ResultType = ResultType,\n                IncludeEntities = IncludeEntities,\n                Statuses =\n                    (from JsonData result in search[\"statuses\"]\n                     select new Status(result))\n                    .ToList(),\n                SearchMetaData = \n                    new SearchMetaData(search.GetValue<JsonData>(\"search_metadata\"))\n            };\n\n            return searchResult;\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Search/SearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of search\n    /// </summary>\n    public enum SearchType\n    {\n        /// <summary>\n        /// implemented mostly for consistency\n        /// with the rest of the API\n        /// </summary>\n        Search\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/Extensions/DictionaryExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\n#if !SILVERLIGHT && !CLIENT_PROFILE && !NETFX_CORE && !L2T_PCL\nusing System.Web.Script.Serialization;\n#endif\n\nnamespace LinqToTwitter.Json\n{\n    public static class DictionaryExtensions\n    {\n        public static DateTime GetValue(this IDictionary<string, object> dictionary, string key, DateTime defaultValue)\n        {\n            var value = dictionary.GetValue(key, String.Empty);\n            return value.GetDate(defaultValue);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key)\n        {\n            return dictionary.GetValue(key, default(T));\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key, T defaultValue)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value) && value != null)\n                return (T)value;\n\n            return defaultValue;\n        }\n\n        public static ulong GetULong(this IDictionary<string, object> dictionary, string key)\n        {\n            object value;\n            if (dictionary.TryGetValue(key, out value))\n            {\n                return (ulong)(int)value;\n            }\n\n            return 0UL;\n        }\n\n//        public static T GetNested<T>(this IDictionary<string, object> dictionary, string key, JavaScriptSerializer serializer)\n//            where T : class\n//        {\n//            var nestedObject = dictionary.GetValue<object>(key, null);\n\n//            if (nestedObject != null)\n//            {\n//                return serializer.ConvertToType<T>(nestedObject);\n//            }\n\n//            return default(T);\n//        }\n\n//        public static IEnumerable<T> GetNestedEnumeration<T>(this IDictionary<string, object> dictionary, string key, JavaScriptSerializer serializer)\n//            where T : class\n//        {\n//#if SILVERLIGHT || CLIENT_PROFILE\n//            var array = dictionary.GetValue<List<object>>(key, null);\n//#else\n//            var array = dictionary.GetValue<ArrayList>(key, null);\n//#endif\n\n//            if (array != null)\n//            {\n//                var elements = (from JsonData element in array\n//                                select serializer.ConvertToType<T>(element));\n//                return elements;\n//            }\n\n//            return Enumerable.Empty<T>();\n//        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/Extensions/LitJsonExtensions.cs",
    "content": "﻿using System;\nusing LitJson;\n\nnamespace LinqToTwitter.Serialization.Extensions\n{\n    public static class LitJsonExtensions\n    {\n        public static void WriteJsonData(this JsonWriter writer, JsonData jsonData)\n        {\n            var reader = new JsonReader(jsonData.ToJson());\n\n            while (reader.Read())\n            {\n                switch (reader.Token)\n                {\n                    case JsonToken.None:\n                        break;\n                    case JsonToken.ObjectStart:\n                        writer.WriteObjectStart();\n                        break;\n                    case JsonToken.PropertyName:\n                        writer.WritePropertyName(reader.Value.ToString());\n                        break;\n                    case JsonToken.ObjectEnd:\n                        writer.WriteObjectEnd();\n                        break;\n                    case JsonToken.ArrayStart:\n                        writer.WriteArrayStart();\n                        break;\n                    case JsonToken.ArrayEnd:\n                        writer.WriteArrayEnd();\n                        break;\n                    case JsonToken.Int:\n                        writer.Write((int)reader.Value);\n                        break;\n                    case JsonToken.Long:\n                        writer.Write((long)reader.Value);\n                        break;\n                    case JsonToken.ULong:\n                        writer.Write((ulong)reader.Value);\n                        break;\n                    case JsonToken.Double:\n                        writer.Write((double)reader.Value);\n                        break;\n                    case JsonToken.String:\n                        writer.Write((string)reader.Value);\n                        break;\n                    case JsonToken.Boolean:\n                        writer.Write((bool)reader.Value);\n                        break;\n                    case JsonToken.Null:\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/Extensions/StringExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\n\nnamespace LinqToTwitter.Json\n{\n    public static class StringExtensions\n    {\n        public static bool GetBool(this string val)\n        {\n            return GetBool(val, false);\n        }\n\n        public static bool GetBool(this string val, bool defaultValue /* = false*/)\n        {\n            bool result;\n\n            return String.IsNullOrEmpty(val) ||\n                !bool.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static int GetInt(this string val)\n        {\n            return GetInt(val, 0);\n        }\n\n        public static int GetInt(this string val, int defaultValue /* = 0*/)\n        {\n            int result;\n            return String.IsNullOrEmpty(val) ||\n                !int.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static long GetLong(this string val)\n        {\n            return GetLong(val, 0L);\n        }\n\n        public static long GetLong(this string val, long defaultValue /* = 0*/)\n        {\n            long result;\n\n            return String.IsNullOrEmpty(val) ||\n                !long.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static ulong GetULong(this string val)\n        {\n            return GetULong(val, 0ul);\n        }\n\n        public static ulong GetULong(this string val, ulong defaultValue /* = 0*/)\n        {\n            ulong result;\n\n            return String.IsNullOrEmpty(val) ||\n                !ulong.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this string val)\n        {\n            return GetDouble(val, 0d);\n        }\n\n        public static double GetDouble(this string val, double defaultValue /* = 0*/)\n        {\n            double result;\n\n            return String.IsNullOrEmpty(val) ||\n                !double.TryParse(val, NumberStyles.Any, CultureInfo.InvariantCulture, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n\n        public static DateTime GetDate(this string date)\n        {\n            return GetDate(date, DateTime.MinValue);\n        }\n\n        public static readonly string[] DateFormats = { \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n                                                         \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n                                                         \"yyyy-MM-dd HH:mm:ss\",\n                                                         \"yyyy-MM-dd HH:mm\"};\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            DateTime result;\n\n            return String.IsNullOrEmpty(date) ||\n                !DateTime.TryParseExact(date,\n                        DateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string date, DateTime defaultValue)\n        {\n            var epochSeconds = date.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n            \n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/AUTHORS",
    "content": "Leonardo Boshell  --  leonardoboshell@users.sourceforge.net\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/COPYING",
    "content": "All the source code and related files distributed with this software have\nbeen dedicated to the public domain by the authors.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute\nthe software, either in source code form or as a compiled binary, for any\npurpose, commercial or non-commercial, and by any means.\n\nThank you for reading this notice. Inspired by the enlightened words used by\nthe authors of another software project, a very popular one, also in the\npublic domain, here's a blessing:\n\n  May you find forgiveness for yourself and forgive others.\n  May you experience and share the gift of uncoditional love.\n  May you see light, wherever the illusion of darkness appears.\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/HACKING",
    "content": "HACKING LitJSON\n\nThis software is dedicated to the public domain. This means that you may\nuse, modify and distribute the code freely without having to ask for\npermissions of any kind and without the need to follow any particular rules\nor conventions.\n\nIf, however, you want to contribute your own changes back to the original\nauthors to be redistributed along with any future versions, please note that\nthe following two requirements do apply:\n\na) Your source code should be written in the same coding style used in the\n   original files. This means that any code submitted to be included in\n   the project has to follow the conventions already in use regarding\n   indentation, spaces, casing, file headers and so on.\n\n   When in doubt, you may submit your contributions as close to the style as\n   you can, and they can be edited before inclusion if necessary.\n\nb) In order to keep this software in the public domain, all new contributors\n   are asked to dedicate their contributions to the public domain. If you\n   want to send a patch or enhancement for possible inclusion, please\n   accompany the patch with the following statement:\n\n     The author or authors of this code dedicate any and all copyright\n     interest in this code to the public domain. We make this dedication for\n     the benefit of the public at large and to the detriment of our heirs\n     and successors. We intend this dedication to be an overt act of\n     relinquishment in perpetuity of all present and future rights to this\n     code under copyright law.\n\n   If you are currently an employee, it is possible that by law your\n   employer automatically receives the copyright to any and all work that\n   you do, including enhancements you might want to submit to this project.\n   In that case, there's some legal work that has to be done to ensure your\n   patches stay in fact in the public domain. We do not have the means nor\n   the will to handle such a process, but we're open to suggestions. Please\n   contact us if this situation applies to you.\n\nAll contributions received are regularly mentioned in the AUTHORS file\nbundled with this package, including the name of the contributor, and a\nshort description of the work. E-mail addresses are not included by default\nfor privacy reasons. If you submit contributions and want your e-mail\naddress added to the AUTHORS file (or don't want to be mentioned at all),\nplease specify that along with your submissions.\n\nThanks.\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/IJsonWrapper.cs",
    "content": "/**\n * IJsonWrapper.cs\n *   Interface that represents a jsonType capable of handling all kinds of JSON\n *   data. This is mainly used when mapping objects through JsonMapper, and\n *   it's implemented by JsonData.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\nusing System.Collections;\n\nnamespace LitJson\n{\n    public enum JsonType\n    {\n        None,\n\n        Object,\n        Array,\n        String,\n        Int,\n        Long,\n        Double,\n        Boolean,\n        Decimal,\n        ULong\n    }\n\n    public interface IJsonWrapper : IList, IOrderedDictionary\n    {\n        bool IsArray   { get; }\n        bool IsBoolean { get; }\n        bool IsDouble  { get; }\n        bool IsDecimal { get; }\n        bool IsInt     { get; }\n        bool IsLong    { get; }\n        bool IsULong   { get; }\n        bool IsObject  { get; }\n        bool IsString  { get; }\n\n        bool     GetBoolean ();\n        double   GetDouble ();\n        decimal  GetDecimal ();\n        int      GetInt ();\n        JsonType GetJsonType ();\n        long     GetLong ();\n        ulong    GetUlong ();\n        string   GetString ();\n\n        void SetBoolean  (bool val);\n        void SetDouble   (double val);\n        void SetDecimal(decimal val);\n        void SetInt      (int val);\n        void SetJsonType (JsonType jsonType);\n        void SetLong     (long val);\n        void SetUlong(ulong val);\n        void SetString   (string val);\n\n        string ToJson ();\n        void   ToJson (JsonWriter writer);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/IOrderedDictionary.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing LinqToTwitter;\n\nnamespace LitJson\n{\n    public interface IOrderedDictionary : IDictionary<string, JsonData>, ICollection, IEnumerable\n    {\n        object this[int index] { get; set; }\n\n        new IDictionaryEnumerator GetEnumerator();\n\n        void Insert(int index, object key, object value);\n\n        void RemoveAt(int index);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/JsonData.cs",
    "content": "/**\n * JsonData.cs\n *   Generic jsonType to hold JSON data (objects, arrays, and so on). This is\n *   the default jsonType returned by JsonMapper.ToObject().\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\n\nnamespace LitJson\n{\n    public class JsonData : IJsonWrapper, IEquatable<JsonData>\n    {\n        internal IDictionary<string, JsonData> InstObject;\n\n        private IList<JsonData>               instArray;\n        private bool                          instBoolean;\n        private double                        instDouble;\n        private int                           instInt;\n        private long                          instLong;\n        private string                        instString;\n        private string                        json;\n        private JsonType                      type;\n        decimal instDecimal;\n        ulong instUlong;\n\n        // Used to implement the IOrderedDictionary interface\n        private IList<KeyValuePair<string, JsonData>> objectList;\n\n        public int Count {\n            get { return EnsureCollection ().Count; }\n        }\n\n        public bool IsArray {\n            get { return type == JsonType.Array; }\n        }\n\n        public bool IsBoolean {\n            get { return type == JsonType.Boolean; }\n        }\n\n        public bool IsDouble {\n            get { return type == JsonType.Double; }\n        }\n\n        public bool IsInt {\n            get { return type == JsonType.Int; }\n        }\n\n        public bool IsLong {\n            get { return type == JsonType.Long; }\n        }\n\n        public bool IsObject {\n            get { return type == JsonType.Object; }\n        }\n\n        public bool IsString {\n            get { return type == JsonType.String; }\n        }\n\n        public bool IsDecimal\n        {\n            get { return type == JsonType.Decimal; }\n        }\n\n        public bool IsULong\n        {\n            get { return type == JsonType.ULong; }\n        }\n\n        int ICollection.Count {\n            get {\n                return Count;\n            }\n        }\n\n        bool ICollection.IsSynchronized {\n            get {\n                return EnsureCollection ().IsSynchronized;\n            }\n        }\n\n        object ICollection.SyncRoot {\n            get {\n                return EnsureCollection ().SyncRoot;\n            }\n        }\n\n        ICollection<string> IDictionary<string, JsonData>.Keys\n        {\n            get {\n                EnsureDictionary ();\n                IList<string> keys = objectList.Select(entry => entry.Key).ToList();\n\n                return (ICollection<string>) keys;\n            }\n        }\n\n        ICollection<JsonData> IDictionary<string, JsonData>.Values\n        {\n            get {\n                EnsureDictionary ();\n                IList<JsonData> values = objectList.Select(entry => entry.Value).ToList();\n\n                return (ICollection<JsonData>) values;\n            }\n        }\n\n        bool IJsonWrapper.IsArray {\n            get { return IsArray; }\n        }\n\n        bool IJsonWrapper.IsBoolean {\n            get { return IsBoolean; }\n        }\n\n        bool IJsonWrapper.IsDouble {\n            get { return IsDouble; }\n        }\n\n        bool IJsonWrapper.IsInt {\n            get { return IsInt; }\n        }\n\n        bool IJsonWrapper.IsLong {\n            get { return IsLong; }\n        }\n\n        bool IJsonWrapper.IsObject {\n            get { return IsObject; }\n        }\n\n        bool IJsonWrapper.IsString {\n            get { return IsString; }\n        }\n\n        bool IList.IsFixedSize {\n            get {\n                return EnsureList ().IsFixedSize;\n            }\n        }\n\n        bool IList.IsReadOnly {\n            get {\n                return EnsureList ().IsReadOnly;\n            }\n        }\n\n        JsonData IDictionary<string, JsonData>.this[string key]\n        {\n           get {\n                return EnsureDictionary ()[key];\n            }\n\n            set\n            {\n                if (! (key is String))\n                    throw new ArgumentException (\n                        \"The key has to be a string\");\n\n                JsonData data = ToJsonData (value);\n\n                this[key] = data;\n            }\n        }\n\n        object IOrderedDictionary.this[int idx] {\n            get {\n                EnsureDictionary ();\n                return objectList[idx].Value;\n            }\n\n            set {\n                EnsureDictionary ();\n                JsonData data = ToJsonData (value);\n\n                KeyValuePair<string, JsonData> oldEntry = objectList[idx];\n\n                InstObject[oldEntry.Key] = data;\n\n                var entry = new KeyValuePair<string, JsonData> (oldEntry.Key, data);\n\n                objectList[idx] = entry;\n            }\n        }\n\n        object IList.this[int index] {\n            get {\n                return EnsureList ()[index];\n            }\n\n            set {\n                EnsureList ();\n                JsonData data = ToJsonData (value);\n\n                this[index] = data;\n            }\n        }\n\n        public JsonData this[string propName] {\n            get {\n                EnsureDictionary ();\n                return InstObject[propName];\n            }\n\n            set {\n                EnsureDictionary ();\n\n                var entry = new KeyValuePair<string, JsonData> (propName, value);\n\n                if (InstObject.ContainsKey (propName)) {\n                    for (int i = 0; i < objectList.Count; i++) {\n                        if (objectList[i].Key == propName) {\n                            objectList[i] = entry;\n                            break;\n                        }\n                    }\n                } else\n                    objectList.Add (entry);\n\n                InstObject[propName] = value;\n\n                json = null;\n            }\n        }\n\n        public JsonData this[int index] {\n            get {\n                EnsureCollection ();\n\n                if (type == JsonType.Array)\n                    return instArray[index];\n\n                return objectList[index].Value;\n            }\n\n            set {\n                EnsureCollection ();\n\n                if (type == JsonType.Array)\n                    instArray[index] = value;\n                else {\n                    KeyValuePair<string, JsonData> entry = objectList[index];\n                    var newEntry = new KeyValuePair<string, JsonData> (entry.Key, value);\n\n                    objectList[index] = newEntry;\n                    InstObject[entry.Key] = value;\n                }\n\n                json = null;\n            }\n        }\n\n        public JsonData ()\n        {\n        }\n\n        public JsonData (bool boolean)\n        {\n            type = JsonType.Boolean;\n            instBoolean = boolean;\n        }\n\n        public JsonData (double number)\n        {\n            type = JsonType.Double;\n            instDouble = number;\n        }\n\n        public JsonData (int number)\n        {\n            type = JsonType.Int;\n            instInt = number;\n        }\n\n        public JsonData(long number)\n        {\n            type = JsonType.Long;\n            instLong = number;\n        }\n\n        public JsonData (decimal number)\n        {\n            type = JsonType.Decimal;\n            instDecimal = number;\n        }\n\n        public JsonData(ulong number)\n        {\n            type = JsonType.ULong;\n            instUlong = number;\n        }\n\n        public JsonData (object obj)\n        {\n            if (obj is Boolean) {\n                type = JsonType.Boolean;\n                instBoolean = (bool) obj;\n                return;\n            }\n\n            if (obj is Double) {\n                type = JsonType.Double;\n                instDouble = (double) obj;\n                return;\n            }\n\n            if (obj is Int32) {\n                type = JsonType.Int;\n                instInt = (int) obj;\n                return;\n            }\n\n            if (obj is Int64) {\n                type = JsonType.Long;\n                instLong = (long) obj;\n                return;\n            }\n\n            if (obj is Decimal)\n            {\n                type = JsonType.Decimal;\n                instDecimal = (decimal)obj;\n                return;\n            }\n\n            if (obj is UInt64)\n            {\n                type = JsonType.ULong;\n                instUlong = (ulong)obj;\n                return;\n            }\n\n            var s = obj as string;\n            if (s != null) {\n                type = JsonType.String;\n                instString = s;\n                return;\n            }\n\n            throw new ArgumentException (\n                \"Unable to wrap the given object with JsonData\");\n        }\n\n        public JsonData (string str)\n        {\n            type = JsonType.String;\n            instString = str;\n        }\n\n        public static implicit operator JsonData (Boolean data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Double data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Int32 data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Int64 data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData(Decimal data)\n        {\n            return new JsonData(data);\n        }\n\n        public static implicit operator JsonData(UInt64 data)\n        {\n            return new JsonData(data);\n        }\n\n        public static implicit operator JsonData(String data)\n        {\n            return new JsonData (data);\n        }\n\n        public static explicit operator Boolean (JsonData data)\n        {\n            if (data.type != JsonType.Boolean)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a double\");\n\n            return data.instBoolean;\n        }\n\n        public static explicit operator Double (JsonData data)\n        {\n            if (data.type != JsonType.Double)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a double\");\n\n            return data.instDouble;\n        }\n\n        public static explicit operator Int32 (JsonData data)\n        {\n            if (data.type != JsonType.Int)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold an int\");\n\n            return data.instInt;\n        }\n\n        public static explicit operator Int64 (JsonData data)\n        {\n            if (data.type != JsonType.Long)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a long\");\n\n            return data.instLong;\n        }\n\n        public static explicit operator Decimal(JsonData data)\n        {\n            if (data.type != JsonType.Decimal && data.type != JsonType.Double)\n                throw new InvalidCastException(\n                    \"Instance of JsonData doesn't hold a decimal\");\n\n            if (data.type == JsonType.Double)\n            {\n                return (decimal) data.instDouble;\n            }\n\n            return data.instDecimal;\n        }\n\n        public static explicit operator UInt64(JsonData data)\n        {\n            if (data.type != JsonType.ULong && \n                data.type != JsonType.Long &&\n                data.type != JsonType.Int)\n                throw new InvalidCastException(\n                    \"Instance of JsonData doesn't hold a ulong\");\n\n            if (data.type == JsonType.Int)\n            {\n                return (ulong)data.instInt;\n            }\n\n            if (data.type == JsonType.Long)\n            {\n                return (ulong)data.instLong;\n            }\n\n            return data.instUlong;\n        }\n\n        public static explicit operator String (JsonData data)\n        {\n            if (data.type != JsonType.String)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a string\");\n\n            return data.instString;\n        }\n\n        void ICollection.CopyTo (Array array, int index)\n        {\n            EnsureCollection ().CopyTo (array, index);\n        }\n\n        void IDictionary<string, JsonData>.Add (string key, JsonData value)\n        {\n            JsonData data = ToJsonData (value);\n\n            EnsureDictionary ().Add (key, data);\n\n            var entry = new KeyValuePair<string, JsonData>(key, data);\n            objectList.Add(entry);\n\n            json = null;\n        }\n\n        bool IDictionary<string, JsonData>.ContainsKey(string key)\n        {\n            return EnsureDictionary().ContainsKey(key);\n        }\n\n        bool IDictionary<string, JsonData>.Remove(string key)\n        {\n            bool removed = EnsureDictionary ().Remove (key);\n\n            for (int i = 0; i < objectList.Count; i++) {\n                if (objectList[i].Key == key)\n                {\n                    objectList.RemoveAt(i);\n                    break;\n                }\n            }\n\n            json = null;\n\n            return removed;\n        }\n\n        IEnumerator IEnumerable.GetEnumerator ()\n        {\n            return EnsureCollection ().GetEnumerator ();\n        }\n\n        bool IJsonWrapper.GetBoolean ()\n        {\n            if (type != JsonType.Boolean)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a boolean\");\n\n            return instBoolean;\n        }\n\n        double IJsonWrapper.GetDouble ()\n        {\n            if (type != JsonType.Double)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a double\");\n\n            return instDouble;\n        }\n\n        int IJsonWrapper.GetInt ()\n        {\n            if (type != JsonType.Int)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold an int\");\n\n            return instInt;\n        }\n\n        long IJsonWrapper.GetLong ()\n        {\n            if (type != JsonType.Long)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a long\");\n\n            return instLong;\n        }\n\n        string IJsonWrapper.GetString ()\n        {\n            if (type != JsonType.String)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a string\");\n\n            return instString;\n        }\n\n        decimal IJsonWrapper.GetDecimal()\n        {\n            if (type != JsonType.Decimal && type != JsonType.Double)\n            {\n                throw new InvalidOperationException(\n                    \"JsonData instance doesn't hold a decimal\");\n            }\n\n            if (type == JsonType.Double)\n            {\n                return (decimal)instDouble;\n            }\n\n            return instDecimal;\n        }\n\n        ulong IJsonWrapper.GetUlong()\n        {\n            if (type != JsonType.ULong && \n                type != JsonType.Long &&\n                type != JsonType.Int)\n            {\n                throw new InvalidOperationException(\n                    \"JsonData instance doesn't hold a ulong\");\n            }\n\n            if (type == JsonType.Int)\n            {\n                return (ulong)instInt;\n            }\n\n            if (type == JsonType.Long)\n            {\n                return (ulong)instLong;\n            }\n\n            return instUlong;\n        }\n\n        void IJsonWrapper.SetBoolean (bool val)\n        {\n            type = JsonType.Boolean;\n            instBoolean = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetDouble (double val)\n        {\n            type = JsonType.Double;\n            instDouble = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetInt (int val)\n        {\n            type = JsonType.Int;\n            instInt = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetLong (long val)\n        {\n            type = JsonType.Long;\n            instLong = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetString (string val)\n        {\n            type = JsonType.String;\n            instString = val;\n            json = null;\n        }\n\n        public void SetDecimal(decimal val)\n        {\n            type = JsonType.Decimal;\n            instDecimal = val;\n            json = null;\n        }\n\n        public void SetUlong(ulong val)\n        {\n            type = JsonType.ULong;\n            instUlong = val;\n            json = null;\n        }\n\n        string IJsonWrapper.ToJson ()\n        {\n            return ToJson ();\n        }\n\n        void IJsonWrapper.ToJson (JsonWriter writer)\n        {\n            ToJson (writer);\n        }\n\n        int IList.Add (object value)\n        {\n            return Add (value);\n        }\n\n        void IList.Clear ()\n        {\n            EnsureList ().Clear ();\n            json = null;\n        }\n\n        bool IList.Contains (object value)\n        {\n            return EnsureList ().Contains (value);\n        }\n\n        int IList.IndexOf (object value)\n        {\n            return EnsureList ().IndexOf (value);\n        }\n\n        void IList.Insert (int index, object value)\n        {\n            EnsureList ().Insert (index, value);\n            json = null;\n        }\n\n        void IList.Remove (object value)\n        {\n            EnsureList ().Remove (value);\n            json = null;\n        }\n\n        void IList.RemoveAt (int index)\n        {\n            EnsureList ().RemoveAt (index);\n            json = null;\n        }\n\n        IDictionaryEnumerator IOrderedDictionary.GetEnumerator ()\n        {\n            EnsureDictionary ();\n\n            return new OrderedDictionaryEnumerator (\n                objectList.GetEnumerator ());\n        }\n\n        void IOrderedDictionary.Insert (int idx, object key, object value)\n        {\n            var property = (string) key;\n            JsonData data  = ToJsonData (value);\n\n            this[property] = data;\n\n            var entry = new KeyValuePair<string, JsonData> (property, data);\n\n            objectList.Insert (idx, entry);\n        }\n\n        void IOrderedDictionary.RemoveAt (int idx)\n        {\n            EnsureDictionary ();\n\n            InstObject.Remove (objectList[idx].Key);\n            objectList.RemoveAt (idx);\n        }\n\n        private ICollection EnsureCollection ()\n        {\n            if (type == JsonType.Array)\n                return (ICollection) instArray;\n\n            if (type == JsonType.Object)\n                return (ICollection) InstObject;\n\n            throw new InvalidOperationException (\n                \"The JsonData instance has to be initialized first\");\n        }\n\n        private IDictionary<string, JsonData> EnsureDictionary ()\n        {\n            if (type == JsonType.Object)\n                return InstObject;\n\n            if (type != JsonType.None)\n                throw new InvalidOperationException (\n                    \"Instance of JsonData is not a dictionary\");\n\n            type = JsonType.Object;\n            InstObject = new Dictionary<string, JsonData> ();\n            objectList = new List<KeyValuePair<string, JsonData>> ();\n\n            return InstObject;\n        }\n\n        private IList EnsureList ()\n        {\n            if (type == JsonType.Array)\n                return (IList) instArray;\n\n            if (type != JsonType.None)\n                throw new InvalidOperationException (\n                    \"Instance of JsonData is not a list\");\n\n            type = JsonType.Array;\n            instArray = new List<JsonData> ();\n\n            return (IList) instArray;\n        }\n\n        private JsonData ToJsonData (object obj)\n        {\n            if (obj == null)\n                return null;\n\n            var jsonData = obj as JsonData;\n            if (jsonData != null) return jsonData;\n\n            return new JsonData (obj);\n        }\n\n        private static void WriteJson (IJsonWrapper obj, JsonWriter writer)\n        {\n            if (obj.IsString) {\n                writer.Write (obj.GetString ());\n                return;\n            }\n\n            if (obj.IsBoolean) {\n                writer.Write (obj.GetBoolean ());\n                return;\n            }\n\n            if (obj.IsDouble) {\n                writer.Write (obj.GetDouble ());\n                return;\n            }\n\n            if (obj.IsInt) {\n                writer.Write (obj.GetInt ());\n                return;\n            }\n\n            if (obj.IsLong) {\n                writer.Write (obj.GetLong ());\n                return;\n            }\n\n            if (obj.IsDecimal)\n            {\n                writer.Write(obj.GetDecimal());\n                return;\n            }\n\n            if (obj.IsULong)\n            {\n                writer.Write(obj.GetUlong());\n                return;\n            }\n\n            if (obj.IsArray)\n            {\n                writer.WriteArrayStart ();\n                foreach (object elem in (IList) obj)\n                    WriteJson ((JsonData) elem, writer);\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj.IsObject) {\n                writer.WriteObjectStart ();\n\n                foreach (var entry in ((IDictionary<string, JsonData>) obj))\n                {\n                    writer.WritePropertyName(entry.Key);\n                    WriteJson(entry.Value, writer);\n                }\n                writer.WriteObjectEnd ();\n            }\n        }\n\n\n        public int Add (object value)\n        {\n            JsonData data = ToJsonData (value);\n\n            json = null;\n\n            return EnsureList ().Add (data);\n        }\n\n        public void Clear ()\n        {\n            if (IsObject) {\n                ((IDictionary<string, JsonData>)this).Clear();\n                return;\n            }\n\n            if (IsArray) {\n                ((IList) this).Clear ();\n            }\n        }\n\n        public bool Equals (JsonData x)\n        {\n            if (x == null)\n                return false;\n\n            if (x.type != type)\n                return false;\n\n            switch (type) {\n            case JsonType.None:\n                return true;\n\n            case JsonType.Object:\n                return InstObject.Equals (x.InstObject);\n\n            case JsonType.Array:\n                return instArray.Equals (x.instArray);\n\n            case JsonType.String:\n                return instString.Equals (x.instString);\n\n            case JsonType.Int:\n                return instInt.Equals (x.instInt);\n\n            case JsonType.Long:\n                return instLong.Equals (x.instLong);\n\n            case JsonType.Double:\n                return instDouble.Equals (x.instDouble);\n\n            case JsonType.Boolean:\n                return instBoolean.Equals (x.instBoolean);\n\n            case JsonType.Decimal:\n                return instDecimal.Equals(x.instDecimal);\n\n            case JsonType.ULong:\n                return instUlong.Equals(x.instUlong);\n            }\n\n            return false;\n        }\n\n        public JsonType GetJsonType ()\n        {\n            return type;\n        }\n\n        public void SetJsonType (JsonType jsonType)\n        {\n            if (type == jsonType)\n                return;\n\n            switch (jsonType) {\n            case JsonType.None:\n                break;\n\n            case JsonType.Object:\n                InstObject = new Dictionary<string, JsonData> ();\n                objectList = new List<KeyValuePair<string, JsonData>> ();\n                break;\n\n            case JsonType.Array:\n                instArray = new List<JsonData> ();\n                break;\n\n            case JsonType.String:\n                instString = default (String);\n                break;\n\n            case JsonType.Int:\n                instInt = default (Int32);\n                break;\n\n            case JsonType.Long:\n                instLong = default (Int64);\n                break;\n\n            case JsonType.Double:\n                instDouble = default (Double);\n                break;\n\n            case JsonType.Boolean:\n                instBoolean = default (Boolean);\n                break;\n\n            case JsonType.Decimal:\n                instDecimal = default(Decimal);\n                break;\n\n            case JsonType.ULong:\n                instUlong = default(UInt64);\n                break;\n            }\n\n            type = jsonType;\n        }\n\n        public string ToJson ()\n        {\n            if (json != null)\n                return json;\n\n            var sw = new StringWriter ();\n            var writer = new JsonWriter(sw) {Validate = false};\n\n            WriteJson (this, writer);\n            json = sw.ToString ();\n\n            return json;\n        }\n\n        public void ToJson (JsonWriter writer)\n        {\n            bool oldValidate = writer.Validate;\n\n            writer.Validate = false;\n\n            WriteJson (this, writer);\n\n            writer.Validate = oldValidate;\n        }\n\n        public override string ToString ()\n        {\n            switch (type) {\n            case JsonType.Array:\n                return \"JsonData array\";\n\n            case JsonType.Boolean:\n                return instBoolean.ToString ();\n\n            case JsonType.Double:\n                return instDouble.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Int:\n                return instInt.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Long:\n                return instLong.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Decimal:\n                return instDecimal.ToString(CultureInfo.InvariantCulture);\n\n            case JsonType.ULong:\n                return instUlong.ToString(CultureInfo.InvariantCulture);\n\n            case JsonType.Object:\n                return \"JsonData object\";\n\n            case JsonType.String:\n                return instString;\n            }\n\n            return \"Uninitialized JsonData\";\n        }\n\n\n        public bool TryGetValue(string key, out JsonData value)\n        {\n            return EnsureDictionary().TryGetValue(key, out value);\n        }\n\n        public void Add(KeyValuePair<string, JsonData> item)\n        {\n            EnsureDictionary().Add(item);\n        }\n\n        public bool Contains(KeyValuePair<string, JsonData> item)\n        {\n            return EnsureDictionary().Contains(item);\n        }\n\n        public void CopyTo(KeyValuePair<string, JsonData>[] array, int arrayIndex)\n        {\n            EnsureDictionary().CopyTo(array, arrayIndex);\n        }\n\n        bool ICollection<KeyValuePair<string, JsonData>>.IsReadOnly\n        {\n            get { return EnsureDictionary().IsReadOnly; }\n        }\n\n        public bool Remove(KeyValuePair<string, JsonData> item)\n        {\n            return EnsureDictionary().Remove(item.Key);\n        }\n\n        IEnumerator<KeyValuePair<string, JsonData>> IEnumerable<KeyValuePair<string, JsonData>>.GetEnumerator()\n        {\n            return EnsureDictionary().GetEnumerator();\n        }\n    }\n\n    internal class OrderedDictionaryEnumerator : IDictionaryEnumerator\n    {\n        readonly IEnumerator<KeyValuePair<string, JsonData>> listEnumerator;\n\n        public object Current {\n            get { return Entry; }\n        }\n\n        public DictionaryEntry Entry {\n            get {\n                KeyValuePair<string, JsonData> curr = listEnumerator.Current;\n                return new DictionaryEntry (curr.Key, curr.Value);\n            }\n        }\n\n        public object Key {\n            get { return listEnumerator.Current.Key; }\n        }\n\n        public object Value {\n            get { return listEnumerator.Current.Value; }\n        }\n\n\n        public OrderedDictionaryEnumerator (\n            IEnumerator<KeyValuePair<string, JsonData>> enumerator)\n        {\n            listEnumerator = enumerator;\n        }\n\n\n        public bool MoveNext ()\n        {\n            return listEnumerator.MoveNext ();\n        }\n\n        public void Reset ()\n        {\n            listEnumerator.Reset ();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/JsonException.cs",
    "content": "/**\n * JsonException.cs\n *   Base class throwed by LitJSON when a parsing error occurs.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\n\n\nnamespace LitJson\n{\n    public class JsonException : Exception\n    {\n        public JsonException () : base ()\n        {\n        }\n\n        internal JsonException (ParserToken token) :\n            base (String.Format (\n                    \"Invalid token '{0}' in input string\", token))\n        {\n        }\n\n        internal JsonException (ParserToken token,\n                                Exception inner_exception) :\n            base (String.Format (\n                    \"Invalid token '{0}' in input string\", token),\n                inner_exception)\n        {\n        }\n\n        internal JsonException (int c) :\n            base (String.Format (\n                    \"Invalid character '{0}' in input string\", (char) c))\n        {\n        }\n\n        internal JsonException (int c, Exception inner_exception) :\n            base (String.Format (\n                    \"Invalid character '{0}' in input string\", (char) c),\n                inner_exception)\n        {\n        }\n\n\n        public JsonException (string message) : base (message)\n        {\n        }\n\n        public JsonException (string message, Exception inner_exception) :\n            base (message, inner_exception)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/JsonMapper.cs",
    "content": "/**\n * JsonMapper.cs\n *   JSON to .Net object and object to JSON conversions.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace LitJson\n{\n    internal struct PropertyMetadata\n    {\n        public MemberInfo Info;\n        public bool       IsField;\n        public Type       Type;\n    }\n\n\n    internal struct ArrayMetadata\n    {\n        private Type element_type;\n        private bool is_array;\n        private bool is_list;\n\n\n        public Type ElementType {\n            get {\n                if (element_type == null)\n                    return typeof (JsonData);\n\n                return element_type;\n            }\n\n            set { element_type = value; }\n        }\n\n        public bool IsArray {\n            get { return is_array; }\n            set { is_array = value; }\n        }\n\n        public bool IsList {\n            get { return is_list; }\n            set { is_list = value; }\n        }\n    }\n\n\n    internal struct ObjectMetadata\n    {\n        private Type element_type;\n        private bool is_dictionary;\n\n        private IDictionary<string, PropertyMetadata> properties;\n\n\n        public Type ElementType {\n            get {\n                if (element_type == null)\n                    return typeof (JsonData);\n\n                return element_type;\n            }\n\n            set { element_type = value; }\n        }\n\n        public bool IsDictionary {\n            get { return is_dictionary; }\n            set { is_dictionary = value; }\n        }\n\n        public IDictionary<string, PropertyMetadata> Properties {\n            get { return properties; }\n            set { properties = value; }\n        }\n    }\n\n\n    internal delegate void ExporterFunc    (object obj, JsonWriter writer);\n    public   delegate void ExporterFunc<T> (T obj, JsonWriter writer);\n\n    internal delegate object ImporterFunc                (object input);\n    public   delegate TValue ImporterFunc<TJson, TValue> (TJson input);\n\n    public delegate IJsonWrapper WrapperFactory ();\n\n\n    public class JsonMapper\n    {\n        private static int max_nesting_depth;\n\n        private static IFormatProvider datetime_format;\n\n        private static IDictionary<Type, ExporterFunc> base_exporters_table;\n        private static IDictionary<Type, ExporterFunc> custom_exporters_table;\n\n        private static IDictionary<Type,\n                IDictionary<Type, ImporterFunc>> base_importers_table;\n        private static IDictionary<Type,\n                IDictionary<Type, ImporterFunc>> custom_importers_table;\n\n        private static IDictionary<Type, ArrayMetadata> array_metadata;\n        private static readonly object array_metadata_lock = new Object ();\n\n        private static IDictionary<Type,\n                IDictionary<Type, MethodInfo>> conv_ops;\n        private static readonly object conv_ops_lock = new Object ();\n\n        private static IDictionary<Type, ObjectMetadata> object_metadata;\n        private static readonly object object_metadata_lock = new Object ();\n\n        private static IDictionary<Type,\n                IList<PropertyMetadata>> type_properties;\n        private static readonly object type_properties_lock = new Object ();\n\n        private static JsonWriter      static_writer;\n        private static readonly object static_writer_lock = new Object ();\n\n        static JsonMapper ()\n        {\n            max_nesting_depth = 100;\n\n            array_metadata = new Dictionary<Type, ArrayMetadata> ();\n            conv_ops = new Dictionary<Type, IDictionary<Type, MethodInfo>> ();\n            object_metadata = new Dictionary<Type, ObjectMetadata> ();\n            type_properties = new Dictionary<Type,\n                            IList<PropertyMetadata>> ();\n\n            static_writer = new JsonWriter ();\n\n            datetime_format = DateTimeFormatInfo.InvariantInfo;\n\n            base_exporters_table   = new Dictionary<Type, ExporterFunc> ();\n            custom_exporters_table = new Dictionary<Type, ExporterFunc> ();\n\n            base_importers_table = new Dictionary<Type,\n                                 IDictionary<Type, ImporterFunc>> ();\n            custom_importers_table = new Dictionary<Type,\n                                   IDictionary<Type, ImporterFunc>> ();\n\n            RegisterBaseExporters ();\n            RegisterBaseImporters ();\n        }\n\n        private static void AddArrayMetadata (Type type)\n        {\n            if (array_metadata.ContainsKey (type))\n                return;\n\n            ArrayMetadata data = new ArrayMetadata ();\n\n            data.IsArray = type.IsArray;\n\n#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            data.IsList = typeInfo.IsAssignableFrom(typeof(IList).GetTypeInfo());\n            var props = typeInfo.DeclaredProperties;\n#else\n            if (type.GetInterface (\"System.Collections.IList\", false) != null)\n                data.IsList = true;\n            var props = type.GetProperties ();\n#endif\n\n            foreach (PropertyInfo p_info in props) {\n                if (p_info.Name != \"Item\")\n                    continue;\n\n                ParameterInfo[] parameters = p_info.GetIndexParameters ();\n\n                if (parameters.Length != 1)\n                    continue;\n\n                if (parameters[0].ParameterType == typeof (int))\n                    data.ElementType = p_info.PropertyType;\n            }\n\n            lock (array_metadata_lock) {\n                try {\n                    array_metadata.Add (type, data);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static void AddObjectMetadata (Type type)\n        {\n            if (object_metadata.ContainsKey (type))\n                return;\n\n            ObjectMetadata data = new ObjectMetadata ();\n\n#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            data.IsDictionary = typeInfo.IsAssignableFrom(typeof(IDictionary<string, JsonData>).GetTypeInfo());\n            var props = typeInfo.DeclaredProperties;\n            var fields = typeInfo.DeclaredFields;\n#else\n            if (type.GetInterface(\"System.Collections.IDictionary\", false) != null)\n                data.IsDictionary = true;\n            var props = type.GetProperties ();\n            var fields = type.GetFields ();\n#endif\n\n            data.Properties = new Dictionary<string, PropertyMetadata> ();\n\n            foreach (PropertyInfo p_info in props) {\n                if (p_info.Name == \"Item\") {\n                    ParameterInfo[] parameters = p_info.GetIndexParameters ();\n\n                    if (parameters.Length != 1)\n                        continue;\n\n                    if (parameters[0].ParameterType == typeof (string))\n                        data.ElementType = p_info.PropertyType;\n\n                    continue;\n                }\n\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = p_info;\n                p_data.Type = p_info.PropertyType;\n\n                data.Properties.Add (p_info.Name, p_data);\n            }\n\n            foreach (FieldInfo f_info in fields) {\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = f_info;\n                p_data.IsField = true;\n                p_data.Type = f_info.FieldType;\n\n                data.Properties.Add (f_info.Name, p_data);\n            }\n\n            lock (object_metadata_lock) {\n                try {\n                    object_metadata.Add (type, data);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static void AddTypeProperties (Type type)\n        {\n            if (type_properties.ContainsKey (type))\n                return;\n\n            IList<PropertyMetadata> props = new List<PropertyMetadata> ();\n\n#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            var propInfos = typeInfo.DeclaredProperties;\n            var fields = typeInfo.DeclaredFields;\n#else\n            var propInfos = type.GetProperties ();\n            var fields = type.GetFields ();\n#endif\n\n            foreach (PropertyInfo p_info in propInfos)\n            {\n                if (p_info.Name == \"Item\")\n                    continue;\n\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = p_info;\n                p_data.IsField = false;\n                props.Add (p_data);\n            }\n\n            foreach (FieldInfo f_info in fields) {\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = f_info;\n                p_data.IsField = true;\n\n                props.Add (p_data);\n            }\n\n            lock (type_properties_lock) {\n                try {\n                    type_properties.Add (type, props);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static MethodInfo GetConvOp (Type t1, Type t2)\n        {\n            lock (conv_ops_lock) {\n                if (! conv_ops.ContainsKey (t1))\n                    conv_ops.Add (t1, new Dictionary<Type, MethodInfo> ());\n            }\n\n            if (conv_ops[t1].ContainsKey (t2))\n                return conv_ops[t1][t2];\n\n#if NETFX_CORE\n            MethodInfo op = \n                t1.GetTypeInfo()\n                  .DeclaredMethods\n                  .Where(meth => meth.Name == \"op_Implicit\" && meth.IsGenericMethod)\n                  .First();\n#else\n            MethodInfo op = t1.GetMethod (\n                \"op_Implicit\", new Type[] { t2 });\n#endif\n\n            lock (conv_ops_lock) {\n                try {\n                    conv_ops[t1].Add (t2, op);\n                } catch (ArgumentException) {\n                    return conv_ops[t1][t2];\n                }\n            }\n\n            return op;\n        }\n\n        private static object ReadValue (Type inst_type, JsonReader reader)\n        {\n            reader.Read ();\n\n            if (reader.Token == JsonToken.ArrayEnd)\n                return null;\n\n            if (reader.Token == JsonToken.Null) {\n\n#if NETFX_CORE\n                if (!inst_type.GetTypeInfo().IsClass)\n#else\n                if (! inst_type.IsClass)\n#endif\n                    throw new JsonException (String.Format (\n                            \"Can't assign null to an instance of type {0}\",\n                            inst_type));\n\n                return null;\n            }\n\n            if (reader.Token == JsonToken.Double ||\n                reader.Token == JsonToken.Int ||\n                reader.Token == JsonToken.Long ||\n                reader.Token == JsonToken.String ||\n                reader.Token == JsonToken.Boolean) {\n\n                Type json_type = reader.Value.GetType ();\n\n#if NETFX_CORE\n                if (inst_type.GetTypeInfo().IsAssignableFrom(json_type.GetTypeInfo()))\n#else\n                if (inst_type.IsAssignableFrom (json_type))\n#endif\n                    return reader.Value;\n\n                // If there's a custom importer that fits, use it\n                if (custom_importers_table.ContainsKey (json_type) &&\n                    custom_importers_table[json_type].ContainsKey (\n                        inst_type)) {\n\n                    ImporterFunc importer =\n                        custom_importers_table[json_type][inst_type];\n\n                    return importer (reader.Value);\n                }\n\n                // Maybe there's a base importer that works\n                if (base_importers_table.ContainsKey (json_type) &&\n                    base_importers_table[json_type].ContainsKey (\n                        inst_type)) {\n\n                    ImporterFunc importer =\n                        base_importers_table[json_type][inst_type];\n\n                    return importer (reader.Value);\n                }\n\n                // Maybe it's an enum\n#if NETFX_CORE\n                if (inst_type.GetTypeInfo().IsEnum)\n#else\n                if (inst_type.IsEnum)\n#endif\n                    return Enum.ToObject (inst_type, reader.Value);\n\n                // Try using an implicit conversion operator\n                MethodInfo conv_op = GetConvOp (inst_type, json_type);\n\n                if (conv_op != null)\n                    return conv_op.Invoke (null,\n                                           new object[] { reader.Value });\n\n                // No luck\n                throw new JsonException (String.Format (\n                        \"Can't assign value '{0}' (type {1}) to type {2}\",\n                        reader.Value, json_type, inst_type));\n            }\n\n            object instance = null;\n\n            if (reader.Token == JsonToken.ArrayStart) {\n\n                AddArrayMetadata (inst_type);\n                ArrayMetadata t_data = array_metadata[inst_type];\n\n                if (! t_data.IsArray && ! t_data.IsList)\n                    throw new JsonException (String.Format (\n                            \"Type {0} can't act as an array\",\n                            inst_type));\n\n                IList list;\n                Type elem_type;\n\n                if (! t_data.IsArray) {\n                    list = (IList) Activator.CreateInstance (inst_type);\n                    elem_type = t_data.ElementType;\n                } else {\n                    list = new List<object>();\n                    elem_type = inst_type.GetElementType ();\n                }\n\n                while (true) {\n                    object item = ReadValue (elem_type, reader);\n                    if (reader.Token == JsonToken.ArrayEnd)\n                        break;\n\n                    list.Add (item);\n                }\n\n                if (t_data.IsArray) {\n                    int n = list.Count;\n                    instance = Array.CreateInstance (elem_type, n);\n\n                    for (int i = 0; i < n; i++)\n                        ((Array) instance).SetValue (list[i], i);\n                } else\n                    instance = list;\n\n            } else if (reader.Token == JsonToken.ObjectStart) {\n\n                AddObjectMetadata (inst_type);\n                ObjectMetadata t_data = object_metadata[inst_type];\n\n                instance = Activator.CreateInstance (inst_type);\n\n                while (true) {\n                    reader.Read ();\n\n                    if (reader.Token == JsonToken.ObjectEnd)\n                        break;\n\n                    string property = (string) reader.Value;\n\n                    if (t_data.Properties.ContainsKey (property)) {\n                        PropertyMetadata prop_data =\n                            t_data.Properties[property];\n\n                        if (prop_data.IsField) {\n                            ((FieldInfo) prop_data.Info).SetValue (\n                                instance, ReadValue (prop_data.Type, reader));\n                        } else {\n                            PropertyInfo p_info =\n                                (PropertyInfo) prop_data.Info;\n\n                            if (p_info.CanWrite)\n                                p_info.SetValue (\n                                    instance,\n                                    ReadValue (prop_data.Type, reader),\n                                    null);\n                            else\n                                ReadValue (prop_data.Type, reader);\n                        }\n\n                    } else {\n                        if (! t_data.IsDictionary)\n                            throw new JsonException (String.Format (\n                                    \"The type {0} doesn't have the \" +\n                                    \"property '{1}'\", inst_type, property));\n\n                        ((IDictionary<string, JsonData>)instance).Add(\n                            property, (JsonData)ReadValue (\n                                t_data.ElementType, reader));\n                    }\n\n                }\n\n            }\n\n            return instance;\n        }\n\n        private static IJsonWrapper ReadValue (WrapperFactory factory,\n                                               JsonReader reader)\n        {\n            reader.Read ();\n\n            if (reader.Token == JsonToken.ArrayEnd ||\n                reader.Token == JsonToken.Null)\n                return null;\n\n            IJsonWrapper instance = factory ();\n\n            if (reader.Token == JsonToken.String) {\n                instance.SetString ((string) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Double) {\n                instance.SetDouble ((double) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Int) {\n                instance.SetInt ((int) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Long) {\n                instance.SetLong ((long) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Boolean) {\n                instance.SetBoolean ((bool) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.ArrayStart) {\n                instance.SetJsonType (JsonType.Array);\n\n                while (true) {\n                    IJsonWrapper item = ReadValue (factory, reader);\n                    if (item == null && reader.Token == JsonToken.ArrayEnd)\n                        break;\n\n                    ((IList) instance).Add (item);\n                }\n            }\n            else if (reader.Token == JsonToken.ObjectStart) {\n                instance.SetJsonType (JsonType.Object);\n\n                while (true) {\n                    reader.Read ();\n\n                    if (reader.Token == JsonToken.ObjectEnd)\n                        break;\n\n                    string property = (string) reader.Value;\n\n                    ((IDictionary<string, JsonData>)instance)[property] = (JsonData)ReadValue(\n                        factory, reader);\n                }\n\n            }\n\n            return instance;\n        }\n\n        private static void RegisterBaseExporters ()\n        {\n            base_exporters_table[typeof (byte)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((byte) obj));\n                };\n\n            base_exporters_table[typeof (char)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToString ((char) obj));\n                };\n\n            base_exporters_table[typeof (DateTime)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToString ((DateTime) obj,\n                                                    datetime_format));\n                };\n\n            base_exporters_table[typeof (decimal)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write ((decimal) obj);\n                };\n\n            base_exporters_table[typeof (sbyte)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((sbyte) obj));\n                };\n\n            base_exporters_table[typeof (short)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((short) obj));\n                };\n\n            base_exporters_table[typeof (ushort)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((ushort) obj));\n                };\n\n            base_exporters_table[typeof (uint)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToUInt64 ((uint) obj));\n                };\n\n            base_exporters_table[typeof (ulong)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write ((ulong) obj);\n                };\n        }\n\n        private static void RegisterBaseImporters ()\n        {\n            ImporterFunc importer;\n\n            importer = delegate (object input) {\n                return Convert.ToByte ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (byte), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt64 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (ulong), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToSByte ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (sbyte), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToInt16 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (short), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt16 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (ushort), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt32 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (uint), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToSingle ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (float), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDouble ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (double), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDecimal ((double) input);\n            };\n            RegisterImporter (base_importers_table, typeof (double),\n                              typeof (decimal), importer);\n\n\n            importer = delegate (object input) {\n                return Convert.ToUInt32 ((long) input);\n            };\n            RegisterImporter (base_importers_table, typeof (long),\n                              typeof (uint), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToChar ((string) input);\n            };\n            RegisterImporter (base_importers_table, typeof (string),\n                              typeof (char), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDateTime ((string) input, datetime_format);\n            };\n            RegisterImporter (base_importers_table, typeof (string),\n                              typeof (DateTime), importer);\n        }\n\n        private static void RegisterImporter (\n            IDictionary<Type, IDictionary<Type, ImporterFunc>> table,\n            Type json_type, Type value_type, ImporterFunc importer)\n        {\n            if (! table.ContainsKey (json_type))\n                table.Add (json_type, new Dictionary<Type, ImporterFunc> ());\n\n            table[json_type][value_type] = importer;\n        }\n\n        private static void WriteValue (object obj, JsonWriter writer,\n                                        bool writer_is_private,\n                                        int depth)\n        {\n            if (depth > max_nesting_depth)\n                throw new JsonException (\n                    String.Format (\"Max allowed object depth reached while \" +\n                                   \"trying to export from type {0}\",\n                                   obj.GetType ()));\n\n            if (obj == null) {\n                writer.Write (null);\n                return;\n            }\n\n            if (obj is IJsonWrapper) {\n                if (writer_is_private)\n                    writer.TextWriter.Write (((IJsonWrapper) obj).ToJson ());\n                else\n                    ((IJsonWrapper) obj).ToJson (writer);\n\n                return;\n            }\n\n            if (obj is String) {\n                writer.Write ((string) obj);\n                return;\n            }\n\n            if (obj is Double) {\n                writer.Write ((double) obj);\n                return;\n            }\n\n            if (obj is Int32) {\n                writer.Write ((int) obj);\n                return;\n            }\n\n            if (obj is Boolean) {\n                writer.Write ((bool) obj);\n                return;\n            }\n\n            if (obj is Int64) {\n                writer.Write ((long) obj);\n                return;\n            }\n\n            if (obj is Array) {\n                writer.WriteArrayStart ();\n\n                foreach (object elem in (Array) obj)\n                    WriteValue (elem, writer, writer_is_private, depth + 1);\n\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj is IList) {\n                writer.WriteArrayStart ();\n                foreach (object elem in (IList) obj)\n                    WriteValue (elem, writer, writer_is_private, depth + 1);\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj is IDictionary<string, JsonData>)\n            {\n                writer.WriteObjectStart ();\n                foreach (var entry in (IDictionary<string, JsonData>)obj)\n                {\n                    writer.WritePropertyName ((string) entry.Key);\n                    WriteValue (entry.Value, writer, writer_is_private,\n                                depth + 1);\n                }\n                writer.WriteObjectEnd ();\n\n                return;\n            }\n\n            Type obj_type = obj.GetType ();\n\n            // See if there's a custom exporter for the object\n            if (custom_exporters_table.ContainsKey (obj_type)) {\n                ExporterFunc exporter = custom_exporters_table[obj_type];\n                exporter (obj, writer);\n\n                return;\n            }\n\n            // If not, maybe there's a base exporter\n            if (base_exporters_table.ContainsKey (obj_type)) {\n                ExporterFunc exporter = base_exporters_table[obj_type];\n                exporter (obj, writer);\n\n                return;\n            }\n\n            // Last option, let's see if it's an enum\n            if (obj is Enum) {\n                Type e_type = Enum.GetUnderlyingType (obj_type);\n\n                if (e_type == typeof (long)\n                    || e_type == typeof (uint)\n                    || e_type == typeof (ulong))\n                    writer.Write ((ulong) obj);\n                else\n                    writer.Write ((int) obj);\n\n                return;\n            }\n\n            // Okay, so it looks like the input should be exported as an\n            // object\n            AddTypeProperties (obj_type);\n            IList<PropertyMetadata> props = type_properties[obj_type];\n\n            writer.WriteObjectStart ();\n            foreach (PropertyMetadata p_data in props) {\n                if (p_data.IsField) {\n                    writer.WritePropertyName (p_data.Info.Name);\n                    WriteValue (((FieldInfo) p_data.Info).GetValue (obj),\n                                writer, writer_is_private, depth + 1);\n                }\n                else {\n                    PropertyInfo p_info = (PropertyInfo) p_data.Info;\n\n                    if (p_info.CanRead) {\n                        writer.WritePropertyName (p_data.Info.Name);\n                        WriteValue (p_info.GetValue (obj, null),\n                                    writer, writer_is_private, depth + 1);\n                    }\n                }\n            }\n            writer.WriteObjectEnd ();\n        }\n\n\n        public static string ToJson (object obj)\n        {\n            lock (static_writer_lock) {\n                static_writer.Reset ();\n\n                WriteValue (obj, static_writer, true, 0);\n\n                return static_writer.ToString ();\n            }\n        }\n\n        public static void ToJson (object obj, JsonWriter writer)\n        {\n            WriteValue (obj, writer, false, 0);\n        }\n\n        public static JsonData ToObject (JsonReader reader)\n        {\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, reader);\n        }\n\n        public static JsonData ToObject (TextReader reader)\n        {\n            JsonReader json_reader = new JsonReader (reader);\n\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, json_reader);\n        }\n\n        public static JsonData ToObject (string json)\n        {\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, json);\n        }\n\n        public static T ToObject<T> (JsonReader reader)\n        {\n            return (T) ReadValue (typeof (T), reader);\n        }\n\n        public static T ToObject<T> (TextReader reader)\n        {\n            JsonReader json_reader = new JsonReader (reader);\n\n            return (T) ReadValue (typeof (T), json_reader);\n        }\n\n        public static T ToObject<T> (string json)\n        {\n            JsonReader reader = new JsonReader (json);\n\n            return (T) ReadValue (typeof (T), reader);\n        }\n\n        public static IJsonWrapper ToWrapper (WrapperFactory factory,\n                                              JsonReader reader)\n        {\n            return ReadValue (factory, reader);\n        }\n\n        public static IJsonWrapper ToWrapper (WrapperFactory factory,\n                                              string json)\n        {\n            JsonReader reader = new JsonReader (json);\n\n            return ReadValue (factory, reader);\n        }\n\n        public static void RegisterExporter<T> (ExporterFunc<T> exporter)\n        {\n            ExporterFunc exporter_wrapper =\n                delegate (object obj, JsonWriter writer) {\n                    exporter ((T) obj, writer);\n                };\n\n            custom_exporters_table[typeof (T)] = exporter_wrapper;\n        }\n\n        public static void RegisterImporter<TJson, TValue> (\n            ImporterFunc<TJson, TValue> importer)\n        {\n            ImporterFunc importer_wrapper =\n                delegate (object input) {\n                    return importer ((TJson) input);\n                };\n\n            RegisterImporter (custom_importers_table, typeof (TJson),\n                              typeof (TValue), importer_wrapper);\n        }\n\n        public static void UnregisterExporters ()\n        {\n            custom_exporters_table.Clear ();\n        }\n\n        public static void UnregisterImporters ()\n        {\n            custom_importers_table.Clear ();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/JsonReader.cs",
    "content": "/**\n * JsonReader.cs\n *   Stream-like access to JSON text.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\n\nnamespace LitJson\n{\n    public enum JsonToken\n    {\n        None,\n\n        ObjectStart,\n        PropertyName,\n        ObjectEnd,\n\n        ArrayStart,\n        ArrayEnd,\n\n        Int,\n        Long,\n        ULong,\n        Double,\n\n        String,\n\n        Boolean,\n        Null\n    }\n\n\n    public class JsonReader\n    {\n        private static IDictionary<int, IDictionary<int, int[]>> parse_table;\n\n        private Stack<int>    automaton_stack;\n        private int           current_input;\n        private int           current_symbol;\n        private bool          end_of_json;\n        private bool          end_of_input;\n        private Lexer         lexer;\n        private bool          parser_in_string;\n        private bool          parser_return;\n        private bool          read_started;\n        private TextReader    reader;\n        private bool          reader_is_owned;\n        private object        token_value;\n        private JsonToken     token;\n\n        public bool AllowComments {\n            get { return lexer.AllowComments; }\n            set { lexer.AllowComments = value; }\n        }\n\n        public bool AllowSingleQuotedStrings {\n            get { return lexer.AllowSingleQuotedStrings; }\n            set { lexer.AllowSingleQuotedStrings = value; }\n        }\n\n        public bool EndOfInput {\n            get { return end_of_input; }\n        }\n\n        public bool EndOfJson {\n            get { return end_of_json; }\n        }\n\n        public JsonToken Token {\n            get { return token; }\n        }\n\n        public object Value {\n            get { return token_value; }\n        }\n\n        static JsonReader ()\n        {\n            PopulateParseTable ();\n        }\n\n        public JsonReader (string json_text) :\n            this (new StringReader (json_text), true)\n        {\n        }\n\n        public JsonReader (TextReader reader) :\n            this (reader, false)\n        {\n        }\n\n        private JsonReader (TextReader reader, bool owned)\n        {\n            if (reader == null)\n                throw new ArgumentNullException (\"reader\");\n\n            parser_in_string = false;\n            parser_return = false;\n\n            read_started = false;\n            automaton_stack = new Stack<int> ();\n            automaton_stack.Push ((int) ParserToken.End);\n            automaton_stack.Push ((int) ParserToken.Text);\n\n            lexer = new Lexer (reader);\n\n            end_of_input = false;\n            end_of_json  = false;\n\n            this.reader = reader;\n            reader_is_owned = owned;\n        }\n\n        private static void PopulateParseTable ()\n        {\n            parse_table = new Dictionary<int, IDictionary<int, int[]>> ();\n\n            TableAddRow (ParserToken.Array);\n            TableAddCol (ParserToken.Array, '[',\n                         '[',\n                         (int) ParserToken.ArrayPrime);\n\n            TableAddRow (ParserToken.ArrayPrime);\n            TableAddCol (ParserToken.ArrayPrime, '\"',\n                         (int) ParserToken.Value,\n\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, '[',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, ']',\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, '{',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Number,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.True,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.False,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Null,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n\n            TableAddRow (ParserToken.Object);\n            TableAddCol (ParserToken.Object, '{',\n                         '{',\n                         (int) ParserToken.ObjectPrime);\n\n            TableAddRow (ParserToken.ObjectPrime);\n            TableAddCol (ParserToken.ObjectPrime, '\"',\n                         (int) ParserToken.Pair,\n                         (int) ParserToken.PairRest,\n                         '}');\n            TableAddCol (ParserToken.ObjectPrime, '}',\n                         '}');\n\n            TableAddRow (ParserToken.Pair);\n            TableAddCol (ParserToken.Pair, '\"',\n                         (int) ParserToken.String,\n                         ':',\n                         (int) ParserToken.Value);\n\n            TableAddRow (ParserToken.PairRest);\n            TableAddCol (ParserToken.PairRest, ',',\n                         ',',\n                         (int) ParserToken.Pair,\n                         (int) ParserToken.PairRest);\n            TableAddCol (ParserToken.PairRest, '}',\n                         (int) ParserToken.Epsilon);\n\n            TableAddRow (ParserToken.String);\n            TableAddCol (ParserToken.String, '\"',\n                         '\"',\n                         (int) ParserToken.CharSeq,\n                         '\"');\n\n            TableAddRow (ParserToken.Text);\n            TableAddCol (ParserToken.Text, '[',\n                         (int) ParserToken.Array);\n            TableAddCol (ParserToken.Text, '{',\n                         (int) ParserToken.Object);\n\n            TableAddRow (ParserToken.Value);\n            TableAddCol (ParserToken.Value, '\"',\n                         (int) ParserToken.String);\n            TableAddCol (ParserToken.Value, '[',\n                         (int) ParserToken.Array);\n            TableAddCol (ParserToken.Value, '{',\n                         (int) ParserToken.Object);\n            TableAddCol (ParserToken.Value, (int) ParserToken.Number,\n                         (int) ParserToken.Number);\n            TableAddCol (ParserToken.Value, (int) ParserToken.True,\n                         (int) ParserToken.True);\n            TableAddCol (ParserToken.Value, (int) ParserToken.False,\n                         (int) ParserToken.False);\n            TableAddCol (ParserToken.Value, (int) ParserToken.Null,\n                         (int) ParserToken.Null);\n\n            TableAddRow (ParserToken.ValueRest);\n            TableAddCol (ParserToken.ValueRest, ',',\n                         ',',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest);\n            TableAddCol (ParserToken.ValueRest, ']',\n                         (int) ParserToken.Epsilon);\n        }\n\n        private static void TableAddCol (ParserToken row, int col,\n                                         params int[] symbols)\n        {\n            parse_table[(int) row].Add (col, symbols);\n        }\n\n        private static void TableAddRow (ParserToken rule)\n        {\n            parse_table.Add ((int) rule, new Dictionary<int, int[]> ());\n        }\n\n        private void ProcessNumber (string number)\n        {\n            var numStyle = NumberStyles.Any;\n            var culture = new CultureInfo(\"en-US\");\n\n            if (number.IndexOf('.') != -1 ||\n                number.IndexOf('e') != -1 ||\n                number.IndexOf('E') != -1)\n            {\n                double n_double;\n                if (Double.TryParse(number, numStyle, culture, out n_double))\n                {\n                    token = JsonToken.Double;\n                    token_value = n_double;\n\n                    return;\n                }\n            }\n\n            int n_int32;\n            if (Int32.TryParse(number, numStyle, culture, out n_int32))\n            {\n                token = JsonToken.Int;\n                token_value = n_int32;\n\n                return;\n            }\n\n            long n_int64;\n            if (Int64.TryParse(number, out n_int64))\n            {\n                token = JsonToken.Long;\n                token_value = n_int64;\n\n                return;\n            }\n\n            ulong n_uint64;\n            if (UInt64.TryParse(number, numStyle, culture, out n_uint64))\n            {\n                token = JsonToken.ULong;\n                token_value = n_uint64;\n\n                return;\n            }\n\n            // Shouldn't happen, but just in case, return something\n            token = JsonToken.Int;\n            token_value = 0;\n        }\n\n        private void ProcessSymbol ()\n        {\n            if (current_symbol == '[')  {\n                token = JsonToken.ArrayStart;\n                parser_return = true;\n\n            } else if (current_symbol == ']')  {\n                token = JsonToken.ArrayEnd;\n                parser_return = true;\n\n            } else if (current_symbol == '{')  {\n                token = JsonToken.ObjectStart;\n                parser_return = true;\n\n            } else if (current_symbol == '}')  {\n                token = JsonToken.ObjectEnd;\n                parser_return = true;\n\n            } else if (current_symbol == '\"')  {\n                if (parser_in_string) {\n                    parser_in_string = false;\n\n                    parser_return = true;\n\n                } else {\n                    if (token == JsonToken.None)\n                        token = JsonToken.String;\n\n                    parser_in_string = true;\n                }\n\n            } else if (current_symbol == (int) ParserToken.CharSeq) {\n                token_value = lexer.StringValue;\n\n            } else if (current_symbol == (int) ParserToken.False)  {\n                token = JsonToken.Boolean;\n                token_value = false;\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Null)  {\n                token = JsonToken.Null;\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Number)  {\n                ProcessNumber (lexer.StringValue);\n\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Pair)  {\n                token = JsonToken.PropertyName;\n\n            } else if (current_symbol == (int) ParserToken.True)  {\n                token = JsonToken.Boolean;\n                token_value = true;\n                parser_return = true;\n\n            }\n        }\n\n        private bool ReadToken ()\n        {\n            if (end_of_input)\n                return false;\n\n            lexer.NextToken ();\n\n            if (lexer.EndOfInput) {\n                Close ();\n\n                return false;\n            }\n\n            current_input = lexer.Token;\n\n            return true;\n        }\n\n\n        public void Close ()\n        {\n            if (end_of_input)\n                return;\n\n            end_of_input = true;\n            end_of_json  = true;\n\n            if (reader_is_owned)\n                reader.Dispose ();\n\n            reader = null;\n        }\n\n        public bool Read ()\n        {\n            if (end_of_input)\n                return false;\n\n            if (end_of_json) {\n                end_of_json = false;\n                automaton_stack.Clear ();\n                automaton_stack.Push ((int) ParserToken.End);\n                automaton_stack.Push ((int) ParserToken.Text);\n            }\n\n            parser_in_string = false;\n            parser_return    = false;\n\n            token       = JsonToken.None;\n            token_value = null;\n\n            if (! read_started) {\n                read_started = true;\n\n                if (! ReadToken ())\n                    return false;\n            }\n\n\n            int[] entry_symbols;\n\n            while (true) {\n                if (parser_return) {\n                    if (automaton_stack.Peek () == (int) ParserToken.End)\n                        end_of_json = true;\n\n                    return true;\n                }\n\n                current_symbol = automaton_stack.Pop ();\n\n                ProcessSymbol ();\n\n                if (current_symbol == current_input) {\n                    if (! ReadToken ()) {\n                        if (automaton_stack.Peek () != (int) ParserToken.End)\n                            throw new JsonException (\n                                \"Input doesn't evaluate to proper JSON text\");\n\n                        if (parser_return)\n                            return true;\n\n                        return false;\n                    }\n\n                    continue;\n                }\n\n                try {\n\n                    entry_symbols =\n                        parse_table[current_symbol][current_input];\n\n                } catch (KeyNotFoundException e) {\n                    throw new JsonException ((ParserToken) current_input, e);\n                }\n\n                if (entry_symbols[0] == (int) ParserToken.Epsilon)\n                    continue;\n\n                for (int i = entry_symbols.Length - 1; i >= 0; i--)\n                    automaton_stack.Push (entry_symbols[i]);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/JsonWriter.cs",
    "content": "/**\n * JsonWriter.cs\n *   Stream-like facility to output JSON text.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\n\nnamespace LitJson\n{\n    internal enum Condition\n    {\n        InArray,\n        InObject,\n        NotAProperty,\n        Property,\n        Value\n    }\n\n    internal class WriterContext\n    {\n        public int  Count;\n        public bool InArray;\n        public bool InObject;\n        public bool ExpectingValue;\n        public int  Padding;\n    }\n\n    public class JsonWriter\n    {\n        private static NumberFormatInfo number_format;\n\n        private WriterContext        context;\n        private Stack<WriterContext> ctx_stack;\n        private bool                 has_reached_end;\n        private char[]               hex_seq;\n        private int                  indentation;\n        private int                  indent_value;\n        private StringBuilder        inst_string_builder;\n        private bool                 pretty_print;\n        private bool                 validate;\n        private TextWriter           writer;\n\n        public int IndentValue {\n            get { return indent_value; }\n            set {\n                indentation = (indentation / indent_value) * value;\n                indent_value = value;\n            }\n        }\n\n        public bool PrettyPrint {\n            get { return pretty_print; }\n            set { pretty_print = value; }\n        }\n\n        public TextWriter TextWriter {\n            get { return writer; }\n        }\n\n        public bool Validate {\n            get { return validate; }\n            set { validate = value; }\n        }\n\n        static JsonWriter ()\n        {\n            number_format = NumberFormatInfo.InvariantInfo;\n        }\n\n        public JsonWriter ()\n        {\n            inst_string_builder = new StringBuilder ();\n            writer = new StringWriter (inst_string_builder);\n\n            Init ();\n        }\n\n        public JsonWriter (StringBuilder sb) :\n            this (new StringWriter (sb))\n        {\n        }\n\n        public JsonWriter (TextWriter writer)\n        {\n            if (writer == null)\n                throw new ArgumentNullException (\"writer\");\n\n            this.writer = writer;\n\n            Init ();\n        }\n\n        private void DoValidation (Condition cond)\n        {\n            if (! context.ExpectingValue)\n                context.Count++;\n\n            if (! validate)\n                return;\n\n            if (has_reached_end)\n                throw new JsonException (\n                    \"A complete JSON symbol has already been written\");\n\n            switch (cond) {\n            case Condition.InArray:\n                if (! context.InArray)\n                    throw new JsonException (\n                        \"Can't close an array here\");\n                break;\n\n            case Condition.InObject:\n                if (! context.InObject || context.ExpectingValue)\n                    throw new JsonException (\n                        \"Can't close an object here\");\n                break;\n\n            case Condition.NotAProperty:\n                if (context.InObject && ! context.ExpectingValue)\n                    throw new JsonException (\n                        \"Expected a property\");\n                break;\n\n            case Condition.Property:\n                if (! context.InObject || context.ExpectingValue)\n                    throw new JsonException (\n                        \"Can't add a property here\");\n                break;\n\n            case Condition.Value:\n                if (! context.InArray &&\n                    (! context.InObject || ! context.ExpectingValue))\n                    throw new JsonException (\n                        \"Can't add a value here\");\n\n                break;\n            }\n        }\n\n        private void Init ()\n        {\n            has_reached_end = false;\n            hex_seq = new char[4];\n            indentation = 0;\n            indent_value = 4;\n            pretty_print = false;\n            validate = true;\n\n            ctx_stack = new Stack<WriterContext> ();\n            context = new WriterContext ();\n            ctx_stack.Push (context);\n        }\n\n        private static void IntToHex (int n, char[] hex)\n        {\n            int num;\n\n            for (int i = 0; i < 4; i++) {\n                num = n % 16;\n\n                if (num < 10)\n                    hex[3 - i] = (char) ('0' + num);\n                else\n                    hex[3 - i] = (char) ('A' + (num - 10));\n\n                n >>= 4;\n            }\n        }\n\n        private void Indent ()\n        {\n            if (pretty_print)\n                indentation += indent_value;\n        }\n\n\n        private void Put (string str)\n        {\n            if (pretty_print && ! context.ExpectingValue)\n                for (int i = 0; i < indentation; i++)\n                    writer.Write (' ');\n\n            writer.Write (str);\n        }\n\n        private void PutNewline ()\n        {\n            PutNewline (true);\n        }\n\n        private void PutNewline (bool add_comma)\n        {\n            if (add_comma && ! context.ExpectingValue &&\n                context.Count > 1)\n                writer.Write (',');\n\n            if (pretty_print && ! context.ExpectingValue)\n                writer.Write ('\\n');\n        }\n\n        private void PutString (string str)\n        {\n            Put (String.Empty);\n\n            writer.Write ('\"');\n\n            int n = str.Length;\n            for (int i = 0; i < n; i++) {\n                switch (str[i]) {\n                case '\\n':\n                    writer.Write (\"\\\\n\");\n                    continue;\n\n                case '\\r':\n                    writer.Write (\"\\\\r\");\n                    continue;\n\n                case '\\t':\n                    writer.Write (\"\\\\t\");\n                    continue;\n\n                case '\"':\n                case '\\\\':\n                    writer.Write ('\\\\');\n                    writer.Write (str[i]);\n                    continue;\n\n                case '\\f':\n                    writer.Write (\"\\\\f\");\n                    continue;\n\n                case '\\b':\n                    writer.Write (\"\\\\b\");\n                    continue;\n                }\n\n                if ((int) str[i] >= 32 && (int) str[i] <= 126) {\n                    writer.Write (str[i]);\n                    continue;\n                }\n\n                // Default, turn into a \\uXXXX sequence\n                IntToHex ((int) str[i], hex_seq);\n                writer.Write (\"\\\\u\");\n                writer.Write (hex_seq);\n            }\n\n            writer.Write ('\"');\n        }\n\n        private void Unindent ()\n        {\n            if (pretty_print)\n                indentation -= indent_value;\n        }\n\n\n        public override string ToString ()\n        {\n            if (inst_string_builder == null)\n                return String.Empty;\n\n            return inst_string_builder.ToString ();\n        }\n\n        public void Reset ()\n        {\n            has_reached_end = false;\n\n            ctx_stack.Clear ();\n            context = new WriterContext ();\n            ctx_stack.Push (context);\n\n            if (inst_string_builder != null)\n                inst_string_builder.Remove (0, inst_string_builder.Length);\n        }\n\n        public void Write (bool boolean)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (boolean ? \"true\" : \"false\");\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (decimal number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (double number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            string str = Convert.ToString (number, number_format);\n            Put (str);\n\n            if (str.IndexOf ('.') == -1 &&\n                str.IndexOf ('E') == -1)\n                writer.Write (\".0\");\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (int number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (long number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (string str)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            if (str == null)\n                Put (\"null\");\n            else\n                PutString (str);\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (ulong number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void WriteArrayEnd ()\n        {\n            DoValidation (Condition.InArray);\n            PutNewline (false);\n\n            ctx_stack.Pop ();\n            if (ctx_stack.Count == 1)\n                has_reached_end = true;\n            else {\n                context = ctx_stack.Peek ();\n                context.ExpectingValue = false;\n            }\n\n            Unindent ();\n            Put (\"]\");\n        }\n\n        public void WriteArrayStart ()\n        {\n            DoValidation (Condition.NotAProperty);\n            PutNewline ();\n\n            Put (\"[\");\n\n            context = new WriterContext ();\n            context.InArray = true;\n            ctx_stack.Push (context);\n\n            Indent ();\n        }\n\n        public void WriteObjectEnd ()\n        {\n            DoValidation (Condition.InObject);\n            PutNewline (false);\n\n            ctx_stack.Pop ();\n            if (ctx_stack.Count == 1)\n                has_reached_end = true;\n            else {\n                context = ctx_stack.Peek ();\n                context.ExpectingValue = false;\n            }\n\n            Unindent ();\n            Put (\"}\");\n        }\n\n        public void WriteObjectStart ()\n        {\n            DoValidation (Condition.NotAProperty);\n            PutNewline ();\n\n            Put (\"{\");\n\n            context = new WriterContext ();\n            context.InObject = true;\n            ctx_stack.Push (context);\n\n            Indent ();\n        }\n\n        public void WritePropertyName (string property_name)\n        {\n            DoValidation (Condition.Property);\n            PutNewline ();\n\n            PutString (property_name);\n\n            if (pretty_print) {\n                if (property_name.Length > context.Padding)\n                    context.Padding = property_name.Length;\n\n                for (int i = context.Padding - property_name.Length;\n                     i >= 0; i--)\n                    writer.Write (' ');\n\n                writer.Write (\": \");\n            } else\n                writer.Write (':');\n\n            context.ExpectingValue = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/Lexer.cs",
    "content": "/**\n * Lexer.cs\n *   JSON lexer implementation based on a finite state machine.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\nusing System;\nusing System.IO;\nusing System.Text;\n\nnamespace LitJson\n{\n    internal class FsmContext\n    {\n        public bool  Return;\n        public int   NextState;\n        public Lexer L;\n        public int   StateStack;\n    }\n\n\n    internal class Lexer\n    {\n        private delegate bool StateHandler (FsmContext ctx);\n\n        private static int[]          fsm_return_table;\n        private static StateHandler[] fsm_handler_table;\n\n        private bool          allow_comments;\n        private bool          allow_single_quoted_strings;\n        private bool          end_of_input;\n        private FsmContext    fsm_context;\n        private int           input_buffer;\n        private int           input_char;\n        private TextReader    reader;\n        private int           state;\n        private StringBuilder string_buffer;\n        private string        string_value;\n        private int           token;\n        private int           unichar;\n\n        public bool AllowComments {\n            get { return allow_comments; }\n            set { allow_comments = value; }\n        }\n\n        public bool AllowSingleQuotedStrings {\n            get { return allow_single_quoted_strings; }\n            set { allow_single_quoted_strings = value; }\n        }\n\n        public bool EndOfInput {\n            get { return end_of_input; }\n        }\n\n        public int Token {\n            get { return token; }\n        }\n\n        public string StringValue {\n            get { return string_value; }\n        }\n\n        static Lexer ()\n        {\n            PopulateFsmTables ();\n        }\n\n        public Lexer (TextReader reader)\n        {\n            allow_comments = true;\n            allow_single_quoted_strings = true;\n\n            input_buffer = 0;\n            string_buffer = new StringBuilder (128);\n            state = 1;\n            end_of_input = false;\n            this.reader = reader;\n\n            fsm_context = new FsmContext ();\n            fsm_context.L = this;\n        }\n\n        private static int HexValue (int digit)\n        {\n            switch (digit) {\n            case 'a':\n            case 'A':\n                return 10;\n\n            case 'b':\n            case 'B':\n                return 11;\n\n            case 'c':\n            case 'C':\n                return 12;\n\n            case 'd':\n            case 'D':\n                return 13;\n\n            case 'e':\n            case 'E':\n                return 14;\n\n            case 'f':\n            case 'F':\n                return 15;\n\n            default:\n                return digit - '0';\n            }\n        }\n\n        private static void PopulateFsmTables ()\n        {\n            fsm_handler_table = new StateHandler[28] {\n                State1,\n                State2,\n                State3,\n                State4,\n                State5,\n                State6,\n                State7,\n                State8,\n                State9,\n                State10,\n                State11,\n                State12,\n                State13,\n                State14,\n                State15,\n                State16,\n                State17,\n                State18,\n                State19,\n                State20,\n                State21,\n                State22,\n                State23,\n                State24,\n                State25,\n                State26,\n                State27,\n                State28\n            };\n\n            fsm_return_table = new int[28] {\n                (int) ParserToken.Char,\n                0,\n                (int) ParserToken.Number,\n                (int) ParserToken.Number,\n                0,\n                (int) ParserToken.Number,\n                0,\n                (int) ParserToken.Number,\n                0,\n                0,\n                (int) ParserToken.True,\n                0,\n                0,\n                0,\n                (int) ParserToken.False,\n                0,\n                0,\n                (int) ParserToken.Null,\n                (int) ParserToken.CharSeq,\n                (int) ParserToken.Char,\n                0,\n                0,\n                (int) ParserToken.CharSeq,\n                (int) ParserToken.Char,\n                0,\n                0,\n                0,\n                0\n            };\n        }\n\n        private static char ProcessEscChar (int esc_char)\n        {\n            switch (esc_char) {\n            case '\"':\n            case '\\'':\n            case '\\\\':\n            case '/':\n                return Convert.ToChar (esc_char);\n\n            case 'n':\n                return '\\n';\n\n            case 't':\n                return '\\t';\n\n            case 'r':\n                return '\\r';\n\n            case 'b':\n                return '\\b';\n\n            case 'f':\n                return '\\f';\n\n            default:\n                // Unreachable\n                return '?';\n            }\n        }\n\n        private static bool State1 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r')\n                    continue;\n\n                if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 3;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case '\"':\n                    ctx.NextState = 19;\n                    ctx.Return = true;\n                    return true;\n\n                case ',':\n                case ':':\n                case '[':\n                case ']':\n                case '{':\n                case '}':\n                    ctx.NextState = 1;\n                    ctx.Return = true;\n                    return true;\n\n                case '-':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 2;\n                    return true;\n\n                case '0':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 4;\n                    return true;\n\n                case 'f':\n                    ctx.NextState = 12;\n                    return true;\n\n                case 'n':\n                    ctx.NextState = 16;\n                    return true;\n\n                case 't':\n                    ctx.NextState = 9;\n                    return true;\n\n                case '\\'':\n                    if (! ctx.L.allow_single_quoted_strings)\n                        return false;\n\n                    ctx.L.input_char = '\"';\n                    ctx.NextState = 23;\n                    ctx.Return = true;\n                    return true;\n\n                case '/':\n                    if (! ctx.L.allow_comments)\n                        return false;\n\n                    ctx.NextState = 25;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State2 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '1' && ctx.L.input_char<= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 3;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case '0':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 4;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State3 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                case '.':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 5;\n                    return true;\n\n                case 'e':\n                case 'E':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 7;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        private static bool State4 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char == ' ' ||\n                ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case ',':\n            case ']':\n            case '}':\n                ctx.L.UngetChar ();\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            case '.':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 5;\n                return true;\n\n            case 'e':\n            case 'E':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 7;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State5 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 6;\n                return true;\n            }\n\n            return false;\n        }\n\n        private static bool State6 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                case 'e':\n                case 'E':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 7;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State7 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 8;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case '+':\n            case '-':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 8;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State8 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char<= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State9 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'r':\n                ctx.NextState = 10;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State10 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 11;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State11 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'e':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State12 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'a':\n                ctx.NextState = 13;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State13 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.NextState = 14;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State14 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 's':\n                ctx.NextState = 15;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State15 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'e':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State16 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 17;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State17 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.NextState = 18;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State18 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State19 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                switch (ctx.L.input_char) {\n                case '\"':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 20;\n                    return true;\n\n                case '\\\\':\n                    ctx.StateStack = 19;\n                    ctx.NextState = 21;\n                    return true;\n\n                default:\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State20 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '\"':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State21 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 22;\n                return true;\n\n            case '\"':\n            case '\\'':\n            case '/':\n            case '\\\\':\n            case 'b':\n            case 'f':\n            case 'n':\n            case 'r':\n            case 't':\n                ctx.L.string_buffer.Append (\n                    ProcessEscChar (ctx.L.input_char));\n                ctx.NextState = ctx.StateStack;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State22 (FsmContext ctx)\n        {\n            int counter = 0;\n            int mult    = 4096;\n\n            ctx.L.unichar = 0;\n\n            while (ctx.L.GetChar ()) {\n\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' ||\n                    ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' ||\n                    ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') {\n\n                    ctx.L.unichar += HexValue (ctx.L.input_char) * mult;\n\n                    counter++;\n                    mult /= 16;\n\n                    if (counter == 4) {\n                        ctx.L.string_buffer.Append (\n                            Convert.ToChar (ctx.L.unichar));\n                        ctx.NextState = ctx.StateStack;\n                        return true;\n                    }\n\n                    continue;\n                }\n\n                return false;\n            }\n\n            return true;\n        }\n\n        private static bool State23 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                switch (ctx.L.input_char) {\n                case '\\'':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 24;\n                    return true;\n\n                case '\\\\':\n                    ctx.StateStack = 23;\n                    ctx.NextState = 21;\n                    return true;\n\n                default:\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State24 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '\\'':\n                ctx.L.input_char = '\"';\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State25 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '*':\n                ctx.NextState = 27;\n                return true;\n\n            case '/':\n                ctx.NextState = 26;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State26 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '\\n') {\n                    ctx.NextState = 1;\n                    return true;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State27 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '*') {\n                    ctx.NextState = 28;\n                    return true;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State28 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '*')\n                    continue;\n\n                if (ctx.L.input_char == '/') {\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                ctx.NextState = 27;\n                return true;\n            }\n\n            return true;\n        }\n\n\n        private bool GetChar ()\n        {\n            if ((input_char = NextChar ()) != -1)\n                return true;\n\n            end_of_input = true;\n            return false;\n        }\n\n        private int NextChar ()\n        {\n            if (input_buffer != 0) {\n                int tmp = input_buffer;\n                input_buffer = 0;\n\n                return tmp;\n            }\n\n            return reader.Read ();\n        }\n\n        public bool NextToken ()\n        {\n            StateHandler handler;\n            fsm_context.Return = false;\n\n            while (true) {\n                handler = fsm_handler_table[state - 1];\n\n                if (! handler (fsm_context))\n                    throw new JsonException (input_char);\n\n                if (end_of_input)\n                    return false;\n\n                if (fsm_context.Return) {\n                    string_value = string_buffer.ToString ();\n                    string_buffer.Remove (0, string_buffer.Length);\n                    token = fsm_return_table[state - 1];\n\n                    if (token == (int) ParserToken.Char)\n                        token = input_char;\n\n                    state = fsm_context.NextState;\n\n                    return true;\n                }\n\n                state = fsm_context.NextState;\n            }\n        }\n\n        private void UngetChar ()\n        {\n            input_buffer = input_char;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/ParserToken.cs",
    "content": "/**\n * ParserToken.cs\n *   Internal representation of the tokens used by the lexer and the parser.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nnamespace LitJson\n{\n    internal enum ParserToken\n    {\n        // Lexer tokens\n        None = System.Char.MaxValue + 1,\n        Number,\n        True,\n        False,\n        Null,\n        CharSeq,\n        // Single char\n        Char,\n\n        // Parser Rules\n        Text,\n        Object,\n        ObjectPrime,\n        Pair,\n        PairRest,\n        Array,\n        ArrayPrime,\n        Value,\n        ValueRest,\n        String,\n\n        // End of input\n        End,\n\n        // The empty rule\n        Epsilon\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Serialization/LitJson/README",
    "content": "LitJSON\n=======\n\nA .Net library to handle conversions from and to JSON (JavaScript Object\nNotation) strings.\n\nHome page: http://litjson.sourceforge.net/\n\n\nInstallation\n------------\n\nSee the file INSTALL for generic building and installation instructions.\n\nThe 'configure' script for this package recognizes the following specific\nflags:\n\n  --disable-debug\n    Disables the creation of debug binaries (e.g. LitJson.dll.mdb). These\n    are enabled by default.\n\n\nTests\n-----\n\nThis library comes with a set of unit tests using the NUnit framework. The\n'configure' script tries to find the necessary information in order to use\nthem.\n\nIf everything is set up properly, you may run the tests with 'make check'.\n\n\nUsing LitJSON from an application\n---------------------------------\n\nOnce this library is compiled and optionally installed in the root\nfilesystem, .Net developers may use it by simply copying the .dll file into\ntheir project's directory.\n\nFor those developers using standard Unix tools such as pkg-config and make,\nthis library comes with a .pc file to help in the process of consuming it.\n\nOne way this could work would be adding a rule in the Makefile (normally\ncalled 'update-libraries') where the necessary .dll's are copied into the\nproject's source directory, and a text file is created with the flags that\nare to be passed to the compiler. Then this text file is used in the rules\nused to compile the project. For example:\n\n\nupdate-libraries:\n\tcp `pkg-config --variable=Libraries litjson` .\n\tpkg-config --libs litjson > litjson.flags\n\nDemo.exe: Demo.cs litjson.flags\n\tmcs -out:$@ Demo.cs `cat litjson.flags`\n\n\nFor more information on this process, please see\n<http://www.mono-project.com/Guidelines:Application_Deployment>, section 2.\nLibraries with Unstable APIs.\n\n\nBug Reports\n-----------\n\nPlease submit all bug reports, feature requests and patches on the project's\nwebsite at:\n  http://sourceforge.net/tracker/?group_id=202631\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SocialGraph/SocialGraph.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// social graph information\n    /// </summary>\n    public class SocialGraph\n    {\n        /// <summary>\n        /// type of request\n        /// </summary>\n        public SocialGraphType Type { get; set; }\n\n        /// <summary>\n        /// Specfies the ID of the user for whom to return the friends list. \n        /// Helpful for disambiguating when a valid user ID is also a valid screen name. \n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// Specfies the screen name of the user for whom to return the friends list. \n        /// Helpful for disambiguating when a valid screen name is also a user ID.\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// List of IDs returned from query\n        /// </summary>\n        public List<string> IDs { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SocialGraph/SocialGraphRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Social Graph Requests and responses\n    /// </summary>\n    class SocialGraphRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of request\n        /// </summary>\n        internal SocialGraphType Type { get; set; }\n\n        /// <summary>\n        /// Specfies the ID of the user for whom to return the friends list. \n        /// Helpful for disambiguating when a valid user ID is also a valid screen name. \n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Specfies the screen name of the user for whom to return the friends list. \n        /// Helpful for disambiguating when a valid screen name is also a user ID.\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<SocialGraph>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Cursor\",\n                       \"Count\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<SocialGraphType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case SocialGraphType.Followers:\n                    return BuildSocialGraphFollowersUrl(parameters);\n                case SocialGraphType.Friends:\n                    return BuildSocialGraphFriendsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for showing status of user\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildSocialGraphFriendsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"friends/ids.json\";\n\n            return BuildSocialGraphUrlParameters(parameters, url);\n        }\n\n        /// <summary>\n        /// builds an url for showing status of user\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildSocialGraphFollowersUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"followers/ids.json\";\n\n            return BuildSocialGraphUrlParameters(parameters, url);\n        }\n\n        /// <summary>\n        /// appends parameters for Friendship action\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        private Request BuildSocialGraphUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            if (!parameters.ContainsKey(\"UserID\") && !parameters.ContainsKey(\"ScreenName\"))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName.\");\n\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n            else\n            {\n                Cursor = \"-1\";\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of SocialGraph\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of SocialGraph</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData graphJson = JsonMapper.ToObject(responseJson);\n\n            var graph = new SocialGraph\n            {\n                Type = Type,\n                UserID = UserID,\n                ScreenName = ScreenName,\n                Cursor = Cursor,\n                Count = Count,\n                CursorMovement = new Cursors(graphJson)\n            };\n\n            switch (Type)\n            {\n                case SocialGraphType.Friends:\n                case SocialGraphType.Followers:\n                    graph.IDs =\n                        (from JsonData id in graphJson.GetValue<JsonData>(\"ids\")\n                         select id.ToString())\n                        .ToList();\n                    break;\n                default:\n                    break;\n            }\n\n            return new List<SocialGraph> { graph }.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/SocialGraph/SocialGraphType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of social graph\n    /// </summary>\n    public enum SocialGraphType\n    {\n        /// <summary>\n        /// people user is following\n        /// </summary>\n        Friends,\n\n        /// <summary>\n        /// people following user\n        /// </summary>\n        Followers\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/Annotation.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Annotation\n    {\n        public Annotation() { }\n        public Annotation(JsonData annotationJson)\n        {\n            if (annotationJson == null)\n            {\n                Attributes = new Dictionary<string, string>();\n                return;\n            }\n\n            var attrDictionary = annotationJson as IDictionary<string, JsonData>;\n            Attributes =\n                (from string key in attrDictionary.Keys\n                 select new\n                 {\n                     Key = key,\n                     Value = attrDictionary[key]\n                 })\n                .ToDictionary(\n                    atr => atr.Key.ToString(),\n                    atr => atr.Value.ToString());\n        }\n\n        public string Type { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string> Attributes { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string> Elements { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/Contributor.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Contributor\n    {\n        public Contributor() { }\n        public Contributor(JsonData contributorJson)\n        {\n            ID = contributorJson.GetValue<string>(\"id_str\");\n            ScreenName = contributorJson.GetValue<string>(\"screen_name\");\n        }\n\n        public string ID { get; set; }\n\n        public string ScreenName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/EmbeddedStatus.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class EmbeddedStatus\n    {\n        public EmbeddedStatus() { }\n        public EmbeddedStatus(JsonData embeddedStatusJson)\n        {\n            Html = embeddedStatusJson.GetValue<string>(\"html\");\n            AuthorName = embeddedStatusJson.GetValue<string>(\"author_name\");\n            AuthorUrl = embeddedStatusJson.GetValue<string>(\"author_url\");\n            ProviderName = embeddedStatusJson.GetValue<string>(\"provider_name\");\n            ProviderUrl = embeddedStatusJson.GetValue<string>(\"provider_url\");\n            Url = embeddedStatusJson.GetValue<string>(\"url\");\n            Version = embeddedStatusJson.GetValue<string>(\"version\");\n            Type = embeddedStatusJson.GetValue<string>(\"type\");\n            Height = embeddedStatusJson.GetValue<int>(\"height\");\n            Width = embeddedStatusJson.GetValue<int>(\"width\");\n            string cacheAgeStr = embeddedStatusJson.GetValue<string>(\"cache_age\");\n            if (!string.IsNullOrEmpty(cacheAgeStr)) \n                CacheAge = ulong.Parse(cacheAgeStr);\n        }\n\n        public string Html { get; set; }\n\n        public string AuthorName { get; set; }\n\n        public string ProviderUrl { get; set; }\n\n        public string Url { get; set; }\n\n        public string ProviderName { get; set; }\n\n        public string Version { get; set; }\n\n        public string Type { get; set; }\n\n        public int Height { get; set; }\n\n        public ulong CacheAge { get; set; }\n\n        public string AuthorUrl { get; set; }\n\n        public int Width { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/EmbeddedStatusAlignment.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum EmbeddedStatusAlignment\n    {\n        None,\n\n        Left,\n\n        Right,\n\n        Center\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/FilterLevel.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter evaluation of tweet quality\n    /// </summary>\n    public enum FilterLevel\n    {\n        /// <summary>\n        /// No value\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// Low value\n        /// </summary>\n        Low,\n\n        /// <summary>\n        /// Medium quality\n        /// </summary>\n        Medium,\n\n        /// <summary>\n        /// High quality\n        /// </summary>\n        High\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/Retweet.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Retweet Information\n    /// </summary>\n    [Obsolete(\"Deprecated: Use RetweetedStatus on Status instead.\")]\n    public class Retweet\n    {\n        /// <summary>\n        /// Retweet ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Date/Time Retweeted\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// User of Original Tweet\n        /// </summary>\n        public User RetweetedUser { get; set; }\n\n        /// <summary>\n        /// Retweet Text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Which application sent retweet\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// Is text truncated\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// Status ID retweeted\n        /// </summary>\n        public string InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// ID of User retweeted\n        /// </summary>\n        public string InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Is Favorited\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// Screen name of retweeted user\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// Number of retweets\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has retweet been retweeted\n        /// </summary>\n        public object Retweeted { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/Status.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Written by: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// returned information from Twitter Status queries\n    /// </summary>\n    public class Status\n    {\n        public Status() {}\n        public Status(JsonData status)\n        {\n            if (status == null) return;\n\n            Retweeted = status.GetValue<bool>(\"retweeted\");\n            Source = status.GetValue<string>(\"source\");\n            InReplyToScreenName = status.GetValue<string>(\"in_reply_to_screen_name\");\n            PossiblySensitive = status.GetValue<bool>(\"possibly_sensitive\");\n            RetweetedStatus = new Status(status.GetValue<JsonData>(\"retweeted_status\"));\n            var contributors = status.GetValue<JsonData>(\"contributors\");\n            Contributors =\n                contributors == null ?\n                    new List<Contributor>() :\n                    (from JsonData contributor in contributors\n                     select new Contributor(contributor))\n                    .ToList();\n            var coords = status.GetValue<JsonData>(\"coordinates\");\n            if (coords != null)\n            {\n                Coordinates = new Coordinate(coords.GetValue<JsonData>(\"coordinates\"));\n            }\n            else\n            {\n                Coordinates = new Coordinate();\n            }\n            Place = new Place(status.GetValue<JsonData>(\"place\"));\n            User = new User(status.GetValue<JsonData>(\"user\"));\n            RetweetCount = status.GetValue<int>(\"retweet_count\");\n            StatusID = status.GetValue<string>(\"id_str\");\n            FavoriteCount = status.GetValue<int?>(\"favorite_count\");\n            Favorited = status.GetValue<bool>(\"favorited\");\n            InReplyToStatusID = status.GetValue<string>(\"in_reply_to_status_id_str\");\n            Source = status.GetValue<string>(\"source\");\n            CreatedAt = status.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            InReplyToUserID = status.GetValue<string>(\"in_reply_to_user_id_str\");\n            Truncated = status.GetValue<bool>(\"truncated\");\n            Text = status.GetValue<string>(\"text\");\n            Annotation = new Annotation(status.GetValue<JsonData>(\"annotation\"));\n            Entities = new Entities(status.GetValue<JsonData>(\"entities\"));\n            var currentUserRetweet = status.GetValue<JsonData>(\"current_user_retweet\");\n            if (currentUserRetweet != null)\n            {\n                CurrentUserRetweet = currentUserRetweet.GetValue<ulong>(\"id\");\n            }\n            var scopes = status.GetValue<JsonData>(\"scopes\");\n            Scopes =\n                scopes == null ? new Dictionary<string, string>() :\n                (from key in (scopes as IDictionary<string, JsonData>).Keys as List<string>\n                 select new\n                 {\n                     Key = key,\n                     Value = scopes[key].ToString()\n                 })\n                .ToDictionary(\n                    key => key.Key,\n                    val => val.Value);\n            WithheldCopyright = status.GetValue<bool>(\"withheld_copyright\");\n            var withheldCountries = status.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in status.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n            WithheldScope = status.GetValue<string>(\"withheld_scope\");\n            MetaData = new StatusMetaData(status.GetValue<JsonData>(\"metadata\"));\n            Lang = status.GetValue<string>(\"lang\");\n            string filterLvl = status.GetValue<string>(\"filter_level\");\n            try\n            {\n                FilterLevel =\n                    filterLvl == null ? FilterLevel.None :\n                    (FilterLevel)Enum.Parse(typeof(FilterLevel), filterLvl, ignoreCase: true);\n            }\n            catch (ArgumentException)\n            {\n                FilterLevel = FilterLevel.None;\n            }\n        }\n\n        /// <summary>\n        /// Supports XML serialization\n        /// </summary>\n        [XmlIgnore]\n        StatusType type;\n\n        /// <summary>\n        /// type of status request, i.e. Friends or Public\n        /// </summary>\n        [XmlIgnore]\n        public StatusType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlAttribute(AttributeName = \"Type\")]\n        internal StatusType StatusTypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// User ID to disambiguate when ID is same as screen name\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// Screen Name to disambiguate when ID is same as UserD\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// By default, user timeline doesn't include retweets,\n        /// but you can set this to true to includes retweets\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in results\n        /// </summary>\n        public bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add entities to user (default: true)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        public bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        public string OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        public int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand image\n        /// </summary>\n        public bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        public bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        public bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        public EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        public string OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        public string OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// when was the tweet created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// ID of this status\n        /// </summary>\n        public string StatusID { get; set; }\n\n        /// <summary>\n        /// Tweet Text (140)characters\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// where did the tweet come from\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// has the tweet been truncated\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// id of tweet being replied to, if it is a reply\n        /// </summary>\n        public string InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// id of user being replied to, if it is a reply\n        /// </summary>\n        public string InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Number of times this tweet has been favorited\n        /// </summary>\n        public int? FavoriteCount { get; set; }\n\n        /// <summary>\n        /// is listed as a favorite\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// screen name of user being replied to, if it is a reply\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// information about user posting tweet (except in user tweets)\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Users who retweeted a tweet (used in StatusType.RetweetedBy queries)\n        /// </summary>\n        public List<ulong> Users { get; set; }\n\n        /// <summary>\n        /// Retweet details\n        /// </summary>\n        [Obsolete(\"Deprecated: Use RetweetedStatus instead.\", true)]\n        public Retweet Retweet { get; set; }\n\n        /// <summary>\n        /// users who have contributed\n        /// </summary>\n        public List<Contributor> Contributors { get; set; }\n\n        /// <summary>\n        /// Geographic information on tweet location\n        /// </summary>\n        [Obsolete(\"Soon to be deprecated. Use Coordinates instead.\", true)]\n        public Geo Geo { get; set; }\n\n        /// <summary>\n        /// Coordinates of where tweet occurred\n        /// </summary>\n        public Coordinate Coordinates { get; set; }\n\n        /// <summary>\n        /// Place where status was created\n        /// </summary>\n        public Place Place { get; set; }\n\n        /// <summary>\n        /// Meta-data applied to tweet\n        /// </summary>\n        public Annotation Annotation { get; set; }\n\n        /// <summary>\n        /// Entities connected to the status\n        /// </summary>\n        public Entities Entities { get; set; }\n\n        /// <summary>\n        /// Removes all user info, except for ID\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Include more contributor info, beyond ID\n        /// </summary>\n        public bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Number of times retweeted\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has tweet been retweeted\n        /// </summary>\n        public bool Retweeted { get; set; }\n\n        /// <summary>\n        /// Is tweet possibly sensitive (can be set via TweetWithMedia)\n        /// </summary>\n        public bool PossiblySensitive { get; set; }\n\n        /// <summary>\n        /// Retweeted status is status is a retweet\n        /// </summary>\n        public Status RetweetedStatus { get; set; }\n\n        /// <summary>\n        /// ID of source status of retweet if IncludeMyRetweet is true.\n        /// Set to 0 if IncludeMyRetweet is false or tweet not retweeted\n        /// by authenticating user.\n        /// </summary>\n        public ulong CurrentUserRetweet { get; set; }\n\n        /// <summary>\n        /// Set of key/value pairs to support promoted tweets\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string> Scopes { get; set; }\n\n        /// <summary>\n        /// Indicates that you shouldn't display because there\n        /// is currently a DMCA complaint against the tweet.\n        /// </summary>\n        public bool WithheldCopyright { get; set; }\n\n        /// <summary>\n        /// Don't display tweet in countries in this list\n        /// </summary>\n        public List<string> WithheldInCountries { get; set; }\n\n        /// <summary>\n        /// Part of the tweet that should not be displayed.\n        /// </summary>\n        public string WithheldScope { get; set; }\n\n        /// <summary>\n        /// Status meta-data returned from searches\n        /// </summary>\n        public StatusMetaData MetaData { get; set; }\n\n        /// <summary>\n        /// Twitter machine-detected prediction of language tweet is written in\n        /// </summary>\n        public string Lang { get; set; }\n\n        /// <summary>\n        /// Twitter's evaluation of tweet quality\n        /// </summary>\n        public FilterLevel FilterLevel { get; set; }\n\n        /// <summary>\n        /// Populated with OEmbed response for StatusType.OEmbed queries\n        /// </summary>\n        public EmbeddedStatus EmbeddedStatus { get; set; }\n\n        /// <summary>\n        /// Manage paging through a list (e.g. IDs from Users collection)\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/StatusAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum StatusAction\n    {\n        SingleStatus\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/StatusExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class StatusExtensions\n    {\n        public const ulong NoReply = 0ul;\n        public const decimal NoCoordinate = -1m;\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"twitterCtx\">Your instance of TwitterContext</param>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"mediaItems\">List of Media to send</param>\n        /// <returns>Status containing new tweet</returns>\n        public static Status TweetWithMedia(this TwitterContext twitterCtx, string status, bool possiblySensitive, List<Media> mediaItems)\n        {\n            Status results = ReplyWithMedia(twitterCtx, NoReply, status, possiblySensitive, NoCoordinate, NoCoordinate, null, false, mediaItems, null);\n            return results;\n        }\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"twitterCtx\">Your instance of TwitterContext</param>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"mediaItems\">List of Media to send</param>\n        /// <param name=\"callback\">Async callback handler</param>\n        /// <returns>Status containing new tweet</returns>\n        public static Status TweetWithMedia(this TwitterContext twitterCtx, string status, bool possiblySensitive, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, List<Media> mediaItems, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            Status results = ReplyWithMedia(twitterCtx, NoReply, status, possiblySensitive, latitude, longitude, placeID, displayCoordinates, mediaItems, callback);\n            return results;\n        }\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"twitterCtx\">Your instance of TwitterContext</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"mediaItems\">List of Media to send</param>\n        /// <returns>Status containing new reply</returns>\n        public static Status ReplyWithMedia(this TwitterContext twitterCtx, ulong inReplyToStatusID, string status, bool possiblySensitive, List<Media> mediaItems)\n        {\n            Status result = ReplyWithMedia(twitterCtx, inReplyToStatusID, status, possiblySensitive, NoCoordinate, NoCoordinate, null, false, mediaItems, null);\n            return result;\n        }\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"twitterCtx\">Your instance of TwitterContext</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"mediaItems\">List of Media to send</param>\n        /// <param name=\"callback\">Async callback handler</param>\n        /// <returns>Status containing new reply</returns>\n        public static Status ReplyWithMedia(this TwitterContext twitterCtx, ulong inReplyToStatusID, string status, bool possiblySensitive, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, List<Media> mediaItems, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            if (string.IsNullOrEmpty(status))\n            {\n                throw new ArgumentNullException(\"status\", \"status is a required parameter.\");\n            }\n\n            if (mediaItems == null)\n            {\n                throw new ArgumentNullException(\"mediaItems\", \"You must pass at least one Media in mediaItems.\");\n            }\n\n            if (mediaItems.Count == 0)\n            {\n                throw new ArgumentException(\"You must pass at least one Media in mediaItems.\", \"mediaItems\");\n            }\n\n            twitterCtx.TwitterExecutor.AsyncCallback = callback;\n\n            var updateUrl = twitterCtx.BaseUrl + \"statuses/update_with_media.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            string resultString =\n                twitterCtx.TwitterExecutor.PostMedia(\n                    updateUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"status\", status},\n                        {\"possibly_sensitive\", possiblySensitive ? true.ToString() : null },\n                        {\"lat\", latitude == NoCoordinate ? null : latitude.ToString(Culture.US) },\n                        {\"long\", longitude == NoCoordinate ? null : longitude.ToString(Culture.US) },\n                        {\"place_id\", string.IsNullOrEmpty(placeID) ? null : placeID },\n                        {\"display_coordinates\", displayCoordinates ? true.ToString() : null },\n                        {\"in_reply_to_status_id\", inReplyToStatusID == NoReply ? null : inReplyToStatusID.ToString(CultureInfo.InvariantCulture)}\n                    },\n                    mediaItems,\n                    reqProc);\n\n            Status result = reqProc.ProcessActionResult(resultString, StatusAction.SingleStatus);\n            return result;\n        }\n\n        /// <summary>\n        /// sends a status update - overload to make inReplyToStatusID optional\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status)\n        {\n            return UpdateStatus(ctx, status, -1, -1, null, false, null, false, null);\n        }\n\n        /// <summary>\n        /// sends a status update - overload to make inReplyToStatusID optional\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, -1, -1, null, false, null, false, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, string inReplyToStatusID)\n        {\n            return UpdateStatus(ctx, status, -1, -1, null, false, inReplyToStatusID, false, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, string inReplyToStatusID, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, -1, -1, null, false, inReplyToStatusID, false, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, null, false, null, false, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, null, false, null, false, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, bool displayCoordinates)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, null, displayCoordinates, null, false, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, bool displayCoordinates, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, null, displayCoordinates, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, bool displayCoordinates, string inReplyToStatusID)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, null, displayCoordinates, inReplyToStatusID, false, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, bool displayCoordinates, string inReplyToStatusID, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, null, displayCoordinates, inReplyToStatusID, false, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, bool trimUser)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, false, null, trimUser, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, bool trimUser, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, false, null, trimUser, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, string inReplyToStatusID, bool trimUser)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, false, inReplyToStatusID, trimUser, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, string inReplyToStatusID, bool trimUser, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, false, inReplyToStatusID, trimUser, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, displayCoordinates, null, trimUser, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, displayCoordinates, null, trimUser, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, string placeID, bool displayCoordinates, bool trimUser)\n        {\n            return UpdateStatus(ctx, status, -1, -1, placeID, displayCoordinates, null, trimUser, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, string placeID, bool displayCoordinates, bool trimUser, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, -1, -1, placeID, displayCoordinates, null, trimUser, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, string placeID, bool displayCoordinates, string inReplyToStatusID, bool trimUser)\n        {\n            return UpdateStatus(ctx, status, -1, -1, placeID, displayCoordinates, inReplyToStatusID, trimUser, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, string placeID, bool displayCoordinates, string inReplyToStatusID, bool trimUser, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            return UpdateStatus(ctx, status, -1, -1, placeID, displayCoordinates, inReplyToStatusID, trimUser, callback);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, string inReplyToStatusID, bool trimUser)\n        {\n            return UpdateStatus(ctx, status, latitude, longitude, placeID, displayCoordinates, inReplyToStatusID, trimUser, null);\n        }\n\n        /// <summary>\n        /// sends a status update\n        /// </summary>\n        /// <param name=\"status\">(optional @UserName) and (required) status text</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>IQueryable of sent status</returns>\n        public static Status UpdateStatus(this TwitterContext ctx, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, string inReplyToStatusID, bool trimUser, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            if (string.IsNullOrEmpty(status))\n            {\n                throw new ArgumentException(\"status is a required parameter.\", \"status\");\n            }\n\n            var updateUrl = ctx.BaseUrl + \"statuses/update.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    updateUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"status\", status},\n                        {\"in_reply_to_status_id\", inReplyToStatusID},\n                        {\"lat\", latitude == -1 ? null : latitude.ToString(Culture.US)},\n                        {\"long\", longitude == -1 ? null : longitude.ToString(Culture.US)},\n                        {\"place_id\", placeID},\n                        {\"display_coordinates\", displayCoordinates ? displayCoordinates.ToString().ToLower() : null},\n                        {\"trim_user\", trimUser ? trimUser.ToString().ToLower() : null }\n                    },\n                    response => reqProc.ProcessActionResult(response, StatusAction.SingleStatus));\n\n            Status result = reqProc.ProcessActionResult(resultsJson, StatusAction.SingleStatus);\n            return result;\n        }\n\n        /// <summary>\n        /// deletes a status tweet\n        /// </summary>\n        /// <param name=\"id\">id of status tweet</param>\n        /// <returns>deleted status tweet</returns>\n        public static Status DestroyStatus(this TwitterContext ctx, string id)\n        {\n            return DestroyStatus(ctx, id, null);\n        }\n\n        /// <summary>\n        /// deletes a status tweet\n        /// </summary>\n        /// <param name=\"id\">id of status tweet</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>deleted status tweet</returns>\n        public static Status DestroyStatus(this TwitterContext ctx, string id, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n            }\n\n            var destroyUrl = ctx.BaseUrl + \"statuses/destroy/\" + id + \".json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    destroyUrl,\n                    new Dictionary<string, string>(),\n                    response => reqProc.ProcessActionResult(response, StatusAction.SingleStatus));\n\n            Status result = reqProc.ProcessActionResult(resultsJson, StatusAction.SingleStatus);\n            return result;\n        }\n\n        /// <summary>\n        /// retweets a tweet\n        /// </summary>\n        /// <param name=\"id\">id of status tweet</param>\n        /// <returns>deleted status tweet</returns>\n        public static Status Retweet(this TwitterContext ctx, string id)\n        {\n            return Retweet(ctx, id, null);\n        }\n\n        /// <summary>\n        /// retweets a tweet\n        /// </summary>\n        /// <param name=\"id\">id of status tweet</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>deleted status tweet</returns>\n        public static Status Retweet(this TwitterContext ctx, string id, Action<TwitterAsyncResponse<Status>> callback)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n            }\n\n            var retweetUrl = ctx.BaseUrl + \"statuses/retweet/\" + id + \".json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            ITwitterExecute exec = ctx.TwitterExecutor;\n            exec.AsyncCallback = callback;\n            var resultsJson =\n                exec.PostToTwitter(\n                    retweetUrl,\n                    new Dictionary<string, string>(),\n                    response => reqProc.ProcessActionResult(response, StatusAction.SingleStatus));\n\n            Status result = reqProc.ProcessActionResult(resultsJson, StatusAction.SingleStatus);\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/StatusMetaData.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class StatusMetaData\n    {\n        public StatusMetaData() { }\n        public StatusMetaData(JsonData mdJson)\n        {\n            ResultType = mdJson.GetValue<string>(\"result_type\");\n            IsoLanguageCode = mdJson.GetValue<string>(\"iso_language_code\");\n        }\n\n        public string ResultType { get; set; }\n\n        public string IsoLanguageCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/StatusRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Status requests\n    /// </summary>\n    public class StatusRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of status request, i.e. Show or User\n        /// </summary>\n        internal StatusType Type { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        internal string ID { get; set; }\n\n        /// <summary>\n        /// User ID to disambiguate when ID is same as screen name\n        /// </summary>\n        internal string UserID { get; set; }\n\n        /// <summary>\n        /// Screen Name to disambiguate when ID is same as UserD\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// Retweets are optional and you must set this to true\n        /// before they will be included in the user timeline\n        /// </summary>\n        internal bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in responses\n        /// </summary>\n        internal bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Include entities in tweets (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Include entities in users (default: true)\n        /// </summary>\n        internal bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Remove all user info, except for User ID\n        /// </summary>\n        internal bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Enhances contributor info, beyond the default ID\n        /// </summary>\n        internal bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        internal bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        internal string OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        internal int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand image\n        /// </summary>\n        internal bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        internal bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        internal bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        internal EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        internal string OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        internal string OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Status>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"IncludeRetweets\",\n                       \"ExcludeReplies\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"TrimUser\",\n                       \"IncludeContributorDetails\",\n                       \"IncludeMyRetweet\",\n                       \"OEmbedUrl\",\n                       \"OEmbedMaxWidth\",\n                       \"OEmbedHideMedia\",\n                       \"OEmbedHideThread\",\n                       \"OEmbedOmitScript\",\n                       \"OEmbedAlign\",\n                       \"OEmbedRelated\",\n                       \"OEmbedLanguage\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<StatusType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StatusType.Home:\n                    return BuildHomeUrl(parameters);\n                case StatusType.Mentions:\n                    return BuildMentionsUrl(parameters);\n                case StatusType.Oembed:\n                    return BuildOembedUrl(parameters);\n                case StatusType.Retweets:\n                    return BuildRetweetsUrl(parameters);\n                case StatusType.RetweetsOfMe:\n                    return BuildRetweetsOfMeUrl(parameters);\n                case StatusType.RetweetedByUser:\n                    return BuildRetweetedByUserUrl(parameters);\n                case StatusType.Show:\n                    return BuildShowUrl(parameters);\n                case StatusType.User:\n                    return BuildUserUrl(parameters);\n                case StatusType.Retweeters:\n                    return BuildRetweetersUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters that are common to both friend and user queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = parameters[\"ID\"];\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            //if (parameters.ContainsKey(\"Page\"))\n            //{\n            //    Page = int.Parse(parameters[\"Page\"]);\n            //    urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            //}\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"ExcludeReplies\"))\n            {\n                ExcludeReplies = bool.Parse(parameters[\"ExcludeReplies\"]);\n                urlParams.Add(new QueryParameter(\"exclude_replies\", parameters[\"ExcludeReplies\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeMyRetweet\"))\n            {\n                IncludeMyRetweet = bool.Parse(parameters[\"IncludeMyRetweet\"]);\n                urlParams.Add(new QueryParameter(\"include_my_retweet\", parameters[\"IncludeMyRetweet\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeContributorDetails\"))\n            {\n                IncludeContributorDetails = bool.Parse(parameters[\"IncludeContributorDetails\"]);\n                urlParams.Add(new QueryParameter(\"contributor_details\", parameters[\"IncludeContributorDetails\"].ToLower()));\n            }\n\n            return req;\n        }\n  \n        /// <summary>\n        /// builds an url for showing status of user\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/show.json\");\n        }\n\n        /// <summary>\n        /// construct an url for the user timeline\n        /// </summary>\n        /// <returns>base url + user timeline segment</returns>\n        Request BuildUserUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/user_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct a base home url\n        /// </summary>\n        /// <returns>base url + home segment</returns>\n        Request BuildHomeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/home_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">parameters to build url query with</param>\n        /// <returns>base url + mentions segment</returns>\n        Request BuildMentionsUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/mentions_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct a url that will request all the retweets of a given tweet\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweet segment</returns>\n        Request BuildRetweetsUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = parameters[\"ID\"];\n            }\n\n            var url = BuildUrlHelper.TransformIDUrl(parameters, \"statuses/retweets.json\");\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base retweeted by user url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweeted by user segment</returns>\n        Request BuildRetweetedByUserUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/retweeted_by_user.json\");\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweets of me segment</returns>\n        Request BuildRetweetsOfMeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/retweets_of_me.json\");\n        }\n\n        /// <summary>\n        /// construct an oembed url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + url segment</returns>\n        Request BuildOembedUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/oembed.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = parameters[\"ID\"];\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedUrl\"))\n            {\n                OEmbedUrl = parameters[\"OEmbedUrl\"];\n                urlParams.Add(new QueryParameter(\"url\", parameters[\"OEmbedUrl\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedMaxWidth\"))\n            {\n                OEmbedMaxWidth = int.Parse(parameters[\"OEmbedMaxWidth\"]);\n                urlParams.Add(new QueryParameter(\"maxwidth\", parameters[\"OEmbedMaxWidth\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideMedia\"))\n            {\n                OEmbedHideMedia = bool.Parse(parameters[\"OEmbedHideMedia\"]);\n                urlParams.Add(new QueryParameter(\"hide_media\", parameters[\"OEmbedHideMedia\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideThread\"))\n            {\n                OEmbedHideThread = bool.Parse(parameters[\"OEmbedHideThread\"]);\n                urlParams.Add(new QueryParameter(\"hide_thread\", parameters[\"OEmbedHideThread\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedOmitScript\"))\n            {\n                OEmbedOmitScript = bool.Parse(parameters[\"OEmbedOmitScript\"]);\n                urlParams.Add(new QueryParameter(\"omit_script\", parameters[\"OEmbedOmitScript\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedAlign\"))\n            {\n                OEmbedAlign = (EmbeddedStatusAlignment)Enum.Parse(typeof(EmbeddedStatusAlignment), parameters[\"OEmbedAlign\"], true);\n                urlParams.Add(new QueryParameter(\"align\", OEmbedAlign.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedRelated\"))\n            {\n                OEmbedRelated = parameters[\"OEmbedRelated\"];\n                urlParams.Add(new QueryParameter(\"related\", parameters[\"OEmbedRelated\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedLanguage\"))\n            {\n                OEmbedLanguage = parameters[\"OEmbedLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"OEmbedLanguage\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildRetweetersUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required.\", \"ID\");\n\n            var url = BaseUrl + \"statuses/retweeters/ids.json\";\n            var req = new Request(url);\n            var urlParams = req.RequestParameters;\n\n            ID = parameters[\"ID\"];\n            urlParams.Add(new QueryParameter(\"id\", ID));\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of Status\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of Status</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            List<Status> statusList;\n            switch (Type)\n            {\n                case StatusType.Show:\n                    statusList = new List<Status> { new Status(statusJson) };\n                    break;\n                case StatusType.Home:\n                case StatusType.Mentions:\n                case StatusType.RetweetedByUser:\n                case StatusType.RetweetsOfMe:\n                case StatusType.Retweets:\n                case StatusType.User:\n                    statusList =\n                        (from JsonData status in statusJson\n                         select new Status(status))\n                        .ToList();\n                    break;\n                case StatusType.Retweeters:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            Users =\n                                (from JsonData id in statusJson.GetValue<JsonData>(\"ids\")\n                                 select (ulong)id)\n                                .ToList(),\n                            CursorMovement = new Cursors(statusJson)\n                        }\n                    };\n                    break;\n                case StatusType.Oembed:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            EmbeddedStatus = new EmbeddedStatus(statusJson)\n                        }\n                    };\n                    break;\n                default:\n                    statusList = new List<Status>();\n                    break;\n            }\n\n            foreach (var status in statusList)\n            {\n                status.Type = Type;\n                status.ID = ID;\n                status.UserID = UserID;\n                status.ScreenName = ScreenName;\n                status.SinceID = SinceID;\n                status.MaxID = MaxID;\n                status.Count = Count;\n                status.Cursor = Cursor;\n                status.IncludeRetweets = IncludeRetweets;\n                status.ExcludeReplies = ExcludeReplies;\n                status.IncludeEntities = IncludeEntities;\n                status.IncludeUserEntities = IncludeUserEntities;\n                status.TrimUser = TrimUser;\n                status.IncludeContributorDetails = IncludeContributorDetails;\n                status.IncludeMyRetweet = IncludeMyRetweet;\n                status.OEmbedAlign = OEmbedAlign;\n                status.OEmbedHideMedia = OEmbedHideMedia;\n                status.OEmbedHideThread = OEmbedHideThread;\n                status.OEmbedMaxWidth = OEmbedMaxWidth;\n                status.OEmbedOmitScript = OEmbedOmitScript;\n                status.OEmbedRelated = OEmbedRelated;\n                status.OEmbedUrl = OEmbedUrl;\n                status.OEmbedLanguage = OEmbedLanguage;\n            }\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            var status = new Status(statusJson);\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Status/StatusType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// type of status request\n    /// </summary>\n    public enum StatusType\n    {\n        /// <summary>\n        /// tweets from a specific user\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, user ID to retrieve tweets for\n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        ///     - IncludeRetweets, return retweets too\n        /// </summary>\n        User,\n\n        /// <summary>\n        /// a specific tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to retrieve\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// lists the 20 most recent tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        Mentions,\n\n        /// <summary>\n        /// Same as Friend, but includes retweets too\n        /// \n        /// Available Options:\n        /// \n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        /// </summary>\n        Home,\n\n        /// <summary>\n        /// gets retweets of specified tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to get retweets for\n        ///     - Count, number of tweets to retrieve\n        /// </summary>\n        Retweets,\n\n        /// <summary>\n        /// lists the 20 most recent re-tweets to the specified user\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, ID or ScreenName of User to get Retweets for\n        ///     - UserID, ID of User to get Retweets for\n        ///     - ScreenName, Name of user to get Retweets for\n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        RetweetedByUser,\n\n        /// <summary>\n        /// lists the 20 most recent re-tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        RetweetsOfMe,\n\n        /// <summary>\n        /// lists up to 100 ids of users who retweeted a status\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, retweeted tweet ID\n        ///     - Cursor, page to return\n        /// </summary>\n        Retweeters,\n\n        /// <summary>\n        /// provides information, such as HTML, to embed a tweet in a Web page\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet ID\n        ///     - OEmbedUrl, Url of tweet to embed\n        ///     - OEmbedMaxWidth, Max number of pixels for width\n        ///     - OEmbedHideMedia, Don't initially expand image\n        ///     - OEmbedHideThread, Show original message for replies\n        ///     - OEmbedOmitScript, Don't include widgets.js script\n        ///     - OEmbedAlign, Image alignment: Left, Right, Center, or None\n        ///     - OEmbedRelated, Suggested accounts for the viewer to follow\n        ///     - OEmbedLanguage, Language code for rendered tweet\n        /// </summary>\n        Oembed,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStream.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Info for queries and responses from control streams\n    /// </summary>\n    public class ControlStream\n    {\n        /// <summary>\n        /// Type of control stream query (Followers or Info)\n        /// </summary>\n        public ControlStreamType Type { get; set; }\n\n        /// <summary>\n        /// ID of user to get followers for\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// ID of stream to query\n        /// </summary>\n        public string StreamID { get; set; }\n\n        /// <summary>\n        /// Response from an Info query\n        /// </summary>\n        public ControlStreamInfo Info { get; set; }\n\n        /// <summary>\n        /// Response from a Follow query\n        /// </summary>\n        public ControlStreamFollow Follow { get; set; }\n\n        /// <summary>\n        /// Response from a command, such as AddSiteStreamUser or RemoveSiteStreamUser\n        /// </summary>\n        public string CommandResponse { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStreamExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class ControlStreamExtensions\n    {\n        /// <summary>\n        /// Adds one or more users to a Site Stream\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"userIDs\">List of user IDs to add to Site Stream</param>\n        /// <param name=\"streamID\">ID of Site Stream to add users to</param>\n        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>\n        public static ControlStream AddSiteStreamUser(this TwitterContext ctx, List<ulong> userIDs, string streamID)\n        {\n            return AddSiteStreamUser(ctx, userIDs, streamID, null);\n        }\n\n        /// <summary>\n        /// Adds one or more users to a Site Stream\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"userIDs\">List of user IDs to add to Site Stream</param>\n        /// <param name=\"streamID\">ID of Site Stream to add users to</param>\n        /// <param name=\"callback\">Async Callback</param>\n        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>\n        public static ControlStream AddSiteStreamUser(this TwitterContext ctx, List<ulong> userIDs, string streamID, Action<TwitterAsyncResponse<ControlStream>> callback)\n        {\n            if (string.IsNullOrEmpty(streamID)) throw new ArgumentNullException(\"streamID\", \"streamID is required.\");\n            \n            var newUrl = ctx.SiteStreamUrl + \"site/c/\" + streamID + \"/add_user.json\";\n\n            string userIDString = string.Join(\",\", userIDs.Select(user => user.ToString()).ToArray());\n\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>();\n\n            var twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"user_id\", userIDString}\n                    },\n                    response => reqProc.ProcessActionResult(response, ControlStreamType.Info));\n\n            ControlStream cs = reqProc.ProcessActionResult(resultsJson, ControlStreamType.Info);\n            return cs;\n        }\n        \n        /// <summary>\n        /// Removes one or more users from a Site Stream\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"userIDs\">List of user IDs to remove from Site Stream</param>\n        /// <param name=\"streamID\">ID of Site Stream to remove users from</param>\n        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>\n        public static ControlStream RemoveSiteStreamUser(this TwitterContext ctx, List<ulong> userIDs, string streamID)\n        {\n            return RemoveSiteStreamUser(ctx, userIDs, streamID, null);\n        }\n\n        /// <summary>\n        /// Removes one or more users from a Site Stream\n        /// </summary>\n        /// <param name=\"ctx\">Twitter Context</param>\n        /// <param name=\"userIDs\">List of user IDs to remove from Site Stream</param>\n        /// <param name=\"streamID\">ID of Site Stream to remove users from</param>\n        /// <param name=\"callback\">Async Callback</param>\n        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>\n        public static ControlStream RemoveSiteStreamUser(this TwitterContext ctx, List<ulong> userIDs, string streamID, Action<TwitterAsyncResponse<ControlStream>> callback)\n        {\n            if (string.IsNullOrEmpty(streamID)) throw new ArgumentNullException(\"streamID\", \"streamID is required.\");\n\n            var newUrl = ctx.SiteStreamUrl + \"site/c/\" + streamID + \"/remove_user.json\";\n\n            string userIDString = string.Join(\",\", userIDs.Select(user => user.ToString()).ToArray());\n\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>();\n\n            var twitExe = ctx.TwitterExecutor;\n\n            twitExe.AsyncCallback = callback;\n            var resultsJson =\n                twitExe.PostToTwitter(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"user_id\", userIDString}\n                    },\n                    response => reqProc.ProcessActionResult(response, ControlStreamType.Info));\n\n            ControlStream cs = reqProc.ProcessActionResult(resultsJson, ControlStreamType.Info);\n            return cs;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStreamFollow.cs",
    "content": "﻿\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Follower component of a ControlStreams Followers query response\n    /// </summary>\n    public class ControlStreamFollow\n    {\n        public ControlStreamFollow(JsonData csJson)\n        {\n            var follow = csJson.GetValue<JsonData>(\"follow\");\n            User = new ControlStreamUser(follow.GetValue<JsonData>(\"user\"));\n            Friends =\n                (from JsonData friend in follow.GetValue<JsonData>(\"friends\")\n                 select (ulong)friend)\n                .ToList();\n            Cursors = new Cursors(follow);\n        }\n\n        /// <summary>\n        /// User to get followers for\n        /// </summary>\n        public ControlStreamUser User { get; set; }\n\n        /// <summary>\n        /// User's friends\n        /// </summary>\n        public List<ulong> Friends { get; set; }\n\n        /// <summary>\n        /// Cursors for paging through friends results\n        /// </summary>\n        public Cursors Cursors { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStreamInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Filled out by ControlStreams Info query\n    /// </summary>\n    public class ControlStreamInfo\n    {\n        public ControlStreamInfo(JsonData infoJson)\n        {\n            var info = infoJson.GetValue<JsonData>(\"info\");\n            Users =\n                (from JsonData user in info.GetValue<JsonData>(\"users\")\n                 select new ControlStreamUser(user))\n                .ToList();\n            Delimited = info.GetValue<string>(\"delimited\");\n            IncludeFollowingsActivity = info.GetValue<bool>(\"include_followings_activity\");\n            IncludeUserChanges = info.GetValue<bool>(\"include_user_changes\");\n            Replies = info.GetValue<string>(\"replies\");\n            With = info.GetValue<string>(\"with\");\n        }\n\n        /// <summary>\n        /// List of users on stream\n        /// </summary>\n        public List<ControlStreamUser> Users { get; set; }\n\n        /// <summary>\n        /// Whether stream is using delimeters\n        /// </summary>\n        public string Delimited { get; set; }\n\n        /// <summary>\n        /// If stream returns followers activity\n        /// </summary>\n        public bool IncludeFollowingsActivity { get; set; }\n\n        /// <summary>\n        /// If stream includes user changes\n        /// </summary>\n        public bool IncludeUserChanges { get; set; }\n\n        /// <summary>\n        /// Set to \"all\" to include replies\n        /// </summary>\n        public string Replies { get; set; }\n\n        /// <summary>\n        /// Type of messages: \"followings\" include followers and \"user\" is onlly user\n        /// </summary>\n        public string With { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStreamRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Direct Messages\n    /// </summary>\n    public class ControlStreamRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// base url of SiteStream\n        /// </summary>\n        public virtual string SiteStreamUrl { get; set; }\n\n        /// <summary>\n        /// Type of Direct Message\n        /// </summary>\n        internal ControlStreamType Type { get; set; }\n\n        /// <summary>\n        /// ID of User\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// ID of site stream to operate on\n        /// </summary>\n        internal string StreamID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<ControlStream>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"StreamID\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<ControlStreamType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case ControlStreamType.Followers:\n                    return BuildFollowersUrl(parameters);\n                case ControlStreamType.Info:\n                    return BuildInfoUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildFollowersUrl(Dictionary<string, string> parameters)\n        {\n            const string UserIdParam = \"UserID\";\n            if (parameters == null || !parameters.ContainsKey(UserIdParam))\n                throw new ArgumentNullException(UserIdParam, \"UserID is required.\");\n\n            const string StreamIdParam = \"StreamID\";\n            if (parameters == null || !parameters.ContainsKey(StreamIdParam))\n                throw new ArgumentNullException(StreamIdParam, \"StreamID is required.\");\n\n            StreamID = parameters[StreamIdParam];\n            var req = new Request(SiteStreamUrl + \"site/c/\" + parameters[StreamIdParam] + \"/friends/ids.json\");\n            parameters.Remove(StreamIdParam);\n\n            var urlParams = req.RequestParameters;\n\n            UserID = ulong.Parse(parameters[UserIdParam]);\n            urlParams.Add(new QueryParameter(\"user_id\", UserID.ToString()));\n\n            return req;\n        }\n\n        Request BuildInfoUrl(Dictionary<string, string> parameters)\n        {\n            const string StreamIdParam = \"StreamID\";\n            if (parameters == null || !parameters.ContainsKey(StreamIdParam))\n                throw new ArgumentNullException(StreamIdParam, \"StreamID is required.\");\n\n            StreamID = parameters[StreamIdParam];\n            var req = new Request(SiteStreamUrl + \"site/c/\" + parameters[StreamIdParam] + \"/info.json\");\n            parameters.Remove(StreamIdParam);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            var csJson = JsonMapper.ToObject(responseJson);\n\n            var ctrlStream = new ControlStream\n            {\n                Type = Type,\n                UserID = UserID,\n                StreamID = StreamID\n            };\n\n            var csList = new List<ControlStream>\n            {\n                ctrlStream\n            };\n\n            switch (Type)\n            {\n                case ControlStreamType.Followers:\n                    ctrlStream.Follow = new ControlStreamFollow(csJson);\n                    break;\n                case ControlStreamType.Info:\n                    ctrlStream.Info = new ControlStreamInfo(csJson);\n                    break;\n                default:\n                    csList = new List<ControlStream>();\n                    break;\n            }\n\n            return csList.OfType<T>().ToList();\n        }\n  \n        /// <summary>\n        /// Handles command responses\n        /// </summary>\n        /// <param name=\"responseJson\">Response from Twitter</param>\n        /// <param name=\"theAction\">Identifies the type of response to work with.</param>\n        /// <returns></returns>\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var cs = new ControlStream { CommandResponse = responseJson };\n\n            return cs.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStreamType.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    public enum ControlStreamType\n    {\n        /// <summary>\n        /// List of a user's followers\n        /// </summary>\n        Followers,\n\n        /// <summary>\n        /// Detailed info on a Site Stream\n        /// </summary>\n        Info\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/ControlStreamUser.cs",
    "content": "﻿using LitJson;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// User returned by Control Stream query\n    /// </summary>\n    public class ControlStreamUser\n    {\n        public ControlStreamUser(JsonData userJson)\n        {\n            UserID = userJson.GetValue<ulong>(\"id\");\n            Name = userJson.GetValue<string>(\"name\");\n            DM = userJson.GetValue<bool>(\"dm\");\n        }\n\n        /// <summary>\n        /// User's unique Twitter ID\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// User's screen name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Does the authenticated user have RW+DM access to user\n        /// </summary>\n        public bool DM { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/IStreamContent.cs",
    "content": "namespace LinqToTwitter\n{\n    public interface IStreamContent\n    {\n        string Content { get; set; }\n\n        void CloseStream();\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/StreamContent.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter stream\n    /// </summary>\n    public class StreamContent : IStreamContent\n    {\n        private readonly ITwitterExecute exec;\n\n        public StreamContent(ITwitterExecute exec, string content)\n        {\n            this.exec = exec;\n            Content = content;\n\n            Status = TwitterErrorStatus.Success;\n        }\n\n        /// <summary>\n        /// Stream object, which is a Twitter message of various\n        /// formats or empty string for keep-alive message\n        /// </summary>\n        public string Content { get; set; }\n\n        /// <summary>\n        /// You can check this value in the callback to\n        /// see if the request succeeded or failed\n        /// </summary>\n        public TwitterErrorStatus Status { get; set; }\n\n        /// <summary>\n        /// Will contain Exception if there was an error\n        /// </summary>\n        public Exception Error { get; set; }\n\n        public virtual void CloseStream()\n        {\n            exec.CloseStream = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/Streaming.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Reference to stream, details, and controls\n    /// </summary>\n    public class Streaming\n    {\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Number of tweets to go back to when reconnecting\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Tweets are delimeted in the stream\n        /// </summary>\n        public string Delimited { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Limit results to a comma-separated set of users\n        /// </summary>\n        public string Follow { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of keywords to get tweets for\n        /// </summary>\n        public string Track { get; set; }\n\n        /// <summary>\n        /// Get tweets in the comma-separated list of lat/lon's\n        /// </summary>\n        public string Locations { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        public bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Executor managing stream\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Closes stream\n        /// </summary>\n        public void CloseStream()\n        {\n            TwitterExecutor.CloseStream = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/StreamingRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public class StreamingRequestProcessor<T> : IRequestProcessor<T>\n    {\n        public string BaseUrl { get; set; }\n\n        public ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Number of tweets to go back to when reconnecting\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Tweets are delimeted in the stream\n        /// </summary>\n        internal string Delimited { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        internal string Language { get; set; }\n\n        /// <summary>\n        /// Limit results to a comma-separated set of users\n        /// </summary>\n        internal string Follow { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of keywords to get tweets for\n        /// </summary>\n        internal string Track { get; set; }\n\n        /// <summary>\n        /// Get tweets in the comma-separated list of lat/lon's\n        /// </summary>\n        internal string Locations { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        internal bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<Streaming>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Count\",\n                       \"Delimited\",\n                       \"Language\",\n                       \"Follow\",\n                       \"Track\",\n                       \"Locations\",\n                       \"StallWarnings\"\n                   }).Parameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                Delimited = parameters[\"Delimited\"];\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                Language = parameters[\"Language\"];\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                Follow = parameters[\"Follow\"];\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                Track = parameters[\"Track\"];\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                Locations = parameters[\"Locations\"];\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n            }\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n \n            Type = RequestProcessorHelper.ParseQueryEnumType<StreamingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StreamingType.Filter:\n                    return BuildFilterUrl(parameters);\n                case StreamingType.Firehose:\n                    return BuildFirehoseUrl(parameters);\n                case StreamingType.Links:\n                    return BuildLinksUrl(parameters);\n                case StreamingType.Retweet:\n                    return BuildRetweetUrl(parameters);\n                case StreamingType.Sample:\n                    return BuildSampleUrl(parameters);\n                default:\n                    break;\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// builds an url for filtering stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildFilterUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Follow\") &&\n                !parameters.ContainsKey(\"Locations\") &&\n                !parameters.ContainsKey(\"Track\"))\n            {\n                throw new ArgumentException(\"You must specify at least one of the parameters Follow, Locations, or Track.\", \"FollowOrLocationsOrTrack\");\n            }\n\n            var req = new Request(BaseUrl + \"statuses/filter.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                urlParams.Add(new QueryParameter(\"follow\", parameters[\"Follow\"]));\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                urlParams.Add(new QueryParameter(\"locations\", parameters[\"Locations\"]));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                urlParams.Add(new QueryParameter(\"track\", parameters[\"Track\"]));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting all results from the Twitter stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildFirehoseUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/firehose.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting all results from the Twitter stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildLinksUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/links.json\");\n            var urlParams = req.RequestParameters;\n      \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting all results from the Twitter stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildRetweetUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/retweet.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a sample from the stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildSampleUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"Count\"))\n                throw new ArgumentException(\"Count is forbidden in Sample streams.\", \"Count\");\n\n            var req = new Request(BaseUrl + \"statuses/sample.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Returns an object for interacting with stream\n        /// </summary>\n        /// <param name=\"notUsed\">Not used</param>\n        /// <returns>List with a single Streaming</returns>\n        public List<T> ProcessResults(string notUsed)\n        {\n            var streamingList = new List<Streaming>\n            {\n                new Streaming\n                {\n                    Type = Type,\n                    Count = Count,\n                    Delimited = Delimited,\n                    Follow = Follow,\n                    Locations = Locations,\n                    Track = Track,\n                    TwitterExecutor = TwitterExecutor\n                }\n            };\n\n            return streamingList.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/StreamingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum StreamingType\n    {\n        /// <summary>\n        /// Tweets matching a predicate (count, delimited, follow, locations, or track)\n        /// </summary>\n        Filter,\n\n        /// <summary>\n        /// All public tweets\n        /// </summary>\n        Firehose,\n\n        // TODO: Not documented on Twitter API 1.1\n        /// <summary>\n        /// Tweets containing http or https\n        /// </summary>\n        Links,\n\n        // TODO: Not documented on Twitter API 1.1\n        /// <summary>\n        /// Retweets...\n        /// </summary>\n        Retweet,\n\n        /// <summary>\n        /// Random (as defined by Twitter) tweets\n        /// </summary>\n        Sample\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/UserStream.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Information for creating user streams\n    /// </summary>\n    public class UserStream\n    {\n        /// <summary>\n        /// Type of user stream\n        /// </summary>\n        public UserStreamType Type { get; set; }\n\n        /// <summary>\n        /// Stream delimiter\n        /// </summary>\n        public string Delimited { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Comma-separated list (no spaces) of users to add to Site Stream\n        /// </summary>\n        public string Follow { get; set; }\n\n        /// <summary>\n        /// Search terms\n        /// </summary>\n        public string Track { get; set; }\n\n        /// <summary>\n        /// Type of entities to return, i.e. Follow, User, etc.\n        /// </summary>\n        public string With { get; set; }\n\n        /// <summary>\n        /// Normally, only replies between two users that follow each other show.\n        /// Setting this to true will show replies, regardless of follow status.\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        public bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Bounding box of locations to include tweets\n        /// </summary>\n        public string Locations { get; set; }\n\n        /// <summary>\n        /// Executor managing stream\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Closes stream\n        /// </summary>\n        public void CloseStream()\n        {\n            TwitterExecutor.CloseStream = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/UserStreamRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public class UserStreamRequestProcessor<T> : IRequestProcessor<T>\n    {\n        public string BaseUrl\n        {\n            get\n            {\n                throw new NotImplementedException(\"You should use UserStreamUrl or SiteStreamUrl instead.\");\n            }\n            set\n            {\n                throw new NotImplementedException(\"You should use UserStreamUrl or SiteStreamUrl instead.\");\n            }\n        }\n\n        public string UserStreamUrl { get; set; }\n\n        public string SiteStreamUrl { get; set; }\n\n        public ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Type of user stream\n        /// </summary>\n        internal UserStreamType Type { get; set; }\n\n        /// <summary>\n        /// Stream delimiter\n        /// </summary>\n        /// <remarks>Should always be \"length\" </remarks>\n        internal string Delimited { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        internal string Language { get; set; }\n\n        /// <summary>\n        /// Comma-separated list (no spaces) of users to add to Site Stream\n        /// </summary>\n        internal string Follow { get; set; }\n\n        /// <summary>\n        /// Search terms\n        /// </summary>\n        internal string Track { get; set; }\n\n        /// <summary>\n        /// Type of entities to return, i.e. \"followings\" or \"user\".\n        /// </summary>\n        internal string With { get; set; }\n\n        /// <summary>\n        /// Normally, only replies between two users that follow each other show.\n        /// Setting this to true will show replies, regardless of follow status.\n        /// </summary>\n        internal bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        internal bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Bounding box of locations to include tweets\n        /// </summary>\n        internal string Locations { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<UserStream>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Delimited\",\n                       \"Language\",\n                       \"Follow\",\n                       \"Track\",\n                       \"With\",\n                       \"AllReplies\",\n                       \"StallWarnings\",\n                       \"Locations\"\n                   }).Parameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                Delimited = parameters[\"Delimited\"];\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                Language = parameters[\"Language\"];\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                Follow = parameters[\"Follow\"];\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                Track = parameters[\"Track\"];\n            }\n\n            if (parameters.ContainsKey(\"With\"))\n            {\n                With = parameters[\"With\"];\n            }\n\n            if (parameters.ContainsKey(\"AllReplies\"))\n            {\n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                Locations = parameters[\"Locations\"];\n            }\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<UserStreamType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case UserStreamType.User:\n                    return BuildUserUrl(parameters);\n                case UserStreamType.Site:\n                    return BuildSiteUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid UserStreamType\", \"UserStreamType\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting user info from stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildUserUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(UserStreamUrl + \"user.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                Delimited = parameters[\"Delimited\"];\n                urlParams.Add(new QueryParameter(\"delimited\", Delimited.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                Language = parameters[\"Language\"].Replace(\" \", \"\");\n                urlParams.Add(new QueryParameter(\"language\", Language));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                Track = parameters[\"Track\"];\n                urlParams.Add(new QueryParameter(\"track\", Track));\n            }\n\n            if (parameters.ContainsKey(\"With\"))\n            {\n                With = parameters[\"With\"];\n                urlParams.Add(new QueryParameter(\"with\", With.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"AllReplies\"))\n            {\n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n\n                if (AllReplies)\n                {\n                    urlParams.Add(new QueryParameter(\"replies\", \"all\"));\n                }\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                Locations = parameters[\"Locations\"];\n                urlParams.Add(new QueryParameter(\"locations\", Locations));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting user info from stream\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        private Request BuildSiteUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Follow\"))\n            {\n                throw new ArgumentNullException(\"Follow\", \"Follow is required.\");\n            }\n\n            var req = new Request(SiteStreamUrl + \"site.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                Delimited = parameters[\"Delimited\"];\n                urlParams.Add(new QueryParameter(\"delimited\", Delimited.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                Language = parameters[\"Language\"].Replace(\" \", \"\");\n                urlParams.Add(new QueryParameter(\"language\", Language));\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                Follow = parameters[\"Follow\"].Replace(\" \", \"\");\n                urlParams.Add(new QueryParameter(\"follow\", Follow.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                throw new ArgumentException(\"Track is not supported for Site Streams.\", \"Track\");\n            }\n\n            if (parameters.ContainsKey(\"With\"))\n            {\n                With = parameters[\"With\"];\n                urlParams.Add(new QueryParameter(\"with\", With.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"AllReplies\"))\n            {\n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n\n                if (AllReplies)\n                {\n                    urlParams.Add(new QueryParameter(\"replies\", \"all\"));\n                }\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Returns an object for interacting with stream\n        /// </summary>\n        /// <param name=\"notUsed\">Not used</param>\n        /// <returns>List with a single UserStream</returns>\n        public List<T> ProcessResults(string notUsed)\n        {\n            var streamingList = new List<UserStream>\n            {\n                new UserStream\n                {\n                    Type = Type,\n                    Delimited = Delimited,\n                    Follow = Follow,\n                    Track = Track,\n                    With = With,\n                    AllReplies = AllReplies,\n                    TwitterExecutor = TwitterExecutor\n                }\n            };\n\n            return streamingList.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Streaming/UserStreamType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum UserStreamType\n    {\n        /// <summary>\n        /// User stream\n        /// </summary>\n        User,\n\n        /// <summary>\n        /// Site stream\n        /// </summary>\n        Site\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Trend/Location.cs",
    "content": "﻿using System.Globalization;\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Location\n    {\n        public Location() {}\n        internal Location(JsonData trendLocation)\n        {\n            var placeType = trendLocation.GetValue<JsonData>(\"placeType\");\n\n            Country = trendLocation.GetValue<string>(\"country\");\n            Name = trendLocation.GetValue<string>(\"name\");\n            CountryCode = trendLocation.GetValue<string>(\"countryCode\");\n            ParentID = trendLocation.GetValue<int>(\"parentid\").ToString(CultureInfo.InvariantCulture);\n            PlaceTypeName = placeType.GetValue<string>(\"name\");\n            PlaceTypeNameCode = placeType.GetValue<int>(\"code\");\n            Url = trendLocation.GetValue<string>(\"url\");\n            WoeID = trendLocation.GetValue<int>(\"woeid\");\n        }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Name of location\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Type of location\n        /// </summary>\n        public string PlaceTypeName { get; set; }\n\n        /// <summary>\n        /// Code for PlaceTypeName\n        /// </summary>\n        public int PlaceTypeNameCode { get; set; }\n\n        /// <summary>\n        /// Country of Location\n        /// </summary>\n        public string Country { get; set; }\n\n        /// <summary>\n        /// Country Code\n        /// </summary>\n        public string CountryCode { get; set; }\n\n        /// <summary>\n        /// Yahoo Location URL\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Parent location relative to current location.\n        /// Set to null if current location is World.\n        /// </summary>\n        public string ParentID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Trend/Trend.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps to work with trends\n    /// </summary>\n    public class Trend\n    {\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        public TrendType Type { get; set; }\n\n        /// <summary>\n        /// When place trend was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// time of request\n        /// </summary>\n        public DateTime AsOf { get; set; }\n\n        /// <summary>\n        /// twitter search query on topic\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Search URL returned from Local Trends\n        /// </summary>\n        public string SearchUrl { get; set; }\n\n        /// <summary>\n        /// name of trend topic\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public string Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public string Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        public bool Exclude { get; set; }\n\n        /// <summary>\n        /// No idea, perhaps the event associated with a trend\n        /// </summary>\n        public string Events { get; set; }\n\n        /// <summary>\n        /// Flag indicating this is a promoted trend (as opposed to organic)\n        /// </summary>\n        public string PromotedContent { get; set; }\n\n        /// <summary>\n        /// Return value for Avalable query listing locations of trending topics\n        /// </summary>\n        public List<Location> Locations { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Trend/TrendRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps process trend requests\n    /// </summary>\n    public class TrendRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string WoeIDParam = \"WoeID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        internal TrendType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        internal string Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        internal string Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        internal int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        internal bool Exclude { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Trend>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Latitude\",\n                       \"Longitude\",\n                       \"WoeID\",\n                       \"Exclude\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<TrendType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case TrendType.Available:\n                    return BuildAvailableTrendsUrl();\n                case TrendType.Closest:\n                    return BuildClosestTrendsUrl(parameters);\n                case TrendType.Place:\n                    return BuildPlaceTrendsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// Builds a url for finding trends at a specified location\n        /// </summary>\n        /// <param name=\"parameters\">parameters should contain WoeID</param>\n        /// <returns>base url + location segment</returns>\n        private Request BuildPlaceTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(WoeIDParam))\n                throw new ArgumentException(\"WoeID is a required parameter.\", WoeIDParam);\n\n            var req = new Request(BaseUrl + \"trends/place.json\");\n            var urlParams = req.RequestParameters;\n\n            WoeID = int.Parse(parameters[WoeIDParam]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[WoeIDParam]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL for finding where trends are occurring\n        /// </summary>\n        /// <returns>base url + Available segment</returns>\n        private Request BuildAvailableTrendsUrl()\n        {\n            return new Request(BaseUrl + \"trends/available.json\");\n        }\n\n        /// <summary>\n        /// Builds an URL for finding trends closest to a lat/long\n        /// </summary>\n        /// <param name=\"parameters\">parameters can include Latitude and Longitude (must have either both parameters or neither)</param>\n        /// <returns>base url + Available segment</returns>\n        private Request BuildClosestTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if ((parameters.ContainsKey(\"Latitude\") && !parameters.ContainsKey(\"Longitude\")) ||\n                (!parameters.ContainsKey(\"Latitude\") && parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"If you pass either Latitude or Longitude then you must pass both. Otherwise, don't pass either.\", \"Latitude/Longitude\");\n\n            var req = new Request(BaseUrl + \"trends/closest.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = parameters[\"Latitude\"];\n                urlParams.Add(new QueryParameter(\"lat\", parameters[\"Latitude\"]));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = parameters[\"Longitude\"];\n                urlParams.Add(new QueryParameter(\"long\", parameters[\"Longitude\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Trend\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Trend</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Trend> trends = Enumerable.Empty<Trend>();\n\n            if (!string.IsNullOrEmpty(responseJson))\n            {\n                switch (Type)\n                {\n                    case TrendType.Available:\n                    case TrendType.Closest:\n                        trends = HandleAvailableOrClosestResponse(responseJson);\n                        break;\n\n                    case TrendType.Place:\n                        trends = HandlePlaceResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n            }\n\n            return trends.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Type of action to process</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var trend = new Trend();\n\n            return trend.ItemCast(default(T));\n        }\n\n        IEnumerable<Trend> HandlePlaceResponse(string responseJson)\n        {\n            var responses = JsonMapper.ToObject(responseJson);\n\n            var flat =\n                from JsonData response in responses\n                let asOf = response.GetValue<string>(\"as_of\").GetDate(DateTime.UtcNow)\n                let createdAt = response.GetValue<string>(\"created_at\").GetDate(DateTime.UtcNow)\n                let locations =\n                     (from JsonData place in response.GetValue<JsonData>(\"locations\")\n                      select new Location(place)).ToList()\n                let trends =\n                     (from JsonData trend in response.GetValue<JsonData>(\"trends\")\n                      select new Trend\n                      {\n                          Type = Type,\n                          AsOf = asOf,\n                          CreatedAt = createdAt,\n                          Latitude = Latitude,\n                          Longitude = Longitude,\n                          WoeID = WoeID,\n                          Exclude = Exclude,\n                          Name = trend.GetValue<string>(\"name\"),\n                          Query = trend.GetValue<string>(\"query\"),\n                          SearchUrl = trend.GetValue<string>(\"url\"),\n                          Events = trend.GetValue<string>(\"events\"),\n                          PromotedContent = trend.GetValue<string>(\"promoted_content\"),\n                          Locations = locations\n                      })\n                select trends;\n\n            return flat.SelectMany(trend => trend);\n        }\n\n        IEnumerable<Trend> HandleAvailableOrClosestResponse(string responseJson)\n        {\n            var trends = JsonMapper.ToObject(responseJson);\n            var locations =\n                (from JsonData loc in trends\n                 select new Location(loc))\n                .ToList();\n\n            // we fake a single Trend to hang the locations off of...\n            yield return new Trend\n            {\n                Type = Type,\n                AsOf = DateTime.UtcNow,\n                Latitude = Latitude,\n                Longitude = Longitude,\n                WoeID = WoeID,\n                Exclude = Exclude,\n                Locations = locations\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/Trend/TrendType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of trend to query\n    /// </summary>\n    public enum TrendType\n    {\n        /// <summary>\n        /// Locations of where trends are occurring\n        /// </summary>\n        Available,\n\n        /// <summary>\n        /// Trends closest to specified lat/long\n        /// </summary>\n        Closest,\n\n        /// <summary>\n        /// Top 10 topics for a WOEID\n        /// </summary>\n        Place\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/Category.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A single category for Twitter suggested categories\n    /// </summary>\n    public class Category\n    {\n        public Category() { }\n        public Category(JsonData catJson)\n        {\n            Size = catJson.GetValue<int>(\"size\");\n            Name = catJson.GetValue<string>(\"name\");\n            Slug = catJson.GetValue<string>(\"slug\");\n\n            var users = catJson.GetValue<JsonData>(\"users\");\n            if (users != null)\n                Users =\n                    (from JsonData user in users\n                     select new User(user))\n                    .ToList();\n        }\n\n        /// <summary>\n        /// Category name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Category description\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Number of users in category\n        /// </summary>\n        public int Size { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<Category> Categories { get; set; }\n\n        /// <summary>\n        /// Users in category\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/ProfileImageSize.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum ProfileImageSize\n    {\n        /// <summary>\n        /// 48 x 48 pixels (default)\n        /// </summary>\n        Normal,\n\n        /// <summary>\n        /// 73 x 73 pixels\n        /// </summary>\n        Bigger,\n\n        /// <summary>\n        /// 24 x 24 pixels\n        /// </summary>\n        Mini,\n\n        /// <summary>\n        /// Size of the originally uploaded image\n        /// </summary>\n        Original\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/User.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for a twitter user\n    /// </summary>\n    public class User\n    {\n        public User() {}\n        public User(JsonData user)\n        {\n            if (user == null) return;\n\n            var userID = user.GetValue<ulong>(\"id\").ToString(CultureInfo.InvariantCulture);\n            Identifier = new UserIdentifier\n            {\n                ID = userID,\n                UserID = userID,\n                ScreenName = user.GetValue<string>(\"screen_name\")\n            };\n            Name = user.GetValue<string>(\"name\");\n            Location = user.GetValue<string>(\"location\");\n            Description = user.GetValue<string>(\"description\");\n            ProfileImageUrl = user.GetValue<string>(\"profile_image_url\");\n            ProfileImageUrlHttps = user.GetValue<string>(\"profile_image_url_https\");\n            Url = user.GetValue<string>(\"url\");\n            Protected = user.GetValue<bool>(\"protected\");\n            ProfileUseBackgroundImage = user.GetValue<bool>(\"profile_use_background_image\");\n            IsTranslator = user.GetValue<bool>(\"is_translator\");\n            FollowersCount = user.GetValue<int>(\"followers_count\");\n            DefaultProfile = user.GetValue<bool>(\"default_profile\");\n            ProfileBackgroundColor = user.GetValue<string>(\"profile_background_color\");\n            LangResponse = user.GetValue<string>(\"lang\");\n            ProfileTextColor = user.GetValue<string>(\"profile_text_color\");\n            ProfileLinkColor = user.GetValue<string>(\"profile_link_color\");\n            ProfileSidebarFillColor = user.GetValue<string>(\"profile_sidebar_fill_color\");\n            ProfileSidebarBorderColor = user.GetValue<string>(\"profile_sidebar_border_color\");\n            FriendsCount = user.GetValue<int>(\"friends_count\");\n            DefaultProfileImage = user.GetValue<bool>(\"default_profile_image\");\n            CreatedAt = user.GetValue<string>(\"created_at\").GetDate(DateTime.MinValue);\n            FavoritesCount = user.GetValue<int>(\"favourites_count\");\n            UtcOffset = user.GetValue<int>(\"utc_offset\");\n            TimeZone = user.GetValue<string>(\"time_zone\");\n            ProfileBackgroundImageUrl = user.GetValue<string>(\"profile_background_image_url\");\n            ProfileBackgroundImageUrlHttps = user.GetValue<string>(\"profile_background_image_url_https\");\n            ProfileBackgroundTile = user.GetValue<bool>(\"profile_background_tile\");\n            ProfileBannerUrl = user.GetValue<string>(\"profile_banner_url\");\n            StatusesCount = user.GetValue<int>(\"statuses_count\");\n            Notifications = user.GetValue<bool>(\"notifications\");\n            GeoEnabled = user.GetValue<bool>(\"geo_enabled\");\n            Verified = user.GetValue<bool>(\"verified\");\n            ContributorsEnabled = user.GetValue<bool>(\"contributors_enabled\");\n            Following = user.GetValue<bool>(\"following\");\n            ShowAllInlineMedia = user.GetValue<bool>(\"show_all_inline_media\");\n            ListedCount = user.GetValue<int>(\"listed_count\");\n            FollowRequestSent = user.GetValue<bool>(\"follow_request_sent\");\n            Status = new Status(user.GetValue<JsonData>(\"status\"));\n            CursorMovement = new Cursors(user);\n        }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        public UserType Type { get; set; }\n\n        /// <summary>\n        /// Query user's Twitter ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Query User ID for disambiguating when ID is screen name\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// On Input - disambiguates when ID is User ID\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Identity properties of this specific user\n        /// </summary>\n        public UserIdentifier Identifier { get; set; }\n\n        /// <summary>\n        /// Page to return\n        /// </summary>\n        /// <remarks>\n        /// This was made obsolete for one API, but not Search. Therefore, we can't mark it as obsolete yet.\n        /// </remarks>\n        //[Obsolete(\"This property has been deprecated and will be ignored by Twitter. Please use Cursor/CursorMovement properties instead.\")]\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        [Obsolete(\"Please use Count instead.\", true)]\n        public int PerPage { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        public ProfileImageSize ImageSize { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// name of user\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// location of user\n        /// </summary>\n        public string Location { get; set; }\n\n        /// <summary>\n        /// user's description\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// user's image\n        /// </summary>\n        public string ProfileImageUrl { get; set; }\n\n        /// <summary>\n        /// user's image for use on HTTPS secured pages\n        /// </summary>\n        public string ProfileImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// user's image is a defaulted placeholder\n        /// </summary>\n        public bool DefaultProfileImage{ get; set; }\n\n        /// <summary>\n        /// user's URL\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// user's profile has not been configured (is just defaults)\n        /// </summary>\n        public bool DefaultProfile { get; set; }\n\n        /// <summary>\n        /// is user protected\n        /// </summary>\n        public bool Protected { get; set; }\n\n        /// <summary>\n        /// number of people following user\n        /// </summary>\n        public int FollowersCount { get; set; }\n\n        /// <summary>\n        /// color of profile background\n        /// </summary>\n        public string ProfileBackgroundColor { get; set; }\n\n        /// <summary>\n        /// color of profile text\n        /// </summary>\n        public string ProfileTextColor { get; set; }\n\n        /// <summary>\n        /// color of profile links\n        /// </summary>\n        public string ProfileLinkColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar\n        /// </summary>\n        public string ProfileSidebarFillColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar border\n        /// </summary>\n        public string ProfileSidebarBorderColor { get; set; }\n\n        /// <summary>\n        /// number of friends\n        /// </summary>\n        public int FriendsCount { get; set; }\n\n        /// <summary>\n        /// date and time when profile was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// number of favorites\n        /// </summary>\n        public int FavoritesCount { get; set; }\n\n        /// <summary>\n        /// UTC Offset\n        /// </summary>\n        public int UtcOffset { get; set; }\n\n        /// <summary>\n        /// Time Zone\n        /// </summary>\n        public string TimeZone { get; set; }\n\n        /// <summary>\n        /// URL of profile background image\n        /// </summary>\n        public string ProfileBackgroundImageUrl { get; set; }\n\n        /// <summary>\n        /// URL of profile background image for use on HTTPS secured pages\n        /// </summary>\n        public string ProfileBackgroundImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// Title of profile background\n        /// </summary>\n        public bool ProfileBackgroundTile { get; set; }\n\n        /// <summary>\n        /// Should we use the profile background image?\n        /// </summary>\n        public bool ProfileUseBackgroundImage { get; set; }\n\n        /// <summary>\n        /// number of status updates user has made\n        /// </summary>\n        public int StatusesCount { get; set; }\n\n        /// <summary>\n        /// type of device notifications\n        /// </summary>\n        public bool Notifications { get; set; }\n\n        /// <summary>\n        /// Supports Geo Tracking\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Is a verified account\n        /// </summary>\n        public bool Verified { get; set; }\n\n        /// <summary>\n        /// Is contributors enabled on account?\n        /// </summary>\n        public bool ContributorsEnabled { get; set; }\n\n        /// <summary>\n        /// Is this a translator?\n        /// </summary>\n        public bool IsTranslator { get; set; }\n\n        /// <summary>\n        /// is authenticated user following this user\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// current user status (valid only in user queries)\n        /// </summary>\n        public Status Status { get; set; }\n\n        /// <summary>\n        /// User categories for Twitter Suggested Users\n        /// </summary>\n        public List<Category> Categories { get; set; }\n\n        /// <summary>\n        /// Input param for Category queries\n        /// </summary>\n        public string Lang { get; set; }\n\n        /// <summary>\n        /// Return results for specified language\n        ///  Note: Twitter only supports a limited number of languages,\n        ///  which include en, fr, de, es, it when this feature was added.\n        /// </summary>\n        public string LangResponse { get; set; }\n\n        /// <summary>\n        /// Indicates if user has inline media enabled\n        /// </summary>\n        public bool ShowAllInlineMedia { get; set; }\n\n        /// <summary>\n        /// Number of lists user is a member of\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// If authenticated user has requested to follow this use\n        /// </summary>\n        public bool FollowRequestSent { get; set; }\n\n        /// <summary>\n        /// Response from ProfileImage query\n        /// </summary>\n        public string ProfileImage { get; set; }\n\n        /// <summary>\n        /// Url of Profile Banner image.\n        /// </summary>\n        public string ProfileBannerUrl { get; set; }\n\n        /// <summary>\n        /// Available sizes to use in account banners.\n        /// </summary>\n        public List<BannerSize> BannerSizes { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/UserAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum UserAction\n    {\n        SingleUser\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/UserIdentifier.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Identifier info returned from Twitter\n    /// </summary>\n    /// <remarks>\n    /// This type was created to differentiate between the\n    /// identifiers used in a query and the identifiers\n    /// returned by Twitter. i.e. you might filter on UserID\n    /// but not fill in the ID or ScreenName. However, Twitter\n    /// will return all three identifiers for a user, which\n    /// you might want to extract from query results. Therefore,\n    /// you would use this instance, rather than the same-named\n    /// properties of the parent object.\n    /// </remarks>\n    public class UserIdentifier\n    {\n        /// <summary>\n        /// user's Twitter ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// User ID for disambiguating when ID is screen name\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// user's screen name\n        /// On Input - disambiguates when ID is User ID\n        /// </summary>\n        public string ScreenName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/UserRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\n#if SILVERLIGHT && !WINDOWS_PHONE\n    using System.Windows.Browser;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter User requests\n    /// </summary>\n    public class UserRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string ScreenNameOrUserID = \"ScreenNameOrUserID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        internal UserType Type { get; set; }\n\n        /// <summary>\n        /// user's Twitter ID\n        /// </summary>\n        internal string ID { get; set; }\n\n        /// <summary>\n        /// User ID for disambiguating when ID is screen name\n        /// </summary>\n        internal string UserID { get; set; }\n\n        /// <summary>\n        /// user's screen name\n        /// On Input - disambiguates when ID is User ID\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// page number of results to retrieve\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        internal string Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// Supports various languages\n        /// </summary>\n        internal string Lang { get; set; }\n\n        /// <summary>\n        /// Add entities to results\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        internal ProfileImageSize ImageSize { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<User>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Page\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"Slug\",\n                       \"Query\",\n                       \"Lang\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\",\n                       \"ImageSize\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<UserType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case UserType.Show:\n                    return BuildShowUrl(parameters);\n                case UserType.Categories:\n                    return BuildCategoriesUrl(parameters);\n                case UserType.Category:\n                    return BuildUsersInCategoryUrl(parameters);\n                case UserType.CategoryStatus:\n                    return BuildCategoryStatusUrl(parameters);\n                case UserType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case UserType.Search:\n                    return BuildSearchUrl(parameters);\n                case UserType.Contributees:\n                    return BuildContributeesUrl(parameters);\n                case UserType.Contributors:\n                    return BuildContributorsUrl(parameters);\n                case UserType.BannerSizes:\n                    return BuildBannerSizesUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildContributorsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/contributors.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            return req;\n        }\n \n        Request BuildContributeesUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            var req = new Request(BaseUrl + \"users/contributees.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a URL to perform a user search\n        /// </summary>\n        /// <param name=\"parameters\">Query, Page, and Count</param>\n        /// <returns>URL for performing user search</returns>\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryParam = \"Query\";\n            if (!parameters.ContainsKey(\"Query\"))\n                throw new ArgumentException(\"Query parameter is required.\", QueryParam);\n\n            var req = new Request(BaseUrl + \"users/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"q\", parameters[\"Query\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url for performing lookups\n        /// </summary>\n        /// <param name=\"parameters\">Either UserID or ScreenName</param>\n        /// <returns>URL for performing lookups</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            var req = new Request(BaseUrl + \"users/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds url for getting users that belong to a suggestion category\n        /// </summary>\n        /// <param name=\"parameters\">Contains Slug. Required.</param>\n        /// <returns>Url for query + slug</returns>\n        Request BuildUsersInCategoryUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Slug\"))\n                throw new ArgumentException(\"Slug parameter is required.\", \"Slug\");\n\n            Slug = parameters[\"Slug\"];\n\n            var req = new Request(BaseUrl + \"users/suggestions/\" + Slug + \".json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Lang\"))\n            {\n                Lang = parameters[\"Lang\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"Lang\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url to get suggested user categories\n        /// </summary>\n        /// <param name=\"parameters\">Not used</param>\n        /// <returns>Url for suggested user categories</returns>\n        Request BuildCategoriesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/suggestions.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Lang\"))\n            {\n                Lang = parameters[\"Lang\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"Lang\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url to get tweets of users in a suggested category\n        /// </summary>\n        /// <param name=\"parameters\">Reads Slug param</param>\n        /// <returns>Url for category statuses</returns>\n        Request BuildCategoryStatusUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Slug\"))\n                throw new ArgumentNullException(\"Slug\", \"You must set the Slug property, which is the suggested category.\");\n\n            Slug = parameters[\"Slug\"];\n            var req = new Request(BaseUrl + \"users/suggestions/\" + Slug.ToLower() + \"/members.json\");\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds a url to show user info\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrEmpty(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrEmpty(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            var req = new Request(BaseUrl + \"users/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildBannerSizesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/profile_banner.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrEmpty(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrEmpty(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrEmpty(responseJson)) return new List<T>();\n\n            List<User> userList = null;\n\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case UserType.Show:\n                    userList = HandleSingleUserResponse(userJson);\n                    break;\n                case UserType.Categories:\n                    userList = HandleMultipleCategoriesResponse(userJson);\n                    break;\n                case UserType.Category:\n                    userList = HandleSingleCategoryResponse(userJson);\n                    break;\n                case UserType.Contributees:\n                case UserType.Contributors:\n                case UserType.CategoryStatus:\n                case UserType.Lookup:\n                case UserType.Search:\n                    userList = HandleMultipleUserResponse(userJson);\n                    break;\n                case UserType.BannerSizes:\n                    userList = HandleBannerSizesResponse(userJson);\n                    break;\n                default:\n                    userList = new List<User>();\n                    break;\n            }\n\n            foreach(var user in userList)\n            {\n                user.Type = Type;\n                user.ID = ID;\n                user.UserID = UserID;\n                user.ScreenName = ScreenName;\n                user.Page = Page;\n                user.Count = Count;\n                user.Cursor = Cursor;\n                user.Slug = Slug;\n                user.Lang = Lang;\n                user.Query = Query;\n                user.IncludeEntities = IncludeEntities;\n                user.SkipStatus = SkipStatus;\n                user.ImageSize = ImageSize;\n            }\n\n            return userList.OfType<T>().ToList();\n        }\n  \n        List<User> HandleSingleUserResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n  \n        List<User> HandleMultipleCategoriesResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User>\n            {\n                new User\n                {\n                    Categories =\n                        (from JsonData cat in userJson\n                         select new Category(cat))\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n  \n        List<User> HandleSingleCategoryResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User>\n            {\n                new User\n                {\n                    Categories = new List<Category> { new Category(userJson) }\n                }\n            };\n\n            return userList;\n        }\n  \n        List<User> HandleMultipleUserResponse(JsonData userJson)\n        {\n            List<User> userList =\n                (from JsonData user in userJson\n                 select new User(user))\n                .ToList();\n\n            return userList;\n        }\n\n        List<User> HandleBannerSizesResponse(JsonData userJson)\n        {\n            var sizes = userJson.GetValue<JsonData>(\"sizes\");\n            var userList = new List<User>\n            {\n                new User\n                {\n                    BannerSizes =     \n                        (from key in (sizes as IDictionary<string, JsonData>).Keys as List<string>\n                         let sizesKey = sizes.GetValue<JsonData>(key)\n                         select new BannerSize\n                         {\n                             Label = key,\n                             Width = sizesKey.GetValue<int>(\"w\"),\n                             Height = sizesKey.GetValue<int>(\"h\"),\n                             Url = sizesKey.GetValue<string>(\"url\")\n                         })\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterAg/User/UserType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of user request\n    /// </summary>\n    public enum UserType\n    {\n        /// <summary>\n        /// extended information on a user\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Available Twitter suggestion categories\n        /// </summary>\n        Categories,\n\n        /// <summary>\n        /// Users under a specified category\n        /// </summary>\n        Category,\n\n        /// <summary>\n        /// Get most recent tweet of each user in category\n        /// </summary>\n        CategoryStatus,\n\n        /// <summary>\n        /// Get user details for a set of users\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// Perform a user search\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Users that specified user can contribute to\n        /// </summary>\n        Contributees,\n\n        /// <summary>\n        /// Users who can contribute to an account\n        /// </summary>\n        Contributors,\n\n        /// <summary>\n        /// List of sizes for account banners\n        /// </summary>\n        BannerSizes\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterCP/LinqToTwitterCP.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{A430971C-58BB-4BE3-B058-795BDFFD56BC}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitterCP</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <TargetFrameworkProfile>Client</TargetFrameworkProfile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;CLIENT_PROFILE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;CLIENT_PROFILE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Account.cs\">\n      <Link>Account\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountAction.cs\">\n      <Link>Account\\AccountAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountExtensions.cs\">\n      <Link>Account\\AccountExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountRequestProcessor.cs\">\n      <Link>Account\\AccountRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountType.cs\">\n      <Link>Account\\AccountType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\DeviceType.cs\">\n      <Link>Account\\DeviceType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\RateLimitStatus.cs\">\n      <Link>Account\\RateLimitStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Settings.cs\">\n      <Link>Account\\Settings.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\SleepTime.cs\">\n      <Link>Account\\SleepTime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Totals.cs\">\n      <Link>Account\\Totals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\TZInfo.cs\">\n      <Link>Account\\TZInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlockingType.cs\">\n      <Link>Blocks\\BlockingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\Blocks.cs\">\n      <Link>Blocks\\Blocks.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksExtensions.cs\">\n      <Link>Blocks\\BlocksExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksRequestProcessor.cs\">\n      <Link>Blocks\\BlocksRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BannerSize.cs\">\n      <Link>Common\\BannerSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BuildUrlHelper.cs\">\n      <Link>Common\\BuildUrlHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Culture.cs\">\n      <Link>Common\\Culture.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Cursors.cs\">\n      <Link>Common\\Cursors.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\Entities.cs\">\n      <Link>Common\\Entities\\Entities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\EntityBase.cs\">\n      <Link>Common\\Entities\\EntityBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\HashTagEntity.cs\">\n      <Link>Common\\Entities\\HashTagEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\MediaEntity.cs\">\n      <Link>Common\\Entities\\MediaEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\SymbolEntity.cs\">\n      <Link>Common\\Entities\\SymbolEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UrlEntity.cs\">\n      <Link>Common\\Entities\\UrlEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UserMentionEntity.cs\">\n      <Link>Common\\Entities\\UserMentionEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Evaluator.cs\">\n      <Link>Common\\Evaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeHelpers.cs\">\n      <Link>Common\\ExpressionTreeHelpers.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeModifier.cs\">\n      <Link>Common\\ExpressionTreeModifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeVisitor.cs\">\n      <Link>Common\\ExpressionTreeVisitor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\HttpMethod.cs\">\n      <Link>Common\\HttpMethod.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IDList.cs\">\n      <Link>Common\\IDList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\InvalidQueryException.cs\">\n      <Link>Common\\InvalidQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IRequestProcessor.cs\">\n      <Link>Common\\IRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\LinqExtensions.cs\">\n      <Link>Common\\LinqExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Media.cs\">\n      <Link>Common\\Media.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MediaType.cs\">\n      <Link>Common\\MediaType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MethodCallExpressionTypeFinder.cs\">\n      <Link>Common\\MethodCallExpressionTypeFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\Encoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\Encoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\SafeList.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\SafeList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ParameterFinder.cs\">\n      <Link>Common\\ParameterFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\QueryParameter.cs\">\n      <Link>Common\\QueryParameter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ReaderWriterLock.cs\">\n      <Link>Common\\ReaderWriterLock.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Request.cs\">\n      <Link>Common\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\RequestProcessorHelper.cs\">\n      <Link>Common\\RequestProcessorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TargetFramework.cs\">\n      <Link>Common\\TargetFramework.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterAsyncResponse.cs\">\n      <Link>Common\\TwitterAsyncResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterErrorStatus.cs\">\n      <Link>Common\\TwitterErrorStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterHashResponse.cs\">\n      <Link>Common\\TwitterHashResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterProgressEventArgs.cs\">\n      <Link>Common\\TwitterProgressEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterQueryException.cs\">\n      <Link>Common\\TwitterQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeConversionExtensions.cs\">\n      <Link>Common\\TypeConversionExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeSystem.cs\">\n      <Link>Common\\TypeSystem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\WhereClauseFinder.cs\">\n      <Link>Common\\WhereClauseFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessage.cs\">\n      <Link>DirectMessage\\DirectMessage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageExtensions.cs\">\n      <Link>DirectMessage\\DirectMessageExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageRequestProcessor.cs\">\n      <Link>DirectMessage\\DirectMessageRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageType.cs\">\n      <Link>DirectMessage\\DirectMessageType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\Favorites.cs\">\n      <Link>Favorites\\Favorites.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesAction.cs\">\n      <Link>Favorites\\FavoritesAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesExtensions.cs\">\n      <Link>Favorites\\FavoritesExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesRequestProcessor.cs\">\n      <Link>Favorites\\FavoritesRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesType.cs\">\n      <Link>Favorites\\FavoritesType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Friendship.cs\">\n      <Link>Friendship\\Friendship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipAction.cs\">\n      <Link>Friendship\\FriendshipAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipExtensions.cs\">\n      <Link>Friendship\\FriendshipExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipRequestProcessor.cs\">\n      <Link>Friendship\\FriendshipRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipType.cs\">\n      <Link>Friendship\\FriendshipType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Relationship.cs\">\n      <Link>Friendship\\Relationship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Coordinate.cs\">\n      <Link>Geo\\Coordinate.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geo.cs\">\n      <Link>Geo\\Geo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoAction.cs\">\n      <Link>Geo\\GeoAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geometry.cs\">\n      <Link>Geo\\Geometry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoRequestProcessor.cs\">\n      <Link>Geo\\GeoRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoType.cs\">\n      <Link>Geo\\GeoType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Place.cs\">\n      <Link>Geo\\Place.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Configuration.cs\">\n      <Link>Help\\Configuration.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Help.cs\">\n      <Link>Help\\Help.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpRequestProcessor.cs\">\n      <Link>Help\\HelpRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpType.cs\">\n      <Link>Help\\HelpType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Language.cs\">\n      <Link>Help\\Language.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\PhotoSize.cs\">\n      <Link>Help\\PhotoSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\RateLimits.cs\">\n      <Link>Help\\RateLimits.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\ITwitterExecute.cs\">\n      <Link>LinqToTwitter\\ITwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterContext.cs\">\n      <Link>LinqToTwitter\\TwitterContext.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExecute.cs\">\n      <Link>LinqToTwitter\\TwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExtensions.cs\">\n      <Link>LinqToTwitter\\TwitterExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryable.cs\">\n      <Link>LinqToTwitter\\TwitterQueryable.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryProvider.cs\">\n      <Link>LinqToTwitter\\TwitterQueryProvider.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\List.cs\">\n      <Link>List\\List.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListAction.cs\">\n      <Link>List\\ListAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListExtensions.cs\">\n      <Link>List\\ListExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListRequestProcessor.cs\">\n      <Link>List\\ListRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListType.cs\">\n      <Link>List\\ListType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AnonymousAuthorizer.cs\">\n      <Link>OAuth\\AnonymousAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ApplicationOnlyAuthorizer.cs\">\n      <Link>OAuth\\ApplicationOnlyAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AuthAccessType.cs\">\n      <Link>OAuth\\AuthAccessType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\InMemoryCredentials.cs\">\n      <Link>OAuth\\InMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthCredentials.cs\">\n      <Link>OAuth\\IOAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthHelper.cs\">\n      <Link>OAuth\\IOAuthHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthTwitter.cs\">\n      <Link>OAuth\\IOAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ITwitterAuthorizer.cs\">\n      <Link>OAuth\\ITwitterAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthAuthorizer.cs\">\n      <Link>OAuth\\OAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthBase.cs\">\n      <Link>OAuth\\OAuthBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthSignatureTypes.cs\">\n      <Link>OAuth\\OAuthSignatureTypes.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthTwitter.cs\">\n      <Link>OAuth\\OAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\PinAuthorizer.cs\">\n      <Link>OAuth\\PinAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SignInAuthorizer.cs\">\n      <Link>OAuth\\SignInAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserAuthorizer.cs\">\n      <Link>OAuth\\SingleUserAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserInMemoryCredentials.cs\">\n      <Link>OAuth\\SingleUserInMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\Utilities.cs\">\n      <Link>OAuth\\Utilities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\WebAuthorizer.cs\">\n      <Link>OAuth\\WebAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthAuthorizer.cs\">\n      <Link>OAuth\\XAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthCredentials.cs\">\n      <Link>OAuth\\XAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\Raw.cs\">\n      <Link>Raw\\Raw.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawExtensions.cs\">\n      <Link>Raw\\RawExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawRequestProcessor.cs\">\n      <Link>Raw\\RawRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResults.cs\">\n      <Link>RelatedResults\\RelatedResults.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsRequestProcessor.cs\">\n      <Link>RelatedResults\\RelatedResultsRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsType.cs\">\n      <Link>RelatedResults\\RelatedResultsType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\ReportSpam\\ReportSpamExtensions.cs\">\n      <Link>ReportSpam\\ReportSpamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearch.cs\">\n      <Link>SavedSearch\\SavedSearch.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchAction.cs\">\n      <Link>SavedSearch\\SavedSearchAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchExtensions.cs\">\n      <Link>SavedSearch\\SavedSearchExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchRequestProcessor.cs\">\n      <Link>SavedSearch\\SavedSearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchType.cs\">\n      <Link>SavedSearch\\SavedSearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Attitude.cs\">\n      <Link>Search\\Attitude.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\ResultType.cs\">\n      <Link>Search\\ResultType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Search.cs\">\n      <Link>Search\\Search.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchEntry.cs\">\n      <Link>Search\\SearchEntry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchMetaData.cs\">\n      <Link>Search\\SearchMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchRequestProcessor.cs\">\n      <Link>Search\\SearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchType.cs\">\n      <Link>Search\\SearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\DictionaryExtensions.cs\">\n      <Link>Serialization\\Extensions\\DictionaryExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\LitJsonExtensions.cs\">\n      <Link>Serialization\\Extensions\\LitJsonExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\StringExtensions.cs\">\n      <Link>Serialization\\Extensions\\StringExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IJsonWrapper.cs\">\n      <Link>Serialization\\LitJson\\IJsonWrapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IOrderedDictionary.cs\">\n      <Link>Serialization\\LitJson\\IOrderedDictionary.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonData.cs\">\n      <Link>Serialization\\LitJson\\JsonData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonException.cs\">\n      <Link>Serialization\\LitJson\\JsonException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonMapper.cs\">\n      <Link>Serialization\\LitJson\\JsonMapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonReader.cs\">\n      <Link>Serialization\\LitJson\\JsonReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonWriter.cs\">\n      <Link>Serialization\\LitJson\\JsonWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\Lexer.cs\">\n      <Link>Serialization\\LitJson\\Lexer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\ParserToken.cs\">\n      <Link>Serialization\\LitJson\\ParserToken.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraph.cs\">\n      <Link>SocialGraph\\SocialGraph.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphRequestProcessor.cs\">\n      <Link>SocialGraph\\SocialGraphRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphType.cs\">\n      <Link>SocialGraph\\SocialGraphType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Annotation.cs\">\n      <Link>Status\\Annotation.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Contributor.cs\">\n      <Link>Status\\Contributor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatus.cs\">\n      <Link>Status\\EmbeddedStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatusAlignment.cs\">\n      <Link>Status\\EmbeddedStatusAlignment.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\FilterLevel.cs\">\n      <Link>Status\\FilterLevel.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Retweet.cs\">\n      <Link>Status\\Retweet.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Status.cs\">\n      <Link>Status\\Status.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusAction.cs\">\n      <Link>Status\\StatusAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusExtensions.cs\">\n      <Link>Status\\StatusExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusMetaData.cs\">\n      <Link>Status\\StatusMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusRequestProcessor.cs\">\n      <Link>Status\\StatusRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusType.cs\">\n      <Link>Status\\StatusType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStream.cs\">\n      <Link>Streaming\\ControlStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamExtensions.cs\">\n      <Link>Streaming\\ControlStreamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamFollow.cs\">\n      <Link>Streaming\\ControlStreamFollow.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamInfo.cs\">\n      <Link>Streaming\\ControlStreamInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamRequestProcessor.cs\">\n      <Link>Streaming\\ControlStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamType.cs\">\n      <Link>Streaming\\ControlStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamUser.cs\">\n      <Link>Streaming\\ControlStreamUser.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\IStreamContent.cs\">\n      <Link>Streaming\\IStreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamContent.cs\">\n      <Link>Streaming\\StreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\Streaming.cs\">\n      <Link>Streaming\\Streaming.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingRequestProcessor.cs\">\n      <Link>Streaming\\StreamingRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingType.cs\">\n      <Link>Streaming\\StreamingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStream.cs\">\n      <Link>Streaming\\UserStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamRequestProcessor.cs\">\n      <Link>Streaming\\UserStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamType.cs\">\n      <Link>Streaming\\UserStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Location.cs\">\n      <Link>Trend\\Location.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Trend.cs\">\n      <Link>Trend\\Trend.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendRequestProcessor.cs\">\n      <Link>Trend\\TrendRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendType.cs\">\n      <Link>Trend\\TrendType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\Category.cs\">\n      <Link>User\\Category.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\ProfileImageSize.cs\">\n      <Link>User\\ProfileImageSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\User.cs\">\n      <Link>User\\User.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserAction.cs\">\n      <Link>User\\UserAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserIdentifier.cs\">\n      <Link>User\\UserIdentifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserRequestProcessor.cs\">\n      <Link>User\\UserRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserType.cs\">\n      <Link>User\\UserType.cs</Link>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup />\n  <ItemGroup>\n    <None Include=\"..\\LinqToTwitterAg\\LinqToTwitter.snk\">\n      <Link>LinqToTwitter.snk</Link>\n    </None>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterCP/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LINQ to Twitter - Client Profile\")]\n[assembly: AssemblyDescription(\"Open Source LINQ Provider for the Twitter Micro-Blogging Service (Client Profile)\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Joe Mayo\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter - Client Profile\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2008 - 2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"736b8a4e-f9b5-4bdf-a7ff-ad92c56846db\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"2.1.13.0\")]\n[assembly: AssemblyFileVersion(\"2.1.13.0\")]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitterXUnitTests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/Common/Culture.cs",
    "content": "﻿using System;\nusing System.Globalization;\n\nnamespace LinqToTwitter\n{\n    public class Culture\n    {\n        static CultureInfo usCulture;\n\n        public static CultureInfo US\n        {\n            get\n            {\n                if (usCulture == null)\n                {\n                    usCulture = new CultureInfo(\"en-US\");\n                }\n\n                return usCulture;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/LinqToTwitterRT.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{4C99EC2E-067B-48E9-947E-CF80D9E17B96}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitterRT</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <CodeAnalysisRuleSet>ExpressRules.ruleset</CodeAnalysisRuleSet>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <None Include=\"..\\LinqToTwitterAg\\LinqToTwitter.snk\">\n      <Link>LinqToTwitter.snk</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\AUTHORS\">\n      <Link>Serialization\\LitJson\\AUTHORS</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\COPYING\">\n      <Link>Serialization\\LitJson\\COPYING</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\HACKING\">\n      <Link>Serialization\\LitJson\\HACKING</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\README\">\n      <Link>Serialization\\LitJson\\README</Link>\n    </None>\n    <None Include=\"obj\\Debug\\DesignTimeResolveAssemblyReferencesInput.cache\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Account.cs\">\n      <Link>Account\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountAction.cs\">\n      <Link>Account\\AccountAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountExtensions.cs\">\n      <Link>Account\\AccountExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountRequestProcessor.cs\">\n      <Link>Account\\AccountRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountType.cs\">\n      <Link>Account\\AccountType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\DeviceType.cs\">\n      <Link>Account\\DeviceType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\RateLimitStatus.cs\">\n      <Link>Account\\RateLimitStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Settings.cs\">\n      <Link>Account\\Settings.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\SleepTime.cs\">\n      <Link>Account\\SleepTime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Totals.cs\">\n      <Link>Account\\Totals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\TZInfo.cs\">\n      <Link>Account\\TZInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlockingType.cs\">\n      <Link>Blocks\\BlockingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\Blocks.cs\">\n      <Link>Blocks\\Blocks.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksExtensions.cs\">\n      <Link>Blocks\\BlocksExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksRequestProcessor.cs\">\n      <Link>Blocks\\BlocksRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BannerSize.cs\">\n      <Link>Common\\BannerSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BuildUrlHelper.cs\">\n      <Link>Common\\BuildUrlHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Cursors.cs\">\n      <Link>Common\\Cursors.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\Entities.cs\">\n      <Link>Common\\Entities\\Entities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\EntityBase.cs\">\n      <Link>Common\\Entities\\EntityBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\HashTagEntity.cs\">\n      <Link>Common\\Entities\\HashTagEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\MediaEntity.cs\">\n      <Link>Common\\Entities\\MediaEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\SymbolEntity.cs\">\n      <Link>Common\\Entities\\SymbolEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UrlEntity.cs\">\n      <Link>Common\\Entities\\UrlEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UserMentionEntity.cs\">\n      <Link>Common\\Entities\\UserMentionEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Evaluator.cs\">\n      <Link>Common\\Evaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeHelpers.cs\">\n      <Link>Common\\ExpressionTreeHelpers.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeModifier.cs\">\n      <Link>Common\\ExpressionTreeModifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeVisitor.cs\">\n      <Link>Common\\ExpressionTreeVisitor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\HttpMethod.cs\">\n      <Link>Common\\HttpMethod.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IDList.cs\">\n      <Link>Common\\IDList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\InvalidQueryException.cs\">\n      <Link>Common\\InvalidQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IRequestProcessor.cs\">\n      <Link>Common\\IRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\LinqExtensions.cs\">\n      <Link>Common\\LinqExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Media.cs\">\n      <Link>Common\\Media.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MediaType.cs\">\n      <Link>Common\\MediaType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MethodCallExpressionTypeFinder.cs\">\n      <Link>Common\\MethodCallExpressionTypeFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\Encoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\Encoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\SafeList.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\SafeList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ParameterFinder.cs\">\n      <Link>Common\\ParameterFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\QueryParameter.cs\">\n      <Link>Common\\QueryParameter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ReaderWriterLock.cs\">\n      <Link>Common\\ReaderWriterLock.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Request.cs\">\n      <Link>Common\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\RequestProcessorHelper.cs\">\n      <Link>Common\\RequestProcessorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\State.cs\">\n      <Link>Common\\State.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TargetFramework.cs\">\n      <Link>Common\\TargetFramework.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterAsyncResponse.cs\">\n      <Link>Common\\TwitterAsyncResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterErrorStatus.cs\">\n      <Link>Common\\TwitterErrorStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterHashResponse.cs\">\n      <Link>Common\\TwitterHashResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterProgressEventArgs.cs\">\n      <Link>Common\\TwitterProgressEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterQueryException.cs\">\n      <Link>Common\\TwitterQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeConversionExtensions.cs\">\n      <Link>Common\\TypeConversionExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeSystem.cs\">\n      <Link>Common\\TypeSystem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\WhereClauseFinder.cs\">\n      <Link>Common\\WhereClauseFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessage.cs\">\n      <Link>DirectMessage\\DirectMessage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageExtensions.cs\">\n      <Link>DirectMessage\\DirectMessageExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageRequestProcessor.cs\">\n      <Link>DirectMessage\\DirectMessageRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageType.cs\">\n      <Link>DirectMessage\\DirectMessageType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\Favorites.cs\">\n      <Link>Favorites\\Favorites.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesAction.cs\">\n      <Link>Favorites\\FavoritesAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesExtensions.cs\">\n      <Link>Favorites\\FavoritesExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesRequestProcessor.cs\">\n      <Link>Favorites\\FavoritesRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesType.cs\">\n      <Link>Favorites\\FavoritesType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Friendship.cs\">\n      <Link>Friendship\\Friendship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipAction.cs\">\n      <Link>Friendship\\FriendshipAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipExtensions.cs\">\n      <Link>Friendship\\FriendshipExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipRequestProcessor.cs\">\n      <Link>Friendship\\FriendshipRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipType.cs\">\n      <Link>Friendship\\FriendshipType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Relationship.cs\">\n      <Link>Friendship\\Relationship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Coordinate.cs\">\n      <Link>Geo\\Coordinate.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geo.cs\">\n      <Link>Geo\\Geo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoAction.cs\">\n      <Link>Geo\\GeoAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geometry.cs\">\n      <Link>Geo\\Geometry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoRequestProcessor.cs\">\n      <Link>Geo\\GeoRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoType.cs\">\n      <Link>Geo\\GeoType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Place.cs\">\n      <Link>Geo\\Place.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Configuration.cs\">\n      <Link>Help\\Configuration.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Help.cs\">\n      <Link>Help\\Help.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpRequestProcessor.cs\">\n      <Link>Help\\HelpRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpType.cs\">\n      <Link>Help\\HelpType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Language.cs\">\n      <Link>Help\\Language.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\PhotoSize.cs\">\n      <Link>Help\\PhotoSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\RateLimits.cs\">\n      <Link>Help\\RateLimits.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\ITwitterExecute.cs\">\n      <Link>LinqToTwitter\\ITwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterContext.cs\">\n      <Link>LinqToTwitter\\TwitterContext.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExecute.cs\">\n      <Link>LinqToTwitter\\TwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExtensions.cs\">\n      <Link>LinqToTwitter\\TwitterExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryable.cs\">\n      <Link>LinqToTwitter\\TwitterQueryable.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryProvider.cs\">\n      <Link>LinqToTwitter\\TwitterQueryProvider.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\List.cs\">\n      <Link>List\\List.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListAction.cs\">\n      <Link>List\\ListAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListExtensions.cs\">\n      <Link>List\\ListExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListRequestProcessor.cs\">\n      <Link>List\\ListRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListType.cs\">\n      <Link>List\\ListType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AnonymousAuthorizer.cs\">\n      <Link>OAuth\\AnonymousAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ApplicationOnlyAuthorizer.cs\">\n      <Link>OAuth\\ApplicationOnlyAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AuthAccessType.cs\">\n      <Link>OAuth\\AuthAccessType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\InMemoryCredentials.cs\">\n      <Link>OAuth\\InMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthCredentials.cs\">\n      <Link>OAuth\\IOAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthHelper.cs\">\n      <Link>OAuth\\IOAuthHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthTwitter.cs\">\n      <Link>OAuth\\IOAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IsolatedStorageCredentials.cs\">\n      <Link>OAuth\\IsolatedStorageCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ITwitterAuthorizer.cs\">\n      <Link>OAuth\\ITwitterAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthAuthorizer.cs\">\n      <Link>OAuth\\OAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthBase.cs\">\n      <Link>OAuth\\OAuthBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthSignatureTypes.cs\">\n      <Link>OAuth\\OAuthSignatureTypes.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthTwitter.cs\">\n      <Link>OAuth\\OAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\PinAuthorizer.cs\">\n      <Link>OAuth\\PinAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SignInAuthorizer.cs\">\n      <Link>OAuth\\SignInAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SilverlightAuthorizer.cs\">\n      <Link>OAuth\\SilverlightAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserAuthorizer.cs\">\n      <Link>OAuth\\SingleUserAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserInMemoryCredentials.cs\">\n      <Link>OAuth\\SingleUserInMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\Utilities.cs\">\n      <Link>OAuth\\Utilities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\WebAuthorizer.cs\">\n      <Link>OAuth\\WebAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthAuthorizer.cs\">\n      <Link>OAuth\\XAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthCredentials.cs\">\n      <Link>OAuth\\XAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\Raw.cs\">\n      <Link>Raw\\Raw.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawExtensions.cs\">\n      <Link>Raw\\RawExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawRequestProcessor.cs\">\n      <Link>Raw\\RawRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResults.cs\">\n      <Link>RelatedResults\\RelatedResults.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsRequestProcessor.cs\">\n      <Link>RelatedResults\\RelatedResultsRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsType.cs\">\n      <Link>RelatedResults\\RelatedResultsType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\ReportSpam\\ReportSpamExtensions.cs\">\n      <Link>ReportSpam\\ReportSpamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearch.cs\">\n      <Link>SavedSearch\\SavedSearch.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchAction.cs\">\n      <Link>SavedSearch\\SavedSearchAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchExtensions.cs\">\n      <Link>SavedSearch\\SavedSearchExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchRequestProcessor.cs\">\n      <Link>SavedSearch\\SavedSearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchType.cs\">\n      <Link>SavedSearch\\SavedSearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Attitude.cs\">\n      <Link>Search\\Attitude.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\ResultType.cs\">\n      <Link>Search\\ResultType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Search.cs\">\n      <Link>Search\\Search.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchEntry.cs\">\n      <Link>Search\\SearchEntry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchMetaData.cs\">\n      <Link>Search\\SearchMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchRequestProcessor.cs\">\n      <Link>Search\\SearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchType.cs\">\n      <Link>Search\\SearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\DictionaryExtensions.cs\">\n      <Link>Serialization\\Extensions\\DictionaryExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\LitJsonExtensions.cs\">\n      <Link>Serialization\\Extensions\\LitJsonExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\StringExtensions.cs\">\n      <Link>Serialization\\Extensions\\StringExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IJsonWrapper.cs\">\n      <Link>Serialization\\LitJson\\IJsonWrapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IOrderedDictionary.cs\">\n      <Link>Serialization\\LitJson\\IOrderedDictionary.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonData.cs\">\n      <Link>Serialization\\LitJson\\JsonData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonException.cs\">\n      <Link>Serialization\\LitJson\\JsonException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonMapper.cs\">\n      <Link>Serialization\\LitJson\\JsonMapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonReader.cs\">\n      <Link>Serialization\\LitJson\\JsonReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonWriter.cs\">\n      <Link>Serialization\\LitJson\\JsonWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\Lexer.cs\">\n      <Link>Serialization\\LitJson\\Lexer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\ParserToken.cs\">\n      <Link>Serialization\\LitJson\\ParserToken.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraph.cs\">\n      <Link>SocialGraph\\SocialGraph.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphRequestProcessor.cs\">\n      <Link>SocialGraph\\SocialGraphRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphType.cs\">\n      <Link>SocialGraph\\SocialGraphType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Annotation.cs\">\n      <Link>Status\\Annotation.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Contributor.cs\">\n      <Link>Status\\Contributor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatus.cs\">\n      <Link>Status\\EmbeddedStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatusAlignment.cs\">\n      <Link>Status\\EmbeddedStatusAlignment.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\FilterLevel.cs\">\n      <Link>Status\\FilterLevel.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Retweet.cs\">\n      <Link>Status\\Retweet.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Status.cs\">\n      <Link>Status\\Status.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusAction.cs\">\n      <Link>Status\\StatusAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusExtensions.cs\">\n      <Link>Status\\StatusExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusMetaData.cs\">\n      <Link>Status\\StatusMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusRequestProcessor.cs\">\n      <Link>Status\\StatusRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusType.cs\">\n      <Link>Status\\StatusType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStream.cs\">\n      <Link>Streaming\\ControlStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamExtensions.cs\">\n      <Link>Streaming\\ControlStreamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamFollow.cs\">\n      <Link>Streaming\\ControlStreamFollow.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamInfo.cs\">\n      <Link>Streaming\\ControlStreamInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamRequestProcessor.cs\">\n      <Link>Streaming\\ControlStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamType.cs\">\n      <Link>Streaming\\ControlStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamUser.cs\">\n      <Link>Streaming\\ControlStreamUser.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\IStreamContent.cs\">\n      <Link>Streaming\\IStreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamContent.cs\">\n      <Link>Streaming\\StreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\Streaming.cs\">\n      <Link>Streaming\\Streaming.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingRequestProcessor.cs\">\n      <Link>Streaming\\StreamingRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingType.cs\">\n      <Link>Streaming\\StreamingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStream.cs\">\n      <Link>Streaming\\UserStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamRequestProcessor.cs\">\n      <Link>Streaming\\UserStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamType.cs\">\n      <Link>Streaming\\UserStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Location.cs\">\n      <Link>Trend\\Location.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Trend.cs\">\n      <Link>Trend\\Trend.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendRequestProcessor.cs\">\n      <Link>Trend\\TrendRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendType.cs\">\n      <Link>Trend\\TrendType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\Category.cs\">\n      <Link>User\\Category.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\ProfileImageSize.cs\">\n      <Link>User\\ProfileImageSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\User.cs\">\n      <Link>User\\User.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserAction.cs\">\n      <Link>User\\UserAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserIdentifier.cs\">\n      <Link>User\\UserIdentifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserRequestProcessor.cs\">\n      <Link>User\\UserRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserType.cs\">\n      <Link>User\\UserType.cs</Link>\n    </Compile>\n    <Compile Include=\"Common\\Culture.cs\" />\n    <Compile Include=\"OAuth\\IAsyncOAuthCredentials.cs\" />\n    <Compile Include=\"OAuth\\IWinRtSettingsCredentials.cs\" />\n    <Compile Include=\"OAuth\\LocalDataCredentials.cs\" />\n    <Compile Include=\"OAuth\\LocalSettingsCredentials.cs\" />\n    <Compile Include=\"OAuth\\RoamingDataCredentials.cs\" />\n    <Compile Include=\"OAuth\\RoamingSettingsCredentials.cs\" />\n    <Compile Include=\"OAuth\\TemporaryDataCredentials.cs\" />\n    <Compile Include=\"OAuth\\TwitterAuthProvider.cs\" />\n    <Compile Include=\"OAuth\\TwitterAuthProviderUser.cs\" />\n    <Compile Include=\"OAuth\\WinRtApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\WinRtAuthorizer.cs\" />\n    <Compile Include=\"OAuth\\WinRtCredentials.cs\" />\n    <Compile Include=\"OAuth\\WinRtSettingsCredentials.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\IDictionary.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"bin\\ARM\\Debug\\\" />\n    <Folder Include=\"bin\\ARM\\Release\\\" />\n    <Folder Include=\"bin\\Debug\\\" />\n    <Folder Include=\"bin\\Release\\\" />\n    <Folder Include=\"bin\\x64\\Debug\\\" />\n    <Folder Include=\"bin\\x64\\Release\\\" />\n    <Folder Include=\"bin\\x86\\Debug\\\" />\n    <Folder Include=\"bin\\x86\\Release\\\" />\n    <Folder Include=\"obj\\Debug\\TempPE\\\" />\n    <Folder Include=\"Serialization\\Account\\\" />\n    <Folder Include=\"Serialization\\Entities\\\" />\n    <Folder Include=\"Serialization\\Geo\\\" />\n    <Folder Include=\"Serialization\\Place\\\" />\n    <Folder Include=\"Serialization\\Search\\\" />\n    <Folder Include=\"Serialization\\Status\\\" />\n    <Folder Include=\"Serialization\\Trend\\\" />\n    <Folder Include=\"Serialization\\User\\\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' \">\n    <VisualStudioVersion>11.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/IAsyncOAuthCredentials.cs",
    "content": "using System;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public interface IAsyncOAuthCredentials : IOAuthCredentials\n    {\n        Task ClearAsync();\n\n        Task LoadCredentialsFromStorageFileAsync();\n\n        Task SaveCredentialsToStorageFileAsync();\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/IWinRtSettingsCredentials.cs",
    "content": "namespace LinqToTwitter\n{\n    public interface IWinRtSettingsCredentials : IOAuthCredentials\n    {\n        void Clear();\n\n        void LoadCredentialsFromSettings();\n\n        void SaveCredentialsToSettings();\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/LocalDataCredentials.cs",
    "content": "﻿using System;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    public class LocalDataCredentials : WinRtCredentials, IOAuthCredentials\n    {\n        public LocalDataCredentials() : \n            base (ApplicationData.Current.LocalFolder, null) { }\n\n        public LocalDataCredentials(string fileName) :\n            base(ApplicationData.Current.LocalFolder, fileName) { }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/LocalSettingsCredentials.cs",
    "content": "//Contributed by: Ayo Adesugba\n\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    public class LocalSettingsCredentials : WinRtSettingsCredentials, IOAuthCredentials\n    {\n        public LocalSettingsCredentials() : \n            base (ApplicationData.Current.LocalSettings) { }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/RoamingDataCredentials.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    public class RoamingDataCredentials : WinRtCredentials, IOAuthCredentials\n    {\n        public RoamingDataCredentials() : \n            base (ApplicationData.Current.RoamingFolder, null) { }\n\n        public RoamingDataCredentials(string fileName) :\n            base(ApplicationData.Current.RoamingFolder, fileName) { }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/RoamingSettingsCredentials.cs",
    "content": "//Contributed by: Ayo Adesugba\n\nusing System;\nusing System.Linq;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    public class RoamingSettingsCredentials : WinRtSettingsCredentials, IOAuthCredentials\n    {\n        public RoamingSettingsCredentials() : \n            base (ApplicationData.Current.RoamingSettings) { }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/TemporaryDataCredentials.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    public class TemporaryDataCredentials : WinRtCredentials, IOAuthCredentials\n    {\n        public TemporaryDataCredentials() : \n            base (ApplicationData.Current.TemporaryFolder, null) { }\n\n        public TemporaryDataCredentials(string fileName) :\n            base(ApplicationData.Current.TemporaryFolder, fileName) { }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/TwitterAuthProvider.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Security.Authentication.Web;\n\nnamespace LinqToTwitter.OAuth\n{\n    /// <summary>\n    /// Supports WinRtAuthenticator by using WebAuthorizationBroker to manage OAuth workflow\n    /// </summary>\n    /// <remarks>\n    /// Will need to be refactored, but was added as a plug-in \n    /// replacement for previously implemented 3rd party library.\n    /// </remarks>\n    class TwitterAuthProvider : OAuthAuthorizer\n    {\n        Uri callback;\n\n        public TwitterAuthProvider(string consumerKey, string consumerSecret, Uri callback)\n        {\n            OAuthTwitter.OAuthConsumerKey = consumerKey;\n            OAuthTwitter.OAuthConsumerSecret = consumerSecret;\n            this.callback = callback;\n        }\n\n        /// <summary>\n        /// Performs authentication asynchronously, managing entire OAuth workflow\n        /// </summary>\n        /// <returns>TwitterAuthProviderUser with ScreenName and ID</returns>\n        internal async Task<TwitterAuthProviderUser> AuthenticateAsync()\n        {\n            string callbackStr = OAuthTwitter.FilterRequestParameters(callback);\n            string link = OAuthTwitter.AuthorizationLinkGet(OAuthRequestTokenUrl, OAuthAuthorizeUrl, callbackStr, false, AuthAccessType);\n\n            WebAuthenticationResult webAuthenticationResult = \n                await WebAuthenticationBroker.AuthenticateAsync(\n                    WebAuthenticationOptions.None,\n                    new Uri(link),\n                    callback);\n\n            if (webAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)\n            {\n                var authCallbackUri = new Uri(webAuthenticationResult.ResponseData);\n\n                string verifier = OAuthTwitter.GetUrlParamValue(authCallbackUri.Query, \"oauth_verifier\");\n\n                string oAuthToken = OAuthTwitter.GetUrlParamValue(authCallbackUri.Query, \"oauth_token\");\n\n                string screenName;\n                string userID;\n                OAuthTwitter.AccessTokenGet(oAuthToken, verifier, OAuthAccessTokenUrl, string.Empty, out screenName, out userID);\n\n                ScreenName = screenName;\n                UserId = userID;\n\n                OAuthToken = OAuthTwitter.OAuthToken;\n                OAuthTokenSecret = OAuthTwitter.OAuthTokenSecret;\n\n                return new TwitterAuthProviderUser\n                {\n                    UserName = screenName,\n                    Id = userID\n                };\n            }\n\n            return new TwitterAuthProviderUser\n            {\n                UserName = \"\",\n                Id = \"\"\n            };\n        }\n\n        /// <summary>\n        /// Twitter's OAuth token for authenticating user\n        /// </summary>\n        public string OAuthToken { get; set; }\n\n        /// <summary>\n        /// Twitter's Access token for authenticating user\n        /// </summary>\n        public string OAuthTokenSecret { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/TwitterAuthProviderUser.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    class TwitterAuthProviderUser\n    {\n        public string UserName { get; set; }\n\n        public string Id { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/WinRtApplicationOnlyAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class WinRtApplicationOnlyAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        public string BasicToken { get; set; }\n        public string BearerToken { get; set; }\n        public string OAuth2Token { get; set; }\n        public string OAuth2InvalidateToken { get; set; }\n\n        public WinRtApplicationOnlyAuthorizer()\n        {\n            OAuth2Token = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateToken = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public void Authorize()\n        {\n            throw new NotImplementedException(\"Please call AuthorizeAsync instead.\");\n        }\n\n        public async Task AuthorizeAsync()\n        {\n            EncodeCredentials();\n            await GetBearerTokenAsync();\n        }\n\n        public override bool IsAuthorized\n        {\n            get\n            {\n                return !string.IsNullOrEmpty(BearerToken);\n            }\n        }\n\n        public async Task InvalidateAsync()\n        {\n            EncodeCredentials();\n\n            var client = new HttpClient();\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2InvalidateToken);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", \"LINQ to Twitter v2.1\");\n            req.Headers.Add(\"Content-Type\", \"application/x-www-form-urlencoded;charset=UTF-8\");\n            req.Headers.ExpectContinue = false;\n\n            var msg = await client.SendAsync(req);\n\n            string response = await msg.Content.ReadAsStringAsync();\n\n            var responseJson = JsonMapper.ToObject(response);\n            BearerToken = responseJson.GetValue<string>(\"access_token\");\n        }\n  \n        async Task GetBearerTokenAsync()\n        {\n            var client = new HttpClient();\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2Token);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", \"LINQ to Twitter v2.1\");\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"grant_type=client_credentials\", Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var msg = await client.SendAsync(req);\n\n            string response = await msg.Content.ReadAsStringAsync();\n\n            var responseJson = JsonMapper.ToObject(response);\n            BearerToken = responseJson.GetValue<string>(\"access_token\");\n        }\n\n        internal void EncodeCredentials()\n        {\n            string encodedConsumerKey = BuildUrlHelper.UrlEncode(Credentials.ConsumerKey);\n            string encodedConsumerSecret = BuildUrlHelper.UrlEncode(Credentials.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n\n        /// <summary>\n        /// OAuth Get\n        /// </summary>\n        /// <param name=\"request\">Request details</param>\n        /// <returns>Request to be sent to Twitter</returns>\n        public new WebRequest Get(Request request)\n        {\n            var req = WebRequest.Create(request.FullUrl) as HttpWebRequest;\n            if (req != null)\n            {\n                req.Headers[HttpRequestHeader.Authorization] = \"Bearer \" + BearerToken;\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>request to send</returns>\n        public override HttpWebRequest PostRequest(Request request, IDictionary<string, string> postData)\n        {\n            var req = WebRequest.Create(request.FullUrl) as HttpWebRequest;\n\n            if (req != null)\n            {\n                req.Method = HttpMethod.POST.ToString();\n                req.Headers[HttpRequestHeader.Authorization] = \"Bearer \" + BearerToken;\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>request to send</returns>\n        public override HttpWebResponse Post(Request request, IDictionary<string, string> postData)\n        {\n            var req = PostRequest(request, postData);\n            return Utilities.AsyncGetResponse(req);\n        }\n\n        /// <summary>\n        /// Async OAuth Post\n        /// </summary>\n        /// <param name=\"request\">The request with the endpoint URL and the parameters to \n        /// include in the POST entity.  Must not be null.</param>\n        /// <param name=\"postData\">Hash of parameters</param>\n        /// <returns>HttpWebRequest for post</returns>\n        public override HttpWebRequest PostAsync(Request request, IDictionary<string, string> postData)\n        {\n            var req = WebRequest.Create(\n                    ProxyUrl + request.Endpoint +\n                    (string.IsNullOrEmpty(ProxyUrl) ? \"?\" : \"&\") +\n                    request.QueryString)\n                as HttpWebRequest;\n\n            if (req != null)\n            {\n                req.Method = HttpMethod.POST.ToString();\n                req.Headers[HttpRequestHeader.Authorization] = \"Bearer \" + BearerToken;\n\n                InitializeRequest(req);\n            }\n\n            return req;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/WinRtAuthorizer.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter.OAuth;\n\nnamespace LinqToTwitter\n{\n    public class WinRtAuthorizer : OAuthAuthorizer, ITwitterAuthorizer\n    {\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public Uri Callback { get; set; }\n\n        /// <summary>\n        /// Don't use - call AuthorizeAsync instead.\n        /// </summary>\n        public void Authorize()\n        {\n            throw new InvalidOperationException(\"Please call AuthorizeAsync instead.\");\n        }\n\n        /// <summary>\n        /// Perform Authorization\n        /// </summary>\n        public async Task<WinRtAuthorizer> AuthorizeAsync()\n        {\n            await LoadCredentials();\n\n            var twitAuthentication = new TwitterAuthProvider(Credentials.ConsumerKey, Credentials.ConsumerSecret, Callback);\n\n            var user = await twitAuthentication.AuthenticateAsync();\n            if (twitAuthentication.OAuthToken != null && twitAuthentication.OAuthTokenSecret != null)\n            {\n                OAuthTwitter.OAuthToken = twitAuthentication.OAuthToken;\n                OAuthTwitter.OAuthTokenSecret = twitAuthentication.OAuthTokenSecret;\n                Credentials.ScreenName = user.UserName;\n                Credentials.UserId = user.Id;\n                Credentials.OAuthToken = twitAuthentication.OAuthToken;\n                Credentials.AccessToken = twitAuthentication.OAuthTokenSecret;\n\n                await SaveCredentials();\n            }\n\n            return this;\n        }\n\n        async Task LoadCredentials()\n        {\n            var creds = Credentials as IAsyncOAuthCredentials;\n\n            if (creds == null)\n                (Credentials as IWinRtSettingsCredentials).LoadCredentialsFromSettings();\n            else\n                await creds.LoadCredentialsFromStorageFileAsync();\n        }\n\n        async Task SaveCredentials()\n        {\n            var creds = Credentials as IAsyncOAuthCredentials;\n\n            if (creds == null)\n                (Credentials as IWinRtSettingsCredentials).SaveCredentialsToSettings();\n            else\n                await creds.SaveCredentialsToStorageFileAsync();\n        }\n\n        async Task ClearCredentials()\n        {\n            var creds = Credentials as IAsyncOAuthCredentials;\n\n            if (creds == null)\n                (Credentials as IWinRtSettingsCredentials).Clear();\n            else\n                await creds.ClearAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/WinRtCredentials.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    public class WinRtCredentials : InMemoryCredentials, IAsyncOAuthCredentials\n    {\n        const int ConsumerKeyIdx = 0;\n        const int ConsumerSecretIdx = 1;\n        const int OAuthTokenIdx = 2;\n        const int AccessTokenIdx = 3;\n        const int ScreenNameIdx = 4;\n        const int UserIdIdx = 5;\n\n        readonly StorageFolder folder;\n\n        public string FileName { get; set; }\n\n        public WinRtCredentials(StorageFolder folder, string fileName)\n        {\n            this.folder = folder;\n            FileName = fileName ?? \"Linq2TwitterCredentials.txt\";\n        }\n\n        public async Task ClearAsync()\n        {\n            var files = await ApplicationData.Current.LocalFolder.GetFilesAsync();\n            if (files.Any(storFile => storFile.Name == FileName))\n            {\n                var file = await ApplicationData.Current.LocalFolder.GetFileAsync(FileName);\n                await file.DeleteAsync();\n            }\n        }\n\n        public async Task LoadCredentialsFromStorageFileAsync()\n        {\n            var credentialsFile =\n                await folder.CreateFileAsync(\n                    FileName,\n                    CreationCollisionOption.OpenIfExists);\n\n            var credentialsString = await\n                 FileIO.ReadTextAsync(credentialsFile);\n            \n            if (!string.IsNullOrWhiteSpace(credentialsString))\n            {\n                string[] tempCredentialsArr = credentialsString.Split(',');\n\n                ConsumerKey = tempCredentialsArr[ConsumerKeyIdx];\n                ConsumerSecret = tempCredentialsArr[ConsumerSecretIdx];\n                OAuthToken = tempCredentialsArr[OAuthTokenIdx];\n                AccessToken = tempCredentialsArr[AccessTokenIdx];\n                ScreenName = tempCredentialsArr[ScreenNameIdx];\n                UserId = tempCredentialsArr[UserIdIdx];\n            }\n        }\n\n        public async Task SaveCredentialsToStorageFileAsync()\n        {\n            var credentialsString =\n                string.Join(\",\",\n                    new List<string>\n                    {\n                        ConsumerKey, ConsumerSecret,\n                        OAuthToken, AccessToken,\n                        ScreenName, UserId\n                    });\n\n            if (!string.IsNullOrWhiteSpace(credentialsString))\n            {\n                StorageFile sampleFile =\n                    await folder.CreateFileAsync(\n                        FileName,\n                        CreationCollisionOption.ReplaceExisting);\n\n                await FileIO.WriteTextAsync(sampleFile, credentialsString); \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/OAuth/WinRtSettingsCredentials.cs",
    "content": "//Contributed by: Ayo Adesugba\n\nusing System;\nusing System.Linq;\nusing Windows.Storage;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Synchronous persistence for WinRtAuthorizer\n    /// </summary>\n    public class WinRtSettingsCredentials : IOAuthCredentials, IWinRtSettingsCredentials\n    {\n        const int ConsumerKeyIdx = 0;\n        const int ConsumerSecretIdx = 1;\n        const int OAuthTokenIdx = 2;\n        const int AccessTokenIdx = 3;\n        const int ScreenNameIdx = 4;\n        const int UserIdIdx = 5;\n\n        readonly string[] credentials = new string[6];\n        readonly ApplicationDataContainer settings;\n\n        public WinRtSettingsCredentials(ApplicationDataContainer settings)\n        {\n            this.settings = settings;\n            LoadCredentialsFromSettings();\n        }\n\n        public void Load(string credentialsString)\n        {\n            string[] tempCredentials = credentialsString.Split(',');\n\n            for (int i = 0; i < tempCredentials.Length; i++)\n            {\n                credentials[i] = tempCredentials[i];\n            }\n\n            SaveCredentialsToSettings();\n        }\n\n        public override string ToString()\n        {\n            if (credentials == null)\n            {\n                LoadCredentialsFromSettings();\n            }\n\n            return string.Join(\",\", credentials);\n        }\n\n        public void Save()\n        {\n            SaveCredentialsToSettings();\n        }\n\n        public void Clear()\n        {\n            settings.DeleteContainer(\"TWStore\");\n        }\n\n        public void LoadCredentialsFromSettings()\n        {\n            ApplicationDataContainer fbSettings = settings.CreateContainer(\"TWStore\", ApplicationDataCreateDisposition.Always);\n\n            if (settings.Containers.ContainsKey(\"TWStore\"))\n            {\n                var credentialString = fbSettings.Values[\"credentials\"];\n                if (credentialString == null) return;\n                if (!string.IsNullOrWhiteSpace(credentialString.ToString()))\n                {\n                    string[] tempCredentialArr = credentialString.ToString().Split(',');\n\n                    for (int i = 0; i < tempCredentialArr.Length; i++)\n                    {\n                        credentials[i] = tempCredentialArr[i];\n                    }\n                }\n            }\n        }\n\n        public void SaveCredentialsToSettings()\n        {\n            ApplicationDataContainer fbSettings = settings.CreateContainer(\"TWStore\", ApplicationDataCreateDisposition.Always);\n            var credentialsString = string.Join(\",\", credentials);\n\n            if (!string.IsNullOrWhiteSpace(credentialsString))\n            {\n                if (settings.Containers.ContainsKey(\"TWStore\"))\n                    fbSettings.Values[\"credentials\"] = credentialsString;\n            }\n        }\n\n        public string AccessToken\n        {\n            get\n            {\n                if (credentials[AccessTokenIdx] == null)\n                {\n                    LoadCredentialsFromSettings();\n                }\n\n                return credentials[AccessTokenIdx];\n            }\n            set\n            {\n                credentials[AccessTokenIdx] = value;\n            }\n        }\n\n        public string ConsumerSecret\n        {\n            get\n            {\n                if (credentials[ConsumerSecretIdx] == null)\n                {\n                    LoadCredentialsFromSettings();\n                }\n\n                return credentials[ConsumerSecretIdx];\n            }\n            set\n            {\n                credentials[ConsumerSecretIdx] = value;\n            }\n        }\n\n        public string OAuthToken\n        {\n            get\n            {\n                if (credentials[OAuthTokenIdx] == null)\n                {\n                    LoadCredentialsFromSettings();\n                }\n\n                return credentials[OAuthTokenIdx];\n            }\n            set\n            {\n                credentials[OAuthTokenIdx] = value;\n            }\n        }\n\n        public string ConsumerKey\n        {\n            get\n            {\n                if (credentials[ConsumerKeyIdx] == null)\n                {\n                    LoadCredentialsFromSettings();\n                }\n\n                return credentials[ConsumerKeyIdx];\n            }\n            set\n            {\n                credentials[ConsumerKeyIdx] = value;\n            }\n        }\n\n        public string ScreenName\n        {\n            get\n            {\n                if (credentials[ScreenNameIdx] == null)\n                {\n                    LoadCredentialsFromSettings();\n                }\n                return credentials[ScreenNameIdx];\n            }\n            set\n            {\n                credentials[ScreenNameIdx] = value;\n            }\n        }\n\n        public string UserId\n        {\n            get\n            {\n                if (credentials[UserIdIdx] == null)\n                {\n                    LoadCredentialsFromSettings();\n                }\n                return credentials[UserIdIdx];\n            }\n            set\n            {\n                credentials[UserIdIdx] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Linq To Twitter for WinRT\")]\n[assembly: AssemblyDescription(\"Open Source LINQ Provider for the Twitter Micro-Blogging Service (WinRT)\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Joe Mayo\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter for WinRT\")]\n[assembly: AssemblyCopyright(\"Copyright © 2008 - 2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"2.1.13.0\")]\n[assembly: AssemblyFileVersion(\"2.1.13.0\")]\n[assembly: ComVisible(false)]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitterXUnitTests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterRT/Serialization/LitJson/IDictionary.cs",
    "content": "﻿//using System;\n//using System.Collections;\n//using System.Collections.Generic;\n//using System.Linq;\n//using System.Text;\n//using System.Threading.Tasks;\n\n//namespace LinqToTwitter\n//{\n//    public interface IDictionary\n//    {\n//        bool Contains(object key);\n\n//        void Add(object key, object value);\n\n//        void Clear();\n\n//        IDictionaryEnumerator GetEnumerator();\n\n//        void Remove(object key);\n\n//        bool IsReadOnly { get; }\n\n//        ICollection Values { get; }\n\n//        ICollection Keys { get; }\n\n//        bool IsFixedSize { get; }\n\n//        object this[object key] { get; set; }\n//    }\n//}\n"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterWP/Common/HashSet.cs",
    "content": "﻿//using System;\n//using System.Collections;\n//using System.Collections.Generic;\n\n//namespace LinqToTwitter.Common\n//{\n//    class HashSet<T> : ICollection<T>\n//    {\n//        private readonly Dictionary<T, short> MyDict;\n\n//        public HashSet()\n//        {\n//            MyDict = new Dictionary<T, short>();\n//        }\n\n//        // Methods\n//        public void Add(T item)\n//        {\n//            // We don't care for the value in dictionary, Keys matter.\n//            MyDict.Add(item, 0);\n//        }\n\n//        public void Clear()\n//        {\n//            MyDict.Clear();\n//        }\n\n//        public bool Contains(T item)\n//        {\n//            return MyDict.ContainsKey(item);\n//        }\n\n//        public void CopyTo(T[] array, int arrayIndex)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public bool Remove(T item)\n//        {\n//            return MyDict.Remove(item);\n//        }\n\n//        public IEnumerator<T> GetEnumerator()\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        IEnumerator IEnumerable.GetEnumerator()\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        // Properties\n//        public int Count\n//        {\n//            get { return MyDict.Keys.Count; }\n//        }\n\n//        public bool IsReadOnly\n//        {\n//            get { return false; }\n//        }\n//    } \n//}"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterWP/LinqToTwitterWP.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{C6E6BF25-5DED-4349-A5EC-E61DCC598F10}</ProjectGuid>\n    <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitterWP</AssemblyName>\n    <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>\n    <SilverlightVersion>\n    </SilverlightVersion>\n    <TargetFrameworkProfile>\n    </TargetFrameworkProfile>\n    <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>\n    <SilverlightApplication>false</SilverlightApplication>\n    <ValidateXaml>true</ValidateXaml>\n    <ThrowErrorsInValidation>true</ThrowErrorsInValidation>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <OldToolsVersion>4.0</OldToolsVersion>\n    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Bin\\Debug</OutputPath>\n    <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>Bin\\Release</OutputPath>\n    <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>\n    <NoStdLib>true</NoStdLib>\n    <NoConfig>true</NoConfig>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget />\n    <OutputPath>Bin\\x86\\Debug</OutputPath>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget />\n    <OutputPath>Bin\\x86\\Release</OutputPath>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <PlatformTarget />\n    <OutputPath>Bin\\ARM\\Debug</OutputPath>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <PlatformTarget />\n    <OutputPath>Bin\\ARM\\Release</OutputPath>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System.IO.Compression\">\n      <HintPath>..\\..\\..\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETCore\\v4.5\\System.IO.Compression.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Account.cs\">\n      <Link>Account\\Account.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountAction.cs\">\n      <Link>Account\\AccountAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountExtensions.cs\">\n      <Link>Account\\AccountExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountRequestProcessor.cs\">\n      <Link>Account\\AccountRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\AccountType.cs\">\n      <Link>Account\\AccountType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\DeviceType.cs\">\n      <Link>Account\\DeviceType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\RateLimitStatus.cs\">\n      <Link>Account\\RateLimitStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Settings.cs\">\n      <Link>Account\\Settings.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\SleepTime.cs\">\n      <Link>Account\\SleepTime.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\Totals.cs\">\n      <Link>Account\\Totals.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Account\\TZInfo.cs\">\n      <Link>Account\\TZInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlockingType.cs\">\n      <Link>Blocks\\BlockingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\Blocks.cs\">\n      <Link>Blocks\\Blocks.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksExtensions.cs\">\n      <Link>Blocks\\BlocksExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Blocks\\BlocksRequestProcessor.cs\">\n      <Link>Blocks\\BlocksRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BannerSize.cs\">\n      <Link>Common\\BannerSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\BuildUrlHelper.cs\">\n      <Link>Common\\BuildUrlHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Culture.cs\">\n      <Link>Common\\Culture.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Cursors.cs\">\n      <Link>Common\\Cursors.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\Entities.cs\">\n      <Link>Common\\Entities\\Entities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\EntityBase.cs\">\n      <Link>Common\\Entities\\EntityBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\HashTagEntity.cs\">\n      <Link>Common\\Entities\\HashTagEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\MediaEntity.cs\">\n      <Link>Common\\Entities\\MediaEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\SymbolEntity.cs\">\n      <Link>Common\\Entities\\SymbolEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UrlEntity.cs\">\n      <Link>Common\\Entities\\UrlEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Entities\\UserMentionEntity.cs\">\n      <Link>Common\\Entities\\UserMentionEntity.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Evaluator.cs\">\n      <Link>Common\\Evaluator.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeHelpers.cs\">\n      <Link>Common\\ExpressionTreeHelpers.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeModifier.cs\">\n      <Link>Common\\ExpressionTreeModifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ExpressionTreeVisitor.cs\">\n      <Link>Common\\ExpressionTreeVisitor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\HttpMethod.cs\">\n      <Link>Common\\HttpMethod.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\CRC32.cs\">\n      <Link>Common\\Iconic.ZLib\\CRC32.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\Deflate.cs\">\n      <Link>Common\\Iconic.ZLib\\Deflate.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\DeflateStream.cs\">\n      <Link>Common\\Iconic.ZLib\\DeflateStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\GZipStream.cs\">\n      <Link>Common\\Iconic.ZLib\\GZipStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\Inflate.cs\">\n      <Link>Common\\Iconic.ZLib\\Inflate.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\InfTree.cs\">\n      <Link>Common\\Iconic.ZLib\\InfTree.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\Iso8859Dash1Encoding.cs\">\n      <Link>Common\\Iconic.ZLib\\Iso8859Dash1Encoding.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\ParallelDeflateOutputStream.cs\">\n      <Link>Common\\Iconic.ZLib\\ParallelDeflateOutputStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\Tree.cs\">\n      <Link>Common\\Iconic.ZLib\\Tree.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\Zlib.cs\">\n      <Link>Common\\Iconic.ZLib\\Zlib.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\ZlibBaseStream.cs\">\n      <Link>Common\\Iconic.ZLib\\ZlibBaseStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\ZlibCodec.cs\">\n      <Link>Common\\Iconic.ZLib\\ZlibCodec.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\ZlibConstants.cs\">\n      <Link>Common\\Iconic.ZLib\\ZlibConstants.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\ZlibStream.cs\">\n      <Link>Common\\Iconic.ZLib\\ZlibStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IDList.cs\">\n      <Link>Common\\IDList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\InvalidQueryException.cs\">\n      <Link>Common\\InvalidQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\IRequestProcessor.cs\">\n      <Link>Common\\IRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\LinqExtensions.cs\">\n      <Link>Common\\LinqExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Media.cs\">\n      <Link>Common\\Media.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MediaType.cs\">\n      <Link>Common\\MediaType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\MethodCallExpressionTypeFinder.cs\">\n      <Link>Common\\MethodCallExpressionTypeFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CharExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Lower.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\LowerMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Middle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\Upper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CodeCharts\\UpperMiddle.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\CssEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\Encoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\Encoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\GlobalSuppressions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\HtmlParameterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidSurrogatePairException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\InvalidUnicodeValueException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\LdapEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\SafeList.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\SafeList.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs\">\n      <Link>Common\\Microsoft.Security.Application.Encoder\\UnicodeCharacterEncoder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ParameterFinder.cs\">\n      <Link>Common\\ParameterFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\QueryParameter.cs\">\n      <Link>Common\\QueryParameter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\ReaderWriterLock.cs\">\n      <Link>Common\\ReaderWriterLock.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\Request.cs\">\n      <Link>Common\\Request.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\RequestProcessorHelper.cs\">\n      <Link>Common\\RequestProcessorHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\State.cs\">\n      <Link>Common\\State.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TargetFramework.cs\">\n      <Link>Common\\TargetFramework.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterAsyncResponse.cs\">\n      <Link>Common\\TwitterAsyncResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterErrorStatus.cs\">\n      <Link>Common\\TwitterErrorStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterHashResponse.cs\">\n      <Link>Common\\TwitterHashResponse.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterProgressEventArgs.cs\">\n      <Link>Common\\TwitterProgressEventArgs.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TwitterQueryException.cs\">\n      <Link>Common\\TwitterQueryException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeConversionExtensions.cs\">\n      <Link>Common\\TypeConversionExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\TypeSystem.cs\">\n      <Link>Common\\TypeSystem.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Common\\WhereClauseFinder.cs\">\n      <Link>Common\\WhereClauseFinder.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessage.cs\">\n      <Link>DirectMessage\\DirectMessage.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageExtensions.cs\">\n      <Link>DirectMessage\\DirectMessageExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageRequestProcessor.cs\">\n      <Link>DirectMessage\\DirectMessageRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\DirectMessage\\DirectMessageType.cs\">\n      <Link>DirectMessage\\DirectMessageType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\Favorites.cs\">\n      <Link>Favorites\\Favorites.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesAction.cs\">\n      <Link>Favorites\\FavoritesAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesExtensions.cs\">\n      <Link>Favorites\\FavoritesExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesRequestProcessor.cs\">\n      <Link>Favorites\\FavoritesRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Favorites\\FavoritesType.cs\">\n      <Link>Favorites\\FavoritesType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Friendship.cs\">\n      <Link>Friendship\\Friendship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipAction.cs\">\n      <Link>Friendship\\FriendshipAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipExtensions.cs\">\n      <Link>Friendship\\FriendshipExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipRequestProcessor.cs\">\n      <Link>Friendship\\FriendshipRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\FriendshipType.cs\">\n      <Link>Friendship\\FriendshipType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Friendship\\Relationship.cs\">\n      <Link>Friendship\\Relationship.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Coordinate.cs\">\n      <Link>Geo\\Coordinate.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geo.cs\">\n      <Link>Geo\\Geo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoAction.cs\">\n      <Link>Geo\\GeoAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Geometry.cs\">\n      <Link>Geo\\Geometry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoRequestProcessor.cs\">\n      <Link>Geo\\GeoRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\GeoType.cs\">\n      <Link>Geo\\GeoType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Geo\\Place.cs\">\n      <Link>Geo\\Place.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Configuration.cs\">\n      <Link>Help\\Configuration.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Help.cs\">\n      <Link>Help\\Help.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpRequestProcessor.cs\">\n      <Link>Help\\HelpRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\HelpType.cs\">\n      <Link>Help\\HelpType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\Language.cs\">\n      <Link>Help\\Language.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\PhotoSize.cs\">\n      <Link>Help\\PhotoSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Help\\RateLimits.cs\">\n      <Link>Help\\RateLimits.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\ITwitterExecute.cs\">\n      <Link>LinqToTwitter\\ITwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterContext.cs\">\n      <Link>LinqToTwitter\\TwitterContext.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExecute.cs\">\n      <Link>LinqToTwitter\\TwitterExecute.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterExtensions.cs\">\n      <Link>LinqToTwitter\\TwitterExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryable.cs\">\n      <Link>LinqToTwitter\\TwitterQueryable.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\LinqToTwitter\\TwitterQueryProvider.cs\">\n      <Link>LinqToTwitter\\TwitterQueryProvider.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\List.cs\">\n      <Link>List\\List.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListAction.cs\">\n      <Link>List\\ListAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListExtensions.cs\">\n      <Link>List\\ListExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListRequestProcessor.cs\">\n      <Link>List\\ListRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\List\\ListType.cs\">\n      <Link>List\\ListType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AnonymousAuthorizer.cs\">\n      <Link>OAuth\\AnonymousAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ApplicationOnlyAuthorizer.cs\">\n      <Link>OAuth\\ApplicationOnlyAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\AuthAccessType.cs\">\n      <Link>OAuth\\AuthAccessType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\InMemoryCredentials.cs\">\n      <Link>OAuth\\InMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthCredentials.cs\">\n      <Link>OAuth\\IOAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthHelper.cs\">\n      <Link>OAuth\\IOAuthHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IOAuthTwitter.cs\">\n      <Link>OAuth\\IOAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\IsolatedStorageCredentials.cs\">\n      <Link>OAuth\\IsolatedStorageCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\ITwitterAuthorizer.cs\">\n      <Link>OAuth\\ITwitterAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthAuthorizer.cs\">\n      <Link>OAuth\\OAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthBase.cs\">\n      <Link>OAuth\\OAuthBase.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthSignatureTypes.cs\">\n      <Link>OAuth\\OAuthSignatureTypes.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\OAuthTwitter.cs\">\n      <Link>OAuth\\OAuthTwitter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\PinAuthorizer.cs\">\n      <Link>OAuth\\PinAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SignInAuthorizer.cs\">\n      <Link>OAuth\\SignInAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SilverlightAuthorizer.cs\">\n      <Link>OAuth\\SilverlightAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserAuthorizer.cs\">\n      <Link>OAuth\\SingleUserAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\SingleUserInMemoryCredentials.cs\">\n      <Link>OAuth\\SingleUserInMemoryCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\Utilities.cs\">\n      <Link>OAuth\\Utilities.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\WebAuthorizer.cs\">\n      <Link>OAuth\\WebAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthAuthorizer.cs\">\n      <Link>OAuth\\XAuthAuthorizer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\OAuth\\XAuthCredentials.cs\">\n      <Link>OAuth\\XAuthCredentials.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\Raw.cs\">\n      <Link>Raw\\Raw.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawExtensions.cs\">\n      <Link>Raw\\RawExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Raw\\RawRequestProcessor.cs\">\n      <Link>Raw\\RawRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResults.cs\">\n      <Link>RelatedResults\\RelatedResults.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsRequestProcessor.cs\">\n      <Link>RelatedResults\\RelatedResultsRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\RelatedResults\\RelatedResultsType.cs\">\n      <Link>RelatedResults\\RelatedResultsType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\ReportSpam\\ReportSpamExtensions.cs\">\n      <Link>ReportSpam\\ReportSpamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearch.cs\">\n      <Link>SavedSearch\\SavedSearch.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchAction.cs\">\n      <Link>SavedSearch\\SavedSearchAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchExtensions.cs\">\n      <Link>SavedSearch\\SavedSearchExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchRequestProcessor.cs\">\n      <Link>SavedSearch\\SavedSearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SavedSearch\\SavedSearchType.cs\">\n      <Link>SavedSearch\\SavedSearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Attitude.cs\">\n      <Link>Search\\Attitude.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\ResultType.cs\">\n      <Link>Search\\ResultType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\Search.cs\">\n      <Link>Search\\Search.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchEntry.cs\">\n      <Link>Search\\SearchEntry.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchMetaData.cs\">\n      <Link>Search\\SearchMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchRequestProcessor.cs\">\n      <Link>Search\\SearchRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Search\\SearchType.cs\">\n      <Link>Search\\SearchType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\DictionaryExtensions.cs\">\n      <Link>Serialization\\Extensions\\DictionaryExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\LitJsonExtensions.cs\">\n      <Link>Serialization\\Extensions\\LitJsonExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\Extensions\\StringExtensions.cs\">\n      <Link>Serialization\\Extensions\\StringExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IJsonWrapper.cs\">\n      <Link>Serialization\\LitJson\\IJsonWrapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\IOrderedDictionary.cs\">\n      <Link>Serialization\\LitJson\\IOrderedDictionary.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonData.cs\">\n      <Link>Serialization\\LitJson\\JsonData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonException.cs\">\n      <Link>Serialization\\LitJson\\JsonException.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonMapper.cs\">\n      <Link>Serialization\\LitJson\\JsonMapper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonReader.cs\">\n      <Link>Serialization\\LitJson\\JsonReader.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\JsonWriter.cs\">\n      <Link>Serialization\\LitJson\\JsonWriter.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\Lexer.cs\">\n      <Link>Serialization\\LitJson\\Lexer.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\ParserToken.cs\">\n      <Link>Serialization\\LitJson\\ParserToken.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraph.cs\">\n      <Link>SocialGraph\\SocialGraph.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphRequestProcessor.cs\">\n      <Link>SocialGraph\\SocialGraphRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\SocialGraph\\SocialGraphType.cs\">\n      <Link>SocialGraph\\SocialGraphType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Annotation.cs\">\n      <Link>Status\\Annotation.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Contributor.cs\">\n      <Link>Status\\Contributor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatus.cs\">\n      <Link>Status\\EmbeddedStatus.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\EmbeddedStatusAlignment.cs\">\n      <Link>Status\\EmbeddedStatusAlignment.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\FilterLevel.cs\">\n      <Link>Status\\FilterLevel.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Retweet.cs\">\n      <Link>Status\\Retweet.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\Status.cs\">\n      <Link>Status\\Status.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusAction.cs\">\n      <Link>Status\\StatusAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusExtensions.cs\">\n      <Link>Status\\StatusExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusMetaData.cs\">\n      <Link>Status\\StatusMetaData.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusRequestProcessor.cs\">\n      <Link>Status\\StatusRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Status\\StatusType.cs\">\n      <Link>Status\\StatusType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStream.cs\">\n      <Link>Streaming\\ControlStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamExtensions.cs\">\n      <Link>Streaming\\ControlStreamExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamFollow.cs\">\n      <Link>Streaming\\ControlStreamFollow.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamInfo.cs\">\n      <Link>Streaming\\ControlStreamInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamRequestProcessor.cs\">\n      <Link>Streaming\\ControlStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamType.cs\">\n      <Link>Streaming\\ControlStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\ControlStreamUser.cs\">\n      <Link>Streaming\\ControlStreamUser.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\IStreamContent.cs\">\n      <Link>Streaming\\IStreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamContent.cs\">\n      <Link>Streaming\\StreamContent.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\Streaming.cs\">\n      <Link>Streaming\\Streaming.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingRequestProcessor.cs\">\n      <Link>Streaming\\StreamingRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\StreamingType.cs\">\n      <Link>Streaming\\StreamingType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStream.cs\">\n      <Link>Streaming\\UserStream.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamRequestProcessor.cs\">\n      <Link>Streaming\\UserStreamRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Streaming\\UserStreamType.cs\">\n      <Link>Streaming\\UserStreamType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Location.cs\">\n      <Link>Trend\\Location.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\Trend.cs\">\n      <Link>Trend\\Trend.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendRequestProcessor.cs\">\n      <Link>Trend\\TrendRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\Trend\\TrendType.cs\">\n      <Link>Trend\\TrendType.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\Category.cs\">\n      <Link>User\\Category.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\ProfileImageSize.cs\">\n      <Link>User\\ProfileImageSize.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\User.cs\">\n      <Link>User\\User.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserAction.cs\">\n      <Link>User\\UserAction.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserIdentifier.cs\">\n      <Link>User\\UserIdentifier.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserRequestProcessor.cs\">\n      <Link>User\\UserRequestProcessor.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\LinqToTwitterAg\\User\\UserType.cs\">\n      <Link>User\\UserType.cs</Link>\n    </Compile>\n    <Compile Include=\"Common\\HashSet.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\LinqToTwitterAg\\LinqToTwitter.snk\">\n      <Link>LinqToTwitter.snk</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\AUTHORS\">\n      <Link>Serialization\\LitJson\\AUTHORS</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\COPYING\">\n      <Link>Serialization\\LitJson\\COPYING</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\HACKING\">\n      <Link>Serialization\\LitJson\\HACKING</Link>\n    </None>\n    <None Include=\"..\\LinqToTwitterAg\\Serialization\\LitJson\\README\">\n      <Link>Serialization\\LitJson\\README</Link>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\LICENSE.jzlib.txt\">\n      <Link>Common\\Iconic.ZLib\\LICENSE.jzlib.txt</Link>\n    </Content>\n    <Content Include=\"..\\LinqToTwitterAg\\Common\\Iconic.ZLib\\License.zlib.txt\">\n      <Link>Common\\Iconic.ZLib\\License.zlib.txt</Link>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\$(TargetFrameworkIdentifier)\\$(TargetFrameworkVersion)\\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets\" />\n  <ProjectExtensions />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter3/Libraries/LinqToTwitterWP/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Resources;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LINQ to Twitter for Windows Phone\")]\n[assembly: AssemblyDescription(\"Open Source LINQ Provider for the Twitter Micro-Blogging Service (Windows Phone)\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Joe Mayo\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter for Windows Phone\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2008 - 2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"486c6ade-4d15-4bdc-81c8-24155d851d43\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"2.1.13\")]\n[assembly: AssemblyFileVersion(\"2.1.13\")]\n[assembly: NeutralResourcesLanguageAttribute(\"en-US\")]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitterXUnitTests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n"
  },
  {
    "path": "src/LinqToTwitter3/LinqToTwitter.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2012\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{BC2D998B-4453-442C-B475-60F43B0D0D70}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tLinqToTwitter.vsmdi = LinqToTwitter.vsmdi\n\t\tLocalTestRun.testrunconfig = LocalTestRun.testrunconfig\n\t\tReadMe.txt = ReadMe.txt\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter\", \"Libraries\\LinqToTwitter\\LinqToTwitter.csproj\", \"{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterCP\", \"Libraries\\LinqToTwitterCP\\LinqToTwitterCP.csproj\", \"{A430971C-58BB-4BE3-B058-795BDFFD56BC}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterRT\", \"Libraries\\LinqToTwitterRT\\LinqToTwitterRT.csproj\", \"{4C99EC2E-067B-48E9-947E-CF80D9E17B96}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterAg\", \"Libraries\\LinqToTwitterAg\\LinqToTwitterAg.csproj\", \"{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterDemo\", \"Demos\\LinqToTwitterDemo\\LinqToTwitterDemo.csproj\", \"{CF26D528-E26B-40DB-A821-DEDE868D2638}\"\nEndProject\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"LinqToTwitterDemoVB\", \"Demos\\LinqToTwitterDemoVB\\LinqToTwitterDemoVB.vbproj\", \"{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterMvcDemo\", \"Demos\\LinqToTwitterMvcDemo\\LinqToTwitterMvcDemo.csproj\", \"{757AEA15-18C0-4378-AC4B-AC3D2C600C31}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Win8OAuthDemo\", \"Demos\\Win8OAuthDemo\\Win8OAuthDemo\\Win8OAuthDemo.csproj\", \"{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterXUnitTests\", \"Tests\\LinqToTwitterXUnitTests\\LinqToTwitterXUnitTests.csproj\", \"{6487F451-98B1-4911-B910-6D4AF27D7442}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Demos\", \"Demos\", \"{7439E2A7-B323-42A2-B8A2-E8FA866DD760}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Libraries\", \"Libraries\", \"{FBF0BA77-8E92-43CE-AD96-AFC0F4460934}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{24086CE5-4302-42AA-B9BF-2E384F022F7C}\"\nEndProject\nGlobal\n\tGlobalSection(TestCaseManagementSettings) = postSolution\n\t\tCategoryFile = LinqToTwitter.vsmdi\n\tEndGlobalSection\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Debug|x86.Build.0 = Debug|x86\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Release|x86.ActiveCfg = Release|x86\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}.Release|x86.Build.0 = Release|x86\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|x64.Build.0 = Debug|x64\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Debug|x86.Build.0 = Debug|x86\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|ARM.Build.0 = Release|ARM\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|x64.ActiveCfg = Release|x64\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|x64.Build.0 = Release|x64\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|x86.ActiveCfg = Release|x86\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96}.Release|x86.Build.0 = Release|x86\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Debug|x86.Build.0 = Debug|x86\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Release|x86.ActiveCfg = Release|x86\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638}.Release|x86.Build.0 = Release|x86\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Debug|x86.Build.0 = Debug|x86\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Release|x86.ActiveCfg = Release|x86\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403}.Release|x86.Build.0 = Release|x86\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x64.Build.0 = Debug|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x86.Build.0 = Debug|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|ARM.Build.0 = Release|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x64.ActiveCfg = Release|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x64.Build.0 = Release|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x64.Deploy.0 = Release|x64\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x86.ActiveCfg = Release|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x86.Build.0 = Release|x86\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505}.Release|x86.Deploy.0 = Release|x86\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{CF26D528-E26B-40DB-A821-DEDE868D2638} = {7439E2A7-B323-42A2-B8A2-E8FA866DD760}\n\t\t{C5526BE1-A83C-4E9B-B1EA-43DBBB74C403} = {7439E2A7-B323-42A2-B8A2-E8FA866DD760}\n\t\t{757AEA15-18C0-4378-AC4B-AC3D2C600C31} = {7439E2A7-B323-42A2-B8A2-E8FA866DD760}\n\t\t{7F69DD1E-D836-4A07-8BAC-7FBF7C039505} = {7439E2A7-B323-42A2-B8A2-E8FA866DD760}\n\t\t{A214B9F0-6B8C-4E91-BE99-27F55CC860C1} = {FBF0BA77-8E92-43CE-AD96-AFC0F4460934}\n\t\t{D6F5E8C4-5A90-4606-B9EF-9478DDA7BF9C} = {FBF0BA77-8E92-43CE-AD96-AFC0F4460934}\n\t\t{A430971C-58BB-4BE3-B058-795BDFFD56BC} = {FBF0BA77-8E92-43CE-AD96-AFC0F4460934}\n\t\t{4C99EC2E-067B-48E9-947E-CF80D9E17B96} = {FBF0BA77-8E92-43CE-AD96-AFC0F4460934}\n\t\t{6487F451-98B1-4911-B910-6D4AF27D7442} = {24086CE5-4302-42AA-B9BF-2E384F022F7C}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/LinqToTwitter3/LinqToTwitter.vsmdi",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TestLists xmlns=\"http://microsoft.com/schemas/VisualStudio/TeamTest/2010\">\n  <TestList name=\"Lists of Tests\" id=\"8c43106b-9dc1-4907-a29f-aa66a61bf5b6\">\n    <RunConfiguration id=\"16d460b7-945d-4131-85e4-30a846af53de\" name=\"Local Test Run\" storage=\"localtestrun.testrunconfig\" type=\"Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common,   PublicKeyToken=b03f5f7f11d50a3a\" />\n  </TestList>\n</TestLists>"
  },
  {
    "path": "src/LinqToTwitter3/LocalTestRun.testrunconfig",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<TestSettings name=\"Local Test Run\" id=\"16d460b7-945d-4131-85e4-30a846af53de\" xmlns=\"http://microsoft.com/schemas/VisualStudio/TeamTest/2010\">\n  <Description>This is a default test run configuration for a local test run.</Description>\n  <Execution>\n    <TestTypeSpecific>\n      <UnitTestRunConfig testTypeId=\"13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b\">\n        <AssemblyResolution>\n          <TestDirectory useLoadContext=\"true\" />\n        </AssemblyResolution>\n      </UnitTestRunConfig>\n      <WebTestRunConfiguration testTypeId=\"4e7599fa-5ecb-43e9-a887-cd63cf72d207\">\n        <Browser name=\"Internet Explorer 7.0\">\n          <Headers>\n            <Header name=\"User-Agent\" value=\"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\" />\n            <Header name=\"Accept\" value=\"*/*\" />\n            <Header name=\"Accept-Language\" value=\"{{$IEAcceptLanguage}}\" />\n            <Header name=\"Accept-Encoding\" value=\"GZIP\" />\n          </Headers>\n        </Browser>\n      </WebTestRunConfiguration>\n    </TestTypeSpecific>\n    <AgentRule name=\"LocalMachineDefaultRole\">\n    </AgentRule>\n  </Execution>\n</TestSettings>"
  },
  {
    "path": "src/LinqToTwitter3/Packages.dgml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<DirectedGraph GraphDirection=\"LeftToRight\" xmlns=\"http://schemas.microsoft.com/vs/2009/dgml\">\n  <Nodes>\n    <Node Id=\"Linq2TwitterDemos_MVC\" Label=\"Linq2TwitterDemos_MVC\" Category=\"Project\" />\n    <Node Id=\"Antlr 3.4.1.9004\" Label=\"Antlr 3.4.1.9004\" Category=\"Package\" />\n    <Node Id=\"bootstrap 3.0.0\" Label=\"bootstrap 3.0.0\" Category=\"Package\" />\n    <Node Id=\"EntityFramework 6.0.0\" Label=\"EntityFramework 6.0.0\" Category=\"Package\" />\n    <Node Id=\"jQuery 1.10.2\" Label=\"jQuery 1.10.2\" Category=\"Package\" />\n    <Node Id=\"jQuery.Validation 1.11.1\" Label=\"jQuery.Validation 1.11.1\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Identity.Core 1.0.0\" Label=\"Microsoft.AspNet.Identity.Core 1.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Identity.EntityFramework 1.0.0\" Label=\"Microsoft.AspNet.Identity.EntityFramework 1.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Label=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Mvc 5.0.0\" Label=\"Microsoft.AspNet.Mvc 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Razor 3.0.0\" Label=\"Microsoft.AspNet.Razor 3.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Label=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.WebApi 5.0.0\" Label=\"Microsoft.AspNet.WebApi 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.WebApi.Client 5.0.0\" Label=\"Microsoft.AspNet.WebApi.Client 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.WebApi.Core 5.0.0\" Label=\"Microsoft.AspNet.WebApi.Core 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.WebApi.WebHost 5.0.0\" Label=\"Microsoft.AspNet.WebApi.WebHost 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.WebPages 3.0.0\" Label=\"Microsoft.AspNet.WebPages 3.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.jQuery.Unobtrusive.Validation 3.0.0\" Label=\"Microsoft.jQuery.Unobtrusive.Validation 3.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin 2.0.0\" Label=\"Microsoft.Owin 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Label=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security 2.0.0\" Label=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security.Cookies 2.0.0\" Label=\"Microsoft.Owin.Security.Cookies 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security.Facebook 2.0.0\" Label=\"Microsoft.Owin.Security.Facebook 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security.Google 2.0.0\" Label=\"Microsoft.Owin.Security.Google 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Label=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security.OAuth 2.0.0\" Label=\"Microsoft.Owin.Security.OAuth 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Owin.Security.Twitter 2.0.0\" Label=\"Microsoft.Owin.Security.Twitter 2.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Web.Infrastructure 1.0.0.0\" Label=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package\" />\n    <Node Id=\"Modernizr 2.6.2\" Label=\"Modernizr 2.6.2\" Category=\"Package\" />\n    <Node Id=\"Newtonsoft.Json 5.0.6\" Label=\"Newtonsoft.Json 5.0.6\" Category=\"Package\" />\n    <Node Id=\"Owin 1.0\" Label=\"Owin 1.0\" Category=\"Package\" />\n    <Node Id=\"Respond 1.2.0\" Label=\"Respond 1.2.0\" Category=\"Package\" />\n    <Node Id=\"WebGrease 1.5.2\" Label=\"WebGrease 1.5.2\" Category=\"Package\" />\n    <Node Id=\"LinqToTwitter.AspNet\" Label=\"LinqToTwitter.AspNet\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"Linq2TwitterDemos_WebForms\" Label=\"Linq2TwitterDemos_WebForms\" Category=\"Project\" />\n    <Node Id=\"Antlr 3.4.1.9004\" Label=\"Antlr 3.4.1.9004\" Category=\"Package\" />\n    <Node Id=\"AspNet.ScriptManager.bootstrap 3.0.0\" Label=\"AspNet.ScriptManager.bootstrap 3.0.0\" Category=\"Package\" />\n    <Node Id=\"AspNet.ScriptManager.jQuery 1.10.2\" Label=\"AspNet.ScriptManager.jQuery 1.10.2\" Category=\"Package\" />\n    <Node Id=\"bootstrap 3.0.0\" Label=\"bootstrap 3.0.0\" Category=\"Package\" />\n    <Node Id=\"jQuery 1.10.2\" Label=\"jQuery 1.10.2\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.FriendlyUrls 1.0.2\" Label=\"Microsoft.AspNet.FriendlyUrls 1.0.2\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.FriendlyUrls.Core 1.0.2\" Label=\"Microsoft.AspNet.FriendlyUrls.Core 1.0.2\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.ScriptManager.MSAjax 5.0.0\" Label=\"Microsoft.AspNet.ScriptManager.MSAjax 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.ScriptManager.WebForms 5.0.0\" Label=\"Microsoft.AspNet.ScriptManager.WebForms 5.0.0\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Label=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Category=\"Package\" />\n    <Node Id=\"Microsoft.AspNet.Web.Optimization.WebForms 1.1.1\" Label=\"Microsoft.AspNet.Web.Optimization.WebForms 1.1.1\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Web.Infrastructure 1.0.0.0\" Label=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package\" />\n    <Node Id=\"Modernizr 2.6.2\" Label=\"Modernizr 2.6.2\" Category=\"Package\" />\n    <Node Id=\"Newtonsoft.Json 5.0.6\" Label=\"Newtonsoft.Json 5.0.6\" Category=\"Package\" />\n    <Node Id=\"Respond 1.2.0\" Label=\"Respond 1.2.0\" Category=\"Package\" />\n    <Node Id=\"WebGrease 1.5.2\" Label=\"WebGrease 1.5.2\" Category=\"Package\" />\n    <Node Id=\"LinqToTwitter.WindowsStore\" Label=\"LinqToTwitter.WindowsStore\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"Linq2TwitterDemos_WindowsPhone\" Label=\"Linq2TwitterDemos_WindowsPhone\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"Linq2TwitterDemos_WindowsStore\" Label=\"Linq2TwitterDemos_WindowsStore\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"Linq2TwitterDemos_Console\" Label=\"Linq2TwitterDemos_Console\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"LinqToTwitterPcl.Tests\" Label=\"LinqToTwitterPcl.Tests\" Category=\"Project\" />\n    <Node Id=\"Moq 4.1.1309.1617\" Label=\"Moq 4.1.1309.1617\" Category=\"Package\" />\n    <Node Id=\"xunit 1.9.2\" Label=\"xunit 1.9.2\" Category=\"Package\" />\n    <Node Id=\"xunit.extensions 1.9.2\" Label=\"xunit.extensions 1.9.2\" Category=\"Package\" />\n    <Node Id=\"LinqToTwitterDemoPcl\" Label=\"LinqToTwitterDemoPcl\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n    <Node Id=\"LinqToTwitterPcl\" Label=\"LinqToTwitterPcl\" Category=\"Project\" />\n    <Node Id=\"Microsoft.Bcl 1.1.3\" Label=\"Microsoft.Bcl 1.1.3\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Bcl.Build 1.0.10\" Label=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package\" />\n    <Node Id=\"Microsoft.Net.Http 2.2.15\" Label=\"Microsoft.Net.Http 2.2.15\" Category=\"Package\" />\n  </Nodes>\n  <Links>\n    <Link Source=\"jQuery.Validation 1.11.1\" Target=\"jQuery 1.10.2\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Identity.EntityFramework 1.0.0\" Target=\"Microsoft.AspNet.Identity.Core 1.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Identity.EntityFramework 1.0.0\" Target=\"EntityFramework 6.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Target=\"Microsoft.AspNet.Identity.Core 1.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Target=\"Microsoft.Owin.Security.Cookies 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Target=\"Microsoft.Owin.Security.OAuth 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Mvc 5.0.0\" Target=\"Microsoft.AspNet.WebPages 3.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Mvc 5.0.0\" Target=\"Microsoft.AspNet.Razor 3.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Target=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Target=\"WebGrease 1.5.2\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebApi 5.0.0\" Target=\"Microsoft.AspNet.WebApi.WebHost 5.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebApi.Client 5.0.0\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebApi.Client 5.0.0\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebApi.Client 5.0.0\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebApi.Core 5.0.0\" Target=\"Microsoft.AspNet.WebApi.Client 5.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebApi.WebHost 5.0.0\" Target=\"Microsoft.AspNet.WebApi.Core 5.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebPages 3.0.0\" Target=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.WebPages 3.0.0\" Target=\"Microsoft.AspNet.Razor 3.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.jQuery.Unobtrusive.Validation 3.0.0\" Target=\"jQuery.Validation 1.11.1\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Target=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Cookies 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Cookies 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Cookies 2.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Facebook 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Facebook 2.0.0\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Facebook 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Facebook 2.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Google 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Google 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Google 2.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.OAuth 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.OAuth 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.OAuth 2.0.0\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.OAuth 2.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Twitter 2.0.0\" Target=\"Owin 1.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Twitter 2.0.0\" Target=\"Microsoft.Owin 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Twitter 2.0.0\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Owin.Security.Twitter 2.0.0\" Target=\"Microsoft.Owin.Security 2.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"WebGrease 1.5.2\" Target=\"Antlr 3.4.1.9004\" Category=\"Package Dependency\" />\n    <Link Source=\"WebGrease 1.5.2\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"bootstrap 3.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.AspNet.Identity.EntityFramework 1.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.AspNet.Identity.Owin 1.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.AspNet.Mvc 5.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.AspNet.WebApi 5.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.jQuery.Unobtrusive.Validation 3.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.Owin.Host.SystemWeb 2.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.Owin.Security.Facebook 2.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.Owin.Security.Google 2.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.Owin.Security.MicrosoftAccount 2.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Microsoft.Owin.Security.Twitter 2.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Modernizr 2.6.2\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_MVC\" Target=\"Respond 1.2.0\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"LinqToTwitter.AspNet\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"AspNet.ScriptManager.bootstrap 3.0.0\" Target=\"bootstrap 3.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"AspNet.ScriptManager.jQuery 1.10.2\" Target=\"jQuery 1.10.2\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.FriendlyUrls 1.0.2\" Target=\"Microsoft.AspNet.FriendlyUrls.Core 1.0.2\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.FriendlyUrls.Core 1.0.2\" Target=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Target=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Target=\"WebGrease 1.5.2\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Web.Optimization.WebForms 1.1.1\" Target=\"Microsoft.Web.Infrastructure 1.0.0.0\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.AspNet.Web.Optimization.WebForms 1.1.1\" Target=\"Microsoft.AspNet.Web.Optimization 1.1.1\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"WebGrease 1.5.2\" Target=\"Antlr 3.4.1.9004\" Category=\"Package Dependency\" />\n    <Link Source=\"WebGrease 1.5.2\" Target=\"Newtonsoft.Json 5.0.6\" Category=\"Package Dependency\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"AspNet.ScriptManager.bootstrap 3.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"AspNet.ScriptManager.jQuery 1.10.2\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Microsoft.AspNet.FriendlyUrls 1.0.2\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Microsoft.AspNet.ScriptManager.MSAjax 5.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Microsoft.AspNet.ScriptManager.WebForms 5.0.0\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Microsoft.AspNet.Web.Optimization.WebForms 1.1.1\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Modernizr 2.6.2\" Category=\"Installed Package\" />\n    <Link Source=\"Linq2TwitterDemos_WebForms\" Target=\"Respond 1.2.0\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"LinqToTwitter.WindowsStore\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Linq2TwitterDemos_WindowsPhone\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Linq2TwitterDemos_WindowsStore\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Linq2TwitterDemos_Console\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"xunit.extensions 1.9.2\" Target=\"xunit 1.9.2\" Category=\"Package Dependency\" />\n    <Link Source=\"LinqToTwitterPcl.Tests\" Target=\"Moq 4.1.1309.1617\" Category=\"Installed Package\" />\n    <Link Source=\"LinqToTwitterPcl.Tests\" Target=\"xunit.extensions 1.9.2\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"LinqToTwitterDemoPcl\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n    <Link Source=\"Microsoft.Bcl 1.1.3\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl 1.1.3\" Category=\"Package Dependency\" />\n    <Link Source=\"Microsoft.Net.Http 2.2.15\" Target=\"Microsoft.Bcl.Build 1.0.10\" Category=\"Package Dependency\" />\n    <Link Source=\"LinqToTwitterPcl\" Target=\"Microsoft.Net.Http 2.2.15\" Category=\"Installed Package\" />\n  </Links>\n  <Categories>\n    <Category Id=\"Project\" />\n    <Category Id=\"Package\" />\n  </Categories>\n  <Styles>\n    <Style TargetType=\"Node\" GroupLabel=\"Project\" ValueLabel=\"True\">\n      <Condition Expression=\"HasCategory('Project')\" />\n      <Setter Property=\"Background\" Value=\"Blue\" />\n    </Style>\n    <Style TargetType=\"Link\" GroupLabel=\"Package Dependency\" ValueLabel=\"True\">\n      <Condition Expression=\"HasCategory('Package Dependency')\" />\n      <Setter Property=\"Background\" Value=\"Yellow\" />\n    </Style>\n  </Styles>\n</DirectedGraph>"
  },
  {
    "path": "src/LinqToTwitter3/Resources/BuildOxygeneDemo.bat",
    "content": "oxygene -ref:\"..\\LinqToTwitter\\bin\\Debug\\LinqToTwitter.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Core.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Xml.Linq.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Xml.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Data.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Data.DataSetExtensions.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Runtime.Serialization.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.ServiceModel.Web.dll\" -ref:\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\System.Web.dll\" OxygeneDemo.pas"
  },
  {
    "path": "src/LinqToTwitter3/Resources/OxygeneDemo.pas",
    "content": "namespace TwitterTest;\n \ninterface\n \nuses\n  System.Linq,\n  LinqToTwitter;\n\ntype\n  TwitterTestClass = class\n  public\n    class method Main; \n  end;\n\nimplementation\n\nclass method TwitterTestClass.Main;\n//  var \n//\tAuth : ApplicationOnlyAuthorizer;\n//\tCredentials : InMemoryCredentials;\n//\tTwitterCtx : TwitterContext;\nbegin\n \n//  Credentials := new InMemoryCredentials;\n//  Credentials.ConsumerKey := \"\";\n//  Credentials.ConsumerSecret := \"\";\n  \n//  Auth := new ApplicationOnlyAuthorizer;\n//  Auth.Credentials := Credentials;\n  \n//  Auth.Authorize(); \n\n//  TwitterCtx := new TwitterContext(Auth);\n \n\tvar numbers: sequence of Integer := [1,2,3,4,5,6,7,8,9]; \n \n    var myquery := from c in numbers where (c >= 4) and (c <= 8) select c;\n//  var SearchResponse :=\n//    from srch in TwitterCtx.Search\n//    where ((srch.Type == SearchType.Search) and\n//\t      (srch.Query == 'LINQ to Twitter'))\n//    select srch;\n\n//  System.Console.WriteLine(\n//    \"\\nQuery: {0}\\n\", SearchResponse.SearchMetaData.Query);\n\t\n//  for tweet : Status in SearchResponse.Statuses do begin\n//     System.Console.WriteLine(\n//        \"User Name: {0}, tweet: {1}\",\n//            tweet.User.Name,\n//            tweet.Text);\n//  end;\n\nend;\n \nend.\n"
  },
  {
    "path": "src/LinqToTwitter3/Resources/OxygeneReadMe.txt",
    "content": "Read Me for Delphi Prism\n------------------------\n\nThe examples in this demo use the oxygene compiler, which you can download for free from Embarcadero's site at: cc.codegear.com/free/prism.  If they move the link, look for trial downloads for Delphi Prism or check the Rem Objects site at http://www.remobjects.com/.\n\nAfter you install the Oxygene compiler, go to the Start menu, All Programs, Delphi Prism, and run the Oxygen Command Prompt.  Then navigate to where you have the Delphi Prism demos for LINQ to Twitter and run the BuildDelphiPrismDemo.bat file.\n\nThis will create a file named DelpiPrismDemo.exe, which you can run.  You can view the source code in the file named DelphiPrismDemo.pas.\n\nIf you have any questions, you're welcome to post a message on the Discussion Forums at http://linqtotwitter.codeplex.com/.\n\nJoe\n\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/AccountTests/AccountExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.AccountTests\n{\n    public class AccountExtensionsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public AccountExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, TEntity>>()))\n                    .Returns(response);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        TwitterContext InitTwitterContextWithPostTwitterImage()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostTwitterImage(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IRequestProcessor<User>>()))\n                    .Returns(SingleUserResponse);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [Fact]\n        public void UpdateAccountProfile_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = ctx.UpdateAccountProfile(Name, Url, Location, Description, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/account/update_profile.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, User>>()),\n                Times.Once());\n            Assert.Equal(ExpectedName, actual.Name);\n        }\n\n        [Fact]\n        public void UpdateAccountProfile_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(null, null, null, null, true, false));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountProfile_Throws_On_Name_Over_20_Chars()\n        {\n            const string ExpectedParamName = \"name\";\n            string name = new string(Enumerable.Repeat('x', 21).ToArray());\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(name, Url, Location, Description, true, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountProfile_Throws_On_Url_Over_100_Chars()\n        {\n            const string ExpectedParamName = \"url\";\n            const string Name = \"Joe\";\n            var url = new string(Enumerable.Repeat('x', 101).ToArray());\n            const string Location = \"Denver, CO\";\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(Name, url, Location, Description, true, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountProfile_Throws_On_Location_Over_30_Chars()\n        {\n            const string ExpectedParamName = \"location\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            var location = new string(Enumerable.Repeat('x', 31).ToArray());\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(Name, Url, location, Description, true, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountProfile_Throws_On_Description_Over_160_Chars()\n        {\n            const string ExpectedParamName = \"description\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"Denver, CO\";\n            var description = new string(Enumerable.Repeat('x', 161).ToArray());\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(Name, Url, Location, description, true, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountImage_Invokes_Executor_Execute()\n        {\n            const string ImageFilePath = \"c:\\\\image.jpg\";\n            const string ExpectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n            execMock.Setup(exec =>\n                exec.PostTwitterFile(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IRequestProcessor<User>>()))\n                .Returns(SingleUserResponse);\n\n            User actual = ctx.UpdateAccountImage(ImageFilePath, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostTwitterFile(\n                    \"https://api.twitter.com/1.1/account/update_profile_image.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IRequestProcessor<User>>()),\n                Times.Once());\n            Assert.Equal(ExpectedName, actual.Name);\n        }\n\n        [Fact]\n        public void UpdateAccountImage_Throws_On_Null_Path()\n        {\n            const string ExpectedParamName = \"imageFilePath\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountImage(null, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountColors_Invokes_Executor_Execute()\n        {\n            const string Background = \"9ae4e8\";\n            const string Text = \"#000000\";\n            const string Link = \"#0000ff\";\n            const string SidebarFill = \"#e0ff92\";\n            const string SidebarBorder = \"#87bc44\";\n            string expectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = ctx.UpdateAccountColors(Background, Text, Link, SidebarFill, SidebarBorder, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/account/update_profile_colors.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, User>>()),\n                Times.Once());\n            Assert.Equal(expectedName, actual.Name);\n        }\n\n        [Fact]\n        public void UpdateAccountColors_Throws_On_No_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountColors(null, null, null, null, null, true, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountColors_Allows_Null_Parameters()\n        {\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User user = ctx.UpdateAccountColors(\"#9ae4e8\", null, null, null, null, true, SkipStatus);\n\n            Assert.NotNull(user);\n\n            user = ctx.UpdateAccountColors(null, \"#9ae4e8\", null, null, null, true, SkipStatus);\n\n            Assert.NotNull(user);\n        }\n\n        [Fact]\n        public void UpdateAccountBackgroundImage_Invokes_Executor_PostTwitterFile()\n        {\n            const string ImageFilePath = \"C:\\\\image.png\";\n            const bool Tile = false;\n            const bool Use = false;\n            const string ExpectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n            execMock.Setup(exec =>\n            exec.PostTwitterFile(\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<string>(),\n                It.IsAny<IRequestProcessor<User>>()))\n                .Returns(SingleUserResponse);\n\n            User actual = ctx.UpdateAccountBackgroundImage(ImageFilePath, Tile, Use, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostTwitterFile(\n                    \"https://api.twitter.com/1.1/account/update_profile_background_image.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IRequestProcessor<User>>()),\n                Times.Once());\n            Assert.Equal(ExpectedName, actual.Name);\n        }\n\n        [Fact]\n        public void UpdateAccountBackgroundImage_Throws_On_Null_Path()\n        {\n            const string ExpectedParamName = \"imageFilePath\";\n            string imageFilePath = string.Empty;\n            const bool Tile = false;\n            const bool Use = false;\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountBackgroundImage(imageFilePath, Tile, Use, true, SkipStatus));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateAccountSettings_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"trend_location_woeid\", \"1\" },\n                { \"sleep_time_enabled\", \"True\" },\n                { \"start_sleep_time\", \"20\" },\n                { \"end_sleep_time\", \"6\" },\n                { \"time_zone\", \"MST\" },\n                { \"lang\", \"en\" }\n            };\n\n            Account acct = ctx.UpdateAccountSettings(1, true, 20, 6, \"MST\", \"en\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/account/settings.json\",\n                    parameters,\n                    It.IsAny<Func<string, Account>>()),\n                Times.Once());\n            Assert.NotNull(acct);\n            Settings settings = acct.Settings;\n            Assert.NotNull(settings);\n            Assert.Equal(\"en\", settings.Language);\n        }\n\n        [Fact]\n        public void UpdateAccountSettings_Throws_On_No_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountSettings(null, null, null, null, null, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateDeliveryDevice_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"device\", DeviceType.Sms.ToString().ToLower() },\n                { \"include_entities\", true.ToString().ToLower() }\n            };\n\n            Account acct = ctx.UpdateDeliveryDevice(DeviceType.Sms, true);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/account/update_delivery_device.json\",\n                    parameters,\n                    It.IsAny<Func<string, Account>>()),\n                Times.Once());\n            Assert.NotNull(acct);\n            Settings settings = acct.Settings;\n            Assert.NotNull(settings);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Invokes_Executor_Execute()\n        {\n            const string ExpectedProfileBannerUrl = \"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\";\n            byte[] banner = new byte[]{ 1, 2, 3 };\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            User actual = ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null);\n\n            execMock.Verify(exec =>\n                exec.PostTwitterImage(\n                    \"https://api.twitter.com/1.1/account/update_profile_banner.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IRequestProcessor<User>>()),\n                Times.Once());\n            Assert.NotNull(actual);\n            Assert.NotNull(actual.ProfileBannerUrl);\n            Assert.Equal(ExpectedProfileBannerUrl, actual.ProfileBannerUrl);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Throws_On_Null_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = null;\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Throws_On_Empty_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = new byte[0];\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Throws_On_Null_FileName()\n        {\n            const string ExpectedParamName = \"fileName\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = null;\n            const string FileType = \"png\";\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Throws_On_Empty_FileName()\n        {\n            const string ExpectedParamName = \"fileName\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"\";\n            const string FileType = \"png\";\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Throws_On_Null_FileType()\n        {\n            const string ExpectedParamName = \"imageType\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"MyFile.png\";\n            const string FileType = null;\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateProfileBanner_Throws_On_Empty_FileType()\n        {\n            const string ExpectedParamName = \"imageType\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"MyFile.png\";\n            const string FileType = \"\";\n            const int Width = 1252;\n            const int Height = 626;\n            const int OffsetLeft = 1;\n            const int OffsetRight = 1;\n            var ctx = InitTwitterContextWithPostTwitterImage();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void RemoveProfileBanner_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = ctx.RemoveProfileBanner(null);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/account/remove_profile_banner.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, User>>()),\n                Times.Once());\n            Assert.NotNull(actual);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string SettingsResponse = @\"{\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"protected\"\":false,\n   \"\"geo_enabled\"\":false,\n   \"\"time_zone\"\":{\n      \"\"name\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"tzinfo_name\"\":\"\"America\\/Denver\"\"\n   },\n   \"\"sleep_time\"\":{\n      \"\"enabled\"\":true,\n      \"\"start_time\"\":20,\n      \"\"end_time\"\":8\n   },\n   \"\"show_all_inline_media\"\":true,\n   \"\"discoverable_by_email\"\":true,\n   \"\"trend_location\"\":[\n      {\n         \"\"woeid\"\":23424977,\n         \"\"name\"\":\"\"United States\"\",\n         \"\"country\"\":\"\"United States\"\",\n         \"\"countryCode\"\":\"\"US\"\",\n         \"\"placeType\"\":{\n            \"\"name\"\":\"\"Country\"\",\n            \"\"code\"\":12\n         },\n         \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424977\"\",\n         \"\"parentid\"\":1\n      }\n   ],\n   \"\"language\"\":\"\"en\"\",\n   \"\"always_use_https\"\":true\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/AccountTests/AccountRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.AccountTests\n{\n    public class AccountRequestProcessorTests\n    {\n        public AccountRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_VerifyCredentials()\n        {\n            var target = new AccountRequestProcessor<Account> { Type = AccountType.VerifyCredentials };\n\n            List<Account> actual = target.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            var acct = actual.Cast<Account>().ToList().FirstOrDefault();\n            Assert.NotNull(acct);\n            Assert.Equal(\"Joe Mayo\", acct.User.Name);\n        }\n\n        [Fact]\n        public void HandleSettingsResponse_Converts_Settings_To_Account()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>();\n\n            Account acct = acctReqProc.HandleSettingsResponse(TestSettingsResponse);\n\n            Assert.NotNull(acct);\n            Assert.Equal(23424977, acct.Settings.TrendLocation.WoeID);\n            Assert.Equal(\"United States\", acct.Settings.TrendLocation.Name);\n            Assert.Equal(12, acct.Settings.TrendLocation.PlaceTypeNameCode);\n            Assert.Equal(\"Country\", acct.Settings.TrendLocation.PlaceTypeName);\n            Assert.Equal(\"US\", acct.Settings.TrendLocation.CountryCode);\n            Assert.Equal(\"United States\", acct.Settings.TrendLocation.Country);\n            Assert.Equal(\"http://where.yahooapis.com/v1/place/23424977\", acct.Settings.TrendLocation.Url);\n            Assert.Equal(true, acct.Settings.GeoEnabled);\n            Assert.Equal(false, acct.Settings.SleepTime.Enabled);\n            Assert.Equal(0, acct.Settings.SleepTime.StartHour);\n            Assert.Equal(0, acct.Settings.SleepTime.EndHour);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var accts = reqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(0, accts.Count);\n        }\n\n        [Fact]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new AccountRequestProcessor<Account>();\n            Expression<Func<Account, bool>> expression = \n                acct => \n                    acct.Type == AccountType.Settings &&\n                    acct.SkipStatus == true &&\n                    acct.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_VerifyCredentials_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/verify_credentials.json?skip_status=true&include_entities=false\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.VerifyCredentials).ToString(CultureInfo.InvariantCulture) },\n                        { \"SkipStatus\", true.ToString() },\n                        { \"IncludeEntities\", false.ToString() }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Settings_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/settings.json\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = Assert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_With_Null_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(null));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>\n            {\n                Type = AccountType.VerifyCredentials,\n                SkipStatus = true,\n                IncludeEntities = true\n            };\n\n            var accounts = acctReqProc.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            Assert.NotNull(accounts);\n            Assert.Single(accounts);\n            var account = accounts.Single();\n            Assert.Equal(AccountType.VerifyCredentials, account.Type);\n            Assert.True(account.SkipStatus);\n            Assert.True(account.IncludeEntities);\n        }\n\n        const string TestVerifyCredentialsQueryResponse = @\"{\n   \"\"statuses_count\"\":1624,\n   \"\"favourites_count\"\":65,\n   \"\"protected\"\":false,\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a2.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\",\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"default_profile\"\":false,\n   \"\"listed_count\"\":101,\n   \"\"following\"\":false,\n   \"\"profile_background_tile\"\":false,\n   \"\"utc_offset\"\":-25200,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; MVP; interested in C#, MVC, and Language Integrated Query (LINQ)\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"contributors_enabled\"\":false,\n   \"\"verified\"\":false,\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"followers_count\"\":875,\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":2,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"id_str\"\":\"\"115131137906589696\"\",\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":115131137906589696,\n      \"\"created_at\"\":\"\"Sat Sep 17 18:32:56 +0000 2011\"\",\n      \"\"possibly_sensitive\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Visual Studio 11 Developer Preview: http:\\/\\/t.co\\/fISuavMD\"\"\n   },\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"geo_enabled\"\":true,\n   \"\"profile_use_background_image\"\":true,\n   \"\"friends_count\"\":161,\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"is_translator\"\":false,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"id\"\":15411837,\n   \"\"follow_request_sent\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a1.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\"\n}\";\n\n        const string TestRateLimitStatusQueryResponse = @\"{\n   \"\"remaining_hits\"\":343,\n   \"\"hourly_limit\"\":350,\n   \"\"reset_time_in_seconds\"\":1316397996,\n   \"\"reset_time\"\":\"\"Mon Sep 19 02:06:36 +0000 2011\"\"\n}\";\n\n        const string TestEndSessionResponse = @\"{\n  \"\"request\"\": \"\"/1/account/end_session.json\"\",\n  \"\"error\"\": \"\"Logged out.\"\"\n}\";\n\n        const string TestTotalsResponse = @\"{\n   \"\"followers\"\":875,\n   \"\"favorites\"\":65,\n   \"\"friends\"\":161,\n   \"\"updates\"\":1624\n}\";\n\n        const string TestSettingsResponse = @\"{\n   \"\"protected\"\":false,\n   \"\"trend_location\"\":[\n      {\n         \"\"name\"\":\"\"United States\"\",\n         \"\"countryCode\"\":\"\"US\"\",\n         \"\"placeType\"\":{\n            \"\"name\"\":\"\"Country\"\",\n            \"\"code\"\":12\n         },\n         \"\"parentid\"\":1,\n         \"\"country\"\":\"\"United States\"\",\n         \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424977\"\",\n         \"\"woeid\"\":23424977\n      }\n   ],\n   \"\"language\"\":\"\"en\"\",\n   \"\"sleep_time\"\":{\n      \"\"start_time\"\":null,\n      \"\"end_time\"\":null,\n      \"\"enabled\"\":false\n   },\n   \"\"show_all_inline_media\"\":false,\n   \"\"discoverable_by_email\"\":true,\n   \"\"time_zone\"\":{\n      \"\"tzinfo_name\"\":\"\"America\\/Denver\"\",\n      \"\"name\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"utc_offset\"\":-25200\n   },\n   \"\"geo_enabled\"\":true,\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"always_use_https\"\":true\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/App.config",
    "content": "<?xml version=\"1.0\"?>\n<configuration>\n  <appSettings>\n    <!-- Set culture to test localization settings, all ClassInitialize in\n         tests should set CurrentCulture and CurrentUICulture with this value\n    <add key=\"culture\" value=\"nn-NO\"/>\n    -->\n\n    <add key=\"culture\" value=\"\"/>\n  </appSettings>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/BlocksTests/BlocksExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing Moq;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class BlocksExtensionsTests\n    {\n        Mock<ITwitterAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public BlocksExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void BlocksRequestProcessor_Works_With_Actions()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<User>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<User>>(blocksReqProc);\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec => exec.PostToTwitter(\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<Func<string, User>>()))\n                    .Returns(BlocksUserJson);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [Fact]\n        public void CreateBlock_Handles_Response()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            User actual = ctx.CreateBlock(Id, null, SkipStatus);\n\n            Assert.Equal(\"LINQ to Tweeter Test\", actual.Name);\n        }\n\n        [Fact]\n        public void CreateBlock_Builds_Url()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            ctx.CreateBlock(Id, null, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/blocks/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, User>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void CreateBlock_Throws_On_Null_UserID_And_ScreenName()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.CreateBlock(0, null, true));\n\n            Assert.Equal(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroyBlock_Handles_Response()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            User actual = ctx.DestroyBlock(Id, null, SkipStatus);\n\n            Assert.Equal(\"LINQ to Tweeter Test\", actual.Name);\n        }\n\n        [Fact]\n        public void DestroyBlock_Builds_Url()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            ctx.DestroyBlock(Id, null, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/blocks/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, User>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DestroyBlockNullIDTest()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DestroyBlock(0, null, true));\n\n            Assert.Equal(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        const string BlocksUserJson = @\"{\n   \"\"id\"\":16761255,\n   \"\"listed_count\"\":2,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":0,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"followers_count\"\":22,\n   \"\"is_translator\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"follow_request_sent\"\":false,\n   \"\"statuses_count\"\":100,\n   \"\"utc_offset\"\":-25200,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"favourites_count\"\":2,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"verified\"\":false,\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"default_profile\"\":false,\n   \"\"following\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"notifications\"\":false,\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"coordinates\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"place\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":176445993091481604,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/BlocksTests/BlocksRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class BlocksRequestProcessorTests\n    {\n        public BlocksRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_IDs()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.Ids\n            };\n\n            IList<Blocks> blocksResponse = blockReqProc.ProcessResults(BlockedIDsJson);\n\n            Assert.NotNull(blocksResponse);\n            Blocks blocks = blocksResponse.First();\n            List<string> ids = blocks.IDs;\n            Assert.Equal(5, ids.Count());\n            Assert.Equal(\"35080286\", ids.First());\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_BlockedUsers()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List\n            };\n\n            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            var actualQuery = actual as IList<Blocks>;\n            Assert.NotNull(actualQuery);\n            Assert.Equal(actualQuery[0].Users.Count, 3);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var blocks = blocksReqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(1, blocks.Count);\n        }\n\n        [Fact]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List,\n                ScreenName = \"somename\",\n                Page = 1,\n                PerPage = 10,\n                IncludeEntities = true,\n                SkipStatus = true,\n                Cursor = \"789\"\n            };\n\n            var blocks = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            Assert.NotNull(blocks);\n            Assert.Single(blocks);\n            var block = blocks.Single();\n            Assert.Equal(BlockingType.List, block.Type);\n            Assert.Equal(\"somename\", block.ScreenName);\n            Assert.Equal(1, block.Page);\n            Assert.Equal(10, block.PerPage);\n            Assert.True(block.IncludeEntities);\n            Assert.True(block.SkipStatus);\n            Assert.Equal(\"789\", block.Cursor);\n        }\n\n        [Fact]\n        public void GetParameters_Parses_Parameters()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks>();\n            Expression<Func<Blocks, bool>> expression =\n                block =>\n                    block.Type == BlockingType.List &&\n                    block.UserID == 123ul &&\n                    block.ScreenName == \"JoeMayo\" &&\n                    block.Page == 1 &&\n                    block.PerPage == 10 &&\n                    block.IncludeEntities == true &&\n                    block.SkipStatus == true &&\n                    block.Cursor == \"789\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = blocksReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PerPage\", \"10\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Creates_List_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/list.json?page=2&per_page=10&include_entities=true&skip_status=true&cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture) },\n                    { \"Page\", \"2\" },\n                    { \"PerPage\", \"10\" },\n                    { \"SkipStatus\", true.ToString() },\n                    { \"Cursor\", \"789\" },\n                    { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Creates_BlockingIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/ids.json?cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.Ids).ToString(CultureInfo.InvariantCulture) },\n                    { \"Cursor\", \"789\" }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type_Parameter()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = Assert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(parameters));\n                \n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(null));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n\n        const string BlockedUsersJson = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":35080286,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":0,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":null,\n         \"\"name\"\":\"\"Nunya Business\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Fri Apr 24 23:44:07 +0000 2009\"\",\n         \"\"time_zone\"\":null,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"35080286\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"followers_count\"\":1,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"somename\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Apr 24 23:44:34 +0000 2009\"\",\n            \"\"id_str\"\":\"\"1608673165\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"whatever\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":1608673165,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":0\n      },\n      {\n         \"\"id\"\":132447355,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":1,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":14400,\n         \"\"name\"\":\"\"abcdefg\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Tue Apr 13 07:49:37 +0000 2010\"\",\n         \"\"time_zone\"\":\"\"Baku\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"132447355\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"followers_count\"\":33,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"abcdefg\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":17,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Tue Apr 13 08:09:41 +0000 2010\"\",\n            \"\"id_str\"\":\"\"12093232220\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"hi\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":12093232220,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":6\n      },\n      {\n         \"\"id\"\":22785157,\n         \"\"location\"\":\"\"Orange County, CA\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"profile_background_color\"\":\"\"B2DFDA\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"name\"\":\"\"Patrick Kerr\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"statuses_count\"\":9823,\n         \"\"profile_link_color\"\":\"\"93A644\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":null,\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        31\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\"\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Wed Mar 04 15:15:54 +0000 2009\"\",\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"22785157\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"followers_count\"\":1149,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"eeeeee\"\",\n         \"\"listed_count\"\":11,\n         \"\"screen_name\"\":\"\"patrickkerr\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Dec 28 15:00:13 +0000 2012\"\",\n            \"\"id_str\"\":\"\"284675125813575680\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":\"\"lnkd.in\\/_n9Mq5\"\",\n                     \"\"expanded_url\"\":\"\"http:\\/\\/lnkd.in\\/_n9Mq5\"\",\n                     \"\"indices\"\":[\n                        66,\n                        86\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/t.co\\/Fil30ira\"\"\n                  }\n               ],\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"Lincoln Property Makes Second SoCal Office Acquisition in a Month http:\\/\\/t.co\\/Fil30ira\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.linkedin.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ELinkedIn\\u003C\\/a\\u003E\"\",\n            \"\"id\"\":284675125813575680,\n            \"\"possibly_sensitive\"\":false,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":\"\"Patrick Kerr at Kerr Organization, develops & invests in commercial real estate #realestate #properties #buildings #multifamily #investments #homes\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"ffffff\"\",\n         \"\"friends_count\"\":155\n      }\n   ],\n   \"\"next_cursor\"\":0,\n   \"\"previous_cursor\"\":0,\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n\n        const string BlockedIDsJson = @\"{\n   \"\"previous_cursor\"\":0,\n   \"\"ids\"\":[\n      35080286,\n      132447355,\n      22785157,\n      238429025,\n      256075978\n   ],\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\",\n   \"\"next_cursor\"\":0\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/Common/DebuggerWriter.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\nnamespace LinqToTwitterXUnitTests.Common\n{\n    /// <summary>\n    /// Implements a <see cref=\"TextWriter\"/> for writing information to the debugger log.\n    /// </summary>\n    /// <seealso cref=\"Debugger.Log\"/>\n    /// <remarks>This code is created by Kris Vandermotten</remarks>\n    /// /// <remarks>For more information check this link: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11 </remarks>\n    public class DebuggerWriter : TextWriter\n    {\n        private bool isOpen;\n        private static UnicodeEncoding encoding;\n        private readonly int level;\n        private readonly string category;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class.\n        /// </summary>\n        public DebuggerWriter()\n            : this(0, Debugger.DefaultCategory)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level and category.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        public DebuggerWriter(int level, string category)\n            : this(level, category, CultureInfo.CurrentCulture)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level, category and format provider.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        /// <param name=\"formatProvider\">An <see cref=\"IFormatProvider\"/> object that controls formatting.</param>\n        public DebuggerWriter(int level, string category, IFormatProvider formatProvider)\n            : base(formatProvider)\n        {\n            this.level = level;\n            this.category = category;\n            this.isOpen = true;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            isOpen = false;\n            base.Dispose(disposing);\n        }\n\n        public override void Write(char value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            Debugger.Log(level, category, value.ToString());\n        }\n\n        public override void Write(string value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (value != null)\n            {\n                Debugger.Log(level, category, value);\n            }\n        }\n\n        public override void Write(char[] buffer, int index, int count)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (buffer == null || index < 0 || count < 0 || buffer.Length - index < count)\n            {\n                base.Write(buffer, index, count); // delegate throw exception to base class\n            }\n            Debugger.Log(level, category, new string(buffer, index, count));\n        }\n\n        public override Encoding Encoding\n        {\n            get\n            {\n                if (encoding == null)\n                {\n                    encoding = new UnicodeEncoding(false, false);\n                }\n                return encoding;\n            }\n        }\n\n        public int Level\n        {\n            get { return level; }\n        }\n\n        public string Category\n        {\n            get { return category; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/Common/OAuthTwitterMock.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing LinqToTwitter;\n\nnamespace LinqToTwitterXUnitTests.Common\n{\n    class OAuthTwitterMock : IOAuthTwitter\n    {\n        public void GetRequestTokenAsync(Uri oauthRequestTokenUrl, Uri oauthAuthorizeUrl, string twitterCallbackUrl, AuthAccessType authAccessType, bool forceLogin, Action<string> authorizationCallback, Action<TwitterAsyncResponse<object>> authenticationCompleteCallback)\n        {\n            authenticationCompleteCallback(new TwitterAsyncResponse<object>());\n        }\n\n        public void AccessTokenGet(string authToken, string verifier, string accessTokenUrl, string callback, out string screenName, out string userID)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string AuthorizationLinkGet(string requestToken, string authorizeUrl, string callback, bool forceLogin, AuthAccessType authAccessType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void GetOAuthQueryString(HttpMethod method, Request url, string callback, out string outUrl, out string queryString)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetOAuthQueryStringForPost(Request url, IDictionary<string, string> postData)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string OAuthConsumerKey\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public string OAuthConsumerSecret\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public string OAuthToken\n        {\n            get\n            {\n                return \"123\";\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public string OAuthTokenSecret\n        {\n            get\n            {\n                return \"123\";\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public string OAuthUserAgent\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public string OAuthVerifier\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public string oAuthWebRequest(HttpMethod method, string url, string postData, string callback, AuthAccessType authAccessType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string WebRequest(HttpMethod method, string url, string authHeader, IDictionary<string, string> postData)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string WebResponseGet(System.Net.HttpWebRequest webRequest)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetOAuthHeader(Uri requestUrl, Uri callbackUrl)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void GetAccessTokenAsync(string verifier, Uri oauthAccessTokenUrl, Uri twitterCallbackUrl, AuthAccessType authAccessType, Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback)\n        {\n            authenticationCompleteCallback(new TwitterAsyncResponse<UserIdentifier>());\n        }\n\n        public string ProxyUrl\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n            set\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public WebProxy Proxy { get; set; }\n\n        public void GetAccessTokenAsync(string verifier, Uri oauthAccessTokenUrl, string twitterCallbackUrl, AuthAccessType authAccessType, Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback)\n        {\n            authenticationCompleteCallback(new TwitterAsyncResponse<UserIdentifier>());\n        }\n\n        public string FilterRequestParameters(Uri fullUrl)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetUrlParamValue(string queryString, string paramKey)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void PostAccessToken(Request accessTokenUrl, IDictionary<string, string> postData, out string screenName, out string userID)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string OAuthWebRequest(HttpMethod method, Request url, IDictionary<string, string> postData, string callback)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void PostAccessTokenAsync(Request uri, IDictionary<string, string> postData, Action<TwitterAsyncResponse<UserIdentifier>> authorizationCompleteCallback)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/Common/TestCulture.cs",
    "content": "﻿using System.Configuration;\nusing System.Globalization;\nusing System.Threading;\n\nnamespace LinqToTwitterXUnitTests.Common\n{\n    public class TestCulture\n    {\n        public static void SetCulture()\n        {\n            string culture = ConfigurationManager.AppSettings[\"culture\"];\n            var cultureInfo = new CultureInfo(culture);\n            Thread.CurrentThread.CurrentCulture = cultureInfo;\n            Thread.CurrentThread.CurrentUICulture = cultureInfo;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/Common/TwitterExtensionsTests.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class TwitterExtensionsTests\n    {\n        public TwitterExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void StreamingCallback_Sets_TwitterExecutor_StreamCallback()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            var ctxMock = new Mock<TwitterContext>(execMock.Object);\n            var twQueryable = new TwitterQueryable<Streaming>(ctxMock.Object);\n            Action<StreamContent> callback = content => Console.WriteLine(content.Content);\n\n            twQueryable.StreamingCallback(callback);\n\n            execMock.VerifySet(exec => exec.StreamingCallback = It.IsAny<Action<StreamContent>>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/DirectMessageTests/DirectMessageExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing Moq;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class DirectMessageExtensionsTests\n    {\n        Mock<ITwitterAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public DirectMessageExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void DirectMessageRequestProcessor_Works_With_Actions()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<DirectMessage>>(dmReqProc);\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec => exec.PostToTwitter(\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<Func<string, DirectMessage>>()))\n                    .Returns(TestQueryResponse);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [Fact]\n        public void NewDirectMessage_Returns_Created_DM()\n        {\n            const string UserID = \"1\";\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            DirectMessage actual = ctx.NewDirectMessage(UserID, Text);\n\n            Assert.Equal(189086715040903168ul, actual.IDResponse);\n        }\n\n        [Fact]\n        public void NewDirectMessage_Constructs_Url()\n        {\n            const string UserID = \"1\";\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            ctx.NewDirectMessage(UserID, Text);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/direct_messages/new.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, DirectMessage>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void NewDirectMessage_Throws_On_Null_Text()\n        {\n            const string UserID = \"1\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.NewDirectMessage(UserID, null));\n\n            Assert.Equal(\"text\", ex.ParamName);\n        }\n\n        [Fact]\n        public void NewDirectMessage_Throws_On_Empty_UserID()\n        {\n            string userID = string.Empty;\n            const string Text = \"Test Text\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.NewDirectMessage(userID, Text));\n\n            Assert.Equal(\"user\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroyDirectMessage_Returns_Deleted_DM()\n        {\n            const string Id = \"1\";\n            var ctx = InitializeTwitterContext();\n\n            DirectMessage actual = ctx.DestroyDirectMessage(Id, true);\n\n            Assert.Equal(189086715040903168ul, actual.IDResponse);\n        }\n\n        [Fact]\n        public void DestroyDirectMessage_Constructs_Url()\n        {\n            const string Id = \"1\";\n            var ctx = InitializeTwitterContext();\n\n            ctx.DestroyDirectMessage(Id, true);\n\n            execMock.Verify(\n                exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/direct_messages/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, DirectMessage>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DestroyDirectMessage_Throws_On_Null_ID()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DestroyDirectMessage(null, true));\n\n            Assert.Equal(\"id\", ex.ParamName);\n        }\n\n        const string TestQueryResponse = @\"\n   {\n      \"\"recipient\"\":{\n         \"\"id\"\":16761255,\n         \"\"listed_count\"\":2,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":22,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":100,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"favourites_count\"\":2,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n      },\n      \"\"created_at\"\":\"\"Sun Apr 08 20:26:00 +0000 2012\"\",\n      \"\"entities\"\":{\n         \"\"user_mentions\"\":[\n\n         ],\n         \"\"urls\"\":[\n\n         ],\n         \"\"hashtags\"\":[\n\n         ]\n      },\n      \"\"sender_id\"\":15411837,\n      \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n      \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"recipient_id\"\":16761255,\n      \"\"id\"\":189086715040903168,\n      \"\"sender\"\":{\n         \"\"id\"\":15411837,\n         \"\"listed_count\"\":108,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":204,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":1083,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":1867,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"favourites_count\"\":39,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP; interests: Windows 8.\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"JoeMayo\"\"\n      },\n      \"\"text\"\":\"\"This is a test.\"\",\n      \"\"id_str\"\":\"\"189086715040903168\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/DirectMessageTests/DirectMessageRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class DirectMessageRequestProcessorTests\n    {\n        public DirectMessageRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_SentTo_Url()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            const string Expected = \"https://api.twitter.com/1/direct_messages.json?since_id=1234567&max_id=357&page=1&count=2&include_entities=true&skip_status=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.SentTo).ToString(CultureInfo.InvariantCulture) },\n                        { \"SinceID\", \"1234567\" },\n                        { \"MaxID\", \"357\" },\n                        { \"Page\", \"1\" },\n                        { \"Count\", \"2\" },\n                        { \"IncludeEntities\", true.ToString() },\n                        { \"SkipStatus\", true.ToString() }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.Equal(Expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_SentBy_Url()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            const string Expected = \"https://api.twitter.com/1/direct_messages/sent.json?since_id=1234567&max_id=357&page=1&count=2&include_entities=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.SentBy).ToString(CultureInfo.InvariantCulture) },\n                        { \"SinceID\", \"1234567\" },\n                        { \"MaxID\", \"357\" },\n                        { \"Page\", \"1\" },\n                        { \"Count\", \"2\" },\n                        { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.Equal(Expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            const string Expected = \"https://api.twitter.com/1/direct_messages/show.json?id=478805447\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.Show).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"478805447\" },\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.Equal(Expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Show_Requires_ID()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.Show).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => dmReqProc.BuildUrl(parameters));\n            \n            Assert.Equal(\"ID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Response()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var actual = dmReqProc.ProcessResults(TestQueryResponse);\n\n            var actualQuery = actual as IList<DirectMessage>;\n            Assert.NotNull(actualQuery);\n            Assert.Equal(1, actualQuery.Count());\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var dms = dmReqProc.ProcessResults(string.Empty);\n\n            Assert.False(dms.Any());\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Single_Result_For_Show()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> \n            { \n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = DirectMessageType.Show\n            };\n\n            var dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            Assert.Single(dms);\n        }\n\n        [Fact]\n        public void ProcessResults_Replaces_Input_Params_For_Show()\n        {\n            const ulong SinceID = 1;\n            const ulong MaxID = 2;\n            const int Page = 3;\n            const int Count = 4;\n            const ulong ID = 5;\n            const bool SkipStatus = true;\n\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = DirectMessageType.Show,\n                SinceID = SinceID,\n                MaxID = MaxID,\n                Page = Page,\n                Count = Count,\n                ID = ID,\n                SkipStatus = SkipStatus\n            };\n\n            var dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            var dm = dms.First();\n\n            Assert.Equal(SinceID, dm.SinceID);\n            Assert.Equal(MaxID, dm.MaxID);\n            Assert.Equal(Page, dm.Page);\n            Assert.Equal(Count, dm.Count);\n            Assert.Equal(ID, dm.ID);\n            Assert.Equal(SkipStatus, dm.SkipStatus);\n        }\n\n        [Fact]\n        public void ProcessResults_Replaces_Input_Params_For_SentBy_And_SentTo()\n        {\n            const ulong SinceID = 1;\n            const ulong MaxID = 2;\n            const int Page = 3;\n            const int Count = 4;\n            const ulong ID = 5;\n            const bool SkipStatus = true;\n\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = DirectMessageType.SentBy,\n                SinceID = SinceID,\n                MaxID = MaxID,\n                Page = Page,\n                Count = Count,\n                ID = ID,\n                SkipStatus = SkipStatus\n            };\n\n            var dms = dmReqProc.ProcessResults(TestQueryResponse);\n\n            var dm = dms.First();\n\n            Assert.Equal(SinceID, dm.SinceID);\n            Assert.Equal(MaxID, dm.MaxID);\n            Assert.Equal(Page, dm.Page);\n            Assert.Equal(Count, dm.Count);\n            Assert.Equal(ID, dm.ID);\n            Assert.Equal(SkipStatus, SkipStatus);\n        }\n\n        [Fact]\n        public void GetParameters_Returns_Parameters()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>();\n            Expression<Func<DirectMessage, bool>> expression =\n                dm =>\n                    dm.Type == DirectMessageType.Show &&\n                    dm.Count == 1 &&\n                    dm.MaxID == 789 &&\n                    dm.Page == 1 &&\n                    dm.SinceID == 123 &&\n                    dm.ID == 456 &&\n                    dm.IncludeEntities == true &&\n                    dm.SkipStatus == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = dmReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)DirectMessageType.Show).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type_Param()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = Assert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Param_Dictionary()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(null));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        const string TestQueryResponse = @\"[\n   {\n      \"\"recipient\"\":{\n         \"\"id\"\":16761255,\n         \"\"listed_count\"\":2,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":22,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":100,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"favourites_count\"\":2,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n      },\n      \"\"created_at\"\":\"\"Sun Apr 08 20:26:00 +0000 2012\"\",\n      \"\"entities\"\":{\n         \"\"user_mentions\"\":[\n\n         ],\n         \"\"urls\"\":[\n\n         ],\n         \"\"hashtags\"\":[\n\n         ]\n      },\n      \"\"sender_id\"\":15411837,\n      \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n      \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"recipient_id\"\":16761255,\n      \"\"id\"\":189086715040903168,\n      \"\"sender\"\":{\n         \"\"id\"\":15411837,\n         \"\"listed_count\"\":108,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":204,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":1083,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":1867,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"favourites_count\"\":39,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP; interests: Windows 8.\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"JoeMayo\"\"\n      },\n      \"\"text\"\":\"\"This is a test.\"\",\n      \"\"id_str\"\":\"\"189086715040903168\"\"\n   }\n]\";\n\n        const string TestQuerySingleResponse = @\"{\n   \"\"recipient\"\":{\n      \"\"id\"\":16761255,\n      \"\"profile_background_tile\"\":false,\n      \"\"listed_count\"\":3,\n      \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n      \"\"location\"\":\"\"Anywhere In The World\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n      \"\"is_translator\"\":false,\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n      \"\"protected\"\":false,\n      \"\"geo_enabled\"\":false,\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n      \"\"friends_count\"\":1,\n      \"\"lang\"\":\"\"en\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"favourites_count\"\":2,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n      \"\"statuses_count\"\":100,\n      \"\"show_all_inline_media\"\":true,\n      \"\"profile_link_color\"\":\"\"0000ff\"\",\n      \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"verified\"\":false,\n      \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"profile_use_background_image\"\":true,\n      \"\"id_str\"\":\"\"16761255\"\",\n      \"\"notifications\"\":false,\n      \"\"following\"\":false,\n      \"\"profile_text_color\"\":\"\"000000\"\",\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n      \"\"default_profile\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n      \"\"followers_count\"\":22,\n      \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n      \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\"\n   },\n   \"\"sender\"\":{\n      \"\"id\"\":15411837,\n      \"\"profile_background_tile\"\":false,\n      \"\"listed_count\"\":111,\n      \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n      \"\"location\"\":\"\"Denver, CO\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"is_translator\"\":false,\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_background_color\"\":\"\"0099B9\"\",\n      \"\"protected\"\":false,\n      \"\"geo_enabled\"\":true,\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"friends_count\"\":214,\n      \"\"lang\"\":\"\"en\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"favourites_count\"\":39,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"statuses_count\"\":1891,\n      \"\"show_all_inline_media\"\":false,\n      \"\"profile_link_color\"\":\"\"0099B9\"\",\n      \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"verified\"\":false,\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"profile_use_background_image\"\":true,\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"notifications\"\":false,\n      \"\"following\"\":false,\n      \"\"profile_text_color\"\":\"\"3C3940\"\",\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"default_profile\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n      \"\"followers_count\"\":1092,\n      \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n      \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\"\n   },\n   \"\"created_at\"\":\"\"Sat Apr 21 03:23:55 +0000 2012\"\",\n   \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"recipient_id\"\":16761255,\n   \"\"id_str\"\":\"\"193540539663126529\"\",\n   \"\"id\"\":193540539663126529,\n   \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n   \"\"sender_id\"\":15411837,\n   \"\"text\"\":\"\"Direct Message Test - 4\\/20\\/2012 9:25:06 PM\"\"\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/DirectMessageTests/DirectMessageTests.cs",
    "content": "﻿using System;\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing LitJson;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class DirectMessageTests\n    {\n        public DirectMessageTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void DirectMessage_Constructor_Parses_Json()\n        {\n            var dmJson = JsonMapper.ToObject(DirectMessagesResponse);\n\n            var dm = new DirectMessage(dmJson);\n\n            Assert.Equal(new DateTimeOffset(2012, 7, 22, 18, 38, 09, new TimeSpan(0L)).DateTime, dm.CreatedAt);\n            Assert.Equal(15411837ul, dm.SenderID);\n            Assert.Equal(\"JoeMayo\", dm.SenderScreenName);\n            Assert.NotNull(dm.Sender);\n            Assert.Equal(16761255ul, dm.RecipientID);\n            Assert.Equal(\"Linq2Tweeter\", dm.RecipientScreenName);\n            Assert.NotNull(dm.Recipient);\n            Assert.Equal(227110300510461952ul, dm.IDResponse);\n            Assert.Equal(\"227110300510461952\", dm.IDString);\n            Assert.Equal(\"Testing entities from @JoeMayo : http://t.co/Q1CQHi2 #entitytest\", dm.Text);\n            Entities entities = dm.Entities;\n            Assert.NotNull(entities);\n            List<UserMentionEntity> userMentions = entities.UserMentionEntities;\n            Assert.NotNull(userMentions);\n            Assert.NotEmpty(userMentions);\n            UserMentionEntity usrMention = userMentions.FirstOrDefault();\n            Assert.NotNull(usrMention);\n            Assert.Equal(\"Joe Mayo\", usrMention.Name);\n        }\n\n        const string DirectMessagesResponse = @\"{\n      \"\"recipient\"\":{\n         \"\"id\"\":16761255,\n         \"\"verified\"\":false,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2182212102\\/200xColor_2_normal.png\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"statuses_count\"\":103,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_background_color\"\":\"\"FFF04D\"\",\n         \"\"friends_count\"\":5,\n         \"\"show_all_inline_media\"\":true,\n         \"\"notifications\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"utc_offset\"\":-25200,\n         \"\"listed_count\"\":4,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme19\\/bg.gif\"\",\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"profile_link_color\"\":\"\"0099CC\"\",\n         \"\"protected\"\":false,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"is_translator\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme19\\/bg.gif\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_sidebar_border_color\"\":\"\"fff8ad\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"f6ffd1\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2182212102\\/200xColor_2_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"contributors_enabled\"\":false\n      },\n      \"\"recipient_id\"\":16761255,\n      \"\"id_str\"\":\"\"227110300510461952\"\",\n      \"\"sender\"\":{\n         \"\"id\"\":15411837,\n         \"\"verified\"\":false,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"statuses_count\"\":2064,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_background_color\"\":\"\"FFF04D\"\",\n         \"\"friends_count\"\":221,\n         \"\"show_all_inline_media\"\":false,\n         \"\"notifications\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"utc_offset\"\":-25200,\n         \"\"listed_count\"\":122,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/579400467\\/200xColor_2.png\"\",\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_link_color\"\":\"\"0099CC\"\",\n         \"\"protected\"\":false,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"is_translator\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP; author of LINQ to Twitter - http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/579400467\\/200xColor_2.png\"\",\n         \"\"favourites_count\"\":51,\n         \"\"profile_sidebar_border_color\"\":\"\"FFF8AD\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"F6FFD1\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"following\"\":false,\n         \"\"followers_count\"\":1174,\n         \"\"contributors_enabled\"\":false\n      },\n      \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n      \"\"sender_id\"\":15411837,\n      \"\"entities\"\":{\n         \"\"user_mentions\"\":[\n            {\n               \"\"name\"\":\"\"Joe Mayo\"\",\n               \"\"screen_name\"\":\"\"JoeMayo\"\",\n               \"\"id_str\"\":\"\"15411837\"\",\n               \"\"indices\"\":[\n                  22,\n                  30\n               ],\n               \"\"id\"\":15411837\n            }\n         ],\n         \"\"hashtags\"\":[\n            {\n               \"\"indices\"\":[\n                  53,\n                  64\n               ],\n               \"\"text\"\":\"\"entitytest\"\"\n            }\n         ],\n         \"\"urls\"\":[\n            {\n               \"\"display_url\"\":\"\"linqtotwitter.codeplex.com\"\",\n               \"\"url\"\":\"\"http:\\/\\/t.co\\/Q1CQHi2\"\",\n               \"\"indices\"\":[\n                  33,\n                  52\n               ],\n               \"\"expanded_url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\"\n            }\n         ]\n      },\n      \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"id\"\":227110300510461952,\n      \"\"created_at\"\":\"\"Sun Jul 22 18:38:09 +0000 2012\"\",\n      \"\"text\"\":\"\"Testing entities from @JoeMayo : http:\\/\\/t.co\\/Q1CQHi2 #entitytest\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/FavoritesTests/FavoritesCtorTests.cs",
    "content": "﻿using System;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing LitJson;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.FavoritesTests\n{\n    public class FavoritesCtorTests\n    {\n        public FavoritesCtorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Favorites_Ctor_Parses_JsonData()\n        {\n            var favJson = JsonMapper.ToObject(TwitterResponse);\n\n            var favorite = new Favorites(favJson);\n\n            Assert.Equal(\"1234\", favorite.InReplyToStatusID);\n            Assert.Equal(new DateTimeOffset(2012, 4, 5, 16, 44, 8, new TimeSpan(0)).DateTime, favorite.CreatedAt);\n            Assert.False(favorite.Truncated);\n            Assert.Equal(false, favorite.Retweeted);\n            Assert.NotNull(favorite.User);\n        }\n\n        const string TwitterResponse = @\"\n   {\n      \"\"in_reply_to_status_id_str\"\":\"\"1234\"\",\n      \"\"in_reply_to_status_id\"\":1234,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":\"\"5678\"\",\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      }\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/FavoritesTests/FavoritesExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.FavoritesTests\n{\n    public class FavoritesExtensionsTests\n    {\n        public FavoritesExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, Status>>()))\n                .Returns(SingleStatusResponse);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [Fact]\n        public void CreateFavoritesRequestProcessor_Works_With_Actions()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<Favorites>>(favReqProc);\n        }\n\n        [Fact]\n        public void CreateFavoriteTest()\n        {\n            const string Id = \"1\";\n            const string ExpectedStatusID = \"184835136037191681\";\n            var ctx = InitializeTwitterContext();\n\n            Status actual = ctx.CreateFavorite(Id);\n\n            Assert.Equal(ExpectedStatusID, actual.StatusID);\n        }\n\n        [Fact]\n        public void CreateFavoriteNoIDTest()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.CreateFavorite(null));\n\n            Assert.Equal(\"id\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroyFavoriteTest()\n        {\n            const string Id = \"1\";\n            const string ExpectedStatusID = \"184835136037191681\";\n            var ctx = InitializeTwitterContext();\n\n            Status actual = ctx.DestroyFavorite(Id, true);\n\n            Assert.Equal(ExpectedStatusID, actual.StatusID);\n        }\n\n        [Fact]\n        public void DestroyFavoriteNullIDTest()\n        {\n            string id = string.Empty;\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DestroyFavorite(id, true));\n\n            Assert.Equal(\"id\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/FavoritesTests/FavoritesRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterXUnitTests.Common;\n\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class FavoritesRequestProcessorTests\n    {\n        public FavoritesRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Response()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            List<Favorites> favorites = favReqProc.ProcessResults(TwitterResponse);\n\n            Assert.Equal(2, favorites.Count());\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var favorites = reqProc.ProcessResults(string.Empty);\n\n            Assert.False(favorites.Any());\n        }\n\n        [Fact]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Favorites, bool>> expression =\n                fav =>\n                    fav.Type == FavoritesType.Favorites &&\n                    fav.UserID == \"123\" &&\n                    fav.ScreenName == \"JoeMayo\" &&\n                    fav.Count == 100 &&\n                    fav.SinceID == 456 &&\n                    fav.MaxID == 789 &&\n                    fav.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = favReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)FavoritesType.Favorites).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"100\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Favorites_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/favorites/list.json?user_id=123&screen_name=JoeMayo&count=100&since_id=456&max_id=789&include_entities=true\";\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FavoritesType.Favorites.ToString() },\n                    { \"UserID\", \"123\" },\n                    { \"ScreenName\", \"JoeMayo\" },\n                    { \"Count\", \"100\" },\n                    { \"SinceID\", \"456\" },\n                    { \"MaxID\", \"789\" },\n                    { \"IncludeEntities\", true.ToString() }\n\n                };\n\n            Request req = favReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type_Param()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = Assert.Throws<ArgumentException>(() => favReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Params_Dictionary()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => favReqProc.BuildUrl(null));\n\n            Assert.Equal(\"parameters\", ex.ParamName);\n        }\n\n        const string TwitterResponse = @\"[\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":41,\n      \"\"favorited\"\":true,\n      \"\"id\"\":187943716558864384,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Windows Internals 6th Edition Part 1 (on Win7\\/Server 2008R2) is now available for purchase! http:\\/\\/t.co\\/F8vE1LnC\"\"\n   },\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Mar 22 15:34:00 +0000 2012\"\",\n      \"\"id_str\"\":\"\"182852636905701377\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"id\"\":14457688,\n         \"\"statuses_count\"\":8803,\n         \"\"profile_sidebar_fill_color\"\":\"\"e9e9dc\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_background_color\"\":\"\"1574a4\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Andrew Brust\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"1574a4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/bit.ly\\/bigondata\"\",\n         \"\"created_at\"\":\"\"Mon Apr 21 02:57:59 +0000 2008\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Founder\\/CEO, Blue Badge Insights; ZDNet Big Data blogger; RedDevNews.com columnist; co-author Programming Microsoft SQL Server 2012; Microsoft tech influencer.\"\",\n         \"\"id_str\"\":\"\"14457688\"\",\n         \"\"profile_text_color\"\":\"\"5e6466\"\",\n         \"\"time_zone\"\":\"\"Eastern Time (US & Canada)\"\",\n         \"\"following\"\":true,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"1c4273\"\",\n         \"\"location\"\":\"\"New York, NY\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":111,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":720,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"followers_count\"\":1743,\n         \"\"screen_name\"\":\"\"andrewbrust\"\",\n         \"\"profile_background_tile\"\":false\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":true,\n      \"\"id\"\":182852636905701377,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Check out my #ZDNet blog post - Big Data\\u2019s Ground Floor Consulting Opportunity - http:\\/\\/t.co\\/PxDMPRJT\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/FriendshipTests/FriendshipExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.FriendshipTests\n{\n    class FriendshipExtensionsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public FriendshipExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext<TEntity>(string response)\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, TEntity>>()))\n                .Returns(response);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [Fact]\n        public void FriendshipRequestProcessor_Works_With_Actions()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<Friendship>>(freindReqProc);\n        }\n\n        [Fact]\n        public void CreateFriendshipTest()\n        {\n            const string UserID = \"2\";\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = ctx.CreateFriendship(UserID, ScreenName, Follow);\n\n            Assert.Equal(expectedName, actual.Name);\n        }\n\n        [Fact]\n        public void CreateFriendshipNoInputTest()\n        {\n            string userID = string.Empty;\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.CreateFriendship(userID, null, Follow));\n\n            Assert.Equal(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroyFriendshipTest()\n        {\n            const string UserID = \"2\";\n            const string ScreenName = \"JoeMayo\";\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = ctx.DestroyFriendship(UserID, ScreenName);\n\n            Assert.Equal(expectedName, actual.Name);\n        }\n\n        [Fact]\n        public void DestroyFriendshipNoInputTest()\n        {\n            string userID = string.Empty;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DestroyFriendship(null, userID, null));\n\n            Assert.Equal(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateFriendshipSettings_Calls_Execute()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            ctx.UpdateFriendshipSettings(\"Linq2Tweeter\", true, true);\n\n            execMock.Verify(exec => exec.PostToTwitter(\n                \"https://api.twitter.com/1.1/friendships/update.json\",\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<Func<string, Friendship>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void UpdateFriendshipSettings_Throws_Without_ScreenName_Or_UserID()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = Assert.Throws<ArgumentNullException>(() => ctx.UpdateFriendshipSettings(null, true, true));\n\n            Assert.Equal(\"screenNameOrUserID\", ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":15411837,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"followers_count\"\":1101,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"listed_count\"\":113,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":true,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"statuses_count\"\":1907,\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"friends_count\"\":210,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"favourites_count\"\":44,\n   \"\"status\"\":{\n      \"\"retweeted\"\":true,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"possibly_sensitive_editable\"\":true,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":3,\n      \"\"id_str\"\":\"\"196991337554378752\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Apr 30 15:56:09 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196991337554378752,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Funny - http:\\/\\/t.co\\/yZW2Sbmi :)\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false\n      }\n   }\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/FriendshipTests/FriendshipRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.FriendshipTests\n{\n    public class FriendshipRequestProcessorTests\n    {\n        public FriendshipRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void FriendshipRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(freindReqProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Translates_Relationships_From_LookupQuery()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Lookup };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.NotNull(friends);\n            Assert.Single(friends);\n            var relations = friends.Single().Relationships;\n            Assert.NotNull(relations);\n            Assert.Single(relations);\n            var connections = relations.Single().Connections;\n            Assert.NotNull(connections);\n            Assert.Single(connections);\n            var connection = connections.First();\n            Assert.NotNull(connection);\n            Assert.Equal(\"following\", connection);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Show };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(RelationshipResponse);\n\n            Assert.NotNull(friends);\n            Assert.Single(friends);\n            var friend = friends.Single();\n            Assert.NotNull(friend);\n            var tgtRel = friend.TargetRelationship;\n            Assert.NotNull(tgtRel);\n            Assert.Equal(\"JoeMayo\", tgtRel.ScreenName);\n            Assert.True(tgtRel.FollowedBy);\n            Assert.Equal(\"15411837\", tgtRel.ID);\n            Assert.False(tgtRel.Following);\n            var srcRel = friend.SourceRelationship;\n            Assert.NotNull(srcRel);\n            Assert.Equal(\"Linq2Tweeter\", srcRel.ScreenName);\n            Assert.True(srcRel.RetweetsWanted);\n            Assert.False(srcRel.AllReplies);\n            Assert.False(srcRel.MarkedSpam);\n            Assert.False(srcRel.FollowedBy);\n            Assert.Equal(\"16761255\", srcRel.ID);\n            Assert.False((bool)srcRel.Blocking);\n            Assert.True((bool)srcRel.NotificationsEnabled);\n            Assert.True(srcRel.Following);\n            Assert.False(srcRel.CanDm);\n        }\n\n        void TestParsingIds(FriendshipType friendType)\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = friendType };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(IdsResponse);\n\n            Assert.NotNull(friends);\n            Assert.Single(friends);\n            var friend = friends.Single();\n            Assert.NotNull(friend);\n            var idList = friend.IDInfo;\n            Assert.NotNull(idList);\n            var cursor = idList.CursorMovement;\n            Assert.NotNull(cursor);\n            Assert.Equal(\"2\", cursor.Previous);\n            Assert.Equal(\"1\", cursor.Next);\n            var ids = idList.IDs;\n            Assert.NotNull(ids);\n            Assert.NotEmpty(ids);\n            var id = ids.First();\n            Assert.Equal(5676142ul, id);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Incoming_Response()\n        {\n            TestParsingIds(FriendshipType.Incoming);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Outgoing_Response()\n        {\n            TestParsingIds(FriendshipType.Outgoing);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_NoRetweetIDs_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.NoRetweetIDs };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(NoRetweetIDsResponse);\n\n            Assert.NotNull(friends);\n            Assert.Single(friends);\n            var friend = friends.Single();\n            Assert.NotNull(friend);\n            var idList = friend.IDInfo;\n            Assert.NotNull(idList);\n            var ids = idList.IDs;\n            Assert.NotNull(ids);\n            Assert.NotEmpty(ids);\n            var id = ids.First();\n            Assert.Equal(15411837ul, id);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1/\" };\n\n            List<Friendship> friendships = reqProc.ProcessResults(string.Empty);\n\n            Assert.Empty(friendships);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_FriendsListOrFollowersList_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.FriendsList };\n\n            List<Friendship> friendshipList = friendReqProc.ProcessResults(FreindsFollowersResponse);\n\n            Assert.NotNull(friendshipList);\n            Assert.Single(friendshipList);\n            var friendship = friendshipList.Single();\n            Assert.NotNull(friendship);\n            var users = friendship.Users;\n            Assert.NotNull(users);\n            Assert.Equal(3, users.Count);\n            var user = users.First();\n            Assert.NotNull(user);\n            Assert.Equal(\"93604443\", user.Identifier.UserID);\n         }\n\n        [Fact]\n        public void ProcessResults_Retains_Original_Input_Params()\n        {\n            const string SrcUsrID = \"1\";\n            const string SrcScrNm = \"JoeMayo\";\n            const string TgtUsrID = \"2\";\n            const string TgtScrNm = \"MayMayo\";\n            const int Count = 20;\n            const string Cursor = \"123\";\n            const string ScrNm = \"JoeMayo,MayMayo\";\n            const string UsrID = \"1,2\";\n            const bool SkipStatus = true;\n            const bool IncludeUserEntities = true;\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> \n            { \n                Type = FriendshipType.Lookup,\n                SourceUserID = SrcUsrID,\n                SourceScreenName = SrcScrNm,\n                TargetUserID = TgtUsrID,\n                TargetScreenName = TgtScrNm,\n                Count = Count,\n                Cursor = Cursor,\n                ScreenName = ScrNm,\n                UserID = UsrID,\n                SkipStatus = SkipStatus,\n                IncludeUserEntities = IncludeUserEntities\n            };\n\n            List<Friendship> friendships = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.NotNull(friendships);\n            Assert.NotEmpty(friendships);\n            var friendship = friendships.First();\n            Assert.NotNull(friendship);\n            Assert.Equal(FriendshipType.Lookup, friendship.Type);\n            Assert.Equal(SrcUsrID, friendship.SourceUserID);\n            Assert.Equal(SrcScrNm, friendship.SourceScreenName);\n            Assert.Equal(TgtUsrID, friendship.TargetUserID);\n            Assert.Equal(TgtScrNm, friendship.TargetScreenName);\n            Assert.Equal(Count, friendship.Count);\n            Assert.Equal(Cursor, friendship.Cursor);\n            Assert.Equal(ScrNm, friendship.ScreenName);\n            Assert.Equal(UsrID, friendship.UserID);\n            Assert.Equal(SkipStatus, friendship.SkipStatus);\n            Assert.Equal(IncludeUserEntities, friendship.IncludeUserEntities);\n        }\n\n        [Fact]\n        public void ProcessActionResult_Translates_Relationships_From_UpdateSettings()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Friendship friend = friendReqProc.ProcessActionResult(RelationshipResponse, FriendshipAction.Update);\n\n            var srcRel = friend.SourceRelationship;\n            Assert.Equal(true, srcRel.RetweetsWanted);\n            Assert.Equal(true, srcRel.NotificationsEnabled);\n        }\n\n        [Fact]\n        public void GetParameters_Returns_Parameters()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Expression<Func<Friendship, bool>> expression =\n                friend =>\n                         friend.Type == FriendshipType.Show &&\n                         friend.SourceUserID == \"1\" &&\n                         friend.SourceScreenName == \"Name\" &&\n                         friend.TargetUserID == \"2\" &&\n                         friend.TargetScreenName == \"Name\" &&\n                         friend.Count == 20 &&\n                         friend.Cursor == \"-1\" &&\n                         friend.ScreenName == \"twitter,joemayo\" &&\n                         friend.UserID == \"123,456\" &&\n                         friend.SkipStatus == true &&\n                         friend.IncludeUserEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = friendReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)FriendshipType.Show).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceUserID\", \"1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceScreenName\", \"Name\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetUserID\", \"2\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetScreenName\", \"Name\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"20\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"-1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"twitter,joemayo\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123,456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"SourceUserID\", \"123\" },\n                    { \"SourceScreenName\", \"JoeMayo\" },\n                    { \"TargetUserID\", \"456\" },\n                    { \"TargetScreenName\", \"LinqToTweeter\" }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/show.json?source_id=123&source_screen_name=JoeMayo&target_id=456&target_screen_name=LinqToTweeter\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_Without_Source_Url()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"friendReqProcUserID\", \"456\" },\n                    { \"friendReqProcScreenName\", \"LinqToTweeter\" }\n                };\n\n            Assert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_Without_FriendsReqProcUrl()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Show.ToString() },\n                { \"SourceUserID\", \"123\" },\n                { \"SourceScreenName\", \"JoeMayo\" },\n            };\n\n            Assert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [Fact]\n        public void BuildUrl_Creates_No_Retweet_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.NoRetweetIDs.ToString() }\n                };\n            string expected = \"http://api.twitter.com/friendships/no_retweet_ids.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_When_Missing_Type()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters = new Dictionary<string, string> { };\n\n            var ex = Assert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters = null;\n\n            var ex = Assert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Incoming_Url()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Incoming.ToString() }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/incoming.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_With_Cursor_Param_Constructs_Incoming_Url()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Incoming.ToString() },\n                    { \"Cursor\", \"-1\" }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/incoming.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Outgoing_Url()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Outgoing.ToString() }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/outgoing.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_With_Cursor_Param_Constructs_Outgoing_Url()\n        {\n            FriendshipRequestProcessor<Friendship> friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Outgoing.ToString() },\n                    { \"Cursor\", \"-1\" }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/outgoing.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildLookupUrl_Returns_Url_For_ScreenName()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Lookup.ToString() },\n                    { \"ScreenName\", \"twitter,joemayo\" }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/lookup.json?screen_name=twitter%2Cjoemayo\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildLookupUrl_Returns_Url_For_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Lookup.ToString() },\n                    { \"UserID\", \"123,456\" }\n                };\n            string expected = \"https://api.twitter.com/1/friendships/lookup.json?user_id=123%2C456\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildLookupUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Lookup.ToString() },\n                    //{ \"ScreenName\", \"twitter,joemayo\" }\n                };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n                 \n            Assert.Equal(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_FriendsList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/list.json?user_id=1&screen_name=abc&count=20&cursor=def&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"def\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildFriendListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.FriendsList.ToString() },\n                    //{ \"UserID\", \"1\" },\n                    //{ \"ScreenName\", \"abc\" }\n                };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_FollowersList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/list.json?user_id=1&screen_name=abc&count=20&cursor=def&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FollowersList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"def\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildFollowerListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.FriendsList.ToString() },\n                    //{ \"UserID\", \"1\" },\n                    //{ \"ScreenName\", \"abc\" }\n                };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        const string LookupResponse = @\"[\n   {\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"connections\"\":[\n         \"\"following\"\"\n      ],\n      \"\"id\"\":15411837\n   }\n]\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false\n      }\n   }\n}\";\n\n        const string IdsResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"ids\"\":[\n      5676142\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":1\n}\";\n\n        const string NoRetweetIDsResponse = @\"[\n15411837,\n241594327\n]\";\n\n        const string FreindsFollowersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":93604443,\n         \"\"id_str\"\":\"\"93604443\"\",\n         \"\"name\"\":\"\"Geert van Horrik\"\",\n         \"\"screen_name\"\":\"\"GeertvanHorrik\"\",\n         \"\"location\"\":\"\"Heeze, The Netherlands\"\",\n         \"\"description\"\":\"\"Software Developer and creator of the Catel MVVM framework (see http:\\/\\/catel.codeplex.com)\"\",\n         \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        27\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":212,\n         \"\"friends_count\"\":97,\n         \"\"listed_count\"\":12,\n         \"\"created_at\"\":\"\"Mon Nov 30 10:32:19 +0000 2009\"\",\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":3600,\n         \"\"time_zone\"\":\"\"Amsterdam\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":4431,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 11:10:16 +0000 2012\"\",\n            \"\"id\"\":280993376646598658,\n            \"\"id_str\"\":\"\"280993376646598658\"\",\n            \"\"text\"\":\"\"@FransBouma Dank, ik zocht op changes maar moest queue hebben, kan ik weer verder :-)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":280993183754768384,\n            \"\"in_reply_to_status_id_str\"\":\"\"280993183754768384\"\",\n            \"\"in_reply_to_user_id\"\":67035608,\n            \"\"in_reply_to_user_id_str\"\":\"\"67035608\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"FransBouma\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"FransBouma\"\",\n                     \"\"name\"\":\"\"Frans Bouma\"\",\n                     \"\"id\"\":67035608,\n                     \"\"id_str\"\":\"\"67035608\"\",\n                     \"\"indices\"\":[\n                        0,\n                        11\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":389487039,\n         \"\"id_str\"\":\"\"389487039\"\",\n         \"\"name\"\":\"\"Elizabeth Hulett\"\",\n         \"\"screen_name\"\":\"\"EHulett\"\",\n         \"\"location\"\":\"\"Defuniak Springs\"\",\n         \"\"description\"\":\"\"\"\",\n         \"\"url\"\":null,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":4,\n         \"\"friends_count\"\":10,\n         \"\"listed_count\"\":0,\n         \"\"created_at\"\":\"\"Wed Oct 12 14:16:54 +0000 2011\"\",\n         \"\"favourites_count\"\":1,\n         \"\"utc_offset\"\":null,\n         \"\"time_zone\"\":null,\n         \"\"geo_enabled\"\":false,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":3,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Mon Dec 17 19:47:23 +0000 2012\"\",\n            \"\"id\"\":280761124901765120,\n            \"\"id_str\"\":\"\"280761124901765120\"\",\n            \"\"text\"\":\"\"Can't believe Amanda is 28weeks today.... Lily Rose will be here soon :)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/#!\\/download\\/ipad\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for iPad\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":608455311,\n         \"\"id_str\"\":\"\"608455311\"\",\n         \"\"name\"\":\"\"\\/\\/ mellodev\"\",\n         \"\"screen_name\"\":\"\"mellodev\"\",\n         \"\"location\"\":\"\"Las Vegas, NV\"\",\n         \"\"description\"\":\"\".Net aficionado and Software craftsman. C#, Asp.Net, TSQL, Quartz.Net, WebForms, MVC + WP7. I build Social Office Suite (@SOS) and tweet about #DevLife\"\",\n         \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        46\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":355,\n         \"\"friends_count\"\":1373,\n         \"\"listed_count\"\":20,\n         \"\"created_at\"\":\"\"Thu Jun 14 18:32:56 +0000 2012\"\",\n         \"\"favourites_count\"\":109,\n         \"\"utc_offset\"\":-28800,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":1272,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 21:05:14 +0000 2012\"\",\n            \"\"id\"\":281143104046768129,\n            \"\"id_str\"\":\"\"281143104046768129\"\",\n            \"\"text\"\":\"\"@adamralph Nice background btw! Can't wait to go riding this year!\"\",\n            \"\"source\"\":\"\"web\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":281141527877652480,\n            \"\"in_reply_to_status_id_str\"\":\"\"281141527877652480\"\",\n            \"\"in_reply_to_user_id\"\":5966642,\n            \"\"in_reply_to_user_id_str\"\":\"\"5966642\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"adamralph\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"adamralph\"\",\n                     \"\"name\"\":\"\"Adam Ralph\"\",\n                     \"\"id\"\":5966642,\n                     \"\"id_str\"\":\"\"5966642\"\",\n                     \"\"indices\"\":[\n                        0,\n                        10\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"191134\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/608455311\\/1348679711\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":1412318031598699496,\n   \"\"next_cursor_str\"\":\"\"1412318031598699496\"\",\n   \"\"previous_cursor\"\":0,\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/GeoTests/CoordinateTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing LitJson;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.GeoTests\n{\n    public class CoordinateTests\n    {\n        public CoordinateTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Coordinate_Ctor_Parses_JsonData()\n        {\n            var coordJson = JsonMapper.ToObject(CoordinateJson);\n\n            var coord = new Coordinate(coordJson);\n\n            Assert.Equal(-122.51368188, coord.Longitude);\n            Assert.Equal(37.70813196, coord.Latitude);\n        }\n\n        [Fact]\n        public void Coordinate_Ctor_Returns_Null_JsonData()\n        {\n            var coord = new Coordinate(null);\n\n            Assert.Equal(0, coord.Longitude);\n            Assert.Equal(0, coord.Latitude);\n        }\n\n        const string CoordinateJson = @\"[\n                              -122.51368188,\n                              37.70813196\n                           ]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/GeoTests/GeoRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.GeoTests\n{\n    public class GeoRequestProcessorTests\n    {\n        public GeoRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Parses_Parameters()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n            Expression<Func<Geo, bool>> expression =\n                geo =>\n                    geo.Type == GeoType.Reverse &&\n                    geo.Accuracy == \"10\" &&\n                    geo.Granularity == \"city\" &&\n                    geo.Latitude == 37.78215 &&\n                    geo.Longitude == -122.40060 &&\n                    geo.MaxResults == 10 &&\n                    geo.ID == \"456\" &&\n                    geo.IP == \"168.143.171.180\" &&\n                    geo.Query == \"place\" &&\n                    geo.ContainedWithin == \"abc\" &&\n                    geo.Attribute == \"street_address=123\" &&\n                    geo.PlaceName == \"placeName\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = geoReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)GeoType.Reverse).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Accuracy\", \"10\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Granularity\", \"city\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", (37.78215).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", (-122.4006).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxResults\", \"10\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IP\", \"168.143.171.180\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"place\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ContainedWithin\", \"abc\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Attribute\", \"street_address=123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PlaceName\", \"placeName\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Reverse_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/reverse_geocode.json?lat=37.78215&long=-122.4006&accuracy=city&granularity=10&max_results=10\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_ReverseL_Without_LatLong_Throws()\n        {\n            const string ExpectedLatLongParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            var ex = Assert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedLatLongParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_ID_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/id/7695dd2ec2f86f2b.json\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n                 {\"ID\", \"7695dd2ec2f86f2b\"},\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_ID_Without_ID_Throws()\n        {\n            const string ExpectedIDParamName = \"ID\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n             };\n\n            var ex = Assert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedIDParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?lat=37.78215&long=-122.4006&query=Twitter%20HQ&ip=168.143.171.180&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Search_With_Attribute_Missing_Equals_Symbol_Throws()\n        {\n            const string ExpectedAttributeParam = \"Attribute\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Attribute\", \"street_address\" }\n             };\n\n             var ex = Assert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n             Assert.Equal(ExpectedAttributeParam, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Similar_Places_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/similar_places.json?lat=37.78215&long=-122.4006&name=placeName&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_For_Similar_Places_Requires_Lat_And_Long()\n        {\n            const string ExpectedParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 //{\"Latitude\", \"37.78215\"},\n                 //{\"Longitude\", \"-122.40060\"},\n                 {\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            var ex = Assert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_For_Similar_Places_Requires_PlaceName()\n        {\n            const string ExpectedParamName = \"PlaceName\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 //{\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            var ex = Assert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void GeoRequestProcessor_Processes_Json_Format_Responses()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(geoReqProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_ReverseGeoCode_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            List<Geo> geo = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.NotNull(geo);\n            Assert.Single(geo);\n            Assert.NotNull(geo.Single().Places);\n            Assert.Equal(ExpectedPlacesCount, geo.Single().Places.Count);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_ID_Response()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponse);\n\n            Assert.NotNull(geo);\n            Assert.Single(geo);\n            Assert.NotNull(geo.Single().Places);\n            Assert.Equal(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Search_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            const string ExpectedPlaceFullName = \"SoMa, San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.Search };\n\n            List<Geo> geo = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.NotNull(geo);\n            Assert.Single(geo);\n            Assert.NotNull(geo.Single().Places);\n            Assert.Equal(ExpectedPlacesCount, geo.Single().Places.Count);\n            Assert.Equal(ExpectedPlaceFullName, geo.Single().Places.First().FullName);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Simlar_Places_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            const string ExpectedPlaceFullName = \"SoMa, San Francisco\";\n            const string ExpectedToken = \"15f3c6f2b94ba19faee70d9d61aaebee\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.SimilarPlaces };\n\n            List<Geo> geoResponse = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.NotNull(geoResponse);\n            Assert.Single(geoResponse);\n            var geo = geoResponse.Single();\n            Assert.Equal(ExpectedToken, geo.Token);\n            var places = geo.Places;\n            Assert.NotNull(places);\n            Assert.Equal(ExpectedPlacesCount, places.Count);\n            Assert.Equal(ExpectedPlaceFullName, places.First().FullName);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var geo = geoReqProc.ProcessResults(string.Empty);\n\n            Assert.NotNull(geo);\n            Assert.Empty(geo);\n        }\n\n        const string MultiPlaceResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"token\"\":\"\"15f3c6f2b94ba19faee70d9d61aaebee\"\",\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n\n        const string IDResponse = @\"{\n   \"\"country\"\":\"\"United States\"\",\n   \"\"place_type\"\":\"\"city\"\",\n   \"\"name\"\":\"\"San Francisco\"\",\n   \"\"geometry\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.46628284,\n               37.70813196\n            ],\n            [\n               -122.47088292,\n               37.70823204\n            ],\n            [\n               -122.48518284,\n               37.71123201\n            ],\n            [\n               -122.48948304,\n               37.712232\n            ],\n            [\n               -122.497983,\n               37.71713196\n            ],\n            [\n               -122.49978012,\n               37.71960696\n            ],\n            [\n               -122.50198296,\n               37.723131\n            ],\n            [\n               -122.50787796,\n               37.73529\n            ],\n            [\n               -122.51368188,\n               37.77856803\n            ],\n            [\n               -122.51305692,\n               37.78252398\n            ],\n            [\n               -122.47808292,\n               37.81082799\n            ],\n            [\n               -122.47738308,\n               37.81102797\n            ],\n            [\n               -122.37322716,\n               37.83245301\n            ],\n            [\n               -122.36652288,\n               37.83081303\n            ],\n            [\n               -122.365395,\n               37.82917296\n            ],\n            [\n               -122.36177592,\n               37.82153403\n            ],\n            [\n               -122.35845384,\n               37.81450503\n            ],\n            [\n               -122.377842,\n               37.72782\n            ],\n            [\n               -122.38322616,\n               37.70940303\n            ],\n            [\n               -122.39378208,\n               37.70823096\n            ],\n            [\n               -122.43398184,\n               37.70813196\n            ],\n            [\n               -122.46628284,\n               37.70813196\n            ]\n         ]\n      ]\n   },\n   \"\"bounding_box\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.51368188,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.83245301\n            ],\n            [\n               -122.51368188,\n               37.83245301\n            ]\n         ]\n      ]\n   },\n   \"\"attributes\"\":{\n      \"\"189390:id\"\":\"\"san-francisco-ca\"\",\n      \"\"162772:pop100\"\":\"\"776733\"\",\n      \"\"162772:place_id\"\":\"\"0667000\"\"\n   },\n   \"\"full_name\"\":\"\"San Francisco, CA\"\",\n   \"\"polylines\"\":[\n      \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n   ],\n   \"\"country_code\"\":\"\"US\"\",\n   \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n   \"\"id\"\":\"\"5a110d312052166f\"\",\n   \"\"contained_within\"\":[\n      {\n         \"\"country\"\":\"\"United States\"\",\n         \"\"place_type\"\":\"\"admin\"\",\n         \"\"name\"\":\"\"California\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -124.482003,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     42.009517\n                  ],\n                  [\n                     -124.482003,\n                     42.009517\n                  ]\n               ]\n            ]\n         },\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"California, US\"\",\n         \"\"country_code\"\":\"\"US\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n         \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n      }\n   ]\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/GeoTests/GeoTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing LitJson;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.GeoTests\n{\n    public class GeoTests\n    {\n        public GeoTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Geo_Ctor_Parses_JsonData()\n        {\n            var geoJson = JsonMapper.ToObject(ReverseResponse);\n\n            var geo = new Geo(geoJson);\n\n            Assert.NotNull(geo.Places);\n            var places = geo.Places;\n            Assert.Equal(4, places.Count);\n            Assert.Equal(\"neighborhood\", places.First().PlaceType);\n        }\n\n        [Fact]\n        public void Geo_Ctor_Returns_On_Null_JsonData()\n        {\n            var geo = new Geo((JsonData)null);\n\n            Assert.Null(geo.Places);\n        }\n\n        const string ReverseResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/GeoTests/GeometryTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing LitJson;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.GeoTests\n{\n    public class GeometryTests\n    {\n        public GeometryTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Geometry_Ctor_Parses_JsonData()\n        {\n            var geometryJson = JsonMapper.ToObject(GeometryJson);\n\n            var geometry = new Geometry(geometryJson);\n\n            Assert.Equal(\"Polygon\", geometry.Type);\n            Assert.NotNull(geometry.Coordinates);\n            Assert.Equal(4, geometry.Coordinates.Count);\n            Coordinate coord = geometry.Coordinates.First();\n            Assert.Equal(-122.51368188, coord.Longitude);\n            Assert.Equal(37.70813196, coord.Latitude);\n        }\n\n        [Fact]\n        public void Geometry_Ctor_Returns_On_Null_JsonData()\n        {\n            var geometry = new Geometry(null);\n\n            Assert.Equal(null, geometry.Type);\n        }\n\n        const string GeometryJson = @\"{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  }\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/GeoTests/PlaceTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing LitJson;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.GeoTests\n{\n    public class PlaceTests\n    {\n        public PlaceTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Place_Ctor_Parses_JsonData()\n        {\n            const string ExpectedPolyLine = \"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\";\n            var placeJson = JsonMapper.ToObject(PlaceJson);\n\n            var place = new Place(placeJson);\n\n            Assert.NotNull(place.ContainedWithin);\n            Assert.Equal(\"United States\", place.ContainedWithin.Country);\n\n            Assert.Equal(\"neighborhood\", place.PlaceType);\n            Assert.Equal(\"United States\", place.Country);\n            Assert.Equal(\"SoMa\", place.Name);\n            Assert.Equal(\"SoMa, San Francisco\", place.FullName);\n\n            Assert.NotNull(place.Attributes);\n            var attrDict = place.Attributes;\n            Assert.Equal(3, attrDict.Count);\n            Assert.Equal(attrDict[\"street_address\"], \"795 Folsom St\");\n            Assert.Equal(attrDict[\"623:id\"], \"210176\");\n            Assert.Equal(attrDict[\"twitter\"], \"JoeMayo\");\n\n            Assert.NotNull(place.BoundingBox);\n            Assert.Equal(\"Polygon\", place.BoundingBox.Type);\n\n            Assert.Equal(\"US\", place.CountryCode);\n            Assert.Equal(\"http://api.twitter.com/1/geo/id/2b6ff8c22edd9576.json\", place.Url);\n            Assert.Equal(\"2b6ff8c22edd9576\", place.ID);\n\n            Assert.NotNull(place.PolyLines);\n            Assert.Single(place.PolyLines);\n            Assert.Equal(ExpectedPolyLine, place.PolyLines.First());\n        }\n\n        [Fact]\n        public void Place_Ctor_Returns_On_Null_JsonData()\n        {\n            var place = new Place(null);\n\n            Assert.Null(place.Country);\n        }\n\n        const string PlaceJson = @\"{\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"polylines\"\":[\n               \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n            ],\n            \"\"attributes\"\":{\n               \"\"street_address\"\": \"\"795 Folsom St\"\",\n                \"\"623:id\"\": \"\"210176\"\",\n                \"\"twitter\"\": \"\"JoeMayo\"\"\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/HelpTests/HelpRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.HelpTests\n{\n    public class HelpRequestProcessorTests\n    {\n        public HelpRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Parses_Parameters()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n            Expression<Func<Help, bool>> expression =\n                help =>\n                    help.Type == HelpType.RateLimits &&\n                    help.Resources == \"search\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = helpReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)HelpType.RateLimits).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Resources\", \"search\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Generates_Configuration_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/configuration.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Configuration).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Generates_Languages_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/languages.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Languages).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Generates_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search,users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Removes_Parameter_Spaces_In_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search, users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_With_No_Type()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"Type\", ((int) HelpType.Languages).ToString()}\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => helpReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void HelpRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(helpReqProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Configuration_Results()\n        {\n            const int ExpectedCharsRsvpPerMedia = 21;\n            const int ExpectedPhotoSizesCount = 4;\n            const string ExpectedPhotoSizeType = \"thumb\";\n            const int ExpectedPhotoSizeHeight = 150;\n            const int ExpectedPhotoSizeWidth = 150;\n            const string ExpectedPhotoSizeResize = \"crop\";\n            const int ExpectedShortUrlLength = 20;\n            const int ExpectedPhotoSizeLimit = 3145728;\n            const int ExpectedNonUsernamePathsCount = 82;\n            const string ExpectedNonUsernamePathsFirstItem = \"about\";\n            const int ExpectedMaxMediaPerUpload = 1;\n            const int ExpectedShortUrlLengthHttps = 21;\n            var helpReqProc = new HelpRequestProcessor<Help> \n            {\n                Type = HelpType.Configuration,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpConfigurationResponse);\n\n            Assert.NotNull(helpList);\n            Assert.Single(helpList);\n            Help help = helpList.Single();\n            Assert.Equal(HelpType.Configuration, help.Type);\n            Assert.NotNull(help.Configuration);\n            Configuration config = help.Configuration;\n            Assert.Equal(ExpectedCharsRsvpPerMedia, config.CharactersReservedPerMedia);\n            List<PhotoSize> photoSizes = config.PhotoSizes;\n            Assert.NotNull(photoSizes);\n            Assert.Equal(ExpectedPhotoSizesCount, photoSizes.Count);\n            PhotoSize photoSize = photoSizes.First();\n            Assert.Equal(ExpectedPhotoSizeType, photoSize.Type);\n            Assert.Equal(ExpectedPhotoSizeHeight, photoSize.Height);\n            Assert.Equal(ExpectedPhotoSizeWidth, photoSize.Width);\n            Assert.Equal(ExpectedPhotoSizeResize, photoSize.Resize);\n            Assert.Equal(ExpectedShortUrlLength, config.ShortUrlLength);\n            Assert.Equal(ExpectedPhotoSizeLimit, config.PhotoSizeLimit);\n            List<string> nonUsernamePaths = config.NonUserNamePaths;\n            Assert.NotNull(nonUsernamePaths);\n            Assert.Equal(ExpectedNonUsernamePathsCount, nonUsernamePaths.Count);\n            Assert.Equal(ExpectedNonUsernamePathsFirstItem, nonUsernamePaths.First());\n            Assert.Equal(ExpectedMaxMediaPerUpload, config.MaxMediaPerUpload);\n            Assert.Equal(ExpectedShortUrlLengthHttps, config.ShortUrlLengthHttps);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Languages_Results()\n        {\n            const int ExpectedLanguagesCount = 28;\n            const string ExpectedLanguageName = \"Hungarian\";\n            const string ExpectedLanguageStatus = \"production\";\n            const string ExpectedLanguageCode = \"hu\";\n            var helpReqProc = new HelpRequestProcessor<Help> \n            {\n                Type = HelpType.Languages,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpLanguagesXml);\n\n            Assert.NotNull(helpList);\n            Assert.Single(helpList);\n            Help help = helpList.Single();\n            Assert.Equal(HelpType.Languages, help.Type);\n            List<Language> languages = help.Languages;\n            Assert.NotNull(languages);\n            Assert.Equal(ExpectedLanguagesCount, languages.Count);\n            Language language = languages.First();\n            Assert.Equal(ExpectedLanguageName, language.Name);\n            Assert.Equal(ExpectedLanguageStatus, language.Status);\n            Assert.Equal(ExpectedLanguageCode, language.Code);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_RateLimits_Results()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>\n            {\n                Type = HelpType.RateLimits,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(RateLimitsResponse);\n\n            Assert.NotNull(helpList);\n            Assert.Single(helpList);\n            Help help = helpList.Single();\n            Assert.Equal(HelpType.RateLimits, help.Type);\n            Assert.Equal(\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\", help.RateLimitAccountContext);\n            Assert.NotNull(help.RateLimits);\n            Assert.NotEmpty(help.RateLimits);\n            Dictionary<string, List<RateLimits>> rateLimits = help.RateLimits;\n            Assert.True(rateLimits.ContainsKey(\"lists\"));\n            List<RateLimits> limitsList = rateLimits[\"lists\"];\n            Assert.NotNull(limitsList);\n            Assert.NotEmpty(limitsList);\n            RateLimits limits = limitsList.First();\n            Assert.NotNull(limits);\n            Assert.Equal(\"/lists/subscriptions\", limits.Resource);\n            Assert.Equal(15, limits.Limit);\n            Assert.Equal(15, limits.Remaining);\n            Assert.Equal(1348087186ul, limits.Reset);\n        }\n\n        const string HelpConfigurationResponse = @\"{\n   \"\"characters_reserved_per_media\"\":21,\n   \"\"photo_sizes\"\":{\n      \"\"thumb\"\":{\n         \"\"h\"\":150,\n         \"\"w\"\":150,\n         \"\"resize\"\":\"\"crop\"\"\n      },\n      \"\"small\"\":{\n         \"\"h\"\":480,\n         \"\"w\"\":340,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"large\"\":{\n         \"\"h\"\":2048,\n         \"\"w\"\":1024,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"medium\"\":{\n         \"\"h\"\":1200,\n         \"\"w\"\":600,\n         \"\"resize\"\":\"\"fit\"\"\n      }\n   },\n   \"\"short_url_length\"\":20,\n   \"\"photo_size_limit\"\":3145728,\n   \"\"non_username_paths\"\":[\n      \"\"about\"\",\n      \"\"account\"\",\n      \"\"accounts\"\",\n      \"\"activity\"\",\n      \"\"all\"\",\n      \"\"announcements\"\",\n      \"\"anywhere\"\",\n      \"\"api_rules\"\",\n      \"\"api_terms\"\",\n      \"\"apirules\"\",\n      \"\"apps\"\",\n      \"\"auth\"\",\n      \"\"badges\"\",\n      \"\"blog\"\",\n      \"\"business\"\",\n      \"\"buttons\"\",\n      \"\"contacts\"\",\n      \"\"devices\"\",\n      \"\"direct_messages\"\",\n      \"\"download\"\",\n      \"\"downloads\"\",\n      \"\"edit_announcements\"\",\n      \"\"faq\"\",\n      \"\"favorites\"\",\n      \"\"find_sources\"\",\n      \"\"find_users\"\",\n      \"\"followers\"\",\n      \"\"following\"\",\n      \"\"friend_request\"\",\n      \"\"friendrequest\"\",\n      \"\"friends\"\",\n      \"\"goodies\"\",\n      \"\"help\"\",\n      \"\"home\"\",\n      \"\"im_account\"\",\n      \"\"inbox\"\",\n      \"\"invitations\"\",\n      \"\"invite\"\",\n      \"\"jobs\"\",\n      \"\"list\"\",\n      \"\"login\"\",\n      \"\"logout\"\",\n      \"\"me\"\",\n      \"\"mentions\"\",\n      \"\"messages\"\",\n      \"\"mockview\"\",\n      \"\"newtwitter\"\",\n      \"\"notifications\"\",\n      \"\"nudge\"\",\n      \"\"oauth\"\",\n      \"\"phoenix_search\"\",\n      \"\"positions\"\",\n      \"\"privacy\"\",\n      \"\"public_timeline\"\",\n      \"\"related_tweets\"\",\n      \"\"replies\"\",\n      \"\"retweeted_of_mine\"\",\n      \"\"retweets\"\",\n      \"\"retweets_by_others\"\",\n      \"\"rules\"\",\n      \"\"saved_searches\"\",\n      \"\"search\"\",\n      \"\"sent\"\",\n      \"\"settings\"\",\n      \"\"share\"\",\n      \"\"signup\"\",\n      \"\"signin\"\",\n      \"\"similar_to\"\",\n      \"\"statistics\"\",\n      \"\"terms\"\",\n      \"\"tos\"\",\n      \"\"translate\"\",\n      \"\"trends\"\",\n      \"\"tweetbutton\"\",\n      \"\"twttr\"\",\n      \"\"update_discoverability\"\",\n      \"\"users\"\",\n      \"\"welcome\"\",\n      \"\"who_to_follow\"\",\n      \"\"widgets\"\",\n      \"\"zendesk_auth\"\",\n      \"\"media_signup\"\"\n   ],\n   \"\"max_media_per_upload\"\":1,\n   \"\"short_url_length_https\"\":21\n}\";\n\n        const string HelpLanguagesXml = @\"[\n   {\n      \"\"name\"\":\"\"Hungarian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hu\"\"\n   },\n   {\n      \"\"name\"\":\"\"Finnish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fi\"\"\n   },\n   {\n      \"\"name\"\":\"\"Swedish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"sv\"\"\n   },\n   {\n      \"\"name\"\":\"\"Norwegian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"no\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hebrew\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"he\"\"\n   },\n   {\n      \"\"name\"\":\"\"Korean\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ko\"\"\n   },\n   {\n      \"\"name\"\":\"\"Portuguese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pt\"\"\n   },\n   {\n      \"\"name\"\":\"\"French\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fr\"\"\n   },\n   {\n      \"\"name\"\":\"\"German\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"de\"\"\n   },\n   {\n      \"\"name\"\":\"\"Arabic\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ar\"\"\n   },\n   {\n      \"\"name\"\":\"\"Russian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ru\"\"\n   },\n   {\n      \"\"name\"\":\"\"Dutch\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"nl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Indonesian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"id\"\"\n   },\n   {\n      \"\"name\"\":\"\"Traditional Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-tw\"\"\n   },\n   {\n      \"\"name\"\":\"\"Italian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"it\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hindi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hi\"\"\n   },\n   {\n      \"\"name\"\":\"\"English\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"en\"\"\n   },\n   {\n      \"\"name\"\":\"\"Filipino\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fil\"\"\n   },\n   {\n      \"\"name\"\":\"\"Japanese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ja\"\"\n   },\n   {\n      \"\"name\"\":\"\"Thai\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"th\"\"\n   },\n   {\n      \"\"name\"\":\"\"Urdu\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ur\"\"\n   },\n   {\n      \"\"name\"\":\"\"Polish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Simplified Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-cn\"\"\n   },\n   {\n      \"\"name\"\":\"\"Turkish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"tr\"\"\n   },\n   {\n      \"\"name\"\":\"\"Farsi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Danish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"da\"\"\n   },\n   {\n      \"\"name\"\":\"\"Malay\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"msa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Spanish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"es\"\"\n   }\n]\";\n\n        const string RateLimitsResponse = @\"{\n   \"\"rate_limit_context\"\":{\n      \"\"access_token\"\":\"\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\"\"\n   },\n   \"\"resources\"\":{\n      \"\"lists\"\":{\n         \"\"/lists/subscriptions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/memberships\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/statuses\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friendships\"\":{\n         \"\"/friendships/incoming\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/lookup\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/outgoing\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"blocks\"\":{\n         \"\"/blocks/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/blocks/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"geo\"\":{\n         \"\"/geo/id/:place_id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/reverse_geocode\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/search\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/similar_places\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"users\"\":{\n         \"\"/users/suggestions/:slug/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/search\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/show\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributees\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributors\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/lookup\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions/:slug\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"followers\"\":{\n         \"\"/followers/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"statuses\"\":{\n         \"\"/statuses/home_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/mentions_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/show/:id\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/retweets/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/user_timeline\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/oembed\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"help\"\":{\n         \"\"/help/privacy\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/tos\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/configuration\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/languages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friends\"\":{\n         \"\"/friends/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"direct_messages\"\":{\n         \"\"/direct_messages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/sent\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"account\"\":{\n         \"\"/account/verify_credentials\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/account/settings\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"favorites\"\":{\n         \"\"/favorites/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"saved_searches\"\":{\n         \"\"/saved_searches/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/saved_searches/show/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"search\"\":{\n         \"\"/search/tweets\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"trends\"\":{\n         \"\"/trends/available\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/closest\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/place\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/LinqToTwitterTests/TwitterContextCreateRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.LinqToTwitterTests\n{\n    public class TwitterContextCreateRequestProcessorTests\n    {\n        public TwitterContextCreateRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void CreateRequestProcessor_Returns_StatusRequestProcessor()\n        {\n            ITwitterAuthorizer auth = new Mock<ITwitterAuthorizer>().Object;\n\n            var reqProc = new TwitterContext(auth).CreateRequestProcessor<Status>();\n\n            Assert.IsType<StatusRequestProcessor<Status>>(reqProc);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/LinqToTwitterTests/TwitterContextTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class TwitterContextTests\n    {\n        ITwitterAuthorizer auth;\n\n        public TwitterContextTests()\n        {\n            TestCulture.SetCulture();\n            auth = new Mock<ITwitterAuthorizer>().Object;\n        }\n\n        void InitializeTwitterContextForExecuteTest(out TwitterContext ctx, out Expression expression)\n        {\n            var exec = new Mock<ITwitterExecute>();\n            exec.Setup(exc => exc.QueryTwitter(It.IsAny<Request>(), It.IsAny<IRequestProcessor<Status>>()))\n                .Returns(SingleStatusResponse);\n\n            ctx = new TwitterContext(exec.Object);\n            var publicQuery =\n                from tweet in ctx.Status\n                where tweet.Type == StatusType.Show\n                select tweet;\n\n            expression = publicQuery.Expression;\n        }\n\n        [Fact]\n        public void TwitterContext_Single_Param_Constructor_Sets_Defaults()\n        {\n            const string BaseUrl = \"https://api.twitter.com/1.1/\";\n            const string SearchUrl = \"https://api.twitter.com/1.1/search/\";\n            ITwitterAuthorizer authorizedClient = new PinAuthorizer();\n            var ctx = new TwitterContext(authorizedClient);\n\n            Assert.Same(authorizedClient, ctx.AuthorizedClient);\n            Assert.Equal(BaseUrl, ctx.BaseUrl);\n            Assert.Equal(SearchUrl, ctx.SearchUrl);\n        }\n\n        [Fact]\n        public void TwitterContext_1_Param_Requres_NonNull_Authorization()\n        {\n            var ex = Assert.Throws<ArgumentNullException>(() => new TwitterContext((PinAuthorizer)null));\n\n            Assert.Equal(\"authorizedClient\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TwitterContext_Requres_NonNull_Executor()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n\n            var ex = Assert.Throws<ArgumentNullException>(() => new TwitterContext((ITwitterExecute)null));\n\n            Assert.Equal(\"execute\", ex.ParamName);\n        }\n\n        [Fact]\n        public void CreateRequestProcessor_Returns_ProperRequestProcessor()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var showQuery =\n                from tweet in ctx.Status\n                where tweet.Type == StatusType.Show\n                select tweet;\n\n            var statusProc = ctx.CreateRequestProcessor<Status>(showQuery.Expression);\n            Assert.IsType(typeof(StatusRequestProcessor<Status>), statusProc);\n        }\n\n        [Fact]\n        public void CreateStatusRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Status select tweet;\n\n            IRequestProcessor<Status> actual = ctx.CreateRequestProcessor<Status>(queryResult.Expression);\n            Assert.IsType(typeof(StatusRequestProcessor<Status>), actual);\n        }\n\n        [Fact]\n        public void CreateAccountRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Account select tweet;\n\n            IRequestProcessor<Account> actual = ctx.CreateRequestProcessor<Account>(queryResult.Expression);\n            Assert.IsType(typeof(AccountRequestProcessor<Account>), actual);\n        }\n\n        [Fact]\n        public void CreateBlocksRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Blocks select tweet;\n\n            IRequestProcessor<Blocks> actual = ctx.CreateRequestProcessor<Blocks>(queryResult.Expression);\n            Assert.IsType(typeof(BlocksRequestProcessor<Blocks>), actual);\n        }\n\n        [Fact]\n        public void CreateDirectMessageRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.DirectMessage select tweet;\n\n            IRequestProcessor<DirectMessage> actual = ctx.CreateRequestProcessor<DirectMessage>(queryResult.Expression);\n            Assert.IsType(typeof(DirectMessageRequestProcessor<DirectMessage>), actual);\n        }\n\n        [Fact]\n        public void CreateFavoritesRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Favorites select tweet;\n\n            IRequestProcessor<Favorites> actual = ctx.CreateRequestProcessor<Favorites>(queryResult.Expression);\n            Assert.IsType(typeof(FavoritesRequestProcessor<Favorites>), actual);\n        }\n\n        [Fact]\n        public void CreateFriendshipRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Friendship select tweet;\n\n            IRequestProcessor<Friendship> actual = ctx.CreateRequestProcessor<Friendship>(queryResult.Expression);\n            Assert.IsType(typeof(FriendshipRequestProcessor<Friendship>), actual);\n        }\n\n        [Fact]\n        public void CreateSearchRequestProcessor_Returns_RawRequestProcessor()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from raw in ctx.RawQuery select raw;\n\n            IRequestProcessor<Raw> actual = ctx.CreateRequestProcessor<Raw>(queryResult.Expression);\n            Assert.IsType(typeof(RawRequestProcessor<Raw>), actual);\n        }\n\n        [Fact]\n        public void CreateSearchRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Search select tweet;\n\n            IRequestProcessor<Search> actual = ctx.CreateRequestProcessor<Search>(queryResult.Expression);\n            Assert.IsType(typeof(SearchRequestProcessor<Search>), actual);\n        }\n\n        [Fact]\n        public void CreateSocialGraphRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.SocialGraph select tweet;\n\n            IRequestProcessor<SocialGraph> actual = ctx.CreateRequestProcessor<SocialGraph>(queryResult.Expression);\n            Assert.IsType(typeof(SocialGraphRequestProcessor<SocialGraph>), actual);\n        }\n\n        [Fact]\n        public void CreateTrendRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.Trends select tweet;\n\n            IRequestProcessor<Trend> actual = ctx.CreateRequestProcessor<Trend>(queryResult.Expression);\n            Assert.IsType(typeof(TrendRequestProcessor<Trend>), actual);\n        }\n\n        [Fact]\n        public void CreateUserRequestProcessorTest()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var queryResult = from tweet in ctx.User select tweet;\n\n            IRequestProcessor<User> actual = ctx.CreateRequestProcessor<User>(queryResult.Expression);\n            Assert.IsType(typeof(UserRequestProcessor<User>), actual);\n        }\n\n        [Fact]\n        public void CreateRequestProcessorNullExpressionTest1()\n        {\n            var ctx = new TwitterContext(auth);\n\n            var ex = Assert.Throws<ArgumentNullException>(() => ctx.CreateRequestProcessor<Status>((Expression)null));\n\n            Assert.Equal(\"Expression\", ex.ParamName);\n        }\n\n        [Fact]\n        public void CreateRequestProcessor_Returns_RelatedResultsRequestProcessor()\n        {\n            var ctx = new TwitterContext(auth) {BaseUrl = \"https://api.twitter.com/1.1/\"};\n            var execMock = new Mock<ITwitterExecute>();\n            ctx.TwitterExecutor = execMock.Object;\n            var resultsQuery =\n                from tweet in ctx.RelatedResults\n                where tweet.Type == RelatedResultsType.Show\n                select tweet;\n\n            var reqProc = ctx.CreateRequestProcessor<RelatedResults>(resultsQuery.Expression);\n\n            Assert.IsType(typeof(RelatedResultsRequestProcessor<RelatedResults>), reqProc);\n            Assert.Equal(\"https://api.twitter.com/1.1/\", reqProc.BaseUrl);\n        }\n\n        [Fact]\n        public void Execute_Returns_List_Of_Status()\n        {\n            TwitterContext ctx;\n            Expression expression;\n            InitializeTwitterContextForExecuteTest(out ctx, out expression);\n            ctx.Log = new DebuggerWriter();\n\n            var actual = ctx.Execute<Status>(expression, true);\n\n            var tweets = actual as IEnumerable<Status>;\n            Assert.NotNull(tweets);\n            Assert.True(tweets.Any());\n        }\n\n        [Fact]\n        public void Execute_Logs_Results()\n        {\n            TwitterContext ctx;\n            Expression expression;\n            InitializeTwitterContextForExecuteTest(out ctx, out expression);\n\n            var actual = ctx.Execute<Status>(expression, true);\n\n            var tweets = actual as IEnumerable<Status>;\n            Assert.NotNull(tweets);\n            Assert.True(tweets.Any());\n        }\n  \n        [Fact]\n        public void Execute_Sets_RawResults_Property()\n        {\n            TwitterContext ctx;\n            Expression expression;\n            InitializeTwitterContextForExecuteTest(out ctx, out expression);\n\n            ctx.Execute<Status>(expression, true);\n\n            Assert.Equal(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [Fact]\n        public void CreateRequestProcessor_Returns_StreamingRequestProcessor()\n        {\n            var ctx = new TwitterContext(auth) {StreamingUrl = \"https://stream.twitter.com/1/\"};\n            var execMock = new Mock<ITwitterExecute>();\n            ctx.TwitterExecutor = execMock.Object;\n            var streamingQuery =\n                from tweet in ctx.Streaming\n                where tweet.Type == StreamingType.Sample\n                select tweet;\n\n            var reqProc = ctx.CreateRequestProcessor<Streaming>(streamingQuery.Expression);\n\n            Assert.IsType(typeof(StreamingRequestProcessor<Streaming>), reqProc);\n            Assert.Equal(\"https://stream.twitter.com/1/\", reqProc.BaseUrl);\n            var streamingRequestProcessor = reqProc as StreamingRequestProcessor<Streaming>;\n            if (streamingRequestProcessor != null)\n                Assert.Equal(execMock.Object, streamingRequestProcessor.TwitterExecutor);\n        }\n\n        [Fact]\n        public void Execute_Calls_QueryTwitterStream_For_Streaming_Queries()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            var ctx = new TwitterContext(execMock.Object);\n            var streamingQuery =\n                from tweet in ctx.Streaming\n                where tweet.Type == StreamingType.Sample\n                select tweet;\n\n            ctx.Execute<Streaming>(streamingQuery.Expression, isEnumerable: true);\n\n            execMock.Verify(exec => exec.QueryTwitterStream(It.IsAny<Request>()), Times.Once());\n        }\n\n        [Fact]\n        public void Execute_Calls_QueryTwitter_InsteadOf_QueryTwitterStream_For_NonStreaming_Queries()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec => exec.QueryTwitter(It.IsAny<Request>(), It.IsAny<StatusRequestProcessor<Status>>())).Returns(SingleStatusResponse);\n            var ctx = new TwitterContext(execMock.Object);\n            var statusQuery =\n                from tweet in ctx.Status\n                where tweet.Type == StatusType.Show\n                select tweet;\n\n            ctx.Execute<Status>(statusQuery.Expression, isEnumerable: true);\n\n            execMock.Verify(exec => exec.QueryTwitterStream(It.IsAny<Request>()), Times.Never());\n            execMock.Verify(exec => exec.QueryTwitter(It.IsAny<Request>(), It.IsAny<StatusRequestProcessor<Status>>()), Times.Once());\n        }\n\n        [Fact]\n        public void CreateRequestProcessor_Returns_UserStreamRequestProcessor()\n        {\n            var ctx = new TwitterContext(auth) {StreamingUrl = \"https://userstream.twitter.com/1.1/\"};\n            var execMock = new Mock<ITwitterExecute>();\n            ctx.TwitterExecutor = execMock.Object;\n            var streamingQuery =\n                from tweet in ctx.UserStream\n                where tweet.Type == UserStreamType.User\n                select tweet;\n\n            var reqProc = ctx.CreateRequestProcessor<UserStream>(streamingQuery.Expression);\n\n            Assert.IsType(typeof(UserStreamRequestProcessor<UserStream>), reqProc);\n            var userStreamRequestProcessor = reqProc as UserStreamRequestProcessor<UserStream>;\n            if (userStreamRequestProcessor != null)\n                Assert.Equal(\"https://userstream.twitter.com/1.1/\", userStreamRequestProcessor.UserStreamUrl);\n            var streamRequestProcessor = reqProc as UserStreamRequestProcessor<UserStream>;\n            if (streamRequestProcessor != null)\n                Assert.Equal(execMock.Object, streamRequestProcessor.TwitterExecutor);\n        }\n\n        [Fact]\n        public void Execute_Calls_QueryTwitterStream_For_UserStream_Queries()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            var ctx = new TwitterContext(execMock.Object);\n            var streamingQuery =\n                from tweet in ctx.UserStream\n                where tweet.Type == UserStreamType.User\n                select tweet;\n\n            ctx.Execute<UserStream>(streamingQuery.Expression, isEnumerable: true);\n\n            execMock.Verify(exec => exec.QueryTwitterStream(It.IsAny<Request>()), Times.Once());\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/LinqToTwitterTests/TwitterContextUrlTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.LinqToTwitterTests\n{\n    public class TwitterContextUrlTests\n    {\n        ITwitterAuthorizer auth;\n\n        public TwitterContextUrlTests()\n        {\n            TestCulture.SetCulture();\n            auth = new Mock<ITwitterAuthorizer>().Object;\n        }\n\n        [Fact]\n        public void StreamingUrl_Returns_Default()\n        {\n            const string DefaultStreamingUrl = \"https://stream.twitter.com/1.1/\";\n\n            string streamingUrl = new TwitterContext(auth).StreamingUrl;\n\n            Assert.Equal(DefaultStreamingUrl, streamingUrl);\n        }\n\n        [Fact]\n        public void UserStreamUrl_Returns_Default()\n        {\n            const string DefaultUserStreamUrl = \"https://userstream.twitter.com/1.1/\";\n\n            string userStreamUrl = new TwitterContext(auth).UserStreamUrl;\n\n            Assert.Equal(DefaultUserStreamUrl, userStreamUrl);\n        }\n\n        [Fact]\n        public void SiteStreamUrl_Returns_Default()\n        {\n            const string DefaultSiteStreamUrl = \"https://sitestream.twitter.com/1.1/\";\n\n            string siteStreamUrl = new TwitterContext(auth).SiteStreamUrl;\n\n            Assert.Equal(DefaultSiteStreamUrl, siteStreamUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/LinqToTwitterTests/TwitterExecuteErrorHandlingTests.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Text;\nusing LinqToTwitter;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.LinqToTwitterTests\n{\n    public class TwitterExecuteErrorHandlingTests\n    {\n        readonly TwitterExecute twitExe;\n\n        public TwitterExecuteErrorHandlingTests()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            twitExe = new TwitterExecute(authMock.Object);\n        }\n\n        [Fact]\n        public void CheckResultsForTwitterError_Throws_On_Twitter_Error()\n        {\n            var ex = Assert.Throws<TwitterQueryException>(\n                () => twitExe.CheckResultsForTwitterError(TwitterErrorResponse, null));\n\n            Assert.Equal(34, ex.ErrorCode);\n            Assert.Equal(\"Sorry, that page does not exist\", ex.Message);\n        }\n\n        [Fact]\n        public void CheckResultsForTwitterError_Does_Not_Throw_On_No_Error()\n        {\n            Assert.DoesNotThrow(\n                () => twitExe.CheckResultsForTwitterError(NonError, null));\n        }\n\n        WebException CreateWebException(string responseContent)\n        {\n            var memStr = new MemoryStream(Encoding.UTF8.GetBytes(responseContent));\n            memStr.Position = 0;\n            var webRespMock = new Mock<WebResponse>();\n            webRespMock.Setup(resp => resp.GetResponseStream()).Returns(memStr);\n            webRespMock.Setup(resp => resp.ResponseUri).Returns(new Uri(\"http://mysite.com\"));\n            webRespMock.Setup(resp => resp.Headers).Returns(new WebHeaderCollection());\n            webRespMock.Setup(resp => resp.ContentType).Returns(\"text/plain\");\n\n            var webEx =\n                new WebException(\n                    \"Web Exception Message\", null,\n                    WebExceptionStatus.CacheEntryNotFound,\n                    webRespMock.Object);\n\n            return webEx;\n        }\n\n        [Fact]\n        public void CreateTwitterQueryException_Returns_A_TwitterQueryException()\n        {\n            var webEx = CreateWebException(TwitterErrorResponse);\n\n            var ex = twitExe.CreateTwitterQueryException(webEx);\n\n            Assert.Equal(34, ex.ErrorCode);\n            Assert.Equal(\"Sorry, that page does not exist\", ex.Message);\n            Assert.Equal(WebExceptionStatus.CacheEntryNotFound.ToString(), ex.HttpError);\n        }\n  \n        [Fact]\n        public void CreateTwitterQueryException_Returns_Default_TwitterQueryException_With_Unknown_Response()\n        {\n            var webEx = CreateWebException(\"<html><body>some html response</body></html>\");\n\n            var ex = twitExe.CreateTwitterQueryException(webEx);\n\n            Assert.Equal(0, ex.ErrorCode);\n            Assert.Equal(\"No message from Twitter\", ex.Message);\n            Assert.Equal(WebExceptionStatus.CacheEntryNotFound.ToString(), ex.HttpError);\n        }\n\n        const string NonError = \"{}\";\n\n        const string TwitterErrorResponse = \n            @\"{\"\"errors\"\":[{\"\"message\"\":\"\"Sorry, that page does not exist\"\",\"\"code\"\":34}]}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/LinqToTwitterXUnitTests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{6487F451-98B1-4911-B910-6D4AF27D7442}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitterXUnitTests</RootNamespace>\n    <AssemblyName>LinqToTwitterXUnitTests</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SccProjectName />\n    <SccLocalPath />\n    <SccAuxPath />\n    <SccProvider />\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Moq\">\n      <HintPath>..\\packages\\Moq.4.0.10827\\lib\\NET40\\Moq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"xunit, Version=1.9.0.1566, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\xunit.1.9.0.1566\\lib\\xunit.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AccountTests\\AccountExtensionsTests.cs\" />\n    <Compile Include=\"AccountTests\\AccountRequestProcessorTests.cs\" />\n    <Compile Include=\"BlocksTests\\BlocksExtensionsTests.cs\" />\n    <Compile Include=\"BlocksTests\\BlocksRequestProcessorTests.cs\" />\n    <Compile Include=\"Common\\DebuggerWriter.cs\" />\n    <Compile Include=\"Common\\OAuthTwitterMock.cs\" />\n    <Compile Include=\"Common\\TestCulture.cs\" />\n    <Compile Include=\"DirectMessageTests\\DirectMessageExtensionsTests.cs\" />\n    <Compile Include=\"DirectMessageTests\\DirectMessageRequestProcessorTests.cs\" />\n    <Compile Include=\"DirectMessageTests\\DirectMessageTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesExtensionsTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesRequestProcessorTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesCtorTests.cs\" />\n    <Compile Include=\"FriendshipTests\\FriendshipExtensionsTests.cs\" />\n    <Compile Include=\"FriendshipTests\\FriendshipRequestProcessorTests.cs\" />\n    <Compile Include=\"GeoTests\\CoordinateTests.cs\" />\n    <Compile Include=\"GeoTests\\GeometryTests.cs\" />\n    <Compile Include=\"GeoTests\\GeoRequestProcessorTests.cs\" />\n    <Compile Include=\"GeoTests\\GeoTests.cs\" />\n    <Compile Include=\"GeoTests\\PlaceTests.cs\" />\n    <Compile Include=\"HelpTests\\HelpRequestProcessorTests.cs\" />\n    <Compile Include=\"LinqToTwitterTests\\TwitterContextCreateRequestProcessorTests.cs\" />\n    <Compile Include=\"Common\\TwitterExtensionsTests.cs\" />\n    <Compile Include=\"LinqToTwitterTests\\TwitterContextTests.cs\" />\n    <Compile Include=\"LinqToTwitterTests\\TwitterExecuteErrorHandlingTests.cs\" />\n    <Compile Include=\"ListTests\\ListExtensionsTests.cs\" />\n    <Compile Include=\"ListTests\\ListRequestProcessorTests.cs\" />\n    <Compile Include=\"OAuthTests\\ApplicationOnlyAuthorizerTests.cs\" />\n    <Compile Include=\"OAuthTests\\MvcAuthorizerTests.cs\" />\n    <Compile Include=\"OAuthTests\\OAuthAuthorizerTests.cs\" />\n    <Compile Include=\"OAuthTests\\OAuthBaseTests.cs\" />\n    <Compile Include=\"OAuthTests\\OAuthTwitterTests.cs\" />\n    <Compile Include=\"OAuthTests\\PinAuthorizerTests.cs\" />\n    <Compile Include=\"OAuthTests\\SignInAuthorizerTests.cs\" />\n    <Compile Include=\"OAuthTests\\WebAuthorizerTests.cs\" />\n    <Compile Include=\"RawTests\\RawExtensionsTests.cs\" />\n    <Compile Include=\"RawTests\\RawRequestProcessorTests.cs\" />\n    <Compile Include=\"RelatedResultsTests\\RelatedResultsRequestProcessorTests.cs\" />\n    <Compile Include=\"SavedSearchTests\\SavedSearchExtensionsTests.cs\" />\n    <Compile Include=\"SavedSearchTests\\SavedSearchRequestProcessorTests.cs\" />\n    <Compile Include=\"SearchTests\\SearchRequestProcessorTests.cs\" />\n    <Compile Include=\"SerializationTests\\TypeConversionExtensionsTests.cs\" />\n    <Compile Include=\"SerializationTests\\XmlSerializerTests.cs\" />\n    <Compile Include=\"SocialGraphTests\\SocialGraphRequestProcessorTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusExtensionsTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusExtensionsTweetWithMediaNoLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusExtensionsTweetsWithMediaAndLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusExtensionsReplyWithMediaNoLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusExtensionsReplyWithMediaAndLocationTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"LinqToTwitterTests\\TwitterContextUrlTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusRequestProcessorTests.cs\" />\n    <Compile Include=\"StreamTests\\ControlStreamExtensionsTest.cs\" />\n    <Compile Include=\"StreamTests\\ControlStreamTest.cs\" />\n    <Compile Include=\"StreamTests\\StreamingRequestProcessorTests.cs\" />\n    <Compile Include=\"StreamTests\\UserStreamRequestProcessorTest.cs\" />\n    <Compile Include=\"TrendTests\\TrendRequestProcessorTests.cs\" />\n    <Compile Include=\"UserTests\\UserRequestProcessorTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitter\\LinqToTwitter.csproj\">\n      <Project>{A214B9F0-6B8C-4E91-BE99-27F55CC860C1}</Project>\n      <Name>LinqToTwitter</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"LinqToTwitter.snk\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/ListTests/ListExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.ListTests\n{\n    public class ListExtensionsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public ListExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec => \n                exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, List>>()))\n                .Returns(TestStatusQueryResponse);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [Fact]\n        public void ListRequestProcessor_Handles_Actions()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<List>>(listReqProc);\n        }\n\n        [Fact]\n        public void CreateList_Requires_ListName()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.CreateList(null, \"public\", \"desc\"));\n\n            Assert.Equal(\"listName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void CreateList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"name\", \"test\" },\n                { \"mode\", \"public\" },\n                { \"description\", \"desc\" }\n            };\n\n            ctx.CreateList(\"test\", \"public\", \"desc\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/create.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void UpdateList_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateList(null, null, null, null, null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateList_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateList(\"123\", \"test\", null, null, null, null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n                { \"mode\", \"public\" },\n                { \"description\", \"desc\" },\n                { \"name\", \"Test List\" }\n            };\n\n            ctx.UpdateList(\"123\", \"test\", \"Test List\", \"456\", \"JoeMayo\", \"public\", \"desc\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/update.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DeleteList_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DeleteList(null, null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DeleteList_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DeleteList(\"123\", \"test\", null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DeleteList_Works_With_Slug_And_OwnerID()\n        {\n            InitializeTwitterContext();\n\n            ctx.DeleteList(null, \"test\", \"456\", null);\n        }\n\n        [Fact]\n        public void DeleteList_Works_With_ListID_Only()\n        {\n            InitializeTwitterContext();\n\n            ctx.DeleteList(\"123\", null, null, null);\n        }\n\n        [Fact]\n        public void DeleteList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.DeleteList(\"123\", \"test\", \"456\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/destroy.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void AddMemberToList_Requires_UserID_Or_ScreenName()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberToList(null, null, null, null, null, null));\n\n            Assert.Equal(\"UserIdOrScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberToList_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberToList(null, \"JoeMayo\", null, null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberToList_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberToList(null, \"JoeMayo\", null, \"linq\", null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberToList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"user_id\", \"789\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.AddMemberToList(\"789\", \"JoeMayo\", \"123\", \"test\", \"456\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/create.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_ScreenNames_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, null, null, null, new List<string> { \"SomeName\" }));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_ScreenNames_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", null, null, new List<string> { \"SomeOne\" }));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_ScreenNames_Requires_ScreenNames()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", \"123\", null, (List<string>)null));\n\n            Assert.Equal(\"screenNames\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_ScreenNames_Requires_ScreenNames_With_Values()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", \"123\", null, new List<string>()));\n\n            Assert.Equal(\"screenNames\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_ScreenNames_Requires_ScreenNames_Count_LessThanOrEqualTo_100()\n        {\n            InitializeTwitterContext();\n            var screenNames = Enumerable.Range(1, 101).Select(item => item.ToString(CultureInfo.InvariantCulture)).ToList();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", \"123\", null, screenNames));\n\n            Assert.Equal(\"screenNames\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_ScreenNames_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n                { \"user_id\", null },\n                { \"screen_name\", \"JoeMayo,Linq2Tweeter,SomeOneElse\" },\n            };\n            var screenNames = new List<string> { \"JoeMayo\", \"Linq2Tweeter\", \"SomeOneElse\" };\n\n            ctx.AddMemberRangeToList(\"123\", \"test\", \"456\", \"JoeMayo\", screenNames);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/create_all.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_UserIDs_Requires_UserIDs()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", \"123\", null, (List<ulong>)null));\n\n            Assert.Equal(\"userIDs\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_UserIDs_Requires_UserIDs_With_Values()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", \"123\", null, new List<ulong>()));\n\n            Assert.Equal(\"userIDs\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_UserIDs_Requires_UserIDs_Count_LessThanOrEqualTo_100()\n        {\n            InitializeTwitterContext();\n            var userIDs = Enumerable.Range(1, 101).Select(item => (ulong)item).ToList();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.AddMemberRangeToList(null, \"test\", \"123\", null, userIDs));\n\n            Assert.Equal(\"userIDs\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddMemberRangeToList_For_UserIDs_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n                { \"user_id\", \"123,234,345\" },\n                { \"screen_name\", null },\n            };\n            var userIDs = new List<ulong> { 123ul, 234ul, 345ul };\n\n            ctx.AddMemberRangeToList(\"123\", \"test\", \"456\", \"JoeMayo\", userIDs);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/create_all.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DeleteMemberFromList_Requires_UserID_Or_ScreenName()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DeleteMemberFromList(null, null, null, null, null, null));\n\n            Assert.Equal(\"UserIdOrScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DeleteMemberFromList_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DeleteMemberFromList(null, \"JoeMayo\", null, null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DeleteMemberFromList_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DeleteMemberFromList(null, \"JoeMayo\", null, \"linq\", null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DeleteMemberFromList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"user_id\", \"789\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.DeleteMemberFromList(\"789\", \"JoeMayo\", \"123\", \"test\", \"456\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/destroy.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void SubscribeToList_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.SubscribeToList(null, null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void SubscribeToList_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.SubscribeToList(null, \"linq\", null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void SubscribeToList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.SubscribeToList(\"123\", \"test\", \"456\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/subscribers/create.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void UnsubscribeFromList_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UnsubscribeFromList(null, null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void UnsubscribeFromList_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UnsubscribeFromList(null, \"linq\", null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void UnsubscribeFromList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.UnsubscribeFromList(\"123\", \"test\", \"456\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/subscribers/destroy.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"456\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"owner_id\", \"789\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.DestroyAllFromList(\"123\", \"test\", \"456\", \"JoeMayo\", \"789\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/destroy_all.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Requires_Either_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(\n                () => ctx.DestroyAllFromList(null, null, \"1,2,3\", null, null, null));\n\n            Assert.Equal(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Requires_OwnerID_Or_OwnerScreenName_If_Using_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(\n                () => ctx.DestroyAllFromList(null, \"slug\", \"1,2,3\", null, null, null));\n\n            Assert.Equal(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Accepts_Missing_OwnerID_And_OwnerScreenName_If_Using_ListID()\n        {\n            InitializeTwitterContext();\n\n            ctx.DestroyAllFromList(\"1\", \"slug\", \"1,2,3\", null, null, null);\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Handles_Null_UserIDs()\n        {\n            InitializeTwitterContext();\n\n            ctx.DestroyAllFromList(\"1\", \"slug\", null, \"\", null, null);\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Handles_Null_ScreenNames()\n        {\n            InitializeTwitterContext();\n\n            ctx.DestroyAllFromList(\"1\", \"slug\", \"\", null, null, null);\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Removes_Spaces_From_ID_List()\n        {\n            const string ExpectedUserIDs = \"456,789\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", ExpectedUserIDs },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"owner_id\", \"789\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.DestroyAllFromList(\"123\", \"test\", \"456, 789\", \"JoeMayo\", \"789\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/destroy_all.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void DestroyAllFromList_Removes_Spaces_From_ScreenNames()\n        {\n            const string ExpectedScreenNames = \"JoeMayo,Linq2Tweeter\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"456\" },\n                { \"screen_name\", ExpectedScreenNames },\n                { \"owner_id\", \"789\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            ctx.DestroyAllFromList(\"123\", \"test\", \"456\", \"JoeMayo, Linq2Tweeter\", \"789\", \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/lists/members/destroy_all.json\",\n                    parameters,\n                    It.IsAny<Func<string, List>>()),\n                Times.Once());\n        }\n\n        const string TestStatusQueryResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/ListTests/ListRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.ListTests\n{\n    public class ListRequestProcessorTests\n    {\n        public ListRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Parses_All_Available_Parameters()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n            Expression<Func<List, bool>> expression =\n                list =>\n                    list.Type == ListType.Members &&\n                    list.UserID == \"456\" &&\n                    list.ScreenName == \"JoeMayo\" &&\n                    list.ListID == \"456\" &&\n                    list.Slug == \"test\" &&\n                    list.OwnerID == \"789\" &&\n                    list.OwnerScreenName == \"JoeMayo\" &&\n                    list.Cursor == \"123\" &&\n                    list.MaxID == 789 &&\n                    list.Page == 1 &&\n                    list.Count == 10 &&\n                    list.SinceID == 123 &&\n                    list.FilterToOwnedLists == true &&\n                    list.TrimUser == true &&\n                    list.IncludeEntities == true &&\n                    list.IncludeRetweets == true &&\n                    list.SkipStatus == true &&\n                    list.Reverse == true;\n\n            var queryParams = listReqProc.GetParameters(expression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)ListType.Members).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ListID\", \"456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Slug\", \"test\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OwnerID\", \"789\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OwnerScreenName\", \"JoeMayo\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"FilterToOwnedLists\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Reverse\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Works_With_Json_Format_Data()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(listReqProc);\n        }\n\n        [Fact]\n        public void BuildUrl_Creates_Lists_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/list.json?screen_name=JoeMayo\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ListType.Lists).ToString() },\n                    { \"ScreenName\", \"JoeMayo\" }\n                };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            const string ExpectedParam = \"Type\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"ScreenName\", \"JoeMayo\" }\n                };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParam, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", \"0\" },\n                };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Param_List()\n        {\n            const string ExpectedParamName = \"Type\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(null));\n\n            Assert.Equal<string>(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildListUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Lists).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildListsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/list.json?user_id=123&screen_name=JoeMayo&cursor=456&reverse=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Lists).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"Reverse\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildMembershipsUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Memberships).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildMembershipsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/memberships.json?user_id=123&screen_name=JoeMayo&cursor=456&filter_to_owned_lists=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Memberships).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"FilterToOwnedLists\", \"true\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildMembershipsUrl_Does_Not_Add_False_Filter_To_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/memberships.json?user_id=123&screen_name=JoeMayo&cursor=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Memberships).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"FilterToOwnedLists\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildSubscriptionsUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Subscriptions).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSubscriptionsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscriptions.json?user_id=123&screen_name=JoeMayo&count=10&cursor=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscriptions).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Count\", \"10\" },\n                { \"Cursor\", \"456\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildShowUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpecteParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpecteParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildShowUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                { \"ListID\", null },\n                { \"Slug\", \"\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildShowUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildShowUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/show.json?slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildStatusesUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildStatusesUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildStatusesUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildStatusesUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/statuses.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&since_id=789&max_id=234&count=25&per_page=25&page=3&trim_user=true&include_entities=true&include_rts=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" },\n                { \"SinceID\", \"789\" },\n                { \"MaxID\", \"234\" },\n                { \"Count\", \"25\" },\n                { \"Page\", \"3\" },\n                { \"TrimUser\", \"true\" },\n                { \"IncludeEntities\", \"true\" },\n                { \"IncludeRetweets\", \"true\" },\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildStatusesUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/statuses.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&since_id=789&max_id=234&count=25&per_page=25&page=3&trim_user=false&include_entities=false&include_rts=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" },\n                { \"SinceID\", \"789\" },\n                { \"MaxID\", \"234\" },\n                { \"Count\", \"25\" },\n                { \"Page\", \"3\" },\n                { \"TrimUser\", \"false\" },\n                { \"IncludeEntities\", \"false\" },\n                { \"IncludeRetweets\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildMembersUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildMembersUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildMembersUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildMembersUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildMembersUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildIsMemberUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildIsMemberUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildIsMemberUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"Slug\", \"test\" },\n                {\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildIsMemberUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildIsMemberUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildSubscribersUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSubscribersUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSubscribersUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_SubscribersUrl()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildSubscribersUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildIsSubscribedUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscribed).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildIsSubscriberUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscribed).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildIsSubscriberUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscribed).ToString()},\n                { \"Slug\", \"test\" },\n                {\"OwnerID\", \"123\"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_IsSubscribedUrl()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscribed).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildIsSubscriberUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscribed).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Ownerships_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/ownerships.json?user_id=789&screen_name=JoeMayo&count=10&cursor=1\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Ownerships).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Count\", \"10\" },\n                { \"Cursor\", \"1\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        void TestMultipleListsResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(MultipleListsResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.NotNull(lists);\n            Assert.Equal(4, lists.Count());\n            var list = lists.First();\n            Assert.Equal(\"test\", list.Name);\n            Assert.Equal(\"@Linq2Tweeter/test\", list.FullName);\n            Assert.Equal(1, list.MemberCount);\n            Assert.Equal(\"This is a test2\", list.Description);\n            Assert.Equal(\"public\", list.Mode);\n            Assert.Equal(\"/Linq2Tweeter/test\", list.Uri);\n            var users = list.Users;\n            Assert.NotNull(users);\n            Assert.Single(users);\n            Assert.Equal(\"LINQ to Tweeter\", users.First().Name);\n            Assert.Equal(\"44758373\", list.ListIDResult);\n            Assert.Equal(0, list.SubscriberCount);\n            Assert.Equal(new DateTime(2011, 5, 8, 2, 0, 33), list.CreatedAt);\n            Assert.Equal(false, list.Following);\n            Assert.Equal(\"test\", list.SlugResult);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Lists_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Lists };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Subscriptions_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Subscriptions };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Memberships_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Memberships };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Show_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Show };\n\n            var listsResponse = listProc.ProcessResults(SingleListResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.NotNull(lists);\n            Assert.Single(lists);\n            var list = lists.Single();\n            Assert.Equal(\"DotNetTwittterDevs\", list.Name);\n            var users = list.Users;\n            Assert.NotNull(users);\n            Assert.Single(users);\n            Assert.Equal(\"Joe Mayo\", users.Single().Name);\n        }\n  \n        void TestMultipleUsersResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(MultipleUsersResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.NotNull(lists);\n            Assert.Single(lists);\n            var list = lists.Single();\n            var users = list.Users;\n            Assert.NotNull(users);\n            Assert.Equal(3, users.Count);\n            Assert.Equal(\"LINQ to Tweeter Test\", users.First().Name);\n            var cursor = list.CursorMovement;\n            Assert.NotNull(cursor);\n            Assert.Equal(\"1352721896474871923\", cursor.Next);\n            Assert.Equal(\"7\", cursor.Previous);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Subscribers_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Subscribers };\n\n            TestMultipleUsersResponse(listProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Members_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Members };\n\n            TestMultipleUsersResponse(listProc);\n        }\n  \n        void TestSingleUserResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(SingleUserResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.NotNull(lists);\n            Assert.Single(lists);\n            var users = lists.Single().Users;\n            Assert.NotNull(users);\n            Assert.Single(users);\n            Assert.Equal(\"LINQ to Tweeter Test\", users.Single().Name);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_IsMember_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.IsMember };\n\n            TestSingleUserResponse(listProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_IsSubscribed_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.IsSubscribed };\n\n            TestSingleUserResponse(listProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Statuses_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Statuses };\n\n            var listsResponse = listProc.ProcessResults(ListStatusesResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.NotNull(lists);\n            Assert.Single(lists);\n            var statuses = lists.Single().Statuses;\n            Assert.NotNull(statuses);\n            Assert.Equal(4, statuses.Count);\n            Assert.True(statuses.First().Text.StartsWith(\"so using this approach\"));\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            var results = listReqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(0, results.Count);\n        }\n\n        [Fact]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var listProc = new ListRequestProcessor<List> \n            { \n                Type = ListType.Show,\n                UserID = \"123\",\n                ScreenName = \"JoeMayo\",\n                Cursor = \"456\",\n                ListID = \"789\",\n                Slug = \"MyList\",\n                OwnerID = \"123\",\n                OwnerScreenName = \"JoeMayo\",\n                MaxID = 150,\n                Count = 50,\n                Page = 1,\n                SinceID = 25,\n                TrimUser = true,\n                IncludeEntities = true,\n                IncludeRetweets = true,\n                FilterToOwnedLists = true,\n                SkipStatus = true,\n                Reverse = true\n            };\n\n            var listsResponse = listProc.ProcessResults(SingleListResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.NotNull(lists);\n            Assert.Single(lists);\n            var list = lists.Single();\n            Assert.Equal(ListType.Show, list.Type);\n            Assert.Equal(\"123\", list.UserID);\n            Assert.Equal(\"JoeMayo\", list.ScreenName);\n            Assert.Equal(\"456\", list.Cursor);\n            Assert.Equal(\"789\", list.ListID);\n            Assert.Equal(\"MyList\", list.Slug);\n            Assert.Equal(\"123\", list.OwnerID);\n            Assert.Equal(\"JoeMayo\", list.OwnerScreenName);\n            Assert.Equal(150ul, list.MaxID);\n            Assert.Equal(50, list.Count);\n            Assert.Equal(1, list.Page);\n            Assert.Equal(25ul, list.SinceID);\n            Assert.True(list.TrimUser);\n            Assert.True(list.IncludeEntities);\n            Assert.True(list.IncludeRetweets);\n            Assert.True(list.FilterToOwnedLists);\n            Assert.True(list.SkipStatus);\n            Assert.True(list.Reverse);\n        }\n\n        const string SingleListResponse = @\"{\n   \"\"name\"\":\"\"DotNetTwittterDevs\"\",\n   \"\"full_name\"\":\"\"@JoeMayo\\/dotnettwittterdevs\"\",\n   \"\"member_count\"\":269,\n   \"\"description\"\":\"\".NET Developers who use the Twitter API\"\",\n   \"\"mode\"\":\"\"public\"\",\n   \"\"uri\"\":\"\"\\/JoeMayo\\/dotnettwittterdevs\"\",\n   \"\"user\"\":{\n      \"\"id\"\":15411837,\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n      \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n      \"\"followers_count\"\":1099,\n      \"\"default_profile\"\":false,\n      \"\"profile_background_color\"\":\"\"0099B9\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"location\"\":\"\"Denver, CO\"\",\n      \"\"profile_link_color\"\":\"\"0099B9\"\",\n      \"\"listed_count\"\":111,\n      \"\"verified\"\":false,\n      \"\"protected\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"is_translator\"\":false,\n      \"\"following\"\":false,\n      \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n      \"\"profile_text_color\"\":\"\"3C3940\"\",\n      \"\"statuses_count\"\":1905,\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"friends_count\"\":210,\n      \"\"default_profile_image\"\":false,\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"geo_enabled\"\":true,\n      \"\"favourites_count\"\":41,\n      \"\"profile_background_tile\"\":false,\n      \"\"notifications\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n      \"\"follow_request_sent\"\":false\n   },\n   \"\"id_str\"\":\"\"4557337\"\",\n   \"\"subscriber_count\"\":34,\n   \"\"created_at\"\":\"\"Sat Dec 12 22:55:43 +0000 2009\"\",\n   \"\"following\"\":false,\n   \"\"slug\"\":\"\"dotnettwittterdevs\"\",\n   \"\"id\"\":4557337\n}\";\n\n        const string MultipleListsResponse = @\"[\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/test\"\",\n      \"\"name\"\":\"\"test\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/test\"\",\n      \"\"description\"\":\"\"This is a test2\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"44758373\"\",\n      \"\"member_count\"\":1,\n      \"\"created_at\"\":\"\"Sun May 08 02:00:33 +0000 2011\"\",\n      \"\"id\"\":44758373,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"test\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/privatelist-4\"\",\n      \"\"name\"\":\"\"Privatelist\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/privatelist-4\"\",\n      \"\"description\"\":\"\"This is a private list for testing.\"\",\n      \"\"mode\"\":\"\"private\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897042\"\",\n      \"\"member_count\"\":0,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:42:12 +0000 2009\"\",\n      \"\"id\"\":3897042,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"privatelist-4\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/mvc-4\"\",\n      \"\"name\"\":\"\"MVC\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/mvc-4\"\",\n      \"\"description\"\":\"\"Developers Interested in ASP.NET MVC\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897016\"\",\n      \"\"member_count\"\":0,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:41:12 +0000 2009\"\",\n      \"\"id\"\":3897016,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"mvc-4\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/linq\"\",\n      \"\"name\"\":\"\"LINQ\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/linq\"\",\n      \"\"description\"\":\"\"People who specialize in LINQ\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897006\"\",\n      \"\"member_count\"\":3,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:40:48 +0000 2009\"\",\n      \"\"id\"\":3897006,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"linq\"\"\n   }\n]\";\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":16761255,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"followers_count\"\":22,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"listed_count\"\":3,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":false,\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"statuses_count\"\":100,\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":1,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"favourites_count\"\":2,\n   \"\"status\"\":{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"annotations\"\":null,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":176445993091481604,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":16761255,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"followers_count\"\":22,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"listed_count\"\":3,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"statuses_count\"\":100,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"status\"\":{\n            \"\"annotations\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"176445993091481604\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n            \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":176445993091481604,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      {\n         \"\"id\"\":313139213,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1405826247\\/twitter_icon_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/wefollow.com\\/harithamtech\"\",\n         \"\"created_at\"\":\"\"Wed Jun 08 06:12:33 +0000 2011\"\",\n         \"\"followers_count\"\":1146,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"106100\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":19800,\n         \"\"name\"\":\"\"HarithamTechnologies\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/276751844\\/twitter_bg.jpg\"\",\n         \"\"location\"\":\"\"Coimbatore\"\",\n         \"\"profile_link_color\"\":\"\"000000\"\",\n         \"\"listed_count\"\":1,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Enterprise Application Development | Mobile Apps | SEO | Social Media Marketing | Software Testing | Business Consultancy Services\"\",\n         \"\"profile_text_color\"\":\"\"2b2b2b\"\",\n         \"\"statuses_count\"\":1751,\n         \"\"screen_name\"\":\"\"harithamtech\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1405826247\\/twitter_icon_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Chennai\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/276751844\\/twitter_bg.jpg\"\",\n         \"\"friends_count\"\":1903,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"488f3f\"\",\n         \"\"id_str\"\":\"\"313139213\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":10,\n         \"\"status\"\":{\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"possibly_sensitive\"\":false,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"196237455870017538\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.twimbow.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETwimbow\\u003C\\/a\\u003E\"\",\n            \"\"created_at\"\":\"\"Sat Apr 28 14:00:30 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":196237455870017538,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"Global Partners of Haritham Technologies ensures a Win-Win situation #enterprise #marketing #harithamtech #in. http:\\/\\/t.co\\/EdUCAXhY\"\"\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"eeffd9\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      {\n         \"\"id\"\":266862319,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1620398936\\/untitled_normal.JPG\"\",\n         \"\"url\"\":null,\n         \"\"created_at\"\":\"\"Tue Mar 15 23:21:41 +0000 2011\"\",\n         \"\"followers_count\"\":15,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"181b1c\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":7200,\n         \"\"name\"\":\"\"talat taher\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme14\\/bg.gif\"\",\n         \"\"location\"\":\"\"DOHA,QATAR\"\",\n         \"\"profile_link_color\"\":\"\"009999\"\",\n         \"\"listed_count\"\":1,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"I'm a Muslim, Software Engineer at ASIS -Qatar\"\",\n         \"\"profile_text_color\"\":\"\"fffaff\"\",\n         \"\"statuses_count\"\":38,\n         \"\"screen_name\"\":\"\"TalatTaher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1620398936\\/untitled_normal.JPG\"\",\n         \"\"time_zone\"\":\"\"Cairo\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme14\\/bg.gif\"\",\n         \"\"friends_count\"\":44,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"3d3b3d\"\",\n         \"\"id_str\"\":\"\"266862319\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":12,\n         \"\"status\"\":{\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"194760674243645440\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"created_at\"\":\"\"Tue Apr 24 12:12:17 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":194760674243645440,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"\\u0641\\u0643\\u0631\\u0648\\u0646\\u0649 \\u0627\\u0632\\u0627\\u0649 ....\\u0647\\u0648 \\u0627\\u0646\\u0627 \\u0646\\u0633\\u064a\\u062a\\u0643\\u061f\\u061f\\u061f\"\"\n         },\n         \"\"profile_background_tile\"\":true,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"1a181a\"\",\n         \"\"follow_request_sent\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":1352721896474871923,\n   \"\"previous_cursor\"\":7,\n   \"\"next_cursor_str\"\":\"\"1352721896474871923\"\",\n   \"\"previous_cursor_str\"\":\"\"7\"\"\n}\";\n\n        const string ListStatusesResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":14855950,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1151413227\\/MePimping_normal.png\"\",\n         \"\"url\"\":\"\"http:\\/\\/weblogs.sqlteam.com\\/mladenp\\/\"\",\n         \"\"created_at\"\":\"\"Wed May 21 12:55:05 +0000 2008\"\",\n         \"\"followers_count\"\":2083,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0060A5\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Mladen Prajdic\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/4781051\\/twitterPic.png\"\",\n         \"\"location\"\":\"\"Ljubljana, Slovenia\"\",\n         \"\"profile_link_color\"\":\"\"FF9000\"\",\n         \"\"listed_count\"\":195,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"SQL Server MVP and C# developer. Creator of SSMS Tools Pack add-in for SSMS.\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"statuses_count\"\":39733,\n         \"\"screen_name\"\":\"\"MladenPrajdic\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1151413227\\/MePimping_normal.png\"\",\n         \"\"time_zone\"\":\"\"Ljubljana\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/4781051\\/twitterPic.png\"\",\n         \"\"friends_count\"\":1002,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"id_str\"\":\"\"14855950\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":32,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_sidebar_fill_color\"\":\"\"0060A5\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286812220690433\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:16:37 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286812220690433,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"so using this approach i don't even need to sign my assemblies. well that lessens the complexity a bit. yay!\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":95212023,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/571849590\\/minha_foto_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.globalcode.com.br\"\",\n         \"\"created_at\"\":\"\"Mon Dec 07 14:40:21 +0000 2009\"\",\n         \"\"followers_count\"\":2208,\n         \"\"default_profile\"\":true,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"lang\"\":\"\"pt\"\",\n         \"\"utc_offset\"\":-10800,\n         \"\"name\"\":\"\"Vinicius\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"location\"\":\"\"Ubatuba - SP\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":98,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Programar, educar, criar os filhos, cozinhar, surfar, velejar e claro, beber. Simples n\\u00e3o? Ah, aqui eu sou eu, n\\u00e3o globalcode ok?\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":8628,\n         \"\"screen_name\"\":\"\"vsenger\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/571849590\\/minha_foto_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Greenland\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"friends_count\"\":369,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"95212023\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":41,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286622063525889\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:52 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286622063525889,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Tudo bem n\\u00e3o ter anvisa aqui no aeroporto, mas ent\\u00e3o coloca um bom rod\\u00edzio de carnes vai...\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n         \"\"type\"\":\"\"Point\"\",\n         \"\"coordinates\"\":[\n            -41.9644758,\n            -18.8669036\n         ]\n      },\n      \"\"place\"\":{\n         \"\"name\"\":\"\"Governador Valadares\"\",\n         \"\"country\"\":\"\"Brasil\"\",\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"Governador Valadares, Minas Gerais\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2fdc3603bc0c1d1d.json\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -42.339393,\n                     -19.039766\n                  ],\n                  [\n                     -41.539846,\n                     -19.039766\n                  ],\n                  [\n                     -41.539846,\n                     -18.5511242\n                  ],\n                  [\n                     -42.339393,\n                     -18.5511242\n                  ]\n               ]\n            ]\n         },\n         \"\"country_code\"\":\"\"BR\"\",\n         \"\"id\"\":\"\"2fdc3603bc0c1d1d\"\",\n         \"\"place_type\"\":\"\"city\"\"\n      },\n      \"\"user\"\":{\n         \"\"id\"\":86172114,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2172389365\\/gg4QUwKC_normal\"\",\n         \"\"url\"\":\"\"http:\\/\\/janynnegomes.com\"\",\n         \"\"created_at\"\":\"\"Thu Oct 29 21:56:49 +0000 2009\"\",\n         \"\"followers_count\"\":1741,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"642D8B\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-10800,\n         \"\"name\"\":\"\"Janny Gomes\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme10\\/bg.gif\"\",\n         \"\"location\"\":\"\"Minas Gerais, Brasil\"\",\n         \"\"profile_link_color\"\":\"\"FF0000\"\",\n         \"\"listed_count\"\":105,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Android & .NET Developer. My programmer daily is http:\\/\\/facebook.com\\/DiarioDeUmaProgramadorA\"\",\n         \"\"profile_text_color\"\":\"\"3D1957\"\",\n         \"\"statuses_count\"\":17504,\n         \"\"screen_name\"\":\"\"devnetgomez\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2172389365\\/gg4QUwKC_normal\"\",\n         \"\"time_zone\"\":\"\"Greenland\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme10\\/bg.gif\"\",\n         \"\"friends_count\"\":1208,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"65B0DA\"\",\n         \"\"id_str\"\":\"\"86172114\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":88,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"7AC3EE\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196284867770716160\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/twitter.com\\/download\\/android\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETwitter for Android\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:08:53 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196284867770716160,\n      \"\"geo\"\":{\n         \"\"type\"\":\"\"Point\"\",\n         \"\"coordinates\"\":[\n            -18.8669036,\n            -41.9644758\n         ]\n      },\n      \"\"text\"\":\"\"A id\\u00e9ia \\u00e9 que eu aguente segurar at\\u00e9 l\\u00e1, mas t\\u00e1 dificil \\\"\"@BrayanCordeiro: @devnetgomez MENTIRA que ele vai nascer no mesmo dia que eu?! &lt;3\\\"\"\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/ApplicationOnlyAuthorizerTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class ApplicationOnlyAuthorizerTests\n    {\n        public ApplicationOnlyAuthorizerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void EncodeCredentials_Returns_Valid_Credentials()\n        {\n            const string ExpectedEncodedCredentials = \"eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==\";\n            var auth = new ApplicationOnlyAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"xvz1evFS4wEEPTGEFPHBog\",\n                    ConsumerSecret = \"L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg\"\n                }\n            };\n\n            auth.EncodeCredentials();\n\n            Assert.Equal(ExpectedEncodedCredentials, auth.BasicToken);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/MvcAuthorizerTests.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class MvcAuthorizerTests\n    {\n        public MvcAuthorizerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void BeginAuthorization_Sets_Callback()\n        {\n            var auth = new MvcAuthorizer();\n            Uri linqToTwitterUri = new Uri(\"http://linqtotwitter.codeplex.com\");\n\n            auth.BeginAuthorization(linqToTwitterUri);\n\n            Assert.Equal(linqToTwitterUri, auth.Callback);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/OAuthAuthorizerTests.cs",
    "content": "﻿using System;\nusing System.Net;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class OAuthAuthorizerTests\n    {\n        public OAuthAuthorizerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Get_Calls_GetOAuthQueryString()\n        {\n            var req = new Request(\"https://api.twitter.com/statuses/public.json\");\n            var pinAuth = new PinAuthorizer();\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            string outUrl;\n            string queryString = \"oauth_token=token\";\n            oAuthMock.Setup(oAuth => oAuth.GetOAuthQueryString(HttpMethod.GET, req, string.Empty, out outUrl, out queryString));\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n\n            pinAuth.Get(req);\n\n            oAuthMock.Verify(oAuth => oAuth.GetOAuthQueryString(HttpMethod.GET, req, string.Empty, out outUrl, out queryString), Times.Once());\n        }\n\n        [Fact]\n        public void InitializeRequest_Sets_Request_Headers()\n        {\n            var req = new Request(\"https://api.twitter.com/statuses/public.json\");\n            const string UserAgent = \"LINQ to Twitter v2.0\";\n            var pinAuth = new PinAuthorizer();\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            string outUrl;\n            string queryString = \"oauth_token=token\";\n            oAuthMock.Setup(oAuth => oAuth.GetOAuthQueryString(HttpMethod.GET, req, string.Empty, out outUrl, out queryString));\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n\n            pinAuth.UserAgent = UserAgent;\n            pinAuth.ReadWriteTimeout = new TimeSpan(0, 0, 1);\n            pinAuth.Timeout = new TimeSpan(0, 0, 2);\n            pinAuth.UseCompression = true;\n\n            var httpReq = pinAuth.Get(req) as HttpWebRequest;\n\n            Assert.NotNull(httpReq);\n            Assert.Equal(UserAgent, httpReq.UserAgent);\n            Assert.Equal(1000, httpReq.ReadWriteTimeout);\n            Assert.Equal(2000, httpReq.Timeout);\n            Assert.Equal(\"gzip, deflate\", httpReq.Headers[HttpRequestHeader.AcceptEncoding]);\n            Assert.Equal(DecompressionMethods.Deflate | DecompressionMethods.GZip, httpReq.AutomaticDecompression);\n        }\n\n        [Fact]\n        public void IsAuthorized_Throws_ArgumentNullException_For_Null_Credentials()\n        {\n            var ex = Assert.Throws<ArgumentNullException>(() => new PinAuthorizer().IsAuthorized);\n\n            Assert.Equal(\"Credentials\", ex.ParamName);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_True_When_Credentials_Are_Present()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = \"C\",\n                    ConsumerSecret = \"S\",\n                    OAuthToken = \"O\"\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.True(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_4_Credentials_Are_Empty()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"\",\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\",\n                    OAuthToken = \"\"\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_3_Credentials_Are_Empty()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = \"\",\n                    ConsumerSecret = \"\",\n                    OAuthToken = \"\"\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_2_Credentials_Are_Empty()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = \"C\",\n                    ConsumerSecret = \"\",\n                    OAuthToken = \"\"\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_1_Credential_Is_Empty()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = \"C\",\n                    ConsumerSecret = \"S\",\n                    OAuthToken = \"\"\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_4_Credentials_Are_Null()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = null,\n                    ConsumerKey = null,\n                    ConsumerSecret = null,\n                    OAuthToken = null\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_3_Credentials_Are_Null()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = null,\n                    ConsumerSecret = null,\n                    OAuthToken = null\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_2_Credentials_Are_Null()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = \"C\",\n                    ConsumerSecret = null,\n                    OAuthToken = null\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n\n        [Fact]\n        public void IsAuthorized_Returns_False_When_1_Credential_Is_Null()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    AccessToken = \"A\",\n                    ConsumerKey = \"C\",\n                    ConsumerSecret = \"S\",\n                    OAuthToken = null\n                }\n            };\n\n            bool isAuth = pinAuth.IsAuthorized;\n\n            Assert.False(isAuth);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/OAuthBaseTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitterXUnitTests.Common;\n\n#if NETFX_CORE\nusing System.Security.Cryptography;\nusing System.Text;\nusing LinqToTwitter;\nusing Xunit;\n#endif\n\nnamespace LinqToTwitterXUnitTests.OAuthTests\n{\n    public class OAuthBaseTests\n    {\n        public OAuthBaseTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n#if NETFX_CORE\n        [Fact]\n        public void ComputeHash_Calculates_Hash()\n        {\n            const string ExpectedHashValue = \"6/oHmxtB0MVw/bedxThQcBK7AOc=\";\n            const string SignatureData = \"GET&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Doob%26oauth_consumer_key%3DyK7Unbaiw1ksbiela8brQb%26oauth_nonce%3D4785638%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1336062691%26oauth_version%3D1.0\";\n            const string HashKey = \"Yhqksk39nP627dyna6vcUIEha2jbaplcmaHdGFVjV9&\";\n            var hmacsha1 = new HMACSHA1\n            {\n                Key = Encoding.UTF8.GetBytes(HashKey)\n            };\n            var oauthBase = new OAuthBase();\n\n            string hash = oauthBase.ComputeHash(hmacsha1, SignatureData);\n\n            Assert.Equal(ExpectedHashValue, hash);\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/OAuthTwitterTests.cs",
    "content": "﻿using LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing System;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class OAuthTwitterTests\n    {\n        public OAuthTwitterTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void FilterRequestParameters_Splits_Url_Properly()\n        {\n            var oaTwit = new OAuthTwitter();\n            var fullUrl = new Uri(\"http://www.mySite.com?oauth_token=123&p1=v1\");\n            \n            string filteredUrl = oaTwit.FilterRequestParameters(fullUrl);\n\n            Assert.Equal(\"http://www.mysite.com/?p1=v1\", filteredUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/PinAuthorizerTests.cs",
    "content": "﻿using LinqToTwitter;\nusing System;\nusing Moq;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class PinAuthorizerTests\n    {\n        public PinAuthorizerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Authorize_Gets_Request_Token()\n        {\n            const string AuthLink = \"https://authorizationlink\";\n            var pinAuth = new PinAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n            pinAuth.GetPin = () => \"1234567\";\n            string destinationUrl = string.Empty;\n            pinAuth.GoToTwitterAuthorization = link => destinationUrl = link;\n\n            pinAuth.Authorize();\n\n            oAuthMock.Verify(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange), Times.Once());\n            Assert.Equal(AuthLink, destinationUrl);\n        }\n\n        [Fact]\n        public void Authorize_Launches_Browser()\n        {\n            const string AuthLink = \"https://authorizationlink\";\n            var pinAuth = new PinAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n            pinAuth.GetPin = () => \"1234567\";\n            string destinationUrl = string.Empty;\n            pinAuth.GoToTwitterAuthorization = link => destinationUrl = link;\n\n            pinAuth.Authorize();\n\n            Assert.Equal(AuthLink, destinationUrl);\n        }\n\n        [Fact]\n        public void Authorize_Gets_Pin()\n        {\n            const string AuthLink = \"https://authorizationlink\";\n            var pinAuth = new PinAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n            bool pinSet = false;\n            pinAuth.GetPin = () => { pinSet = true; return \"1234567\"; };\n            string destinationUrl = string.Empty;\n            pinAuth.GoToTwitterAuthorization = link => destinationUrl = link;\n\n            pinAuth.Authorize();\n\n            Assert.True(pinSet);\n            Assert.Equal(AuthLink, destinationUrl);\n        }\n\n        [Fact]\n        public void Authorize_Requires_GetPin_Handler()\n        {\n            const string AuthLink = \"https://authorizationlink\";\n            var pinAuth = new PinAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n            string destinationUrl = string.Empty;\n            pinAuth.GoToTwitterAuthorization = link => destinationUrl = link;\n\n            var ex = Assert.Throws<InvalidOperationException>(() => pinAuth.Authorize());\n\n            Assert.True(ex.Message.Contains(\"GetPin\"));\n        }\n\n        [Fact]\n        public void Authorize_Requires_GoToTwitterAuthorization_Handler()\n        {\n            const string AuthLink = \"https://authorizationlink\";\n            var pinAuth = new PinAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n            pinAuth.GetPin = () => { return \"1234567\"; };\n\n            var ex = Assert.Throws<InvalidOperationException>(() => pinAuth.Authorize());\n\n            Assert.True(ex.Message.Contains(\"GoToTwitterAuthorization\"));\n        }\n\n        [Fact]\n        public void Authorize_Requires_Credentials()\n        {\n            var pinAuth = new PinAuthorizer();\n\n            var ex = Assert.Throws<ArgumentNullException>(() => pinAuth.Authorize());\n\n            Assert.Equal(\"Credentials\", ex.ParamName);\n        }\n\n        [Fact]\n        public void Authorize_Gets_Access_Token()\n        {\n            string screenName = \"JoeMayo\";\n            string userID = \"123\";\n            const string PinCode = \"1234567\";\n            const string AuthToken = \"token\";\n            const string AuthLink = \"https://authorizationlink?oauth_token=\" + AuthToken;\n            var pinAuth = new PinAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"oob\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            oAuthMock.Setup(oAuth => oAuth.AccessTokenGet(AuthToken, PinCode, It.IsAny<string>(), string.Empty, out screenName, out userID));\n            pinAuth.OAuthTwitter = oAuthMock.Object;\n            pinAuth.GetPin = () => PinCode;\n            string destinationUrl = string.Empty;\n            pinAuth.GoToTwitterAuthorization = link => destinationUrl = link;\n\n            pinAuth.Authorize();\n\n            oAuthMock.Verify(oauth => oauth.AccessTokenGet(AuthToken, PinCode, It.IsAny<string>(), string.Empty, out screenName, out userID), Times.Once());\n            Assert.Equal(screenName, pinAuth.ScreenName);\n            Assert.Equal(userID, pinAuth.UserId);\n            Assert.Equal(AuthLink, destinationUrl);\n        }\n\n        [Fact]\n        public void Authorize_Returns_If_Already_Authorized()\n        {\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"consumerkey\",\n                    ConsumerSecret = \"consumersecret\",\n                    OAuthToken = \"oauthtoken\",\n                    AccessToken = \"accesstoken\"\n                },\n                OAuthTwitter = oAuthMock.Object,\n                GetPin = () => \"1234567\",\n                GoToTwitterAuthorization = link => { }\n            };\n\n            pinAuth.Authorize();\n\n            oAuthMock.Verify(oauth =>\n                oauth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), false, AuthAccessType.NoChange),\n                Times.Never());\n        }\n\n        [Fact]\n        public void BeginAuthorize_Gets_Request_Token()\n        {\n            var oauthRequestTokenUrl = new Uri(\"https://api.twitter.com/oauth/request_token\");\n            var oauthAuthorizeUrl = new Uri(\"https://api.twitter.com/oauth/authorize\");\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials(),\n                OAuthTwitter = oAuthMock.Object,\n                GetPin = () => \"1234567\",\n                GoToTwitterAuthorization = link => { }\n            };\n\n            pinAuth.BeginAuthorize(resp => { });\n\n            oAuthMock.Verify(oAuth =>\n                oAuth.GetRequestTokenAsync(oauthRequestTokenUrl, oauthAuthorizeUrl, \"oob\", AuthAccessType.NoChange, false, It.IsAny<Action<string>>(), It.IsAny<Action<TwitterAsyncResponse<object>>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void BeginAuthorize_Requires_GoToTwitterAuthorization_Handler()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials(),\n                OAuthTwitter = new OAuthTwitterMock(),\n                GetPin = () => \"1234567\",\n            };\n\n            var ex = Assert.Throws<InvalidOperationException>(() => pinAuth.BeginAuthorize(resp => { }));\n\n            Assert.True(ex.Message.Contains(\"GoToTwitterAuthorization\"));\n        }\n\n        [Fact]\n        public void BeginAuthorize_Returns_If_Already_Authorized()\n        {\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            TwitterAsyncResponse<object> twitterResp = null;\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"consumerkey\",\n                    ConsumerSecret = \"consumersecret\",\n                    OAuthToken = \"oauthtoken\",\n                    AccessToken = \"accesstoken\"\n                },\n                OAuthTwitter = oAuthMock.Object,\n                GetPin = () => \"1234567\",\n                GoToTwitterAuthorization = link => { }\n            };\n\n            pinAuth.BeginAuthorize(resp => twitterResp = resp);\n\n            oAuthMock.Verify(oauth =>\n                oauth.GetRequestTokenAsync(It.IsAny<Uri>(), It.IsAny<Uri>(), \"oob\", AuthAccessType.NoChange, false, It.IsAny<Action<string>>(), It.IsAny<Action<TwitterAsyncResponse<object>>>()), \n                Times.Never());\n            Assert.Null(twitterResp);\n        }\n\n        [Fact]\n        public void BeginAuthorize_Invokes_AuthorizationCompleteCallback()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials(),\n                OAuthTwitter = new OAuthTwitterMock(),\n                GetPin = () => \"1234567\",\n                GoToTwitterAuthorization = link => { }\n            };\n            TwitterAsyncResponse<object> twitterResp = null;\n            pinAuth.BeginAuthorize(resp => twitterResp = resp);\n\n            Assert.NotNull(twitterResp);\n        }\n\n        [Fact]\n        public void CompleteAuthorize_Gets_Access_Token()\n        {\n            const string Pin = \"1234567\";\n            Action<TwitterAsyncResponse<UserIdentifier>> callback = resp => { };\n            var oauthAccessTokenUrl = new Uri(\"https://api.twitter.com/oauth/access_token\");\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials(),\n                OAuthTwitter = oAuthMock.Object,\n                GoToTwitterAuthorization = link => { }\n            };\n\n            pinAuth.CompleteAuthorize(Pin, callback);\n\n            oAuthMock.Verify(oAuth =>\n                oAuth.GetAccessTokenAsync(\n                    Pin, oauthAccessTokenUrl, \"oob\", AuthAccessType.NoChange, \n                    It.IsAny<Action<TwitterAsyncResponse<UserIdentifier>>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void CompleteAuthorize_Invokes_AuthorizationCompleteCallback()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials(),\n                OAuthTwitter = new OAuthTwitterMock(),\n                GoToTwitterAuthorization = link => { }\n            };\n            TwitterAsyncResponse<UserIdentifier> twitterResp = null;\n\n            pinAuth.CompleteAuthorize(\"1234567\", resp => twitterResp = resp);\n\n            Assert.NotNull(twitterResp);\n        }\n\n        [Fact]\n        public void CompleteAuthorize_Requires_Pin()\n        {\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials(),\n                OAuthTwitter = new OAuthTwitterMock(),\n                GoToTwitterAuthorization = link => { }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => pinAuth.CompleteAuthorize(null, resp => { }));\n\n            Assert.Equal(\"pin\", ex.ParamName);\n        }\n\n        [Fact]\n        public void CompleteAuthorize_Returns_If_Already_Authorized()\n        {\n            const string Pin = \"1234567\";\n            Action<TwitterAsyncResponse<UserIdentifier>> callback = resp => { };\n            var oauthAccessTokenUrl = new Uri(\"https://api.twitter.com/oauth/access_token\");\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            var pinAuth = new PinAuthorizer\n            {\n                Credentials = new InMemoryCredentials\n                {\n                    ConsumerKey = \"consumerkey\",\n                    ConsumerSecret = \"consumersecret\",\n                    OAuthToken = \"oauthtoken\",\n                    AccessToken = \"accesstoken\"\n                },\n                OAuthTwitter = oAuthMock.Object,\n                GoToTwitterAuthorization = link => { }\n            };\n\n            pinAuth.CompleteAuthorize(Pin, callback);\n\n            oAuthMock.Verify(oAuth =>\n                oAuth.GetAccessTokenAsync(Pin, oauthAccessTokenUrl, \"oob\", AuthAccessType.NoChange, callback),\n                Times.Never());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/SignInAuthorizerTests.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class SignInAuthorizerTests\n    {\n        public SignInAuthorizerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void BeginAuthorization_Sets_ForceLogin()\n        {\n            const string RequestUrl = \"https://api.twitter.com/\";\n            var signInAuth = new SignInAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            signInAuth.OAuthTwitter = oAuthMock.Object;\n            oAuthMock.Setup(oauth => oauth.FilterRequestParameters(It.IsAny<Uri>())).Returns(RequestUrl);\n            string authUrl = string.Empty;\n            signInAuth.PerformRedirect = url => authUrl = url;\n\n            signInAuth.BeginAuthorization(new Uri(RequestUrl), forceLogin: true);\n\n            oAuthMock.Verify(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), RequestUrl, true, AuthAccessType.NoChange), Times.Once());\n            Assert.Null(authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/OAuthTests/WebAuthorizerTests.cs",
    "content": "﻿using System;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class WebAuthorizerTests\n    {\n        public WebAuthorizerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void BeginAuthorization_Gets_Request_Token()\n        {\n            const string RequestUrl = \"https://api.twitter.com/\";\n            var webAuth = new WebAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            webAuth.OAuthTwitter = oAuthMock.Object;\n            oAuthMock.Setup(oauth => oauth.FilterRequestParameters(It.IsAny<Uri>())).Returns(RequestUrl);\n            string authUrl = string.Empty;\n            webAuth.PerformRedirect = url => authUrl = url;\n\n            webAuth.BeginAuthorization(new Uri(RequestUrl));\n\n            oAuthMock.Verify(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), RequestUrl, false, AuthAccessType.NoChange), Times.Once());\n            Assert.Null(authUrl);\n        }\n\n        [Fact]\n        public void BeginAuthorize_Requires_Credentials()\n        {\n            const string RequestUrl = \"https://api.twitter.com/\";\n            var webAuth = new WebAuthorizer();\n\n            var ex = Assert.Throws<ArgumentNullException>(() => webAuth.BeginAuthorization(new Uri(RequestUrl)));\n\n            Assert.Equal(\"Credentials\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BeginAuthorize_Does_Not_Require_A_Uri()\n        {\n            var webAuth = new WebAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            webAuth.OAuthTwitter = oAuthMock.Object;\n            string authUrl = string.Empty;\n            webAuth.PerformRedirect = url => authUrl = url;\n\n            webAuth.BeginAuthorization(null);\n            Assert.Null(authUrl);\n        }\n\n        [Fact]\n        public void BeginAuthorization_Calls_PerformRedirect()\n        {\n            const string RequestUrl = \"https://api.twitter.com/\";\n            var webAuth = new WebAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oauth => oauth.FilterRequestParameters(It.IsAny<Uri>())).Returns(RequestUrl);\n            webAuth.OAuthTwitter = oAuthMock.Object;\n            string authUrl = string.Empty;\n            webAuth.PerformRedirect = url => authUrl = url;\n\n            webAuth.BeginAuthorization(new Uri(RequestUrl));\n\n            Assert.Null(authUrl);\n        }\n\n        [Fact]\n        public void CompleteAuthorization_Gets_Access_Token()\n        {\n            string screenName = \"JoeMayo\";\n            string userID = \"123\";\n            const string Verifier = \"1234567\";\n            const string AuthToken = \"token\";\n            const string AuthLink = \"https://authorizationlink?oauth_token=\" + AuthToken + \"&oauth_verifier=\" + Verifier;\n            var webAuth = new WebAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            oAuthMock.Setup(oauth => oauth.GetUrlParamValue(It.IsAny<string>(), \"oauth_verifier\")).Returns(Verifier);\n            oAuthMock.Setup(oauth => oauth.GetUrlParamValue(It.IsAny<string>(), \"oauth_token\")).Returns(AuthToken);\n            oAuthMock.Setup(oAuth => oAuth.AuthorizationLinkGet(It.IsAny<string>(), It.IsAny<string>(), \"https://authorizationlink\", false, AuthAccessType.NoChange))\n                     .Returns(AuthLink);\n            oAuthMock.Setup(oAuth => oAuth.AccessTokenGet(AuthToken, Verifier, It.IsAny<string>(), string.Empty, out screenName, out userID));\n            webAuth.OAuthTwitter = oAuthMock.Object;\n\n            webAuth.CompleteAuthorization(new Uri(AuthLink));\n\n            oAuthMock.Verify(oauth => oauth.AccessTokenGet(AuthToken, Verifier, It.IsAny<string>(), string.Empty, out screenName, out userID), Times.Once());\n            Assert.Equal(screenName, webAuth.ScreenName);\n            Assert.Equal(userID, webAuth.UserId);\n        }\n\n        [Fact]\n        public void CompleteAuthorization_Requires_A_Uri()\n        {\n            var webAuth = new WebAuthorizer {Credentials = new InMemoryCredentials()};\n            var oAuthMock = new Mock<IOAuthTwitter>();\n            webAuth.OAuthTwitter = oAuthMock.Object;\n\n            var ex = Assert.Throws<ArgumentNullException>(() => webAuth.CompleteAuthorization(null));\n\n            Assert.Equal(\"callback\", ex.ParamName);\n        }\n\n        [Fact]\n        public void CompleteAuthorization_Requires_Credentials()\n        {\n            const string AuthLink = \"https://authorizationlink\";\n            var webAuth = new WebAuthorizer();\n\n            var ex = Assert.Throws<ArgumentNullException>(() => webAuth.CompleteAuthorization(new Uri(AuthLink)));\n\n            Assert.Equal(\"Credentials\", ex.ParamName);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterXUnitTests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterXUnitTests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2011\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"7e5cc081-f481-441a-aa6f-de6c35384005\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/RawTests/RawExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.RawTests\n{\n    public class RawExtensionsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public RawExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [Fact]\n        public void RawRequestProcessor_Works_With_Actions()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<Raw>>(rawReqProc);\n        }\n\n        [Fact]\n        public void ExecuteRawRequest_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            ctx.ExecuteRaw(QueryString, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/statuses/update.json\",\n                    parameters,\n                    It.IsAny<Func<string, Raw>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void ExecuteRawRequest_Returns_Raw_Result()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n            const string ExpectedResult = \"<status>xxx</status>\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            execMock.Setup(exec => exec.PostToTwitter(FullUrl, parameters, It.IsAny<Func<string, Raw>>())).Returns(ExpectedResult);\n\n            string actualResult = ctx.ExecuteRaw(QueryString, parameters);\n\n            Assert.Equal(ExpectedResult, actualResult);\n        }\n\n        [Fact]\n        public void ExecuteRawRequest_Resolves_Too_Many_Url_Slashes()\n        {\n            const string QueryStringWithBeginningSlash = \"/statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            ctx.ExecuteRaw(QueryStringWithBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    FullUrl,\n                    parameters,\n                    It.IsAny<Func<string, Raw>>()), Times.Once());\n        }\n\n        [Fact]\n        public void ExecuteRawRequest_Resolves_Too_Few_Url_Slashes()\n        {\n            const string QueryStringWithoutBeginningSlash = \"statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            ctx.ExecuteRaw(QueryStringWithoutBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    FullUrl,\n                    parameters, It.IsAny<Func<string, Raw>>()), Times.Once());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/RawTests/RawRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.RawTests\n{\n    public class RawRequestProcessorTests\n    {\n        public RawRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Returns_Parameters()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n            Expression<Func<Raw, bool>> expression =\n                raw =>\n                    raw.QueryString == \"/statuses/public_timeline.json\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = rawReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"QueryString\", \"/statuses/public_timeline.json\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Full_Url()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"QueryString\", \"statuses/public_timeline.json\"},\n             };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Requires_NonNull_QueryString()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"QueryString\", \"statuses/public_timeline.json\"},\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"QueryString\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Requires_NonBlank_QueryString()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", \" \"},\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"QueryString\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Resolves_Extra_Slash_Between_BaseUrl_And_QueryString()\n        {\n            string baseUrlWithTrailingSlash = \"https://api.twitter.com/1.1/\";\n            string queryStringWithPrecedingSlash = \"/statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", queryStringWithPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Resolves_No_Slash_Between_BaseUrl_And_QueryString()\n        {\n            string baseUrlWithoutTrailingSlash = \"https://api.twitter.com/1.1\";\n            string queryStringWithoutPrecedingSlash = \"statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithoutTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", queryStringWithoutPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void ProcessIDResultsTest()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            List<Raw> result = rawReqProc.ProcessResults(QueryResponse);\n\n            Assert.Equal(QueryResponse, result.First().Result);\n        }\n\n        const string QueryResponse = @\"<statuses type=\"\"array\"\">\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906745</id>\n    <text>ah,vou lá comer</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>77880019</id>\n      <name>caah </name>\n      <screen_name>caahbuss</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/440024240/d_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>48</followers_count>\n      <profile_background_color>131516</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>009999</profile_link_color>\n      <profile_sidebar_fill_color>efefef</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>eeeeee</profile_sidebar_border_color>\n      <friends_count>47</friends_count>\n      <created_at>Mon Sep 28 00:47:48 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme14/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>211</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906740</id>\n    <text>É só ir no site e participar... http://tinyurl.com/ygvepg5</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>76732695</id>\n      <name>Embarque Imediato</name>\n      <screen_name>EmbarqueNoFilme</screen_name>\n      <location></location>\n      <description>Twitter oficial do filme Embarque Imediato autorizado pela Europa Filmes.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/473272502/poster_embarque_imediato_rostoatores_2_normal.jpg</profile_image_url>\n      <url>http://embarqueimediatoofilme.blogspot.com/</url>\n      <protected>false</protected>\n      <followers_count>401</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>381</friends_count>\n      <created_at>Wed Sep 23 19:33:49 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-14400</utc_offset>\n      <time_zone>Santiago</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/45672389/twitter08.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>224</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906722</id>\n    <text>Se pá, ir em aniversário rico, onde deve haver muitas etiquetas, e eu odeio, pois gosto de aniversário de pobre onde é churras de havaiana</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>55657026</id>\n      <name>bee</name>\n      <screen_name>beemk</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/463563734/Imagem_004_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>76</followers_count>\n      <profile_background_color>1A1B1F</profile_background_color>\n      <profile_text_color>666666</profile_text_color>\n      <profile_link_color>2FC2EF</profile_link_color>\n      <profile_sidebar_fill_color>252429</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>181A1E</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Jul 10 20:34:52 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme9/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>819</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906718</id>\n    <text>@BruBloinski é... digamos que de tradicional só os mesmos shows horríveis de sempre. só.</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118865157</in_reply_to_status_id>\n    <in_reply_to_user_id>60946427</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>BruBloinski</in_reply_to_screen_name>\n    <user>\n      <id>16219715</id>\n      <name>wickybr</name>\n      <screen_name>wickybr</screen_name>\n      <location></location>\n      <description>25 anos, publicidade, cerveja Original. Blogueiro, curioso, as vezes nervoso, nem sempre calmo. Leitor, afinador e desajeitador.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/287234140/fbranco_copy_normal.jpg</profile_image_url>\n      <url>http://www.wickybr.blogspot.com</url>\n      <protected>false</protected>\n      <followers_count>41</followers_count>\n      <profile_background_color>642D8B</profile_background_color>\n      <profile_text_color>3D1957</profile_text_color>\n      <profile_link_color>FF0000</profile_link_color>\n      <profile_sidebar_fill_color>7AC3EE</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>65B0DA</profile_sidebar_border_color>\n      <friends_count>59</friends_count>\n      <created_at>Wed Sep 10 11:58:16 +0000 2008</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/28744035/base-back-twitter2.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>586</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906715</id>\n    <text>Завтра \"\"Саломея\"\" Виктюка ^^</text>\n    <source>&lt;a href=\"\"http://www.tweetdeck.com/\"\" rel=\"\"nofollow\"\"&gt;TweetDeck&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>45792079</id>\n      <name>Нестерова Валерия</name>\n      <screen_name>Valeriya22</screen_name>\n      <location>Russia, Kazan</location>\n      <description>Sunshine Cowboy</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/511281997/IMG_6486-_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>30</followers_count>\n      <profile_background_color>9AE4E8</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n      <friends_count>31</friends_count>\n      <created_at>Tue Jun 09 07:59:17 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/17289836/22334353_lll01.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>241</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906713</id>\n    <text>Diferente C S!</text>\n    <source>&lt;a href=\"\"http://www.myspace.com/sync\"\" rel=\"\"nofollow\"\"&gt;MySpace&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>83531026</id>\n      <name>Abraham</name>\n      <screen_name>yosoeelabraham</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/479193636/bleach_chad0005_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>0</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>0</friends_count>\n      <created_at>Mon Oct 19 05:38:34 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906712</id>\n    <text>@REL407 you sound like a Disney original! I was scared for the entire summer!!!! Smdh</text>\n    <source>&lt;a href=\"\"http://ubertwitter.com\"\" rel=\"\"nofollow\"\"&gt;UberTwitter&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118659350</in_reply_to_status_id>\n    <in_reply_to_user_id>33132386</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>REL407</in_reply_to_screen_name>\n    <user>\n      <id>91234221</id>\n      <name>Calesha Thompson</name>\n      <screen_name>missKILLAmouse</screen_name>\n      <location>ÜT: 39.739345,-104.97695</location>\n      <description>La plus belle. KILLA. Never change</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/544207431/135152_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>13</followers_count>\n      <profile_background_color>030303</profile_background_color>\n      <profile_text_color>8c878c</profile_text_color>\n      <profile_link_color>e30417</profile_link_color>\n      <profile_sidebar_fill_color>393f42</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>050505</profile_sidebar_border_color>\n      <friends_count>18</friends_count>\n      <created_at>Fri Nov 20 00:53:08 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Eastern Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/56030928/killainstincts.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>108</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906709</id>\n    <text>45 I use http://x2t.com/6145 to get 100 followers a day. It work great</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>50541031</id>\n      <name>oaiden;</name>\n      <screen_name>helloaiden17</screen_name>\n      <location>Philadelphia</location>\n      <description>by the looks of my twitter picture, you can call me Lindsey Lohan.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/533420177/151033_normal.jpg</profile_image_url>\n      <url>http://www.myspace.com/omgaiden</url>\n      <protected>false</protected>\n      <followers_count>92</followers_count>\n      <profile_background_color>fa3483</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>fa3483</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>202</friends_count>\n      <created_at>Thu Jun 25 03:45:43 +0000 2009</created_at>\n      <favourites_count>4</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/54654224/1111111111.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>706</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906708</id>\n    <text>Police parked outside my house #ilovemyneighbourhood</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>23310378</id>\n      <name>Natalie Dye</name>\n      <screen_name>natalie_xo</screen_name>\n      <location>Yorkshire, its a state of mind</location>\n      <description>Listen to the sound of the world then watch it turn.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/525311356/Snapshot_20091026_10_normal.jpg</profile_image_url>\n      <url>http://www.facebook.com/natalie0x</url>\n      <protected>false</protected>\n      <followers_count>102</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>4597d6</profile_link_color>\n      <profile_sidebar_fill_color>2b3575</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>93</friends_count>\n      <created_at>Sun Mar 08 14:05:12 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/55410721/Desktop_Background.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>1794</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906705</id>\n    <text>@robertabachert ta eu vo tenta adiantar algumas coisas mais eu preciso das fotos</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118781972</in_reply_to_status_id>\n    <in_reply_to_user_id>61624985</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>robertabachert</in_reply_to_screen_name>\n    <user>\n      <id>61279770</id>\n      <name>Patrícia Ferrari</name>\n      <screen_name>PatyFerrariC</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/534284147/patttttttty_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>35</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>050505</profile_text_color>\n      <profile_link_color>4978d6</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>090a0a</profile_sidebar_border_color>\n      <friends_count>51</friends_count>\n      <created_at>Wed Jul 29 19:53:07 +0000 2009</created_at>\n      <favourites_count>6</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/26221650/16587349.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>518</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906704</id>\n    <text>RT @ALuizCosta: Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <retweeted_status>\n      <created_at>Fri Nov 27 12:31:15 +0000 2009</created_at>\n      <id>6110610973</id>\n      <text>Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n      <source>web</source>\n      <truncated>false</truncated>\n      <in_reply_to_status_id></in_reply_to_status_id>\n      <in_reply_to_user_id></in_reply_to_user_id>\n      <favorited>false</favorited>\n      <in_reply_to_screen_name></in_reply_to_screen_name>\n      <user>\n        <id>67778641</id>\n        <name>AntonioLuiz MCCosta</name>\n        <screen_name>ALuizCosta</screen_name>\n        <location>São Paulo, Brasil</location>\n        <description>Antonio Luiz escreve na revista CartaCapital e gosta de ciência, filosofia e literatura, principalmente fantasia e ficção científica</description>\n        <profile_image_url>http://a3.twimg.com/profile_images/375056565/AntonioLuiz_normal.jpg</profile_image_url>\n        <url>http://www.scribd.com/people/documents/3817321-antonio-luiz-monteiro-coelho-da-costa</url>\n        <protected>false</protected>\n        <followers_count>460</followers_count>\n        <profile_background_color>9AE4E8</profile_background_color>\n        <profile_text_color>333333</profile_text_color>\n        <profile_link_color>b30000</profile_link_color>\n        <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n        <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n        <friends_count>44</friends_count>\n        <created_at>Sat Aug 22 01:31:02 +0000 2009</created_at>\n        <favourites_count>0</favourites_count>\n        <utc_offset>-10800</utc_offset>\n        <time_zone>Brasilia</time_zone>\n        <profile_background_image_url>http://a1.twimg.com/profile_background_images/31703608/celebraohf2.jpg</profile_background_image_url>\n        <profile_background_tile>true</profile_background_tile>\n        <statuses_count>1427</statuses_count>\n        <notifications>false</notifications>\n        <geo_enabled>false</geo_enabled>\n        <verified>false</verified>\n        <following>false</following>\n      </user>\n      <geo />\n    </retweeted_status>\n    <user>\n      <id>77265167</id>\n      <name>SL da Silva</name>\n      <screen_name>sergio_virtual</screen_name>\n      <location></location>\n      <description>Um brasileiro no mundo do Twitter!</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/460588539/DSC00180_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>20</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Sep 25 17:31:11 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>514</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906701</id>\n    <text>@No1SassyGrl anywhere! I have to take vacay bc I have too many hours accrued at work and I want to travel!</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6113853732</in_reply_to_status_id>\n    <in_reply_to_user_id>14408045</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>No1SassyGrl</in_reply_to_screen_name>\n    <user>\n      <id>9408302</id>\n      <name>Ian Mone</name>\n      <screen_name>x5455</screen_name>\n      <location>Puerto Rico</location>\n      <description>Intelligent, laid back, addicted to videogames, X-Men and TV. Hopelessly romantic and hoping for a nice boy to spend time with</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/84361594/icon_twitter_normal.jpg</profile_image_url>\n      <url>http://x5455.livejournal.com</url>\n      <protected>false</protected>\n      <followers_count>75</followers_count>\n      <profile_background_color>8B542B</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>9D582E</profile_link_color>\n      <profile_sidebar_fill_color>EADEAA</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>D9B17E</profile_sidebar_border_color>\n      <friends_count>38</friends_count>\n      <created_at>Fri Oct 12 18:26:24 +0000 2007</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme8/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1194</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906696</id>\n    <text>@nickjonas amor! te hiciste el twitter! jaja el otro día me lo habías dicho XD ahora unite al @teamfasofachero</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>56783491</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>nickjonas</in_reply_to_screen_name>\n    <user>\n      <id>37250104</id>\n      <name>Milagros C.</name>\n      <screen_name>militaaa</screen_name>\n      <location>Buenos Aires, Argentina</location>\n      <description>This is my crazy world... I'm just being milita. I hope you like my antics and madness, because that's me :)  </description>\n      <profile_image_url>http://a3.twimg.com/profile_images/532032207/P1050370_-_copia_normal.JPG</profile_image_url>\n      <url>http://www.facebook.com/profile.php?id=1010395037&amp;ref=name</url>\n      <protected>false</protected>\n      <followers_count>204</followers_count>\n      <profile_background_color>050505</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>746278</profile_link_color>\n      <profile_sidebar_fill_color>ff088c</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>d1bcbc</profile_sidebar_border_color>\n      <friends_count>300</friends_count>\n      <created_at>Sat May 02 18:17:02 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Buenos Aires</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/54044533/Teen_Vogue_Collage_by_bob55_JOE.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>6718</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906693</id>\n    <text>@MrPeterAndre its really good of u to set the record straight on that coz every1 believes everything they read abwt katie n its not fair!x</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6106899259</in_reply_to_status_id>\n    <in_reply_to_user_id>24086418</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>MrPeterAndre</in_reply_to_screen_name>\n    <user>\n      <id>54843229</id>\n      <name>ashleigh berry</name>\n      <screen_name>missashleigh19</screen_name>\n      <location>bradford</location>\n      <description>waaasssssup :) mobile beauty therapist from bradford, probably should say leeds but that would be lying haha follow me :)</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/503338157/halloween_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>7</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>362720</profile_text_color>\n      <profile_link_color>B40B43</profile_link_color>\n      <profile_sidebar_fill_color>E5507E</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>CC3366</profile_sidebar_border_color>\n      <friends_count>16</friends_count>\n      <created_at>Wed Jul 08 08:56:21 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme11/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>49</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906692</id>\n    <text>RT @ArmsLikeYours Chain Reaction with a Skylit Drive Next Friday!!!</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>18696988</id>\n      <name>Faith Sugarhigh</name>\n      <screen_name>Miss_Sugarhigh</screen_name>\n      <location>Texas</location>\n      <description>I'm a ProMoTeR/Booking Agent. I love helping bands/artists/Concerts &amp; events that inspire/change the scene. I support Skate4Cancer.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/367961955/pink_pink_003_normal.JPG</profile_image_url>\n      <url>http://www.myspace.com/miss_sugarhigh</url>\n      <protected>false</protected>\n      <followers_count>1172</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>373799</profile_link_color>\n      <profile_sidebar_fill_color>ff3892</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>822</friends_count>\n      <created_at>Tue Jan 06 21:42:00 +0000 2009</created_at>\n      <favourites_count>3</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/30568555/btf_witness_cover400x400.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>11612</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906683</id>\n    <text>64 Heyy I just got alot of followers using http://ohurl.com/0G .</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>61754026</id>\n      <name>Samien</name>\n      <screen_name>Samien501</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://s.twimg.com/a/1259091217/images/default_profile_5_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>382</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>1071</friends_count>\n      <created_at>Fri Jul 31 11:52:27 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>208</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906674</id>\n    <text>@JohnCarnell Thanks for the blog post, looking forward to getting you a proper write up. Have yourself a good evening : )</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>39247092</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>JohnCarnell</in_reply_to_screen_name>\n    <user>\n      <id>29426018</id>\n      <name>David Wood</name>\n      <screen_name>BigDaveSB</screen_name>\n      <location>Gloucester</location>\n      <description>I’m a serial fundraising; capoeira playing; science loving; hat wearing; skeptically enquiring geek</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/359441931/twitterProfilePhoto_normal.jpg</profile_image_url>\n      <url>http://justgiving.com/melonandbigdave</url>\n      <protected>false</protected>\n      <followers_count>177</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>161</friends_count>\n      <created_at>Tue Apr 07 11:02:36 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1335</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906673</id>\n    <text>I think it's possible my characters laugh and smile too much. Not that I need to be thinking about such things since I just need to write!</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>14297876</id>\n      <name>Misty Baird</name>\n      <screen_name>Langwidere</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/66698519/Photo_80_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>47</followers_count>\n      <profile_background_color>0099B9</profile_background_color>\n      <profile_text_color>3C3940</profile_text_color>\n      <profile_link_color>0099B9</profile_link_color>\n      <profile_sidebar_fill_color>95E8EC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>5ED4DC</profile_sidebar_border_color>\n      <friends_count>56</friends_count>\n      <created_at>Thu Apr 03 23:38:48 +0000 2008</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-25200</utc_offset>\n      <time_zone>Mountain Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme4/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1907</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906670</id>\n    <text>@bpradolovers eu nem ligo pra essas coisas de responder e pa.. pra MIM eles sao os msm desde SEMPRE e vo continuar amando eles me*</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118810923</in_reply_to_status_id>\n    <in_reply_to_user_id>74561853</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>bpradolovers</in_reply_to_screen_name>\n    <user>\n      <id>48044595</id>\n      <name>Marie Rochebois !</name>\n      <screen_name>marie_vr</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/541774726/Picture_066_normal.jpg</profile_image_url>\n      <url>http://www.orkut.com.br/Main#Profile?uid=8665293908869110209&amp;rl=t</url>\n      <protected>false</protected>\n      <followers_count>239</followers_count>\n      <profile_background_color>eb1717</profile_background_color>\n      <profile_text_color>1f1f1d</profile_text_color>\n      <profile_link_color>f01fe9</profile_link_color>\n      <profile_sidebar_fill_color>8838bd</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>fc0ad8</profile_sidebar_border_color>\n      <friends_count>160</friends_count>\n      <created_at>Wed Jun 17 17:44:04 +0000 2009</created_at>\n      <favourites_count>85</favourites_count>\n      <utc_offset>-32400</utc_offset>\n      <time_zone>Alaska</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/53871388/caveira-de-diamantes_-amor_dios.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>7664</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906667</id>\n    <text>Follow my nigga, my Lil brother @KENNETHVP he keep big shit going on in the M</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>30511463</id>\n      <name>Dj Hollywood Oompa </name>\n      <screen_name>HollywoodOompa</screen_name>\n      <location></location>\n      <description>i am a cool ass person. i am a DJ and i am an entertainer. i dont keep drama around me, and i am a hard worker hell im working now </description>\n      <profile_image_url>http://a1.twimg.com/profile_images/540923604/16644_568873017318_56703609_33197738_592021_n_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>278</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>81</friends_count>\n      <created_at>Sat Apr 11 19:55:17 +0000 2009</created_at>\n      <favourites_count>2</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/55606030/mix.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>457</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n</statuses>\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/RelatedResultsTests/RelatedResultsRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.RelatedResultsTests\n{\n    public class RelatedResultsRequestProcessorTests\n    {\n        public RelatedResultsRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void RelatedResultsRequestProcessor_Works_With_Json_Data()\n        {\n            var relResultsProc = new RelatedResultsRequestProcessor<RelatedResults>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(relResultsProc);\n        }\n\n        [Fact]\n        public void GetParameters_Parses_Parameters()\n        {\n            var relResultsProc = new RelatedResultsRequestProcessor<RelatedResults>();\n            Expression<Func<RelatedResults, bool>> expression =\n                res =>\n                    res.Type == RelatedResultsType.Show &&\n                    res.StatusID == 123ul;\n            LambdaExpression lambdaExpression = expression;\n\n            Dictionary<string, string> queryParams = relResultsProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)RelatedResultsType.Show).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"StatusID\", \"123\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Creates_Show_Url()\n        {\n            var relResultsProc = new RelatedResultsRequestProcessor<RelatedResults> { BaseUrl = \"https://api.twitter.com/1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)RelatedResultsType.Show).ToString() },\n                    { \"StatusID\", \"123\" }\n                };\n            string expectedUrl = \"https://api.twitter.com/1/related_results/show/123.json\";\n\n            Request req = relResultsProc.BuildUrl(parameters);\n\n            Assert.Equal(expectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_RelatedResults()\n        {\n            var relResultsProc = new RelatedResultsRequestProcessor<RelatedResults> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            List<RelatedResults> results = relResultsProc.ProcessResults(ShowResultsResponse);\n\n            Assert.NotNull(results);\n            var result = results.First();\n            Assert.NotNull(result.ResultAnnotations);\n            var attribs = result.ResultAnnotations.Attributes;\n            Assert.NotNull(attribs);\n            Assert.True(attribs.ContainsKey(\"ConversationRole\"));\n            Assert.Equal(\"Fork\", attribs[\"ConversationRole\"]);\n            Assert.Equal(1.0, result.Score);\n            Assert.Equal(\"Tweet\", result.Kind);\n            Assert.NotNull(result.ValueAnnotations);\n            Assert.Empty(result.ValueAnnotations.Attributes);\n            Assert.False(result.Retweeted);\n            Assert.Equal(\"swhitley\", result.InReplyToScreenName);\n            var contributors = result.Contributors;\n            Assert.NotNull(contributors);\n            Assert.Empty(contributors);\n            Assert.NotNull(result.Coordinates);\n            Assert.Equal(0, result.Coordinates.Latitude);\n            Assert.NotNull(result.Place);\n            Assert.Null(result.Place.FullName);\n            var user = result.User;\n            Assert.NotNull(user);\n            Assert.Equal(\"Joe Mayo\", user.Name);\n            Assert.Equal(0, result.RetweetCount);\n            Assert.Equal(\"195999832157073409\", result.IDString);\n            Assert.Equal(8739282ul, result.InReplyToUserID);\n            Assert.False(result.Favorited);\n            Assert.Equal(\"195992821411495936\", result.InReplyToStatusIDString);\n            Assert.Equal(195992821411495936ul, result.InReplyToStatusID);\n            Assert.Equal(\"web\", result.Source);\n            Assert.Equal(new DateTime(2012, 4, 27, 22, 16, 16), result.CreatedAt);\n            Assert.Equal(\"8739282\", result.InReplyToUserIDString);\n            Assert.False(result.Truncated);\n            Assert.Equal(8739282ul, result.InReplyToUserID);\n            Assert.NotNull(result.Geo);\n            Assert.Null(result.Geo.Accuracy);\n            Assert.NotNull(result.Text);\n            Assert.True(result.Text.StartsWith(\"@swhitley If building\"));\n        }\n\n        [Fact]\n        public void ProcessResults_Sets_Input_Params()\n        {\n            var relResultsProc = new RelatedResultsRequestProcessor<RelatedResults> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)RelatedResultsType.Show).ToString() },\n                { \"StatusID\", \"123\" }\n            };\n            relResultsProc.BuildUrl(parameters);\n\n            List<RelatedResults> results = relResultsProc.ProcessResults(ShowResultsResponse);\n\n            var result = results.First();\n\n            Assert.Equal(RelatedResultsType.Show, result.Type);\n            Assert.Equal(123ul, result.StatusID);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new RelatedResultsRequestProcessor<RelatedResults> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var results = reqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(0, results.Count);\n        }\n\n        const string ShowResultsResponse = @\"[\n   {\n      \"\"annotations\"\":{\n         \"\"FromUser\"\":\"\"swhitley\"\"\n      },\n      \"\"results\"\":[\n         {\n            \"\"annotations\"\":{\n               \"\"ConversationRole\"\":\"\"Fork\"\"\n            },\n            \"\"score\"\":1.0,\n            \"\"kind\"\":\"\"Tweet\"\",\n            \"\"value\"\":{\n               \"\"annotations\"\":null,\n               \"\"retweeted\"\":false,\n               \"\"in_reply_to_screen_name\"\":\"\"swhitley\"\",\n               \"\"contributors\"\":null,\n               \"\"coordinates\"\":null,\n               \"\"place\"\":null,\n               \"\"user\"\":{\n                  \"\"id\"\":15411837,\n                  \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n                  \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n                  \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n                  \"\"followers_count\"\":1101,\n                  \"\"default_profile\"\":false,\n                  \"\"profile_background_color\"\":\"\"0099B9\"\",\n                  \"\"lang\"\":\"\"en\"\",\n                  \"\"utc_offset\"\":-25200,\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n                  \"\"location\"\":\"\"Denver, CO\"\",\n                  \"\"profile_link_color\"\":\"\"0099B9\"\",\n                  \"\"listed_count\"\":112,\n                  \"\"verified\"\":false,\n                  \"\"protected\"\":false,\n                  \"\"profile_use_background_image\"\":true,\n                  \"\"is_translator\"\":false,\n                  \"\"following\"\":false,\n                  \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n                  \"\"profile_text_color\"\":\"\"3C3940\"\",\n                  \"\"statuses_count\"\":1906,\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n                  \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n                  \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n                  \"\"friends_count\"\":211,\n                  \"\"default_profile_image\"\":false,\n                  \"\"contributors_enabled\"\":false,\n                  \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"geo_enabled\"\":true,\n                  \"\"favourites_count\"\":41,\n                  \"\"profile_background_tile\"\":false,\n                  \"\"notifications\"\":false,\n                  \"\"show_all_inline_media\"\":false,\n                  \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n                  \"\"follow_request_sent\"\":false\n               },\n               \"\"retweet_count\"\":0,\n               \"\"id_str\"\":\"\"195999832157073409\"\",\n               \"\"in_reply_to_user_id\"\":8739282,\n               \"\"favorited\"\":false,\n               \"\"in_reply_to_status_id_str\"\":\"\"195992821411495936\"\",\n               \"\"in_reply_to_status_id\"\":195992821411495936,\n               \"\"source\"\":\"\"web\"\",\n               \"\"created_at\"\":\"\"Fri Apr 27 22:16:16 +0000 2012\"\",\n               \"\"in_reply_to_user_id_str\"\":\"\"8739282\"\",\n               \"\"truncated\"\":false,\n               \"\"id\"\":195999832157073409,\n               \"\"geo\"\":null,\n               \"\"text\"\":\"\"@swhitley If building Web apps for external customers, they would be shooting themselves in the foot by not being able to test\"\"\n            }\n         },\n         {\n            \"\"annotations\"\":{\n               \"\"ConversationRole\"\":\"\"Fork\"\"\n            },\n            \"\"score\"\":1.0,\n            \"\"kind\"\":\"\"Tweet\"\",\n            \"\"value\"\":{\n               \"\"annotations\"\":null,\n               \"\"retweeted\"\":false,\n               \"\"in_reply_to_screen_name\"\":\"\"swhitley\"\",\n               \"\"contributors\"\":null,\n               \"\"coordinates\"\":null,\n               \"\"place\"\":null,\n               \"\"user\"\":{\n                  \"\"id\"\":23502490,\n                  \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/125779302\\/SeanWork_normal.jpg\"\",\n                  \"\"url\"\":null,\n                  \"\"created_at\"\":\"\"Mon Mar 09 21:14:07 +0000 2009\"\",\n                  \"\"followers_count\"\":45,\n                  \"\"default_profile\"\":true,\n                  \"\"profile_background_color\"\":\"\"C0DEED\"\",\n                  \"\"lang\"\":\"\"en\"\",\n                  \"\"utc_offset\"\":-21600,\n                  \"\"name\"\":\"\"Sean Tovson\"\",\n                  \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n                  \"\"location\"\":\"\"\"\",\n                  \"\"profile_link_color\"\":\"\"0084B4\"\",\n                  \"\"listed_count\"\":2,\n                  \"\"verified\"\":false,\n                  \"\"protected\"\":false,\n                  \"\"profile_use_background_image\"\":true,\n                  \"\"is_translator\"\":false,\n                  \"\"following\"\":false,\n                  \"\"description\"\":\"\"\"\",\n                  \"\"profile_text_color\"\":\"\"333333\"\",\n                  \"\"statuses_count\"\":73,\n                  \"\"screen_name\"\":\"\"TravelDeveloper\"\",\n                  \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/125779302\\/SeanWork_normal.jpg\"\",\n                  \"\"time_zone\"\":\"\"Central Time (US & Canada)\"\",\n                  \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n                  \"\"friends_count\"\":34,\n                  \"\"default_profile_image\"\":false,\n                  \"\"contributors_enabled\"\":false,\n                  \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n                  \"\"id_str\"\":\"\"23502490\"\",\n                  \"\"geo_enabled\"\":false,\n                  \"\"favourites_count\"\":2,\n                  \"\"profile_background_tile\"\":false,\n                  \"\"notifications\"\":false,\n                  \"\"show_all_inline_media\"\":false,\n                  \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n                  \"\"follow_request_sent\"\":false\n               },\n               \"\"retweet_count\"\":0,\n               \"\"id_str\"\":\"\"195993342566342657\"\",\n               \"\"in_reply_to_user_id\"\":8739282,\n               \"\"favorited\"\":false,\n               \"\"in_reply_to_status_id_str\"\":\"\"195992821411495936\"\",\n               \"\"in_reply_to_status_id\"\":195992821411495936,\n               \"\"source\"\":\"\"web\"\",\n               \"\"created_at\"\":\"\"Fri Apr 27 21:50:28 +0000 2012\"\",\n               \"\"in_reply_to_user_id_str\"\":\"\"8739282\"\",\n               \"\"truncated\"\":false,\n               \"\"id\"\":195993342566342657,\n               \"\"geo\"\":null,\n               \"\"text\"\":\"\"@swhitley Sounds like you work for misinformed Nazis\"\"\n            }\n         }\n      ],\n      \"\"score\"\":1.0,\n      \"\"groupName\"\":\"\"TweetsWithConversation\"\",\n      \"\"resultType\"\":\"\"Tweet\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/SavedSearchTests/SavedSearchExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.SavedSearchTests\n{\n    public class SavedSearchExtensionsTests\n    {\n        Mock<ITwitterAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public SavedSearchExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitializeTwitterContextMock()\n        {\n            authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [Fact]\n        public void SavedSearchRequestProcessor_Handles_Actions()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<SavedSearch>>(searchReqProc);\n        }\n\n        [Fact]\n        public void CreateSavedSearch_Throws_On_Missing_Query()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.CreateSavedSearch(null));\n\n            Assert.Equal(\"query\", ex.ParamName);\n        }\n\n        [Fact]\n        public void CreateSavedSearch_Invokes_Executor_Execute()\n        {\n            const string Query = \"#LinqToTwitter\";\n            TwitterContext ctx = InitializeTwitterContextMock();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, SavedSearch>>()))\n                .Returns(SavedSearchResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"query\", Query }\n            };\n\n            SavedSearch search = ctx.CreateSavedSearch(\"#LinqToTwitter\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/saved_searches/create.json\",\n                    parameters,\n                    It.IsAny<Func<string, SavedSearch>>()),\n                Times.Once());\n\n            Assert.NotNull(search);\n            Assert.Equal(Query, search.Name);\n            Assert.Equal(Query, search.Query);\n        }\n\n        [Fact]\n        public void DestroySavedSearch_Throws_On_Invalid_ID()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DestroySavedSearch(0));\n\n            Assert.Equal(\"id\", ex.ParamName);\n        }\n\n        [Fact]\n        public void DestroySavedSearch_Invokes_Executor_Execute()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, SavedSearch>>()))\n                .Returns(SavedSearchResponse);\n            var parameters = new Dictionary<string, string>();\n\n            SavedSearch search = ctx.DestroySavedSearch(123);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://api.twitter.com/1.1/saved_searches/destroy/123.json\",\n                    parameters,\n                    It.IsAny<Func<string, SavedSearch>>()),\n                Times.Once());\n\n            Assert.NotNull(search);\n            Assert.Equal(\"#LinqToTwitter\", search.Name);\n            Assert.Equal(\"123\", search.ID);\n        }\n\n        const string SavedSearchResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/SavedSearchTests/SavedSearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.SavedSearchTests\n{\n    public class SavedSearchRequestProcessorTests\n    {\n        public SavedSearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void SavedSearchRequestProcessor_Works_On_Json_Format_Data()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(searchReqProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Searches_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Searches };\n\n            var searches = searchReqProc.ProcessResults(SearchesResponse);\n\n            Assert.NotNull(searches);\n            Assert.Equal(2, searches.Count);\n            var search = searches.First();\n            Assert.NotNull(search);\n            Assert.Equal(\"#LinqToTwitter\", search.Query);\n            Assert.Equal(\"#LinqToTwitter\", search.Name);\n            Assert.Equal(0, search.Postition);\n            Assert.Equal(\"3275867\", search.IDString);\n            Assert.Equal(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Show };\n\n            var searches = searchReqProc.ProcessResults(ShowResponse);\n\n            Assert.NotNull(searches);\n            Assert.Single(searches);\n            var search = searches.Single();\n            Assert.NotNull(search);\n            Assert.Equal(\"#LinqToTwitter\", search.Query);\n            Assert.Equal(\"#LinqToTwitter\", search.Name);\n            Assert.Equal(0, search.Postition);\n            Assert.Equal(\"3275867\", search.IDString);\n            Assert.Equal(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            var searches = reqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(0, searches.Count);\n        }\n\n        [Fact]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<SavedSearch, bool>> expression =\n                search =>\n                    search.Type == SavedSearchType.Show &&\n                    search.ID == \"123\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = searchReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SavedSearchType.Show).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"123\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Show_Throws_On_Missing_ID()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"ID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/show/123.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() },\n                { \"ID\", \"123\" }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_SavedSearches_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/list.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Searches.ToString() }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = Assert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(null));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n\n        const string SearchesResponse = @\"[\n   {\n      \"\"query\"\":\"\"#LinqToTwitter\"\",\n      \"\"name\"\":\"\"#LinqToTwitter\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"3275867\"\",\n      \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n      \"\"id\"\":3275867\n   },\n   {\n      \"\"query\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"name\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"101035995\"\",\n      \"\"created_at\"\":\"\"Sun Apr 29 04:09:00 +0000 2012\"\",\n      \"\"id\"\":101035995\n   }\n]\";\n\n        const string ShowResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/SearchTests/SearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.SearchTests\n{\n    public class SearchRequestProcessorTests\n    {\n        public SearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParametersTest()\n        {\n            var target = new SearchRequestProcessor<Search>();\n            Expression<Func<Search, bool>> expression =\n                search =>\n                    search.Type == SearchType.Search &&\n                    search.GeoCode == \"40.757929,-73.985506,25km\" &&\n                    search.SearchLanguage == \"en\" &&\n                    search.Count == 10 &&\n                    search.Query == \"LINQ to Twitter\" &&\n                    search.SinceID == 123 &&\n                    search.MaxID == 200 &&\n                    search.ResultType == ResultType.Popular &&\n                    search.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SearchType.Search).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"GeoCode\", \"40.757929,-73.985506,25km\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SearchLanguage\", \"en\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"LINQ to Twitter\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"MaxID\", \"200\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ResultType\", ((int)ResultType.Popular).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Includes_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&geocode=40.757929%2C-73.985506%2C25km&lang=en&count=10&until=2011-07-04&since_id=1&result_type=popular&include_entities=false\";\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"GeoCode\", \"40.757929,-73.985506,25km\" },\n                    { \"SearchLanguage\", \"en\" },\n                    { \"Count\", \"10\" },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"SinceID\", \"1\" },\n                    { \"Until\", new DateTime(2011, 7, 4).ToString() },\n                    { \"ResultType\", ResultType.Popular.ToString() },\n                    { \"IncludeEntities\", false.ToString() }\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_With_Missing_Type_Parameter()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            ArgumentException ex =\n                Assert.Throws<ArgumentException>(() =>\n                {\n                    searchReqProc.BuildUrl(parameters);\n                });\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_When_Parameters_Null()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            ArgumentException ex =\n                Assert.Throws<ArgumentException>(() =>\n                {\n                    searchReqProc.BuildUrl(null);\n                });\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Encodes_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            string expected = searchReqProc.BaseUrl + \"tweets.json?q=Contains%20Space\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"Contains Space\" }\n                };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.Equal(expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Requires_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", null }\n                };\n\n            ArgumentException ex =\n                Assert.Throws<ArgumentNullException>(() =>\n                    searchReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Query\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Adds_True_IncludeEntities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"IncludeEntities\", true.ToString(CultureInfo.InvariantCulture) }\n                };\n            const string Expected = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&include_entities=true\";\n\n            Request req = searchProc.BuildUrl(parameters);\n\n            Assert.Equal(Expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void ProcessResults_Creates_List_Of_Status()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.NotNull(results.First().Statuses);\n            Assert.True(results.First().Statuses.Any());\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_CreatedAt()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.Equal(\n                new DateTimeOffset(2012, 9, 6, 0, 10, 12, new TimeSpan(0, 0, 0)), \n                results.First().Statuses.First().CreatedAt);\n        }\n\n        [Fact]\n        public void ProcessResults_Instantiates_Entities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.NotNull(results.First().Statuses.First().Entities);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Entity_Urls()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UrlEntity> urls = results.First().Statuses.First().Entities.UrlEntities;\n            Assert.NotNull(urls);\n            Assert.Equal(1, urls.Count);\n            UrlEntity firstUrl = urls.First();\n            Assert.Equal(\"http://t.co/Cc85Yzpj\", firstUrl.Url);\n            Assert.Equal(\"http://bit.ly/PSOVso\", firstUrl.ExpandedUrl);\n            Assert.Equal(\"bit.ly/PSOVso\", firstUrl.DisplayUrl);\n            Assert.Equal(68, firstUrl.Start);\n            Assert.Equal(88, firstUrl.End);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Entity_Hashtags()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<HashTagEntity> hashes = results.First().Statuses[0].Entities.HashTagEntities;\n            Assert.NotNull(hashes);\n            Assert.Equal(3, hashes.Count);\n            HashTagEntity firstHash = hashes.First();\n            Assert.Equal(\"twitterapi\", firstHash.Tag);\n            Assert.Equal(89, firstHash.Start);\n            Assert.Equal(100, firstHash.End);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Entity_Users()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UserMentionEntity> users = results.First().Statuses[0].Entities.UserMentionEntities;\n            Assert.NotNull(users);\n            Assert.Equal(1, users.Count);\n            UserMentionEntity firstUser = users.First();\n            Assert.Equal(\"JoeMayo\", firstUser.ScreenName);\n            Assert.Equal(\"Joe Mayo\", firstUser.Name);\n            Assert.Equal(15411837ul, firstUser.Id);\n            Assert.Equal(3, firstUser.Start);\n            Assert.Equal(11, firstUser.End);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Entity_Media()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<MediaEntity> media = results.First().Statuses[0].Entities.MediaEntities;\n            Assert.NotNull(media);\n            Assert.Equal(1, media.Count);\n            MediaEntity firstMedia = media.First();\n            Assert.Equal(155683816676134913ul, firstMedia.ID);\n            Assert.Equal(\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrl);\n            Assert.Equal(\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrlHttps);\n            Assert.Equal(\"http://t.co/36MZIOyW\", firstMedia.Url);\n            Assert.Equal(\"pic.twitter.com/36MZIOyW\", firstMedia.DisplayUrl);\n            Assert.Equal(\"http://twitter.com/rschu/status/155683816671940609/photo/1\", firstMedia.ExpandedUrl);\n            Assert.Equal(\"photo\", firstMedia.Type);\n            Assert.NotNull(firstMedia.Sizes);\n            Assert.Equal(5, firstMedia.Sizes.Count);\n            PhotoSize firstSize = firstMedia.Sizes.First();\n            Assert.Equal(\"orig\", firstSize.Type);\n            Assert.Equal(1161, firstSize.Width);\n            Assert.Equal(925, firstSize.Height);\n            Assert.Equal(\"fit\", firstSize.Resize);\n            Assert.Equal(59, firstMedia.Start);\n            Assert.Equal(79, firstMedia.End);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Entity_Symbols()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<SymbolEntity> symbols = results.First().Statuses[0].Entities.SymbolEntities;\n            Assert.NotNull(symbols);\n            Assert.Equal(2, symbols.Count);\n            SymbolEntity symbol = symbols.First();\n            Assert.Equal(\"PEP\", symbol.Text);\n            Assert.Equal(114, symbol.Start);\n            Assert.Equal(118, symbol.End);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Search_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.NotNull(results);\n            Assert.Single(results);\n            Search search = results.Single();\n            Assert.NotNull(search);\n            SearchMetaData metaData = search.SearchMetaData;\n            Assert.NotNull(metaData);\n            Assert.Equal(0.046m, metaData.CompletedIn);\n            Assert.Equal(281604225014824960ul, metaData.MaxID);\n            Assert.Equal(5ul, metaData.SinceID);\n            Assert.Equal(10, metaData.Count);\n            Assert.Equal(\"Twitter\", metaData.Query);\n            Assert.Equal(\n                \"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\",\n                metaData.NextResults);\n            Assert.Equal(\n                \"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\", \n                metaData.RefreshUrl);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Status_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.NotNull(results);\n            Assert.Single(results);\n            Search search = results.Single();\n            Assert.NotNull(search);\n            List<Status> statuses = search.Statuses;\n            Assert.NotNull(statuses);\n            Assert.NotEmpty(statuses);\n            Status status = search.Statuses.First();\n            Assert.NotNull(status);\n            StatusMetaData metaData = status.MetaData;\n            Assert.NotNull(metaData);\n            Assert.Equal(\"recent\", metaData.ResultType);\n            Assert.Equal(\"en\", metaData.IsoLanguageCode);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Source()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.Equal(@\"<a href=\"\"http://www.csharp-station.com/\"\" rel=\"\"nofollow\"\">C# Station</a>\", results.First().Statuses.First().Source);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Text()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.Equal(\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http://t.co/Cc85Yzpj #twitterapi #linq #linq2twitter\", results.First().Statuses.First().Text);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> searches = searchProc.ProcessResults(EmptyResponse);\n\n            Assert.NotNull(searches);\n            Assert.Single(searches);\n            var search = searches.Single();\n            Assert.NotNull(search);\n            var results = search.Statuses;\n            Assert.NotNull(results);\n            Assert.Empty(results);\n        }\n\n        const string SearchJson = @\"{\n   \"\"statuses\"\":[\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Sep 06 00:10:12 +0000 2012\"\",\n         \"\"id\"\":243501315039322112,\n         \"\"id_str\"\":\"\"243501315039322112\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eC# Station\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ],\n            \"\"symbols\"\": [\n                {\n                    \"\"text\"\": \"\"PEP\"\",\n                    \"\"indices\"\": [\n                        114,\n                        118\n                    ]\n                    },\n                    {\n                    \"\"text\"\": \"\"COKE\"\",\n                    \"\"indices\"\": [\n                        128,\n                        133\n                    ]\n                }\n            ],\n            \"\"media\"\":[\n               {\n                  \"\"id\"\":155683816676134913,\n                  \"\"id_str\"\":\"\"155683816676134913\"\",\n                  \"\"indices\"\":[\n                     59,\n                     79\n                  ],\n                  \"\"media_url\"\":\"\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"media_url_https\"\":\"\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"url\"\":\"\"http://t.co/36MZIOyW\"\",\n                  \"\"display_url\"\":\"\"pic.twitter.com/36MZIOyW\"\",\n                  \"\"expanded_url\"\":\"\"http://twitter.com/rschu/status/155683816671940609/photo/1\"\",\n                  \"\"type\"\":\"\"photo\"\",\n                  \"\"sizes\"\":{\n                     \"\"orig\"\":{\n                        \"\"w\"\":1161,\n                        \"\"h\"\":925,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"thumb\"\":{\n                        \"\"w\"\":150,\n                        \"\"h\"\":150,\n                        \"\"resize\"\":\"\"crop\"\"\n                     },\n                     \"\"large\"\":{\n                        \"\"w\"\":1024,\n                        \"\"h\"\":816,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"small\"\":{\n                        \"\"w\"\":340,\n                        \"\"h\"\":271,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"medium\"\":{\n                        \"\"w\"\":600,\n                        \"\"h\"\":478,\n                        \"\"resize\"\":\"\"fit\"\"\n                     }\n                  }\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:08:16 +0000 2012\"\",\n         \"\"id\"\":243123342771625985,\n         \"\"id_str\"\":\"\"243123342771625985\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:08:13\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:51 +0000 2012\"\",\n         \"\"id\"\":243121726920224769,\n         \"\"id_str\"\":\"\"243121726920224769\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:47\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:40 +0000 2012\"\",\n         \"\"id\"\":243121682787741696,\n         \"\"id_str\"\":\"\"243121682787741696\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:39\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 06:34:40 +0000 2012\"\",\n         \"\"id\"\":242873292950757376,\n         \"\"id_str\"\":\"\"242873292950757376\"\",\n         \"\"text\"\":\"\"Check out Working with Timelines with LINQ to Twitter written by @JoeMayo http:\\/\\/t.co\\/wTSodeyq\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/tweetbutton\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTweet Button\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/wTSodeyq\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/wblo.gs\\/dB3\"\",\n                  \"\"display_url\"\":\"\"wblo.gs\\/dB3\"\",\n                  \"\"indices\"\":[\n                     74,\n                     94\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     65,\n                     73\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 06:18:02 +0000 2012\"\",\n         \"\"id\"\":242506723078836224,\n         \"\"id_str\"\":\"\"242506723078836224\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 04:12:43 +0000 2012\"\",\n         \"\"id\"\":242475182780973056,\n         \"\"id_str\"\":\"\"242475182780973056\"\",\n         \"\"text\"\":\"\"Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":2,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     76,\n                     87\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     88,\n                     93\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     94,\n                     107\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     55,\n                     75\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Fri Aug 31 20:02:43 +0000 2012\"\",\n         \"\"id\"\":241627095502041088,\n         \"\"id_str\"\":\"\"241627095502041088\"\",\n         \"\"text\"\":\"\"@ChevonChr Here's an example what i use LINQ on to extract the user values http:\\/\\/t.co\\/UL222Y5Q\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":241623155712610306,\n         \"\"in_reply_to_status_id_str\"\":\"\"241623155712610306\"\",\n         \"\"in_reply_to_user_id\"\":128105076,\n         \"\"in_reply_to_user_id_str\"\":\"\"128105076\"\",\n         \"\"in_reply_to_screen_name\"\":\"\"ChevonChr\"\",\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/UL222Y5Q\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/j.mp\\/ODpb3E\"\",\n                  \"\"display_url\"\":\"\"j.mp\\/ODpb3E\"\",\n                  \"\"indices\"\":[\n                     75,\n                     95\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"ChevonChr\"\",\n                  \"\"name\"\":\"\"Chevon Christie\"\",\n                  \"\"id\"\":128105076,\n                  \"\"id_str\"\":\"\"128105076\"\",\n                  \"\"indices\"\":[\n                     0,\n                     10\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 22:48:05 +0000 2012\"\",\n         \"\"id\"\":241306323923390464,\n         \"\"id_str\"\":\"\"241306323923390464\"\",\n         \"\"text\"\":\"\"Cool, I'm about to reach 100 followers! See the rest of my stats at Twitter Counter: http:\\/\\/t.co\\/QH864mhf\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twittercounter.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eThe Visitor Widget\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/QH864mhf\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/twtr.to\\/lINq\"\",\n                  \"\"display_url\"\":\"\"twtr.to\\/lINq\"\",\n                  \"\"indices\"\":[\n                     85,\n                     105\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"es\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 00:00:51 +0000 2012\"\",\n         \"\"id\"\":240962249802530816,\n         \"\"id_str\"\":\"\"240962249802530816\"\",\n         \"\"text\"\":\"\"TWITTER to LINQ parece tan sencillo... No s\\u00e9 porqu\\u00e9 me trae tantos problemas :S\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/blackberry.com\\/twitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for BlackBerry\\u00ae\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      }\n   ],\n   \"\"search_metadata\"\":{\n       \"\"completed_in\"\":0.046,\n       \"\"max_id\"\":281604225014824960,\n       \"\"max_id_str\"\":\"\"281604225014824960\"\",\n       \"\"next_results\"\":\"\"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"query\"\":\"\"Twitter\"\",\n       \"\"refresh_url\"\":\"\"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"count\"\":10,\n       \"\"since_id\"\":5,\n       \"\"since_id_str\"\":\"\"5\"\"\n   }\n}\";\n\n        const string EmptyResponse = @\"{\n   \"\"statuses\"\":[\n   ],\n   \"\"search_metadata\"\":{\n      \"\"completed_in\"\":0.038,\n      \"\"max_id\"\":243501315039322112,\n      \"\"max_id_str\"\":\"\"243501315039322112\"\",\n      \"\"page\"\":1,\n      \"\"query\"\":\"\"LINQ+To+Twitter\"\",\n      \"\"refresh_url\"\":\"\"?since_id=243501315039322112&q=LINQ%20To%20Twitter&include_entities=1\"\",\n      \"\"results_per_page\"\":15,\n      \"\"since_id\"\":0,\n      \"\"since_id_str\"\":\"\"0\"\"\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/SerializationTests/TypeConversionExtensionsTests.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LinqToTwitterXUnitTests.Common;\nusing LitJson;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class TypeConversionExtensionsTests\n    {\n        public TypeConversionExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetValue_Returns_Decimal()\n        {\n            JsonData search = JsonMapper.ToObject(SearchJson);\n\n            var val = search.GetValue<decimal>(\"completed_in\");\n\n            Assert.Equal(.057m, val);\n        }\n\n        [Fact]\n        public void GetValue_Returns_NullableInt()\n        {\n            JsonData search = JsonMapper.ToObject(SearchJson);\n\n            var val = search.GetValue<int?>(\"page\");\n\n            Assert.Null(val);\n        }\n\nconst string SearchJson = @\"{\n   \"\"completed_in\"\":0.057,\n   \"\"max_id\"\":155786587962224641,\n   \"\"max_id_str\"\":\"\"155786587962224641\"\",\n   \"\"next_page\"\":\"\"?page=2&max_id=155786587962224641&q=blue%20angels&include_entities=1\"\",\n   \"\"page\"\":null,\n   \"\"query\"\":\"\"blue+angels\"\",\n   \"\"refresh_url\"\":\"\"?since_id=155786587962224641&q=blue%20angels&include_entities=1\"\",\n   \"\"results\"\":[\n      {\n         \"\"created_at\"\":\"\"Sat, 07 Jan 2012 23:03:11 +0000\"\",\n         \"\"entities\"\":{\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http://t.co/xSmFKo5h\"\",\n                  \"\"expanded_url\"\":\"\"http://bit.ly/yXkWPy\"\",\n                  \"\"display_url\"\":\"\"bit.ly/yXkWPy\"\",\n                  \"\"indices\"\":[\n                     116,\n                     136\n                  ]\n               }\n            ]\n         },\n         \"\"from_user\"\":\"\"LakeMtkaLiberty\"\",\n         \"\"from_user_id\"\":15117715,\n         \"\"from_user_id_str\"\":\"\"15117715\"\",\n         \"\"from_user_name\"\":\"\"The Admiral\"\",\n         \"\"geo\"\":{\n            \"\"coordinates\"\":[\n               -22.7747,\n               -41.9052\n            ],\n            \"\"type\"\":\"\"Point\"\"\n         },\n         \"\"id\"\":155786587962224641,\n         \"\"id_str\"\":\"\"155786587962224641\"\",\n         \"\"iso_language_code\"\":\"\"en\"\",\n         \"\"metadata\"\":{\n            \"\"recent_retweets\"\":3,         \n            \"\"result_type\"\":\"\"recent\"\"\n         },\n         \"\"profile_image_url\"\":\"\"http://a1.twimg.com/profile_images/69013587/small_The_Admiral_normal.jpg\"\",\n         \"\"profile_image_url_https\"\":\"\"https://si0.twimg.com/profile_images/69013587/small_The_Admiral_normal.jpg\"\",\n         \"\"source\"\":\"\"&lt;a href=&quot;http://twitterfeed.com&quot; rel=&quot;nofollow&quot;&gt;twitterfeed&lt;/a&gt;\"\",\n         \"\"text\"\":\"\"Photo of the week: US Navy rescues 18 Iranians from Somali Pirates: Related Posts:Daily Navy Photo: Blue Angels ... http://t.co/xSmFKo5h\"\",\n         \"\"to_user\"\":\"\"JoeMayo\"\",\n         \"\"to_user_id\"\":123456789,\n         \"\"to_user_id_str\"\":\"\"123456789\"\",\n         \"\"to_user_name\"\":\"\"Joe Mayo\"\"\n      },\n      {\n         \"\"created_at\"\":\"\"Sat, 07 Jan 2012 22:27:21 +0000\"\",\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"Presidential\"\",\n                  \"\"indices\"\":[\n                     0,\n                     13\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"Newt\"\",\n                  \"\"indices\"\":[\n                     62,\n                     67\n                  ]\n               }\n            ]\n         },\n         \"\"from_user\"\":\"\"cu_mr2ducks\"\",\n         \"\"from_user_id\"\":27061351,\n         \"\"from_user_id_str\"\":\"\"27061351\"\",\n         \"\"from_user_name\"\":\"\"cu_mr2ducks\"\",\n         \"\"geo\"\":null,\n         \"\"id\"\":155777569373945856,\n         \"\"id_str\"\":\"\"155777569373945856\"\",\n         \"\"iso_language_code\"\":\"\"en\"\",\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\"\n         },\n         \"\"profile_image_url\"\":\"\"http://a3.twimg.com/profile_images/1508391830/IMG_0004_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https://si0.twimg.com/profile_images/1508391830/IMG_0004_normal.JPG\"\",\n         \"\"source\"\":\"\"&lt;a href=&quot;http://twitter.com/#!/download/iphone&quot; rel=&quot;nofollow&quot;&gt;Twitter for iPhone&lt;/a&gt;\"\",\n         \"\"text\"\":\"\"#Presidential Race -Intelligence without character is hallow. #Newt multiple affairs. Trust? Even Blue Angels are to be faithful.\"\",\n         \"\"to_user\"\":null,\n         \"\"to_user_id\"\":null,\n         \"\"to_user_id_str\"\":null,\n         \"\"to_user_name\"\":null\n      },\n      {\n         \"\"created_at\"\":\"\"Sat, 07 Jan 2012 21:24:50 +0000\"\",\n         \"\"entities\"\":{\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"DesharThomas30\"\",\n                  \"\"name\"\":\"\"DeShar Thomas\"\",\n                  \"\"id\"\":323629022,\n                  \"\"id_str\"\":\"\"323629022\"\",\n                  \"\"indices\"\":[\n                     0,\n                     15\n                  ]\n               }\n            ]\n         },\n         \"\"from_user\"\":\"\"OurtneyLamie\"\",\n         \"\"from_user_id\"\":280234351,\n         \"\"from_user_id_str\"\":\"\"280234351\"\",\n         \"\"from_user_name\"\":\"\"Court Lamie\"\",\n         \"\"geo\"\":null,\n         \"\"id\"\":155761836736786432,\n         \"\"id_str\"\":\"\"155761836736786432\"\",\n         \"\"iso_language_code\"\":\"\"en\"\",\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\"\n         },\n         \"\"profile_image_url\"\":\"\"http://a2.twimg.com/profile_images/1730998374/image_normal.jpg\"\",\n         \"\"profile_image_url_https\"\":\"\"https://si0.twimg.com/profile_images/1730998374/image_normal.jpg\"\",\n         \"\"source\"\":\"\"&lt;a href=&quot;http://twitter.com/#!/download/iphone&quot; rel=&quot;nofollow&quot;&gt;Twitter for iPhone&lt;/a&gt;\"\",\n         \"\"text\"\":\"\"@DesharThomas30 Ohhh haha Blue devils are mean because they are devils. And umm UOFM are nice like angels (:\"\",\n         \"\"to_user\"\":\"\"DesharThomas30\"\",\n         \"\"to_user_id\"\":323629022,\n         \"\"to_user_id_str\"\":\"\"323629022\"\",\n         \"\"to_user_name\"\":\"\"DeShar Thomas\"\",\n         \"\"in_reply_to_status_id\"\":155761481038835713,\n         \"\"in_reply_to_status_id_str\"\":\"\"155761481038835713\"\"\n      },\n      {\n         \"\"created_at\"\":\"\"Sat, 07 Jan 2012 18:42:36 +0000\"\",\n         \"\"entities\"\":{\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"rschu\"\",\n                  \"\"name\"\":\"\"Ren\\u00e9 Schulte\"\",\n                  \"\"id\"\":18668342,\n                  \"\"id_str\"\":\"\"18668342\"\",\n                  \"\"indices\"\":[\n                     3,\n                     9\n                  ]\n               },\n               {\n                  \"\"screen_name\"\":\"\"PicturesLab\"\",\n                  \"\"name\"\":\"\"Pictures Lab\"\",\n                  \"\"id\"\":195138719,\n                  \"\"id_str\"\":\"\"195138719\"\",\n                  \"\"indices\"\":[\n                     37,\n                     49\n                  ]\n               }\n            ],\n            \"\"media\"\":[\n               {\n                  \"\"id\"\":155683816676134913,\n                  \"\"id_str\"\":\"\"155683816676134913\"\",\n                  \"\"indices\"\":[\n                     59,\n                     79\n                  ],\n                  \"\"media_url\"\":\"\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"media_url_https\"\":\"\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"url\"\":\"\"http://t.co/36MZIOyW\"\",\n                  \"\"display_url\"\":\"\"pic.twitter.com/36MZIOyW\"\",\n                  \"\"expanded_url\"\":\"\"http://twitter.com/rschu/status/155683816671940609/photo/1\"\",\n                  \"\"type\"\":\"\"photo\"\",\n                  \"\"sizes\"\":{\n                     \"\"orig\"\":{\n                        \"\"w\"\":1161,\n                        \"\"h\"\":925,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"thumb\"\":{\n                        \"\"w\"\":150,\n                        \"\"h\"\":150,\n                        \"\"resize\"\":\"\"crop\"\"\n                     },\n                     \"\"large\"\":{\n                        \"\"w\"\":1024,\n                        \"\"h\"\":816,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"small\"\":{\n                        \"\"w\"\":340,\n                        \"\"h\"\":271,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"medium\"\":{\n                        \"\"w\"\":600,\n                        \"\"h\"\":478,\n                        \"\"resize\"\":\"\"fit\"\"\n                     }\n                  }\n               }\n            ]\n         },\n         \"\"from_user\"\":\"\"PicturesLab\"\",\n         \"\"from_user_id\"\":195138719,\n         \"\"from_user_id_str\"\":\"\"195138719\"\",\n         \"\"from_user_name\"\":\"\"Pictures Lab\"\",\n         \"\"geo\"\":null,\n         \"\"id\"\":155721009704599552,\n         \"\"id_str\"\":\"\"155721009704599552\"\",\n         \"\"iso_language_code\"\":\"\"en\"\",\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\"\n         },\n         \"\"profile_image_url\"\":\"\"http://a3.twimg.com/profile_images/1138811413/VideoLogo_ohne_Text_400x400_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https://si0.twimg.com/profile_images/1138811413/VideoLogo_ohne_Text_400x400_normal.png\"\",\n         \"\"source\"\":\"\"&lt;a href=&quot;http://pictureslab.rene-schulte.info&quot; rel=&quot;nofollow&quot;&gt;Pictures Lab&lt;/a&gt;\"\",\n         \"\"text\"\":\"\"RT @rschu: Goodbye Hygiene Museum. | @PicturesLab Sepia FX http://t.co/36MZIOyW\"\",\n         \"\"to_user\"\":null,\n         \"\"to_user_id\"\":null,\n         \"\"to_user_id_str\"\":null,\n         \"\"to_user_name\"\":null\n      }\n   ],\n   \"\"results_per_page\"\":15,\n   \"\"since_id\"\":3,\n   \"\"since_id_str\"\":\"\"3\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/SerializationTests/XmlSerializerTests.cs",
    "content": "﻿using System.Text;\nusing System.Xml;\nusing System.Xml.Serialization;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class XmlSerializerTests\n    {\n        public XmlSerializerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void Account_Can_Serialize()\n        {\n            var acct = new Account();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Account));\n            xmlSerializer.Serialize(writer, acct);\n        }\n\n        [Fact]\n        public void Blocks_Can_Serialize()\n        {\n            var block = new Blocks();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Blocks));\n            xmlSerializer.Serialize(writer, block);\n        }\n\n        [Fact]\n        public void DirectMessage_Can_Serialize()\n        {\n            var dm = new DirectMessage();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(DirectMessage));\n            xmlSerializer.Serialize(writer, dm);\n        }\n\n        [Fact]\n        public void Favorites_Can_Serialize()\n        {\n            var favorite = new Favorites();\n            var stringBuilder = new StringBuilder();\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Favorites));\n\n            xmlSerializer.Serialize(writer, favorite);\n        }\n\n        [Fact]\n        public void Friendship_Can_Serialize()\n        {\n            var friend = new Friendship();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Friendship));\n            xmlSerializer.Serialize(writer, friend);\n        }\n\n        [Fact]\n        public void Place_Can_Serialize()\n        {\n            var place = new Place();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Place));\n            xmlSerializer.Serialize(writer, place);\n        }\n\n        [Fact]\n        public void Geometry_Can_Serialize()\n        {\n            var geo = new Geometry();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Geometry));\n            xmlSerializer.Serialize(writer, geo);\n        }\n\n        [Fact]\n        public void IDList_Can_Serialize()\n        {\n            var ids = new IDList();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(IDList));\n            xmlSerializer.Serialize(writer, ids);\n        }\n\n        [Fact]\n        public void List_Can_Serialize()\n        {\n            var list = new List();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(List));\n            xmlSerializer.Serialize(writer, list);\n        }\n\n        [Fact]\n        public void Raw_Can_Serialize()\n        {\n            var raw = new Raw();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Raw));\n            xmlSerializer.Serialize(writer, raw);\n        }\n\n        [Fact]\n        public void SavedSearch_Can_Serialize()\n        {\n            var saveSrch = new SavedSearch();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(SavedSearch));\n            xmlSerializer.Serialize(writer, saveSrch);\n        }\n\n        [Fact]\n        public void Search_Can_Serialize()\n        {\n            var search = new Search();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Search));\n            xmlSerializer.Serialize(writer, search);\n        }\n\n        [Fact]\n        public void SocialGraph_Can_Serialize()\n        {\n            var graph = new SocialGraph();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(SocialGraph));\n            xmlSerializer.Serialize(writer, graph);\n        }\n\n        [Fact]\n        public void Status_Can_Serialize()\n        {\n            var tweet = new Status {Type = StatusType.Home};\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Status));\n            xmlSerializer.Serialize(writer, tweet);\n        }\n\n        [Fact]\n        public void Trend_Can_Serialize()\n        {\n            var trend = new Trend();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(Trend));\n            xmlSerializer.Serialize(writer, trend);\n        }\n\n        [Fact]\n        public void User_Can_Serialize()\n        {\n            var user = new User();\n            var stringBuilder = new StringBuilder();\n\n            var writer = XmlWriter.Create(stringBuilder);\n            var xmlSerializer = new XmlSerializer(typeof(User));\n            xmlSerializer.Serialize(writer, user);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/SocialGraphTests/SocialGraphRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.SocialGraphTests\n{\n    public class SocialGraphRequestProcessorTests\n    {\n        public SocialGraphRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void SavedSearchRequestProcessor_Works_On_Json_Format_Data()\n        {\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(graphReqProc);\n        }\n\n        void TestQueryResponseParsesCorrectly(SocialGraphType type)\n        {\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph> { Type = type };\n\n            List<SocialGraph> graphResponse = graphReqProc.ProcessResults(TestQueryResponse);\n\n            Assert.NotNull(graphResponse);\n            Assert.Single(graphResponse);\n            var graph = graphResponse.First();\n            var ids = graph.IDs;\n            Assert.NotNull(ids);\n            Assert.Equal(ids[0], \"547559234\");\n            Assert.Equal(ids[1], \"189123075\");\n            var cursor = graph.CursorMovement;\n            Assert.NotNull(cursor);\n            Assert.Equal(\"2\", cursor.Previous);\n            Assert.Equal(\"3\", cursor.Next);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Followers_Response()\n        {\n            TestQueryResponseParsesCorrectly(SocialGraphType.Followers);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Friends_Response()\n        {\n            TestQueryResponseParsesCorrectly(SocialGraphType.Friends);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph>();\n\n            var graph = graphReqProc.ProcessResults(string.Empty);\n\n            Assert.Empty(graph);\n        }\n\n        [Fact]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph>();\n            Expression<Func<SocialGraph, bool>> expression =\n                graph =>\n                    graph.Type == SocialGraphType.Followers &&\n                    graph.UserID == 123ul &&\n                    graph.ScreenName == \"456\" &&\n                    graph.Cursor == \"-1\" &&\n                    graph.Count == 1;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = graphReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SocialGraphType.Followers).ToString())));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"456\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"-1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var statProc = new SocialGraphRequestProcessor<SocialGraph>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = SocialGraphType.Friends,\n                UserID = 123,\n                ScreenName = \"abc\",\n                Cursor = \"-1\",\n                Count = 3,\n            };\n\n            var graphResult = statProc.ProcessResults(TestQueryResponse);\n\n            Assert.NotNull(graphResult);\n            Assert.Single(graphResult);\n            var graph = graphResult.Single();\n            Assert.NotNull(graph);\n            Assert.Equal(SocialGraphType.Friends, graph.Type);\n            Assert.Equal(123ul, graph.UserID);\n            Assert.Equal(\"abc\", graph.ScreenName);\n            Assert.Equal(\"-1\", graph.Cursor);\n            Assert.Equal(3, graph.Count);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = Assert.Throws<ArgumentException>(() => graphReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Friends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", \"0\" },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"456\" },\n                { \"Cursor\", \"1\" },\n                { \"Count\", \"1\" }\n            };\n\n            Request req = graphReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Defaults_Cursor_When_Not_Specified()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?screen_name=JoeMayo&cursor=-1\";\n            var socialGraph = new SocialGraphRequestProcessor<SocialGraph>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SocialGraphType.Friends.ToString() },\n                    { \"ScreenName\", \"JoeMayo\" },\n                };\n\n            Request req = socialGraph.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Followers_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var reqProc = new SocialGraphRequestProcessor<SocialGraph>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)SocialGraphType.Followers).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"456\" },\n                { \"Cursor\", \"1\" },\n                { \"Count\", \"1\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Params()\n        {\n            var graphReqProc = new SocialGraphRequestProcessor<SocialGraph> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => graphReqProc.BuildUrl(null));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n        const string TestQueryResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"3\"\",\n   \"\"ids\"\":[\n      547559234,\n      189123075\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":3\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StatusTests/StatusExtensionsReplyWithMediaAndLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading;\nusing LinqToTwitter;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.StatusTests\n{\n    public class StatusExtensionsReplyWithMediaAndLocationTests\n    {\n        const string ExpectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n        const string FrenchLocale = \"FR-fr\";\n\n        readonly Mock<TwitterContext> twitterCtx;\n        readonly Mock<ITwitterExecute> twitterExecute;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n\n        string status = \"test\";\n        bool possiblySensitive = true;\n        decimal latitude = 37.78215m;\n        decimal longitude = -122.40060m;\n        string placeID = \"place\";\n        bool displayCoordinates = true;\n        ulong inReplyToStatusID = 23030327348932ul;\n\n        List<Media> mediaItems = new List<Media> \n        { \n            new Media\n            {\n                Data = new byte[] { 0xFF },\n                FileName = \"AnImage.jpg\",\n                ContentType = MediaContentType.Jpeg\n            }\n        };\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        public StatusExtensionsReplyWithMediaAndLocationTests()\n        {\n            statusReqProc = new Mock<IRequestProcessor<Status>>();\n            statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n                .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            twitterExecute = new Mock<ITwitterExecute>();\n            twitterExecute.Setup(exec => \n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()))\n                .Returns(SingleStatusResponse);\n\n            twitterCtx = new Mock<TwitterContext>(twitterExecute.Object);\n            twitterCtx.Setup(ctx => ctx.CreateRequestProcessor<Status>())\n                .Returns(statusReqProc.Object);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Throws_On_Null_Status()\n        {\n            status = null;\n\n            var ex = \n                Assert.Throws<ArgumentNullException>(() =>\n                {\n                    StatusExtensions.ReplyWithMedia(\n                        twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                        latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n                });\n\n            Assert.Equal(\"status\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Calls_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()), \n                Times.Once(),\n                \"PostMedia was not called only one time.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.Is<string>(url => url == ExpectedUploadUrl),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass status properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            possiblySensitive = false;\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == placeID),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass placeID parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_DoesNot_Pass_Null_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            placeID = null;\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_DoesNot_Pass_Empty_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            placeID = \"\";\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == displayCoordinates.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass displayCoordinates parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_DoesNot_Pass_False_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            displayCoordinates = false;\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == inReplyToStatusID.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass inReplyToStatusID parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_DoesNot_Pass_NoReply_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            inReplyToStatusID = StatusExtensions.NoReply;\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == null),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_Latitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"lat\"] == latitude.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass latitude parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_Longitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"long\"] == longitude.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass longitude parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_DoesNot_Pass_NoCoordinate_Lat_And_Long_To_PostMedia()\n        {\n            latitude = StatusExtensions.NoCoordinate;\n            longitude = StatusExtensions.NoCoordinate;\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(\n                        parms =>\n                        parms[\"lat\"] == null &&\n                        parms[\"long\"] == null),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Translates_Localized_Lat_And_Long()\n        {\n            string latString = latitude.ToString(CultureInfo.InvariantCulture);\n            string longString = longitude.ToString(CultureInfo.InvariantCulture);\n            Thread.CurrentThread.CurrentUICulture = new CultureInfo(FrenchLocale);\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(\n                        parms =>\n                        parms[\"lat\"] == latString &&\n                        parms[\"long\"] == longString),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"Invariant culture not applied to Lat and/or long.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_Media_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.Is<List<Media>>(media => ReferenceEquals(media, mediaItems)),\n                    It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Requires_NonNull_MediaItems()\n        {\n            mediaItems = null;\n\n            var ex = \n                Assert.Throws<ArgumentNullException>(() =>\n                    StatusExtensions.ReplyWithMedia(\n                        twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                        latitude, longitude, placeID, displayCoordinates, mediaItems, null));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Requires_At_Least_One_Media()\n        {\n            mediaItems = new List<Media>();\n\n            var ex =\n                Assert.Throws<ArgumentException>(() =>\n                    StatusExtensions.ReplyWithMedia(\n                        twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                        latitude, longitude, placeID, displayCoordinates, mediaItems, null));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Passes_IRequestProcessor_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            twitterExecute.Verify(exec =>\n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<List<Media>>(),\n                    It.Is<IRequestProcessor<Status>>(reqProc => reqProc != null)),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass reqProc properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Returns_Status()\n        {\n            Status tweet = StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, mediaItems, null);\n\n            Assert.True(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Sets_Callback()\n        {\n            twitterExecute.SetupSet(exec => exec.AsyncCallback = It.IsAny<Delegate>());\n\n            StatusExtensions.ReplyWithMedia(\n                twitterCtx.Object, inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                mediaItems, null);\n\n            twitterExecute.VerifySet(exec => exec.AsyncCallback = It.IsAny<Delegate>());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StatusTests/StatusExtensionsReplyWithMediaNoLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.StatusTests\n{\n    public class StatusExtensionsReplyWithMediaNoLocationTests\n    {\n        readonly string expectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n\n        readonly Mock<TwitterContext> twitterCtx;\n        readonly Mock<ITwitterExecute> twitterExecute;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n         \n        string status = \"test\";\n        bool possiblySensitive = true;\n        decimal latitude = 37.78215m;\n        ulong inReplyToStatusID = 23030327348932ul;\n\n        List<Media> mediaItems = new List<Media> \n        { \n            new Media\n            {\n                Data = new byte[] { 0xFF },\n                FileName = \"AnImage.jpg\",\n                ContentType = MediaContentType.Jpeg\n            }\n        };\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        public StatusExtensionsReplyWithMediaNoLocationTests()\n        {\n            this.statusReqProc = new Mock<IRequestProcessor<Status>>();\n            this.statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n            .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            this.twitterExecute = new Mock<ITwitterExecute>();\n            this.twitterExecute.Setup(exec => \n                                      exec.PostMedia(\n                                          It.IsAny<string>(),\n                                          It.IsAny<IDictionary<string, string>>(),\n                                          It.IsAny<List<Media>>(),\n                                          It.IsAny<IRequestProcessor<Status>>()))\n            .Returns(SingleStatusResponse);\n\n            this.twitterCtx = new Mock<TwitterContext>(this.twitterExecute.Object);\n            this.twitterCtx.Setup(ctx => ctx.CreateRequestProcessor<Status>())\n            .Returns(this.statusReqProc.Object);\n        }\n\n        public decimal Latitude\n        {\n            get\n            {\n                return latitude;\n            }\n            set\n            {\n                latitude = value;\n            }\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Throws_On_Null_Status()\n        {\n            this.status = null;\n\n            ArgumentNullException ex =\n            Assert.Throws<ArgumentNullException>(() =>\n            {\n                StatusExtensions.ReplyWithMedia(\n                    this.twitterCtx.Object, this.inReplyToStatusID, \n                    this.status, this.possiblySensitive, this.mediaItems);\n            });\n\n            Assert.Equal(\"status\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Calls_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"PostMedia was not called only one time.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.Is<string>(url => url == this.expectedUploadUrl),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia didn't pass status properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString()),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            this.possiblySensitive = false;\n\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_DoesNot_Pass_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_DoesNot_Pass_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Passes_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == inReplyToStatusID.ToString()),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia didn't pass inReplyToStatusID parameter properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_DoesNot_Pass_NoReply_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            this.inReplyToStatusID = StatusExtensions.NoReply;\n\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_DoesNot_Pass_Lat_And_Long_To_PostMedia()\n        {\n            this.latitude = StatusExtensions.NoCoordinate;\n\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(\n                                               parms =>\n                                               parms[\"lat\"] == null &&\n                                               parms[\"long\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"Lat and long should be null.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Passes_Media_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.Is<List<Media>>(media => object.ReferenceEquals(media, this.mediaItems)),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"ReplyWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Requires_NonNull_MediaItems()\n        {\n            this.mediaItems = null;\n\n            ArgumentNullException ex =\n            Assert.Throws<ArgumentNullException>(() =>\n                                                 StatusExtensions.ReplyWithMedia(\n                                                     this.twitterCtx.Object, this.inReplyToStatusID, \n                                                     this.status, this.possiblySensitive, this.mediaItems));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Requires_At_Least_One_Media()\n        {\n            this.mediaItems = new List<Media>();\n\n            ArgumentException ex =\n            Assert.Throws<ArgumentException>(() =>\n                                             StatusExtensions.ReplyWithMedia(\n                                                 this.twitterCtx.Object, this.inReplyToStatusID, \n                                                 this.status, this.possiblySensitive, this.mediaItems));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Passes_IRequestProcessor_To_PostMedia()\n        {\n            StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.IsAny<List<Media>>(),\n                                           It.Is<IRequestProcessor<Status>>(\n                                               reqProc =>\n                                               reqProc != null &&\n                                               reqProc is IRequestProcessor<Status>)),\n                                       Times.Once(),\n                                       \"ReplyWithMedia didn't pass reqProc properly.\");\n        }\n\n        [Fact]\n        public void ReplyWithMedia_Without_Location_Params_Returns_Status()\n        {\n            Status tweet = StatusExtensions.ReplyWithMedia(\n                this.twitterCtx.Object, this.inReplyToStatusID,\n                this.status, this.possiblySensitive, this.mediaItems);\n\n            Assert.True(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StatusTests/StatusExtensionsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.StatusTests\n{\n    public class StatusExtensionsTests\n    {\n        public StatusExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            var authMock = new Mock<ITwitterAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitter(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, Status>>()))\n                .Returns(SingleStatusResponse);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [Fact]\n        public void StatusRequestProcessor_Handles_Actions()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<Status>>(statusReqProc);\n        }\n\n        [Fact]\n        public void UpdateStatus_With_Reply_Sets_StatusID()\n        {\n            const string Status = \"Hello\";\n            const string InReplyToStatusID = \"1\";\n            string expectedStatusID = \"184835136037191681\";\n            var ctx = InitializeTwitterContext();\n\n            Status actual = ctx.UpdateStatus(Status, InReplyToStatusID);\n\n            Assert.Equal(expectedStatusID, actual.StatusID);\n        }\n\n        [Fact]\n        public void UpdateStatus_Throws_On_Null_Tweet()\n        {\n            const string InReplyToStatusID = \"184835136037191681\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateStatus(null, InReplyToStatusID));\n\n            Assert.Equal(\"status\", ex.ParamName);\n        }\n\n        [Fact]\n        public void UpdateStatus_Sets_StatusID()\n        {\n            const string Status = \"Hello\";\n            string expectedStatusID = \"184835136037191681\";\n            var ctx = InitializeTwitterContext();\n\n            Status actual = ctx.UpdateStatus(Status);\n\n            Assert.Equal(expectedStatusID, actual.StatusID);\n        }\n\n        [Fact]\n        public void DestroyStatus_Sets_ID()\n        {\n            const string Id = \"184835136037191681\";\n            string expectedStatusID = \"184835136037191681\";\n            var ctx = InitializeTwitterContext();\n\n            Status actual = ctx.DestroyStatus(Id);\n\n            Assert.Equal(expectedStatusID, actual.StatusID);\n        }\n\n        [Fact]\n        public void DestroyStatus_Throws_On_Null_ID()\n        {\n            string id = string.Empty;\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentException>(() => ctx.DestroyStatus(id));\n\n            Assert.Equal(\"id\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StatusTests/StatusExtensionsTweetWithMediaNoLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.StatusTests\n{\n    public class StatusExtensionsTweetWithMediaNoLocationTests\n    {\n        readonly string expectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n\n        readonly Mock<TwitterContext> twitterCtx;\n        readonly Mock<ITwitterExecute> twitterExecute;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n         \n        string status = \"test\";\n        bool possiblySensitive = true;\n\n        List<Media> mediaItems = new List<Media> \n        { \n            new Media\n            {\n                Data = new byte[] { 0xFF },\n                FileName = \"AnImage.jpg\",\n                ContentType = MediaContentType.Jpeg\n            }\n        };\n\n        public StatusExtensionsTweetWithMediaNoLocationTests()\n        {\n            statusReqProc = new Mock<IRequestProcessor<Status>>();\n            statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n                         .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            twitterExecute = new Mock<ITwitterExecute>();\n            twitterExecute.Setup(exec => exec.PostMedia(It.IsAny<string>(), It.IsAny<IDictionary<string, string>>(), It.IsAny<List<Media>>(), It.IsAny<IRequestProcessor<Status>>()))\n                          .Returns(SingleStatusResponse);\n\n            twitterCtx = new Mock<TwitterContext>(this.twitterExecute.Object);\n            twitterCtx.Setup(ctx => ctx.CreateRequestProcessor<Status>())\n                      .Returns(this.statusReqProc.Object);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Throws_On_Null_Status()\n        {\n            this.status = null;\n\n            ArgumentNullException ex =\n                Assert.Throws<ArgumentNullException>(() =>\n                {\n                    StatusExtensions.TweetWithMedia(\n                        twitterCtx.Object, status, possiblySensitive, mediaItems);\n                });\n\n            Assert.Equal(\"status\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Calls_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"PostMedia was not called only one time.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.Is<string>(url => url == expectedUploadUrl),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass status properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString()),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            possiblySensitive = false;\n\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_DoesNot_Pass_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_DoesNot_Pass_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_DoesNot_Pass_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => !parms.ContainsKey(\"in_reply_To_status_id\")),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_DoesNot_Pass_Lat_And_Long_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>( parms => parms[\"lat\"] == null && parms[\"long\"] == null),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Passes_Media_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.Is<List<Media>>(media => object.ReferenceEquals(media, this.mediaItems)),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Requires_NonNull_MediaItems()\n        {\n            mediaItems = null;\n\n            ArgumentNullException ex =\n                Assert.Throws<ArgumentNullException>(() => StatusExtensions.TweetWithMedia(\n                    twitterCtx.Object, status, possiblySensitive, mediaItems));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Requires_At_Least_One_Media()\n        {\n            mediaItems = new List<Media>();\n\n            ArgumentException ex =\n                Assert.Throws<ArgumentException>(() => StatusExtensions.TweetWithMedia(\n                    twitterCtx.Object, status, possiblySensitive, mediaItems));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Passes_IRequestProcessor_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<List<Media>>(),\n                It.Is<IRequestProcessor<Status>>( reqProc => reqProc != null && reqProc is IRequestProcessor<Status>)),\n                Times.Once(),\n                \"TweetWithMedia didn't pass reqProc properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Without_Location_Params_Returns_Status()\n        {\n            Status tweet = StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive, mediaItems);\n\n            Assert.True(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        [Fact]\n        public void TweetWithMedia_Accepts_Internationalized_Characters()\n        {\n            string statusMsg = \"My new car £10,555. http://test.com #CodePlex #testing\";\n\n            Status tweet = StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, statusMsg, possiblySensitive, mediaItems);\n\n            Assert.True(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_To_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_To_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_To_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_To_status_id_str\"\":null,\n         \"\"in_reply_To_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_To_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_To_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_To_status_id_str\"\":null,\n      \"\"in_reply_To_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_To_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StatusTests/StatusExtensionsTweetsWithMediaAndLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing LinqToTwitter;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.StatusTests\n{\n    public class StatusExtensionsTweetsWithMediaAndLocationTests\n    {\n        readonly string expectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n\n        readonly Mock<TwitterContext> twitterCtx;\n        readonly Mock<ITwitterExecute> twitterExecute;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n         \n        readonly string frenchLocale = \"FR-fr\";\n\n        string status = \"test\";\n        bool possiblySensitive = true;\n        decimal latitude = 37.78215m;\n        decimal longitude = -122.40060m;\n        string placeID = \"place\";\n        bool displayCoordinates = true;\n\n        List<Media> mediaItems = new List<Media> \n        { \n            new Media\n            {\n                Data = new byte[] { 0xFF },\n                FileName = \"AnImage.jpg\",\n                ContentType = MediaContentType.Jpeg\n            }\n        };\n\n        public StatusExtensionsTweetsWithMediaAndLocationTests()\n        {\n            this.statusReqProc = new Mock<IRequestProcessor<Status>>();\n            this.statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n            .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            this.twitterExecute = new Mock<ITwitterExecute>();\n            this.twitterExecute.Setup(exec => \n                exec.PostMedia(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<List<Media>>(),\n                    It.IsAny<IRequestProcessor<Status>>()))\n            .Returns(SingleStatusResponse);\n\n            this.twitterCtx = new Mock<TwitterContext>(this.twitterExecute.Object);\n            this.twitterCtx.Setup(ctx => ctx.CreateRequestProcessor<Status>())\n            .Returns(this.statusReqProc.Object);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Throws_On_Null_Status()\n        {\n            this.status = null;\n\n            ArgumentNullException ex =\n            Assert.Throws<ArgumentNullException>(() =>\n            {\n                StatusExtensions.TweetWithMedia(\n                    this.twitterCtx.Object, this.status, this.possiblySensitive,\n                    this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                    this.mediaItems, null);\n            });\n\n            Assert.Equal(\"status\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Calls_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"PostMedia was not called only one time.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.Is<string>(url => url == this.expectedUploadUrl),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass status properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString()),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            this.possiblySensitive = false;\n\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == placeID),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass placeID parameter properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_DoesNot_Pass_Null_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            this.placeID = null;\n\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_DoesNot_Pass_Empty_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            this.placeID = \"\";\n\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == displayCoordinates.ToString()),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass displayCoordinates parameter properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_DoesNot_Pass_False_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            this.displayCoordinates = false;\n\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_DoesNot_Pass_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == null),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_Latitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"lat\"] == latitude.ToString()),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass latitude parameter properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_Longitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(parms => parms[\"long\"] == longitude.ToString()),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass longitude parameter properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_DoesNot_Pass_NoCoordinate_Lat_And_Long_To_PostMedia()\n        {\n            this.latitude = StatusExtensions.NoCoordinate;\n            this.longitude = StatusExtensions.NoCoordinate;\n\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, this.status, this.possiblySensitive,\n                latitude, this.longitude, this.placeID, this.displayCoordinates,\n                mediaItems, null);\n\n            twitterExecute.Verify(exec => exec.PostMedia(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>( parms => parms[\"lat\"] == null && parms[\"long\"] == null),\n                It.IsAny<List<Media>>(),\n                It.IsAny<IRequestProcessor<Status>>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Translates_Localized_Lat_And_Long()\n        {\n            string latString = this.latitude.ToString();\n            string longString = this.longitude.ToString();\n            Thread.CurrentThread.CurrentUICulture = new CultureInfo(this.frenchLocale);\n\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.Is<IDictionary<string, string>>(\n                                               parms =>\n                                               parms[\"lat\"] == latString &&\n                                               parms[\"long\"] == longString),\n                                           It.IsAny<List<Media>>(),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"Invariant culture not applied to Lat and/or long.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_Media_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.Is<List<Media>>(media => object.ReferenceEquals(media, this.mediaItems)),\n                                           It.IsAny<IRequestProcessor<Status>>()),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Requires_NonNull_MediaItems()\n        {\n            this.mediaItems = null;\n\n            ArgumentNullException ex =\n            Assert.Throws<ArgumentNullException>(() =>\n                StatusExtensions.TweetWithMedia(\n                    this.twitterCtx.Object, this.status, this.possiblySensitive,\n                    this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                    this.mediaItems, null));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Requires_At_Least_One_Media()\n        {\n            this.mediaItems = new List<Media>();\n\n            ArgumentException ex =\n            Assert.Throws<ArgumentException>(() =>\n                StatusExtensions.TweetWithMedia(\n                    this.twitterCtx.Object, this.status, this.possiblySensitive,\n                    this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                    this.mediaItems, null));\n\n            Assert.Equal(\"mediaItems\", ex.ParamName);\n        }\n\n        [Fact]\n        public void TweetWithMedia_Passes_IRequestProcessor_To_PostMedia()\n        {\n            StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            this.twitterExecute.Verify(exec =>\n                                       exec.PostMedia(\n                                           It.IsAny<string>(),\n                                           It.IsAny<IDictionary<string, string>>(),\n                                           It.IsAny<List<Media>>(),\n                                           It.Is<IRequestProcessor<Status>>(\n                                               reqProc =>\n                                               reqProc != null &&\n                                               reqProc is IRequestProcessor<Status>)),\n                                       Times.Once(),\n                                       \"TweetWithMedia didn't pass reqProc properly.\");\n        }\n\n        [Fact]\n        public void TweetWithMedia_Returns_Status()\n        {\n            Status tweet = StatusExtensions.TweetWithMedia(\n                this.twitterCtx.Object, this.status, this.possiblySensitive,\n                this.latitude, this.longitude, this.placeID, this.displayCoordinates,\n                this.mediaItems, null);\n\n            Assert.True(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        [Fact]\n        public void TweetWithMedia_Sets_Callback()\n        {\n            twitterExecute.SetupSet(exec => exec.AsyncCallback = It.IsAny<Delegate>());\n\n            StatusExtensions.TweetWithMedia(\n                twitterCtx.Object, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                mediaItems, null);\n\n            this.twitterExecute.VerifySet(exec => exec.AsyncCallback = It.IsAny<Delegate>());\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StatusTests/StatusRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.StatusTests\n{\n    public class StatusRequestProcessorTests\n    {\n        public StatusRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            Expression<Func<Status, bool>> expression =\n            status =>\n                status.Type == StatusType.Home &&\n                status.ID == \"10\" &&\n                status.UserID == \"10\" &&\n                status.ScreenName == \"JoeMayo\" &&\n                status.SinceID == 123 &&\n                status.MaxID == 456 &&\n                status.Count == 50 &&\n                status.Cursor == \"789\" &&\n                status.IncludeRetweets == true &&\n                status.ExcludeReplies == true &&\n                status.IncludeEntities == true &&\n                status.IncludeUserEntities == true &&\n                status.TrimUser == true &&\n                status.IncludeContributorDetails == true &&\n                status.IncludeMyRetweet == true &&\n                status.OEmbedUrl == \"http://myurl.com\" &&\n                status.OEmbedAlign == EmbeddedStatusAlignment.Center &&\n                status.OEmbedHideMedia == true &&\n                status.OEmbedHideThread == true &&\n                status.OEmbedLanguage == \"en\" &&\n                status.OEmbedMaxWidth == 300 &&\n                status.OEmbedOmitScript == true &&\n                status.OEmbedRelated == \"JoeMayo\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)StatusType.Home).ToString())));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ID\", \"10\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"MaxID\", \"456\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Count\", \"50\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"ExcludeReplies\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeContributorDetails\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeMyRetweet\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedUrl\", \"http://myurl.com\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedAlign\", ((int)EmbeddedStatusAlignment.Center).ToString())));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideMedia\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideThread\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedLanguage\", \"en\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedMaxWidth\", \"300\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedOmitScript\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Mentions_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/mentions_timeline.json?since_id=123&max_id=145&count=50\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Mentions).ToString() },\n                { \"SinceID\", \"123\" },\n                { \"MaxID\", \"145\" },\n                { \"Count\", \"50\" }\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/show.json?id=945932078&include_my_retweet=true&include_entities=true&trim_user=true\";\n            var reqProc = new StatusRequestProcessor<Status> \n            { \n                Type = StatusType.Show,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Show).ToString() },\n                { \"ID\", \"945932078\" },\n                { \"TrimUser\", true.ToString() },\n                { \"IncludeMyRetweet\", true.ToString() },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_User_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&user_id=15411837&screen_name=JoeMayo\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Home_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/home_timeline.json?count=5\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Home).ToString() },\n                { \"Count\", \"5\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Url_For_Retweets()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets/15411837.json\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweets).ToString() },\n                { \"ID\", \"15411837\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Url_For_IncludeRetweets_On_User_Timeline()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", \"True\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Includes_False_Include_Rts_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", false.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Url_For_RetweetedByUser()\n        {\n            const string ExpectedUrl = \"http://api.twitter.com/1/statuses/retweeted_by_user.json?screen_name=JoeMayo\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.RetweetedByUser,\n                BaseUrl = \"http://api.twitter.com/1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetedByUser).ToString() },\n                { \"ScreenName\", \"JoeMayo\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Url_For_OEmbed()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/oembed.json?id=1&url=abc&maxwidth=300&hide_media=true&hide_thread=true&omit_script=true&align=left&related=JoeMayo%2CTwitterAPI&lang=en\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Oembed).ToString() },\n                { \"ID\", \"1\" },\n                { \"OEmbedUrl\", \"abc\" },\n                { \"OEmbedMaxWidth\", \"300\" },\n                { \"OEmbedHideMedia\", true.ToString() },\n                { \"OEmbedHideThread\", true.ToString() },\n                { \"OEmbedOmitScript\", true.ToString() },\n                { \"OEmbedAlign\", ((int)EmbeddedStatusAlignment.Left).ToString() },\n                { \"OEmbedRelated\", \"JoeMayo, TwitterAPI\" },\n                { \"OEmbedLanguage\", \"en\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Returns_Url_For_RetweetsOfMe()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?since_id=2&max_id=3&count=1&include_entities=true&include_user_entities=true&trim_user=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"Count\", \"1\" },\n                { \"SinceID\", \"2\" },\n                { \"MaxID\", \"3\" },\n                { \"TrimUser\", true.ToString() },\n                { \"IncludeEntities\", true.ToString() },\n                { \"IncludeUserEntities\", true.ToString() },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Includes_False_IncludeUserEntities_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?include_user_entities=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"IncludeUserEntities\", false.ToString() },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Retweeters_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=5&cursor=7\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                { \"ID\", \"5\" },\n                { \"Cursor\", \"7\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_RetweetedBy_Throws_On_Missing_ID()\n        {\n            const string ExpectedParam = \"ID\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Retweeters,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                //{ \"ID\", \"123\" },\n                { \"Cursor\", \"25\" }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParam, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = Assert.Throws<ArgumentException>(() => statusReqProc.BuildUrl(parameters));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Parameter()\n        {\n            var target = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => target.BuildUrl(null));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void StatusRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(statProc);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Multiple_Statuses()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Home, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleStatusResponse);\n\n            Assert.NotNull(statuses);\n            Assert.Equal(3, statuses.Count);\n            var status = statuses.First();\n            Assert.NotNull(status);\n            Assert.False(status.Retweeted);\n            Assert.Null(status.InReplyToScreenName);\n            Assert.False(status.PossiblySensitive);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.NotNull(retweetedStatus);\n            Assert.NotNull(retweetedStatus.Text);\n            Assert.True(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            var contributors = status.Contributors;\n            Assert.NotNull(contributors);\n            Assert.Empty(contributors);\n            var coords = status.Coordinates;\n            Assert.NotNull(coords);\n            Assert.Equal(-122.40060, coords.Longitude);\n            Assert.Equal(37.78215, coords.Latitude);\n            Assert.NotNull(status.Place);\n            Assert.Null(status.Place.Name);\n            Assert.NotNull(status.User);\n            Assert.Equal(\"Joe Mayo\", status.User.Name);\n            Assert.Equal(393, status.RetweetCount);\n            Assert.Equal(\"184835136037191681\", status.StatusID);\n            Assert.Null(status.InReplyToUserID);\n            Assert.False(status.Favorited);\n            Assert.Null(status.InReplyToStatusID);\n            Assert.Equal(\"web\", status.Source);\n            Assert.Equal(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            Assert.Null(status.InReplyToUserID);\n            Assert.False(status.Truncated);\n            Assert.NotNull(status.Text);\n            Assert.True(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.NotNull(status.Annotation);\n            Assert.Empty(status.Annotation.Attributes);\n            Assert.NotNull(status.Entities);\n            Assert.Null(status.Entities.HashTagEntities);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_A_Single_Status()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(SingleStatusResponse);\n\n            Assert.NotNull(statuses);\n            Assert.Single(statuses);\n            var status = statuses.Single();\n            Assert.NotNull(status);\n            Assert.False(status.Retweeted);\n            Assert.Null(status.InReplyToScreenName);\n            Assert.False(status.PossiblySensitive);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.NotNull(retweetedStatus);\n            Assert.NotNull(retweetedStatus.Text);\n            Assert.True(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            var contributors = status.Contributors;\n            Assert.NotNull(contributors);\n            Assert.Empty(contributors);\n            var coords = status.Coordinates;\n            Assert.NotNull(coords);\n            Assert.Equal(-122.40060, coords.Longitude);\n            Assert.Equal(37.78215, coords.Latitude);\n            Assert.NotNull(status.Place);\n            Assert.Null(status.Place.Name);\n            Assert.NotNull(status.User);\n            Assert.Equal(\"Joe Mayo\", status.User.Name);\n            Assert.Equal(393, status.RetweetCount);\n            Assert.Equal(\"184835136037191681\", status.StatusID);\n            Assert.Null(status.InReplyToUserID);\n            Assert.False(status.Favorited);\n            Assert.Null(status.InReplyToStatusID);\n            Assert.Equal(\"web\", status.Source);\n            Assert.Equal(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            Assert.Null(status.InReplyToUserID);\n            Assert.False(status.Truncated);\n            Assert.NotNull(status.Text);\n            Assert.True(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.NotNull(status.Annotation);\n            Assert.Empty(status.Annotation.Attributes);\n            Assert.NotNull(status.Entities);\n            Assert.Null(status.Entities.HashTagEntities);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Multiple_Users()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Retweeters, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleUsersResponse);\n\n            Assert.NotNull(statuses);\n            Assert.Single(statuses);\n            var status = statuses.Single();\n            Assert.NotNull(status);\n            var users = status.Users;\n            Assert.NotNull(users);\n            Assert.Equal(5, users.Count);\n            ulong user = users.First();\n            Assert.Equal(34649740ul, user);\n            var cursor = status.CursorMovement;\n            Assert.NotNull(cursor);\n            Assert.Equal(\"123\", cursor.Next);\n            Assert.Equal(\"456\", cursor.Previous);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var statProc = new StatusRequestProcessor<Status>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var stats = statProc.ProcessResults(string.Empty);\n\n            Assert.Equal(0, stats.Count);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_An_Embedded_Status()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Oembed, BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string ExpectedType = \"rich\";\n            const ulong ExpectedCacheAge = 3153600000;\n            const string ExpectedVersion = \"1.0\";\n            const string ExpectedProviderName = \"Twitter\";\n            const string ExpectedUrl = \"https://twitter.com/JoeMayo/statuses/305050067973312514\";\n            const int ExpectedWidth = 550;\n            const int ExpectedHeight = 0;\n            const string ExpectedHtml = \"some html\";\n            const string ExpectedProviderUrl = \"https://twitter.com\";\n            const string ExpectedAuthorUrl = \"https://twitter.com/JoeMayo\";\n            const string ExpectedAuthorName = \"Joe Mayo\";\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.NotNull(statuses);\n            Assert.Single(statuses);\n            var status = statuses.Single();\n            Assert.NotNull(status);\n            var embeddedStatus = status.EmbeddedStatus;\n            Assert.NotNull(embeddedStatus);\n            Assert.Equal(ExpectedType, embeddedStatus.Type);\n            Assert.Equal(ExpectedCacheAge, embeddedStatus.CacheAge);\n            Assert.Equal(ExpectedVersion, embeddedStatus.Version);\n            Assert.Equal(ExpectedProviderName, embeddedStatus.ProviderName);\n            Assert.Equal(ExpectedUrl, embeddedStatus.Url);\n            Assert.Equal(ExpectedWidth, embeddedStatus.Width);\n            Assert.Equal(ExpectedHeight, embeddedStatus.Height);\n            Assert.Equal(ExpectedHtml, embeddedStatus.Html);\n            Assert.Equal(ExpectedProviderUrl, embeddedStatus.ProviderUrl);\n            Assert.Equal(ExpectedAuthorUrl, embeddedStatus.AuthorUrl);\n            Assert.Equal(ExpectedAuthorName, embeddedStatus.AuthorName);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>() \n            { \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Show,\n                ID = \"123\",\n                UserID = \"123\",\n                ScreenName = \"abc\",\n                SinceID = 1,\n                MaxID = 2,\n                Count = 3,\n                Cursor=\"123\",\n                IncludeRetweets = true,\n                ExcludeReplies = true,\n                IncludeEntities = true,\n                IncludeUserEntities = true,\n                TrimUser = true,\n                IncludeContributorDetails = true,\n                IncludeMyRetweet = true,\n            };\n\n            var statuses = statProc.ProcessResults(SingleStatusResponse);\n\n            Assert.NotNull(statuses);\n            Assert.Single(statuses);\n            var status = statuses.Single();\n            Assert.NotNull(status);\n            Assert.Equal(StatusType.Show, status.Type);\n            Assert.Equal(\"123\", status.ID);\n            Assert.Equal(\"123\", status.UserID);\n            Assert.Equal(\"abc\", status.ScreenName);\n            Assert.Equal(1ul, status.SinceID);\n            Assert.Equal(2ul, status.MaxID);\n            Assert.Equal(3, status.Count);\n            Assert.Equal(\"123\", status.Cursor);\n            Assert.True(status.IncludeRetweets);\n            Assert.True(status.ExcludeReplies);\n            Assert.True(status.IncludeEntities);\n            Assert.True(status.IncludeUserEntities);\n            Assert.True(status.TrimUser);\n            Assert.True(status.IncludeContributorDetails);\n            Assert.True(status.IncludeMyRetweet);\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_EmbeddedStatus_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Oembed,\n                ID = \"123\",\n                OEmbedUrl = \"http://myurl.com\",\n                OEmbedMaxWidth = 300,\n                OEmbedHideMedia = true,\n                OEmbedHideThread = true,\n                OEmbedOmitScript = true,\n                OEmbedAlign = EmbeddedStatusAlignment.Left,\n                OEmbedRelated = \"JoeMayo,TwitterAPI\",\n                OEmbedLanguage = \"en\"\n            };\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.NotNull(statuses);\n            Assert.Single(statuses);\n            var status = statuses.Single();\n            Assert.NotNull(status);\n            Assert.Equal(StatusType.Oembed, status.Type);\n            Assert.Equal(\"123\", status.ID);\n            Assert.Equal(\"http://myurl.com\", status.OEmbedUrl);\n            Assert.Equal(300, status.OEmbedMaxWidth);\n            Assert.True(status.OEmbedHideMedia);\n            Assert.True(status.OEmbedHideThread);\n            Assert.True(status.OEmbedOmitScript);\n            Assert.Equal(EmbeddedStatusAlignment.Left, status.OEmbedAlign);\n            Assert.Equal(\"JoeMayo,TwitterAPI\", status.OEmbedRelated);\n            Assert.Equal(\"en\", status.OEmbedLanguage);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string MultipleStatusResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"184374428111601664\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Mar 26 20:21:03 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184374428111601664,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Speaking at Twin Cities Code Camp: http:\\/\\/t.co\\/3tJz5vPW #tccc12\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":1,\n      \"\"id_str\"\":\"\"183620070084325376\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Sat Mar 24 18:23:30 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":183620070084325376,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Free ebook: Introducing Microsoft SQL Server 2012: http:\\/\\/t.co\\/VZ52WIZf\"\"\n   }\n]\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"ids\"\":[\n      34649740,\n      6411122,\n      106069564,\n      152318142,\n      72197816\n   ],\n   \"\"next_cursor\"\":123,\n   \"\"next_cursor_str\"\":\"\"123\"\",\n   \"\"previous_cursor\"\":456,\n   \"\"previous_cursor_str\"\":\"\"456\"\"\n}\";\n\n        const string OEmbedResponse = @\"{\n   \"\"cache_age\"\":\"\"3153600000\"\",\n   \"\"url\"\":\"\"https://twitter.com/JoeMayo/statuses/305050067973312514\"\",\n   \"\"height\"\":null,\n   \"\"provider_url\"\":\"\"https://twitter.com\"\",\n   \"\"provider_name\"\":\"\"Twitter\"\",\n   \"\"author_name\"\":\"\"Joe Mayo\"\",\n   \"\"version\"\":\"\"1.0\"\",\n   \"\"author_url\"\":\"\"https://twitter.com/JoeMayo\"\",\n   \"\"type\"\":\"\"rich\"\",\n   \"\"html\"\":\"\"some html\"\",\n   \"\"width\"\":550\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StreamTests/ControlStreamExtensionsTest.cs",
    "content": "﻿using LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class ControlStreamExtensionsTest\n    {\n        Mock<ITwitterAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public ControlStreamExtensionsTest()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void ControlStreamRequestProcessor_Works_With_Actions()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<ControlStream>>(reqProc);\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<ITwitterAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);\n            execMock.Setup(exec => exec.PostToTwitter(\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<Func<string, ControlStream>>()))\n                    .Returns(CommandResponse);\n            var ctx = new TwitterContext(execMock.Object);\n            ctx.SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\";\n            return ctx;\n        }\n\n        [Fact]\n        public void AddSiteStreamUser_Constructs_Url()\n        {\n            const ulong UserID = 1;\n            const string StreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n\n            var ctx = InitializeTwitterContext();\n\n            ctx.AddSiteStreamUser(new List<ulong> { UserID }, StreamID);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f/add_user.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, ControlStream>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void AddSiteStreamUser_Throws_On_Null_StreamID()\n        {\n            const ulong UserID = 1;\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentNullException>(() => ctx.AddSiteStreamUser(new List<ulong> { UserID }, null));\n\n            Assert.Equal(\"streamID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void AddSiteStreamUser_Returns_ControlStream()\n        {\n            const ulong UserID = 1;\n            const string StreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n\n            var ctx = InitializeTwitterContext();\n\n            ControlStream cs = ctx.AddSiteStreamUser(new List<ulong> { UserID }, StreamID);\n\n            Assert.NotNull(cs);\n            Assert.Equal(CommandResponse, cs.CommandResponse);\n        }\n\n        [Fact]\n        public void RemoveSiteStreamUser_Constructs_Url()\n        {\n            const ulong UserID = 1;\n            const string StreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n\n            var ctx = InitializeTwitterContext();\n\n            ctx.RemoveSiteStreamUser(new List<ulong> { UserID }, StreamID);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitter(\n                    \"https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f/remove_user.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<Func<string, ControlStream>>()),\n                Times.Once());\n        }\n\n        [Fact]\n        public void RemoveSiteStreamUser_Throws_On_Null_StreamID()\n        {\n            const ulong UserID = 1;\n            var ctx = InitializeTwitterContext();\n\n            var ex = Assert.Throws<ArgumentNullException>(() => ctx.RemoveSiteStreamUser(new List<ulong> { UserID }, null));\n\n            Assert.Equal(\"streamID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void RemoveSiteStreamUser_Returns_ControlStream()\n        {\n            const ulong UserID = 1;\n            const string StreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n\n            var ctx = InitializeTwitterContext();\n\n            ControlStream cs = ctx.RemoveSiteStreamUser(new List<ulong> { UserID }, StreamID);\n\n            Assert.NotNull(cs);\n            Assert.Equal(CommandResponse, cs.CommandResponse);\n        }\n\n\n        const string CommandResponse = @\"stream updated\n\n\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StreamTests/ControlStreamTest.cs",
    "content": "﻿using LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class ControlStreamTest\n    {\n        public ControlStreamTest()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Returns_Parameters()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>();\n            Expression<Func<ControlStream, bool>> expression =\n                strm =>\n                    strm.Type == ControlStreamType.Followers &&\n                    strm.UserID == 10 &&\n                    strm.StreamID == \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var parms = reqProc.GetParameters(lambdaExpression);\n\n            Assert.True(parms.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)ControlStreamType.Followers).ToString())));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\")));\n        }\n\n        [Fact]\n        public void ProcessResults_Replaces_Input_Params()\n        {\n            const ulong UserID = 1;\n            const string StreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n\n            var csReqProc = new ControlStreamRequestProcessor<ControlStream>\n            {\n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = ControlStreamType.Followers,\n                UserID = UserID,\n                StreamID = StreamID\n            };\n\n            var csResult = csReqProc.ProcessResults(FollowersMessage);\n\n            var cs = csResult.First();\n\n            Assert.Equal(ControlStreamType.Followers, cs.Type);\n            Assert.Equal(UserID, cs.UserID);\n            Assert.Equal(StreamID, cs.StreamID);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Followers_Url()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            const string Expected = \"https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f/friends/ids.json?user_id=478805447\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },\n                    { \"UserID\", \"478805447\" },\n                    { \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(Expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Followers_Requires_UserID()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },\n                    //{ \"UserID\", \"478805447\" },\n                    { \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n        }\n\n        [Fact]\n        public void BuildUrl_Followers_Requires_StreamID()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },\n                    { \"UserID\", \"478805447\" },\n                    //{ \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n        }\n\n        [Fact]\n        public void BuildUrl_Followers_Sets_UserID()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            const ulong ExpectedUserID = 478805447;\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },\n                    { \"UserID\", \"478805447\" },\n                    { \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUserID, reqProc.UserID);\n        }\n\n        [Fact]\n        public void BuildUrl_Followers_Sets_StreamID()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            const string ExpectedStreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },\n                    { \"UserID\", \"478805447\" },\n                    { \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedStreamID, reqProc.StreamID);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Info_Url()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            const string Expected = \"https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f/info.json\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Info).ToString(CultureInfo.InvariantCulture) },\n                    { \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(Expected, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Info_Requires_StreamID()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Info).ToString(CultureInfo.InvariantCulture) },\n                    //{ \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n        }\n\n        [Fact]\n        public void BuildUrl_Info_Sets_Stream_ID()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n            const string ExpectedStreamID = \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ControlStreamType.Info).ToString(CultureInfo.InvariantCulture) },\n                    { \"StreamID\", \"1_1_54e345d655ee3e8df359ac033648530bfbe26c5f\" }\n                };\n\n            reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedStreamID, reqProc.StreamID);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\" };\n\n            var csList = reqProc.ProcessResults(string.Empty);\n\n            Assert.False(csList.Any());\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Follower_Response()\n        {\n            const ulong ExpectedUserID = 15411837;\n            const string ExpectedUserName = \"JoeMayo\";\n            const bool ExpectedDM = true;\n            const string ExpectedPrevCursor = \"1\";\n            const string ExpectedNextCursor = \"3\";\n            const int ExpectedNumberOfFriends = 5;\n            const ulong ExpectedFirstFriendID = 13348;\n            var reqProc = new ControlStreamRequestProcessor<ControlStream> \n            { \n                SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\",\n                Type = ControlStreamType.Followers\n            };\n\n            var csList = reqProc.ProcessResults(FollowersMessage);\n\n            Assert.Single(csList);\n            var cs = csList.Single();\n            var follow = cs.Follow;\n            Assert.NotNull(follow);\n            var user = follow.User;\n            Assert.NotNull(user);\n            Assert.Equal(ExpectedUserID, user.UserID);\n            Assert.Equal(ExpectedUserName, user.Name);\n            Assert.Equal(ExpectedDM, user.DM);\n            var cursors = follow.Cursors;\n            Assert.NotNull(cursors);\n            Assert.Equal(ExpectedPrevCursor, cursors.Previous);\n            Assert.Equal(ExpectedNextCursor, cursors.Next);\n            var friends = follow.Friends;\n            Assert.NotNull(friends);\n            Assert.NotEmpty(friends);\n            Assert.Equal(ExpectedNumberOfFriends, friends.Count);\n            Assert.Equal(ExpectedFirstFriendID, friends.First());\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Info_Response()\n        {\n            const ulong ExpectedUserID = 15411837;\n            const string ExpectedUserName = \"JoeMayo\";\n            const bool ExpectedDM = true;\n            const string ExpectedDelimited = \"none\";\n            const bool ExpectedIncludeFollowingsActivity = true;\n            const bool ExpectedIncludeUserChanges = true;\n            const string ExpectedReplies = \"none\";\n            const string ExpectedWith = \"user\";\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>\n            {\n                SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\",\n                Type = ControlStreamType.Info\n            };\n\n            var csList = reqProc.ProcessResults(InfoMessage);\n\n            Assert.Single(csList);\n            var cs = csList.Single();\n            var info = cs.Info;\n            Assert.NotNull(info);\n            var users = info.Users;\n            Assert.NotNull(users);\n            Assert.NotEmpty(users);\n            var user = users.First();\n            Assert.NotNull(user);\n            Assert.Equal(ExpectedUserID, user.UserID);\n            Assert.Equal(ExpectedUserName, user.Name);\n            Assert.Equal(ExpectedDM, user.DM);\n            Assert.Equal(ExpectedDelimited, info.Delimited);\n            Assert.Equal(ExpectedIncludeFollowingsActivity, info.IncludeFollowingsActivity);\n            Assert.Equal(ExpectedIncludeUserChanges, info.IncludeUserChanges);\n            Assert.Equal(ExpectedReplies, info.Replies);\n            Assert.Equal(ExpectedWith, info.With);\n        }\n\n\n        const string FollowersMessage = @\"{\n   \"\"follow\"\":{\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"name\"\":\"\"JoeMayo\"\",\n         \"\"dm\"\":true\n      },\n      \"\"friends\"\":[\n         13348,\n         783214,\n         819797,\n         823083,\n         1535551\n      ],\n      \"\"previous_cursor\"\":1,\n      \"\"next_cursor\"\":3\n   }\n}\";\n\n        const string InfoMessage = @\"{\n   \"\"info\"\":{\n      \"\"users\"\":[\n         {\n            \"\"id\"\":15411837,\n            \"\"name\"\":\"\"JoeMayo\"\",\n            \"\"dm\"\":true\n         }\n      ],\n      \"\"delimited\"\":\"\"none\"\",\n      \"\"include_followings_activity\"\":true,\n      \"\"include_user_changes\"\":true,\n      \"\"replies\"\":\"\"none\"\",\n      \"\"with\"\":\"\"user\"\"\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StreamTests/StreamingRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class StreamingRequestProcessorTests\n    {\n        public StreamingRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Returns_Parameters()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>();\n            Expression<Func<Streaming, bool>> expression =\n                strm =>\n                    strm.Type == StreamingType.Sample &&\n                    strm.Count == 10 &&\n                    strm.Delimited == \"length\" &&\n                    strm.Language == \"en,fr\" &&\n                    strm.Follow == \"1,2,3\" &&\n                    strm.Track == \"twitter,API,LINQ to Twitter\" &&\n                    strm.Locations == \"-122.75,36.8,-121.75,37.8,-74,40,-73,41\" &&\n                    strm.StallWarnings == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var parms = reqProc.GetParameters(lambdaExpression);\n\n            Assert.True(parms.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)StreamingType.Sample).ToString())));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"Delimited\", \"length\")));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"Language\", \"en,fr\")));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"Follow\", \"1,2,3\")));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"Track\", \"twitter,API,LINQ to Twitter\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"Locations\", \"-122.75,36.8,-121.75,37.8,-74,40,-73,41\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"StallWarnings\", \"True\")));\n        }\n\n        [Fact]\n        public void BuildFilterUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://stream.twitter.com/1.1/statuses/filter.json?track=LINQ%20to%20Twitter&stall_warnings=true&language=en%2Cfr\";\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Filter.ToString() },\n                { \"Track\", \"LINQ to Twitter\" },\n                { \"StallWarnings\", true.ToString() },\n                { \"Language\", \"en,fr\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildFilterUrl_Requires_FollowOrLocationsOrTrack()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Filter.ToString() },\n                { \"Count\", \"10\" }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parms));\n\n            Assert.Equal(\"FollowOrLocationsOrTrack\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildFirehoseUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://stream.twitter.com/1.1/statuses/firehose.json?count=25&delimited=length&language=en%2Cfr&stall_warnings=true\";\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Firehose.ToString() },\n                { \"Count\", \"25\" },\n                { \"Delimited\", \"length\" },\n                { \"StallWarnings\", true.ToString() },\n                { \"Language\", \"en,fr\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildLinksUrl_Returns_Url()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Links.ToString() },\n                { \"Count\", \"25\" },\n                { \"Delimited\", \"length\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(\"https://stream.twitter.com/1.1/statuses/links.json?count=25&delimited=length\", req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildRetweetUrl_Returns_Url()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Retweet.ToString() },\n                { \"Delimited\", \"length\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(\"https://stream.twitter.com/1.1/statuses/retweet.json?delimited=length\", req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildSampleUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://stream.twitter.com/1.1/statuses/sample.json?language=en%2Cfr&stall_warnings=true\";\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Sample.ToString() },\n                { \"StallWarnings\", true.ToString() },\n                { \"Language\", \"en,fr\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Requires_Type()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                //{ \"Type\", StreamingType.Sample.ToString() },\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parms));\n\n             Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSampleUrl_Forbids_Count()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Sample.ToString() },\n                { \"Count\", \"5\" }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parms));\n\n            Assert.Equal(\"Count\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSampleUrl_Only_Adds_Delimited_To_Url()\n        {\n            var reqProc = new StreamingRequestProcessor<Streaming>() { BaseUrl = \"https://stream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", StreamingType.Sample.ToString() },\n                { \"Delimited\", \"length\" },\n                { \"Follow\", \"1,2,3\" },\n                { \"Track\", \"twitter,LINQ to Twitter,Joe Mayo\" },\n                { \"Locations\", \"123,456,789,012\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(\"https://stream.twitter.com/1.1/statuses/sample.json?delimited=length\", req.FullUrl);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_A_Streaming()\n        {\n            var execMock = new Mock<ITwitterExecute>();\n            var reqProc = new StreamingRequestProcessor<Streaming>() \n            { \n                BaseUrl = \"https://stream.twitter.com/1.1/\",\n                TwitterExecutor = execMock.Object\n            };\n\n            var streamList = reqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(1, streamList.Count);\n            Assert.Equal(execMock.Object, streamList.First().TwitterExecutor);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/StreamTests/UserStreamRequestProcessorTest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Moq;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests\n{\n    public class UserStreamRequestProcessorTest\n    {\n        public UserStreamRequestProcessorTest()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Returns_Parameters()\n        {\n            var reqProc = new UserStreamRequestProcessor<UserStream>();\n            Expression<Func<UserStream, bool>> expression =\n                strm =>\n                    strm.Type == UserStreamType.User &&\n                    strm.Delimited == \"length\" &&\n                    strm.Language == \"en,fr\" &&\n                    strm.Follow == \"1,2,3\" &&\n                    strm.Track == \"twitter,API,LINQ to Twitter\" &&\n                    strm.With == \"Follow\" &&\n                    strm.AllReplies == true &&\n                    strm.StallWarnings == true &&\n                    strm.Locations == \"-122.75,36.8,-121.75,37.8\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var parms = reqProc.GetParameters(lambdaExpression);\n\n            Assert.True(parms.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)UserStreamType.User).ToString())));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"Delimited\", \"length\")));\n            Assert.True(parms.Contains(\n                   new KeyValuePair<string, string>(\"Track\", \"twitter,API,LINQ to Twitter\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"With\", \"Follow\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"AllReplies\", \"True\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"Language\", \"en,fr\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"Follow\", \"1,2,3\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"StallWarnings\", \"True\")));\n            Assert.True(parms.Contains(\n                  new KeyValuePair<string, string>(\"Locations\", \"-122.75,36.8,-121.75,37.8\")));\n        }\n\n        [Fact]\n        public void BuildUserUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://userstream.twitter.com/1.1/user.json?delimited=length&language=en%2Cfr&track=LINQ%20to%20Twitter&with=follow&replies=all&stall_warnings=true&locations=3\";\n            var reqProc = new UserStreamRequestProcessor<UserStream>() { UserStreamUrl = \"https://userstream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", UserStreamType.User.ToString() },\n                { \"Delimited\", \"length\" },\n                { \"Track\", \"LINQ to Twitter\" },\n                { \"With\", \"Follow\" },\n                { \"AllReplies\", true.ToString() },\n                { \"StallWarnings\", true.ToString() },\n                { \"Locations\", \"3\" },\n                { \"Language\", \"en,fr\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildSiteUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://userstream.twitter.com/1.1/site.json?delimited=length&language=en%2Cfr&follow=1%2C2%2C3&with=follow&replies=all&stall_warnings=true\";\n            var reqProc = new UserStreamRequestProcessor<UserStream>() { SiteStreamUrl = \"https://userstream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", UserStreamType.Site.ToString() },\n                { \"Delimited\", \"length\" },\n                { \"Follow\", \"1,2,3\" },\n                { \"With\", \"Follow\" },\n                { \"AllReplies\", true.ToString() },\n                { \"StallWarnings\", true.ToString() },\n                { \"Language\", \"en,fr\" }\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildSiteUrl_Throws_On_Track()\n        {\n            var reqProc = new UserStreamRequestProcessor<UserStream>() { SiteStreamUrl = \"https://userstream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", UserStreamType.Site.ToString() },\n                { \"Delimited\", \"length\" },\n                { \"Follow\", \"1,2,3\" },\n                { \"Track\", \"LINQ to Twitter\" },\n                { \"With\", \"Follow\" },\n                { \"AllReplies\", \"True\" }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parms));\n\n            Assert.Equal(\"Track\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSiteUrl_Requires_Follow()\n        {\n            var reqProc = new UserStreamRequestProcessor<UserStream>() { SiteStreamUrl = \"https://userstream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", UserStreamType.Site.ToString() },\n                //{ \"Follow\", \"1,2,3\" },\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parms));\n\n            Assert.Equal(\"Follow\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildSiteUrl_Removes_Spaces_From_Follow()\n        {\n            var reqProc = new UserStreamRequestProcessor<UserStream>() { SiteStreamUrl = \"https://userstream.twitter.com/1.1/\" };\n            var parms = new Dictionary<string, string>\n            {\n                { \"Type\", UserStreamType.Site.ToString() },\n                { \"Follow\", \"1, 2, 3\" },\n            };\n\n            Request req = reqProc.BuildUrl(parms);\n\n            Assert.Equal(\"https://userstream.twitter.com/1.1/site.json?follow=1%2C2%2C3\", req.FullUrl);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_A_UserStream()\n        {\n            var execMock = new Mock<ITwitterExecute>();\n            var reqProc = new UserStreamRequestProcessor<UserStream>()\n            {\n                UserStreamUrl = \"https://userstream.twitter.com/1.1/\",\n                TwitterExecutor = execMock.Object\n            };\n\n            var streamList = reqProc.ProcessResults(string.Empty);\n\n            Assert.Equal(1, streamList.Count);\n            Assert.Equal(execMock.Object, streamList.First().TwitterExecutor);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/TrendTests/TrendRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.TrendTests\n{\n    public class TrendRequestProcessorTests\n    {\n        public TrendRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void GetParameters_Collects_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend>();\n            Expression<Func<Trend, bool>> expression =\n                trend =>\n                    trend.Type == TrendType.Available &&\n                    trend.WoeID == 1 &&\n                    trend.Latitude == \"1.2\" &&\n                    trend.Longitude == \"3.4\" &&\n                    trend.Exclude == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = trendReqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture))));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"WoeID\", \"1\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", \"1.2\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", \"3.4\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Exclude\", \"True\")));\n        }\n\n        [Fact]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = TrendType.Place,\n                Exclude = true,\n                Latitude = \"1.1\",\n                Longitude = \"2.2\",\n                WoeID = 1\n            };\n\n            var trends = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.NotNull(trends);\n            Assert.NotEmpty(trends);\n            var trend = trends.First();\n            Assert.NotNull(trend);\n            Assert.True(trend.Exclude);\n            Assert.Equal(\"1.1\", trend.Latitude);\n            Assert.Equal(\"2.2\", trend.Longitude);\n            Assert.Equal(1, trend.WoeID);\n        }\n\n        [Fact]\n        public void BuildUrl_Handles_Available_Trends()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_AvailableTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_ClosestTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/closest.json?lat=37.78215&long=-122.40060\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Closest).ToString(CultureInfo.InvariantCulture) },\n                    { \"Latitude\", \"37.78215\" },\n                    { \"Longitude\", \"-122.40060\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Place_Trends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/place.json?id=1\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                    { \"WoeID\", \"1\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Place_Trends_WithoutWoeID()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                };\n\n            var ex = Assert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"WoeID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = Assert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_With_No_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(null));\n\n            Assert.Equal(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Available()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Available };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.NotNull(trendList);\n            var trends = trendList.SingleOrDefault();\n            Assert.NotNull(trends);\n            var locations = trends.Locations;\n            Assert.NotNull(locations);\n            Assert.Equal(2, locations.Count);\n            Location location = locations[0];\n            Assert.Equal(\"Country\", location.PlaceTypeName);\n            Assert.Equal(12, location.PlaceTypeNameCode);\n            Assert.Equal(\"Turkey\", location.Name);\n            Assert.Equal(\"http://where.yahooapis.com/v1/place/23424969\", location.Url);\n            Assert.Equal(23424969, location.WoeID);\n            Assert.Equal(\"TR\", location.CountryCode);\n            Assert.Equal(\"1\", location.ParentID);\n            Assert.Equal(\"Turkey\", location.Country);\n        }\n\n        [Fact]\n        public void ProcessResults_Handles_Closest()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Closest };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.NotNull(trendList);\n            var trends = trendList.SingleOrDefault();\n            Assert.NotNull(trends);\n            var locations = trends.Locations;\n            Assert.NotNull(locations);\n            Assert.Equal(2, locations.Count);\n            Location location = locations[1];\n            Assert.NotNull(location);\n            Assert.Equal(\"Town\", location.PlaceTypeName);\n            Assert.Equal(7, location.PlaceTypeNameCode);\n            Assert.Equal(\"Birmingham\", location.Name);\n            Assert.Equal(\"http://where.yahooapis.com/v1/place/2364559\", location.Url);\n            Assert.Equal(2364559, location.WoeID);\n            Assert.Equal(\"US\", location.CountryCode);\n            Assert.Equal(\"23424977\", location.ParentID);\n            Assert.Equal(\"United States\", location.Country);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Location()\n        {\n            var trendProc = new TrendRequestProcessor<Trend> { Type = TrendType.Place };\n\n            List<Trend> trendList = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.NotNull(trendList);\n            var trends = trendList.FirstOrDefault();\n            Assert.NotNull(trends);\n            var locations = trends.Locations;\n            Assert.NotNull(locations);\n            Assert.Equal(1, locations.Count);\n            Location location = locations[0];\n            Assert.Equal(\"Worldwide\", location.Name);\n            Assert.Equal(1, location.WoeID);\n            Assert.Equal(\"%22Julianna%20Margulies%22\", trends.Query);\n            Assert.Equal(\"Julianna Margulies\", trends.Name);\n            Assert.Null(trends.PromotedContent);\n            Assert.Equal(\"http://twitter.com/search/%22Julianna%20Margulies%22\", trends.SearchUrl);\n            Assert.Null(trends.Events);\n            Assert.Equal(new DateTime(2011, 9, 19, 2, 4, 39), trends.AsOf);\n            Assert.Equal(new DateTime(2011, 9, 19, 2, 0, 17), trends.CreatedAt);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>();\n\n            var trends = trendProc.ProcessResults(string.Empty);\n\n            Assert.Equal(0, trends.Count);\n        }\n\n        const string TestTrendQueryResponse = @\"[\n   {\n      \"\"as_of\"\":\"\"2011-09-19T02:04:39Z\"\",\n      \"\"locations\"\":[\n         {\n            \"\"name\"\":\"\"Worldwide\"\",\n            \"\"woeid\"\":1\n         }\n      ],\n      \"\"trends\"\":[\n         {\n            \"\"query\"\":\"\"%22Julianna%20Margulies%22\"\",\n            \"\"name\"\":\"\"Julianna Margulies\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Julianna%20Margulies%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%23ThingsThatGetMeUpset\"\",\n            \"\"name\"\":\"\"#ThingsThatGetMeUpset\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ThingsThatGetMeUpset\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%23ReasonsWeCantBeTogether\"\",\n            \"\"name\"\":\"\"#ReasonsWeCantBeTogether\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ReasonsWeCantBeTogether\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Peter%20Dinklage%22\"\",\n            \"\"name\"\":\"\"Peter Dinklage\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Peter%20Dinklage%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Connie%20Britton%22\"\",\n            \"\"name\"\":\"\"Connie Britton\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Connie%20Britton%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%23100BestGogoSongs\"\",\n            \"\"name\"\":\"\"#100BestGogoSongs\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23100BestGogoSongs\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Kyle%20Chandler%22\"\",\n            \"\"name\"\":\"\"Kyle Chandler\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Kyle%20Chandler%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Tony%20Gonzalez%22\"\",\n            \"\"name\"\":\"\"Tony Gonzalez\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Tony%20Gonzalez%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Drew%20Barrymore%22\"\",\n            \"\"name\"\":\"\"Drew Barrymore\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Drew%20Barrymore%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Elisabeth%20Moss%22\"\",\n            \"\"name\"\":\"\"Elisabeth Moss\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Elisabeth%20Moss%22\"\",\n            \"\"events\"\":null\n         }\n      ],\n      \"\"created_at\"\":\"\"2011-09-19T02:00:17Z\"\"\n   }\n]\";\n\n        const string TestAvailableOrClosestQueryResponse = @\"[\n   {\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Country\"\",\n         \"\"code\"\":12\n      },\n      \"\"name\"\":\"\"Turkey\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424969\"\",\n      \"\"woeid\"\":23424969,\n      \"\"countryCode\"\":\"\"TR\"\",\n      \"\"parentid\"\":1,\n      \"\"country\"\":\"\"Turkey\"\"\n   },\n   {\n      \"\"name\"\":\"\"Birmingham\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/2364559\"\",\n      \"\"parentid\"\":23424977,\n      \"\"woeid\"\":2364559,\n      \"\"countryCode\"\":\"\"US\"\",\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Town\"\",\n         \"\"code\"\":7\n      },\n      \"\"country\"\":\"\"United States\"\"\n   }\n]\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/UserTests/UserRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterXUnitTests.Common;\nusing Xunit;\n\nnamespace LinqToTwitterXUnitTests.UserTests\n{\n    public class UserRequestProcessorTests\n    {\n        public UserRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_BannerSize_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/profile_banner.json?user_id=15411837&screen_name=JoeMayo\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_BannerSize_Requires_ScreenName_Or_UserID()\n        {\n            const string ExpectedParamName = \"ScreenNameOrUserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"15411837\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_BannerSize_Requires_NonNull_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", null },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_BannerSize_Requires_NonNull_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", null },\n                { \"ScreenName\", null }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"\" },\n                { \"ScreenName\", \"\" }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(ExpectedParamName, ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/show.json?user_id=15411837&screen_name=JoeMayo&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Show_Throws_On_Null_UserID()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"UserID\", null }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"UserID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Show_Throws_On_Null_ScreenName()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"ScreenName\", null }\n            };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"ScreenName\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Categories_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions/technology/members.json\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.CategoryStatus).ToString() },\n                { \"Slug\", \"Technology\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Categores_Throws_On_Missing_Slug()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)UserType.CategoryStatus).ToString() },\n                        //{ \"Slug\", \"Technology\" }\n                    };\n\n            var ex = Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Slug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Categories_Constructs_Url_For_Lang_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions.json?lang=it\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Categories).ToString() },\n                { \"Lang\", \"it\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Category_Constructs_Url_For_Slug_And_Lang_Params()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions/twitter.json?lang=it\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Category).ToString() },\n                { \"Slug\", \"twitter\" },\n                { \"Lang\", \"it\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Category_Thows_On_Missing_Slug()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Category).ToString() },\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Slug\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Lookup_Constructs_Url_With_ScreenName_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?screen_name=JoeMayo%2CLinqToTweeter\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"ScreenName\", \"JoeMayo,LinqToTweeter\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Lookup_Constructs_Url_With_UserID_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?user_id=1%2C2\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"UserID\", \"1,2\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Lookup_Throws_On_Missing_ScreenName()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Lookup_Throws_On_Both_UserID_And_ScreenName_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"ScreenName\", \"JoeMayo,LinqToTweeter\" },\n                { \"UserID\", \"1,2\" }\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/search.json?q=Joe%20Mayo&page=2&count=10&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n                { \"Query\", \"Joe Mayo\" },\n                { \"Page\", \"2\" },\n                { \"Count\", \"10\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Search_Throws_On_Missing_Query()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n            };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal(\"Query\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Contributees_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributees.json?screen_name=JoeMayo&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributees).ToString() },\n                //{ \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Contributors_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributors.json?user_id=123&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributors).ToString() },\n                { \"UserID\", \"123\" },\n                //{ \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Throws_On_Null_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = Assert.Throws<ArgumentException>(() => reqProc.BuildUrl(null));\n\n            Assert.Equal<string>(\"Type\", ex.ParamName);\n        }\n\n        [Fact]\n        public void BuildUrl_Constructs_Lookup_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?screen_name=JoeMayo&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                //{ \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.Equal(ExpectedUrl, req.FullUrl);\n        }\n\n        [Fact]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Expression<Func<User, bool>> expression =\n            user =>\n                user.Type == UserType.Show &&\n                user.ID == \"10\" &&\n                user.UserID == \"10\" &&\n                user.ScreenName == \"JoeMayo\" &&\n                user.Cursor == \"10819235\" &&\n                user.Slug == \"twitter\" &&\n                user.Query == \"Joe Mayo\" &&\n                user.Page == 2 &&\n                user.Count == 10 &&\n                user.Lang == \"it\" &&\n                user.IncludeEntities == true &&\n                user.SkipStatus == true &&\n                user.ImageSize == ProfileImageSize.Mini;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)UserType.Show).ToString())));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ID\", \"10\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Cursor\", \"10819235\")));\n            Assert.True(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Slug\", \"twitter\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Query\", \"Joe Mayo\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Page\", \"2\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Lang\", \"it\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.True(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.True(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ImageSize\", ((int)ProfileImageSize.Mini).ToString())));\n        }\n\n        [Fact]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var reqProc = new UserRequestProcessor<User> \n            { \n                Type = UserType.Show, \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                ID = \"123\",\n                UserID = \"123\",\n                ScreenName = \"JoeMayo\",\n                Page = 1,\n                Count = 10,\n                Cursor = \"456\",\n                Slug = \"myslug\",\n                Query = \"myquery\",\n                Lang = \"en-US\",\n                SkipStatus = true,\n                ImageSize = ProfileImageSize.Bigger,\n                IncludeEntities = true\n            };\n\n            List<User> users = reqProc.ProcessResults(SingleUserResponse);\n\n            Assert.NotNull(users);\n            Assert.Single(users);\n            var user = users.First();\n            Assert.Equal(\"123\", user.ID);\n            Assert.Equal(\"123\", user.UserID);\n            Assert.Equal(\"JoeMayo\", user.ScreenName);\n            Assert.Equal(1, user.Page);\n            Assert.Equal(10, user.Count);\n            Assert.Equal(\"456\", user.Cursor);\n            Assert.Equal(\"myslug\", user.Slug);\n            Assert.Equal(\"myquery\", user.Query);\n            Assert.Equal(\"en-US\", user.Lang);\n            Assert.True(user.SkipStatus);\n            Assert.Equal(ProfileImageSize.Bigger, user.ImageSize);\n            Assert.True(user.IncludeEntities);\n        }\n\n        [Fact]\n        public void UserRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWantsJson>(reqProc);\n        }\n\n        [Fact]\n        public void UserRequestProcessor_Handles_Actions()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsAssignableFrom<IRequestProcessorWithAction<User>>(reqProc);\n        }\n\n        void VerifySingleUserResponse(User user)\n        {\n            Assert.NotNull(user);\n            var identifier = user.Identifier;\n            Assert.NotNull(identifier);\n            Assert.Equal(\"6253282\", identifier.UserID);\n            Assert.Equal(\"twitterapi\", identifier.ScreenName);\n            Assert.Equal(\"San Francisco, CA\", user.Location);\n            Assert.NotNull(user.Description);\n            Assert.True(user.Description.StartsWith(\"The Real Twitter API.\"));\n            Assert.Equal(\"http://dev.twitter.com\", user.Url);\n            Assert.False(user.Protected);\n            Assert.Equal(1009508, user.FollowersCount);\n            Assert.Equal(31, user.FriendsCount);\n            Assert.Equal(10361, user.ListedCount);\n            Assert.Equal(new DateTime(2007, 5, 23, 6, 1, 13), user.CreatedAt);\n            Assert.Equal(24, user.FavoritesCount);\n            Assert.Equal(-28800, user.UtcOffset);\n            Assert.Equal(\"Pacific Time (US & Canada)\", user.TimeZone);\n            Assert.True(user.GeoEnabled);\n            Assert.True(user.Verified);\n            Assert.Equal(3278, user.StatusesCount);\n            Assert.Equal(\"en\", user.LangResponse);\n            var status = user.Status;\n            Assert.NotNull(status);\n            Assert.Equal(\"web\", status.Source);\n            var contributors = status.Contributors;\n            Assert.NotNull(contributors);\n            Assert.NotEmpty(contributors);\n            var contributor = contributors.First();\n            Assert.NotNull(contributor);\n            Assert.True(user.ContributorsEnabled);\n            Assert.False(user.IsTranslator);\n            Assert.Equal(\"E8F2F7\", user.ProfileBackgroundColor);\n            Assert.Equal(\"http://a0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrl);\n            Assert.Equal(\"https://si0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrlHttps);\n            Assert.False(user.ProfileBackgroundTile);\n            Assert.Equal(\"http://a0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrl);\n            Assert.Equal(\"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrlHttps);\n            Assert.Equal(\"0094C2\", user.ProfileLinkColor);\n            Assert.Equal(\"0094C2\", user.ProfileSidebarBorderColor);\n            Assert.Equal(\"A9D9F1\", user.ProfileSidebarFillColor);\n            Assert.Equal(\"437792\", user.ProfileTextColor);\n            Assert.True(user.ProfileUseBackgroundImage);\n            Assert.False(user.ShowAllInlineMedia);\n            Assert.False(user.DefaultProfile);\n            Assert.False(user.DefaultProfileImage);\n            Assert.False(user.Following);\n            Assert.False(user.FollowRequestSent);\n            Assert.False(user.Notifications);\n        }\n\n\n        [Fact]\n        public void ProcessActionResult_Parses_SingleUser_Response()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            User user = reqProc.ProcessActionResult(SingleUserResponse, UserAction.SingleUser);\n\n            VerifySingleUserResponse(user);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<User> users = reqProc.ProcessResults(SingleUserResponse);\n\n            Assert.NotNull(users);\n            Assert.Single(users);\n            var user = users.First();\n            VerifySingleUserResponse(user);\n        }\n  \n        [Fact]\n        public void ProcessResults_Parses_Categories_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Categories, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(CategoriesResponse);\n\n            Assert.NotNull(userList);\n            Assert.Single(userList);\n            var user = userList.Single();\n            Assert.NotNull(user);\n            var categories = user.Categories;\n            Assert.NotNull(categories);\n            Assert.NotEmpty(categories);\n            var category = categories.First();\n            Assert.NotNull(category);\n            Assert.Equal(106, category.Size);\n            Assert.Equal(\"Music\", category.Name);\n            Assert.Equal(\"music\", category.Slug);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Category_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Category, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(CategoryResponse);\n\n            Assert.NotNull(userList);\n            Assert.Single(userList);\n            var user = userList.Single();\n            Assert.NotNull(user);\n            var categories = user.Categories;\n            Assert.NotNull(categories);\n            Assert.NotEmpty(categories);\n            var category = categories.First();\n            Assert.NotNull(category);\n            Assert.Equal(64, category.Size);\n            Assert.Equal(\"Funny\", category.Name);\n            Assert.Equal(\"funny\", category.Slug);\n            var users = category.Users;\n            Assert.NotNull(users);\n            Assert.NotEmpty(users);\n            var catUser = users.First();\n            Assert.NotNull(catUser);\n            Assert.Equal(\"OMG Facts\", catUser.Name);\n        }\n\n        void TestMultipleUserResponse(UserType type)\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = type, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(MultipleUserResponse);\n\n            Assert.NotNull(userList);\n            Assert.NotEmpty(userList);\n            var user = userList.First();\n            Assert.NotNull(user);\n            Assert.Equal(\"bbccff\", user.ProfileSidebarBorderColor);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_CategoryStatus_Response()\n        {\n            TestMultipleUserResponse(UserType.CategoryStatus);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Lookup_Response()\n        {\n            TestMultipleUserResponse(UserType.Lookup);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Search_Response()\n        {\n            TestMultipleUserResponse(UserType.Search);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Contributee_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributees);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_Contributor_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributors);\n        }\n\n        [Fact]\n        public void ProcessResults_Parses_BannerSizes_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.BannerSizes, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(BannerSizesResponse);\n\n            Assert.NotNull(userList);\n            Assert.NotEmpty(userList);\n            Assert.Single(userList);\n            var user = userList.Single();\n            Assert.NotNull(user);\n            var bannerSizes = user.BannerSizes;\n            Assert.NotNull(bannerSizes);\n            Assert.Equal(6, bannerSizes.Count);\n            var firstSize = bannerSizes.First();\n            Assert.NotNull(firstSize);\n            Assert.Equal(\"ipad_retina\", firstSize.Label);\n            Assert.Equal(1252, firstSize.Width);\n            Assert.Equal(626, firstSize.Height);\n            Assert.Equal(\"https://si0.twimg.com/profile_banners/16761255/1355801341/ipad_retina\", firstSize.Url);\n        }\n\n        [Fact]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var userProc = new UserRequestProcessor<User> { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> users = userProc.ProcessResults(string.Empty);\n\n            Assert.Empty(users);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string CategoriesResponse = @\"[\n   {\n      \"\"size\"\":106,\n      \"\"name\"\":\"\"Music\"\",\n      \"\"slug\"\":\"\"music\"\"\n   },\n   {\n      \"\"size\"\":78,\n      \"\"name\"\":\"\"Sports\"\",\n      \"\"slug\"\":\"\"sports\"\"\n   },\n   {\n      \"\"size\"\":79,\n      \"\"name\"\":\"\"Entertainment\"\",\n      \"\"slug\"\":\"\"entertainment\"\"\n   }\n]\";\n\n        const string CategoryResponse = @\"{\n   \"\"size\"\":64,\n   \"\"name\"\":\"\"Funny\"\",\n   \"\"users\"\":[\n      {\n         \"\"id\"\":77888423,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/omg-facts.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"006da8\"\",\n         \"\"statuses_count\"\":9494,\n         \"\"created_at\"\":\"\"Mon Sep 28 01:28:23 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-21600,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"friends_count\"\":7,\n         \"\"name\"\":\"\"OMG Facts\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":false,\n         \"\"profile_text_color\"\":\"\"332d2d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"OMGFacts\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"Chicago, Illinois\"\",\n         \"\"verified\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"ffffff\"\",\n         \"\"id_str\"\":\"\"77888423\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Central Time (US & Canada)\"\",\n         \"\"description\"\":\"\"The #1 Fact Site. For more facts, follow:\\r\\n @OMGFactsSex @OMGFactsCelebs @OMGFactsAnimals @OMGFactsSports\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"f2f2f2\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"479ec9\"\",\n         \"\"listed_count\"\":32263,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":4042870\n      },\n      {\n         \"\"id\"\":25521487,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.danieltosh.com\\/\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"2FC2EF\"\",\n         \"\"statuses_count\"\":5219,\n         \"\"created_at\"\":\"\"Fri Mar 20 15:32:52 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"friends_count\"\":59,\n         \"\"name\"\":\"\"daniel tosh\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"666666\"\",\n         \"\"favourites_count\"\":6,\n         \"\"screen_name\"\":\"\"danieltosh\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"beach\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"181A1E\"\",\n         \"\"id_str\"\":\"\"25521487\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"description\"\":\"\"not a doctor\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"252429\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"1A1B1F\"\",\n         \"\"listed_count\"\":33001,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":5520666\n      },\n      {\n         \"\"id\"\":36686415,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"url\"\":\"\"http:\\/\\/www.zachgalifianakis.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"c5bbb5\"\",\n         \"\"statuses_count\"\":58,\n         \"\"created_at\"\":\"\"Thu Apr 30 15:19:13 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"friends_count\"\":0,\n         \"\"name\"\":\"\"zach galifianakis\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"e29d9d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"galifianakisz\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"north carolina\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"3b2511\"\",\n         \"\"id_str\"\":\"\"36686415\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Quito\"\",\n         \"\"description\"\":\"\"OFFICIAL ZACH GALIFIANAKIS\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"864711\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_color\"\":\"\"c9bea1\"\",\n         \"\"listed_count\"\":17016,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":1818218\n      }\n   ],\n   \"\"slug\"\":\"\"funny\"\"\n}\";\n\n        const string MultipleUserResponse = @\"[\n   {\n      \"\"id\"\":20536157,\n      \"\"geo_enabled\"\":true,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":true,\n      \"\"url\"\":\"\"http:\\/\\/www.google.com\\/support\\/\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0000cc\"\",\n      \"\"statuses_count\"\":3416,\n      \"\"created_at\"\":\"\"Tue Feb 10 19:14:39 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"friends_count\"\":366,\n      \"\"name\"\":\"\"A Googler\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"000000\"\",\n      \"\"favourites_count\"\":131,\n      \"\"screen_name\"\":\"\"google\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Mountain View, CA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"bbccff\"\",\n      \"\"id_str\"\":\"\"20536157\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"News and updates from Google\"\",\n      \"\"profile_background_tile\"\":false,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"ebeff9\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 14:33:09 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"196970449412960257\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":126,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":196970449412960257,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"There's lots of data online. We're supporting journalists who research and report on it in innovative ways http:\\/\\/t.co\\/iSNFLbh9\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_color\"\":\"\"ffffff\"\",\n      \"\"listed_count\"\":76043,\n      \"\"contributors_enabled\"\":true,\n      \"\"followers_count\"\":4656496\n   },\n   {\n      \"\"id\"\":50393960,\n      \"\"geo_enabled\"\":false,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/www.thegatesnotes.com\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0084B4\"\",\n      \"\"statuses_count\"\":476,\n      \"\"created_at\"\":\"\"Wed Jun 24 18:44:10 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"friends_count\"\":107,\n      \"\"name\"\":\"\"Bill Gates\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"333333\"\",\n      \"\"favourites_count\"\":2,\n      \"\"screen_name\"\":\"\"BillGates\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Seattle, WA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n      \"\"id_str\"\":\"\"50393960\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"Sharing things I'm learning through my foundation work and other interests...\"\",\n      \"\"profile_background_tile\"\":true,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 22:39:58 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"197092962461696000\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":215,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":197092962461696000,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"You asked \\u201chow does your approach compare to 50 yrs of mixed results from NGOs\\u201d? #askbillg: http:\\/\\/t.co\\/LVuNXIDy\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_color\"\":\"\"C0DEED\"\",\n      \"\"listed_count\"\":90298,\n      \"\"contributors_enabled\"\":false,\n      \"\"followers_count\"\":6266743\n   }\n]\";\n        const string ImageResponse = @\"{ \"\"imageUrl\"\": \"\"http:\\/\\/myuri.jpg\"\" }\";\n\n        const string BannerSizesResponse = @\"{\n   \"\"sizes\"\":{\n      \"\"ipad_retina\"\":{\n         \"\"w\"\":1252,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad_retina\"\",\n         \"\"h\"\":626\n      },\n      \"\"mobile\"\":{\n         \"\"w\"\":320,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile\"\",\n         \"\"h\"\":160\n      },\n      \"\"web\"\":{\n         \"\"w\"\":520,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web\"\",\n         \"\"h\"\":260\n      },\n      \"\"web_retina\"\":{\n         \"\"w\"\":1040,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web_retina\"\",\n         \"\"h\"\":520\n      },\n      \"\"mobile_retina\"\":{\n         \"\"w\"\":640,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile_retina\"\",\n         \"\"h\"\":320\n      },\n      \"\"ipad\"\":{\n         \"\"w\"\":626,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad\"\",\n         \"\"h\"\":313\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter3/Tests/LinqToTwitterXUnitTests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Moq\" version=\"4.0.10827\" />\n  <package id=\"xunit\" version=\"1.9.0.1566\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/AspNetAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class AspNetAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public new Uri Callback { get; set; }\n\n        /// <summary>\n        /// This is a hook where you can assign\n        /// a lambda to perform the technology\n        /// specific redirection action.\n        /// \n        /// The string passed as the lambda paramter\n        /// is the Twitter authorization URL.\n        /// </summary>\n        public Action<string> GoToTwitterAuthorization { get; set; }\n\n        public AspNetAuthorizer()\n            : base(false, AuthAccessType.NoChange, null) { }\n\n        public AspNetAuthorizer(bool forceLogin)\n            : base(forceLogin, AuthAccessType.NoChange, null) { }\n\n        public AspNetAuthorizer(bool forceLogin, AuthAccessType accessType) \n            : base(forceLogin, accessType, null) { }\n\n        public AspNetAuthorizer(bool forceLogin, AuthAccessType accessType, string preFillScreenName)\n            : base(forceLogin, accessType, preFillScreenName) { }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        public Task AuthorizeAsync()\n        {\n            throw new InvalidOperationException(\n                \"For ASP.NET apps, you should use BeginAuthorization and CompleteAuthorization instead. Please visit the LINQ to Twitter documentation and samples for examples on how to do this.\");\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        /// <param name=\"callback\">This is where you want Twitter to redirect to after authorization</param>\n        public async Task BeginAuthorizeAsync()\n        {\n            await BeginAuthorizeAsync(Callback);\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        public virtual async Task BeginAuthorizeAsync(Uri callback)\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            await GetRequestTokenAsync(callback.ToString());\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n        }\n\n        /// <summary>\n        /// After the user Authorizes the app, Twitter will \n        /// redirect to the responseUrl url, provided during \n        /// BeginAuthorization. When redirecting, Twitter will \n        /// also provide oauth_verifier and oauth_token \n        /// parameters. This method uses those parameters to \n        /// request an access token, which is used automatically\n        /// by LINQ to Twitter when executing queries.\n        /// </summary>\n        /// <param name=\"responseUrl\">\n        /// URL that Twitter redirected to after authorization.\n        /// We need this because it contains important parameters\n        /// we need to finish the OAuth process.\n        /// </param>\n        /// <returns>True if successful</returns>\n        public virtual async Task CompleteAuthorizeAsync(Uri responseUrl)\n        {\n            if (responseUrl == null)\n                throw new ArgumentNullException(\"responseUrl\", \"You must pass in the callback that Twitter returned after authentication.\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            string pin = ParseVerifierFromResponseUrl(responseUrl.ToString());\n\n            var accessTokenParams = new Dictionary<string, string>();\n            accessTokenParams.Add(\"oauth_verifier\", pin);\n            await GetAccessTokenAsync(accessTokenParams);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/AspNetSignInAuthorizer.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class AspNetSignInAuthorizer : AspNetAuthorizer, IAuthorizer\n    {\n        public AspNetSignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/LinqToTwitter.AspNet.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{946A0061-58F9-467D-9907-3046CEFB4524}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitter.AspNet</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <NuGetPackageImportStamp>cc003c1d</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Owin\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.3.0.0\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.3.0.0\\lib\\net45\\Microsoft.Owin.Security.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter\">\n      <HintPath>..\\..\\packages\\Microsoft.Owin.Security.Twitter.3.0.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Newtonsoft.Json.6.0.7\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Owin\">\n      <HintPath>..\\..\\packages\\Owin.1.0\\lib\\net40\\Owin.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.2.0.20710.0\\lib\\net40\\System.Web.Helpers.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Mvc.4.0.40804.0\\lib\\net40\\System.Web.Mvc.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.Razor.2.0.20710.0\\lib\\net40\\System.Web.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.2.0.20710.0\\lib\\net40\\System.Web.WebPages.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.2.0.20710.0\\lib\\net40\\System.Web.WebPages.Deployment.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\..\\packages\\Microsoft.AspNet.WebPages.2.0.20710.0\\lib\\net40\\System.Web.WebPages.Razor.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AspNetAuthorizer.cs\" />\n    <Compile Include=\"LinqToTwitterAuthenticationProvider.cs\" />\n    <Compile Include=\"MvcSignInAuthorizer.cs\" />\n    <Compile Include=\"MvcAuthorizer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SessionStateCredentialStore.cs\" />\n    <Compile Include=\"AspNetSignInAuthorizer.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/LinqToTwitterAuthenticationProvider.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.Owin.Security.Twitter;\n\nnamespace LinqToTwitter\n{\n    public class LinqToTwitterAuthenticationProvider : TwitterAuthenticationProvider\n    {\n        public const string AccessToken = \"TwitterAccessToken\";\n        public const string AccessTokenSecret = \"TwitterAccessTokenSecret\";\n\n        public override Task Authenticated(TwitterAuthenticatedContext context)\n        {\n            context.Identity.AddClaims(\n                new List<Claim>\n                {\n                    new Claim(AccessToken, context.AccessToken),\n                    new Claim(AccessTokenSecret, context.AccessTokenSecret)\n                });\n\n            return base.Authenticated(context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/MvcAuthorizer.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing System.Web.Mvc;\n\nnamespace LinqToTwitter\n{\n    public class MvcAuthorizer : AspNetAuthorizer\n    {\n        private string _authUrl;\n\n        public async  Task<ActionResult> BeginAuthorizationAsync()\n        {\n            return await BeginAuthorizationAsync(Callback);\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(Uri callback)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { _authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback);\n\n            return new RedirectResult(_authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/MvcSignInAuthorizer.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class MvcSignInAuthorizer : MvcAuthorizer, IAuthorizer\n    {\n        public MvcSignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.AspNet\")]\n[assembly: AssemblyDescription(\"Types specific to ASP.NET.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter\")]\n[assembly: AssemblyCopyright(\"Copyright © 2008-2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"625edc4c-e5ca-4e76-9750-abbb73079ea7\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"3.2.0.*\")]\n[assembly: AssemblyFileVersion(\"3.2.0\")]\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/SessionStateCredentialStore.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Web;\nusing System.Web.SessionState;\n\nnamespace LinqToTwitter\n{\n    public class SessionStateCredentialStore : InMemoryCredentialStore\n    {\n        readonly HttpSessionState session;\n\n        public SessionStateCredentialStore()\n        {\n            session = HttpContext.Current.Session;\n        }\n\n        public SessionStateCredentialStore(HttpSessionState session)\n        {\n            this.session = session;\n        }\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return session[\"OAuthConsumerKey\"] as string;\n            }\n            set\n            {\n                session[\"OAuthConsumerKey\"] = value;\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return session[\"OAuthConsumerSecret\"] as string;\n            }\n            set\n            {\n                session[\"OAuthConsumerSecret\"] = value;\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return session[\"OAuthToken\"] as string;\n            }\n            set\n            {\n                session[\"OAuthToken\"] = value;\n            }\n        }\n\n        public override string OAuthTokenSecret\n        {\n            get\n            {\n                return session[\"OAuthTokenSecret\"] as string;\n            }\n            set\n            {\n                session[\"OAuthTokenSecret\"] = value;\n            }\n        }\n\n        public override string ScreenName\n        {\n            get\n            {\n                return session[\"ScreenNameToken\"] as string;\n            }\n            set\n            {\n                session[\"ScreenNameToken\"] = value;\n            }\n        }\n\n        public override ulong UserID\n        {\n            get\n            {\n                return (ulong)(session[\"UserIdToken\"] ?? 0ul);\n            }\n            set\n            {\n                session[\"UserIdToken\"] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Owin.Security\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.AspNet/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"4.0.40804\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"2.0.20710\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"2.0.20710\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"3.0.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"3.0.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net45\" userInstalled=\"true\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net45\" userInstalled=\"true\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.WindowsStore/LinqToTwitter.WindowsStore.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.WindowsStore</RootNamespace>\n    <AssemblyName>LinqToTwitter.WindowsStore</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformVersion>8.1</TargetPlatformVersion>\n    <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <NuGetPackageImportStamp>d2e5c1be</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <ProjectReference Include=\"..\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"WindowsStoreAuthorizer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\win8\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\win8\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' \">\n    <VisualStudioVersion>12.0</VisualStudioVersion>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>false</SignAssembly>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.WindowsStore/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.WindowsStore\")]\n[assembly: AssemblyDescription(\"Types specific to Windows Store apps.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter\")]\n[assembly: AssemblyCopyright(\"Copyright © 2008-2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"3.2.0.*\")]\n[assembly: AssemblyFileVersion(\"3.2.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.WindowsStore/WindowsStoreAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Security.Authentication.Web;\n\nnamespace LinqToTwitter.WindowsStore\n{\n    public class WindowsStoreAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            await GetRequestTokenAsync(Callback);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n\n            WebAuthenticationResult webAuthenticationResult =\n                await WebAuthenticationBroker.AuthenticateAsync(\n                    WebAuthenticationOptions.None,\n                    new Uri(authUrl),\n                    new Uri(Callback));\n\n            if (webAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)\n            {\n                string verifier = ParseVerifierFromResponseUrl(webAuthenticationResult.ResponseData);\n                var accessTokenParams = new Dictionary<string, string>();\n                accessTokenParams.Add(\"oauth_verifier\", verifier);\n\n                await GetAccessTokenAsync(accessTokenParams);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.WindowsStore/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n\t<runtime>\n\t\t<assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\t\t\t<dependentAssembly>\n\t\t\t\t<assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"B03F5F7F11D50A3A\" culture=\"neutral\"/>\n\t\t\t\t<bindingRedirect oldVersion=\"0.0.0.0-4.2.18.0\" newVersion=\"4.2.18.0\"/>\n\t\t\t</dependentAssembly>\n\t\t</assemblyBinding>\n\t</runtime>\n</configuration>\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitter.WindowsStore/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"win81\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"win81\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"win81\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"win81\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/Account.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for account queries\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Account\n    {\n        /// <summary>\n        /// Type of account query (VerifyCredentials or Settings)\n        /// </summary>\n        public AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// User returned by VerifyCredentials Queries\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Current Totals\n        /// </summary>\n        public Totals Totals { get; set; }\n\n        /// <summary>\n        /// Account settings, such as trend location, geo enabled, and sleep time\n        /// </summary>\n        public Settings Settings { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/AccountAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum AccountAction\n    {\n        /// <summary>\n        /// Ends the session of the authenticating user\n        /// </summary>\n        EndSession,\n\n        /// <summary>\n        /// Populates new settings\n        /// </summary>\n        Settings\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/AccountRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// handles query processing for accounts\n    /// </summary>\n    public class AccountRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of account query (VerifyCredentials or Settings)\n        /// </summary>\n        internal AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include status in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Account>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<AccountType>(parameters[TypeParam]);\n\n            switch (Type)\n            {\n                case AccountType.VerifyCredentials:\n                    return BuildVerifyCredentialsUrl(parameters);\n                case AccountType.Settings:\n                    return new Request(BaseUrl + \"account/settings.json\");\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n  \n        Request BuildVerifyCredentialsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"account/verify_credentials.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SkipStatus\") &&\n                RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n            {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms json into IQueryable of Account\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <returns>List of Account</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Account acct = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch (Type)\n                {\n                    case AccountType.Settings:\n                        acct = HandleSettingsResponse(responseJson);\n                        break;\n\n                    case AccountType.VerifyCredentials:\n                        acct = HandleVerifyCredentialsResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n\n                acct.Type = Type;\n                acct.SkipStatus = SkipStatus;\n                acct.IncludeEntities = IncludeEntities;\n            }\n\n            return new List<Account> { acct }.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            Account acct = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch ((AccountAction)theAction)\n                {\n                    case AccountAction.Settings:\n                        acct = HandleSettingsResponse(responseJson);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessActionResult should never execute because a Type must be specified.\");\n                }\n            }\n\n            return acct.ItemCast(default(T));\n        }\n\n        internal Account HandleSettingsResponse(string responseJson)\n        {\n            var settings = JsonMapper.ToObject(responseJson);\n            var sleepTime = settings.GetValue<JsonData>(\"sleep_time\");\n            var timeZone = settings.GetValue<JsonData>(\"time_zone\");\n            var trendLocationData = settings.GetValue<JsonData>(\"trend_location\");\n            var trendLocation = trendLocationData == null ? null : trendLocationData[0];\n\n            var acct = new Account\n            {\n                Type = Type,\n                Settings = new Settings\n                {\n                    TrendLocation = new Location(trendLocation),\n                    GeoEnabled = settings.GetValue<bool>(\"geo_enabled\"),\n                    SleepTime = new SleepTime(sleepTime),\n                    Language = settings.GetValue<string>(\"language\"),\n                    AlwaysUseHttps = settings.GetValue<bool>(\"always_use_https\"),\n                    DiscoverableByEmail = settings.GetValue<bool>(\"discoverable_by_email\"),\n                    TimeZone = new TZInfo(timeZone)\n                }\n            };\n\n\n            return acct;\n        }\n\n        private Account HandleVerifyCredentialsResponse(string responseJson)\n        {\n            var user = JsonMapper.ToObject(responseJson);\n\n            var acct = new Account\n            {\n                Type = Type,\n                User = new User(user)\n            };\n\n            return acct;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/AccountType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// actions for querying accounts\n    /// </summary>\n    public enum AccountType\n    {\n        /// <summary>\n        /// Gets trend, geo, and sleep settings\n        /// </summary>\n        Settings,\n\n        /// <summary>\n        /// Allows you to check user credentails\n        /// </summary>\n        VerifyCredentials\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/DeviceType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of device for account updates\n    /// </summary>\n    public enum DeviceType\n    {\n        /// <summary>\n        /// no device specified\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// use SMS text\n        /// </summary>\n        Sms,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/Settings.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Account Settings\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Settings\n    {\n        /// <summary>\n        /// Location to display trends for\n        /// </summary>\n        public Location TrendLocation { get; set; }\n\n        /// <summary>\n        /// Is Geo Tracking On?\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Times to not notify (i.e. when you're sleeping)\n        /// </summary>\n        public SleepTime SleepTime { get; set; }\n\n        /// <summary>\n        /// The user's UI language selection on Twitter\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Should they always use https protocol\n        /// </summary>\n        public bool AlwaysUseHttps { get; set; }\n\n        /// <summary>\n        /// Can this user be found by email address?\n        /// </summary>\n        public bool DiscoverableByEmail { get; set; }\n\n        /// <summary>\n        /// The user's timezone selection on Twitter\n        /// </summary>\n        public TZInfo TimeZone { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/SleepTime.cs",
    "content": "﻿using LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Times to stop and start sending notifications\n    ///     - Times are null when Enabled is false\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SleepTime\n    {\n        public SleepTime() {}\n        internal SleepTime(JsonData sleepTime)\n        {\n            StartHour = sleepTime.GetValue<int>(\"start_time\");\n            EndHour = sleepTime.GetValue<int>(\"end_time\");\n            Enabled = sleepTime.GetValue<bool>(\"enabled\");\n        }\n\n        /// <summary>\n        /// Stop sending notifications at this time\n        /// </summary>\n        public int? StartHour { get; set; }\n\n        /// <summary>\n        /// Resume sending notifications at this time\n        /// </summary>\n        public int? EndHour { get; set; }\n\n        /// <summary>\n        /// Is sleep times turned on\n        /// </summary>\n        public bool Enabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/TZInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Time zone informtion\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class TZInfo\n    {\n        public TZInfo() {}\n        internal TZInfo(JsonData timeZone)\n        {\n            Name = timeZone.GetValue<string>(\"name\");\n            TzInfoName = timeZone.GetValue<string>(\"tzinfo_name\");\n            UtcOffset = timeZone.GetValue<int>(\"utc_offset\");\n        }\n\n        /// <summary>\n        /// Human-readable timezone name\n        /// </summary>\n        /// <example>Pacific Time (US &amp; Canada)</example>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Rails/unix TZINFO name\n        /// </summary>\n        /// <example>America/Los_Angeles</example>\n        public string TzInfoName { get; set; }\n\n        /// <summary>\n        /// Seconds to subtract from UTC time\n        /// </summary>\n        /// <example>-28800</example>\n        public int? UtcOffset { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/Totals.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Current totals\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Totals\n    {\n        /// <summary>\n        /// Total Updates\n        /// </summary>\n        public int Updates { get; set; }\n\n        /// <summary>\n        /// Total Friends\n        /// </summary>\n        public int Friends { get; set; }\n\n        /// <summary>\n        /// Total Favorites\n        /// </summary>\n        public int Favorites { get; set; }\n\n        /// <summary>\n        /// Total Followers\n        /// </summary>\n        public int Followers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Account/TwitterContextAccountCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        const string NoInputParam = \"NoInput\";\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User info with new colors</returns>\n        public async Task<User> UpdateAccountColorsAsync(string background, string text, string link, string sidebarFill, string sidebarBorder, bool skipStatus)\n        {\n            return await UpdateAccountColorsAsync(background, text, link, sidebarFill, sidebarBorder, true, skipStatus).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User info with new colors</returns>\n        public async Task<User> UpdateAccountColorsAsync(string background, string text, string link, string sidebarFill, string sidebarBorder, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_colors.json\";\n\n            if (string.IsNullOrWhiteSpace(background) &&\n                string.IsNullOrWhiteSpace(text) &&\n                string.IsNullOrWhiteSpace(link) &&\n                string.IsNullOrWhiteSpace(sidebarFill) &&\n                string.IsNullOrWhiteSpace(sidebarBorder))\n                throw new ArgumentException(\"At least one of the colors (background, text, link, sidebarFill, or sidebarBorder) must be provided as arguments, but none are specified.\", NoInputParam);\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"profile_background_color\", string.IsNullOrWhiteSpace(background) ? null : background.TrimStart('#') },\n                        { \"profile_text_color\", string.IsNullOrWhiteSpace(text) ? null : text.TrimStart('#') },\n                        { \"profile_link_color\", string.IsNullOrWhiteSpace(link) ? null : link.TrimStart('#') },\n                        { \"profile_sidebar_fill_color\", string.IsNullOrWhiteSpace(sidebarFill) ? null : sidebarFill.TrimStart('#') },\n                        { \"profile_sidebar_border_color\", string.IsNullOrWhiteSpace(sidebarBorder) ? null : sidebarBorder.TrimStart('#') },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User> UpdateAccountImageAsync(byte[] image, string fileName, string imageType, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountImageAsync(image, fileName, imageType, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image file to Twitter to replace user image.\n        /// </summary>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User> UpdateAccountImageAsync(byte[] image, string fileName, string imageType, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_image.json\";\n\n            if (image == null || image.Length == 0)\n                throw new ArgumentException(\"image is required.\", \"image\");\n\n            if (string.IsNullOrWhiteSpace(fileName))\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n\n            if (string.IsNullOrWhiteSpace(imageType))\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n\n            var reqProc = new UserRequestProcessor<User>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    };\n\n            string name = \"image\";\n            string imageMimeType = \"image/\" + imageType;\n\n            RawResult = await TwitterExecutor.PostMediaAsync(accountUrl, parameters, image, name, fileName, imageMimeType, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace background image\n        /// </summary>\n        /// <param name=\"image\">full path to file, including file name</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"tile\">Tile image across background.</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User> UpdateAccountBackgroundImageAsync(byte[] image, string fileName, string imageType, bool tile, bool use, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountBackgroundImageAsync(image, fileName, imageType, tile, use, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image file to Twitter to replace background image.\n        /// </summary>\n        /// <param name=\"image\">full path to file, including file name</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"tile\">Tile image across background.</param>\n        /// <param name=\"use\">Whether to use uploaded background image or not</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User> UpdateAccountBackgroundImageAsync(byte[] image, string fileName, string imageType, bool tile, bool use, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_background_image.json\";\n\n            if (image == null || image.Length == 0)\n                throw new ArgumentException(\"image is required.\", \"image\");\n\n            if (string.IsNullOrWhiteSpace(fileName))\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n\n            if (string.IsNullOrWhiteSpace(imageType))\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"include_entities\", includeEntities.ToString().ToLower() },\n                { \"skip_status\", skipStatus.ToString().ToLower() }\n            };\n\n            if (tile)\n                parameters.Add(\"tile\", true.ToString().ToLower());\n\n            parameters.Add(\"use\", use.ToString().ToLower());\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            string name = \"image\";\n            string imageMimeType = \"image/\" + imageType;\n\n            RawResult = await TwitterExecutor.PostMediaAsync(accountUrl, parameters, image, name, fileName, imageMimeType, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public async Task<User> UpdateAccountProfileAsync(string name, string url, string location, string description, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountProfileAsync(name, url, location, description, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public async Task<User> UpdateAccountProfileAsync(string name, string url, string location, string description, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile.json\";\n\n            if (string.IsNullOrWhiteSpace(name) &&\n                string.IsNullOrWhiteSpace(url) &&\n                string.IsNullOrWhiteSpace(location) &&\n                string.IsNullOrWhiteSpace(description))\n                throw new ArgumentException(\"At least one of the text fields (name, email, url, location, or description) must be provided as arguments, but none are specified.\", NoInputParam);\n\n            if (!string.IsNullOrWhiteSpace(name) && name.Length > 20)\n                throw new ArgumentException(\"name must be no longer than 20 characters\", \"name\");\n\n            if (!string.IsNullOrWhiteSpace(url) && url.Length > 100)\n                throw new ArgumentException(\"url must be no longer than 100 characters\", \"url\");\n\n            if (!string.IsNullOrWhiteSpace(location) && location.Length > 30)\n                throw new ArgumentException(\"location must be no longer than 30 characters\", \"location\");\n\n            if (!string.IsNullOrWhiteSpace(description) && description.Length > 160)\n                throw new ArgumentException(\"description must be no longer than 160 characters\", \"description\");\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"name\", name },\n                        { \"url\", url },\n                        { \"location\", location },\n                        { \"description\", description },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Updates user's account settings\n        /// </summary>\n        /// <param name=\"trendLocationWeoid\">WEOID for Trend Location the user is interested in.</param>\n        /// <param name=\"sleepTimeEnabled\">Turn on time periods when notifications won't be sent.</param>\n        /// <param name=\"startSleepTime\">Don't send notifications at this time or later this time. (hour from 00 to 23)</param>\n        /// <param name=\"endSleepTime\">Start sending notifications again after this time. (hour from 00 to 23)</param>\n        /// <param name=\"timeZone\">User's time zone.</param>\n        /// <param name=\"lang\">User's language.</param>\n        /// <returns>Account information with Settings property populated.</returns>\n        public async Task<Account> UpdateAccountSettingsAsync(int? trendLocationWoeid, bool? sleepTimeEnabled, int? startSleepTime, int? endSleepTime, string timeZone, string lang, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/settings.json\";\n\n            if (trendLocationWoeid == null &&\n                sleepTimeEnabled == null &&\n                startSleepTime == null &&\n                endSleepTime == null &&\n                string.IsNullOrWhiteSpace(timeZone) &&\n                string.IsNullOrWhiteSpace(lang))\n                throw new ArgumentException(\"At least one parameter must be provided as arguments, but none are specified.\", NoInputParam);\n\n            var reqProc = new AccountRequestProcessor<Account>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"time_zone\", timeZone },\n                        { \"lang\", lang }\n                    };\n\n            if (trendLocationWoeid != null)\n                parameters.Add(\"trend_location_woeid\", trendLocationWoeid.ToString());\n            if (sleepTimeEnabled != null)\n                parameters.Add(\"sleep_time_enabled\", sleepTimeEnabled.ToString().ToLower());\n            if (startSleepTime != null)\n                parameters.Add(\"start_sleep_time\", startSleepTime.ToString());\n            if (endSleepTime != null)\n                parameters.Add(\"end_sleep_time\", endSleepTime.ToString());\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<Account>(\n                    accountUrl,\n                    parameters,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, AccountAction.Settings);\n        }\n\n        /// <summary>\n        /// Modify device information\n        /// </summary>\n        /// <param name=\"device\">Which device to use.</param>\n        /// <param name=\"includeEntitites\">Set this to false to not add entitites to response. (default: true)</param>\n        /// <returns></returns>\n        public async Task<Account> UpdateDeliveryDeviceAsync(DeviceType device, bool? includeEntitites, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_delivery_device.json\";\n\n            var reqProc = new AccountRequestProcessor<Account>();\n\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"device\", device.ToString().ToLower() }\n                    };\n\n            if (includeEntitites != null)\n                parameters.Add(\"include_entities\", includeEntitites.ToString().ToLower());\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<Account>(\n                    accountUrl,\n                    parameters,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, AccountAction.Settings);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"fileName\">Name of file.</param>\n        /// <param name=\"imageType\">Type of file (e.g. png or jpg)</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public async Task<User> UpdateProfileBannerAsync(byte[] banner, string fileName, string imageType, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateProfileBannerAsync(banner, fileName, imageType, 1500, 500, 0, 0, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"fileName\">Name of file.</param>\n        /// <param name=\"imageType\">Type of file (e.g. png or jpg)</param>\n        /// <param name=\"width\">Pixel width to clip image.</param>\n        /// <param name=\"height\">Pixel height to clip image.</param>\n        /// <param name=\"offsetLeft\">Pixels to offset start of image from the left.</param>\n        /// <param name=\"offsetTop\">Pixels to offset start of image from the top.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public async Task<User> UpdateProfileBannerAsync(byte[] banner, string fileName, string imageType, int width, int height, int offsetLeft, int offsetTop, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_banner.json\";\n\n            if (banner == null || banner.Length == 0)\n                throw new ArgumentException(\"banner is required.\", \"banner\");\n\n            if (string.IsNullOrWhiteSpace(fileName))\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n\n            if (string.IsNullOrWhiteSpace(imageType))\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"width\", width.ToString() },\n                { \"height\", height.ToString() },\n                { \"offset_left\", offsetLeft.ToString() },\n                { \"offset_top\", offsetTop.ToString() },\n                //{ \"banner\", \"FILE_DATA\" }\n            };\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            string name = \"banner\";\n            string imageMimeType = \"image/\" + imageType;\n\n            RawResult = await TwitterExecutor.PostMediaAsync(accountUrl, parameters, banner, name, fileName, imageMimeType, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Removes banner from authenticated user's profile.\n        /// </summary>\n        /// <returns>Empty User instance.</returns>\n        public async Task<User> RemoveProfileBannerAsync(CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/remove_profile_banner.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    accountUrl,\n                    new Dictionary<string, string>(),\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Blocks/BlockingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum BlockingType\n    {\n        /// <summary>\n        /// Retrieve list of users (full User objects) being blocked\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Retrieve a list of IDs of users being blocked\n        /// </summary>\n        Ids\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Blocks/Blocks.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps retrieve information about blocks\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Blocks\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of blocks request to perform (input only)\n        /// </summary>\n        public BlockingType Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name (input only)\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id (input only)\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve (input only)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        public int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        public string Cursor { get; set; }\n\n        //\n        // Output parameters\n        //\n\n        /// <summary>\n        /// Prev/Next cursor to move through ID and User lists.\n        /// </summary>\n        public Cursors Cursors { get; set; }\n\n        /// <summary>\n        /// Listed Count\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// List of blocked IDs\n        /// </summary>\n        public List<string> IDs { get; set; }\n\n        /// <summary>\n        /// user being blocked\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Populated for blocking queries, showing all blocked users\n        /// </summary>\n        public List<User> Users { get; set; }\n\n        /// <summary>\n        /// Twitter response for no block on specified user\n        /// </summary>\n        public TwitterHashResponse NoBlock { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Blocks/BlocksRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes block queries\n    /// </summary>\n    public class BlocksRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of blocks request to perform\n        /// </summary>\n        internal BlockingType Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        internal int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Blocks>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Page\",\n                       \"PerPage\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\",\n                       \"Cursor\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<BlockingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case BlockingType.List:\n                    return BuildListUrl(parameters);\n                case BlockingType.Ids:\n                    return BuildBlockingIDsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting blocking ids\n        /// </summary>\n        /// <returns>base url + show segment</returns>\n        Request BuildBlockingIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/ids.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of blocked users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"PerPage\"))\n            {\n                PerPage = int.Parse(parameters[\"PerPage\"]);\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"PerPage\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <returns>List of Blocks</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            var blocks = new Blocks\n            {\n                Type = Type,\n                UserID = UserID,\n                ScreenName = ScreenName,\n                Page = Page,\n                PerPage = PerPage,\n                IncludeEntities = IncludeEntities,\n                SkipStatus = SkipStatus,\n                Cursor = Cursor\n            };\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                blocks.Users = new List<User>();\n            }\n            else\n            {\n                var blocksJson = JsonMapper.ToObject(responseJson);\n                blocks.Cursors = new Cursors(blocksJson);\n\n                switch (Type)\n                {\n                    case BlockingType.List:\n                        HandleList(blocks, blocksJson);\n                        break;\n                    case BlockingType.Ids:\n                        HandleBlockingIDs(blocks, blocksJson);\n                        break;\n                    default:\n                        throw new ArgumentException(\"Unhandled BlockingType.\");\n                }\n            }\n\n            return new List<Blocks> { blocks }.OfType<T>().ToList();\n        }\n\n        void HandleList(Blocks blocks, JsonData blocksJson)\n        {\n            var users = blocksJson.GetValue<JsonData>(\"users\");\n\n            blocks.Users =\n                (from JsonData user in users\n                 select new User(user))\n                .ToList();\n        }\n\n        void HandleBlockingIDs(Blocks blocks, JsonData blocksJson)\n        {\n            var ids = blocksJson.GetValue<JsonData>(\"ids\");\n\n            blocks.IDs =\n                (from JsonData id in ids\n                 select id.ToString())\n                .ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData blocksJson = JsonMapper.ToObject(responseJson);\n\n            var user = new User(blocksJson);\n\n            return user.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Blocks/TwitterContextBlockCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Blocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> CreateBlockAsync(ulong userID, string screenName, bool skipStatus)\n        {\n            return await CreateBlockAsync(userID, screenName, true, skipStatus).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Blocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> CreateBlockAsync(ulong userID, string screenName, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID <= 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName are required parameters.\", \"UserIDOrScreenName\");\n\n            var blocksUrl = BaseUrl + \"blocks/create.json\";\n\n            var reqProc = new BlocksRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    blocksUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID <= 0 ? (string)null : userID.ToString() },\n                        { \"screen_name\", screenName },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Unblocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> DestroyBlockAsync(ulong userID, string screenName, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DestroyBlockAsync(userID, screenName, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Unblocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> DestroyBlockAsync(ulong userID, string screenName, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID <= 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName are required parameters.\", \"UserIDOrScreenName\");\n\n            var blocksUrl = BaseUrl + \"blocks/destroy.json\";\n\n            var reqProc = new BlocksRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    blocksUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID <= 0 ? (string)null : userID.ToString() },\n                        { \"screen_name\", screenName },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/BannerSize.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class BannerSize\n    {\n        public string Label { get; set; }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Culture.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Culture\n    {\n        static CultureInfo usCulture;\n\n        public static CultureInfo US\n        {\n            get\n            {\n                if (usCulture == null)\n                {\n                    usCulture = new CultureInfo(\"en-US\");\n                }\n\n                return usCulture;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Cursors.cs",
    "content": "﻿using System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter for previous and next pages\n    /// </summary>\n    /// <remarks>\n    /// To use a cursor, start by setting the cursor to -1\n    /// and then use one of these response cursors to move\n    /// backwards or forwards in paged results.\n    /// </remarks>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Cursors\n    {\n        public Cursors() {}\n        internal Cursors(JsonData cursors)\n        {\n            Next = cursors.GetValue<long>(\"next_cursor\");\n            Previous = cursors.GetValue<long>(\"previous_cursor\");\n        }\n\n        /// <summary>\n        /// Use this value to retrieve the next page\n        /// </summary>\n        [XmlIgnore]\n        public long Next { get; internal set; }\n\n        /// <summary>\n        /// Use this value to go back to the previous page\n        /// </summary>\n        [XmlIgnore]\n        public long Previous { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/Entities.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Container for mention entities\n    /// </summary>\n    public class Entities\n    {\n        public Entities() { }\n        public Entities(JsonData entityJson)\n        {\n            if (entityJson == null)\n            {\n                HashTagEntities = new List<HashTagEntity>();\n                MediaEntities = new List<MediaEntity>();\n                UrlEntities = new List<UrlEntity>();\n                UserMentionEntities = new List<UserMentionEntity>();\n                SymbolEntities = new List<SymbolEntity>();\n\n                return;\n            }\n\n            var hashTagEntities = entityJson.GetValue<JsonData>(\"hashtags\");\n            var mediaEntities = entityJson.GetValue<JsonData>(\"media\");\n            var urlEntities = entityJson.GetValue<JsonData>(\"urls\");\n            var userEntities = entityJson.GetValue<JsonData>(\"user_mentions\");\n            var symbolEntities = entityJson.GetValue<JsonData>(\"symbols\");\n            HashTagEntities =\n                hashTagEntities == null\n                    ? new List<HashTagEntity>()\n                    : (from JsonData hash in hashTagEntities\n                       let indices = hash.GetValue<JsonData>(\"indices\")\n                       select new HashTagEntity\n                       {\n                           Tag = hash.GetValue<string>(\"text\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                       .ToList();\n            MediaEntities =\n                mediaEntities == null\n                    ? new List<MediaEntity>()\n                    : (from JsonData media in mediaEntities\n                       let indices = media.GetValue<JsonData>(\"indices\")\n                       let sizes = media.GetValue<JsonData>(\"sizes\")\n                       select new MediaEntity\n                       {\n                           DisplayUrl = media.GetValue<string>(\"display_url\"),\n                           ExpandedUrl = media.GetValue<string>(\"expanded_url\"),\n                           ID = media.GetValue<ulong>(\"id\"),\n                           Indices = new List<int> { (int)indices[0], (int)indices[1] },\n                           MediaUrl = media.GetValue<string>(\"media_url\"),\n                           MediaUrlHttps = media.GetValue<string>(\"media_url_https\"),\n                           Sizes =\n                               (from key in (sizes as IDictionary<string, JsonData>).Keys as List<string>\n                                let sizesKey = sizes.GetValue<JsonData>(key)\n                                select new PhotoSize\n                                {\n                                    Type = key,\n                                    Width = sizesKey.GetValue<int>(\"w\"),\n                                    Height = sizesKey.GetValue<int>(\"h\"),\n                                    Resize = sizesKey.GetValue<string>(\"resize\")\n                                })\n                               .ToList(),\n                           Type = media.GetValue<string>(\"type\"),\n                           Url = media.GetValue<string>(\"url\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                       .ToList();\n            UrlEntities =\n                urlEntities == null\n                    ? new List<UrlEntity>()\n                    : (from JsonData url in urlEntities\n                       let indices = url.GetValue<JsonData>(\"indices\")\n                       select new UrlEntity\n                       {\n                           Url = url.GetValue<string>(\"url\"),\n                           DisplayUrl = url.GetValue<string>(\"display_url\"),\n                           ExpandedUrl = url.GetValue<string>(\"expanded_url\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n            UserMentionEntities =\n                userEntities == null\n                    ? new List<UserMentionEntity>()\n                    : (from JsonData user in userEntities\n                       let indices = user.GetValue<JsonData>(\"indices\")\n                       select new UserMentionEntity\n                       {\n                           ScreenName = user.GetValue<string>(\"screen_name\"),\n                           Name = user.GetValue<string>(\"name\"),\n                           Id = user.GetValue<ulong>(\"id\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n            SymbolEntities =\n                symbolEntities == null\n                    ? new List<SymbolEntity>()\n                    : (from JsonData user in symbolEntities\n                       let indices = user.GetValue<JsonData>(\"indices\")\n                       select new SymbolEntity\n                       {\n                           Text = user.GetValue<string>(\"text\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n        }\n\n        /// <summary>\n        /// Mentions of the user in the tweet\n        /// </summary>\n        public List<UserMentionEntity> UserMentionEntities { get; set; }\n\n        /// <summary>\n        /// Url entities in the tweet\n        /// </summary>\n        public List<UrlEntity> UrlEntities { get; set; }\n\n        /// <summary>\n        /// Hash tag entities in the tweet\n        /// </summary>\n        public List<HashTagEntity> HashTagEntities { get; set; }\n\n        /// <summary>\n        /// Media entities in the tweet\n        /// </summary>\n        public List<MediaEntity> MediaEntities { get; set; }\n\n        /// <summary>\n        /// Symbol entities in the tweet\n        /// </summary>\n        public List<SymbolEntity> SymbolEntities { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/EntityBase.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Base for all entities\n    /// </summary>\n    public abstract class EntityBase\n    {\n        /// <summary>\n        /// Start of the entity in the tweet\n        /// </summary>\n        public int Start { get; set; }\n\n        /// <summary>\n        /// End of the entity in the tweet\n        /// </summary>\n        public int End { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/HashTagEntity.cs",
    "content": "namespace LinqToTwitter\n{\n    /// <summary>\n    /// Hash tag entity\n    /// </summary>\n    /// <example>#linqtotwitter</example>\n    public class HashTagEntity : EntityBase\n    {\n        /// <summary>\n        /// Tag name without the # sign\n        /// </summary>\n        public string Tag { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/MediaEntity.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public class MediaEntity : UrlEntity\n    {\n        /// <summary>\n        /// ID of the media\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// URL where media is located\n        /// </summary>\n        public string MediaUrl { get; set; }\n\n        /// <summary>\n        /// SSL version of media URL\n        /// </summary>\n        public string MediaUrlHttps { get; set; }\n\n        /// <summary>\n        /// Supported media sizes\n        /// </summary>\n        public List<PhotoSize> Sizes { get; set; }\n\n        /// <summary>\n        /// Type of media\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Character positions of extracted media\n        /// </summary>\n        public List<int> Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/SymbolEntity.cs",
    "content": "using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter symbol entity in the tweet\n    /// </summary>\n    /// <example>@linkedin</example>\n    public class SymbolEntity : EntityBase\n    {\n        /// <summary>\n        /// Symbol\n        /// </summary>\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/UrlEntity.cs",
    "content": "using System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Url mention in the tweet\n    /// </summary>\n    /// <example>http://bit.ly/129Ad</example>\n    public class UrlEntity : EntityBase\n    {\n        /// <summary>\n        /// Absolute Url in the tweet\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// t.co shortened URL\n        /// </summary>\n        public string DisplayUrl { get; set; }\n\n        /// <summary>\n        /// t.co expanded URL\n        /// </summary>\n        public string ExpandedUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Entities/UserMentionEntity.cs",
    "content": "using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter user mention entity in the tweet\n    /// </summary>\n    /// <example>@linkedin</example>\n    public class UserMentionEntity : EntityBase\n    {\n        /// <summary>\n        /// Twitter user Id\n        /// </summary>\n        public ulong Id { get; set; }\n\n        /// <summary>\n        /// Screen name of the Twitter User\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Name of the Twitter User\n        /// </summary>\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Evaluator.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n#if !ASYNC\nusing LinqToTwitter.Common;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// translates variable references in expressions to constants\n    /// </summary>\n    public static class Evaluator\n    {\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <param name=\"fnCanBeEvaluated\">A function that decides whether a given expression node can be part of the local function.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression PartialEval(Expression expression, Func<Expression, bool> fnCanBeEvaluated)\n        {\n            return new SubtreeEvaluator(new Nominator(fnCanBeEvaluated).Nominate(expression)).Eval(expression);\n        }\n\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression PartialEval(Expression expression)\n        {\n            return PartialEval(expression, Evaluator.CanBeEvaluatedLocally);\n        }\n\n        private static bool CanBeEvaluatedLocally(Expression expression)\n        {\n            return expression.NodeType != ExpressionType.Parameter;\n        }\n\n        /// <summary>\n        /// Evaluates & replaces sub-trees when first candidate is reached (top-down)\n        /// </summary>\n        class SubtreeEvaluator : ExpressionVisitor\n        {\n            readonly HashSet<Expression> candidates;\n\n            internal SubtreeEvaluator(HashSet<Expression> candidates)\n            {\n                this.candidates = candidates;\n            }\n\n            internal Expression Eval(Expression exp)\n            {\n                return this.Visit(exp);\n            }\n\n            public override Expression Visit(Expression exp)\n            {\n                if (exp == null)\n                {\n                    return null;\n                }\n                if (this.candidates.Contains(exp))\n                {\n                    return this.Evaluate(exp);\n                }\n                return base.Visit(exp);\n            }\n\n            private Expression Evaluate(Expression e)\n            {\n                if (e.NodeType == ExpressionType.Constant)\n                {\n                    return e;\n                }\n                LambdaExpression lambda = Expression.Lambda(e);\n                Delegate fn = lambda.Compile();\n                return Expression.Constant(fn.DynamicInvoke(null), e.Type);\n            }\n        }\n\n        /// <summary>\n        /// Performs bottom-up analysis to determine which nodes can possibly\n        /// be part of an evaluated sub-tree.\n        /// </summary>\n        class Nominator : ExpressionVisitor\n        {\n            readonly Func<Expression, bool> fnCanBeEvaluated;\n            HashSet<Expression> candidates;\n            bool cannotBeEvaluated;\n\n            internal Nominator(Func<Expression, bool> fnCanBeEvaluated)\n            {\n                this.fnCanBeEvaluated = fnCanBeEvaluated;\n            }\n\n            internal HashSet<Expression> Nominate(Expression expression)\n            {\n                this.candidates = new HashSet<Expression>();\n                this.Visit(expression);\n                return this.candidates;\n            }\n\n            public override Expression Visit(Expression expression)\n            {\n                if (expression != null)\n                {\n                    bool saveCannotBeEvaluated = this.cannotBeEvaluated;\n                    this.cannotBeEvaluated = false;\n                    base.Visit(expression);\n                    if (!this.cannotBeEvaluated)\n                    {\n                        if (this.fnCanBeEvaluated(expression))\n                        {\n                            this.candidates.Add(expression);\n                        }\n                        else\n                        {\n                            this.cannotBeEvaluated = true;\n                        }\n                    }\n                    this.cannotBeEvaluated |= saveCannotBeEvaluated;\n                }\n                return expression;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/ExpressionTreeHelpers.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// utilities for working with expression trees\n    /// </summary>\n    internal class ExpressionTreeHelpers\n    {\n        /// <summary>\n        /// test to see if expression is a binary expression that checks equality with a constant value\n        /// - essentially, the caller wants to know if this is a well-formed expression with certain criteria\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">type containing member</param>\n        /// <param name=\"memberName\">member being checked</param>\n        /// <returns>true if member is being checked for equality with value</returns>\n        internal static bool IsMemberEqualsValueExpression(Expression exp, Type declaringType, string memberName)\n        {\n            if (exp.NodeType != ExpressionType.Equal &&\n                exp.NodeType != ExpressionType.NotEqual &&\n                exp.NodeType != ExpressionType.GreaterThan &&\n                exp.NodeType != ExpressionType.GreaterThanOrEqual &&\n                exp.NodeType != ExpressionType.LessThan &&\n                exp.NodeType != ExpressionType.LessThanOrEqual)\n                return false;\n\n            BinaryExpression be = (BinaryExpression)exp;\n\n            // Assert.\n            if (ExpressionTreeHelpers.IsSpecificMemberExpression(be.Left, declaringType, memberName) &&\n                ExpressionTreeHelpers.IsSpecificMemberExpression(be.Right, declaringType, memberName))\n                throw new Exception(\"Cannot have 'member' == 'member' in an expression!\");\n\n            return (ExpressionTreeHelpers.IsSpecificMemberExpression(be.Left, declaringType, memberName) ||\n                ExpressionTreeHelpers.IsSpecificMemberExpression(be.Right, declaringType, memberName));\n        }\n\n        /// <summary>\n        /// verify that the type and member name in the expression are what is expected\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">expected type</param>\n        /// <param name=\"memberName\">expected member name</param>\n        /// <returns>true if type and name in expression match expected type and name</returns>\n        internal static bool IsSpecificMemberExpression(Expression exp, Type declaringType, string memberName)\n        {\n            // adjust for enums or VB ConvertChecked\n            // VB wraps Type in a ConvertChecked that we must extract\n            Expression tempExp =\n                exp.NodeType == ExpressionType.Convert ||\n                exp.NodeType == ExpressionType.ConvertChecked ?\n                    (exp as UnaryExpression).Operand :\n                    exp;\n\n            return ((tempExp is MemberExpression) &&\n                (((MemberExpression)tempExp).Member.DeclaringType == declaringType) &&\n                (((MemberExpression)tempExp).Member.Name == memberName));\n        }\n\n        /// <summary>\n        /// extracts the constant value from a binary equals expression\n        /// - either the left or right side of the expression\n        /// </summary>\n        /// <param name=\"be\">binary expression</param>\n        /// <param name=\"memberDeclaringType\">type of object</param>\n        /// <param name=\"memberName\">member to get value for</param>\n        /// <returns>string representation of value</returns>\n        internal static string GetValueFromEqualsExpression(BinaryExpression be, Type memberDeclaringType, string memberName)\n        {\n            if (be.NodeType != ExpressionType.Equal &&\n                be.NodeType != ExpressionType.NotEqual &&\n                be.NodeType != ExpressionType.GreaterThan &&\n                be.NodeType != ExpressionType.GreaterThanOrEqual &&\n                be.NodeType != ExpressionType.LessThan &&\n                be.NodeType != ExpressionType.LessThanOrEqual)\n                throw new Exception(\"There is a bug in this program.\");\n\n            if (be.Left.NodeType == ExpressionType.MemberAccess ||\n                be.Left.NodeType == ExpressionType.Convert ||\n                be.Left.NodeType == ExpressionType.ConvertChecked)\n            {\n                // adjust for enums & VB ConvertChecked\n                MemberExpression me =\n                    be.Left.NodeType == ExpressionType.Convert ||\n                    be.Left.NodeType == ExpressionType.ConvertChecked ?\n                        (be.Left as UnaryExpression).Operand as MemberExpression :\n                        be.Left as MemberExpression;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                {\n                    return GetValueFromExpression(be.Right);\n                }\n            }\n            else if (be.Right.NodeType == ExpressionType.MemberAccess)\n            {\n                MemberExpression me = (MemberExpression)be.Right;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                {\n                    return GetValueFromExpression(be.Left);\n                }\n            }\n\n            // We should have returned by now.\n            throw new Exception(\"There is a bug in this program.\");\n        }\n\n        /// <summary>\n        /// converts constant expression to constant value\n        /// </summary>\n        /// <param name=\"expression\">constant expression</param>\n        /// <returns>constant value</returns>\n        internal static string GetValueFromExpression(Expression expression)\n        {\n            if (expression.NodeType == ExpressionType.Constant)\n                return ((ConstantExpression)expression).Value.ToString();\n            else if (expression.NodeType == ExpressionType.Convert || expression.NodeType == ExpressionType.ConvertChecked)\n                return ((int)((expression as UnaryExpression).Operand as ConstantExpression).Value).ToString();\n            else\n                throw new InvalidQueryException(\n                    String.Format(\"The expression type {0} is not supported to obtain a value.\", expression.NodeType));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/ExpressionTreeModifier.cs",
    "content": "﻿using System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    class ExpressionTreeModifier<T> : ExpressionVisitor\n    {\n        readonly IQueryable<T> queryableItems;\n\n        internal ExpressionTreeModifier(IQueryable<T> items)\n        {\n            queryableItems = items;\n        }\n\n        internal Expression CopyAndModify(Expression expression)\n        {\n            return Visit(expression);\n        }\n\n        protected override Expression VisitConstant(ConstantExpression c)\n        {\n            // Replace the constant TwitterQueryable arg with the queryable collection.\n            if (c.Type.Name == \"TwitterQueryable`1\")\n                return Expression.Constant(queryableItems);\n            \n            return c;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/ExpressionVisitor.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public abstract class ExpressionVisitor\n    {\n        public virtual Expression Visit(Expression exp)\n        {\n            if (exp == null)\n                return exp;\n\n            switch (exp.NodeType)\n            {\n                case ExpressionType.Negate:\n                case ExpressionType.NegateChecked:\n                case ExpressionType.Not:\n                case ExpressionType.Convert:\n                case ExpressionType.ConvertChecked:\n                case ExpressionType.ArrayLength:\n                case ExpressionType.Quote:\n                case ExpressionType.TypeAs:\n                    return this.VisitUnary((UnaryExpression)exp);\n                case ExpressionType.Add:\n                case ExpressionType.AddChecked:\n                case ExpressionType.Subtract:\n                case ExpressionType.SubtractChecked:\n                case ExpressionType.Multiply:\n                case ExpressionType.MultiplyChecked:\n                case ExpressionType.Divide:\n                case ExpressionType.Modulo:\n                case ExpressionType.And:\n                case ExpressionType.AndAlso:\n                case ExpressionType.Or:\n                case ExpressionType.OrElse:\n                case ExpressionType.LessThan:\n                case ExpressionType.LessThanOrEqual:\n                case ExpressionType.GreaterThan:\n                case ExpressionType.GreaterThanOrEqual:\n                case ExpressionType.Equal:\n                case ExpressionType.NotEqual:\n                case ExpressionType.Coalesce:\n                case ExpressionType.ArrayIndex:\n                case ExpressionType.RightShift:\n                case ExpressionType.LeftShift:\n                case ExpressionType.ExclusiveOr:\n                    return this.VisitBinary((BinaryExpression)exp);\n                case ExpressionType.TypeIs:\n                    return this.VisitTypeIs((TypeBinaryExpression)exp);\n                case ExpressionType.Conditional:\n                    return this.VisitConditional((ConditionalExpression)exp);\n                case ExpressionType.Constant:\n                    return this.VisitConstant((ConstantExpression)exp);\n                case ExpressionType.Parameter:\n                    return this.VisitParameter((ParameterExpression)exp);\n                case ExpressionType.MemberAccess:\n                    return this.VisitMemberAccess((MemberExpression)exp);\n                case ExpressionType.Call:\n                    return this.VisitMethodCall((MethodCallExpression)exp);\n                case ExpressionType.Lambda:\n                    return this.VisitLambda((LambdaExpression)exp);\n                case ExpressionType.New:\n                    return this.VisitNew((NewExpression)exp);\n                case ExpressionType.NewArrayInit:\n                case ExpressionType.NewArrayBounds:\n                    return this.VisitNewArray((NewArrayExpression)exp);\n                case ExpressionType.Invoke:\n                    return this.VisitInvocation((InvocationExpression)exp);\n                case ExpressionType.MemberInit:\n                    return this.VisitMemberInit((MemberInitExpression)exp);\n                case ExpressionType.ListInit:\n                    return this.VisitListInit((ListInitExpression)exp);\n                default:\n                    throw new Exception(string.Format(\"Unhandled expression type: '{0}'\", exp.NodeType));\n            }\n        }\n\n        protected virtual MemberBinding VisitBinding(MemberBinding binding)\n        {\n            switch (binding.BindingType)\n            {\n                case MemberBindingType.Assignment:\n                    return this.VisitMemberAssignment((MemberAssignment)binding);\n                case MemberBindingType.MemberBinding:\n                    return this.VisitMemberMemberBinding((MemberMemberBinding)binding);\n                case MemberBindingType.ListBinding:\n                    return this.VisitMemberListBinding((MemberListBinding)binding);\n                default:\n                    throw new Exception(string.Format(\"Unhandled binding type '{0}'\", binding.BindingType));\n            }\n        }\n\n        protected virtual ElementInit VisitElementInitializer(ElementInit initializer)\n        {\n            ReadOnlyCollection<Expression> arguments = this.VisitExpressionList(initializer.Arguments);\n\n            if (arguments != initializer.Arguments)\n            {\n                return Expression.ElementInit(initializer.AddMethod, arguments);\n            }\n\n            return initializer;\n        }\n\n        protected virtual Expression VisitUnary(UnaryExpression u)\n        {\n            Expression operand = this.Visit(u.Operand);\n\n            if (operand != u.Operand)\n            {\n                return Expression.MakeUnary(u.NodeType, operand, u.Type, u.Method);\n            }\n\n            return u;\n        }\n\n        protected virtual Expression VisitBinary(BinaryExpression b)\n        {\n            Expression left = this.Visit(b.Left);\n            Expression right = this.Visit(b.Right);\n            Expression conversion = this.Visit(b.Conversion);\n\n            if (left != b.Left || right != b.Right || conversion != b.Conversion)\n            {\n                if (b.NodeType == ExpressionType.Coalesce && b.Conversion != null)\n                    return Expression.Coalesce(left, right, conversion as LambdaExpression);\n                else\n                    return Expression.MakeBinary(b.NodeType, left, right, b.IsLiftedToNull, b.Method);\n            }\n\n            return b;\n        }\n\n        protected virtual Expression VisitTypeIs(TypeBinaryExpression b)\n        {\n            Expression expr = this.Visit(b.Expression);\n\n            if (expr != b.Expression)\n            {\n                return Expression.TypeIs(expr, b.TypeOperand);\n            }\n\n            return b;\n        }\n\n        protected virtual Expression VisitConstant(ConstantExpression c)\n        {\n            return c;\n        }\n\n        protected virtual Expression VisitConditional(ConditionalExpression c)\n        {\n            Expression test = this.Visit(c.Test);\n            Expression ifTrue = this.Visit(c.IfTrue);\n            Expression ifFalse = this.Visit(c.IfFalse);\n\n            if (test != c.Test || ifTrue != c.IfTrue || ifFalse != c.IfFalse)\n            {\n                return Expression.Condition(test, ifTrue, ifFalse);\n            }\n\n            return c;\n        }\n\n        protected virtual Expression VisitParameter(ParameterExpression p)\n        {\n            return p;\n        }\n\n        protected virtual Expression VisitMemberAccess(MemberExpression m)\n        {\n            Expression exp = this.Visit(m.Expression);\n\n            if (exp != m.Expression)\n            {\n                return Expression.MakeMemberAccess(exp, m.Member);\n            }\n\n            return m;\n        }\n\n        protected virtual Expression VisitMethodCall(MethodCallExpression m)\n        {\n            Expression obj = this.Visit(m.Object);\n            IEnumerable<Expression> args = this.VisitExpressionList(m.Arguments);\n\n            if (obj != m.Object || args != m.Arguments)\n            {\n                return Expression.Call(obj, m.Method, args);\n            }\n\n            return m;\n        }\n\n        protected virtual ReadOnlyCollection<Expression> VisitExpressionList(ReadOnlyCollection<Expression> original)\n        {\n            List<Expression> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                Expression p = this.Visit(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(p);\n                }\n                else if (p != original[i])\n                {\n                    list = new List<Expression>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(p);\n                }\n            }\n\n            if (list != null)\n            {\n                return new ReadOnlyCollection<Expression>(list);\n            }\n\n            return original;\n        }\n\n        protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assignment)\n        {\n            Expression e = this.Visit(assignment.Expression);\n\n            if (e != assignment.Expression)\n            {\n                return Expression.Bind(assignment.Member, e);\n            }\n\n            return assignment;\n        }\n\n        protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)\n        {\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(binding.Bindings);\n\n            if (bindings != binding.Bindings)\n            {\n                return Expression.MemberBind(binding.Member, bindings);\n            }\n\n            return binding;\n        }\n\n        protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)\n        {\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(binding.Initializers);\n\n            if (initializers != binding.Initializers)\n            {\n                return Expression.ListBind(binding.Member, initializers);\n            }\n\n            return binding;\n        }\n\n        protected virtual IEnumerable<MemberBinding> VisitBindingList(ReadOnlyCollection<MemberBinding> original)\n        {\n            List<MemberBinding> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                MemberBinding b = this.VisitBinding(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(b);\n                }\n                else if (b != original[i])\n                {\n                    list = new List<MemberBinding>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(b);\n                }\n            }\n\n            if (list != null)\n                return list;\n\n            return original;\n        }\n\n        protected virtual IEnumerable<ElementInit> VisitElementInitializerList(ReadOnlyCollection<ElementInit> original)\n        {\n            List<ElementInit> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                ElementInit init = this.VisitElementInitializer(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(init);\n                }\n                else if (init != original[i])\n                {\n                    list = new List<ElementInit>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(init);\n                }\n            }\n\n            if (list != null)\n                return list;\n\n            return original;\n        }\n\n        protected virtual Expression VisitLambda(LambdaExpression lambda)\n        {\n            Expression body = this.Visit(lambda.Body);\n\n            if (body != lambda.Body)\n            {\n                return Expression.Lambda(lambda.Type, body, lambda.Parameters);\n            }\n\n            return lambda;\n        }\n\n        protected virtual NewExpression VisitNew(NewExpression nex)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(nex.Arguments);\n\n            if (args != nex.Arguments)\n            {\n                if (nex.Members != null)\n                    return Expression.New(nex.Constructor, args, nex.Members);\n                else\n                    return Expression.New(nex.Constructor, args);\n            }\n\n            return nex;\n        }\n\n        protected virtual Expression VisitMemberInit(MemberInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(init.Bindings);\n\n            if (n != init.NewExpression || bindings != init.Bindings)\n            {\n                return Expression.MemberInit(n, bindings);\n            }\n\n            return init;\n        }\n\n        protected virtual Expression VisitListInit(ListInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(init.Initializers);\n\n            if (n != init.NewExpression || initializers != init.Initializers)\n            {\n                return Expression.ListInit(n, initializers);\n            }\n\n            return init;\n        }\n\n        protected virtual Expression VisitNewArray(NewArrayExpression na)\n        {\n            IEnumerable<Expression> exprs = this.VisitExpressionList(na.Expressions);\n\n            if (exprs != na.Expressions)\n            {\n                if (na.NodeType == ExpressionType.NewArrayInit)\n                {\n                    return Expression.NewArrayInit(na.Type.GetElementType(), exprs);\n                }\n                else\n                {\n                    return Expression.NewArrayBounds(na.Type.GetElementType(), exprs);\n                }\n            }\n\n            return na;\n        }\n\n        protected virtual Expression VisitInvocation(InvocationExpression iv)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(iv.Arguments);\n            Expression expr = this.Visit(iv.Expression);\n\n            if (args != iv.Arguments || expr != iv.Expression)\n            {\n                return Expression.Invoke(expr, args);\n            }\n\n            return iv;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/IDList.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with lists of IDs\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class IDList\n    {\n        public IDList() { }\n        public IDList(JsonData idJson)\n        {\n            if (idJson == null) return;\n\n            CursorMovement = new Cursors(idJson);\n            var ids = idJson.GetValue<JsonData>(\"ids\");\n            IDs =\n                (from JsonData id in ids\n                 select (ulong)id)\n                .ToList();\n        }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of IDs returned\n        /// </summary>\n        public List<ulong> IDs { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/IRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public interface IRequestProcessor<T>\n    {\n        string BaseUrl { get; set; }\n        Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression);\n        Request BuildUrl(Dictionary<string, string> expressionParameters);\n        List<T> ProcessResults(string twitterResponse);\n    }\n\n    // temporary marker interface used to communicate that this\n    // request processor wants native JSON objects.\n    public interface IRequestProcessorWantsJson\n    {\n    }\n\n    // Declare that this request processor knows how to handle action\n    // responses, implies the request processor also wants native JSON objects.\n    public interface IRequestProcessorWithAction<T>\n        : IRequestProcessorWantsJson\n    {\n        T ProcessActionResult(string twitterResponse, Enum theAction);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/InvalidQueryException.cs",
    "content": "﻿/*****************************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 5/2/09 -\n * \n * ReTestMethodored as standard exception: \n * \n *      - derives from Application\n *      - has standard exception constructors\n *      - beyond the type name, it looks nothing like the original\n *****************************************************************/\nusing System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// custom exception for handling bad queries\n    /// </summary>\n    public class InvalidQueryException : Exception\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public InvalidQueryException()\n            : this(\"Invalid query: reason not specified.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public InvalidQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public InvalidQueryException(string message, Exception inner)\n            : base(message, inner) { }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/LinqExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class LinqExtensions\n    {\n        /// <summary>\n        /// Takes a single element and returns an IEnumerable of just that element.\n        /// </summary>\n        /// <typeparam name=\"T\">What kind of element we're enumerating</typeparam>\n        /// <param name=\"oneOff\">The one element in the resulting enumeration</param>\n        /// <returns>An IEnumerable that has one element (consisting of the oneOff parameter)</returns>\n        public static IEnumerable<T> ToEnumerable<T>(this T oneOff)\n        {\n            yield return oneOff;\n        }\n\n        public static TTo ItemCast<TFrom, TTo>(this TFrom item, TTo defaultValue)\n            where TTo: class\n        {\n            if (item is TTo)\n                return item as TTo;\n            else\n                return defaultValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/MethodCallExpressionTypeFinder.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Common\n{\n    internal class MethodCallExpressionTypeFinder : ExpressionVisitor\n    {\n        private Type genericType;\n\n        /// <summary>\n        /// Gets the underlying type of the whole method call expression\n        /// </summary>\n        /// <param name=\"exp\">MethodCallExpression</param>\n        /// <returns>Type</returns>\n        public Type GetGenericType(Expression exp)\n        {\n            Visit(exp);\n            return genericType;\n        }\n\n\n        /// <summary>\n        /// Sets the expression type when found\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (expression.Arguments.Count > 0)\n                genericType = expression.Method.GetGenericArguments()[0];\n\n            // look at extension source to see if there is an inner type\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/ParameterFinder.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// extracts parameters from an expression\n    /// - called for extracting parameters and values on where clauses\n    /// </summary>\n    /// <typeparam name=\"T\">type to get parameters for</typeparam>\n    internal class ParameterFinder<T> : ExpressionVisitor\n    {\n        /// <summary>\n        /// expression being searched\n        /// </summary>\n        private readonly Expression expression;\n\n        /// <summary>\n        /// parameters to search for\n        /// </summary>\n        private Dictionary<string, string> parameters;\n\n        /// <summary>\n        /// keep track of expression and parameter list\n        /// </summary>\n        /// <param name=\"exp\">expression to search</param>\n        /// <param name=\"parameters\">parameters to search for</param>\n        public ParameterFinder(Expression exp, List<string> parameters)\n        {\n            expression = exp;\n            ParameterNames = parameters;\n        }\n\n        /// <summary>\n        /// name/value pairs of parameters and their values\n        /// </summary>\n        public Dictionary<string, string> Parameters\n        {\n            get\n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    Visit(expression);\n                }\n                return parameters;\n            }\n        }\n\n        /// <summary>\n        /// names of input parameters\n        /// </summary>\n        public List<string> ParameterNames { get; set; }\n\n        /// <summary>\n        /// extracts values from equality expressions that match parameter names\n        /// </summary>\n        /// <param name=\"be\">binary expression to evaluate</param>\n        /// <returns>binary expression - supports recursive tree traversal in visitor</returns>\n        protected override Expression VisitBinary(BinaryExpression be)\n        {\n            if (be.NodeType == ExpressionType.Equal || \n                be.NodeType == ExpressionType.GreaterThan ||\n                be.NodeType == ExpressionType.GreaterThanOrEqual ||\n                be.NodeType == ExpressionType.LessThan ||\n                be.NodeType == ExpressionType.LessThanOrEqual ||\n                be.NodeType == ExpressionType.NotEqual)\n            {\n                foreach (var param in ParameterNames)\n                {\n                    if (ExpressionTreeHelpers.IsMemberEqualsValueExpression(be, typeof(T), param))\n                    {\n                        parameters.Add(param, ExpressionTreeHelpers.GetValueFromEqualsExpression(be, typeof(T), param));\n                        return be;\n                    }\n                }\n\n                return base.VisitBinary(be);\n            }\n            else\n                return base.VisitBinary(be);\n        }\n\n        protected override Expression VisitMethodCall(MethodCallExpression me)\n        {\n\n            foreach (var param in ParameterNames)\n            {\n                if (me.Method.Name == \"CompareString\" && (me.Arguments[0] as MemberExpression).Member.Name == param)\n                {\n                    parameters.Add(param, (me.Arguments[1] as ConstantExpression).Value.ToString());\n                    return me;\n                } \n            }\n\n            return base.VisitMethodCall(me);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/QueryParameter.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Provides an structure to hold the query parameters\n    /// </summary>\n    public class QueryParameter : IComparable<QueryParameter>, IComparable\n    {\n        private readonly string name = null;\n        private string value = null;\n\n        public QueryParameter(string name, string value)\n        {\n            this.name = name;\n            this.value = value;\n        }\n\n        public string Name\n        {\n            get { return name; }\n        }\n\n        public string Value\n        {\n            get { return value; }\n            internal set { this.value = value; }\n        }\n\n        public int CompareTo(object obj)\n        {\n            if (Object.ReferenceEquals(obj, null))\n                return Object.ReferenceEquals(this, null) ? 0 : 1;\n\n            var other = obj as QueryParameter;\n            return CompareTo(other);\n        }\n\n        public int CompareTo(QueryParameter other)\n        {\n            return defaultComparer.Compare(this, other);\n        }\n\n        public static IComparer<QueryParameter> defaultComparer = new QueryParameterComparer();\n    }\n\n    /// <summary>\n    /// Comparer class used to perform the sorting of the query parameters\n    /// </summary>\n    public class QueryParameterComparer : IComparer<QueryParameter>\n    {\n        public int Compare(QueryParameter x, QueryParameter y)\n        {\n            if (x.Name.Equals(y.Name))\n            {\n                return string.Compare(x.Value, y.Value);\n            }\n            else\n            {\n                return string.Compare(x.Name, y.Name);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Request.cs",
    "content": "using System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public class Request\n    {\n        public string Endpoint { get; set; }\n        public IList<QueryParameter> RequestParameters { get; internal set; }\n\n        public string QueryString\n        {\n            get\n            {\n                return Utilities.BuildQueryString(RequestParameters);\n            }\n        }\n\n        public string FullUrl\n        {\n            get\n            {\n                var queryString = this.QueryString;\n\n                if (queryString.Length > 0)\n                    return Endpoint + \"?\" + QueryString;\n                else return Endpoint;\n            }\n        }\n\n        public Request(string endpoint)\n        {\n            this.Endpoint = endpoint;\n            this.RequestParameters = new List<QueryParameter>();\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/RequestProcessorHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// reusable methods for all request processors\n    /// </summary>\n    internal class RequestProcessorHelper\n    {\n        /// <summary>\n        /// All queries have an enum type that specifies the query sub-type;\n        /// This method determines if the type parameter parsed is a string\n        /// or int and performs the conversion to the enum type.\n        /// </summary>\n        /// <remarks>\n        /// Delphi enums come to the IRequestProcessor as pneumonic strings,\n        /// but C# enums arrive as the underlying int type of the enum;\n        /// therefore, we must determine what we're working with to succeed.\n        /// </remarks>\n        /// <typeparam name=\"T\">Enum type to convert to</typeparam>\n        /// <param name=\"queryType\">\n        /// Either a string enum member name (from Delphi Prism)\n        /// or an underlying int value (from C#/VB)\n        /// </param>\n        /// <returns>Requested enum type</returns>\n        internal static T ParseQueryEnumType<T>(string queryType)\n        {\n            T statusType;\n\n            if (queryType.GetType() == typeof(string))\n            {\n                statusType = (T)Enum.Parse(typeof(T), queryType, /*ignoreCase:*/ true);\n            }\n            else\n            {\n                statusType = (T)Enum.ToObject(typeof(T), int.Parse(queryType));\n            }\n\n            return statusType;\n        }\n\n        /// <summary>\n        /// Determines if a parameter is true\n        /// </summary>\n        /// <param name=\"parameters\">Name/Value list of parameters</param>\n        /// <param name=\"key\">Name of parameter to check.</param>\n        /// <returns>Boolean value of parameter (false if value is false or not bool)</returns>\n        internal static bool FlagTrue(IDictionary<string, string> parameters, string key)\n        {\n            bool flag;\n\n            if (!bool.TryParse(parameters[key], out flag))\n                flag = false;\n\n            return flag;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TwitterAsyncResponse.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response info from an asynchronous Twitter request\n    /// </summary>\n    public class TwitterAsyncResponse<TState>\n    {\n        public TwitterAsyncResponse()\n        {\n            Status = TwitterErrorStatus.Success;\n            Message = \"Your request succeeded. Error property is null.\";\n        }\n\n        /// <summary>\n        /// You can check this value in the callback to\n        /// see if the request succeeded or failed\n        /// </summary>\n        public TwitterErrorStatus Status { get; set; }\n\n        /// <summary>\n        /// Additional info, specific to Status\n        /// </summary>\n        public string Message { get; set; }\n\n        /// <summary>\n        /// Will contain Exception if there was an error\n        /// </summary>\n        public Exception Exception { get; set; }\n\n        /// <summary>\n        /// Request specific info\n        /// </summary>\n        public TState State { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TwitterErrorStatus.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of result from processing an \n    /// asynchronous request to Twitter\n    /// </summary>\n    public enum TwitterErrorStatus\n    {\n        /// <summary>\n        /// No error\n        /// </summary>\n        Success,\n\n        /// <summary>\n        /// Error received from Twitter\n        /// </summary>\n        TwitterApiError,\n\n        /// <summary>\n        /// Error detected by LINQ to Twitter\n        /// while processing request\n        /// </summary>\n        RequestProcessingException,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TwitterHashResponse.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Response for HTTP errors and end response\n    /// </summary>\n    public class TwitterHashResponse\n    {\n        /// <summary>\n        /// URL action from request\n        /// </summary>\n        public string Request { get; set; }\n\n        /// <summary>\n        /// Response message\n        /// </summary>\n        public string Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TwitterProgressEventArgs.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Lets caller know the percentage of completion of operation\n    /// </summary>\n    public class TwitterProgressEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Percentage of completion\n        /// </summary>\n        public int PercentComplete { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TwitterQueryException.cs",
    "content": "﻿using System;\nusing System.Net;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Use for errors returned from HTTP GET and POST to Twitter\n    /// </summary>\n    public class TwitterQueryException : InvalidQueryException\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public TwitterQueryException()\n            : this(\"Twitter returned an error from your query.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public TwitterQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public TwitterQueryException(string message, Exception inner)\n            : base(message, inner) { }\n\n        /// <summary>\n        /// Error code assigned by Twitter\n        /// </summary>\n        public int ErrorCode { get; set; }\n\n        /// <summary>\n        /// Http status code from Twitter response\n        /// </summary>\n        public HttpStatusCode StatusCode { get; set; }\n\n        /// <summary>\n        /// Http status reason from Twitter response\n        /// </summary>\n        public string ReasonPhrase { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TypeConversionExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Collections.Generic;\n\nusing LitJson;\n\nnamespace LinqToTwitter.Common\n{\n    public static class TypeConversionExtensions\n    {\n\n        public static ulong GetULong(this string val, ulong defaultValue /* = 0*/)\n        {\n            ulong result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !ulong.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this string val, double defaultValue /* = 0*/)\n        {\n            double result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !double.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        private static readonly string[] dateFormats = { \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n                                                         \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n                                                         \"yyyy-MM-dd HH:mm:ss\",\n                                                         \"yyyy-MM-dd HH:mm\"};\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            DateTime result;\n\n            return String.IsNullOrWhiteSpace(date) ||\n                !DateTime.TryParseExact(date,\n                        dateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string date, DateTime defaultValue)\n        {\n            var epochSeconds = date.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n            \n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value))\n                return (T)value;\n\n            return default(T);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key, T defaultValue)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value))\n                return (T)value;\n            \n            return defaultValue;\n        }\n\n        public static T GetValue<T>(this JsonData data, string key)\n        {\n            return GetValue(data, key, default(T));\n        }\n\n        public static T GetValue<T>(this JsonData data, string key, T defaultValue)\n        {\n            object value = defaultValue;\n            if (data != null && data.InstObject != null && \n                data.InstObject.ContainsKey(key) && data.InstObject[key] != null)\n            {\n                var dataItem = data.InstObject[key] as IJsonWrapper;\n\n                string type = typeof (T).Name;\n                switch (type)\n                {\n                    case \"String\":\n                        value = dataItem.GetString();\n                        break;\n                    case \"Int32\":\n                        value = dataItem.GetInt();\n                        break;\n                    case \"Int64\":\n                        value = dataItem.GetLong();\n                        break;\n                    case \"Double\":\n                        value = dataItem.GetDouble();\n                        break;\n                    case \"Boolean\":\n                        value = dataItem.GetBoolean();\n                        break;\n                    case \"Decimal\":\n                        value = dataItem.GetDecimal();\n                        break;\n                    case \"UInt64\":\n                        value = dataItem.GetUlong();\n                        break;\n                    case \"JsonData\":\n                        value = data.InstObject[key];\n                        break;\n                    case \"Nullable`1\":\n                        if (typeof(T) == typeof(int?) && dataItem.IsInt) { value = dataItem.GetInt(); break; }\n                        if (typeof(T) == typeof(long?) && dataItem.IsLong) { value = dataItem.GetLong(); break; }\n                        if (typeof(T) == typeof(double?) && dataItem.IsDouble) { value = dataItem.GetDouble(); break; }\n                        if (typeof(T) == typeof(bool?) && dataItem.IsBoolean) { value = dataItem.GetBoolean(); break; }\n                        if (typeof(T) == typeof(decimal?) && dataItem.IsDecimal) { value = dataItem.GetDecimal(); break; }\n                        if (typeof(T) == typeof(ulong?) && dataItem.IsULong) { value = dataItem.GetUlong(); break; }\n                        break;\n                }\n            }\n\n            return (T)value;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/TypeSystem.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace LinqToTwitter\n{\n    internal static class TypeSystem\n    {\n//#if NETFX_CORE\n        internal static Type GetElementType(Type seqType)\n        {\n            Type ienum = FindIEnumerable(seqType);\n            if (ienum == null) return seqType;\n            return ienum.GenericTypeArguments[0];\n        }\n\n        private static Type FindIEnumerable(Type seqType)\n        {\n            TypeInfo seqTypeInfo = seqType.GetTypeInfo();\n            if (seqType == null || seqType == typeof(string))\n                return null;\n\n            if (seqTypeInfo.IsArray)\n                return typeof(IEnumerable<>).MakeGenericType(seqTypeInfo.GetElementType());\n\n            if (seqTypeInfo.IsGenericType)\n            {\n                foreach (Type arg in seqTypeInfo.GenericTypeArguments)\n                {\n                    Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n                    if (ienum.GetTypeInfo().IsAssignableFrom(seqTypeInfo))\n                    {\n                        return ienum;\n                    }\n                }\n            }\n\n            Type[] ifaces = seqTypeInfo.ImplementedInterfaces.ToArray();\n            if (ifaces != null && ifaces.Length > 0)\n            {\n                foreach (Type iface in ifaces)\n                {\n                    Type ienum = FindIEnumerable(iface);\n                    if (ienum != null) return ienum;\n                }\n            }\n\n            if (seqTypeInfo.BaseType != null && seqTypeInfo.BaseType != typeof(object))\n            {\n                return FindIEnumerable(seqTypeInfo.BaseType);\n            }\n\n            return null;\n        }\n//#else\n//        internal static Type GetElementType(Type seqType)\n//        {\n//            Type ienum = FindIEnumerable(seqType);\n//            if (ienum == null) return seqType;\n//            return ienum.GetGenericArguments()[0];\n//        }\n\n//        private static Type FindIEnumerable(Type seqType)\n//        {\n//            if (seqType == null || seqType == typeof(string))\n//                return null;\n\n//            if (seqType.IsArray)\n//                return typeof(IEnumerable<>).MakeGenericType(seqType.GetElementType());\n\n//            if (seqType.IsGenericType)\n//            {\n//                foreach (Type arg in seqType.GetGenericArguments())\n//                {\n//                    Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n//                    if (ienum.IsAssignableFrom(seqType))\n//                    {\n//                        return ienum;\n//                    }\n//                }\n//            }\n\n//            Type[] ifaces = seqType.GetInterfaces();\n//            if (ifaces != null && ifaces.Length > 0)\n//            {\n//                foreach (Type iface in ifaces)\n//                {\n//                    Type ienum = FindIEnumerable(iface);\n//                    if (ienum != null) return ienum;\n//                }\n//            }\n\n//            if (seqType.BaseType != null && seqType.BaseType != typeof(object))\n//            {\n//                return FindIEnumerable(seqType.BaseType);\n//            }\n\n//            return null;\n//        }\n//#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/Utilities.cs",
    "content": "﻿//-----------------------------------------------------------------------\n// <copyright file=\"Utilities.cs\">\n//     Copyright (c) Andrew Arnott. All rights reserved.\n// </copyright>\n// <license>\n//     Microsoft Public License (Ms-PL http://opensource.org/licenses/ms-pl.html).\n//     Contributors may add their own copyright notice above.\n// </license>\n//-----------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing LinqToTwitter.Net;\n\nnamespace LinqToTwitter\n{\n    public static class Utilities\n    {\n        ///// <summary>\n        ///// Encapsulates GetResponse so tests don't invoke the request\n        ///// </summary>\n        ///// <param name=\"req\">Request to Twitter</param>\n        ///// <returns>Response to Twitter</returns>\n        //public static HttpWebResponse AsyncGetResponse(HttpWebRequest req)\n        //{\n        //    Exception asyncException = null;\n\n        //    var resetEvent = new ManualResetEvent(/*initialStateSignaled:*/ false);\n        //    HttpWebResponse res = null;\n\n        //    req.BeginGetResponse(\n        //        new AsyncCallback(\n        //            ar =>\n        //            {\n        //                try\n        //                {\n        //                    res = req.EndGetResponse(ar) as HttpWebResponse;\n        //                }\n        //                catch (Exception ex)\n        //                {\n        //                    asyncException = ex;\n        //                }\n        //                finally\n        //                {\n        //                    resetEvent.Set();\n        //                }\n        //            }), null);\n\n        //    resetEvent.WaitOne();\n\n        //    if (asyncException != null)\n        //    {\n        //        throw asyncException;\n        //    }\n\n        //    return res;\n        //}\n\n        ///// <summary>\n        ///// Reads the web response stream into a string.\n        ///// </summary>\n        ///// <param name=\"resp\">The response to read</param>\n        ///// <returns>a string containing the entire web response body</returns>\n        //public static string ReadReponse(this WebResponse resp)\n        //{\n        //    if (resp == null)\n        //        return null;\n\n        //    using (var respStream = resp.GetResponseStream())\n        //    using (var respReader = new StreamReader(respStream))\n        //    {\n        //        var responseBody = respReader.ReadToEnd();\n        //        return responseBody;\n        //    }\n        //}\n\n        /// <summary>\n        /// Assembles a series of key=value pairs as a URI-escaped query-string.\n        /// </summary>\n        /// <param name=\"parameters\">The parameters to include.</param>\n        /// <returns>A query-string-like value such as a=b&c=d.  Does not include a leading question mark (?).</returns>\n        public static string BuildQueryString(IEnumerable<QueryParameter> parameters)\n        {\n            if (parameters == null)\n                throw new ArgumentNullException(\"parameters\");\n\n            StringBuilder builder = new StringBuilder();\n            foreach (var pair in parameters.Where(p => !string.IsNullOrWhiteSpace(p.Value)))\n            {\n                builder.Append(Url.PercentEncode(pair.Name));\n                builder.Append('=');\n                builder.Append(Url.PercentEncode(pair.Value));\n                builder.Append('&');\n            }\n\n            if (builder.Length > 1)\n                builder.Length--;   // truncate trailing &\n\n            return builder.ToString();\n        }\n\n//#if !NETFX_CORE\n//        /// <summary>\n//        /// Reads a file into a byte array\n//        /// </summary>\n//        /// <param name=\"filePath\">Full path of file to read.</param>\n//        /// <returns>Byte array with file contents.</returns>\n//        public static byte[] GetFileBytes(string filePath)\n//        {\n//            byte[] fileBytes = null;\n\n//            using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))\n//            using (var memStr = new MemoryStream())\n//            {\n//                byte[] buffer = new byte[4096];\n//                memStr.Position = 0;\n//                int bytesRead = 0;\n\n//                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)\n//                {\n//                    memStr.Write(buffer, 0, bytesRead);\n//                }\n\n//                memStr.Position = 0;\n//                fileBytes = memStr.GetBuffer();\n//            }\n\n//            return fileBytes;\n//        } \n//#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Common/WhereClauseFinder.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// finds where clauses in the expression tree\n    /// </summary>\n    internal class WhereClauseFinder : ExpressionVisitor\n    {\n        static readonly string[] WhereMethodNames = { \"Where\", \"Single\", \"SingleOrDefault\", \"First\", \"FirstOrDefault\" };\n\n        // holds all where expressions\n        readonly List<MethodCallExpression> whereExpressions = new List<MethodCallExpression>();\n\n        /// <summary>\n        /// searches expression tree for wheres and returns collection of all it finds.\n        /// </summary>\n        /// <param name=\"expression\">query expression to search.</param>\n        /// <returns>collection of where expressions.</returns>\n        public MethodCallExpression[] GetAllWheres(Expression expression)\n        {\n            Visit(expression);\n            return whereExpressions.ToArray();\n        }\n\n        /// <summary>\n        /// custom processing of MethodCallExpression NodeType that checks for a\n        /// where clause and retains expression as member of list of where clauses.\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (WhereMethodNames.Contains(expression.Method.Name) && expression.Arguments.Count == 2)\n            {\n                whereExpressions.Add(expression);\n            }\n\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/DirectMessage/DirectMessage.cs",
    "content": "﻿using System;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Direct message elements contain a set of values that describe a message.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class DirectMessage\n    {\n        public DirectMessage() { }\n        public DirectMessage(JsonData dmJson)\n        {\n            CreatedAt = dmJson.GetValue<string>(\"created_at\").GetDate(DateTime.MinValue);\n            SenderID = dmJson.GetValue<ulong>(\"sender_id\");\n            SenderScreenName = dmJson.GetValue<string>(\"sender_screen_name\");\n            Sender = new User(dmJson.GetValue<JsonData>(\"sender\"));\n            RecipientID = dmJson.GetValue<ulong>(\"recipient_id\");\n            RecipientScreenName = dmJson.GetValue<string>(\"recipient_screen_name\");\n            Recipient = new User(dmJson.GetValue<JsonData>(\"recipient\"));\n            IDResponse = dmJson.GetValue<ulong>(\"id\");\n            IDString = dmJson.GetValue<string>(\"id_str\");\n            Text = dmJson.GetValue<string>(\"text\");\n            Entities = new Entities(dmJson.GetValue<JsonData>(\"entities\"));\n        }\n\n        public DirectMessageType Type { get; set; }\n\n        /// <summary>\n        /// Direct Message ID input\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Direct Message ID Returned from Twitter\n        /// </summary>\n        public ulong IDResponse { get; set; }\n\n        /// <summary>\n        /// Direct Message ID in string format from JSON\n        /// </summary>\n        /// <remarks>>\n        /// Twitter added this to the API because of the possibility that the real ID in ulong format wasn't accurate\n        /// </remarks>\n        public string IDString { get; set; }\n\n        /// <summary>\n        /// User ID of sender\n        /// </summary>\n        public ulong SenderID { get; set; }\n\n        /// <summary>\n        /// since this message ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to return\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// page number to return\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// number of items to return (works for SentBy and SentTo\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Set to true to not include statuses\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// DM Text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// User ID of Recipient\n        /// </summary>\n        public ulong RecipientID { get; set; }\n\n        /// <summary>\n        /// When DM was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// ScreenName of Sender\n        /// </summary>\n        public string SenderScreenName { get; set; }\n\n        /// <summary>\n        /// ScreenName of Recipient\n        /// </summary>\n        public string RecipientScreenName { get; set; }\n\n        /// <summary>\n        /// User object for sender\n        /// </summary>\n        public User Sender { get; set; }\n\n        /// <summary>\n        /// User object for recipient\n        /// </summary>\n        public User Recipient { get; set; }\n\n        /// <summary>\n        /// Entities withing this DM\n        /// </summary>\n        public Entities Entities { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/DirectMessage/DirectMessageRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class DirectMessageRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Direct Message\n        /// </summary>\n        internal DirectMessageType Type { get; set; }\n\n        /// <summary>\n        /// since this message ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to return\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// page number to return\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// number of items to return (works for SentBy and SentTo\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// ID of DM\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// Include entities in tweets\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<DirectMessage>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"Page\",\n                       \"Count\",\n                       \"ID\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<DirectMessageType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case DirectMessageType.SentBy:\n                    return BuildSentByUrl(parameters);\n                case DirectMessageType.SentTo:\n                    return BuildSentToUrl(parameters);\n                case DirectMessageType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            const string IdParam = \"ID\";\n            if (parameters == null || !parameters.ContainsKey(IdParam))\n                throw new ArgumentNullException(IdParam, \"ID is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/show.json\");\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[IdParam]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct message sent to a user\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildSentToUrl(Dictionary<string, string> parameters)\n        {\n            return BuildSentUrlParameters(parameters, \"direct_messages.json\");\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct message sent by a user\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildSentByUrl(Dictionary<string, string> parameters)\n        {\n            return BuildSentUrlParameters(parameters, \"direct_messages/sent.json\");\n        }\n\n        /// <summary>\n        /// Common code for building parameter list for both sent by and sent to urls.\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <param name=\"url\">url to start with</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildSentUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", MaxID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", Page.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            var dmJson = JsonMapper.ToObject(responseJson);\n\n            IEnumerable<DirectMessage> dmList;\n\n            switch (Type)\n            {\n                case DirectMessageType.SentBy:\n                case DirectMessageType.SentTo:\n                    dmList = HandleMultipleDirectMessages(dmJson);\n                    break;\n                case DirectMessageType.Show:\n                    dmList = HandleSingleDirectMessage(dmJson);\n                    break;\n                default:\n                    dmList = new List<DirectMessage>();\n                    break;\n            }\n\n            return dmList.OfType<T>().ToList();\n        }\n  \n        IEnumerable<DirectMessage> HandleMultipleDirectMessages(JsonData dmJson)\n        {\n            var dmList =\n                from JsonData dm in dmJson\n                select new DirectMessage(dm)\n                {\n                    Type = Type,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    Page = Page,\n                    Count = Count,\n                    ID = ID,\n                    IncludeEntities = IncludeEntities,\n                    SkipStatus = SkipStatus\n                };\n\n            return dmList;\n        }\n\n        IEnumerable<DirectMessage> HandleSingleDirectMessage(JsonData dmJson)\n        {\n            return new List<DirectMessage> \n            { \n                new DirectMessage(dmJson) \n                {\n                    Type = Type,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    Page = Page,\n                    Count = Count,\n                    ID = ID,\n                    IncludeEntities = IncludeEntities,\n                    SkipStatus = SkipStatus\n                }\n            };\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData dmJson = JsonMapper.ToObject(responseJson);\n\n            var dm = new DirectMessage(dmJson);\n\n            return dm.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/DirectMessage/DirectMessageType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of direct message query\n    /// </summary>\n    public enum DirectMessageType\n    {\n        /// <summary>\n        /// direct messages sent by a user\n        /// </summary>\n        SentBy,\n\n        /// <summary>\n        /// direct messages sent to a user\n        /// </summary>\n        SentTo,\n\n        /// <summary>\n        /// get a single direct message\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/DirectMessage/TwitterContextDirectMessageCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Sends a new direct message to specified user.\n        /// </summary>\n        /// <param name=\"screenName\">ScreenName of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <returns>Direct message element.</returns>\n        public async Task<DirectMessage> NewDirectMessageAsync(string screenName, string text, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException(\"text is a required parameter.\", \"text\");\n\n            var newUrl = BaseUrl + \"direct_messages/new.json\";\n\n            var reqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<DirectMessage>(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"screen_name\", screenName},\n                        {\"text\", text}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, DirectMessageType.Show);\n        }\n\n        /// <summary>\n        /// Sends a new direct message to specified user.\n        /// </summary>\n        /// <param name=\"userID\">User ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <returns>Direct message element.</returns>\n        public async Task<DirectMessage> NewDirectMessageAsync(ulong userID, string text, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID must be set.\", \"userID\");\n\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException(\"text is a required parameter.\", \"text\");\n\n            var newUrl = BaseUrl + \"direct_messages/new.json\";\n\n            var reqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<DirectMessage>(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"user_id\", userID.ToString()},\n                        {\"text\", text}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, DirectMessageType.Show);\n        }\n\n        /// <summary>\n        /// Deletes a direct message.\n        /// </summary>\n        /// <param name=\"id\">id of direct message</param>\n        /// <param name=\"includeEntites\">Set to false to prevent entities from being included (default: true).</param>\n        /// <returns>direct message element</returns>\n        public async Task<DirectMessage> DestroyDirectMessageAsync(ulong id, bool includeEntites, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentNullException(\"id\", \"id is required.\");\n\n            var destroyUrl = BaseUrl + \"direct_messages/destroy.json\";\n\n            var reqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<DirectMessage>(\n                    destroyUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntites.ToString().ToLower()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, DirectMessageType.Show);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Favorites/Favorites.cs",
    "content": "﻿using System.Xml.Serialization;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter favorites info\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Favorites : Status\n    {\n        public Favorites() { }\n\n        public Favorites(JsonData favJson) : base(favJson) { }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        [XmlIgnore]\n        public new FavoritesType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new string ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new bool IncludeEntities { get; set; }\n\n        //\n        // The following types support XML serialization\n        //\n\n        [XmlIgnore]\n        FavoritesType type;\n        [XmlAttribute(AttributeName = \"Type\")]\n        FavoritesType TypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlIgnore]\n        ulong userID;\n        [XmlAttribute(AttributeName=\"UserID\")]\n        public ulong UserIDXml\n        {\n            get { return userID; }\n            set { userID = value; }\n        }\n\n        [XmlIgnore]\n        string screenName;\n        [XmlAttribute(AttributeName=\"ScreenName\")]\n        public string ScreenNameXml\n        {\n            get { return screenName; }\n            set { screenName = value; }\n        }\n\n        [XmlIgnore]\n        int count;\n        [XmlAttribute(AttributeName=\"Count\")]\n        public int CountXml\n        {\n            get { return count; }\n            set { count = value; }\n        }\n\n        [XmlIgnore]\n        ulong sinceID;\n        [XmlAttribute(AttributeName=\"SinceID\")]\n        public ulong SinceIDXml\n        {\n            get { return sinceID; }\n            set { sinceID = value; }\n        }\n\n        [XmlIgnore]\n        ulong maxID;\n        [XmlAttribute(AttributeName=\"MaxID\")]\n        public ulong MaxIDXml\n        {\n            get { return maxID; }\n            set { maxID = value; }\n        }\n        \n        [XmlIgnore]\n        bool includeEntities;\n        [XmlAttribute(AttributeName=\"IncludeEntities\")]\n        public bool IncludeEntitiesXml\n        {\n            get { return includeEntities; }\n            set { includeEntities = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Favorites/FavoritesAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FavoritesAction\n    {\n        SingleStatus\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Favorites/FavoritesRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Manages request processing for favorites\n    /// </summary>\n    public class FavoritesRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        internal FavoritesType Type { get; set; }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Favorites>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Count\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"IncludeEntities\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            const string ParamsParam = \"parameters\";\n\n            if (parameters == null)\n                throw new ArgumentException(\"You must pass a \\\"parameters\\\" Dictionary<string, string> parameter.\", ParamsParam);\n\n            if (!parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<FavoritesType>(parameters[\"Type\"]);\n\n            return BuildFavoritesUrlParameters(parameters);\n        }\n\n        /// <summary>\n        /// appends parameters for Favorites request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildFavoritesUrlParameters(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"favorites/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n\n        /// <summary>\n        /// transforms Twitter response into list of Favorites\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of Favorite</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData favoritesJson = JsonMapper.ToObject(responseJson);\n\n            var statusList =\n                from JsonData favJson in favoritesJson\n                select new Favorites(favJson)\n                {\n                    Type = Type,\n                    UserID = UserID,\n                    ScreenName = ScreenName,\n                    Count = Count,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    IncludeEntities = IncludeEntities\n                };\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            var status = new Status(statusJson);\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Favorites/FavoritesType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of favorites queries\n    /// </summary>\n    public enum FavoritesType\n    {\n        /// <summary>\n        /// Get favorites list for user\n        /// </summary>\n        Favorites\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Favorites/TwitterContextFavoritesCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> CreateFavoriteAsync(ulong id)\n        {\n            return await CreateFavoriteAsync(id, true).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> CreateFavoriteAsync(ulong id, bool includeEntities, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n\n            var favoritesUrl = BaseUrl + \"favorites/create.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<Status>(\n                    favoritesUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FavoritesAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> DestroyFavoriteAsync(ulong id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DestroyFavoriteAsync(id, true, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> DestroyFavoriteAsync(ulong id, bool includeEntities, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n\n            var favoritesUrl = BaseUrl + \"favorites/destroy.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<Status>(\n                    favoritesUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FavoritesAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Friendship/Friendship.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// parameters for freindship actions\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Friendship\n    {\n        public const ulong UserIDNotIncluded = 0;\n        public const string ScreenNameNotIncluded = null;\n\n        public Friendship() { }\n        public Friendship(JsonData friendJson)\n        {\n            if (friendJson == null) return;\n\n            TargetRelationship = new Relationship(friendJson.GetValue<JsonData>(\"target\"));\n            SourceRelationship = new Relationship(friendJson.GetValue<JsonData>(\"source\"));\n        }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        public FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user (Show query)\n        /// </summary>\n        public ulong SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user (Show query)\n        /// </summary>\n        public string SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user (Show query)\n        /// </summary>\n        public ulong TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user (Show query)\n        /// </summary>\n        public string TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names for Lookup query\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs for Lookup query\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        [Obsolete(\"Please use IncludeUserEntities instead.\")]\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// info on friend\n        /// </summary>\n        public User Friend { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the source (Show query)\n        /// </summary>\n        public Relationship SourceRelationship { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the target (Show query)\n        /// </summary>\n        public Relationship TargetRelationship { get; set; }\n\n        /// <summary>\n        /// List of ids returned by Incoming and Outgoing queries\n        /// </summary>\n        public IDList IDInfo { get; set; }\n\n        /// <summary>\n        /// List of relationships from Lookup query\n        /// </summary>\n        public List<Relationship> Relationships { get; set; }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of User that are friends or followers, depending on type of query\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Friendship/FriendshipAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FriendshipAction\n    {\n        Create,\n        Destroy,\n        Update\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Friendship/FriendshipRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Friendship queries\n    /// </summary>\n    class FriendshipRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        internal FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user\n        /// </summary>\n        internal ulong SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user\n        /// </summary>\n        internal string SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user\n        /// </summary>\n        internal ulong TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user\n        /// </summary>\n        internal string TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of names for lookup\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs to lookup\n        /// </summary>\n        internal string UserID { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        internal bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Friendship>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SourceUserID\",\n                       \"SourceScreenName\",\n                       \"TargetUserID\",\n                       \"TargetScreenName\",\n                       \"Cursor\",\n                       \"ScreenName\",\n                       \"UserID\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"Count\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<FriendshipType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case FriendshipType.Incoming:\n                    return BuildFriendshipIncomingUrl(parameters);\n                case FriendshipType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case FriendshipType.Outgoing:\n                    return BuildFriendshipOutgoingUrl(parameters);\n                case FriendshipType.Show:\n                    return BuildFriendshipShowUrl(parameters);\n                case FriendshipType.NoRetweetIDs:\n                    return BuildFriendshipNoRetweetIDsUrl();\n                case FriendshipType.FollowersList:\n                    return BuildFollowersListUrl(parameters);\n                case FriendshipType.FriendsList:\n                    return BuildFriendsListUrl(parameters);\n                case FriendshipType.FollowerIDs:\n                    return BuildFollowerIDsUrl(parameters);\n                case FriendshipType.FriendIDs:\n                    return BuildFriendIDsUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid FriendshipType\", \"Type\");\n            }\n        }\n\n        /// <summary>\n        /// Builds an url that retrieves ids of people who the logged in user doesn't want retweets for\n        /// </summary>\n        /// <returns>no_retweet_id URL</returns>\n        Request BuildFriendshipNoRetweetIDsUrl()\n        {\n            return new Request(BaseUrl + \"friendships/no_retweets/ids.json\");\n        }\n\n        /// <summary>\n        /// builds an url for showing friendship details between two users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFriendshipShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"SourceUserID\") && !parameters.ContainsKey(\"SourceScreenName\"))\n                throw new ArgumentException(\"You must specify either SourceUserID or SourceScreenName\");\n\n            if (!parameters.ContainsKey(\"TargetUserID\") && !parameters.ContainsKey(\"TargetScreenName\"))\n                throw new ArgumentException(\"You must specify either TargetUserID or TargetScreenName\");\n\n            var req = new Request(BaseUrl + \"friendships/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SourceUserID\"))\n            {\n                SourceUserID = ulong.Parse(parameters[\"SourceUserID\"]);\n                urlParams.Add(new QueryParameter(\"source_id\", parameters[\"SourceUserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"SourceScreenName\"))\n            {\n                SourceScreenName = parameters[\"SourceScreenName\"];\n                urlParams.Add(new QueryParameter(\"source_screen_name\", SourceScreenName));\n            }\n\n            if (parameters.ContainsKey(\"TargetUserID\"))\n            {\n                TargetUserID = ulong.Parse(parameters[\"TargetUserID\"]);\n                urlParams.Add(new QueryParameter(\"target_id\", parameters[\"TargetUserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"TargetScreenName\"))\n            {\n                TargetScreenName = parameters[\"TargetScreenName\"];\n                urlParams.Add(new QueryParameter(\"target_screen_name\", TargetScreenName));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining incoming friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for incoming</returns>\n        Request BuildFriendshipIncomingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/incoming.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining relationship between logged in user and list of other users\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ScreenName</param>\n        /// <returns>Url for lookup</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining outgoing friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for outgoing</returns>\n        Request BuildFriendshipOutgoingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/outgoing.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowersListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"followers/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n                        \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFriendsListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friends/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID.\");\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n            \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowerIDsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"followers/ids.json\";\n\n            return BuildIdQueryUrlParameters(parameters, url);\n        }\n\n        Request BuildFriendIDsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"friends/ids.json\";\n\n            return BuildIdQueryUrlParameters(parameters, url);\n        }\n\n        Request BuildIdQueryUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            if (!parameters.ContainsKey(\"UserID\") && !parameters.ContainsKey(\"ScreenName\"))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName.\");\n\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n            else\n            {\n                Cursor = -1;\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor.ToString()));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            Friendship friendship;\n\n            switch (Type)\n            {\n                case FriendshipType.Show:\n                    friendship = HandleShowResponse(responseJson);\n                    break;\n                case FriendshipType.Incoming:\n                case FriendshipType.Outgoing:\n                case FriendshipType.FollowerIDs:\n                case FriendshipType.FriendIDs:\n                    friendship = HandleIdsResponse(responseJson);\n                    break;\n                case FriendshipType.Lookup:\n                    friendship = HandleLookupResponse(responseJson);\n                    break;\n                case FriendshipType.NoRetweetIDs:\n                    friendship = HandleNoRetweetIDsResponse(responseJson);\n                    break;\n                case FriendshipType.FriendsList:\n                case FriendshipType.FollowersList:\n                    friendship = HandleFriendsListOrFollowersListResponse(responseJson);\n                    break;\n                default:\n                    friendship = new Friendship();\n                    break;\n            }\n\n            friendship.Type = Type;\n            friendship.SourceUserID = SourceUserID;\n            friendship.SourceScreenName = SourceScreenName;\n            friendship.TargetUserID = TargetUserID;\n            friendship.TargetScreenName = TargetScreenName;\n            friendship.Cursor = Cursor;\n            friendship.ScreenName = ScreenName;\n            friendship.UserID = UserID;\n            friendship.SkipStatus = SkipStatus;\n            friendship.IncludeUserEntities = IncludeUserEntities;\n            friendship.Count = Count;\n\n            var friendList = new List<Friendship>\n            {\n                friendship\n            };\n\n            return friendList.OfType<T>().ToList();\n        }\n  \n        Friendship HandleShowResponse(string responseJson)\n        {\n            JsonData showJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship(showJson.GetValue<JsonData>(\"relationship\"));\n            return friendship;\n        }\n  \n        Friendship HandleIdsResponse(string responseJson)\n        {\n            JsonData idsJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship\n            {\n                IDInfo = new IDList(idsJson),\n                CursorMovement = new Cursors(idsJson)\n            };\n            return friendship;\n        }\n  \n        Friendship HandleLookupResponse(string responseJson)\n        {\n            JsonData lookupJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship\n            {\n                Relationships =\n                    (from JsonData relationship in lookupJson\n                     select new Relationship(relationship))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        Friendship HandleNoRetweetIDsResponse(string responseJson)\n        {\n            string idsJson = \"{ \\\"ids\\\":\" + responseJson + \" }\";\n            return HandleIdsResponse(idsJson);\n        }\n\n        Friendship HandleFriendsListOrFollowersListResponse(string responseJson)\n        {\n            JsonData friendsOrFollowersJson = JsonMapper.ToObject(responseJson);\n            var users = friendsOrFollowersJson.GetValue<JsonData>(\"users\");\n\n            var friendship = new Friendship\n            {\n                CursorMovement = new Cursors(friendsOrFollowersJson),\n                Users =\n                    (from JsonData user in users\n                     select new User(user))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData friendJson = JsonMapper.ToObject(responseJson);\n\n            switch ((FriendshipAction) theAction)\n            {\n                case FriendshipAction.Create:\n                case FriendshipAction.Destroy:\n                    var user = new User(friendJson);\n                    return user.ItemCast(default(T));\n                case FriendshipAction.Update:\n                    var friendship = new Friendship(friendJson.GetValue<JsonData>(\"relationship\"));\n                    return friendship.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Friendship/FriendshipType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of friendship actions\n    /// </summary>\n    public enum FriendshipType\n    {\n        /// <summary>\n        /// Detailed information on the relationship between two people\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show IDs of all users requesting friendship with logged in user\n        /// </summary>\n        Incoming,\n\n        /// <summary>\n        /// Show IDs of all users logged in user is requesting friendship with\n        /// </summary>\n        Outgoing,\n\n        /// <summary>\n        /// Allows you to examine the relationship of a list of users, ScreenName,\n        /// to the logged in user\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// List of user IDs logged in user doesn't want to receive retweets for\n        /// </summary>\n        NoRetweetIDs,\n\n        /// <summary>\n        /// List of User entities of friends (people the authenticated user follows)\n        /// </summary>\n        FriendsList,\n\n        /// <summary>\n        /// List of User entities of followers (people who follow the authenticated user)\n        /// </summary>\n        FollowersList,\n\n        /// <summary>\n        /// people user is following\n        /// </summary>\n        FriendIDs,\n\n        /// <summary>\n        /// people following user\n        /// </summary>\n        FollowerIDs\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Friendship/Relationship.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Friendship details for either a Source or Target\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Relationship\n    {\n        public Relationship() { }\n        public Relationship(JsonData relJson)\n        {\n            if (relJson == null) return;\n\n            ScreenName = relJson.GetValue<string>(\"screen_name\");\n            Name = relJson.GetValue<string>(\"name\");\n            RetweetsWanted = relJson.GetValue<bool>(\"want_retweets\");\n            AllReplies = relJson.GetValue<bool>(\"all_replies\");\n            MarkedSpam = relJson.GetValue<bool>(\"marked_spam\");\n            ID = relJson.GetValue<ulong>(\"id\");\n            Blocking = relJson.GetValue<bool>(\"blocking\");\n            NotificationsEnabled = relJson.GetValue<bool>(\"notifications_enabled\");\n            CanDm = relJson.GetValue<bool>(\"can_dm\");\n            Muting = relJson.GetValue<bool>(\"muting\", false);\n\n            var connections = relJson.GetValue<JsonData>(\"connections\");\n            if (connections != null)\n                Connections =\n                    (from JsonData connection in connections\n                     select connection.ToString())\n                    .ToList();\n            else\n                Connections = new List<string>();\n\n            FollowedBy = \n                relJson.GetValue<bool>(\"followed_by\") ||\n                Connections.Contains(\"followed_by\");\n            Following = \n                relJson.GetValue<bool>(\"following\") ||\n                Connections.Contains(\"following\");\n        }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// User's screen name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// User's name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Is this user following the other\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Does the other user follow this one\n        /// </summary>\n        public bool FollowedBy { get; set; }\n\n        /// <summary>\n        /// Is this user blocking the other\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? Blocking { get; set; }\n\n        /// <summary>\n        /// Are this user's notifications enabled\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? NotificationsEnabled { get; set; }\n\n        /// <summary>\n        /// Does the user want to receive retweets from person they follow\n        /// </summary>\n        public bool RetweetsWanted { get; set; }\n\n        /// <summary>\n        /// Shows relationships between the logged in user and \n        /// the person identified by this relationship\n        /// </summary>\n        public List<string> Connections { get; set; }\n\n        /// <summary>\n        /// Sees all replies\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Marked as SPAM\n        /// </summary>\n        public bool MarkedSpam { get; set; }\n\n        /// <summary>\n        /// Allowed to send direct messages\n        /// </summary>\n        public bool CanDm { get; set; }\n\n        /// <summary>\n        /// User is muted.\n        /// </summary>\n        public bool Muting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Friendship/TwitterContextFriendshipCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets logged-in user follow another user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> CreateFriendshipAsync(ulong userID, bool follow, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID is a required parameter.\", \"userID\");\n\n            string destroyUrl = BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string>\n                {\n                    { \"user_id\", userID.ToString() }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n                createParams.Add(\"follow\", \"true\");\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    destroyUrl,\n                    createParams,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Create);\n        }\n\n        /// <summary>\n        /// Lets logged-in user follow another user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> CreateFriendshipAsync(string screenName, bool follow, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            string destroyUrl = BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string>\n                {\n                    { \"screen_name\", screenName }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n                createParams.Add(\"follow\", \"true\");\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    destroyUrl,\n                    createParams,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Create);\n        }\n\n        /// <summary>\n        /// Lets logged-in user un-follow another user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> DestroyFriendshipAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID is a required parameter.\", \"userID\");\n\n            string destroyUrl = BaseUrl + \"friendships/destroy.json\";\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    destroyUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID.ToString() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Destroy);\n        }\n\n        /// <summary>\n        /// Lets logged-in user un-follow another user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> DestroyFriendshipAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            string destroyUrl = BaseUrl + \"friendships/destroy.json\";\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<User>(\n                    destroyUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"screen_name\", screenName }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Destroy);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public async Task<Friendship> UpdateFriendshipSettingsAsync(string screenName, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is a required parameter.\");\n\n            return await UpdateFriendshipSettingsAsync(0, screenName, retweets, device, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public async Task<Friendship> UpdateFriendshipSettingsAsync(ulong userID, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentNullException(\"userID\", \"userID is a required parameter.\");\n\n            return await UpdateFriendshipSettingsAsync(0, null, retweets, device, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        async Task<Friendship> UpdateFriendshipSettingsAsync(ulong userID, string screenName, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var parms = new Dictionary<string, string>\n            {\n                { \"retweets\", retweets.ToString().ToLower() },\n                { \"device\", device.ToString().ToLower() }\n            };\n\n            if (screenName != null) parms.Add(\"screen_name\", screenName);\n            if (userID > 0) parms.Add(\"user_id\", userID.ToString());\n\n            string updateUrl = BaseUrl + \"friendships/update.json\";\n\n            var reqProc = new FriendshipRequestProcessor<Friendship>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<Friendship>(\n                    updateUrl,\n                    parms,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Update);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/Coordinate.cs",
    "content": "﻿using System.Linq;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical coordinates\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Coordinate\n    {\n        public const int LongitudePos = 0;\n        public const int LatitudePos = 1;\n\n        public Coordinate() { }\n        internal Coordinate(JsonData coord)\n        {\n            if (coord == null) return;\n            var jsonLatitude = coord[LatitudePos];\n            Latitude = jsonLatitude.IsDouble ? (double)jsonLatitude : (int)jsonLatitude;\n            var jsonLongitude = coord[LongitudePos];\n            Longitude = jsonLongitude.IsDouble ? (double)jsonLongitude : (int)jsonLongitude;\n        }\n\n        /// <summary>\n        /// Type of Coordinate\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/Geo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geo info for querying and reading results\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Geo\n    {\n        public Geo() { }\n        public Geo(JsonData geo)\n        {\n            if (geo == null) return;\n\n            JsonData result = geo.GetValue<JsonData>(\"result\");\n            JsonData places = result.GetValue<JsonData>(\"places\");\n\n            Token = result.GetValue<string>(\"token\");\n\n            if (places != null)\n            {\n                Places =\n                    (from JsonData place in places\n                        select new Place(place))\n                    .ToList(); \n            }\n            else\n            {\n                Places = new List<Place>();\n            }\n        }\n\n        /// <summary>\n        /// Type of Geo query (Reverse or ID)\n        /// </summary>\n        public GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        public string IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        public string Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        public string Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        public string ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        public string Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        public string PlaceName { get; set; }\n\n        /// <summary>\n        /// Place token returned from a Similar Places query and used in CreatePlaceAsync\n        /// </summary>\n        public string Token { get; set; }\n\n        /// <summary>\n        /// Results showing places matching query\n        /// </summary>\n        public List<Place> Places { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string ID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/GeoAction.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    enum GeoAction\n    {\n        CreatePlace\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/GeoRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing LinqToTwitter.Serialization.Extensions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Geo requests\n    /// </summary>\n    public class GeoRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T: class\n    {\n        const string AttributeParam = \"Attribute\";\n        const string IDParam = \"ID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of Geo operation (Reverse or ID)\n        /// </summary>\n        internal GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        internal double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        internal double Longitude { get; set; }\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        internal string IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        internal string Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        internal string Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        internal int MaxResults { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        internal string ID { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        internal string ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        internal string Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        internal string PlaceName { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Geo>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Latitude\",\n                   \"Longitude\",\n                   \"IP\",\n                   \"Accuracy\",\n                   \"Granularity\",\n                   \"MaxResults\",\n                   \"ID\",\n                   \"Query\",\n                   \"ContainedWithin\",\n                   \"Attribute\",\n                   \"PlaceName\"\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<GeoType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    return BuildIDUrl(parameters);\n                case GeoType.Reverse:\n                    return BuildReverseUrl(parameters);\n                case GeoType.Search:\n                    return BuildSearchUrl(parameters);\n                case GeoType.SimilarPlaces:\n                    return BuildSimilarPlacesUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        void HandleAttributeParams(Dictionary<string, string> parameters, IList<QueryParameter> urlParams)\n        {\n            if (parameters.ContainsKey(AttributeParam))\n            {\n                // TODO: should really be able to search for more than one Attribute\n                Attribute = parameters[AttributeParam] ?? String.Empty;\n                var parts = Attribute.Split('=');\n\n                if (parts.Length < 2)\n                {\n                    throw new ArgumentException(\n                        \"Attribute must be a name/value pair (i.e. street_address=123); actual value: \" + Attribute,\n                        AttributeParam);\n                }\n\n                urlParams.Add(new QueryParameter(\"attribute:\" + parts[0], parts[1]));\n            }\n        }\n\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"IP\") &&\n                !parameters.ContainsKey(\"Query\") &&\n                !(parameters.ContainsKey(\"Latitude\") &&\n                  parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"Either Latitude and Longitude, Query, or IP address is required.\");\n\n            var req = new Request(BaseUrl + \"geo/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n            \n            if (parameters.ContainsKey(\"IP\"))\n            {\n                IP = parameters[\"IP\"];\n                urlParams.Add(new QueryParameter(\"ip\", IP));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        Request BuildIDUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(IDParam))\n                throw new ArgumentException(\"ID is required for a Geo ID query.\", IDParam);\n\n            ID = parameters[IDParam];\n\n            var url = \"geo/id/\" + ID + \".json\";\n            return new Request(BaseUrl + url);\n        }\n\n        Request BuildReverseUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/reverse_geocode.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"lat\", double.Parse(parameters[\"Latitude\"]).ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"long\", double.Parse(parameters[\"Longitude\"]).ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            return req;\n        }\n\n        Request BuildSimilarPlacesUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            if (!parameters.ContainsKey(\"PlaceName\"))\n            {\n                const string LatLongParam = \"PlaceName\";\n                throw new ArgumentException(\"PlaceName is required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/similar_places.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"PlaceName\"))\n            {\n                PlaceName = parameters[\"PlaceName\"];\n                urlParams.Add(new QueryParameter(\"name\", PlaceName));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response into List of Geo.\n        /// </summary>\n        /// <param name=\"responseJson\">Json with Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData geoJson = JsonMapper.ToObject(responseJson);\n\n            Geo geo;\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    geo = new Geo\n                    {\n                        Places = new List<Place> { new Place(geoJson) }\n                    };\n                    break;\n                case GeoType.Reverse:\n                case GeoType.Search:\n                case GeoType.SimilarPlaces:\n                    geo = new Geo(geoJson);\n                    break;\n                default:\n                    geo = new Geo();\n                    break;\n            }\n\n            geo.Type = Type;\n            geo.Accuracy = Accuracy;\n            geo.Granularity = Granularity;\n            geo.ID = ID;\n            geo.Latitude = Latitude;\n            geo.Longitude = Longitude;\n            geo.IP = IP;\n            geo.MaxResults = MaxResults;\n            geo.Query = Query;\n            geo.ContainedWithin = ContainedWithin;\n            geo.Attribute = Attribute;\n            geo.PlaceName = PlaceName;\n                \n            return new List<Geo> { geo }.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData geoJson = JsonMapper.ToObject(responseJson);\n\n            switch ((GeoAction)theAction)\n            {\n                case GeoAction.CreatePlace:\n                    var place = new Place(geoJson);\n                    return place.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/GeoType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with Twitter Geo places\n    /// </summary>\n    public enum GeoType\n    {\n        /// <summary>\n        /// Get a list of valid places (from Twitter) that can be attached to an Update\n        /// </summary>\n        Reverse,\n\n        /// <summary>\n        /// Get more details on a place (found via GeoType.Reverse)\n        /// </summary>\n        ID,\n\n        /// <summary>\n        /// Performs a search, based on various criteria\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Gets a list of nearby places with similar names\n        /// </summary>\n        SimilarPlaces\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/Geometry.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical area\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Geometry\n    {\n        public Geometry() {}\n        internal Geometry(JsonData geometry)\n        {\n            if (geometry == null) return;\n\n            Type = geometry.GetValue<string>(\"type\");\n\n            var coordinates = geometry.GetValue<JsonData>(\"coordinates\");\n            Coordinates =\n                (from JsonData outer in coordinates\n                 from JsonData coord in outer\n                 select new Coordinate(coord))\n                .ToList();\n        }\n\n        /// <summary>\n        /// Type of bouding box\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Coordinates for bounding box\n        /// </summary>\n        public List<Coordinate> Coordinates { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Geo/Place.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing System.Xml.Serialization;\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A general description of a geographical location in Twitter\n    /// </summary>\n    [XmlType(Namespace=\"LinqToTwitter\")]\n    public class Place\n    {\n        public Place() {}\n        internal Place(JsonData place)\n        {\n            if (place == null) return;\n\n            ID = place.GetValue<string>(\"id\");\n            Name = place.GetValue<string>(\"name\");\n            Country = place.GetValue<string>(\"country\");\n            CountryCode = place.GetValue<string>(\"country_code\");\n            FullName = place.GetValue<string>(\"full_name\");\n            PlaceType = place.GetValue<string>(\"place_type\");\n            Url = place.GetValue<string>(\"url\");\n            BoundingBox = new Geometry(place.GetValue<JsonData>(\"bounding_box\"));\n            Geometry = new Geometry(place.GetValue<JsonData>(\"geometry\"));\n\n            var containedWithin = place.GetValue<JsonData>(\"contained_within\");\n            ContainedWithin = \n                containedWithin != null && containedWithin.Count > 0 ? \n                    new Place(containedWithin[0]) :\n                    null;\n\n            var polyLines = place.GetValue<JsonData>(\"polylines\");\n            PolyLines = \n                polyLines == null ? \n                    new List<string>() \n                        : \n                    (from JsonData line in polyLines\n                     select line.ToString())\n                    .ToList();\n\n            var attrDict = place.GetValue<JsonData>(\"attributes\") as IDictionary<string, JsonData>;\n            Attributes =\n                attrDict == null ?\n                    new Dictionary<string, string>() \n                        :\n                    (from string key in attrDict.Keys\n                     select new \n                     { \n                         Key = key, \n                         Val = attrDict[key].ToString()\n                     })\n                    .ToDictionary(\n                        attr => attr.Key,\n                        attr => attr.Val);\n        }\n\n        /// <summary>\n        /// Name of place\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Country code abbreviation\n        /// </summary>\n        public string CountryCode { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Name of country\n        /// </summary>\n        public string Country { get; set; }\n\n        /// <summary>\n        /// Type of place (i.e. neighborhood, city, country, etc.)\n        /// </summary>\n        public string PlaceType { get; set; }\n\n        /// <summary>\n        /// Url to get more details on place\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Full name of place\n        /// </summary>\n        public string FullName { get; set; }\n\n        /// <summary>\n        /// Place related metadata\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string> Attributes { get; set; }\n\n        /// <summary>\n        /// Geographical outline of place\n        /// </summary>\n        public Geometry BoundingBox { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public Geometry Geometry { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<string> PolyLines { get; set; }\n\n        /// <summary>\n        /// Containing place (i.e. a neighborhood is contained within a city)\n        /// </summary>\n        public Place ContainedWithin { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/Configuration.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Configuration\n    {\n        /// <summary>\n        /// Length of a t.co short url\n        /// </summary>\n        public int ShortUrlLength { get; set; }\n\n        /// <summary>\n        /// Lenght of an https t.co short url\n        /// </summary>\n        public int ShortUrlLengthHttps { get; set; }\n\n        /// <summary>\n        /// Twitter slugs that are not usernames\n        /// </summary>\n        public List<string> NonUserNamePaths { get; set; }\n\n        /// <summary>\n        /// Max photo size\n        /// </summary>\n        public int PhotoSizeLimit { get; set; }\n\n        /// <summary>\n        /// Max number of items that can be uploaded at one time\n        /// </summary>\n        public int MaxMediaPerUpload { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public int CharactersReservedPerMedia { get; set; }\n\n        /// <summary>\n        /// Sizing allowances/behaviors for each type of photo\n        /// </summary>\n        public List<PhotoSize> PhotoSizes { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/Help.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Help\n    {\n        /// <summary>\n        /// Help Type (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        public string Resources { get; set; }\n\n        /// <summary>\n        /// Will be true if help Test succeeds\n        /// </summary>\n        public bool OK { get; set; }\n\n        /// <summary>\n        /// Terms of service or Privacy\n        /// </summary>\n        public string Policies { get; set; }\n\n        /// <summary>\n        /// Populated for Help Configuration query\n        /// </summary>\n        public Configuration Configuration { get; set; }\n\n        /// <summary>\n        /// List of languages, codes, and statuses\n        /// </summary>\n        public List<Language> Languages { get; set; }\n\n        /// <summary>\n        /// Access token for which rate limit applies\n        /// </summary>\n        public string RateLimitAccountContext { get; set; }\n\n        /// <summary>\n        /// Rate limit statuses\n        /// </summary>\n        public Dictionary<string, List<RateLimits>> RateLimits { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/HelpRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Used for Help queries\n    /// </summary>\n    public class HelpRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Help request (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        internal string Resources { get; set; }\n\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Help>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Resources\"\n               })\n               .Parameters;\n        }\n\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<HelpType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case HelpType.Configuration:\n                    return new Request(BaseUrl + \"help/configuration.json\");\n                case HelpType.Languages:\n                    return new Request(BaseUrl + \"help/languages.json\");\n                case HelpType.Privacy:\n                    return new Request(BaseUrl + \"help/privacy.json\");\n                case HelpType.RateLimits:\n                    return BuildRateLimitsUrl(parameters);\n                case HelpType.Tos:\n                    return new Request(BaseUrl + \"help/tos.json\");\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        private Request BuildRateLimitsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"application/rate_limit_status.json\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Resources\"))\n            {\n                Resources = parameters[\"Resources\"];\n                urlParams.Add(new QueryParameter(\"resources\", Resources.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// return response from help request\n        /// </summary>\n        /// <param name=\"responseJson\">response from twitter</param>\n        /// <returns>true</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Help help;\n            JsonData helpJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case HelpType.Configuration:\n                    help = HandleHelpConfiguration(helpJson);\n                    break;\n                case HelpType.Languages:\n                    help = HandleHelpLanguages(helpJson);\n                    break;\n                case HelpType.RateLimits:\n                    help = HandleHelpRateLimits(helpJson);\n                    break;\n                case HelpType.Privacy:\n                    help = new Help \n                    { \n                        Type = HelpType.Privacy,\n                        Policies = helpJson.GetValue<string>(\"privacy\") \n                    };\n                    break;\n                case HelpType.Tos:\n                    help = new Help \n                    { \n                        Type = HelpType.Tos,\n                        Policies = helpJson.GetValue<string>(\"tos\") \n                    };\n                    break;\n                default:\n                    help = new Help();\n                    break;\n            }\n\n            var helpList = new List<Help> { help };\n\n            return helpList.OfType<T>().ToList();\n        }\n\n        Help HandleHelpConfiguration(JsonData helpJson)\n        {\n            var photoSizeDict = helpJson.GetValue<JsonData>(\"photo_sizes\") as IDictionary<string, JsonData>;\n\n            return new Help\n            {\n                Type = HelpType.Configuration,\n                Configuration = new Configuration\n                {\n                    CharactersReservedPerMedia = helpJson.GetValue<int>(\"characters_reserved_per_media\"),\n                    PhotoSizes =\n                        (from string key in photoSizeDict.Keys\n                         let photoSize = photoSizeDict[key]\n                         select new PhotoSize\n                         {\n                             Type = key,\n                             Height = photoSize.GetValue<int>(\"h\"),\n                             Width = photoSize.GetValue<int>(\"w\"),\n                             Resize = photoSize.GetValue<string>(\"resize\")\n                         })\n                        .ToList(),\n                    ShortUrlLength = helpJson.GetValue<int>(\"short_url_length\"),\n                    PhotoSizeLimit = helpJson.GetValue<int>(\"photo_size_limit\"),\n                    NonUserNamePaths =\n                        (from JsonData path in helpJson.GetValue<JsonData>(\"non_username_paths\")\n                         select path.ToString())\n                        .ToList(),\n                    MaxMediaPerUpload = helpJson.GetValue<int>(\"max_media_per_upload\"),\n                    ShortUrlLengthHttps = helpJson.GetValue<int>(\"short_url_length_https\")\n                }\n            };\n        }\n\n        Help HandleHelpLanguages(JsonData helpJson)\n        {\n            return new Help\n            {\n                Type = HelpType.Languages,\n                Languages =\n                    (from JsonData lang in helpJson\n                     select new Language\n                     {\n                         Code = lang.GetValue<string>(\"code\"),\n                         Name = lang.GetValue<string>(\"name\"),\n                         Status = lang.GetValue<string>(\"status\")\n                     })\n                    .ToList()\n            };\n        }\n\n        Help HandleHelpRateLimits(JsonData helpJson)\n        {\n            var context = helpJson.GetValue<JsonData>(\"rate_limit_context\");\n            var resources = helpJson.GetValue<JsonData>(\"resources\") as IDictionary<string, JsonData>;\n\n            return new Help\n            {\n                Type = HelpType.RateLimits,\n                Resources = Resources,\n                RateLimitAccountContext = context.GetValue<string>(\"access_token\"),\n                RateLimits = \n                    (from key in resources.Keys\n                     let category = resources[key] as IDictionary<string, JsonData>\n                     select new\n                     {\n                         Key = key,\n                         Value =\n                            (from cat in category.Keys\n                             let limit = category[cat]\n                             select new RateLimits\n                             {\n                                 Resource = cat,\n                                 Limit = limit.GetValue<int>(\"limit\"),\n                                 Remaining = limit.GetValue<int>(\"remaining\"),\n                                 Reset = limit.GetValue<ulong>(\"reset\")\n                             })\n                            .ToList()\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Value)\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/HelpType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum HelpType\n    {\n        /// <summary>\n        /// Various settings such as image size, t.co url sizes, and more (should be cached and reused, but refreshed no more than once a day)\n        /// </summary>\n        Configuration,\n\n        /// <summary>\n        /// Languages supported by Twitter\n        /// </summary>\n        Languages,\n        \n        /// <summary>\n        /// Get Twitter Privacy Policy\n        /// </summary>\n        Privacy,\n\n        /// <summary>\n        /// Provides Rate Limit Status\n        /// </summary>\n        RateLimits,\n\n        /// <summary>\n        /// Get Twitter Terms of Service\n        /// </summary>\n        Tos\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/Language.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Language\n    {\n        /// <summary>\n        /// Long description of language name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Two character major language code\n        /// </summary>\n        public string Code { get; set; }\n\n        /// <summary>\n        /// Twitter status\n        /// </summary>\n        public string Status { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/PhotoSize.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class PhotoSize\n    {\n        /// <summary>\n        /// Type of photo (i.e. Large, Small, etc.)\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Photo Width\n        /// </summary>\n        public int Width { get; set; }\n\n        /// <summary>\n        /// Photo Height\n        /// </summary>\n        public int Height { get; set; }\n\n        /// <summary>\n        /// Resize Behavior (i.e. crop, fit, ...)\n        /// </summary>\n        public string Resize { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Help/RateLimits.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class RateLimits\n    {\n        /// <summary>\n        /// Url Segment representing resource that rate limits apply to\n        /// </summary>\n        public string Resource { get; set; }\n\n        /// <summary>\n        /// Number of requests left in this time period\n        /// </summary>\n        public int Remaining { get; set; }\n\n        /// <summary>\n        /// Epoch seconds when rate limits reset\n        /// </summary>\n        public ulong Reset { get; set; }\n\n        /// <summary>\n        /// Number of requests allowed\n        /// </summary>\n        public int Limit { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/ITwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Members for communicating with Twitter\n    /// </summary>\n    public interface ITwitterExecute\n    {\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        IAuthorizer Authorizer { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        Uri LastUrl { get; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        string UserAgent { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        int Timeout { get; set; }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        Task<string> PostToTwitterAsync<T>(string url, IDictionary<string, string> postData, CancellationToken cancelToken);\n\n        /// <summary>\n        /// performs HTTP POST media byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">request parameters</param>\n        /// <param name=\"image\">Image data in a byte[]</param>\n        /// <param name=\"name\">Name of parameter to pass to Twitter.</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png</param>\n        /// <returns>JSON results From Twitter</returns>\n        Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] image, string name, string fileName, string contentType, CancellationToken cancelToken);\n\n        /// <summary>\n        /// makes HTTP call to Twitter API\n        /// </summary>\n        /// <param name=\"url\">URL with all query info</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>JSON Results from Twitter</returns>\n        Task<string> QueryTwitterAsync<T>(Request req, IRequestProcessor<T> reqProc);\n\n        /// <summary>\n        /// Query for Twitter Streaming APIs\n        /// </summary>\n        /// <param name=\"req\">Request URL and parameters.</param>\n        /// <returns>Placeholder - real data flows from stream into callback you define.</returns>\n        Task<string> QueryTwitterStreamAsync(Request req);\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        Func<StreamContent, Task> StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        bool IsStreamClosed { get; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        CancellationToken CancellationToken { get; set; }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        void CloseStream();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterContext.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n ***********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Net;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// manages access to Twitter API\n    /// </summary>\n    public partial class TwitterContext : IDisposable\n    {\n        //\n        // header constants\n        //\n\n        internal const string XRateLimitLimitKey = \"x-rate-limit-limit\";\n        internal const string XRateLimitRemainingKey = \"x-rate-limit-remaining\";\n        internal const string XRateLimitResetKey = \"x-rate-limit-reset\";\n        internal const string RetryAfterKey = \"Retry-After\";\n        internal const string XMediaRateLimitLimitKey = \"x-mediaratelimit-limit\";\n        internal const string XMediaRateLimitRemainingKey = \"x-mediaratelimit-remaining\";\n        internal const string XMediaRateLimitResetKey = \"x-mediaratelimit-reset\";\n        internal const string DateKey = \"Date\";\n        internal const string DefaultUserAgent = \"LINQ-To-Twitter/3.0\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"authorizer\">The authorizer.</param>\n        public TwitterContext(IAuthorizer authorizer)\n            : this(new TwitterExecute(authorizer))\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"execute\">The <see cref=\"ITwitterExecute\"/> object to use.</param>\n        public TwitterContext(ITwitterExecute execute)\n        {\n            if (execute == null)\n                throw new ArgumentNullException(\"execute\", \"TwitterExecutor is required.\");\n\n            TwitterExecutor = execute;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = DefaultUserAgent;\n\n            BaseUrl = \"https://api.twitter.com/1.1/\";\n            VineUrl = \"https://vine.co/\";\n            StreamingUrl = \"https://stream.twitter.com/1.1/\";\n            UserStreamUrl = \"https://userstream.twitter.com/1.1/\";\n            SiteStreamUrl = \"https://sitestream.twitter.com/1.1/\";\n            UploadUrl = \"https://upload.twitter.com/1.1/\";\n        }\n\n        /// <summary>\n        /// base URL for accessing Twitter API\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// base URL for Vine queris\n        /// </summary>\n        public string VineUrl { get; set; }\n\n        /// <summary>\n        /// base URL for uploading media\n        /// </summary>\n        public string UploadUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing streaming APIs\n        /// </summary>\n        public string StreamingUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing user stream APIs\n        /// </summary>\n        public string UserStreamUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing site stream APIs\n        /// </summary>\n        public string SiteStreamUrl { get; set; }\n\n        /// <summary>\n        /// Assign the Log to the context\n        /// </summary>\n        public TextWriter Log\n        {\n            get { return TwitterExecute.Log; }\n            set { TwitterExecute.Log = value; }\n        }\n\n        /// <summary>\n        /// This contains the JSON string from the Twitter response to the most recent query.\n        /// </summary>\n        public string RawResult { get; set; }\n\n        /// <summary>\n        /// By default, LINQ to Twitter populates RawResult on TwitterContext and JsonContent on entities. \n        /// Setting this to true turn this off so that RawResult and JsonContent are not populated.\n        /// </summary>\n        public bool ExcludeRawJson { get; set; }\n\n        //\n        // The routines in this region delegate to TwitterExecute\n        // which contains the methods for communicating with Twitter.\n        // This is necessary so we can make the side-effect methods\n        // more testable, using IoC.\n        //\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                    return TwitterExecutor.UserAgent;\n                else\n                    return string.Empty;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                    TwitterExecutor.UserAgent = value;\n                if (Authorizer != null)\n                    Authorizer.UserAgent = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the read write timeout.\n        /// </summary>\n        /// <value>The read write timeout.</value>\n        public int ReadWriteTimeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.ReadWriteTimeout;\n                }\n                return TwitterExecute.DefaultReadWriteTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.ReadWriteTimeout = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public int Timeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.Timeout;\n                }\n                return TwitterExecute.DefaultTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.Timeout = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the authorized client on the <see cref=\"ITwitterExecute\"/> object.\n        /// </summary>\n        public IAuthorizer Authorizer\n        {\n            get { return TwitterExecutor.Authorizer; }\n            set { TwitterExecutor.Authorizer = value; }\n        }\n\n        /// <summary>\n        /// Allows setting the IWebProxy for all HTTP requests.\n        /// </summary>\n        public IWebProxy Proxy\n        {\n            get { return Authorizer.Proxy; }\n            set { Authorizer.Proxy = value; }\n        }\n\n        /// <summary>\n        /// Gets the most recent URL executed.\n        /// </summary>\n        /// <remarks>\n        /// Supports debugging.\n        /// </remarks>\n        public Uri LastUrl\n        {\n            get { return TwitterExecutor.LastUrl; }\n        }\n        \n        /// <summary>\n        /// Methods for communicating with Twitter.\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to an int\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>int value from response</returns>\n        private int GetResponseHeaderAsInt(string responseHeader)\n        {\n            var headerVal = -1;\n            var headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                var headerValAsString = headers[responseHeader];\n\n                int.TryParse(headerValAsString, out headerVal);\n            }\n\n            return headerVal;\n        }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to a DateTime\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>DateTime value from response</returns>\n        /// <remarks>Expects a string like: Sat, 26 Feb 2011 01:12:08 GMT</remarks>\n        private DateTime? GetResponseHeaderAsDateTime(string responseHeader)\n        {\n            DateTime? headerVal = null;\n            var headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                var headerValAsString = headers[responseHeader];\n                DateTime value;\n\n                if (DateTime.TryParse(headerValAsString,\n                                        CultureInfo.InvariantCulture,\n                                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,\n                                        out value))\n                    headerVal = value;\n            }\n\n            return headerVal;\n        }\n        \n        /// <summary>\n        /// Response headers from Twitter Queries\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.ResponseHeaders;\n                }\n                return null;\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per minute\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent search query \n        /// that fails with an HTTP 503\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't exceeded search rate yet\n        /// </remarks>\n        public int RetryAfter\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(RetryAfterKey);\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per window for\n        /// TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// Gets the response header Date and converts to a nullable-DateTime\n        /// </summary>\n        /// <remarks>\n        /// Returns null if the headers don't contain a valid Date value\n        /// i.e. you haven't performed a query yet or not convertable\n        /// </remarks>\n        public DateTime? TwitterDate\n        {\n            get\n            {\n                return GetResponseHeaderAsDateTime(DateKey);\n            }\n        }\n\n        /// <summary>\n        /// Called by QueryProvider to execute queries\n        /// </summary>\n        /// <param name=\"expression\">ExpressionTree to parse</param>\n        /// <param name=\"isEnumerable\">Indicates whether expression is enumerable</param>\n        /// <returns>list of objects with query results</returns>\n        public virtual async Task<object> ExecuteAsync<T>(Expression expression, bool isEnumerable)\n            where T: class\n        {\n            // request processor is specific to request type (i.e. Status, User, etc.)\n            var reqProc = CreateRequestProcessor<T>(expression);\n\n            // get input parameters that go on the REST query URL\n            var parameters = GetRequestParameters(expression, reqProc);\n\n            // construct REST endpoint, based on input parameters\n            var request = reqProc.BuildUrl(parameters);\n\n            string results;\n\n             //process request through Twitter\n            if (typeof(T) == typeof(Streaming))\n            {\n                results = await TwitterExecutor.QueryTwitterStreamAsync(request).ConfigureAwait(false);\n            }\n            else\n            {\n                results = await TwitterExecutor.QueryTwitterAsync(request, reqProc).ConfigureAwait(false);\n            }\n\n            if (!ExcludeRawJson)\n                RawResult = results;\n\n            // Transform results into objects\n            var queryableList = reqProc.ProcessResults(results);\n\n            // Copy the IEnumerable entities to an IQueryable.\n            var queryableItems = queryableList.AsQueryable();\n\n            // Copy the expression tree that was passed in, changing only the first\n            // argument of the innermost MethodCallExpression.\n            // -- Transforms IQueryable<T> into List<T>, which is (IEnumerable<T>)\n            var treeCopier = new ExpressionTreeModifier<T>(queryableItems);\n            Expression newExpressionTree = treeCopier.CopyAndModify(expression);\n\n            // This step creates an IQueryable that executes by replacing Queryable methods with Enumerable methods.\n            if (isEnumerable)\n                return queryableItems.Provider.CreateQuery(newExpressionTree);\n\n            return queryableItems.Provider.Execute<object>(newExpressionTree);\n        }\n\n        /// <summary>\n        /// Search the where clause for query parameters\n        /// </summary>\n        /// <param name=\"expression\">Input query expression tree</param>\n        /// <param name=\"reqProc\">Processor specific to this request type</param>\n        /// <returns>Name/value pairs of query parameters</returns>\n        private static Dictionary<string, string> GetRequestParameters<T>(Expression expression, IRequestProcessor<T> reqProc)\n        {\n            var parameters = new Dictionary<string, string>();\n\n            // GHK FIX: Handle all wheres\n            var whereExpressions = new WhereClauseFinder().GetAllWheres(expression);\n            foreach (var whereExpression in whereExpressions)\n            {\n                var lambdaExpression = (LambdaExpression)((UnaryExpression)(whereExpression.Arguments[1])).Operand;\n\n                // translate variable references in expression into constants\n                lambdaExpression = (LambdaExpression)Evaluator.PartialEval(lambdaExpression);\n\n                var newParameters = reqProc.GetParameters(lambdaExpression);\n                foreach (var newParameter in newParameters)\n                {\n                    if (!parameters.ContainsKey(newParameter.Key))\n                    {\n                        parameters.Add(newParameter.Key, newParameter.Value);\n                    }\n                }\n            }\n\n            return parameters;\n        }\n\n        protected internal virtual IRequestProcessor<T> CreateRequestProcessor<T>()\n            where T : class\n        {\n            string requestType = typeof(T).Name;\n\n            IRequestProcessor<T> req = CreateRequestProcessor<T>(requestType);\n\n            return req;\n        }\n\n        /// <summary>\n        /// TestMethodory method for returning a request processor\n        /// </summary>\n        /// <typeparam name=\"T\">type of request</typeparam>\n        /// <returns>request processor matching type parameter</returns>\n        internal IRequestProcessor<T> CreateRequestProcessor<T>(Expression expression)\n            where T: class\n        {\n            if (expression == null)\n            {\n                const string NullExpressionMessage = \"Expression passed to CreateRequestProcessor must not be null.\";\n                throw new ArgumentNullException(\"Expression\", NullExpressionMessage);\n            }\n\n            string requestType = new MethodCallExpressionTypeFinder().GetGenericType(expression).Name;\n\n            IRequestProcessor<T> req = CreateRequestProcessor<T>(requestType);\n            return req;\n        }\n\n        protected internal IRequestProcessor<T> CreateRequestProcessor<T>(string requestType)\n            where T : class\n        {\n            var baseUrl = BaseUrl;\n            IRequestProcessor<T> req;\n\n            switch (requestType)\n            {\n                case \"Account\":\n                    req = new AccountRequestProcessor<T>();\n                    break;\n                case \"Blocks\":\n                    req = new BlocksRequestProcessor<T>();\n                    break;\n                case \"ControlStream\":\n                    req = new ControlStreamRequestProcessor<T>\n                        {\n                            SiteStreamUrl = SiteStreamUrl\n                        };\n                    break;\n                case \"DirectMessage\":\n                    req = new DirectMessageRequestProcessor<T>();\n                    break;\n                case \"Favorites\":\n                    req = new FavoritesRequestProcessor<T>();\n                    break;\n                case \"Friendship\":\n                    req = new FriendshipRequestProcessor<T>();\n                    break;\n                case \"Geo\":\n                    req = new GeoRequestProcessor<T>();\n                    break;\n                case \"Help\":\n                    req = new HelpRequestProcessor<T>();\n                    break;\n                case \"List\":\n                    req = new ListRequestProcessor<T>();\n                    break;\n                case \"Mute\":\n                    req = new MuteRequestProcessor<T>();\n                    break;\n                case \"Raw\":\n                    req = new RawRequestProcessor<T>();\n                    break;\n                case \"SavedSearch\":\n                    req = new SavedSearchRequestProcessor<T>();\n                    break;\n                case \"Search\":\n                    req = new SearchRequestProcessor<T>();\n                    break;\n                case \"Status\":\n                    req = new StatusRequestProcessor<T>();\n                    break;\n                case \"Streaming\":\n                    baseUrl = StreamingUrl;\n                    req = new StreamingRequestProcessor<T>\n                    {\n                        UserStreamUrl = UserStreamUrl,\n                        SiteStreamUrl = SiteStreamUrl,\n                        TwitterExecutor = TwitterExecutor\n                    };\n                    break;\n                case \"Trend\":\n                    req = new TrendRequestProcessor<T>();\n                    break;\n                case \"User\":\n                    req = new UserRequestProcessor<T>();\n                    break;\n                case \"Vine\":\n                    req = new VineRequestProcessor<T>\n                    {\n                        VineUrl = VineUrl\n                    };\n                    break;\n                default:\n                    throw new ArgumentException(\"Type, \" + requestType + \" isn't a supported LINQ to Twitter entity.\", \"requestType\");\n            }\n\n            if (baseUrl != null)\n                req.BaseUrl = baseUrl;\n\n            return req;\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                var disposableExecutor = TwitterExecutor as IDisposable;\n                if (disposableExecutor != null)\n                {\n                    disposableExecutor.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterContextEntities.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// enables access to Twitter account information, such as Verify Credentials and Rate Limit Status\n        /// </summary>\n        public TwitterQueryable<Account> Account\n        {\n            get\n            {\n                return new TwitterQueryable<Account>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter blocking information, such as Exists, Blocks, and IDs\n        /// </summary>\n        public TwitterQueryable<Blocks> Blocks\n        {\n            get\n            {\n                return new TwitterQueryable<Blocks>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Control Streams, which manage and query Site Streams\n        /// </summary>\n        public TwitterQueryable<ControlStream> ControlStream\n        {\n            get\n            {\n                return new TwitterQueryable<ControlStream>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter User messages, such as Friends and Followers\n        /// </summary>\n        public TwitterQueryable<DirectMessage> DirectMessage\n        {\n            get\n            {\n                return new TwitterQueryable<DirectMessage>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Favorites\n        /// </summary>\n        public TwitterQueryable<Favorites> Favorites\n        {\n            get\n            {\n                return new TwitterQueryable<Favorites>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Friendship info\n        /// </summary>\n        public TwitterQueryable<Friendship> Friendship\n        {\n            get\n            {\n                return new TwitterQueryable<Friendship>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Geo info\n        /// </summary>\n        public TwitterQueryable<Geo> Geo\n        {\n            get\n            {\n                return new TwitterQueryable<Geo>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Help info\n        /// </summary>\n        public TwitterQueryable<Help> Help\n        {\n            get\n            {\n                return new TwitterQueryable<Help>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables access to muted users\n        /// </summary>\n        public TwitterQueryable<Mute> Mute\n        {\n            get\n            {\n                return new TwitterQueryable<Mute>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter List info\n        /// </summary>\n        public TwitterQueryable<List> List\n        {\n            get\n            {\n                return new TwitterQueryable<List>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Raw Query Extensibility\n        /// </summary>\n        public TwitterQueryable<Raw> RawQuery\n        {\n            get\n            {\n                return new TwitterQueryable<Raw>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Saved Searches\n        /// </summary>\n        public TwitterQueryable<SavedSearch> SavedSearch\n        {\n            get\n            {\n                return new TwitterQueryable<SavedSearch>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Search to query tweets\n        /// </summary>\n        public TwitterQueryable<Search> Search\n        {\n            get\n            {\n                return new TwitterQueryable<Search>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Status messages\n        /// </summary>\n        public TwitterQueryable<Status> Status\n        {\n            get\n            {\n                return new TwitterQueryable<Status>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Status messages, such as Friends and Public\n        /// </summary>\n        public TwitterQueryable<Streaming> Streaming\n        {\n            get\n            {\n                return new TwitterQueryable<Streaming>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Trends, such as Trend, Current, Daily, and Weekly\n        /// </summary>\n        public TwitterQueryable<Trend> Trends\n        {\n            get\n            {\n                return new TwitterQueryable<Trend>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter User messages, such as Friends and Followers\n        /// </summary>\n        public TwitterQueryable<User> User\n        {\n            get\n            {\n                return new TwitterQueryable<User>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Vine messages, such as Oembed\n        /// </summary>\n        public TwitterQueryable<Vine> Vine\n        {\n            get\n            {\n                return new TwitterQueryable<Vine>(this);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterErrorHandler.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    class TwitterErrorHandler\n    {\n        public static async Task ThrowIfErrorAsync(HttpResponseMessage msg)\n        {\n            const int TooManyRequests = 429;\n\n            // TODO: research proper handling of 304\n\n            if ((int)msg.StatusCode < 400) return;\n\n            switch (msg.StatusCode)\n            {\n                case HttpStatusCode.Unauthorized:\n                    await HandleUnauthorizedAsync(msg).ConfigureAwait(false);\n                    break;\n                default:\n                    switch ((int)msg.StatusCode)\n\t                {\n                        case TooManyRequests:\n                            await HandleTooManyRequestsAsync(msg).ConfigureAwait(false);\n                            break;\n\t\t                default:\n                            await HandleGenericErrorAsync(msg).ConfigureAwait(false);\n                            break;\n\t                }\n                    break;\n            } \n        }\n  \n        internal static async Task HandleGenericErrorAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            BuildAndThrowTwitterQueryException(responseStr, msg);\n        }\n \n        internal static async Task HandleTooManyRequestsAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = \"https://linqtotwitter.codeplex.com/wikipage?title=LINQ%20to%20Twitter%20FAQ\",\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.SeeOther,\n                ReasonPhrase = msg.ReasonPhrase + \" (HTTP 429 - Too Many Requests)\"\n            };\n        }\n \n        internal static void BuildAndThrowTwitterQueryException(string responseStr, HttpResponseMessage msg)\n        {\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            throw new TwitterQueryException(error.Message)\n            {\n                ErrorCode = error.Code,\n                StatusCode = msg.StatusCode,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n  \n        internal async static Task HandleUnauthorizedAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = \"https://linqtotwitter.codeplex.com/wikipage?title=LINQ%20to%20Twitter%20FAQ\",\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.Unauthorized,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n\n        internal static TwitterErrorDetails ParseTwitterErrorMessage(string responseStr)\n        {\n            if (responseStr.StartsWith(\"{\"))\n            {\n                JsonData responseJson = JsonMapper.ToObject(responseStr);\n\n                var errors = responseJson.GetValue<JsonData>(\"errors\");\n\n                if (errors != null)\n                {\n                    if (errors.GetJsonType() == JsonType.String)\n                        return new TwitterErrorDetails\n                        {\n                            Message = responseJson.GetValue<string>(\"errors\"),\n                            Code = -1\n                        };\n\n                    if (errors.Count > 0)\n                    {\n                        var error = errors[0];\n                        return new TwitterErrorDetails\n                        {\n                            Message = error.GetValue<string>(\"message\"),\n                            Code = error.GetValue<int>(\"code\")\n                        };\n                    }\n                }\n            }\n\n            return new TwitterErrorDetails { Message = responseStr };\n        }\n\n        internal class TwitterErrorDetails\n        {\n            public int Code { get; set; }\n            public string Message { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Net;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Logic that performs actual communication with Twitter\n    /// </summary>\n    internal partial class TwitterExecute : ITwitterExecute, IDisposable\n    {\n        internal const string DefaultUserAgent = \"LINQ-To-Twitter/3.1\";\n        internal const int DefaultReadWriteTimeout = 300000;\n        internal const int DefaultTimeout = 100000;\n\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        public IAuthorizer Authorizer { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        public int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        public int Timeout { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public Uri LastUrl { get; private set; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                return Authorizer.UserAgent;\n            }\n            set\n            {\n                Authorizer.UserAgent =\n                    string.IsNullOrWhiteSpace(value) ?\n                        Authorizer.UserAgent :\n                        value + \", \" + Authorizer.UserAgent;\n            }\n        }\n\n        /// <summary>\n        /// Assign your TextWriter instance to receive LINQ to Twitter output\n        /// </summary>\n        public static TextWriter Log { get; set; }\n\n        readonly object streamingCallbackLock = new object();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Func<StreamContent, Task> StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// HttpClient instance being used in a streaming operation\n        /// </summary>\n        internal HttpClient StreamingClient { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        public bool IsStreamClosed { get; internal set; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        public CancellationToken CancellationToken { get; set; }\n\n        readonly object asyncCallbackLock = new object();\n\n        /// <summary>\n        /// supports testing\n        /// </summary>\n        public TwitterExecute(IAuthorizer authorizer)\n        {\n            if (authorizer == null)\n            {\n                throw new ArgumentNullException(\"authorizedClient\");\n            }\n\n            Authorizer = authorizer;\n            Authorizer.UserAgent = Authorizer.UserAgent ?? DefaultUserAgent;\n        }\n\n        /// <summary>\n        /// Used in queries to read information from Twitter API endpoints.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Respose from Twitter</returns>\n        public async Task<string> QueryTwitterAsync<T>(Request request, IRequestProcessor<T> reqProc)\n        {\n            WriteLog(request.FullUrl, \"QueryTwitterAsync\");\n\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            var handler = new GetMessageHandler(this, parms, request.FullUrl);\n\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                var msg = await client.SendAsync(req, CancellationToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n  \n        internal void SetAuthorizationHeader(HttpMethod method, string url, IDictionary<string, string> parms, HttpRequestMessage req)\n        {\n            var authStringParms = parms.ToDictionary(parm => parm.Key, elm => elm.Value);\n            authStringParms.Add(\"oauth_consumer_key\", Authorizer.CredentialStore.ConsumerKey);\n            authStringParms.Add(\"oauth_token\", Authorizer.CredentialStore.OAuthToken);\n\n            string authorizationString = Authorizer.GetAuthorizationString(method, url, authStringParms);\n\n            req.Headers.Add(\"Authorization\", authorizationString);\n        }\n\n        /// <summary>\n        /// Performs a query on the Twitter Stream.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters.</param>\n        /// <returns>\n        /// Caller expects an JSON formatted string response, but\n        /// real response(s) with streams is fed to the callback.\n        /// </returns>\n        public async Task<string> QueryTwitterStreamAsync(Request request)\n        {\n            WriteLog(request.FullUrl, \"QueryTwitterStreamAsync\");\n\n            var handler = new HttpClientHandler();\n            if (Authorizer.Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Authorizer.Proxy;\n\n            using (StreamingClient = new HttpClient(handler))\n            {\n                StreamingClient.Timeout = TimeSpan.FromMilliseconds(System.Threading.Timeout.Infinite);\n\n                var httpRequest = ConfigureRequest(request);\n\n                var response = await StreamingClient.SendAsync(\n                    httpRequest, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(response).ConfigureAwait(false);\n\n                Stream stream = await CreateStream(response);\n\n                const int CarriageReturn = 0x0D;\n                const int LineFeed = 0x0A;\n\n                var memStr = new MemoryStream();\n                byte[] readByte;\n\n                while (stream.CanRead && !IsStreamClosed)\n                {\n                    readByte = new byte[1];\n                    await stream.ReadAsync(readByte, 0, 1, CancellationToken).ConfigureAwait(false);\n                    byte nextByte = readByte.SingleOrDefault();\n\n                    CancellationToken.ThrowIfCancellationRequested();\n\n                    if (IsStreamClosed) break;\n\n                    if (nextByte == -1) break;\n\n                    if (nextByte != CarriageReturn && nextByte != LineFeed)\n                        memStr.WriteByte(nextByte);\n\n                    if (nextByte == LineFeed)\n                    {\n                        int byteCount = (int)memStr.Length;\n                        byte[] tweetBytes = new byte[byteCount];\n\n                        memStr.Position = 0;\n                        await memStr.ReadAsync(tweetBytes, 0, byteCount, CancellationToken).ConfigureAwait(false);\n\n                        string tweet = Encoding.UTF8.GetString(tweetBytes, 0, byteCount);\n                        var strmContent = new StreamContent(this, tweet);\n\n                        await StreamingCallbackAsync(strmContent).ConfigureAwait(false);\n\n                        memStr.Dispose();\n                        memStr = new MemoryStream();\n                    }\n                }\n            }\n\n            IsStreamClosed = false;\n\n            return \"{}\";\n        }\n \n        HttpRequestMessage ConfigureRequest(Request request)\n        {\n            var httpRequest = new HttpRequestMessage(HttpMethod.Post, request.Endpoint);\n\n            var parameters =\n                string.Join(\"&\",\n                    (from parm in request.RequestParameters\n                     select parm.Name + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());                            \n            var content = new StringContent(parameters, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            httpRequest.Content = content;\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            SetAuthorizationHeader(HttpMethod.Post, request.FullUrl, parms, httpRequest);\n            httpRequest.Headers.Add(\"User-Agent\", UserAgent);\n            httpRequest.Headers.ExpectContinue = false;\n\n            if (Authorizer.SupportsCompression)\n                httpRequest.Headers.AcceptEncoding.TryParseAdd(\"gzip\");\n\n            return httpRequest;\n        }\n \n        async Task<Stream> CreateStream(HttpResponseMessage response)\n        {\n            var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);\n\n            if (Authorizer.SupportsCompression)\n                return new GZipStream(stream, CompressionMode.Decompress);\n            else\n                return stream;\n        }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        public void CloseStream()\n        {\n            IsStreamClosed = true;\n\n            if (StreamingClient != null)\n                StreamingClient.CancelPendingRequests();\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            WriteLog(url, \"QueryTwitterAsync\");\n\n            var multiPartContent = new MultipartFormDataContent();\n            var byteArrayContent = new ByteArrayContent(data);\n            byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n            multiPartContent.Add(byteArrayContent, name, fileName);\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    cleanPostData.Add(pair.Key, pair.Value);\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n                }\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg);\n            }\n        }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        public async Task<string> PostToTwitterAsync<T>(string url, IDictionary<string, string> postData, CancellationToken cancelToken)\n        {\n            WriteLog(url, \"PostToTwitterAsync\");\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            var dataString = new StringBuilder();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    dataString.AppendFormat(\"{0}={1}&\", pair.Key, Url.PercentEncode(pair.Value));\n                    cleanPostData.Add(pair.Key, pair.Value);\n                }\n            }\n\n            var content = new StringContent(dataString.ToString().TrimEnd('&'), Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, content).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg);\n            }\n        }\n  \n        async Task<string> HandleResponseAsync(HttpResponseMessage msg)\n        {\n            LastUrl = msg.RequestMessage.RequestUri;\n\n            ResponseHeaders =\n                (from header in msg.Headers\n                 select new\n                 {\n                     Key = header.Key,\n                     Value = string.Join(\", \", header.Value)\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        void WriteLog(string content, string currentMethod)\n        {\n            if (Log != null)\n            {\n                Log.WriteLine(\"--Log Starts Here--\");\n                Log.WriteLine(\"Query:\" + content);\n                Log.WriteLine(\"Method:\" + currentMethod);\n                Log.WriteLine(\"--Log Ends Here--\");\n                Log.Flush();\n            }\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                StreamingCallbackAsync = null;\n\n                if (Log != null)\n                {\n                    Log.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reactive.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public static class TwitterExtensions\n    {\n        /// <summary>\n        /// Callback is invoked by LINQ to Twitter streaming support,\n        /// allowing you to process each individual response from Twitter.\n        /// For best results, please review the Twitter API streaming guidelines.\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static async Task<List<Streaming>> StartAsync(this IQueryable<Streaming> streaming, Func<StreamContent, Task> callback)\n        {\n            var provider = streaming.Provider as TwitterQueryProvider;\n            provider\n                .Context\n                .TwitterExecutor\n                .StreamingCallbackAsync = callback;\n\n            return await streaming.ToListAsync().ConfigureAwait(false);\n        }\n\n        public static async Task<IObservable<StreamContent>> ToObservableAsync(this IQueryable<Streaming> streaming)\n        {\n            return Observable.Create<StreamContent>(\n                async observer =>\n                {\n                    await streaming.StartAsync(async content =>\n                    {\n                        try\n                        {\n                            observer.OnNext(content);\n                        }\n                        catch (Exception ex)\n                        {\n                            observer.OnError(ex);\n                        }\n                    });\n\n                    observer.OnCompleted();\n                });\n        }\n\n        public static async Task<List<T>> ToListAsync<T>(this IQueryable<T> query)\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<IEnumerable<T>>(query.Expression).ConfigureAwait(false);\n\n            return results.ToList();\n        }\n\n        public static async Task<T> FirstOrDefaultAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.FirstOrDefault();\n        }\n\n        public static async Task<T> FirstAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.First();\n        }\n\n        public static async Task<T> SingleOrDefaultAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.SingleOrDefault();\n        }\n\n        public static async Task<T> SingleAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.Single();\n        }\n\n        /// <summary>\n        /// Enables use of .NET Cancellation Framework for this query.\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static IQueryable<T> WithCancellation<T>(this IQueryable<T> query, CancellationToken cancelToken)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n            provider\n                .Context\n                .TwitterExecutor\n                .CancellationToken = cancelToken;\n\n            return query;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterQueryProvider.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo 8/26/08\n * \n * - Added Context property\n * - Changed Execute to delegate to TwitterContext through Context property\n * *********************************************************/\n\nusing System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// implementation of IQueryProvider, part of the LINQ Provider API\n    /// </summary>\n    public class TwitterQueryProvider : IQueryProvider\n    {\n        /// <summary>\n        /// refers to TwitterContext that calling code instantiated\n        /// </summary>\n        public TwitterContext Context { get; set; }\n\n        /// <summary>\n        /// Non-generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable CreateQuery(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n            try\n            {\n                return (IQueryable)Activator.CreateInstance(\n                    typeof(TwitterQueryable<>)\n                        .MakeGenericType(elementType), \n                    new object[] { this, expression });\n            }\n            catch (TargetInvocationException tie)\n            {\n                throw tie.InnerException;\n            }\n        }\n\n        /// <summary>\n        /// generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <typeparam name=\"TResult\">current object type being worked with</typeparam>\n        /// <param name=\"expression\">expression tree for query</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable<TResult> CreateQuery<TResult>(Expression expression)\n        {\n            return new TwitterQueryable<TResult>(this, expression);\n        }\n\n        /// <summary>\n        /// non-generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <param name=\"expression\">Expression Tree</param>\n        /// <returns>list of results from query</returns>\n        public object Execute(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n\n//#if NETFX_CORE\n            return GetType().GetTypeInfo()\n                .DeclaredMethods.Where(meth => meth.IsGenericMethod && meth.Name == \"Execute\").First()\n                .Invoke(this, new object[] { expression });\n//#else\n//            return GetType()\n//                .GetMethod(\"Execute\", new[] { elementType })\n//                .Invoke(this, new object[] { expression });\n//#endif\n        }\n\n        /// <summary>\n        /// generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <typeparam name=\"TResult\">type of query</typeparam>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>list of results from query</returns>\n        public TResult Execute<TResult>(Expression expression)\n        {\n            bool isEnumerable = \n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n            var methodInfo = Context.GetType().GetTypeInfo().GetDeclaredMethod(\"ExecuteAsync\");\n            MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var exeTask = Task.Run(() => (Task<object>)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable }));\n                return (TResult)exeTask.Result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n\n        public async Task<object> ExecuteAsync<TResult>(Expression expression)\n            where TResult : class\n        {\n            bool isEnumerable =\n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n            var methodInfo = Context.GetType().GetTypeInfo().GetDeclaredMethod(\"ExecuteAsync\");\n            MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var result = await ((Task<object>)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable })).ConfigureAwait(false);\n                return result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitter/TwitterQueryable.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 8/26/08\n * \n * Added constructor to pass TwitterContext to Provider\n * *********************************************************/\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// IQueryable of T part of LINQ to Twitter\n    /// </summary>\n    /// <typeparam name=\"T\">Type to operate on</typeparam>\n    public class TwitterQueryable<T> : IOrderedQueryable<T>\n    {\n        /// <summary>\n        /// init with TwitterContext\n        /// </summary>\n        /// <param name=\"context\"></param>\n        public TwitterQueryable(TwitterContext context)\n        {\n            Provider = new TwitterQueryProvider();\n            Expression = Expression.Constant(this);\n\n            // lets provider reach back to TwitterContext, \n            // where execute implementation resides\n            ((TwitterQueryProvider) Provider).Context = context;\n        }\n\n        /// <summary>\n        /// modified as internal because LINQ to Twitter is Unusable \n        /// without TwitterContext, but provider still needs access\n        /// </summary>\n        /// <param name=\"provider\">IQueryProvider</param>\n        /// <param name=\"expression\">Expression Tree</param>\n        internal TwitterQueryable(\n            TwitterQueryProvider provider,\n            Expression expression)\n        {\n            if (provider == null)\n            {\n                throw new ArgumentNullException(\"provider\");\n            }\n\n            if (expression == null)\n            {\n                throw new ArgumentNullException(\"expression\");\n            }\n\n            if (!typeof(IQueryable<T>).GetTypeInfo().IsAssignableFrom(expression.Type.GetTypeInfo()))\n            {\n                throw new ArgumentOutOfRangeException(\"expression\");\n            }\n\n            Provider = provider;\n            Expression = expression;\n        }\n\n        /// <summary>\n        /// IQueryProvider part of LINQ to Twitter\n        /// </summary>\n        public IQueryProvider Provider { get; private set; }\n        \n        /// <summary>\n        /// expression tree\n        /// </summary>\n        public Expression Expression { get; private set; }\n\n        /// <summary>\n        /// type of T in IQueryable of T\n        /// </summary>\n        public Type ElementType\n        {\n            get { return typeof(T); }\n        }\n\n        /// <summary>\n        /// executes when iterating over collection\n        /// </summary>\n        /// <returns>query results</returns>\n        public IEnumerator<T> GetEnumerator()\n        {\n            var tsk = Task.Run(() => (((TwitterQueryProvider)Provider).ExecuteAsync<IEnumerable<T>>(Expression)));\n            return ((IEnumerable<T>)tsk.Result).GetEnumerator();\n        }\n\n        /// <summary>\n        /// non-generic execution when collection is iterated over\n        /// </summary>\n        /// <returns>query results</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return (Provider.Execute<IEnumerable>(Expression)).GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/LinqToTwitterPcl.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{CAAFF164-A681-4183-BB83-A07B668F7FFC}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter</RootNamespace>\n    <AssemblyName>LinqToTwitterPcl</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <NuGetPackageImportStamp>9e524367</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Account\\Account.cs\" />\n    <Compile Include=\"Account\\AccountAction.cs\" />\n    <Compile Include=\"Account\\TwitterContextAccountCommands.cs\" />\n    <Compile Include=\"Account\\AccountRequestProcessor.cs\" />\n    <Compile Include=\"Account\\AccountType.cs\" />\n    <Compile Include=\"Account\\DeviceType.cs\" />\n    <Compile Include=\"Account\\Settings.cs\" />\n    <Compile Include=\"Account\\SleepTime.cs\" />\n    <Compile Include=\"Account\\Totals.cs\" />\n    <Compile Include=\"Account\\TZInfo.cs\" />\n    <Compile Include=\"Blocks\\BlockingType.cs\" />\n    <Compile Include=\"Blocks\\Blocks.cs\" />\n    <Compile Include=\"Blocks\\TwitterContextBlockCommands.cs\" />\n    <Compile Include=\"Blocks\\BlocksRequestProcessor.cs\" />\n    <Compile Include=\"Common\\BannerSize.cs\" />\n    <Compile Include=\"Common\\Culture.cs\" />\n    <Compile Include=\"Common\\Cursors.cs\" />\n    <Compile Include=\"Common\\Entities\\Entities.cs\" />\n    <Compile Include=\"Common\\Entities\\EntityBase.cs\" />\n    <Compile Include=\"Common\\Entities\\HashTagEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\MediaEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\SymbolEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\UrlEntity.cs\" />\n    <Compile Include=\"Common\\Entities\\UserMentionEntity.cs\" />\n    <Compile Include=\"Common\\Evaluator.cs\" />\n    <Compile Include=\"Common\\ExpressionTreeHelpers.cs\" />\n    <Compile Include=\"Common\\ExpressionTreeModifier.cs\" />\n    <Compile Include=\"Common\\IDList.cs\" />\n    <Compile Include=\"Common\\InvalidQueryException.cs\" />\n    <Compile Include=\"Common\\IRequestProcessor.cs\" />\n    <Compile Include=\"Common\\LinqExtensions.cs\" />\n    <Compile Include=\"Vine\\Vine.cs\" />\n    <Compile Include=\"Vine\\VineRequestProcessor.cs\" />\n    <Compile Include=\"Vine\\VineType.cs\" />\n    <Compile Include=\"Status\\Media.cs\" />\n    <Compile Include=\"Common\\MethodCallExpressionTypeFinder.cs\" />\n    <Compile Include=\"Common\\ParameterFinder.cs\" />\n    <Compile Include=\"Common\\QueryParameter.cs\" />\n    <Compile Include=\"Common\\Request.cs\" />\n    <Compile Include=\"Common\\RequestProcessorHelper.cs\" />\n    <Compile Include=\"Common\\TwitterAsyncResponse.cs\" />\n    <Compile Include=\"Common\\TwitterErrorStatus.cs\" />\n    <Compile Include=\"Common\\TwitterHashResponse.cs\" />\n    <Compile Include=\"Common\\TwitterProgressEventArgs.cs\" />\n    <Compile Include=\"Common\\TwitterQueryException.cs\" />\n    <Compile Include=\"Common\\TypeConversionExtensions.cs\" />\n    <Compile Include=\"Common\\TypeSystem.cs\" />\n    <Compile Include=\"Common\\Utilities.cs\" />\n    <Compile Include=\"Common\\WhereClauseFinder.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessage.cs\" />\n    <Compile Include=\"DirectMessage\\TwitterContextDirectMessageCommands.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessageRequestProcessor.cs\" />\n    <Compile Include=\"DirectMessage\\DirectMessageType.cs\" />\n    <Compile Include=\"Common\\ExpressionVisitor.cs\" />\n    <Compile Include=\"Favorites\\Favorites.cs\" />\n    <Compile Include=\"Favorites\\FavoritesAction.cs\" />\n    <Compile Include=\"Favorites\\TwitterContextFavoritesCommands.cs\" />\n    <Compile Include=\"Favorites\\FavoritesRequestProcessor.cs\" />\n    <Compile Include=\"Favorites\\FavoritesType.cs\" />\n    <Compile Include=\"Friendship\\Friendship.cs\" />\n    <Compile Include=\"Friendship\\FriendshipAction.cs\" />\n    <Compile Include=\"Friendship\\TwitterContextFriendshipCommands.cs\" />\n    <Compile Include=\"Friendship\\FriendshipRequestProcessor.cs\" />\n    <Compile Include=\"Friendship\\FriendshipType.cs\" />\n    <Compile Include=\"Friendship\\Relationship.cs\" />\n    <Compile Include=\"Geo\\Coordinate.cs\" />\n    <Compile Include=\"Geo\\Geo.cs\" />\n    <Compile Include=\"Geo\\GeoAction.cs\" />\n    <Compile Include=\"Geo\\Geometry.cs\" />\n    <Compile Include=\"Geo\\GeoRequestProcessor.cs\" />\n    <Compile Include=\"Geo\\GeoType.cs\" />\n    <Compile Include=\"Geo\\Place.cs\" />\n    <Compile Include=\"Help\\Configuration.cs\" />\n    <Compile Include=\"Help\\Help.cs\" />\n    <Compile Include=\"Help\\HelpRequestProcessor.cs\" />\n    <Compile Include=\"Help\\HelpType.cs\" />\n    <Compile Include=\"Help\\Language.cs\" />\n    <Compile Include=\"Help\\PhotoSize.cs\" />\n    <Compile Include=\"Help\\RateLimits.cs\" />\n    <Compile Include=\"LinqToTwitter\\ITwitterExecute.cs\" />\n    <Compile Include=\"Mute\\Mute.cs\" />\n    <Compile Include=\"Mute\\MuteRequestProcessor.cs\" />\n    <Compile Include=\"Mute\\MuteType.cs\" />\n    <Compile Include=\"Mute\\TwitterContextMuteCommands.cs\" />\n    <Compile Include=\"Net\\GetMessageHandler.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterContext.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterContextEntities.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterErrorHandler.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterExecute.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterExtensions.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterQueryable.cs\" />\n    <Compile Include=\"LinqToTwitter\\TwitterQueryProvider.cs\" />\n    <Compile Include=\"List\\List.cs\" />\n    <Compile Include=\"List\\ListAction.cs\" />\n    <Compile Include=\"List\\TwitterContextListCommands.cs\" />\n    <Compile Include=\"List\\ListRequestProcessor.cs\" />\n    <Compile Include=\"List\\ListType.cs\" />\n    <Compile Include=\"Net\\PostMessageHandler.cs\" />\n    <Compile Include=\"Net\\Url.cs\" />\n    <Compile Include=\"Raw\\Raw.cs\" />\n    <Compile Include=\"Raw\\TwitterContextRawCommands.cs\" />\n    <Compile Include=\"Raw\\RawRequestProcessor.cs\" />\n    <Compile Include=\"Status\\MediaImage.cs\" />\n    <Compile Include=\"Status\\MediaType.cs\" />\n    <Compile Include=\"Streaming\\Messages\\Control.cs\" />\n    <Compile Include=\"Streaming\\Messages\\Delete.cs\" />\n    <Compile Include=\"Streaming\\Messages\\Disconnect.cs\" />\n    <Compile Include=\"Streaming\\Messages\\Event.cs\" />\n    <Compile Include=\"Streaming\\Messages\\ForUser.cs\" />\n    <Compile Include=\"Streaming\\Messages\\FriendsList.cs\" />\n    <Compile Include=\"Streaming\\Messages\\GeoScrub.cs\" />\n    <Compile Include=\"Streaming\\Messages\\Limit.cs\" />\n    <Compile Include=\"Streaming\\Messages\\Stall.cs\" />\n    <Compile Include=\"Streaming\\Messages\\StatusWithheld.cs\" />\n    <Compile Include=\"Streaming\\Messages\\UserWithheld.cs\" />\n    <Compile Include=\"Streaming\\Messages\\TooManyFollows.cs\" />\n    <Compile Include=\"User\\TwitterContextUserCommands.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearch.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchAction.cs\" />\n    <Compile Include=\"SavedSearch\\TwitterContextSavedSearchCommands.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchRequestProcessor.cs\" />\n    <Compile Include=\"SavedSearch\\SavedSearchType.cs\" />\n    <Compile Include=\"Search\\Attitude.cs\" />\n    <Compile Include=\"Search\\ResultType.cs\" />\n    <Compile Include=\"Search\\Search.cs\" />\n    <Compile Include=\"Search\\SearchMetaData.cs\" />\n    <Compile Include=\"Search\\SearchRequestProcessor.cs\" />\n    <Compile Include=\"Search\\SearchType.cs\" />\n    <Compile Include=\"Security\\ApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"Security\\AuthAccessType.cs\" />\n    <Compile Include=\"Security\\AuthorizerBase.cs\" />\n    <Compile Include=\"Security\\Hmac.cs\" />\n    <Compile Include=\"Security\\IAuthorizer.cs\" />\n    <Compile Include=\"Security\\ICredentialStore.cs\" />\n    <Compile Include=\"Security\\IHmac.cs\" />\n    <Compile Include=\"Security\\InMemoryCredentialStore.cs\" />\n    <Compile Include=\"Security\\IOAuth.cs\" />\n    <Compile Include=\"Security\\IHash.cs\" />\n    <Compile Include=\"Security\\OAuth.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Security\\PinAuthorizer.cs\" />\n    <Compile Include=\"Security\\Sha1.cs\" />\n    <Compile Include=\"Security\\SingleUserAuthorizer.cs\" />\n    <Compile Include=\"Security\\SingleUserInMemoryCredentialStore.cs\" />\n    <Compile Include=\"Security\\XAuthAuthorizer.cs\" />\n    <Compile Include=\"Security\\XAuthCredentials.cs\" />\n    <Compile Include=\"Serialization\\Extensions\\DictionaryExtensions.cs\" />\n    <Compile Include=\"Serialization\\Extensions\\LitJsonExtensions.cs\" />\n    <Compile Include=\"Serialization\\Extensions\\StringExtensions.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\IJsonWrapper.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\IOrderedDictionary.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonData.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonException.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonMapper.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonReader.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\JsonWriter.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\Lexer.cs\" />\n    <Compile Include=\"Serialization\\LitJson\\ParserToken.cs\" />\n    <Compile Include=\"Status\\Annotation.cs\" />\n    <Compile Include=\"Status\\Contributor.cs\" />\n    <Compile Include=\"Status\\EmbeddedStatus.cs\" />\n    <Compile Include=\"Status\\EmbeddedStatusAlignment.cs\" />\n    <Compile Include=\"Status\\FilterLevel.cs\" />\n    <Compile Include=\"Status\\Retweet.cs\" />\n    <Compile Include=\"Status\\Status.cs\" />\n    <Compile Include=\"Status\\StatusAction.cs\" />\n    <Compile Include=\"Status\\StatusMetaData.cs\" />\n    <Compile Include=\"Status\\StatusRequestProcessor.cs\" />\n    <Compile Include=\"Status\\StatusType.cs\" />\n    <Compile Include=\"Status\\TwitterContextStatusCommands.cs\" />\n    <Compile Include=\"Streaming\\ControlStream.cs\" />\n    <Compile Include=\"Streaming\\StreamEntityType.cs\" />\n    <Compile Include=\"Streaming\\TwitterContextStreamCommands.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamFollow.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamInfo.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamRequestProcessor.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamType.cs\" />\n    <Compile Include=\"Streaming\\ControlStreamUser.cs\" />\n    <Compile Include=\"Streaming\\IStreamContent.cs\" />\n    <Compile Include=\"Streaming\\StreamContent.cs\" />\n    <Compile Include=\"Streaming\\Streaming.cs\" />\n    <Compile Include=\"Streaming\\StreamingRequestProcessor.cs\" />\n    <Compile Include=\"Streaming\\StreamingType.cs\" />\n    <Compile Include=\"Trends\\Location.cs\" />\n    <Compile Include=\"Trends\\Trend.cs\" />\n    <Compile Include=\"Trends\\TrendRequestProcessor.cs\" />\n    <Compile Include=\"Trends\\TrendType.cs\" />\n    <Compile Include=\"User\\Category.cs\" />\n    <Compile Include=\"User\\ProfileImageSize.cs\" />\n    <Compile Include=\"User\\User.cs\" />\n    <Compile Include=\"User\\UserAction.cs\" />\n    <Compile Include=\"User\\UserRequestProcessor.cs\" />\n    <Compile Include=\"User\\UserType.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Include=\"LinqToTwitter.snk\" />\n    <None Include=\"packages.config\" />\n    <None Include=\"Serialization\\LitJson\\AUTHORS\" />\n    <None Include=\"Serialization\\LitJson\\COPYING\" />\n    <None Include=\"Serialization\\LitJson\\HACKING\" />\n    <None Include=\"Serialization\\LitJson\\README\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"System.IO.Compression\">\n      <HintPath>..\\..\\packages\\Microsoft.Bcl.Compression.3.9.85\\lib\\portable-net45+win8+wp8+wpa81\\System.IO.Compression.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives\">\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core\">\n      <HintPath>..\\..\\packages\\Rx-Core.2.2.5\\lib\\portable-net45+winrt45+wp8+wpa81\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces\">\n      <HintPath>..\\..\\packages\\Rx-Interfaces.2.2.5\\lib\\portable-net45+winrt45+wp8+wpa81\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq\">\n      <HintPath>..\\..\\packages\\Rx-Linq.2.2.5\\lib\\portable-net45+winrt45+wp8+wpa81\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices\">\n      <HintPath>..\\..\\packages\\Rx-PlatformServices.2.2.5\\lib\\portable-net45+winrt45+wp8+wpa81\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/List/List.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Information for a single Twitter List\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class List\n    {\n        public List() \n        {\n            Statuses = new List<Status>();\n        }\n\n        public List(JsonData listJson) : this()\n        {\n            Name = listJson.GetValue<string>(\"name\");\n            FullName = listJson.GetValue<string>(\"full_name\");\n            MemberCount = listJson.GetValue<int>(\"member_count\");\n            Description = listJson.GetValue<string>(\"description\");\n            Mode = listJson.GetValue<string>(\"mode\");\n            Uri = listJson.GetValue<string>(\"uri\");\n            Users = new List<User> { new User(listJson.GetValue<JsonData>(\"user\")) };\n            ListIDResponse = listJson.GetValue<ulong>(\"id\");\n            SubscriberCount = listJson.GetValue<int>(\"subscriber_count\");\n            CreatedAt = listJson.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            Following = listJson.GetValue<bool>(\"following\");\n            SlugResponse = listJson.GetValue<string>(\"slug\");\n        }\n\n        /// <summary>\n        /// Type of List query to perform (Query Filter)\n        /// </summary>\n        public ListType Type { get; set; }\n\n        /// <summary>\n        /// Helps page results (Query Filter)\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// User ID (Query Filter)\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// ScreenName of user for query\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// List ID (Query Filter)\n        /// </summary>\n        public ulong ListID { get; set; }\n\n        /// <summary>\n        /// List ID (Returned from Twitter)\n        /// </summary>\n        public ulong ListIDResponse { get; set; }\n\n        /// <summary>\n        /// Catchword for list (Query Filter)\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Catchword for list (Returned from Twitter)\n        /// </summary>\n        public string SlugResponse { get; set; }\n\n        /// <summary>\n        /// ID of List Owner (Query Filter)\n        /// </summary>\n        public ulong OwnerID { get; set; }\n\n        /// <summary>\n        /// ScreenName of List Owner (Query Filter)\n        /// </summary>\n        public string OwnerScreenName { get; set; }\n\n        /// <summary>\n        /// Max ID to retrieve for statuses (Query Filter)\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Number of statuses per page (Query Filter)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Page number for statuses (Query Filter)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Truncate all user info, except for ID (Query Filter)\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (Query Filter, default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add retweets, in addition to normal tweets (Query Filter)\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Statuses since status ID (Query Filter)\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (Query Filter)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Causes Twitter to return the lists owned by the authenticated user first (Query Filter)\n        /// </summary>\n        public bool Reverse { get; set; }\n\n        /// <summary>\n        /// Short name of List (Returned from Twitter)\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Fully qualified name of list (Returned from Twitter)\n        /// </summary>\n        public string FullName { get; set; }\n\n        /// <summary>\n        /// Description of List's purpose (Returned from Twitter)\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// Number of subscribers (Returned from Twitter)\n        /// </summary>\n        public int SubscriberCount { get; set; }\n\n        /// <summary>\n        /// When the list was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// Is authenticated user following list\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Number of members (Returned from Twitter)\n        /// </summary>\n        public int MemberCount { get; set; }\n\n        /// <summary>\n        /// Uri of List (Returned from Twitter)\n        /// </summary>\n        public string Uri { get; set; }\n\n        /// <summary>\n        /// List mode (Returned from Twitter)\n        /// </summary>\n        public string Mode { get; set; }\n\n        /// <summary>\n        /// Users associated with List (Returned from Twitter)\n        /// </summary>\n        public List<User> Users { get; set; }\n\n        /// <summary>\n        /// Statuses for list (Returned from Twitter)\n        /// </summary>\n        public List<Status> Statuses { get; set; }\n\n        /// <summary>\n        /// Cursors for current request (Returned from Twitter)\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// Only returns lists that belong to authenticated \n        /// user or user identified by ID or ScreenName (Query Filter)\n        /// </summary>\n        public bool FilterToOwnedLists { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/List/ListAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum ListAction\n    {\n        Create,\n\n        Update,\n\n        Delete,\n\n        AddMember,\n\n        AddMemberRange,\n\n        DeleteMember,\n\n        Subscribe,\n\n        Unsubscribe, \n\n        DestroyAll\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/List/ListRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class ListRequestProcessor<T> : \n        IRequestProcessor<T>, \n        IRequestProcessorWantsJson, \n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string TypeParam = \"Type\";\n        const string ListIdOrSlugParam = \"ListIdOrSlug\";\n        const string OwnerIdOrOwnerScreenName = \"OwnerIdOrOwnerScreenName\";\n        const string UserIdOrScreenName = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of list to query\n        /// </summary>\n        internal ListType Type { get; set; }\n\n        /// <summary>\n        /// Helps page results\n        /// </summary>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        internal ulong ListID { get; set; }\n\n        /// <summary>\n        /// Catchword for list\n        /// </summary>\n        internal string Slug { get; set; }\n\n        /// <summary>\n        /// ID of List Owner\n        /// </summary>\n        internal ulong OwnerID { get; set; }\n\n        /// <summary>\n        /// ScreenName of List Owner\n        /// </summary>\n        internal string OwnerScreenName { get; set; }\n\n        /// <summary>\n        /// Statuses since status ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Max ID to retrieve for statuses\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Number of statuses per page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Page number for statuses\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// ScreenName of user for query\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Truncate all user info, except for ID\n        /// </summary>\n        internal bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add retweets, in addition to normal tweets\n        /// </summary>\n        internal bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Only returns lists that belong to authenticated \n        /// user or user identified by ID or ScreenName\n        /// </summary>\n        internal bool FilterToOwnedLists { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Causes Twitter to return the lists owned by the authenticated user first (Query Filter)\n        /// </summary>\n        internal bool Reverse { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<List>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Cursor\",\n                       \"ListID\",\n                       \"Slug\",\n                       \"OwnerID\",\n                       \"OwnerScreenName\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Page\",\n                       \"SinceID\",\n                       \"TrimUser\",\n                       \"IncludeEntities\",\n                       \"IncludeRetweets\",\n                       \"FilterToOwnedLists\",\n                       \"SkipStatus\",\n                       \"Reverse\"\n                   })\n                   .Parameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n\n            if (parameters.ContainsKey(\"UserID\"))\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n                ScreenName = parameters[\"ScreenName\"];\n\n            if (parameters.ContainsKey(\"ListID\"))\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n\n            if (parameters.ContainsKey(\"Slug\"))\n                Slug = parameters[\"Slug\"];\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n\n            if (parameters.ContainsKey(\"MaxID\"))\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n\n            if (parameters.ContainsKey(\"Count\"))\n                Count = int.Parse(parameters[\"Count\"]);\n\n            if (parameters.ContainsKey(\"Page\"))\n                Page = int.Parse(parameters[\"Page\"]);\n\n            if (parameters.ContainsKey(\"SinceID\"))\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n\n            if (parameters.ContainsKey(\"FilterToOwnedLists\"))\n                FilterToOwnedLists = bool.Parse(parameters[\"FilterToOwnedLists\"]);\n\n            if (parameters.ContainsKey(\"Reverse\"))\n                Reverse = bool.Parse(parameters[\"Reverse\"]);\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(TypeParam))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<ListType>(parameters[TypeParam]);\n\n            switch (Type)\n            {\n                case ListType.List:\n                    return BuildListUrl(parameters);\n                case ListType.Show:\n                    return BuildShowUrl(parameters);\n                case ListType.Statuses:\n                    return BuildStatusesUrl(parameters);\n                case ListType.Memberships:\n                    return BuildMembershipsUrl(parameters);\n                case ListType.Subscriptions:\n                    return BuildSubscriptionsUrl(parameters);\n                case ListType.Members:\n                    return BuildMembersUrl(parameters);\n                case ListType.IsMember:\n                    return BuildIsMemberUrl(parameters);\n                case ListType.Subscribers:\n                    return BuildSubscribersUrl(parameters);\n                case ListType.IsSubscriber:\n                    return BuildIsSubcribedUrl(parameters);\n                case ListType.Ownerships:\n                    return BuildOwnershipsUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid ListType\", TypeParam);\n            }\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve all of a user's lists.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n            if (!(parameters.ContainsKey(\"UserID\") && UserID != 0) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIDOrScreenNameParam);\n\n            var req = new Request(BaseUrl + \"lists/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"Reverse\"))\n            {\n                Reverse = bool.Parse(parameters[\"Reverse\"]);\n                urlParams.Add(new QueryParameter(\"reverse\", parameters[\"Reverse\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve info on a specific List.\n        /// </summary>\n        /// <param name=\"parameters\">Contains ID for List</param>\n        /// <returns>URL for List query</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n                (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + @\"lists/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting statuses for a list.\n        /// </summary>\n        /// <param name=\"parameters\">Contains ListID and optionally MaxID, SinceID, Count, and Page</param>\n        /// <returns>URL for statuses query</returns>\n        Request BuildStatusesUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n                (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/statuses.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n                // TODO: twitter seems to be ignoring the documented \"count=\", but does honor \"per_page=\"\n                // for now, send BOTH\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting list memberships.\n        /// </summary>\n        /// <param name=\"parameters\">NoChange required</param>\n        /// <returns>URL for memberships query</returns>\n        Request BuildMembershipsUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIdOrScreenName);\n\n            var req = new Request(BaseUrl + \"lists/memberships.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"FilterToOwnedLists\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"FilterToOwnedLists\"))\n                {\n                    FilterToOwnedLists = true;\n                    urlParams.Add(new QueryParameter(\"filter_to_owned_lists\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting list subscriptions.\n        /// </summary>\n        /// <param name=\"parameters\">NoChange required</param>\n        /// <returns>URL for subscriptions query</returns>\n        Request BuildSubscriptionsUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIdOrScreenName);\n\n            var req = new Request(BaseUrl + \"lists/subscriptions.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting a list of members for a list\n        /// </summary>\n        /// <param name=\"parameters\">Contains ListID and optionally Cursor</param>\n        /// <returns>URL for members query</returns>\n        Request BuildMembersUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/members.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n\t\t\tif (parameters.ContainsKey(\"Count\"))\n\t\t\t{\n\t\t\t\tCount = int.Parse(parameters[\"Count\"]);\n\t\t\t\turlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n\t\t\t}\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url that determines if a user is a member of a list.\n        /// </summary>\n        /// <param name=\"parameters\">Contains ID and ListID</param>\n        /// <returns>URL for list members query</returns>\n        Request BuildIsMemberUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/members/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL to retrieve subscribers of a list.\n        /// </summary>\n        /// <param name=\"parameters\"></param>\n        /// <returns>URL for list subscribers query</returns>\n        Request BuildSubscribersUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/subscribers.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build URL to see if user is subscribed to a list.\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ID and ListID</param>\n        /// <returns>URL for IsSubscriber query</returns>\n        Request BuildIsSubcribedUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/subscribers/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build URL to see if user is subscribed to a list.\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ID and ListID</param>\n        /// <returns>URL for IsSubscriber query</returns>\n        Request BuildOwnershipsUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n\n            var req = new Request(BaseUrl + \"lists/ownerships.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List.\n        /// </summary>\n        /// <param name=\"responseJson\">Json Twitter response</param>\n        /// <returns>List of List</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData listJson = JsonMapper.ToObject(responseJson);\n\n            List<List> lists;\n            switch (Type)\n            {\n                case ListType.List:\n                case ListType.Memberships:\n                case ListType.Subscriptions:\n                case ListType.Ownerships:\n                    lists = HandleMultipleListsResponse(listJson);\n                    break;\n                case ListType.Show:\n                    lists = HandleSingleListResponse(listJson);\n                    break;\n                case ListType.Statuses:\n                    lists = HandleStatusesResponse(listJson);\n                    break;\n                case ListType.Members:\n                case ListType.Subscribers:\n                    lists = HandleMultipleUsersResponse(listJson);\n                    break;\n                case ListType.IsMember:\n                case ListType.IsSubscriber:\n                    lists = HandleSingleUserResponse(listJson);\n                    break;\n                default:\n                    lists = new List<List>();\n                    break;\n            }\n\n            var cursors = new Cursors(listJson);\n\n            foreach (var list in lists)\n            {\n                list.Type = Type;\n                list.Cursor = Cursor;\n                list.UserID = UserID;\n                list.ListID = ListID;\n                list.Slug = Slug;\n                list.OwnerID = OwnerID;\n                list.OwnerScreenName = OwnerScreenName;\n                list.MaxID = MaxID;\n                list.Count = Count;\n                list.Page = Page;\n                list.ScreenName = ScreenName;\n                list.SinceID = SinceID;\n                list.TrimUser = TrimUser;\n                list.IncludeEntities = IncludeEntities;\n                list.IncludeRetweets = IncludeRetweets;\n                list.FilterToOwnedLists = FilterToOwnedLists;\n                list.CursorMovement = cursors;\n                list.SkipStatus = SkipStatus;\n                list.Reverse = Reverse;\n            }\n\n            return lists.AsEnumerable().OfType<T>().ToList();\n        }\n  \n        private List<List> HandleSingleListResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List(listJson)\n            };\n\n            return lists;\n        }\n  \n        List<List> HandleMultipleListsResponse(JsonData listJson)\n        {\n            JsonData listsEnumerable =\n                listJson.GetValue<JsonData>(\"lists\") ?? listJson; \n\n            var lists =\n                (from JsonData list in listsEnumerable\n                 select new List(list))\n                .ToList();\n\n            return lists;\n        }\n  \n        List<List> HandleSingleUserResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Users = new List<User> { new User(listJson) }\n                }\n            };\n\n            return lists;\n        }\n\n        List<List> HandleMultipleUsersResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Users =\n                        (from JsonData user in listJson.GetValue<JsonData>(\"users\")\n                         select new User(user))\n                        .ToList()\n                }\n            };\n\n            return lists;\n        }\n\n        private List<List> HandleStatusesResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Statuses =\n                        (from JsonData status in listJson\n                         select new Status(status))\n                        .ToList()\n                }\n            };\n\n            return lists;\n        }\n\n        /// <summary>\n        /// Transforms json into an action response.\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            List list = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                JsonData listJson = JsonMapper.ToObject(responseJson);\n\n                switch ((ListAction)theAction)\n                {\n                    case ListAction.Create:\n                    case ListAction.Update:\n                    case ListAction.Delete:\n                    case ListAction.AddMember:\n                    case ListAction.AddMemberRange:\n                    case ListAction.DeleteMember:\n                    case ListAction.Subscribe:\n                    case ListAction.Unsubscribe:\n                    case ListAction.DestroyAll:\n                        list = new List(listJson);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\n                            \"The default case of ProcessActionResult should never execute because a Type must be specified.\");\n                }\n            }\n\n            return list.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/List/ListType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Available types of queries for the Twitter Lists API\n    /// </summary>\n    public enum ListType\n    {\n        /// <summary>\n        /// Show specified list\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show lists user is subscribed to\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Show tweet timeline for members of the specified list\n        /// </summary>\n        Statuses,\n\n        /// <summary>\n        /// Show lists that specified user is a member of\n        /// </summary>\n        Memberships,\n\n        /// <summary>\n        /// Shows the lists a user is subscribed to\n        /// </summary>\n        Subscriptions,\n\n        /// <summary>\n        /// Members of the specified list\n        /// </summary>\n        Members,\n\n        /// <summary>\n        /// Check if a user is a member of the specified list\n        /// </summary>\n        IsMember,\n\n        /// <summary>\n        /// List the users subscribed to the specified list\n        /// </summary>\n        Subscribers,\n\n        /// <summary>\n        /// Check if a user subscribes to the specified list\n        /// </summary>\n        IsSubscriber,\n\n        /// <summary>\n        /// Get lists belonging to the specified user\n        /// </summary>\n        Ownerships\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/List/TwitterContextListCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        public const string ListIDOrSlugParam = \"ListIdOrSlug\";\n        public const string OwnerIDOrOwnerScreenNameParam = \"OwnerIdOrOwnerScreenName\";\n        public const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// Creates a new list.\n        /// </summary>\n        /// <param name=\"listName\">name of list</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <returns>List info for new list</returns>\n        public async Task<List> CreateListAsync(string listName, string mode, string description, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(listName))\n                throw new ArgumentException(\"listName is required.\", \"listName\");\n\n            var createUrl = BaseUrl + \"lists/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(\n                    createUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"name\", listName },\n                        { \"mode\", mode },\n                        { \"description\", description }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Create);\n        }\n\n        /// <summary>\n        /// Modifies an existing list.\n        /// </summary>\n        /// <param name=\"listID\">ID of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <returns>List info for modified list</returns>\n        public async Task<List> UpdateListAsync(ulong listID, string slug, string name, ulong ownerID, string ownerScreenName, string mode, string description, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var updateListUrl = BaseUrl + \"lists/update.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(\n                    updateListUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID.ToString() },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID.ToString() },\n                        { \"owner_screen_name\", ownerScreenName },\n                        { \"mode\", mode },\n                        { \"description\", description },\n                        { \"name\", name }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Update);\n        }\n\n        /// <summary>\n        /// Deletes an existing list.\n        /// </summary>\n        /// <param name=\"listID\">ID or slug of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for deleted list</returns>\n        public async Task<List> DeleteListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"listID is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var deleteUrl = BaseUrl + \"lists/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(\n                    deleteUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID.ToString() },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID.ToString() },\n                        { \"owner_screen_name\", ownerScreenName }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Delete);\n        }\n        \n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to</returns>\n        public async Task<List> AddMemberToListAsync(ulong userID, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await AddMemberToListAsync(userID, null, listID, slug, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n        \n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to</returns>\n        public async Task<List> AddMemberToListAsync(string screenName, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await AddMemberToListAsync(0, screenName, listID, slug, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to</returns>\n        async Task<List> AddMemberToListAsync(ulong userID, string screenName, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName is required.\", UserIDOrScreenNameParam);\n\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var addMemberUrl = BaseUrl + \"lists/members/create.json\";\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userID != 0)\n                parameters.Add(\"user_id\", userID.ToString());\n            if (!string.IsNullOrWhiteSpace(screenName))\n                parameters.Add(\"screen_name\", screenName);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(addMemberUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.AddMember);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        public async Task<List> AddMemberRangeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, List<string> screenNames, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (screenNames == null || screenNames.Count == 0)\n                throw new ArgumentException(\"screenNames is required. Check to see if the argument is null or the List<string> is empty.\", \"screenNames\");\n\n            if (screenNames != null && screenNames.Count > 100)\n                throw new ArgumentException(\"Max screenNames is 100 at a time.\", \"screenNames\");\n\n            return await AddMemberRangeToListAsync(listID, slug, ownerID, ownerScreenName, userIDs: null, screenNames: screenNames, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        public async Task<List> AddMemberRangeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, List<ulong> userIDs, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userIDs == null || userIDs.Count == 0)\n                throw new ArgumentException(\"userIDs is required. Check to see if the argument is null or the List<ulong> is empty.\", \"userIDs\");\n\n            if (userIDs != null && userIDs.Count > 100)\n                throw new ArgumentException(\"Max user IDs is 100 at a time.\", \"userIDs\");\n\n            return await AddMemberRangeToListAsync(listID, slug, ownerID, ownerScreenName, userIDs, screenNames: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        async Task<List> AddMemberRangeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, IEnumerable<ulong> userIDs, List<string> screenNames, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var addMemberRangeUrl = BaseUrl + \"lists/members/create_all.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userIDs != null && userIDs.Any())\n                parameters.Add(\"user_id\", string.Join(\",\", userIDs.Select(id => id.ToString(CultureInfo.InvariantCulture)).ToArray()));\n            if (screenNames != null && screenNames.Any())\n                parameters.Add(\"screen_name\", string.Join(\",\", screenNames));\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(addMemberRangeUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.AddMember);\n        }\n\n        /// <summary>\n        /// Removes a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member removed from</returns>\n        public async Task<List> DeleteMemberFromListAsync(ulong userID, string screenName, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName is required.\", UserIDOrScreenNameParam);\n\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var deleteUrl = BaseUrl + \"lists/members/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userID != 0)\n                parameters.Add(\"user_id\", userID.ToString());\n            if (!string.IsNullOrWhiteSpace(screenName))\n                parameters.Add(\"screen_name\", screenName);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(deleteUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.DeleteMember);\n        }\n\n        /// <summary>\n        /// Adds a user as a list subscriber.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscribed to</returns>\n        public async Task<List> SubscribeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var subscribeUrl = BaseUrl + \"lists/subscribers/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(subscribeUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Subscribe);\n        }\n\n        /// <summary>\n        /// Removes a user as a list subscriber.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public async Task<List> UnsubscribeFromListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var unsubscribeUrl = BaseUrl + \"lists/subscribers/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(unsubscribeUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Unsubscribe);\n        }\n                \n        /// <summary>\n        /// Deletes membership for a comma-separated list of users.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"userIds\">List of user IDs of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public async Task<List> DeleteMemberRangeFromListAsync(ulong listID, string slug, List<ulong> userIDs, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DeleteMemberRangeFromListAsync(listID, slug, userIDs, null, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes membership for a comma-separated list of users.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"screenNames\">List of screen names of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public async Task<List> DeleteMemberRangeFromListAsync(ulong listID, string slug, List<string> screenNames, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DeleteMemberRangeFromListAsync(listID, slug, null, screenNames, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes membership for a comma-separated list of users.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"userIds\">List of user IDs of users to remove from list membership.</param>\n        /// <param name=\"screenNames\">List of screen names of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        async Task<List> DeleteMemberRangeFromListAsync(ulong listID, string slug, List<ulong> userIDs, List<string> screenNames, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (listID == 0 && !string.IsNullOrWhiteSpace(slug) && \n                ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            if ((userIDs != null && userIDs.Count > 100) || \n                (screenNames != null && screenNames.Count > 100))\n                throw new ArgumentException(\"You can only remove 100 members at a Time.\", \"userIDs\");\n\n            var destroyAllUrl = BaseUrl + \"lists/members/destroy_all.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userIDs != null && userIDs.Any())\n                parameters.Add(\"user_id\", string.Join(\",\", userIDs.Select(id => id.ToString(CultureInfo.InvariantCulture)).ToArray()));\n            if (screenNames != null && screenNames.Any())\n                parameters.Add(\"screen_name\", string.Join(\",\", screenNames));\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<List>(destroyAllUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.DestroyAll);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Mute/Mute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Mute\n    {\n        /// <summary>\n        /// Type of mute query to perform.\n        /// </summary>\n        public MuteType Type { get; set; }\n\n        /// <summary>\n        /// Allows you to page through query results\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// Set to true for Twitter to return entity metadata with users last tweet.\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Set to true to remove tweet from user entities.\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// List of ids that are muted, populated by IDs query\n        /// </summary>\n        public List<ulong> IDList { get; set; }\n\n        /// <summary>\n        /// List of User that are muted, populated by List query\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Mute/MuteRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter User requests.\n    /// </summary>\n    public class MuteRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        internal MuteType Type { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Add entities to results\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Mute>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Cursor\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<MuteType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case MuteType.IDs:\n                    return BuildIDsUrl(parameters);\n                case MuteType.List:\n                    return BuildListUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"mutes/users/ids.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"mutes/users/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            List<Mute> muteList = null;\n\n            JsonData mutesJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case MuteType.IDs:\n                    muteList = HandleIdsResponse(mutesJson);\n                    break;\n                case MuteType.List:\n                    muteList = HandleMultipleUserResponse(mutesJson);\n                    break;\n                default:\n                    muteList = new List<Mute>();\n                    break;\n            }\n\n            foreach(var mute in muteList)\n            {\n                mute.Type = Type;\n                mute.Cursor = Cursor;\n                mute.IncludeEntities = IncludeEntities;\n                mute.SkipStatus = SkipStatus;\n            }\n\n            return muteList.OfType<T>().ToList();\n        }\n\n        List<Mute> HandleIdsResponse(JsonData idsJson)\n        {\n            var ids = idsJson.GetValue<JsonData>(\"ids\");\n            var muteList = new List<Mute>\n            {\n                new Mute\n                {\n                    IDList = \n                        (from JsonData id in ids\n                         select (ulong)id)\n                        .ToList(),\n                    Users = new List<User>(),\n                    CursorMovement = new Cursors(idsJson)\n                }\n            };\n            return muteList;\n        }\n  \n        List<Mute> HandleMultipleUserResponse(JsonData userJson)\n        {\n            var users = userJson.GetValue<JsonData>(\"users\");\n            List<Mute> muteList = new List<Mute>\n            {\n                new Mute\n                {\n                    IDList = new List<ulong>(),\n                    Users =\n                        (from JsonData user in users\n                         select new User(user))\n                        .ToList(),\n                    CursorMovement = new Cursors(userJson)\n                }\n            };\n\n            return muteList;\n        }\n\n        List<User> HandleSingleUserResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Mute/MuteType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum MuteType\n    {\n        /// <summary>\n        /// IDs of friends the authorizing user has muted.\n        /// </summary>\n        IDs,\n\n        /// <summary>\n        /// User entities of friends the authorizing user has muted.\n        /// </summary>\n        List\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Mute/TwitterContextMuteCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Mutes a user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> MuteAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is required\");\n\n            var muteParams = new Dictionary<string, string> { { \"screen_name\", screenName } };\n\n            return await MuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Mutes a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> MuteAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID can't be 0 - no user has this ID\", \"userID\");\n\n            var muteParams = new Dictionary<string, string> { { \"user_id\", userID.ToString() } };\n\n            return await MuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<User> MuteAsync(IDictionary<string, string> muteParams, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var muteUrl = BaseUrl + \"mutes/users/create.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor\n                    .PostToTwitterAsync<User>(muteUrl, muteParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// UnMutes a user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> UnMuteAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is required\");\n\n            var muteParams = new Dictionary<string, string> { { \"screen_name\", screenName } };\n\n            return await UnMuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// UnMutes a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> UnMuteAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID can't be 0 - no user has this ID\", \"userID\");\n\n            var muteParams = new Dictionary<string, string> { { \"user_id\", userID.ToString() } };\n\n            return await UnMuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<User> UnMuteAsync(IDictionary<string, string> muteParams, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var muteUrl = BaseUrl + \"mutes/users/destroy.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor\n                    .PostToTwitterAsync<User>(muteUrl, muteParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Net/GetMessageHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class GetMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> parameters;\n        readonly string url;\n\n        public GetMessageHandler(TwitterExecute exe, IDictionary<string, string> parameters, string url)\n        {\n            this.exe = exe;\n            this.parameters = parameters;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(HttpMethod.Get, url, parameters, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            if (SupportsAutomaticDecompression)\n                AutomaticDecompression = DecompressionMethods.GZip;\n            if (exe.Authorizer.Proxy != null && SupportsProxy)\n                Proxy = exe.Authorizer.Proxy;\n\n            //if (exe.ReadWriteTimeout != 0)\n            //    ReadWriteTimeout = exe.ReadWriteTimeout;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Net/PostMessageHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class PostMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> postData;\n        readonly string url;\n\n        public PostMessageHandler(TwitterExecute exe, IDictionary<string, string> postData, string url)\n        {\n            this.exe = exe;\n            this.postData = postData;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(HttpMethod.Post, url, postData, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            request.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true };\n\n            if (SupportsAutomaticDecompression)\n                AutomaticDecompression = DecompressionMethods.GZip;\n            if (exe.Authorizer.Proxy != null && SupportsProxy)\n                Proxy = exe.Authorizer.Proxy;\n\n            //if (exe.ReadWriteTimeout != 0)\n            //    ReadWriteTimeout = exe.ReadWriteTimeout;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Net/Url.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Text;\n\nnamespace LinqToTwitter.Net\n{\n    public class Url\n    {\n        /// <summary>\n        /// Implements Percent Encoding according to RFC 3986\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>Encoded string</returns>\n        public static string PercentEncode(string value)\n        {\n            const string ReservedChars = @\"`!@#$^&*()+=,:;'?/|\\[] \";\n\n            var result = new StringBuilder();\n\n            if (string.IsNullOrWhiteSpace(value))\n                return string.Empty;\n\n            var escapedValue = Uri.EscapeDataString(value);\n\n            // Windows Phone doesn't escape all the ReservedChars properly, so we have to do it manually.\n            foreach (char symbol in escapedValue)\n            {\n                if (ReservedChars.IndexOf(symbol) != -1)\n                {\n                    result.Append('%' + String.Format(\"{0:X2}\", (int)symbol).ToUpper());\n                }\n                else\n                {\n                    result.Append(symbol);\n                }\n            }\n\n            return result.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter\")]\n[assembly: AssemblyDescription(\"Open Source LINQ Provider for the Twitter Micro-Blogging Service (Portable Class Library)\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LINQ to Twitter\")]\n[assembly: AssemblyCopyright(\"Copyright © 2008-2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: NeutralResourcesLanguage(\"en\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"3.2.0.*\")]\n[assembly: AssemblyFileVersion(\"3.2.0\")]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitterPcl.Tests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Raw/Raw.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Allows working at a low level with Twitter API\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Raw\n    {\n        /// <summary>\n        /// Query string with segments and parameters.  \n        /// Do not include BaseUrl as it will be prefixed \n        /// to this value. You're resposible for ensuring\n        /// the format of this part of the query is correct,\n        /// including encoding parameters.\n        /// </summary>\n        public string QueryString { get; set; }\n\n        /// <summary>\n        /// Raw result, returned directly from Twitter.\n        /// </summary>\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Raw/RawRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Raw requests, allowing free-form url and query strings.\n    /// </summary>\n    public class RawRequestProcessor<T> : \n        IRequestProcessor<T>,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Actual query string sent to twitter\n        /// </summary>\n        internal string QueryString { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        internal string Result { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Raw>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"QueryString\"\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryStringParam = \"QueryString\";\n            if (parameters == null || !parameters.ContainsKey(\"QueryString\"))\n                throw new ArgumentNullException(QueryStringParam, \"QueryString parameter is required.\");\n\n            QueryString = parameters[\"QueryString\"].Trim();\n\n            if (QueryString == string.Empty)\n                throw new ArgumentException(\"Blank QueryString isn't valid.\", QueryStringParam);\n\n            string url = BaseUrl.TrimEnd('/') + \"/\" + QueryString.TrimStart('/');\n            var parts = url.Split('?');\n            var req = new Request(parts[0]);\n            var urlParams = req.RequestParameters;\n\n            if (parts.Length == 2)\n            {\n                var qsParms =\n                    (from pair in parts[1].Split('&')\n                     let keyVal = pair.Split('=')\n                     select new\n                     {\n                         Key = keyVal[0],\n                         Val = keyVal[1]\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Val);\n\n                foreach (KeyValuePair<string, string> parm in qsParms)\n                    urlParams.Add(new QueryParameter(parm.Key, parm.Value));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms response into List of Raw\n        /// </summary>\n        /// <param name=\"response\">Twitter response</param>\n        /// <returns>List of Raw</returns>\n        public virtual List<T> ProcessResults(string response)\n        {\n            var rawList = new List<Raw>\n            {\n                new Raw\n                {\n                    QueryString = QueryString,\n                    Response = response\n                }\n            };\n\n            return rawList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var raw = new Raw\n            {\n                Response = responseJson\n            };\n\n            return raw.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Raw/TwitterContextRawCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/home_timeline.json\" for a home timeline query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <returns>Twitter JSON response.</returns>\n        public async Task<string> ExecuteRawAsync(string queryString, Dictionary<string, string> parameters, CancellationToken cancelToken = default(CancellationToken))\n        {\n            string rawUrl = BaseUrl.TrimEnd('/') + \"/\" + queryString.TrimStart('/');\n\n            RawResult = await TwitterExecutor.PostToTwitterAsync<Raw>(rawUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return RawResult;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/SavedSearch/SavedSearch.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// info for query and retrieval of saved searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SavedSearch\n    {\n        public SavedSearch() { }\n        public SavedSearch(JsonData searchJson)\n        {\n            Query = searchJson.GetValue<string>(\"query\");\n            Name = searchJson.GetValue<string>(\"name\");\n            Position = searchJson.GetValue<int>(\"position\");\n            IDResponse = searchJson.GetValue<ulong>(\"id\");\n            CreatedAt = searchJson.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n        }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        public SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Search item ID.\n        /// </summary>\n        public ulong IDResponse { get; set; }\n\n        /// <summary>\n        /// name of search\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// search query contents\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// position in search list\n        /// </summary>\n        public int Position { get; set; }\n\n        /// <summary>\n        /// when search was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/SavedSearch/SavedSearchAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum SavedSearchAction\n    {\n        Create,\n\n        Destroy\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/SavedSearch/SavedSearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    ///Processes Twitter Saved Search requests.\n    /// </summary>\n    public class SavedSearchRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        internal SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<SavedSearch>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", \"Type\");\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<SavedSearchType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    return BuildSearchesUrl();\n                case SavedSearchType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// construct a base show url\n        /// </summary>\n        /// <param name=\"url\">base show url</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required for a Saved Search Show query.\", \"ID\");\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n\n            var url = BaseUrl + \"saved_searches/show/\" + ID + \".json\";\n\n            return new Request(url);\n        }\n\n        /// <summary>\n        /// return a saved searches url\n        /// </summary>\n        /// <returns>saved search url</returns>\n        Request BuildSearchesUrl()\n        {\n            return new Request(BaseUrl + \"saved_searches/list.json\");\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of SavedSearch\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData searchJson = JsonMapper.ToObject(responseJson);\n\n            List<SavedSearch> savedSearchList = null;\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    savedSearchList =\n                        (from JsonData search in searchJson\n                         select new SavedSearch(search))\n                        .ToList();\n                    break;\n                case SavedSearchType.Show:\n                    savedSearchList = new List<SavedSearch> { new SavedSearch(searchJson) };\n                    break;\n                default:\n                    break;\n            }\n\n            foreach (var search in savedSearchList)\n            {\n                search.Type = Type;\n                search.ID = ID;\n            };\n\n            return savedSearchList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData searchJson = JsonMapper.ToObject(responseJson);\n\n            var search = new SavedSearch(searchJson);\n\n            return search.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/SavedSearch/SavedSearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of saved search queries\n    /// </summary>\n    public enum SavedSearchType\n    {\n        /// <summary>\n        /// query all searches by logged in user\n        /// </summary>\n        Searches,\n\n        /// <summary>\n        /// query for a single search by the search id\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/SavedSearch/TwitterContextSavedSearchCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"query\">Search query to add</param>\n        /// <returns>SavedSearch object</returns>\n        public async Task<SavedSearch> CreateSavedSearchAsync(string query, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(query))\n                throw new ArgumentException(\"query is required.\", \"query\");\n\n            var savedSearchUrl = BaseUrl + \"saved_searches/create.json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<SavedSearch>(\n                    savedSearchUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"query\", query }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, SavedSearchAction.Create);\n        }\n\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"id\">ID of saved search</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>SavedSearch object</returns>\n        public async Task<SavedSearch> DestroySavedSearchAsync(ulong id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"Invalid Saved Search ID: \" + id, \"id\");\n\n            var savedSearchUrl = BaseUrl + \"saved_searches/destroy/\" + id + \".json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<SavedSearch>(\n                    savedSearchUrl,\n                    new Dictionary<string, string>(),\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            SavedSearch result = reqProc.ProcessActionResult(RawResult, SavedSearchAction.Destroy);\n            result.ID = id;\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Search/Attitude.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Search for tweets with different types of attitudes\n    /// </summary>\n    [Flags]\n    public enum Attitude\n    {\n        /// <summary>\n        /// Happy\n        /// </summary>\n        Positive = 0x01,\n\n        /// <summary>\n        /// Sad\n        /// </summary>\n        Negative = 0x02,\n\n        /// <summary>\n        /// Curious\n        /// </summary>\n        Question = 0x04\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Search/ResultType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of results to return in a search\n    /// </summary>\n    public enum ResultType\n    {\n        /// <summary>\n        /// Combination of popular and recent\n        /// </summary>\n        Mixed,\n\n        /// <summary>\n        /// Real-time results\n        /// </summary>\n        Recent,\n\n        /// <summary>\n        /// Most popular tweets\n        /// </summary>\n        Popular\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Search/Search.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// for performing Twitter searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Search\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        public SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        public string SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        public string Locale { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        public DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// first status ID\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        public string GeoCode { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result requested (mixed, recent, or popular)\n        /// </summary>\n        public ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// Include entities in results\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        public List<Status> Statuses { get; set; }\n\n        /// <summary>\n        /// Tweet metadata returned from search\n        /// </summary>\n        public SearchMetaData SearchMetaData { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Search/SearchMetaData.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SearchMetaData\n    {\n        public SearchMetaData() { }\n        public SearchMetaData(JsonData metaData)\n        {\n            CompletedIn = metaData.GetValue<decimal>(\"completed_in\");\n            MaxID = metaData.GetValue<string>(\"max_id_str\").GetULong(0ul);\n            NextResults = metaData.GetValue<string>(\"next_results\");\n            Query = metaData.GetValue<string>(\"query\");\n            RefreshUrl = metaData.GetValue<string>(\"refresh_url\");\n            Count = metaData.GetValue<int>(\"count\");\n            SinceID = metaData.GetValue<string>(\"since_id_str\").GetULong(0ul);\n        }\n\n        /// <summary>\n        /// Processing time for search\n        /// </summary>\n        public decimal CompletedIn { get; set; }\n\n        /// <summary>\n        /// Max ID returned in search\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Query string to get next page\n        /// </summary>\n        public string NextResults { get; set; }\n\n        /// <summary>\n        /// Original Query\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Query string to refresh this search\n        /// </summary>\n        public string RefreshUrl { get; set; }\n\n        /// <summary>\n        /// Number of results per page to return on next query\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Don't return tweets older than this ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Search/SearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes search queries\n    /// </summary>\n    class SearchRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        private SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        private string Query { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        private string GeoCode { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        private string SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        private string Locale { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result (mixed, recent, or popular)\n        /// </summary>\n        private ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        private int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        private DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        private ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Include entities in results (default: false)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// for getting tweets with ID that is less than or equal to this value\n        /// </summary>\n        private ulong MaxID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Search>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Query\",\n                       \"GeoCode\",\n                       \"SearchLanguage\",\n                       \"Locale\",\n                       \"ResultType\",\n                       \"Count\",\n                       \"Until\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"IncludeEntities\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"Type\"))\n                Type = RequestProcessorHelper.ParseQueryEnumType<SearchType>(parameters[\"Type\"]);\n            else\n                throw new ArgumentException(\"Type is required\", \"Type\");\n\n            return BuildSearchUrlParameters(parameters, \"search/tweets.json\");\n        }\n\n        /// <summary>\n        /// appends parameters for Search request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        private Request BuildSearchUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\") && !string.IsNullOrWhiteSpace(parameters[\"Query\"]))\n            {\n                Query = parameters[\"Query\"];\n\n                urlParams.Add(new QueryParameter(\"q\", Query));\n            }\n            else\n            {\n                throw new ArgumentNullException(\"Query\", \"Query filter in where clause is required.\");\n            }\n\n            if (parameters.ContainsKey(\"GeoCode\"))\n            {\n                GeoCode = parameters[\"GeoCode\"];\n                urlParams.Add(new QueryParameter(\"geocode\" , GeoCode));\n            }\n\n            if (parameters.ContainsKey(\"SearchLanguage\"))\n            {\n                SearchLanguage = parameters[\"SearchLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", SearchLanguage));\n            }\n\n            if (parameters.ContainsKey(\"Locale\"))\n            {\n                Locale = parameters[\"Locale\"];\n                urlParams.Add(new QueryParameter(\"locale\", Locale));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Until\"))\n            {\n                Until = DateTime.Parse(parameters[\"Until\"]).Date;\n                urlParams.Add(new QueryParameter(\"until\",  Until.ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", MaxID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ResultType\"))\n            {\n                ResultType = RequestProcessorHelper.ParseQueryEnumType<ResultType>(parameters[\"ResultType\"]);\n                urlParams.Add(new QueryParameter(\"result_type\" , ResultType.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Search\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Search> search;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                search = new List<Search> { new Search() };\n            }\n            else\n            {\n                var searchResult = JsonSerialize(responseJson);\n\n                search = new List<Search> { searchResult };\n            }\n\n            return search.OfType<T>().ToList();\n        }\n\n        Search JsonSerialize(string responseJson)\n        {\n            JsonData search = JsonMapper.ToObject(responseJson);\n\n            var searchResult = new Search\n            {\n                Type = Type,\n                GeoCode = GeoCode,\n                Count = Count,\n                Query = Query,\n                MaxID = MaxID,\n                SinceID = SinceID,\n                SearchLanguage = SearchLanguage,\n                Locale = Locale,\n                Until = Until.Date,\n                ResultType = ResultType,\n                IncludeEntities = IncludeEntities,\n                Statuses =\n                    (from JsonData result in search[\"statuses\"]\n                     select new Status(result))\n                    .ToList(),\n                SearchMetaData = \n                    new SearchMetaData(search.GetValue<JsonData>(\"search_metadata\"))\n            };\n\n            return searchResult;\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Search/SearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of search\n    /// </summary>\n    public enum SearchType\n    {\n        /// <summary>\n        /// implemented mostly for consistency\n        /// with the rest of the API\n        /// </summary>\n        Search\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/ApplicationOnlyAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class ApplicationOnlyAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public string BasicToken { get; set; }\n        public string BearerToken { get; set; }\n        public string OAuth2Token { get; set; }\n        public string OAuth2InvalidateToken { get; set; }\n\n        public ApplicationOnlyAuthorizer()\n        {\n            OAuth2Token = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateToken = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public async Task AuthorizeAsync()\n        {\n            EncodeCredentials();\n            await GetBearerTokenAsync().ConfigureAwait(false);\n        }\n\n        public async Task InvalidateAsync()\n        {\n            EncodeCredentials();\n\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2InvalidateToken);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"access_token=\" + BearerToken, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg);\n\n                string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n  \n        async Task GetBearerTokenAsync()\n        {\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2Token);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"grant_type=client_credentials\", Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg);\n\n                string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n\n        internal void EncodeCredentials()\n        {\n            string encodedConsumerKey = Url.PercentEncode(CredentialStore.ConsumerKey);\n            string encodedConsumerSecret = Url.PercentEncode(CredentialStore.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n        public override string GetAuthorizationString(HttpMethod method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            return \"Bearer \" + BearerToken;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/AuthAccessType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Restricts access type\n    /// </summary>\n    public enum AuthAccessType\n    {\n        /// <summary>\n        /// Default - use account settings access\n        /// </summary>\n        NoChange,\n\n        /// <summary>\n        /// Restrict to read-only\n        /// </summary>\n        Read,\n\n        /// <summary>\n        /// Read/write access\n        /// </summary>\n        Write\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/AuthorizerBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Security;\nusing LinqToTwitter.Net;\nusing System.Text;\n\nnamespace LinqToTwitter\n{\n    public class AuthorizerBase\n    {\n        /// <summary>\n        /// URL for OAuth Request Tokens\n        /// </summary>\n        public string OAuthRequestTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth authorization\n        /// </summary>\n        public string OAuthAuthorizeUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth Access Tokens\n        /// </summary>\n        public string OAuthAccessTokenUrl { get; set; }\n\n        /// <summary>\n        /// Get/Set Credentials\n        /// </summary>\n        public ICredentialStore CredentialStore { get; set; }\n\n        /// <summary>\n        /// Force the user to enter their name/password when authorizing\n        /// </summary>\n        public bool ForceLogin { get; set; }\n\n        /// <summary>\n        /// Overrides read/write settings for application registered with Twitter\n        /// </summary>\n        public AuthAccessType AccessType { get; set; }\n\n        /// <summary>\n        /// Optional name to prefill when user visits the Twitter authorization screen\n        /// </summary>\n        public string PreFillScreenName { get; set; }\n\n        /// <summary>\n        /// User-Agent header string sent to Twitter to represent your application. Defaults to LINQ to Twitter.\n        /// </summary>\n        public string UserAgent { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app.\n        /// </summary>\n        public string Callback { get; set; }\n\n        public IWebProxy Proxy { get; set; }\n\n        public bool SupportsCompression { get; set; }\n\n        protected string ParseVerifierFromResponseUrl(string responseUrl)\n        {\n            string[] keyValPairs = new Uri(responseUrl).Query.TrimStart('?').Split('&');\n\n            string verifier =\n                (from keyValPair in keyValPairs\n                 let pair = keyValPair.Split('=')\n                 let key = pair[0]\n                 let val = pair.Length == 2 ? pair[1] : string.Empty\n                 where key == \"oauth_verifier\"\n                 select val)\n                .SingleOrDefault();\n\n            return verifier;\n        }\n\n        IDictionary<string, string> parameters;\n        public IDictionary<string, string> Parameters\n        {\n            get \n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    parameters.Add(\"oauth_consumer_key\", CredentialStore.ConsumerKey);\n                    parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n                }\n\n                return parameters; \n            }\n        }\n\n        public AuthorizerBase() : this(false, AuthAccessType.NoChange, string.Empty) { }\n\n        public AuthorizerBase(bool forceLogin, AuthAccessType accessType, string prefillScreenName)\n        {\n            ForceLogin = forceLogin;\n            AccessType = accessType;\n            PreFillScreenName = prefillScreenName;\n            SupportsCompression = true;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = TwitterContext.DefaultUserAgent;\n\n            OAuthRequestTokenUrl = \"https://api.twitter.com/oauth/request_token\";\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authorize\";\n            OAuthAccessTokenUrl = \"https://api.twitter.com/oauth/access_token\";\n        }\n\n        public async Task GetRequestTokenAsync(string callback)\n        {\n            if (string.IsNullOrWhiteSpace(callback))\n                throw new ArgumentNullException(\"callback\", \"callback is required.\");\n\n            Parameters.Add(\"oauth_callback\", EncodeToProtectMultiByteCharUrls(callback));\n            Parameters.Remove(\"oauth_token\");\n\n            if (AccessType != AuthAccessType.NoChange)\n                Parameters.Add(\"x_auth_access_type\", AccessType.ToString().ToLower());\n\n            string response = await HttpGetAsync(OAuthRequestTokenUrl, Parameters);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to request token response from Twitter.\");\n\n            UpdateCredentialsFromRequestTokenResponse(response);\n        }\n  \n        string EncodeToProtectMultiByteCharUrls(string callback)\n        {\n            return callback == \"oob\" ? \"oob\" : new Uri(callback).AbsoluteUri;\n        }\n\n        public string PrepareAuthorizeUrl(bool forceLogin)\n        {\n            if (CredentialStore.OAuthToken == null)\n                throw new InvalidOperationException(\"OAuthToken not set. Call GetRequestTokenAsync first and verify that OAuthToken is set.\");\n\n            string forceLoginParamString = forceLogin ? \"&force_login=true\" : \"\";\n\n            string preFillScreenNameParamString = \n                !string.IsNullOrWhiteSpace(PreFillScreenName) ? \"&screen_name=\" + PreFillScreenName : \"\";\n\n            return string.Format(\n                \"{0}?oauth_token={1}{2}{3}\", \n                OAuthAuthorizeUrl, CredentialStore.OAuthToken, \n                forceLoginParamString, preFillScreenNameParamString);\n        }\n\n        public async Task GetAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpGetAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n            \n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        public async Task PostAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"x_auth_mode\") && !accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required, unless using xAuth.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpPostAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n\n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        void UpdateCredentialsFromRequestTokenResponse(string response)\n        {\n            CredentialStore.OAuthToken =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 where pair[0] == \"oauth_token\"\n                 select pair[1])\n                .SingleOrDefault();\n\n            Parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n        }\n\n        void UpdateCredentialsWithAccessTokenResponse(string response)\n        {\n            var responseParams =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 select new\n                 {\n                     Key = pair[0],\n                     Value = pair[1]\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            if (responseParams[\"oauth_token\"] != null)\n                CredentialStore.OAuthToken = responseParams[\"oauth_token\"];\n\n            if (responseParams[\"oauth_token_secret\"] != null)\n                CredentialStore.OAuthTokenSecret = responseParams[\"oauth_token_secret\"];\n\n            if (responseParams[\"screen_name\"] != null)\n                CredentialStore.ScreenName = responseParams[\"screen_name\"];\n\n            if (responseParams[\"user_id\"] != null)\n            {\n                ulong userID = 0;\n                ulong.TryParse(responseParams[\"user_id\"], out userID);\n                CredentialStore.UserID = userID;\n            }\n        }\n\n        internal async Task<string> HttpGetAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var req = new HttpRequestMessage(HttpMethod.Get, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Get, oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        internal async Task<string> HttpPostAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var postData =\n                (from keyValPair in parameters\n                 where !keyValPair.Key.StartsWith(\"oauth\")\n                 select keyValPair)\n                .ToDictionary(pair => pair.Key, pair => pair.Value);\n\n            var req = new HttpRequestMessage(HttpMethod.Post, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Post, oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var paramString =\n                string.Join(\"&\",\n                    (from parm in postData\n                     select parm.Key + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());\n            var content = new StringContent(paramString, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            req.Content = content;\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n \n        public virtual string GetAuthorizationString(HttpMethod method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            string consumerSecret = CredentialStore.ConsumerSecret ?? \"\";\n            string oAuthTokenSecret = CredentialStore.OAuthTokenSecret ?? \"\";\n            string authorizationString =\n                new OAuth().GetAuthorizationString(\n                    method.ToString(), oauthUrl, parameters, consumerSecret, oAuthTokenSecret);\n            return authorizationString;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/Hmac.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter.Security\n{\n    /// <summary>\n    /// Implements RFC 2104\n    /// </summary>\n    public class Hmac : IHmac\n    {\n        const int Blocksize = 64;\n\n        readonly IHash hash;\n\n        public Hmac(IHash hash)\n        {\n            this.hash = hash;\n        }\n\n        public byte[] Sign(byte[] key, byte[] msg)\n        {\n            byte[] initializedKey = InitializeKey(key);\n\n            byte[] oKeyPad = new byte[Blocksize];\n            byte[] iKeyPad = new byte[Blocksize];\n\n            for (int i = 0; i < Blocksize; i++)\n            {\n                oKeyPad[i] = (byte)(0x5c ^ initializedKey[i]);\n                iKeyPad[i] = (byte)(0x36 ^ initializedKey[i]);\n            }\n\n            byte[] innerHash = hash.Compute(Concat(iKeyPad, msg));\n            byte[] outerHash = hash.Compute(Concat(oKeyPad, innerHash));\n\n            return outerHash;\n        }\n\n        byte[] InitializeKey(byte[] key)\n        {\n            byte[] initializedKey = null;\n\n            if (key.Length > Blocksize)\n            {\n                byte[] hashedKey = hash.Compute(key);\n                byte[] padding = Enumerable.Repeat<byte>(0x00, Blocksize - hashedKey.Length).ToArray();\n                initializedKey = Concat(hashedKey, padding);\n            }\n            else if (key.Length < Blocksize)\n            {\n                byte[] padding = Enumerable.Repeat<byte>(0x00, Blocksize - key.Length).ToArray();\n                initializedKey = Concat(key, padding);\n            }\n            else\n            {\n                initializedKey = key;\n            }\n\n            return initializedKey;\n        }\n\n        byte[] Concat(byte[] first, byte[] second)\n        {\n            byte[] combinedBytes = new byte[first.Length + second.Length];\n            Buffer.BlockCopy(first, 0, combinedBytes, 0, first.Length);\n            Buffer.BlockCopy(second, 0, combinedBytes, first.Length, second.Length);\n            return combinedBytes;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/IAuthorizer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public interface IAuthorizer\n    {\n        Task AuthorizeAsync();\n\n        string UserAgent { get; set; }\n\n        ICredentialStore CredentialStore { get; set; }\n\n        IWebProxy Proxy { get; set; }\n\n        bool SupportsCompression { get; set; }\n\n        string GetAuthorizationString(HttpMethod method, string oauthUrl, IDictionary<string, string> parameters);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/ICredentialStore.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public interface ICredentialStore\n    {\n        /// <summary>\n        /// Key provided by Twitter for your application\n        /// </summary>\n        string ConsumerKey { get; set; }\n\n        /// <summary>\n        /// Secret provided by Twitter for your application\n        /// </summary>\n        string ConsumerSecret { get; set; }\n\n        /// <summary>\n        /// Token provided by Twitter for making request\n        /// </summary>\n        string OAuthToken { get; set; }\n\n        /// <summary>\n        /// Unique access token for a user\n        /// </summary>\n        string OAuthTokenSecret { get; set; }\n\n        /// <summary>\n        /// Twitter screen name\n        /// </summary>\n        string ScreenName { get; set; }\n\n        /// <summary>\n        /// Twitter user ID\n        /// </summary>\n        ulong UserID { get; set; }\n\n        /// <summary>\n        /// Does this CredentialStore have all credentials populated?\n        /// </summary>\n        bool HasAllCredentials();\n\n        /// <summary>\n        /// Populates this with credential values from storage\n        /// </summary>\n        Task LoadAsync();\n\n        /// <summary>\n        /// Saves credentials from this to storage\n        /// </summary>\n        Task StoreAsync();\n\n        /// <summary>\n        /// Removes credentials from storage\n        /// </summary>\n        Task ClearAsync();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/IHash.cs",
    "content": "namespace LinqToTwitter.Security\n{\n    public interface IHash\n    {\n        byte[] Compute(byte[] key);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/IHmac.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace LinqToTwitter.Security\n{\n    public interface IHmac\n    {\n        byte[] Sign(byte[] key, byte[] msg);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/IOAuth.cs",
    "content": "using System.Collections.Generic;\n\nnamespace LinqToTwitter.Security\n{\n    public interface IOAuth\n    {\n        string GetAuthorizationString(string method, string url, IDictionary<string, string> parameters, string consumerSecret, string oAuthTokenSecret);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/InMemoryCredentialStore.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// These credentials just reside in memory and only\n    /// have a lifetime matching their containing AppDomain.\n    /// </summary>\n    public class InMemoryCredentialStore : ICredentialStore\n    {\n        public virtual string ConsumerKey { get; set; }\n\n        public virtual string ConsumerSecret { get; set; }\n\n        public virtual string OAuthToken { get; set; }\n\n        public virtual string OAuthTokenSecret { get; set; }\n\n        public virtual string ScreenName { get; set; }\n\n        public virtual ulong UserID { get; set; }\n\n        public bool HasAllCredentials()\n        {\n            return\n                !string.IsNullOrWhiteSpace(ConsumerKey) &&\n                !string.IsNullOrWhiteSpace(ConsumerSecret) &&\n                !string.IsNullOrWhiteSpace(OAuthToken) &&\n                !string.IsNullOrWhiteSpace(OAuthTokenSecret);\n        }\n\n#pragma warning disable 1998\n        \n        //\n        // by definition, this type doesn't work \n        // with a data store other than memory.\n        //\n\n        public virtual async Task LoadAsync()\n        {\n        }\n\n        public virtual async Task StoreAsync() { }\n\n        public virtual async Task ClearAsync() { }\n\n#pragma warning restore 1998\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/OAuth.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing LinqToTwitter.Net;\n\nnamespace LinqToTwitter.Security\n{\n    public class OAuth : IOAuth\n    {\n        public string GetAuthorizationString(string method, string url, IDictionary<string, string> parameters, string consumerSecret, string oAuthTokenSecret)\n        {\n            string encodedAndSortedString = BuildEncodedSortedString(parameters);\n            string signatureBaseString = BuildSignatureBaseString(method, url, encodedAndSortedString);\n            string signingKey = BuildSigningKey(consumerSecret, oAuthTokenSecret);\n            string signature = CalculateSignature(signingKey, signatureBaseString);\n            string authorizationHeader = BuildAuthorizationHeaderString(encodedAndSortedString, signature);\n\n            return authorizationHeader;\n        }\n  \n        const string OAuthVersion = \"1.0\";\n        const string OAuthSignatureMethod = \"HMAC-SHA1\";\n        internal void AddMissingOAuthParameters(IDictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"oauth_timestamp\"))\n                parameters.Add(\"oauth_timestamp\", GetTimestamp());\n\n            if (!parameters.ContainsKey(\"oauth_nonce\"))\n                parameters.Add(\"oauth_nonce\", GenerateNonce());\n\n            if (!parameters.ContainsKey(\"oauth_version\"))\n                parameters.Add(\"oauth_version\", OAuthVersion);\n\n            if (!parameters.ContainsKey(\"oauth_signature_method\"))\n                parameters.Add(\"oauth_signature_method\", OAuthSignatureMethod);     \n        }\n\n        internal string BuildEncodedSortedString(IDictionary<string, string> parameters)\n        {\n            AddMissingOAuthParameters(parameters);\n\n            return\n                string.Join(\"&\",\n                    (from parm in parameters\n                     orderby parm.Key\n                     select parm.Key + \"=\" + Url.PercentEncode(parameters[parm.Key]))\n                    .ToArray());\n        }\n\n        internal string BuildSignatureBaseString(string method, string url, string encodedStringParameters)\n        {\n            int paramsIndex = url.IndexOf('?');\n\n            string urlWithoutParams = paramsIndex >= 0 ? url.Substring(0, paramsIndex) : url;\n\n            return string.Join(\"&\", new string[]\n            {\n                method.ToUpper(),\n                Url.PercentEncode(urlWithoutParams),\n                Url.PercentEncode(encodedStringParameters)\n            });\n        }\n\n        internal string BuildSigningKey(string consumerSecret, string oAuthTokenSecret)\n        {\n            return string.Format(\n                CultureInfo.InvariantCulture, \"{0}&{1}\", \n                Url.PercentEncode(consumerSecret),\n                Url.PercentEncode(oAuthTokenSecret));\n        }\n\n        internal string CalculateSignature(string signingKey, string signatureBaseString)\n        {\n            byte[] key = Encoding.UTF8.GetBytes(signingKey);\n            byte[] msg = Encoding.UTF8.GetBytes(signatureBaseString);\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            return Convert.ToBase64String(hash);\n        }\n\n        internal string BuildAuthorizationHeaderString(string encodedAndSortedString, string signature)\n        {\n            string[] allParms = (encodedAndSortedString + \"&oauth_signature=\" + Url.PercentEncode(signature)).Split('&');\n            string allParmsString =\n                string.Join(\", \",\n                    (from parm in allParms\n                     let keyVal = parm.Split('=')\n                     where parm.StartsWith(\"oauth\") || parm.StartsWith(\"x_auth\")\n                     orderby keyVal[0]\n                     select keyVal[0] + \"=\\\"\" + keyVal[1] + \"\\\"\")\n                    .ToList());\n            return \"OAuth \" + allParmsString;\n        }\n\n        const long UnixEpocTicks = 621355968000000000L;\n        internal string GetTimestamp()\n        {\n            long ticksSinceUnixEpoc = DateTime.UtcNow.Ticks - UnixEpocTicks;\n            double secondsSinceUnixEpoc = new TimeSpan(ticksSinceUnixEpoc).TotalSeconds;\n            return Math.Floor(secondsSinceUnixEpoc).ToString(CultureInfo.InvariantCulture);\n        }\n\n        internal virtual string GenerateNonce()\n        {\n            return new Random().Next(111111, 9999999).ToString(CultureInfo.InvariantCulture);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/PinAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class PinAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// PIN-based authorization requires a 7-digit pin that is provided by Twitter.\n        /// The user must copy that PIN and give it back to the program to use as a verifier\n        /// in getting the final access token from Twitter.  You should write code (a lambda)\n        /// that allows the user to provide this pin that this code will return.\n        /// </summary>\n        public Func<string> GetPin { get; set; }\n\n        /// <summary>\n        /// Action to redirect user to Twitter authorization page\n        /// </summary>\n        public Action<string> GoToTwitterAuthorization { get; set; }\n\n        public PinAuthorizer()\n            : base(false, AuthAccessType.NoChange, null) { }\n\n        public PinAuthorizer(bool forceLogin)\n            : base(forceLogin, AuthAccessType.NoChange, null) { }\n\n        public PinAuthorizer(bool forceLogin, AuthAccessType accessType) \n            : base(forceLogin, accessType, null) { }\n\n        public PinAuthorizer(bool forceLogin, AuthAccessType accessType, string preFillScreenName)\n            : base(forceLogin, accessType, preFillScreenName) { }\n\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            if (GetPin == null)\n                throw new InvalidOperationException(\"You must provide an Func<string> delegate/lambda for GetPin.\");\n\n            await GetRequestTokenAsync(\"oob\").ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n\n            string verifier = GetPin();\n\n            var accessTokenParams = new Dictionary<string, string>();\n            accessTokenParams.Add(\"oauth_verifier\", verifier);\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n\n        public async Task BeginAuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            await GetRequestTokenAsync(\"oob\").ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n        }\n\n\n        public async Task CompleteAuthorizeAsync(string pin)\n        {\n            var accessTokenParams = new Dictionary<string, string>();\n            accessTokenParams.Add(\"oauth_verifier\", pin);\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/Sha1.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter.Security\n{\n    /// <summary>\n    /// Implements RFC 3174\n    /// </summary>\n    public class Sha1 : IHash\n    {\n        const int HashSize = 20;\n\n        const uint K0 = 0x5A827999;\n        const uint K1 = 0x6ED9EBA1;\n        const uint K2 = 0x8F1BBCDC;\n        const uint K3 = 0xCA62C1D6;\n\n        class Context\n        {\n            public uint A, B, C, D, E;\n\n            public int MessageBlockIndex;\n            public readonly byte[] MessageBlock = new byte[64];\n\n            public readonly uint[] IntermediateHash = \n            {\n                0x67452301,\n                0xEFCDAB89,\n                0x98BADCFE,\n                0x10325476,\n                0xC3D2E1F0\n            };\n\n            public uint LengthHigh;\n            public uint LengthLow;\n        }\n\n        uint CircularShift(int bits, uint word)\n        {\n            return (((word) << (bits)) | ((word) >> (32 - (bits))));\n        }\n\n        public byte[] Compute(byte[] message)\n        {\n            var ctx = new Context();\n\n            foreach(var msgByte in message)\n            {\n                ctx.MessageBlock[ctx.MessageBlockIndex++] = (byte)(msgByte & 0xFF);\n\n                ctx.LengthLow += 8;\n                if (ctx.LengthLow == 0)\n                    ctx.LengthHigh++;\n\n                if (ctx.MessageBlockIndex == 64)\n                    ProcessMessageBlock(ctx);\n            }\n\n            PadMessage(ctx);\n\n            var msgDigest = new byte[HashSize];\n\n            for (int i = 0; i < HashSize; i++)\n                msgDigest[i] = (byte)(ctx.IntermediateHash[i >> 2] >> 8 * (3 - (i & 0x03)));\n\n            return msgDigest;\n        }\n  \n        void ProcessMessageBlock(Context ctx)\n        {\n            uint[] w = new uint[80];\n\n            for (int t = 0; t < 16; t++)\n            {\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 0] << 24;\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 1] << 16;\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 2] << 08;\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 3];\n            }\n\n            for (int t = 16; t < 80; t++)\n                w[t] = CircularShift(1, w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16]);\n\n            ctx.A = ctx.IntermediateHash[0];\n            ctx.B = ctx.IntermediateHash[1];\n            ctx.C = ctx.IntermediateHash[2];\n            ctx.D = ctx.IntermediateHash[3];\n            ctx.E = ctx.IntermediateHash[4];\n\n            for (int t = 0; t < 20; t++)\n                RotateWordBuffers(ctx, (b, c, d) => (b & c) | ((~b) & d), w[t], K0);\n\n            for (int t = 20; t < 40; t++)\n                RotateWordBuffers(ctx, (b, c, d) => b ^ c ^ d, w[t], K1);\n\n            for (int t = 40; t < 60; t++)\n                RotateWordBuffers(ctx, (b, c, d) => (b & c) | (b & d) | (c & d), w[t], K2);\n\n            for (int t = 60; t < 80; t++)\n                RotateWordBuffers(ctx, (b, c, d) => b ^ c ^ d, w[t], K3);\n\n            ctx.IntermediateHash[0] += ctx.A;\n            ctx.IntermediateHash[1] += ctx.B;\n            ctx.IntermediateHash[2] += ctx.C;\n            ctx.IntermediateHash[3] += ctx.D;\n            ctx.IntermediateHash[4] += ctx.E;\n\n            ctx.MessageBlockIndex = 0;\n        }\n  \n        void RotateWordBuffers(Context ctx, Func<uint, uint, uint, uint> f, uint wt, uint kt)\n        {\n            uint temp = CircularShift(5, ctx.A) + (f(ctx.B, ctx.C, ctx.D)) + ctx.E + wt + kt;\n\n            ctx.E = ctx.D;\n            ctx.D = ctx.C;\n            ctx.C = CircularShift(30, ctx.B);\n            ctx.B = ctx.A;\n            ctx.A = temp;\n        }\n\n        void PadMessage(Context ctx)\n        {\n            if (ctx.MessageBlockIndex > 55)\n            {\n                ctx.MessageBlock[ctx.MessageBlockIndex++] = 0x80;\n\n                while (ctx.MessageBlockIndex < 64)\n                    ctx.MessageBlock[ctx.MessageBlockIndex++] = 0;\n\n                ProcessMessageBlock(ctx);\n\n                while (ctx.MessageBlockIndex < 56)\n                    ctx.MessageBlock[ctx.MessageBlockIndex++] = 0;\n            }\n            else\n            {\n                ctx.MessageBlock[ctx.MessageBlockIndex++] = 0x80;\n\n                while (ctx.MessageBlockIndex < 56)\n                    ctx.MessageBlock[ctx.MessageBlockIndex++] = 0;\n            }\n\n            ctx.MessageBlock[56] = (byte)(ctx.LengthHigh >> 24);\n            ctx.MessageBlock[57] = (byte)(ctx.LengthHigh >> 16);\n            ctx.MessageBlock[58] = (byte)(ctx.LengthHigh >> 08);\n            ctx.MessageBlock[59] = (byte) ctx.LengthHigh;\n            ctx.MessageBlock[60] = (byte)(ctx.LengthLow >> 24);\n            ctx.MessageBlock[61] = (byte)(ctx.LengthLow >> 16);\n            ctx.MessageBlock[62] = (byte)(ctx.LengthLow >> 08);\n            ctx.MessageBlock[63] = (byte) ctx.LengthLow;\n\n            ProcessMessageBlock(ctx);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/SingleUserAuthorizer.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class SingleUserAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// Not required. Since you've already provided all 4 tokens, you don't need to call this.\n        /// </summary>\n        public async Task AuthorizeAsync()\n        {\n            if (!CredentialStore.HasAllCredentials())\n                throw new InvalidOperationException(\"SingleUserAuthorizer needs pre-set credentials; don't call Authorize unless you've set all four credentials.\");\n\n            await Task.Delay(0).ConfigureAwait(false);\n\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/SingleUserInMemoryCredentialStore.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Maps the twitter-provided credentials to the in memory credentials \n    /// for in-memory use.\n    /// </summary>\n    public class SingleUserInMemoryCredentialStore : InMemoryCredentialStore\n    {\n        // The properties provided by Twitter are named AccessToken and\n        // AccessTokenSecret, we need to map them to what the \n        // IOAuthCredentials interface uses.\n        public virtual string AccessToken { get; set; }\n        public virtual string AccessTokenSecret { get; set; }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return AccessToken;\n            }\n            set\n            {\n                AccessToken = value;\n            }\n        }\n\n        public override string OAuthTokenSecret {\n            get\n            {\n                return AccessTokenSecret;\n            }\n            set\n            {\n                AccessTokenSecret = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/XAuthAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class XAuthAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public async Task AuthorizeAsync()\n        {\n            var xauthCredentials = CredentialStore as XAuthCredentials;\n            var postData = new Dictionary<string, string>\n            {\n                {\"x_auth_username\", xauthCredentials.UserName},\n                {\"x_auth_password\", xauthCredentials.Password},\n                {\"x_auth_mode\", \"client_auth\"}\n            };\n\n            await PostAccessTokenAsync(postData).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Security/XAuthCredentials.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Used for XAuthAuthorization, which requires permission from Twitter before using\n    /// </summary>\n    public class XAuthCredentials : InMemoryCredentialStore\n    {\n        /// <summary>\n        /// Twitter User Name\n        /// </summary>\n        public string UserName { get; set; }\n\n        /// <summary>\n        /// Twitter Password\n        /// </summary>\n        public string Password { get; set; }\n\n        //public override void Load(string credentialString)\n        //{\n        //    base.Load(credentialString);\n\n        //    string[] credentials = credentialString.Split(',');\n\n        //    UserName = credentials[4];\n        //    Password = credentials[5];\n        //}\n\n        //public override string ToString()\n        //{\n        //    return base.ToString() + \",\" + UserName + \",\" + Password;\n        //}\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/Extensions/DictionaryExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\n//#if !SILVERLIGHT && !CLIENT_PROFILE && !NETFX_CORE && !L2T_PCL\n//using System.Web.Script.Serialization;\n//#endif\n\nnamespace LinqToTwitter.Json\n{\n    public static class DictionaryExtensions\n    {\n        public static DateTime GetValue(this IDictionary<string, object> dictionary, string key, DateTime defaultValue)\n        {\n            var value = dictionary.GetValue(key, String.Empty);\n            return value.GetDate(defaultValue);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key)\n        {\n            return dictionary.GetValue(key, default(T));\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key, T defaultValue)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value) && value != null)\n                return (T)value;\n\n            return defaultValue;\n        }\n\n        public static ulong GetULong(this IDictionary<string, object> dictionary, string key)\n        {\n            object value;\n            if (dictionary.TryGetValue(key, out value))\n            {\n                return (ulong)(int)value;\n            }\n\n            return 0UL;\n        }\n\n//        public static T GetNested<T>(this IDictionary<string, object> dictionary, string key, JavaScriptSerializer serializer)\n//            where T : class\n//        {\n//            var nestedObject = dictionary.GetValue<object>(key, null);\n\n//            if (nestedObject != null)\n//            {\n//                return serializer.ConvertToType<T>(nestedObject);\n//            }\n\n//            return default(T);\n//        }\n\n//        public static IEnumerable<T> GetNestedEnumeration<T>(this IDictionary<string, object> dictionary, string key, JavaScriptSerializer serializer)\n//            where T : class\n//        {\n//#if SILVERLIGHT || CLIENT_PROFILE\n//            var array = dictionary.GetValue<List<object>>(key, null);\n//#else\n//            var array = dictionary.GetValue<ArrayList>(key, null);\n//#endif\n\n//            if (array != null)\n//            {\n//                var elements = (from JsonData element in array\n//                                select serializer.ConvertToType<T>(element));\n//                return elements;\n//            }\n\n//            return Enumerable.Empty<T>();\n//        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/Extensions/LitJsonExtensions.cs",
    "content": "﻿using System;\nusing LitJson;\n\nnamespace LinqToTwitter.Serialization.Extensions\n{\n    public static class LitJsonExtensions\n    {\n        public static void WriteJsonData(this JsonWriter writer, JsonData jsonData)\n        {\n            var reader = new JsonReader(jsonData.ToJson());\n\n            while (reader.Read())\n            {\n                switch (reader.Token)\n                {\n                    case JsonToken.None:\n                        break;\n                    case JsonToken.ObjectStart:\n                        writer.WriteObjectStart();\n                        break;\n                    case JsonToken.PropertyName:\n                        writer.WritePropertyName(reader.Value.ToString());\n                        break;\n                    case JsonToken.ObjectEnd:\n                        writer.WriteObjectEnd();\n                        break;\n                    case JsonToken.ArrayStart:\n                        writer.WriteArrayStart();\n                        break;\n                    case JsonToken.ArrayEnd:\n                        writer.WriteArrayEnd();\n                        break;\n                    case JsonToken.Int:\n                        writer.Write((int)reader.Value);\n                        break;\n                    case JsonToken.Long:\n                        writer.Write((long)reader.Value);\n                        break;\n                    case JsonToken.ULong:\n                        writer.Write((ulong)reader.Value);\n                        break;\n                    case JsonToken.Double:\n                        writer.Write((double)reader.Value);\n                        break;\n                    case JsonToken.String:\n                        writer.Write((string)reader.Value);\n                        break;\n                    case JsonToken.Boolean:\n                        writer.Write((bool)reader.Value);\n                        break;\n                    case JsonToken.Null:\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/Extensions/StringExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\n\nnamespace LinqToTwitter.Json\n{\n    public static class StringExtensions\n    {\n        public static bool GetBool(this string val)\n        {\n            return GetBool(val, false);\n        }\n\n        public static bool GetBool(this string val, bool defaultValue /* = false*/)\n        {\n            bool result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !bool.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static int GetInt(this string val)\n        {\n            return GetInt(val, 0);\n        }\n\n        public static int GetInt(this string val, int defaultValue /* = 0*/)\n        {\n            int result;\n            return String.IsNullOrWhiteSpace(val) ||\n                !int.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static long GetLong(this string val)\n        {\n            return GetLong(val, 0L);\n        }\n\n        public static long GetLong(this string val, long defaultValue /* = 0*/)\n        {\n            long result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !long.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static ulong GetULong(this string val)\n        {\n            return GetULong(val, 0ul);\n        }\n\n        public static ulong GetULong(this string val, ulong defaultValue /* = 0*/)\n        {\n            ulong result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !ulong.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this string val)\n        {\n            return GetDouble(val, 0d);\n        }\n\n        public static double GetDouble(this string val, double defaultValue /* = 0*/)\n        {\n            double result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !double.TryParse(val, NumberStyles.Any, CultureInfo.InvariantCulture, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n\n        public static DateTime GetDate(this string date)\n        {\n            return GetDate(date, DateTime.MinValue);\n        }\n\n        public static readonly string[] DateFormats = { \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n                                                         \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n                                                         \"yyyy-MM-dd HH:mm:ss\",\n                                                         \"yyyy-MM-dd HH:mm\"};\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            DateTime result;\n\n            return String.IsNullOrWhiteSpace(date) ||\n                !DateTime.TryParseExact(date,\n                        DateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string date, DateTime defaultValue)\n        {\n            var epochSeconds = date.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n            \n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/AUTHORS",
    "content": "Leonardo Boshell  --  leonardoboshell@users.sourceforge.net\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/COPYING",
    "content": "All the source code and related files distributed with this software have\nbeen dedicated to the public domain by the authors.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute\nthe software, either in source code form or as a compiled binary, for any\npurpose, commercial or non-commercial, and by any means.\n\nThank you for reading this notice. Inspired by the enlightened words used by\nthe authors of another software project, a very popular one, also in the\npublic domain, here's a blessing:\n\n  May you find forgiveness for yourself and forgive others.\n  May you experience and share the gift of uncoditional love.\n  May you see light, wherever the illusion of darkness appears.\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/HACKING",
    "content": "HACKING LitJSON\n\nThis software is dedicated to the public domain. This means that you may\nuse, modify and distribute the code freely without having to ask for\npermissions of any kind and without the need to follow any particular rules\nor conventions.\n\nIf, however, you want to contribute your own changes back to the original\nauthors to be redistributed along with any future versions, please note that\nthe following two requirements do apply:\n\na) Your source code should be written in the same coding style used in the\n   original files. This means that any code submitted to be included in\n   the project has to follow the conventions already in use regarding\n   indentation, spaces, casing, file headers and so on.\n\n   When in doubt, you may submit your contributions as close to the style as\n   you can, and they can be edited before inclusion if necessary.\n\nb) In order to keep this software in the public domain, all new contributors\n   are asked to dedicate their contributions to the public domain. If you\n   want to send a patch or enhancement for possible inclusion, please\n   accompany the patch with the following statement:\n\n     The author or authors of this code dedicate any and all copyright\n     interest in this code to the public domain. We make this dedication for\n     the benefit of the public at large and to the detriment of our heirs\n     and successors. We intend this dedication to be an overt act of\n     relinquishment in perpetuity of all present and future rights to this\n     code under copyright law.\n\n   If you are currently an employee, it is possible that by law your\n   employer automatically receives the copyright to any and all work that\n   you do, including enhancements you might want to submit to this project.\n   In that case, there's some legal work that has to be done to ensure your\n   patches stay in TestMethod in the public domain. We do not have the means nor\n   the will to handle such a process, but we're open to suggestions. Please\n   contact us if this situation applies to you.\n\nAll contributions received are regularly mentioned in the AUTHORS file\nbundled with this package, including the name of the contributor, and a\nshort description of the work. E-mail addresses are not included by default\nfor privacy reasons. If you submit contributions and want your e-mail\naddress added to the AUTHORS file (or don't want to be mentioned at all),\nplease specify that along with your submissions.\n\nThanks.\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/IJsonWrapper.cs",
    "content": "/**\n * IJsonWrapper.cs\n *   Interface that represents a jsonType capable of handling all kinds of JSON\n *   data. This is mainly used when mapping objects through JsonMapper, and\n *   it's implemented by JsonData.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\nusing System.Collections;\n\nnamespace LitJson\n{\n    public enum JsonType\n    {\n        None,\n\n        Object,\n        Array,\n        String,\n        Int,\n        Long,\n        Double,\n        Boolean,\n        Decimal,\n        ULong\n    }\n\n    public interface IJsonWrapper : IList, IOrderedDictionary\n    {\n        bool IsArray   { get; }\n        bool IsBoolean { get; }\n        bool IsDouble  { get; }\n        bool IsDecimal { get; }\n        bool IsInt     { get; }\n        bool IsLong    { get; }\n        bool IsULong   { get; }\n        bool IsObject  { get; }\n        bool IsString  { get; }\n\n        bool     GetBoolean ();\n        double   GetDouble ();\n        decimal  GetDecimal ();\n        int      GetInt ();\n        JsonType GetJsonType ();\n        long     GetLong ();\n        ulong    GetUlong ();\n        string   GetString ();\n\n        void SetBoolean  (bool val);\n        void SetDouble   (double val);\n        void SetDecimal(decimal val);\n        void SetInt      (int val);\n        void SetJsonType (JsonType jsonType);\n        void SetLong     (long val);\n        void SetUlong(ulong val);\n        void SetString   (string val);\n\n        string ToJson ();\n        void   ToJson (JsonWriter writer);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/IOrderedDictionary.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing LinqToTwitter;\n\nnamespace LitJson\n{\n    public interface IOrderedDictionary : IDictionary<string, JsonData>, ICollection, IEnumerable\n    {\n        object this[int index] { get; set; }\n\n        new IDictionaryEnumerator GetEnumerator();\n\n        void Insert(int index, object key, object value);\n\n        void RemoveAt(int index);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/JsonData.cs",
    "content": "/**\n * JsonData.cs\n *   Generic jsonType to hold JSON data (objects, arrays, and so on). This is\n *   the default jsonType returned by JsonMapper.ToObject().\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\n\nnamespace LitJson\n{\n    public class JsonData : IJsonWrapper, IEquatable<JsonData>\n    {\n        internal IDictionary<string, JsonData> InstObject;\n\n        private IList<JsonData>               instArray;\n        private bool                          instBoolean;\n        private double                        instDouble;\n        private int                           instInt;\n        private long                          instLong;\n        private string                        instString;\n        private string                        json;\n        private JsonType                      type;\n        decimal instDecimal;\n        ulong instUlong;\n\n        // Used to implement the IOrderedDictionary interface\n        private IList<KeyValuePair<string, JsonData>> objectList;\n\n        public int Count {\n            get { return EnsureCollection ().Count; }\n        }\n\n        public bool IsArray {\n            get { return type == JsonType.Array; }\n        }\n\n        public bool IsBoolean {\n            get { return type == JsonType.Boolean; }\n        }\n\n        public bool IsDouble {\n            get { return type == JsonType.Double; }\n        }\n\n        public bool IsInt {\n            get { return type == JsonType.Int; }\n        }\n\n        public bool IsLong {\n            get { return type == JsonType.Long; }\n        }\n\n        public bool IsObject {\n            get { return type == JsonType.Object; }\n        }\n\n        public bool IsString {\n            get { return type == JsonType.String; }\n        }\n\n        public bool IsDecimal\n        {\n            get { return type == JsonType.Decimal; }\n        }\n\n        public bool IsULong\n        {\n            get { return type == JsonType.ULong; }\n        }\n\n        int ICollection.Count {\n            get {\n                return Count;\n            }\n        }\n\n        bool ICollection.IsSynchronized {\n            get {\n                return EnsureCollection ().IsSynchronized;\n            }\n        }\n\n        object ICollection.SyncRoot {\n            get {\n                return EnsureCollection ().SyncRoot;\n            }\n        }\n\n        ICollection<string> IDictionary<string, JsonData>.Keys\n        {\n            get {\n                EnsureDictionary ();\n                IList<string> keys = objectList.Select(entry => entry.Key).ToList();\n\n                return (ICollection<string>) keys;\n            }\n        }\n\n        ICollection<JsonData> IDictionary<string, JsonData>.Values\n        {\n            get {\n                EnsureDictionary ();\n                IList<JsonData> values = objectList.Select(entry => entry.Value).ToList();\n\n                return (ICollection<JsonData>) values;\n            }\n        }\n\n        bool IJsonWrapper.IsArray {\n            get { return IsArray; }\n        }\n\n        bool IJsonWrapper.IsBoolean {\n            get { return IsBoolean; }\n        }\n\n        bool IJsonWrapper.IsDouble {\n            get { return IsDouble; }\n        }\n\n        bool IJsonWrapper.IsInt {\n            get { return IsInt; }\n        }\n\n        bool IJsonWrapper.IsLong {\n            get { return IsLong; }\n        }\n\n        bool IJsonWrapper.IsObject {\n            get { return IsObject; }\n        }\n\n        bool IJsonWrapper.IsString {\n            get { return IsString; }\n        }\n\n        bool IList.IsFixedSize {\n            get {\n                return EnsureList ().IsFixedSize;\n            }\n        }\n\n        bool IList.IsReadOnly {\n            get {\n                return EnsureList ().IsReadOnly;\n            }\n        }\n\n        JsonData IDictionary<string, JsonData>.this[string key]\n        {\n           get {\n                return EnsureDictionary ()[key];\n            }\n\n            set\n            {\n                if (! (key is String))\n                    throw new ArgumentException (\n                        \"The key has to be a string\");\n\n                JsonData data = ToJsonData (value);\n\n                this[key] = data;\n            }\n        }\n\n        object IOrderedDictionary.this[int idx] {\n            get {\n                EnsureDictionary ();\n                return objectList[idx].Value;\n            }\n\n            set {\n                EnsureDictionary ();\n                JsonData data = ToJsonData (value);\n\n                KeyValuePair<string, JsonData> oldEntry = objectList[idx];\n\n                InstObject[oldEntry.Key] = data;\n\n                var entry = new KeyValuePair<string, JsonData> (oldEntry.Key, data);\n\n                objectList[idx] = entry;\n            }\n        }\n\n        object IList.this[int index] {\n            get {\n                return EnsureList ()[index];\n            }\n\n            set {\n                EnsureList ();\n                JsonData data = ToJsonData (value);\n\n                this[index] = data;\n            }\n        }\n\n        public JsonData this[string propName] {\n            get {\n                EnsureDictionary ();\n                return InstObject[propName];\n            }\n\n            set {\n                EnsureDictionary ();\n\n                var entry = new KeyValuePair<string, JsonData> (propName, value);\n\n                if (InstObject.ContainsKey (propName)) {\n                    for (int i = 0; i < objectList.Count; i++) {\n                        if (objectList[i].Key == propName) {\n                            objectList[i] = entry;\n                            break;\n                        }\n                    }\n                } else\n                    objectList.Add (entry);\n\n                InstObject[propName] = value;\n\n                json = null;\n            }\n        }\n\n        public JsonData this[int index] {\n            get {\n                EnsureCollection ();\n\n                if (type == JsonType.Array)\n                    return instArray[index];\n\n                return objectList[index].Value;\n            }\n\n            set {\n                EnsureCollection ();\n\n                if (type == JsonType.Array)\n                    instArray[index] = value;\n                else {\n                    KeyValuePair<string, JsonData> entry = objectList[index];\n                    var newEntry = new KeyValuePair<string, JsonData> (entry.Key, value);\n\n                    objectList[index] = newEntry;\n                    InstObject[entry.Key] = value;\n                }\n\n                json = null;\n            }\n        }\n\n        public JsonData ()\n        {\n        }\n\n        public JsonData (bool boolean)\n        {\n            type = JsonType.Boolean;\n            instBoolean = boolean;\n        }\n\n        public JsonData (double number)\n        {\n            type = JsonType.Double;\n            instDouble = number;\n        }\n\n        public JsonData (int number)\n        {\n            type = JsonType.Int;\n            instInt = number;\n        }\n\n        public JsonData(long number)\n        {\n            type = JsonType.Long;\n            instLong = number;\n        }\n\n        public JsonData (decimal number)\n        {\n            type = JsonType.Decimal;\n            instDecimal = number;\n        }\n\n        public JsonData(ulong number)\n        {\n            type = JsonType.ULong;\n            instUlong = number;\n        }\n\n        public JsonData (object obj)\n        {\n            if (obj is Boolean) {\n                type = JsonType.Boolean;\n                instBoolean = (bool) obj;\n                return;\n            }\n\n            if (obj is Double) {\n                type = JsonType.Double;\n                instDouble = (double) obj;\n                return;\n            }\n\n            if (obj is Int32) {\n                type = JsonType.Int;\n                instInt = (int) obj;\n                return;\n            }\n\n            if (obj is Int64) {\n                type = JsonType.Long;\n                instLong = (long) obj;\n                return;\n            }\n\n            if (obj is Decimal)\n            {\n                type = JsonType.Decimal;\n                instDecimal = (decimal)obj;\n                return;\n            }\n\n            if (obj is UInt64)\n            {\n                type = JsonType.ULong;\n                instUlong = (ulong)obj;\n                return;\n            }\n\n            var s = obj as string;\n            if (s != null) {\n                type = JsonType.String;\n                instString = s;\n                return;\n            }\n\n            throw new ArgumentException (\n                \"Unable to wrap the given object with JsonData\");\n        }\n\n        public JsonData (string str)\n        {\n            type = JsonType.String;\n            instString = str;\n        }\n\n        public static implicit operator JsonData (Boolean data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Double data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Int32 data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Int64 data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData(Decimal data)\n        {\n            return new JsonData(data);\n        }\n\n        public static implicit operator JsonData(UInt64 data)\n        {\n            return new JsonData(data);\n        }\n\n        public static implicit operator JsonData(String data)\n        {\n            return new JsonData (data);\n        }\n\n        public static explicit operator Boolean (JsonData data)\n        {\n            if (data.type != JsonType.Boolean)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a double\");\n\n            return data.instBoolean;\n        }\n\n        public static explicit operator Double (JsonData data)\n        {\n            if (data.type != JsonType.Double)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a double\");\n\n            return data.instDouble;\n        }\n\n        public static explicit operator Int32 (JsonData data)\n        {\n            if (data.type != JsonType.Int)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold an int\");\n\n            return data.instInt;\n        }\n\n        public static explicit operator Int64 (JsonData data)\n        {\n            if (data.type != JsonType.Long)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a long\");\n\n            return data.instLong;\n        }\n\n        public static explicit operator Decimal(JsonData data)\n        {\n            if (data.type != JsonType.Decimal && data.type != JsonType.Double)\n                throw new InvalidCastException(\n                    \"Instance of JsonData doesn't hold a decimal\");\n\n            if (data.type == JsonType.Double)\n            {\n                return (decimal) data.instDouble;\n            }\n\n            return data.instDecimal;\n        }\n\n        public static explicit operator UInt64(JsonData data)\n        {\n            if (data.type != JsonType.ULong && \n                data.type != JsonType.Long &&\n                data.type != JsonType.Int)\n                throw new InvalidCastException(\n                    \"Instance of JsonData doesn't hold a ulong\");\n\n            if (data.type == JsonType.Int)\n            {\n                return (ulong)data.instInt;\n            }\n\n            if (data.type == JsonType.Long)\n            {\n                return (ulong)data.instLong;\n            }\n\n            return data.instUlong;\n        }\n\n        public static explicit operator String (JsonData data)\n        {\n            if (data.type != JsonType.String)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a string\");\n\n            return data.instString;\n        }\n\n        void ICollection.CopyTo (Array array, int index)\n        {\n            EnsureCollection ().CopyTo (array, index);\n        }\n\n        void IDictionary<string, JsonData>.Add (string key, JsonData value)\n        {\n            JsonData data = ToJsonData (value);\n\n            EnsureDictionary ().Add (key, data);\n\n            var entry = new KeyValuePair<string, JsonData>(key, data);\n            objectList.Add(entry);\n\n            json = null;\n        }\n\n        bool IDictionary<string, JsonData>.ContainsKey(string key)\n        {\n            return EnsureDictionary().ContainsKey(key);\n        }\n\n        bool IDictionary<string, JsonData>.Remove(string key)\n        {\n            bool removed = EnsureDictionary ().Remove (key);\n\n            for (int i = 0; i < objectList.Count; i++) {\n                if (objectList[i].Key == key)\n                {\n                    objectList.RemoveAt(i);\n                    break;\n                }\n            }\n\n            json = null;\n\n            return removed;\n        }\n\n        IEnumerator IEnumerable.GetEnumerator ()\n        {\n            return EnsureCollection ().GetEnumerator ();\n        }\n\n        bool IJsonWrapper.GetBoolean ()\n        {\n            if (type != JsonType.Boolean)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a boolean\");\n\n            return instBoolean;\n        }\n\n        double IJsonWrapper.GetDouble ()\n        {\n            if (type != JsonType.Double)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a double\");\n\n            return instDouble;\n        }\n\n        int IJsonWrapper.GetInt ()\n        {\n            if (type != JsonType.Int)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold an int\");\n\n            return instInt;\n        }\n\n        long IJsonWrapper.GetLong ()\n        {\n            if (type == JsonType.Long)\n                return instLong;\n            else if (type == JsonType.Int)\n                return instInt;\n            else\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a long\");\n        }\n\n        string IJsonWrapper.GetString ()\n        {\n            if (type != JsonType.String)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a string\");\n\n            return instString;\n        }\n\n        decimal IJsonWrapper.GetDecimal()\n        {\n            if (type != JsonType.Decimal && type != JsonType.Double)\n            {\n                throw new InvalidOperationException(\n                    \"JsonData instance doesn't hold a decimal\");\n            }\n\n            if (type == JsonType.Double)\n            {\n                return (decimal)instDouble;\n            }\n\n            return instDecimal;\n        }\n\n        ulong IJsonWrapper.GetUlong()\n        {\n            if (type != JsonType.ULong && \n                type != JsonType.Long &&\n                type != JsonType.Int)\n            {\n                throw new InvalidOperationException(\n                    \"JsonData instance doesn't hold a ulong\");\n            }\n\n            if (type == JsonType.Int)\n            {\n                return (ulong)instInt;\n            }\n\n            if (type == JsonType.Long)\n            {\n                return (ulong)instLong;\n            }\n\n            return instUlong;\n        }\n\n        void IJsonWrapper.SetBoolean (bool val)\n        {\n            type = JsonType.Boolean;\n            instBoolean = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetDouble (double val)\n        {\n            type = JsonType.Double;\n            instDouble = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetInt (int val)\n        {\n            type = JsonType.Int;\n            instInt = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetLong (long val)\n        {\n            type = JsonType.Long;\n            instLong = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetString (string val)\n        {\n            type = JsonType.String;\n            instString = val;\n            json = null;\n        }\n\n        public void SetDecimal(decimal val)\n        {\n            type = JsonType.Decimal;\n            instDecimal = val;\n            json = null;\n        }\n\n        public void SetUlong(ulong val)\n        {\n            type = JsonType.ULong;\n            instUlong = val;\n            json = null;\n        }\n\n        string IJsonWrapper.ToJson ()\n        {\n            return ToJson ();\n        }\n\n        void IJsonWrapper.ToJson (JsonWriter writer)\n        {\n            ToJson (writer);\n        }\n\n        int IList.Add (object value)\n        {\n            return Add (value);\n        }\n\n        void IList.Clear ()\n        {\n            EnsureList ().Clear ();\n            json = null;\n        }\n\n        bool IList.Contains (object value)\n        {\n            return EnsureList ().Contains (value);\n        }\n\n        int IList.IndexOf (object value)\n        {\n            return EnsureList ().IndexOf (value);\n        }\n\n        void IList.Insert (int index, object value)\n        {\n            EnsureList ().Insert (index, value);\n            json = null;\n        }\n\n        void IList.Remove (object value)\n        {\n            EnsureList ().Remove (value);\n            json = null;\n        }\n\n        void IList.RemoveAt (int index)\n        {\n            EnsureList ().RemoveAt (index);\n            json = null;\n        }\n\n        IDictionaryEnumerator IOrderedDictionary.GetEnumerator ()\n        {\n            EnsureDictionary ();\n\n            return new OrderedDictionaryEnumerator (\n                objectList.GetEnumerator ());\n        }\n\n        void IOrderedDictionary.Insert (int idx, object key, object value)\n        {\n            var property = (string) key;\n            JsonData data  = ToJsonData (value);\n\n            this[property] = data;\n\n            var entry = new KeyValuePair<string, JsonData> (property, data);\n\n            objectList.Insert (idx, entry);\n        }\n\n        void IOrderedDictionary.RemoveAt (int idx)\n        {\n            EnsureDictionary ();\n\n            InstObject.Remove (objectList[idx].Key);\n            objectList.RemoveAt (idx);\n        }\n\n        private ICollection EnsureCollection ()\n        {\n            if (type == JsonType.Array)\n                return (ICollection) instArray;\n\n            if (type == JsonType.Object)\n                return (ICollection) InstObject;\n\n            throw new InvalidOperationException (\n                \"The JsonData instance has to be initialized first\");\n        }\n\n        private IDictionary<string, JsonData> EnsureDictionary ()\n        {\n            if (type == JsonType.Object)\n                return InstObject;\n\n            if (type != JsonType.None)\n                throw new InvalidOperationException (\n                    \"Instance of JsonData is not a dictionary\");\n\n            type = JsonType.Object;\n            InstObject = new Dictionary<string, JsonData> ();\n            objectList = new List<KeyValuePair<string, JsonData>> ();\n\n            return InstObject;\n        }\n\n        private IList EnsureList ()\n        {\n            if (type == JsonType.Array)\n                return (IList) instArray;\n\n            if (type != JsonType.None)\n                throw new InvalidOperationException (\n                    \"Instance of JsonData is not a list\");\n\n            type = JsonType.Array;\n            instArray = new List<JsonData> ();\n\n            return (IList) instArray;\n        }\n\n        private JsonData ToJsonData (object obj)\n        {\n            if (obj == null)\n                return null;\n\n            var jsonData = obj as JsonData;\n            if (jsonData != null) return jsonData;\n\n            return new JsonData (obj);\n        }\n\n        private static void WriteJson (IJsonWrapper obj, JsonWriter writer)\n        {\n            if (obj.IsString) {\n                writer.Write (obj.GetString ());\n                return;\n            }\n\n            if (obj.IsBoolean) {\n                writer.Write (obj.GetBoolean ());\n                return;\n            }\n\n            if (obj.IsDouble) {\n                writer.Write (obj.GetDouble ());\n                return;\n            }\n\n            if (obj.IsInt) {\n                writer.Write (obj.GetInt ());\n                return;\n            }\n\n            if (obj.IsLong) {\n                writer.Write (obj.GetLong ());\n                return;\n            }\n\n            if (obj.IsDecimal)\n            {\n                writer.Write(obj.GetDecimal());\n                return;\n            }\n\n            if (obj.IsULong)\n            {\n                writer.Write(obj.GetUlong());\n                return;\n            }\n\n            if (obj.IsArray)\n            {\n                writer.WriteArrayStart ();\n                foreach (object elem in (IList) obj)\n                    WriteJson ((JsonData) elem, writer);\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj.IsObject) {\n                writer.WriteObjectStart ();\n\n                foreach (var entry in ((IDictionary<string, JsonData>) obj))\n                {\n                    writer.WritePropertyName(entry.Key);\n                    WriteJson(entry.Value, writer);\n                }\n                writer.WriteObjectEnd ();\n            }\n        }\n\n\n        public int Add (object value)\n        {\n            JsonData data = ToJsonData (value);\n\n            json = null;\n\n            return EnsureList ().Add (data);\n        }\n\n        public void Clear ()\n        {\n            if (IsObject) {\n                ((IDictionary<string, JsonData>)this).Clear();\n                return;\n            }\n\n            if (IsArray) {\n                ((IList) this).Clear ();\n            }\n        }\n\n        public bool Equals (JsonData x)\n        {\n            if (x == null)\n                return false;\n\n            if (x.type != type)\n                return false;\n\n            switch (type) {\n            case JsonType.None:\n                return true;\n\n            case JsonType.Object:\n                return InstObject.Equals (x.InstObject);\n\n            case JsonType.Array:\n                return instArray.Equals (x.instArray);\n\n            case JsonType.String:\n                return instString.Equals (x.instString);\n\n            case JsonType.Int:\n                return instInt.Equals (x.instInt);\n\n            case JsonType.Long:\n                return instLong.Equals (x.instLong);\n\n            case JsonType.Double:\n                return instDouble.Equals (x.instDouble);\n\n            case JsonType.Boolean:\n                return instBoolean.Equals (x.instBoolean);\n\n            case JsonType.Decimal:\n                return instDecimal.Equals(x.instDecimal);\n\n            case JsonType.ULong:\n                return instUlong.Equals(x.instUlong);\n            }\n\n            return false;\n        }\n\n        public JsonType GetJsonType ()\n        {\n            return type;\n        }\n\n        public void SetJsonType (JsonType jsonType)\n        {\n            if (type == jsonType)\n                return;\n\n            switch (jsonType) {\n            case JsonType.None:\n                break;\n\n            case JsonType.Object:\n                InstObject = new Dictionary<string, JsonData> ();\n                objectList = new List<KeyValuePair<string, JsonData>> ();\n                break;\n\n            case JsonType.Array:\n                instArray = new List<JsonData> ();\n                break;\n\n            case JsonType.String:\n                instString = default (String);\n                break;\n\n            case JsonType.Int:\n                instInt = default (Int32);\n                break;\n\n            case JsonType.Long:\n                instLong = default (Int64);\n                break;\n\n            case JsonType.Double:\n                instDouble = default (Double);\n                break;\n\n            case JsonType.Boolean:\n                instBoolean = default (Boolean);\n                break;\n\n            case JsonType.Decimal:\n                instDecimal = default(Decimal);\n                break;\n\n            case JsonType.ULong:\n                instUlong = default(UInt64);\n                break;\n            }\n\n            type = jsonType;\n        }\n\n        public string ToJson ()\n        {\n            if (json != null)\n                return json;\n\n            var sw = new StringWriter ();\n            var writer = new JsonWriter(sw) {Validate = false};\n\n            WriteJson (this, writer);\n            json = sw.ToString ();\n\n            return json;\n        }\n\n        public void ToJson (JsonWriter writer)\n        {\n            bool oldValidate = writer.Validate;\n\n            writer.Validate = false;\n\n            WriteJson (this, writer);\n\n            writer.Validate = oldValidate;\n        }\n\n        public override string ToString ()\n        {\n            switch (type) {\n            case JsonType.Array:\n                return \"JsonData array\";\n\n            case JsonType.Boolean:\n                return instBoolean.ToString ();\n\n            case JsonType.Double:\n                return instDouble.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Int:\n                return instInt.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Long:\n                return instLong.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Decimal:\n                return instDecimal.ToString(CultureInfo.InvariantCulture);\n\n            case JsonType.ULong:\n                return instUlong.ToString(CultureInfo.InvariantCulture);\n\n            case JsonType.Object:\n                return \"JsonData object\";\n\n            case JsonType.String:\n                return instString;\n            }\n\n            return \"Uninitialized JsonData\";\n        }\n\n\n        public bool TryGetValue(string key, out JsonData value)\n        {\n            return EnsureDictionary().TryGetValue(key, out value);\n        }\n\n        public void Add(KeyValuePair<string, JsonData> item)\n        {\n            EnsureDictionary().Add(item);\n        }\n\n        public bool Contains(KeyValuePair<string, JsonData> item)\n        {\n            return EnsureDictionary().Contains(item);\n        }\n\n        public void CopyTo(KeyValuePair<string, JsonData>[] array, int arrayIndex)\n        {\n            EnsureDictionary().CopyTo(array, arrayIndex);\n        }\n\n        bool ICollection<KeyValuePair<string, JsonData>>.IsReadOnly\n        {\n            get { return EnsureDictionary().IsReadOnly; }\n        }\n\n        public bool Remove(KeyValuePair<string, JsonData> item)\n        {\n            return EnsureDictionary().Remove(item.Key);\n        }\n\n        IEnumerator<KeyValuePair<string, JsonData>> IEnumerable<KeyValuePair<string, JsonData>>.GetEnumerator()\n        {\n            return EnsureDictionary().GetEnumerator();\n        }\n    }\n\n    internal class OrderedDictionaryEnumerator : IDictionaryEnumerator\n    {\n        readonly IEnumerator<KeyValuePair<string, JsonData>> listEnumerator;\n\n        public object Current {\n            get { return Entry; }\n        }\n\n        public DictionaryEntry Entry {\n            get {\n                KeyValuePair<string, JsonData> curr = listEnumerator.Current;\n                return new DictionaryEntry (curr.Key, curr.Value);\n            }\n        }\n\n        public object Key {\n            get { return listEnumerator.Current.Key; }\n        }\n\n        public object Value {\n            get { return listEnumerator.Current.Value; }\n        }\n\n\n        public OrderedDictionaryEnumerator (\n            IEnumerator<KeyValuePair<string, JsonData>> enumerator)\n        {\n            listEnumerator = enumerator;\n        }\n\n\n        public bool MoveNext ()\n        {\n            return listEnumerator.MoveNext ();\n        }\n\n        public void Reset ()\n        {\n            listEnumerator.Reset ();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/JsonException.cs",
    "content": "/**\n * JsonException.cs\n *   Base class throwed by LitJSON when a parsing error occurs.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\n\n\nnamespace LitJson\n{\n    public class JsonException : Exception\n    {\n        public JsonException () : base ()\n        {\n        }\n\n        internal JsonException (ParserToken token) :\n            base (String.Format (\n                    \"Invalid token '{0}' in input string\", token))\n        {\n        }\n\n        internal JsonException (ParserToken token,\n                                Exception inner_exception) :\n            base (String.Format (\n                    \"Invalid token '{0}' in input string\", token),\n                inner_exception)\n        {\n        }\n\n        internal JsonException (int c) :\n            base (String.Format (\n                    \"Invalid character '{0}' in input string\", (char) c))\n        {\n        }\n\n        internal JsonException (int c, Exception inner_exception) :\n            base (String.Format (\n                    \"Invalid character '{0}' in input string\", (char) c),\n                inner_exception)\n        {\n        }\n\n\n        public JsonException (string message) : base (message)\n        {\n        }\n\n        public JsonException (string message, Exception inner_exception) :\n            base (message, inner_exception)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/JsonMapper.cs",
    "content": "/**\n * JsonMapper.cs\n *   JSON to .Net object and object to JSON conversions.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace LitJson\n{\n    internal struct PropertyMetadata\n    {\n        public MemberInfo Info;\n        public bool       IsField;\n        public Type       Type;\n    }\n\n\n    internal struct ArrayMetadata\n    {\n        private Type element_type;\n        private bool is_array;\n        private bool is_list;\n\n\n        public Type ElementType {\n            get {\n                if (element_type == null)\n                    return typeof (JsonData);\n\n                return element_type;\n            }\n\n            set { element_type = value; }\n        }\n\n        public bool IsArray {\n            get { return is_array; }\n            set { is_array = value; }\n        }\n\n        public bool IsList {\n            get { return is_list; }\n            set { is_list = value; }\n        }\n    }\n\n\n    internal struct ObjectMetadata\n    {\n        private Type element_type;\n        private bool is_dictionary;\n\n        private IDictionary<string, PropertyMetadata> properties;\n\n\n        public Type ElementType {\n            get {\n                if (element_type == null)\n                    return typeof (JsonData);\n\n                return element_type;\n            }\n\n            set { element_type = value; }\n        }\n\n        public bool IsDictionary {\n            get { return is_dictionary; }\n            set { is_dictionary = value; }\n        }\n\n        public IDictionary<string, PropertyMetadata> Properties {\n            get { return properties; }\n            set { properties = value; }\n        }\n    }\n\n\n    internal delegate void ExporterFunc    (object obj, JsonWriter writer);\n    public   delegate void ExporterFunc<T> (T obj, JsonWriter writer);\n\n    internal delegate object ImporterFunc                (object input);\n    public   delegate TValue ImporterFunc<TJson, TValue> (TJson input);\n\n    public delegate IJsonWrapper WrapperTestMethodory ();\n\n\n    public class JsonMapper\n    {\n        private static int max_nesting_depth;\n\n        private static IFormatProvider datetime_format;\n\n        private static IDictionary<Type, ExporterFunc> base_exporters_table;\n        private static IDictionary<Type, ExporterFunc> custom_exporters_table;\n\n        private static IDictionary<Type,\n                IDictionary<Type, ImporterFunc>> base_importers_table;\n        private static IDictionary<Type,\n                IDictionary<Type, ImporterFunc>> custom_importers_table;\n\n        private static IDictionary<Type, ArrayMetadata> array_metadata;\n        private static readonly object array_metadata_lock = new Object ();\n\n        private static IDictionary<Type,\n                IDictionary<Type, MethodInfo>> conv_ops;\n        private static readonly object conv_ops_lock = new Object ();\n\n        private static IDictionary<Type, ObjectMetadata> object_metadata;\n        private static readonly object object_metadata_lock = new Object ();\n\n        private static IDictionary<Type,\n                IList<PropertyMetadata>> type_properties;\n        private static readonly object type_properties_lock = new Object ();\n\n        private static JsonWriter      static_writer;\n        private static readonly object static_writer_lock = new Object ();\n\n        static JsonMapper ()\n        {\n            max_nesting_depth = 100;\n\n            array_metadata = new Dictionary<Type, ArrayMetadata> ();\n            conv_ops = new Dictionary<Type, IDictionary<Type, MethodInfo>> ();\n            object_metadata = new Dictionary<Type, ObjectMetadata> ();\n            type_properties = new Dictionary<Type,\n                            IList<PropertyMetadata>> ();\n\n            static_writer = new JsonWriter ();\n\n            datetime_format = DateTimeFormatInfo.InvariantInfo;\n\n            base_exporters_table   = new Dictionary<Type, ExporterFunc> ();\n            custom_exporters_table = new Dictionary<Type, ExporterFunc> ();\n\n            base_importers_table = new Dictionary<Type,\n                                 IDictionary<Type, ImporterFunc>> ();\n            custom_importers_table = new Dictionary<Type,\n                                   IDictionary<Type, ImporterFunc>> ();\n\n            RegisterBaseExporters ();\n            RegisterBaseImporters ();\n        }\n\n        private static void AddArrayMetadata (Type type)\n        {\n            if (array_metadata.ContainsKey (type))\n                return;\n\n            ArrayMetadata data = new ArrayMetadata ();\n\n            data.IsArray = type.IsArray;\n\n//#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            data.IsList = typeInfo.IsAssignableFrom(typeof(IList).GetTypeInfo());\n            var props = typeInfo.DeclaredProperties;\n//#else\n//            if (type.GetInterface (\"System.Collections.IList\", false) != null)\n//                data.IsList = true;\n//            var props = type.GetProperties ();\n//#endif\n\n            foreach (PropertyInfo p_info in props) {\n                if (p_info.Name != \"Item\")\n                    continue;\n\n                ParameterInfo[] parameters = p_info.GetIndexParameters ();\n\n                if (parameters.Length != 1)\n                    continue;\n\n                if (parameters[0].ParameterType == typeof (int))\n                    data.ElementType = p_info.PropertyType;\n            }\n\n            lock (array_metadata_lock) {\n                try {\n                    array_metadata.Add (type, data);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static void AddObjectMetadata (Type type)\n        {\n            if (object_metadata.ContainsKey (type))\n                return;\n\n            ObjectMetadata data = new ObjectMetadata ();\n\n//#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            data.IsDictionary = typeInfo.IsAssignableFrom(typeof(IDictionary<string, JsonData>).GetTypeInfo());\n            var props = typeInfo.DeclaredProperties;\n            var fields = typeInfo.DeclaredFields;\n//#else\n//            if (type.GetInterface(\"System.Collections.IDictionary\", false) != null)\n//                data.IsDictionary = true;\n//            var props = type.GetProperties ();\n//            var fields = type.GetFields ();\n//#endif\n\n            data.Properties = new Dictionary<string, PropertyMetadata> ();\n\n            foreach (PropertyInfo p_info in props) {\n                if (p_info.Name == \"Item\") {\n                    ParameterInfo[] parameters = p_info.GetIndexParameters ();\n\n                    if (parameters.Length != 1)\n                        continue;\n\n                    if (parameters[0].ParameterType == typeof (string))\n                        data.ElementType = p_info.PropertyType;\n\n                    continue;\n                }\n\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = p_info;\n                p_data.Type = p_info.PropertyType;\n\n                data.Properties.Add (p_info.Name, p_data);\n            }\n\n            foreach (FieldInfo f_info in fields) {\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = f_info;\n                p_data.IsField = true;\n                p_data.Type = f_info.FieldType;\n\n                data.Properties.Add (f_info.Name, p_data);\n            }\n\n            lock (object_metadata_lock) {\n                try {\n                    object_metadata.Add (type, data);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static void AddTypeProperties (Type type)\n        {\n            if (type_properties.ContainsKey (type))\n                return;\n\n            IList<PropertyMetadata> props = new List<PropertyMetadata> ();\n\n//#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            var propInfos = typeInfo.DeclaredProperties;\n            var fields = typeInfo.DeclaredFields;\n//#else\n//            var propInfos = type.GetProperties ();\n//            var fields = type.GetFields ();\n//#endif\n\n            foreach (PropertyInfo p_info in propInfos)\n            {\n                if (p_info.Name == \"Item\")\n                    continue;\n\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = p_info;\n                p_data.IsField = false;\n                props.Add (p_data);\n            }\n\n            foreach (FieldInfo f_info in fields) {\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = f_info;\n                p_data.IsField = true;\n\n                props.Add (p_data);\n            }\n\n            lock (type_properties_lock) {\n                try {\n                    type_properties.Add (type, props);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static MethodInfo GetConvOp (Type t1, Type t2)\n        {\n            lock (conv_ops_lock) {\n                if (! conv_ops.ContainsKey (t1))\n                    conv_ops.Add (t1, new Dictionary<Type, MethodInfo> ());\n            }\n\n            if (conv_ops[t1].ContainsKey (t2))\n                return conv_ops[t1][t2];\n\n//#if NETFX_CORE\n            MethodInfo op = \n                t1.GetTypeInfo()\n                  .DeclaredMethods\n                  .Where(meth => meth.Name == \"op_Implicit\" && meth.IsGenericMethod)\n                  .First();\n//#else\n//            MethodInfo op = t1.GetMethod (\n//                \"op_Implicit\", new Type[] { t2 });\n//#endif\n\n            lock (conv_ops_lock) {\n                try {\n                    conv_ops[t1].Add (t2, op);\n                } catch (ArgumentException) {\n                    return conv_ops[t1][t2];\n                }\n            }\n\n            return op;\n        }\n\n        private static object ReadValue (Type inst_type, JsonReader reader)\n        {\n            reader.Read ();\n\n            if (reader.Token == JsonToken.ArrayEnd)\n                return null;\n\n            if (reader.Token == JsonToken.Null) {\n\n//#if NETFX_CORE\n                if (!inst_type.GetTypeInfo().IsClass)\n//#else\n//                if (! inst_type.IsClass)\n//#endif\n                    throw new JsonException (String.Format (\n                            \"Can't assign null to an instance of type {0}\",\n                            inst_type));\n\n                return null;\n            }\n\n            if (reader.Token == JsonToken.Double ||\n                reader.Token == JsonToken.Int ||\n                reader.Token == JsonToken.Long ||\n                reader.Token == JsonToken.String ||\n                reader.Token == JsonToken.Boolean) {\n\n                Type json_type = reader.Value.GetType ();\n\n//#if NETFX_CORE\n                if (inst_type.GetTypeInfo().IsAssignableFrom(json_type.GetTypeInfo()))\n//#else\n//                if (inst_type.IsAssignableFrom (json_type))\n//#endif\n                    return reader.Value;\n\n                // If there's a custom importer that fits, use it\n                if (custom_importers_table.ContainsKey (json_type) &&\n                    custom_importers_table[json_type].ContainsKey (\n                        inst_type)) {\n\n                    ImporterFunc importer =\n                        custom_importers_table[json_type][inst_type];\n\n                    return importer (reader.Value);\n                }\n\n                // Maybe there's a base importer that works\n                if (base_importers_table.ContainsKey (json_type) &&\n                    base_importers_table[json_type].ContainsKey (\n                        inst_type)) {\n\n                    ImporterFunc importer =\n                        base_importers_table[json_type][inst_type];\n\n                    return importer (reader.Value);\n                }\n\n                // Maybe it's an enum\n//#if NETFX_CORE\n                if (inst_type.GetTypeInfo().IsEnum)\n//#else\n//                if (inst_type.IsEnum)\n//#endif\n                    return Enum.ToObject (inst_type, reader.Value);\n\n                // Try using an implicit conversion operator\n                MethodInfo conv_op = GetConvOp (inst_type, json_type);\n\n                if (conv_op != null)\n                    return conv_op.Invoke (null,\n                                           new object[] { reader.Value });\n\n                // No luck\n                throw new JsonException (String.Format (\n                        \"Can't assign value '{0}' (type {1}) to type {2}\",\n                        reader.Value, json_type, inst_type));\n            }\n\n            object instance = null;\n\n            if (reader.Token == JsonToken.ArrayStart) {\n\n                AddArrayMetadata (inst_type);\n                ArrayMetadata t_data = array_metadata[inst_type];\n\n                if (! t_data.IsArray && ! t_data.IsList)\n                    throw new JsonException (String.Format (\n                            \"Type {0} can't act as an array\",\n                            inst_type));\n\n                IList list;\n                Type elem_type;\n\n                if (! t_data.IsArray) {\n                    list = (IList) Activator.CreateInstance (inst_type);\n                    elem_type = t_data.ElementType;\n                } else {\n                    list = new List<object>();\n                    elem_type = inst_type.GetElementType ();\n                }\n\n                while (true) {\n                    object item = ReadValue (elem_type, reader);\n                    if (reader.Token == JsonToken.ArrayEnd)\n                        break;\n\n                    list.Add (item);\n                }\n\n                if (t_data.IsArray) {\n                    int n = list.Count;\n                    instance = Array.CreateInstance (elem_type, n);\n\n                    for (int i = 0; i < n; i++)\n                        ((Array) instance).SetValue (list[i], i);\n                } else\n                    instance = list;\n\n            } else if (reader.Token == JsonToken.ObjectStart) {\n\n                AddObjectMetadata (inst_type);\n                ObjectMetadata t_data = object_metadata[inst_type];\n\n                instance = Activator.CreateInstance (inst_type);\n\n                while (true) {\n                    reader.Read ();\n\n                    if (reader.Token == JsonToken.ObjectEnd)\n                        break;\n\n                    string property = (string) reader.Value;\n\n                    if (t_data.Properties.ContainsKey (property)) {\n                        PropertyMetadata prop_data =\n                            t_data.Properties[property];\n\n                        if (prop_data.IsField) {\n                            ((FieldInfo) prop_data.Info).SetValue (\n                                instance, ReadValue (prop_data.Type, reader));\n                        } else {\n                            PropertyInfo p_info =\n                                (PropertyInfo) prop_data.Info;\n\n                            if (p_info.CanWrite)\n                                p_info.SetValue (\n                                    instance,\n                                    ReadValue (prop_data.Type, reader),\n                                    null);\n                            else\n                                ReadValue (prop_data.Type, reader);\n                        }\n\n                    } else {\n                        if (! t_data.IsDictionary)\n                            throw new JsonException (String.Format (\n                                    \"The type {0} doesn't have the \" +\n                                    \"property '{1}'\", inst_type, property));\n\n                        ((IDictionary<string, JsonData>)instance).Add(\n                            property, (JsonData)ReadValue (\n                                t_data.ElementType, reader));\n                    }\n\n                }\n\n            }\n\n            return instance;\n        }\n\n        private static IJsonWrapper ReadValue (WrapperTestMethodory TestMethodory,\n                                               JsonReader reader)\n        {\n            reader.Read ();\n\n            if (reader.Token == JsonToken.ArrayEnd ||\n                reader.Token == JsonToken.Null)\n                return null;\n\n            IJsonWrapper instance = TestMethodory ();\n\n            if (reader.Token == JsonToken.String) {\n                instance.SetString ((string) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Double) {\n                instance.SetDouble ((double) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Int) {\n                instance.SetInt ((int) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Long) {\n                instance.SetLong ((long) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Boolean) {\n                instance.SetBoolean ((bool) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.ArrayStart) {\n                instance.SetJsonType (JsonType.Array);\n\n                while (true) {\n                    IJsonWrapper item = ReadValue (TestMethodory, reader);\n                    if (item == null && reader.Token == JsonToken.ArrayEnd)\n                        break;\n\n                    ((IList) instance).Add (item);\n                }\n            }\n            else if (reader.Token == JsonToken.ObjectStart) {\n                instance.SetJsonType (JsonType.Object);\n\n                while (true) {\n                    reader.Read ();\n\n                    if (reader.Token == JsonToken.ObjectEnd)\n                        break;\n\n                    string property = (string) reader.Value;\n\n                    ((IDictionary<string, JsonData>)instance)[property] = (JsonData)ReadValue(\n                        TestMethodory, reader);\n                }\n\n            }\n\n            return instance;\n        }\n\n        private static void RegisterBaseExporters ()\n        {\n            base_exporters_table[typeof (byte)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((byte) obj));\n                };\n\n            base_exporters_table[typeof (char)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToString ((char) obj));\n                };\n\n            base_exporters_table[typeof (DateTime)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToString ((DateTime) obj,\n                                                    datetime_format));\n                };\n\n            base_exporters_table[typeof (decimal)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write ((decimal) obj);\n                };\n\n            base_exporters_table[typeof (sbyte)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((sbyte) obj));\n                };\n\n            base_exporters_table[typeof (short)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((short) obj));\n                };\n\n            base_exporters_table[typeof (ushort)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((ushort) obj));\n                };\n\n            base_exporters_table[typeof (uint)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToUInt64 ((uint) obj));\n                };\n\n            base_exporters_table[typeof (ulong)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write ((ulong) obj);\n                };\n        }\n\n        private static void RegisterBaseImporters ()\n        {\n            ImporterFunc importer;\n\n            importer = delegate (object input) {\n                return Convert.ToByte ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (byte), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt64 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (ulong), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToSByte ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (sbyte), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToInt16 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (short), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt16 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (ushort), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt32 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (uint), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToSingle ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (float), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDouble ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (double), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDecimal ((double) input);\n            };\n            RegisterImporter (base_importers_table, typeof (double),\n                              typeof (decimal), importer);\n\n\n            importer = delegate (object input) {\n                return Convert.ToUInt32 ((long) input);\n            };\n            RegisterImporter (base_importers_table, typeof (long),\n                              typeof (uint), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToChar ((string) input);\n            };\n            RegisterImporter (base_importers_table, typeof (string),\n                              typeof (char), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDateTime ((string) input, datetime_format);\n            };\n            RegisterImporter (base_importers_table, typeof (string),\n                              typeof (DateTime), importer);\n        }\n\n        private static void RegisterImporter (\n            IDictionary<Type, IDictionary<Type, ImporterFunc>> table,\n            Type json_type, Type value_type, ImporterFunc importer)\n        {\n            if (! table.ContainsKey (json_type))\n                table.Add (json_type, new Dictionary<Type, ImporterFunc> ());\n\n            table[json_type][value_type] = importer;\n        }\n\n        private static void WriteValue (object obj, JsonWriter writer,\n                                        bool writer_is_private,\n                                        int depth)\n        {\n            if (depth > max_nesting_depth)\n                throw new JsonException (\n                    String.Format (\"Max allowed object depth reached while \" +\n                                   \"trying to export from type {0}\",\n                                   obj.GetType ()));\n\n            if (obj == null) {\n                writer.Write (null);\n                return;\n            }\n\n            if (obj is IJsonWrapper) {\n                if (writer_is_private)\n                    writer.TextWriter.Write (((IJsonWrapper) obj).ToJson ());\n                else\n                    ((IJsonWrapper) obj).ToJson (writer);\n\n                return;\n            }\n\n            if (obj is String) {\n                writer.Write ((string) obj);\n                return;\n            }\n\n            if (obj is Double) {\n                writer.Write ((double) obj);\n                return;\n            }\n\n            if (obj is Int32) {\n                writer.Write ((int) obj);\n                return;\n            }\n\n            if (obj is Boolean) {\n                writer.Write ((bool) obj);\n                return;\n            }\n\n            if (obj is Int64) {\n                writer.Write ((long) obj);\n                return;\n            }\n\n            if (obj is Array) {\n                writer.WriteArrayStart ();\n\n                foreach (object elem in (Array) obj)\n                    WriteValue (elem, writer, writer_is_private, depth + 1);\n\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj is IList) {\n                writer.WriteArrayStart ();\n                foreach (object elem in (IList) obj)\n                    WriteValue (elem, writer, writer_is_private, depth + 1);\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj is IDictionary<string, JsonData>)\n            {\n                writer.WriteObjectStart ();\n                foreach (var entry in (IDictionary<string, JsonData>)obj)\n                {\n                    writer.WritePropertyName ((string) entry.Key);\n                    WriteValue (entry.Value, writer, writer_is_private,\n                                depth + 1);\n                }\n                writer.WriteObjectEnd ();\n\n                return;\n            }\n\n            Type obj_type = obj.GetType ();\n\n            // See if there's a custom exporter for the object\n            if (custom_exporters_table.ContainsKey (obj_type)) {\n                ExporterFunc exporter = custom_exporters_table[obj_type];\n                exporter (obj, writer);\n\n                return;\n            }\n\n            // If not, maybe there's a base exporter\n            if (base_exporters_table.ContainsKey (obj_type)) {\n                ExporterFunc exporter = base_exporters_table[obj_type];\n                exporter (obj, writer);\n\n                return;\n            }\n\n            // Last option, let's see if it's an enum\n            if (obj is Enum) {\n                Type e_type = Enum.GetUnderlyingType (obj_type);\n\n                if (e_type == typeof (long)\n                    || e_type == typeof (uint)\n                    || e_type == typeof (ulong))\n                    writer.Write ((ulong) obj);\n                else\n                    writer.Write ((int) obj);\n\n                return;\n            }\n\n            // Okay, so it looks like the input should be exported as an\n            // object\n            AddTypeProperties (obj_type);\n            IList<PropertyMetadata> props = type_properties[obj_type];\n\n            writer.WriteObjectStart ();\n            foreach (PropertyMetadata p_data in props) {\n                if (p_data.IsField) {\n                    writer.WritePropertyName (p_data.Info.Name);\n                    WriteValue (((FieldInfo) p_data.Info).GetValue (obj),\n                                writer, writer_is_private, depth + 1);\n                }\n                else {\n                    PropertyInfo p_info = (PropertyInfo) p_data.Info;\n\n                    if (p_info.CanRead) {\n                        writer.WritePropertyName (p_data.Info.Name);\n                        WriteValue (p_info.GetValue (obj, null),\n                                    writer, writer_is_private, depth + 1);\n                    }\n                }\n            }\n            writer.WriteObjectEnd ();\n        }\n\n\n        public static string ToJson (object obj)\n        {\n            lock (static_writer_lock) {\n                static_writer.Reset ();\n\n                WriteValue (obj, static_writer, true, 0);\n\n                return static_writer.ToString ();\n            }\n        }\n\n        public static void ToJson (object obj, JsonWriter writer)\n        {\n            WriteValue (obj, writer, false, 0);\n        }\n\n        public static JsonData ToObject (JsonReader reader)\n        {\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, reader);\n        }\n\n        public static JsonData ToObject (TextReader reader)\n        {\n            JsonReader json_reader = new JsonReader (reader);\n\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, json_reader);\n        }\n\n        public static JsonData ToObject (string json)\n        {\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, json);\n        }\n\n        public static T ToObject<T> (JsonReader reader)\n        {\n            return (T) ReadValue (typeof (T), reader);\n        }\n\n        public static T ToObject<T> (TextReader reader)\n        {\n            JsonReader json_reader = new JsonReader (reader);\n\n            return (T) ReadValue (typeof (T), json_reader);\n        }\n\n        public static T ToObject<T> (string json)\n        {\n            JsonReader reader = new JsonReader (json);\n\n            return (T) ReadValue (typeof (T), reader);\n        }\n\n        public static IJsonWrapper ToWrapper (WrapperTestMethodory TestMethodory,\n                                              JsonReader reader)\n        {\n            return ReadValue (TestMethodory, reader);\n        }\n\n        public static IJsonWrapper ToWrapper (WrapperTestMethodory TestMethodory,\n                                              string json)\n        {\n            JsonReader reader = new JsonReader (json);\n\n            return ReadValue (TestMethodory, reader);\n        }\n\n        public static void RegisterExporter<T> (ExporterFunc<T> exporter)\n        {\n            ExporterFunc exporter_wrapper =\n                delegate (object obj, JsonWriter writer) {\n                    exporter ((T) obj, writer);\n                };\n\n            custom_exporters_table[typeof (T)] = exporter_wrapper;\n        }\n\n        public static void RegisterImporter<TJson, TValue> (\n            ImporterFunc<TJson, TValue> importer)\n        {\n            ImporterFunc importer_wrapper =\n                delegate (object input) {\n                    return importer ((TJson) input);\n                };\n\n            RegisterImporter (custom_importers_table, typeof (TJson),\n                              typeof (TValue), importer_wrapper);\n        }\n\n        public static void UnregisterExporters ()\n        {\n            custom_exporters_table.Clear ();\n        }\n\n        public static void UnregisterImporters ()\n        {\n            custom_importers_table.Clear ();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/JsonReader.cs",
    "content": "/**\n * JsonReader.cs\n *   Stream-like access to JSON text.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\n\nnamespace LitJson\n{\n    public enum JsonToken\n    {\n        None,\n\n        ObjectStart,\n        PropertyName,\n        ObjectEnd,\n\n        ArrayStart,\n        ArrayEnd,\n\n        Int,\n        Long,\n        ULong,\n        Double,\n\n        String,\n\n        Boolean,\n        Null\n    }\n\n\n    public class JsonReader\n    {\n        private static IDictionary<int, IDictionary<int, int[]>> parse_table;\n\n        private Stack<int>    automaton_stack;\n        private int           current_input;\n        private int           current_symbol;\n        private bool          end_of_json;\n        private bool          end_of_input;\n        private Lexer         lexer;\n        private bool          parser_in_string;\n        private bool          parser_return;\n        private bool          read_started;\n        private TextReader    reader;\n        private bool          reader_is_owned;\n        private object        token_value;\n        private JsonToken     token;\n\n        public bool AllowComments {\n            get { return lexer.AllowComments; }\n            set { lexer.AllowComments = value; }\n        }\n\n        public bool AllowSingleQuotedStrings {\n            get { return lexer.AllowSingleQuotedStrings; }\n            set { lexer.AllowSingleQuotedStrings = value; }\n        }\n\n        public bool EndOfInput {\n            get { return end_of_input; }\n        }\n\n        public bool EndOfJson {\n            get { return end_of_json; }\n        }\n\n        public JsonToken Token {\n            get { return token; }\n        }\n\n        public object Value {\n            get { return token_value; }\n        }\n\n        static JsonReader ()\n        {\n            PopulateParseTable ();\n        }\n\n        public JsonReader (string json_text) :\n            this (new StringReader (json_text), true)\n        {\n        }\n\n        public JsonReader (TextReader reader) :\n            this (reader, false)\n        {\n        }\n\n        private JsonReader (TextReader reader, bool owned)\n        {\n            if (reader == null)\n                throw new ArgumentNullException (\"reader\");\n\n            parser_in_string = false;\n            parser_return = false;\n\n            read_started = false;\n            automaton_stack = new Stack<int> ();\n            automaton_stack.Push ((int) ParserToken.End);\n            automaton_stack.Push ((int) ParserToken.Text);\n\n            lexer = new Lexer (reader);\n\n            end_of_input = false;\n            end_of_json  = false;\n\n            this.reader = reader;\n            reader_is_owned = owned;\n        }\n\n        private static void PopulateParseTable ()\n        {\n            parse_table = new Dictionary<int, IDictionary<int, int[]>> ();\n\n            TableAddRow (ParserToken.Array);\n            TableAddCol (ParserToken.Array, '[',\n                         '[',\n                         (int) ParserToken.ArrayPrime);\n\n            TableAddRow (ParserToken.ArrayPrime);\n            TableAddCol (ParserToken.ArrayPrime, '\"',\n                         (int) ParserToken.Value,\n\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, '[',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, ']',\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, '{',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Number,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.True,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.False,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Null,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n\n            TableAddRow (ParserToken.Object);\n            TableAddCol (ParserToken.Object, '{',\n                         '{',\n                         (int) ParserToken.ObjectPrime);\n\n            TableAddRow (ParserToken.ObjectPrime);\n            TableAddCol (ParserToken.ObjectPrime, '\"',\n                         (int) ParserToken.Pair,\n                         (int) ParserToken.PairRest,\n                         '}');\n            TableAddCol (ParserToken.ObjectPrime, '}',\n                         '}');\n\n            TableAddRow (ParserToken.Pair);\n            TableAddCol (ParserToken.Pair, '\"',\n                         (int) ParserToken.String,\n                         ':',\n                         (int) ParserToken.Value);\n\n            TableAddRow (ParserToken.PairRest);\n            TableAddCol (ParserToken.PairRest, ',',\n                         ',',\n                         (int) ParserToken.Pair,\n                         (int) ParserToken.PairRest);\n            TableAddCol (ParserToken.PairRest, '}',\n                         (int) ParserToken.Epsilon);\n\n            TableAddRow (ParserToken.String);\n            TableAddCol (ParserToken.String, '\"',\n                         '\"',\n                         (int) ParserToken.CharSeq,\n                         '\"');\n\n            TableAddRow (ParserToken.Text);\n            TableAddCol (ParserToken.Text, '[',\n                         (int) ParserToken.Array);\n            TableAddCol (ParserToken.Text, '{',\n                         (int) ParserToken.Object);\n\n            TableAddRow (ParserToken.Value);\n            TableAddCol (ParserToken.Value, '\"',\n                         (int) ParserToken.String);\n            TableAddCol (ParserToken.Value, '[',\n                         (int) ParserToken.Array);\n            TableAddCol (ParserToken.Value, '{',\n                         (int) ParserToken.Object);\n            TableAddCol (ParserToken.Value, (int) ParserToken.Number,\n                         (int) ParserToken.Number);\n            TableAddCol (ParserToken.Value, (int) ParserToken.True,\n                         (int) ParserToken.True);\n            TableAddCol (ParserToken.Value, (int) ParserToken.False,\n                         (int) ParserToken.False);\n            TableAddCol (ParserToken.Value, (int) ParserToken.Null,\n                         (int) ParserToken.Null);\n\n            TableAddRow (ParserToken.ValueRest);\n            TableAddCol (ParserToken.ValueRest, ',',\n                         ',',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest);\n            TableAddCol (ParserToken.ValueRest, ']',\n                         (int) ParserToken.Epsilon);\n        }\n\n        private static void TableAddCol (ParserToken row, int col,\n                                         params int[] symbols)\n        {\n            parse_table[(int) row].Add (col, symbols);\n        }\n\n        private static void TableAddRow (ParserToken rule)\n        {\n            parse_table.Add ((int) rule, new Dictionary<int, int[]> ());\n        }\n\n        private void ProcessNumber (string number)\n        {\n            var numStyle = NumberStyles.Any;\n            var culture = new CultureInfo(\"en-US\");\n\n            if (number.IndexOf('.') != -1 ||\n                number.IndexOf('e') != -1 ||\n                number.IndexOf('E') != -1)\n            {\n                double n_double;\n                if (Double.TryParse(number, numStyle, culture, out n_double))\n                {\n                    token = JsonToken.Double;\n                    token_value = n_double;\n\n                    return;\n                }\n            }\n\n            int n_int32;\n            if (Int32.TryParse(number, numStyle, culture, out n_int32))\n            {\n                token = JsonToken.Int;\n                token_value = n_int32;\n\n                return;\n            }\n\n            long n_int64;\n            if (Int64.TryParse(number, out n_int64))\n            {\n                token = JsonToken.Long;\n                token_value = n_int64;\n\n                return;\n            }\n\n            ulong n_uint64;\n            if (UInt64.TryParse(number, numStyle, culture, out n_uint64))\n            {\n                token = JsonToken.ULong;\n                token_value = n_uint64;\n\n                return;\n            }\n\n            // Shouldn't happen, but just in case, return something\n            token = JsonToken.Int;\n            token_value = 0;\n        }\n\n        private void ProcessSymbol ()\n        {\n            if (current_symbol == '[')  {\n                token = JsonToken.ArrayStart;\n                parser_return = true;\n\n            } else if (current_symbol == ']')  {\n                token = JsonToken.ArrayEnd;\n                parser_return = true;\n\n            } else if (current_symbol == '{')  {\n                token = JsonToken.ObjectStart;\n                parser_return = true;\n\n            } else if (current_symbol == '}')  {\n                token = JsonToken.ObjectEnd;\n                parser_return = true;\n\n            } else if (current_symbol == '\"')  {\n                if (parser_in_string) {\n                    parser_in_string = false;\n\n                    parser_return = true;\n\n                } else {\n                    if (token == JsonToken.None)\n                        token = JsonToken.String;\n\n                    parser_in_string = true;\n                }\n\n            } else if (current_symbol == (int) ParserToken.CharSeq) {\n                token_value = lexer.StringValue;\n\n            } else if (current_symbol == (int) ParserToken.False)  {\n                token = JsonToken.Boolean;\n                token_value = false;\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Null)  {\n                token = JsonToken.Null;\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Number)  {\n                ProcessNumber (lexer.StringValue);\n\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Pair)  {\n                token = JsonToken.PropertyName;\n\n            } else if (current_symbol == (int) ParserToken.True)  {\n                token = JsonToken.Boolean;\n                token_value = true;\n                parser_return = true;\n\n            }\n        }\n\n        private bool ReadToken ()\n        {\n            if (end_of_input)\n                return false;\n\n            lexer.NextToken ();\n\n            if (lexer.EndOfInput) {\n                Close ();\n\n                return false;\n            }\n\n            current_input = lexer.Token;\n\n            return true;\n        }\n\n\n        public void Close ()\n        {\n            if (end_of_input)\n                return;\n\n            end_of_input = true;\n            end_of_json  = true;\n\n            if (reader_is_owned)\n                reader.Dispose ();\n\n            reader = null;\n        }\n\n        public bool Read ()\n        {\n            if (end_of_input)\n                return false;\n\n            if (end_of_json) {\n                end_of_json = false;\n                automaton_stack.Clear ();\n                automaton_stack.Push ((int) ParserToken.End);\n                automaton_stack.Push ((int) ParserToken.Text);\n            }\n\n            parser_in_string = false;\n            parser_return    = false;\n\n            token       = JsonToken.None;\n            token_value = null;\n\n            if (! read_started) {\n                read_started = true;\n\n                if (! ReadToken ())\n                    return false;\n            }\n\n\n            int[] entry_symbols;\n\n            while (true) {\n                if (parser_return) {\n                    if (automaton_stack.Peek () == (int) ParserToken.End)\n                        end_of_json = true;\n\n                    return true;\n                }\n\n                current_symbol = automaton_stack.Pop ();\n\n                ProcessSymbol ();\n\n                if (current_symbol == current_input) {\n                    if (! ReadToken ()) {\n                        if (automaton_stack.Peek () != (int) ParserToken.End)\n                            throw new JsonException (\n                                \"Input doesn't evaluate to proper JSON text\");\n\n                        if (parser_return)\n                            return true;\n\n                        return false;\n                    }\n\n                    continue;\n                }\n\n                try {\n\n                    entry_symbols =\n                        parse_table[current_symbol][current_input];\n\n                } catch (KeyNotFoundException e) {\n                    throw new JsonException ((ParserToken) current_input, e);\n                }\n\n                if (entry_symbols[0] == (int) ParserToken.Epsilon)\n                    continue;\n\n                for (int i = entry_symbols.Length - 1; i >= 0; i--)\n                    automaton_stack.Push (entry_symbols[i]);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/JsonWriter.cs",
    "content": "/**\n * JsonWriter.cs\n *   Stream-like facility to output JSON text.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\n\nnamespace LitJson\n{\n    internal enum Condition\n    {\n        InArray,\n        InObject,\n        NotAProperty,\n        Property,\n        Value\n    }\n\n    internal class WriterContext\n    {\n        public int  Count;\n        public bool InArray;\n        public bool InObject;\n        public bool ExpectingValue;\n        public int  Padding;\n    }\n\n    public class JsonWriter\n    {\n        private static NumberFormatInfo number_format;\n\n        private WriterContext        context;\n        private Stack<WriterContext> ctx_stack;\n        private bool                 has_reached_end;\n        private char[]               hex_seq;\n        private int                  indentation;\n        private int                  indent_value;\n        private StringBuilder        inst_string_builder;\n        private bool                 pretty_print;\n        private bool                 validate;\n        private TextWriter           writer;\n\n        public int IndentValue {\n            get { return indent_value; }\n            set {\n                indentation = (indentation / indent_value) * value;\n                indent_value = value;\n            }\n        }\n\n        public bool PrettyPrint {\n            get { return pretty_print; }\n            set { pretty_print = value; }\n        }\n\n        public TextWriter TextWriter {\n            get { return writer; }\n        }\n\n        public bool Validate {\n            get { return validate; }\n            set { validate = value; }\n        }\n\n        static JsonWriter ()\n        {\n            number_format = NumberFormatInfo.InvariantInfo;\n        }\n\n        public JsonWriter ()\n        {\n            inst_string_builder = new StringBuilder ();\n            writer = new StringWriter (inst_string_builder);\n\n            Init ();\n        }\n\n        public JsonWriter (StringBuilder sb) :\n            this (new StringWriter (sb))\n        {\n        }\n\n        public JsonWriter (TextWriter writer)\n        {\n            if (writer == null)\n                throw new ArgumentNullException (\"writer\");\n\n            this.writer = writer;\n\n            Init ();\n        }\n\n        private void DoValidation (Condition cond)\n        {\n            if (! context.ExpectingValue)\n                context.Count++;\n\n            if (! validate)\n                return;\n\n            if (has_reached_end)\n                throw new JsonException (\n                    \"A complete JSON symbol has already been written\");\n\n            switch (cond) {\n            case Condition.InArray:\n                if (! context.InArray)\n                    throw new JsonException (\n                        \"Can't close an array here\");\n                break;\n\n            case Condition.InObject:\n                if (! context.InObject || context.ExpectingValue)\n                    throw new JsonException (\n                        \"Can't close an object here\");\n                break;\n\n            case Condition.NotAProperty:\n                if (context.InObject && ! context.ExpectingValue)\n                    throw new JsonException (\n                        \"Expected a property\");\n                break;\n\n            case Condition.Property:\n                if (! context.InObject || context.ExpectingValue)\n                    throw new JsonException (\n                        \"Can't add a property here\");\n                break;\n\n            case Condition.Value:\n                if (! context.InArray &&\n                    (! context.InObject || ! context.ExpectingValue))\n                    throw new JsonException (\n                        \"Can't add a value here\");\n\n                break;\n            }\n        }\n\n        private void Init ()\n        {\n            has_reached_end = false;\n            hex_seq = new char[4];\n            indentation = 0;\n            indent_value = 4;\n            pretty_print = false;\n            validate = true;\n\n            ctx_stack = new Stack<WriterContext> ();\n            context = new WriterContext ();\n            ctx_stack.Push (context);\n        }\n\n        private static void IntToHex (int n, char[] hex)\n        {\n            int num;\n\n            for (int i = 0; i < 4; i++) {\n                num = n % 16;\n\n                if (num < 10)\n                    hex[3 - i] = (char) ('0' + num);\n                else\n                    hex[3 - i] = (char) ('A' + (num - 10));\n\n                n >>= 4;\n            }\n        }\n\n        private void Indent ()\n        {\n            if (pretty_print)\n                indentation += indent_value;\n        }\n\n\n        private void Put (string str)\n        {\n            if (pretty_print && ! context.ExpectingValue)\n                for (int i = 0; i < indentation; i++)\n                    writer.Write (' ');\n\n            writer.Write (str);\n        }\n\n        private void PutNewline ()\n        {\n            PutNewline (true);\n        }\n\n        private void PutNewline (bool add_comma)\n        {\n            if (add_comma && ! context.ExpectingValue &&\n                context.Count > 1)\n                writer.Write (',');\n\n            if (pretty_print && ! context.ExpectingValue)\n                writer.Write ('\\n');\n        }\n\n        private void PutString (string str)\n        {\n            Put (String.Empty);\n\n            writer.Write ('\"');\n\n            int n = str.Length;\n            for (int i = 0; i < n; i++) {\n                switch (str[i]) {\n                case '\\n':\n                    writer.Write (\"\\\\n\");\n                    continue;\n\n                case '\\r':\n                    writer.Write (\"\\\\r\");\n                    continue;\n\n                case '\\t':\n                    writer.Write (\"\\\\t\");\n                    continue;\n\n                case '\"':\n                case '\\\\':\n                    writer.Write ('\\\\');\n                    writer.Write (str[i]);\n                    continue;\n\n                case '\\f':\n                    writer.Write (\"\\\\f\");\n                    continue;\n\n                case '\\b':\n                    writer.Write (\"\\\\b\");\n                    continue;\n                }\n\n                if ((int) str[i] >= 32 && (int) str[i] <= 126) {\n                    writer.Write (str[i]);\n                    continue;\n                }\n\n                // Default, turn into a \\uXXXX sequence\n                IntToHex ((int) str[i], hex_seq);\n                writer.Write (\"\\\\u\");\n                writer.Write (hex_seq);\n            }\n\n            writer.Write ('\"');\n        }\n\n        private void Unindent ()\n        {\n            if (pretty_print)\n                indentation -= indent_value;\n        }\n\n\n        public override string ToString ()\n        {\n            if (inst_string_builder == null)\n                return String.Empty;\n\n            return inst_string_builder.ToString ();\n        }\n\n        public void Reset ()\n        {\n            has_reached_end = false;\n\n            ctx_stack.Clear ();\n            context = new WriterContext ();\n            ctx_stack.Push (context);\n\n            if (inst_string_builder != null)\n                inst_string_builder.Remove (0, inst_string_builder.Length);\n        }\n\n        public void Write (bool boolean)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (boolean ? \"true\" : \"false\");\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (decimal number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (double number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            string str = Convert.ToString (number, number_format);\n            Put (str);\n\n            if (str.IndexOf ('.') == -1 &&\n                str.IndexOf ('E') == -1)\n                writer.Write (\".0\");\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (int number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (long number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (string str)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            if (str == null)\n                Put (\"null\");\n            else\n                PutString (str);\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (ulong number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void WriteArrayEnd ()\n        {\n            DoValidation (Condition.InArray);\n            PutNewline (false);\n\n            ctx_stack.Pop ();\n            if (ctx_stack.Count == 1)\n                has_reached_end = true;\n            else {\n                context = ctx_stack.Peek ();\n                context.ExpectingValue = false;\n            }\n\n            Unindent ();\n            Put (\"]\");\n        }\n\n        public void WriteArrayStart ()\n        {\n            DoValidation (Condition.NotAProperty);\n            PutNewline ();\n\n            Put (\"[\");\n\n            context = new WriterContext ();\n            context.InArray = true;\n            ctx_stack.Push (context);\n\n            Indent ();\n        }\n\n        public void WriteObjectEnd ()\n        {\n            DoValidation (Condition.InObject);\n            PutNewline (false);\n\n            ctx_stack.Pop ();\n            if (ctx_stack.Count == 1)\n                has_reached_end = true;\n            else {\n                context = ctx_stack.Peek ();\n                context.ExpectingValue = false;\n            }\n\n            Unindent ();\n            Put (\"}\");\n        }\n\n        public void WriteObjectStart ()\n        {\n            DoValidation (Condition.NotAProperty);\n            PutNewline ();\n\n            Put (\"{\");\n\n            context = new WriterContext ();\n            context.InObject = true;\n            ctx_stack.Push (context);\n\n            Indent ();\n        }\n\n        public void WritePropertyName (string property_name)\n        {\n            DoValidation (Condition.Property);\n            PutNewline ();\n\n            PutString (property_name);\n\n            if (pretty_print) {\n                if (property_name.Length > context.Padding)\n                    context.Padding = property_name.Length;\n\n                for (int i = context.Padding - property_name.Length;\n                     i >= 0; i--)\n                    writer.Write (' ');\n\n                writer.Write (\": \");\n            } else\n                writer.Write (':');\n\n            context.ExpectingValue = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/Lexer.cs",
    "content": "/**\n * Lexer.cs\n *   JSON lexer implementation based on a finite state machine.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\nusing System;\nusing System.IO;\nusing System.Text;\n\nnamespace LitJson\n{\n    internal class FsmContext\n    {\n        public bool  Return;\n        public int   NextState;\n        public Lexer L;\n        public int   StateStack;\n    }\n\n\n    internal class Lexer\n    {\n        private delegate bool StateHandler (FsmContext ctx);\n\n        private static int[]          fsm_return_table;\n        private static StateHandler[] fsm_handler_table;\n\n        private bool          allow_comments;\n        private bool          allow_single_quoted_strings;\n        private bool          end_of_input;\n        private FsmContext    fsm_context;\n        private int           input_buffer;\n        private int           input_char;\n        private TextReader    reader;\n        private int           state;\n        private StringBuilder string_buffer;\n        private string        string_value;\n        private int           token;\n        private int           unichar;\n\n        public bool AllowComments {\n            get { return allow_comments; }\n            set { allow_comments = value; }\n        }\n\n        public bool AllowSingleQuotedStrings {\n            get { return allow_single_quoted_strings; }\n            set { allow_single_quoted_strings = value; }\n        }\n\n        public bool EndOfInput {\n            get { return end_of_input; }\n        }\n\n        public int Token {\n            get { return token; }\n        }\n\n        public string StringValue {\n            get { return string_value; }\n        }\n\n        static Lexer ()\n        {\n            PopulateFsmTables ();\n        }\n\n        public Lexer (TextReader reader)\n        {\n            allow_comments = true;\n            allow_single_quoted_strings = true;\n\n            input_buffer = 0;\n            string_buffer = new StringBuilder (128);\n            state = 1;\n            end_of_input = false;\n            this.reader = reader;\n\n            fsm_context = new FsmContext ();\n            fsm_context.L = this;\n        }\n\n        private static int HexValue (int digit)\n        {\n            switch (digit) {\n            case 'a':\n            case 'A':\n                return 10;\n\n            case 'b':\n            case 'B':\n                return 11;\n\n            case 'c':\n            case 'C':\n                return 12;\n\n            case 'd':\n            case 'D':\n                return 13;\n\n            case 'e':\n            case 'E':\n                return 14;\n\n            case 'f':\n            case 'F':\n                return 15;\n\n            default:\n                return digit - '0';\n            }\n        }\n\n        private static void PopulateFsmTables ()\n        {\n            fsm_handler_table = new StateHandler[28] {\n                State1,\n                State2,\n                State3,\n                State4,\n                State5,\n                State6,\n                State7,\n                State8,\n                State9,\n                State10,\n                State11,\n                State12,\n                State13,\n                State14,\n                State15,\n                State16,\n                State17,\n                State18,\n                State19,\n                State20,\n                State21,\n                State22,\n                State23,\n                State24,\n                State25,\n                State26,\n                State27,\n                State28\n            };\n\n            fsm_return_table = new int[28] {\n                (int) ParserToken.Char,\n                0,\n                (int) ParserToken.Number,\n                (int) ParserToken.Number,\n                0,\n                (int) ParserToken.Number,\n                0,\n                (int) ParserToken.Number,\n                0,\n                0,\n                (int) ParserToken.True,\n                0,\n                0,\n                0,\n                (int) ParserToken.False,\n                0,\n                0,\n                (int) ParserToken.Null,\n                (int) ParserToken.CharSeq,\n                (int) ParserToken.Char,\n                0,\n                0,\n                (int) ParserToken.CharSeq,\n                (int) ParserToken.Char,\n                0,\n                0,\n                0,\n                0\n            };\n        }\n\n        private static char ProcessEscChar (int esc_char)\n        {\n            switch (esc_char) {\n            case '\"':\n            case '\\'':\n            case '\\\\':\n            case '/':\n                return Convert.ToChar (esc_char);\n\n            case 'n':\n                return '\\n';\n\n            case 't':\n                return '\\t';\n\n            case 'r':\n                return '\\r';\n\n            case 'b':\n                return '\\b';\n\n            case 'f':\n                return '\\f';\n\n            default:\n                // Unreachable\n                return '?';\n            }\n        }\n\n        private static bool State1 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r')\n                    continue;\n\n                if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 3;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case '\"':\n                    ctx.NextState = 19;\n                    ctx.Return = true;\n                    return true;\n\n                case ',':\n                case ':':\n                case '[':\n                case ']':\n                case '{':\n                case '}':\n                    ctx.NextState = 1;\n                    ctx.Return = true;\n                    return true;\n\n                case '-':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 2;\n                    return true;\n\n                case '0':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 4;\n                    return true;\n\n                case 'f':\n                    ctx.NextState = 12;\n                    return true;\n\n                case 'n':\n                    ctx.NextState = 16;\n                    return true;\n\n                case 't':\n                    ctx.NextState = 9;\n                    return true;\n\n                case '\\'':\n                    if (! ctx.L.allow_single_quoted_strings)\n                        return false;\n\n                    ctx.L.input_char = '\"';\n                    ctx.NextState = 23;\n                    ctx.Return = true;\n                    return true;\n\n                case '/':\n                    if (! ctx.L.allow_comments)\n                        return false;\n\n                    ctx.NextState = 25;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State2 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '1' && ctx.L.input_char<= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 3;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case '0':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 4;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State3 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                case '.':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 5;\n                    return true;\n\n                case 'e':\n                case 'E':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 7;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        private static bool State4 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char == ' ' ||\n                ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case ',':\n            case ']':\n            case '}':\n                ctx.L.UngetChar ();\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            case '.':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 5;\n                return true;\n\n            case 'e':\n            case 'E':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 7;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State5 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 6;\n                return true;\n            }\n\n            return false;\n        }\n\n        private static bool State6 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                case 'e':\n                case 'E':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 7;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State7 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 8;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case '+':\n            case '-':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 8;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State8 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char<= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State9 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'r':\n                ctx.NextState = 10;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State10 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 11;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State11 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'e':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State12 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'a':\n                ctx.NextState = 13;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State13 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.NextState = 14;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State14 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 's':\n                ctx.NextState = 15;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State15 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'e':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State16 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 17;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State17 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.NextState = 18;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State18 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State19 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                switch (ctx.L.input_char) {\n                case '\"':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 20;\n                    return true;\n\n                case '\\\\':\n                    ctx.StateStack = 19;\n                    ctx.NextState = 21;\n                    return true;\n\n                default:\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State20 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '\"':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State21 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 22;\n                return true;\n\n            case '\"':\n            case '\\'':\n            case '/':\n            case '\\\\':\n            case 'b':\n            case 'f':\n            case 'n':\n            case 'r':\n            case 't':\n                ctx.L.string_buffer.Append (\n                    ProcessEscChar (ctx.L.input_char));\n                ctx.NextState = ctx.StateStack;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State22 (FsmContext ctx)\n        {\n            int counter = 0;\n            int mult    = 4096;\n\n            ctx.L.unichar = 0;\n\n            while (ctx.L.GetChar ()) {\n\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' ||\n                    ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' ||\n                    ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') {\n\n                    ctx.L.unichar += HexValue (ctx.L.input_char) * mult;\n\n                    counter++;\n                    mult /= 16;\n\n                    if (counter == 4) {\n                        ctx.L.string_buffer.Append (\n                            Convert.ToChar (ctx.L.unichar));\n                        ctx.NextState = ctx.StateStack;\n                        return true;\n                    }\n\n                    continue;\n                }\n\n                return false;\n            }\n\n            return true;\n        }\n\n        private static bool State23 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                switch (ctx.L.input_char) {\n                case '\\'':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 24;\n                    return true;\n\n                case '\\\\':\n                    ctx.StateStack = 23;\n                    ctx.NextState = 21;\n                    return true;\n\n                default:\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State24 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '\\'':\n                ctx.L.input_char = '\"';\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State25 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '*':\n                ctx.NextState = 27;\n                return true;\n\n            case '/':\n                ctx.NextState = 26;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State26 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '\\n') {\n                    ctx.NextState = 1;\n                    return true;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State27 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '*') {\n                    ctx.NextState = 28;\n                    return true;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State28 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '*')\n                    continue;\n\n                if (ctx.L.input_char == '/') {\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                ctx.NextState = 27;\n                return true;\n            }\n\n            return true;\n        }\n\n\n        private bool GetChar ()\n        {\n            if ((input_char = NextChar ()) != -1)\n                return true;\n\n            end_of_input = true;\n            return false;\n        }\n\n        private int NextChar ()\n        {\n            if (input_buffer != 0) {\n                int tmp = input_buffer;\n                input_buffer = 0;\n\n                return tmp;\n            }\n\n            return reader.Read ();\n        }\n\n        public bool NextToken ()\n        {\n            StateHandler handler;\n            fsm_context.Return = false;\n\n            while (true) {\n                handler = fsm_handler_table[state - 1];\n\n                if (! handler (fsm_context))\n                    throw new JsonException (input_char);\n\n                if (end_of_input)\n                    return false;\n\n                if (fsm_context.Return) {\n                    string_value = string_buffer.ToString ();\n                    string_buffer.Remove (0, string_buffer.Length);\n                    token = fsm_return_table[state - 1];\n\n                    if (token == (int) ParserToken.Char)\n                        token = input_char;\n\n                    state = fsm_context.NextState;\n\n                    return true;\n                }\n\n                state = fsm_context.NextState;\n            }\n        }\n\n        private void UngetChar ()\n        {\n            input_buffer = input_char;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/ParserToken.cs",
    "content": "/**\n * ParserToken.cs\n *   Internal representation of the tokens used by the lexer and the parser.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nnamespace LitJson\n{\n    internal enum ParserToken\n    {\n        // Lexer tokens\n        None = System.Char.MaxValue + 1,\n        Number,\n        True,\n        False,\n        Null,\n        CharSeq,\n        // Single char\n        Char,\n\n        // Parser Rules\n        Text,\n        Object,\n        ObjectPrime,\n        Pair,\n        PairRest,\n        Array,\n        ArrayPrime,\n        Value,\n        ValueRest,\n        String,\n\n        // End of input\n        End,\n\n        // The empty rule\n        Epsilon\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Serialization/LitJson/README",
    "content": "LitJSON\n=======\n\nA .Net library to handle conversions from and to JSON (JavaScript Object\nNotation) strings.\n\nHome page: http://litjson.sourceforge.net/\n\n\nInstallation\n------------\n\nSee the file INSTALL for generic building and installation instructions.\n\nThe 'configure' script for this package recognizes the following specific\nflags:\n\n  --disable-debug\n    Disables the creation of debug binaries (e.g. LitJson.dll.mdb). These\n    are enabled by default.\n\n\nTests\n-----\n\nThis library comes with a set of unit tests using the NUnit framework. The\n'configure' script tries to find the necessary information in order to use\nthem.\n\nIf everything is set up properly, you may run the tests with 'make check'.\n\n\nUsing LitJSON from an application\n---------------------------------\n\nOnce this library is compiled and optionally installed in the root\nfilesystem, .Net developers may use it by simply copying the .dll file into\ntheir project's directory.\n\nFor those developers using standard Unix tools such as pkg-config and make,\nthis library comes with a .pc file to help in the process of consuming it.\n\nOne way this could work would be adding a rule in the Makefile (normally\ncalled 'update-libraries') where the necessary .dll's are copied into the\nproject's source directory, and a text file is created with the flags that\nare to be passed to the compiler. Then this text file is used in the rules\nused to compile the project. For example:\n\n\nupdate-libraries:\n\tcp `pkg-config --variable=Libraries litjson` .\n\tpkg-config --libs litjson > litjson.flags\n\nDemo.exe: Demo.cs litjson.flags\n\tmcs -out:$@ Demo.cs `cat litjson.flags`\n\n\nFor more information on this process, please see\n<http://www.mono-project.com/Guidelines:Application_Deployment>, section 2.\nLibraries with Unstable APIs.\n\n\nBug Reports\n-----------\n\nPlease submit all bug reports, feature requests and patches on the project's\nwebsite at:\n  http://sourceforge.net/tracker/?group_id=202631\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/Annotation.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Annotation\n    {\n        public Annotation() { }\n        public Annotation(JsonData annotationJson)\n        {\n            if (annotationJson == null)\n            {\n                Attributes = new Dictionary<string, string>();\n                Elements = new Dictionary<string, string>();\n                return;\n            }\n\n            var attrDictionary = annotationJson as IDictionary<string, JsonData>;\n            Attributes =\n                (from string key in attrDictionary.Keys\n                 select new\n                 {\n                     Key = key,\n                     Value = attrDictionary[key]\n                 })\n                .ToDictionary(\n                    atr => atr.Key.ToString(),\n                    atr => atr.Value.ToString());\n        }\n\n        public string Type { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string> Attributes { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string> Elements { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/Contributor.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Contributor\n    {\n        public Contributor() { }\n        public Contributor(JsonData contributorJson)\n        {\n            ID = contributorJson.GetValue<string>(\"id_str\");\n            ScreenName = contributorJson.GetValue<string>(\"screen_name\");\n        }\n\n        public string ID { get; set; }\n\n        public string ScreenName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/EmbeddedStatus.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class EmbeddedStatus\n    {\n        public EmbeddedStatus() { }\n        public EmbeddedStatus(JsonData embeddedStatusJson)\n        {\n            Html = embeddedStatusJson.GetValue<string>(\"html\");\n            AuthorName = embeddedStatusJson.GetValue<string>(\"author_name\");\n            AuthorUrl = embeddedStatusJson.GetValue<string>(\"author_url\");\n            ProviderName = embeddedStatusJson.GetValue<string>(\"provider_name\");\n            ProviderUrl = embeddedStatusJson.GetValue<string>(\"provider_url\");\n            Url = embeddedStatusJson.GetValue<string>(\"url\");\n            Version = embeddedStatusJson.GetValue<string>(\"version\");\n            Type = embeddedStatusJson.GetValue<string>(\"type\");\n            Height = embeddedStatusJson.GetValue<int>(\"height\");\n            Width = embeddedStatusJson.GetValue<int>(\"width\");\n            string cacheAgeStr = embeddedStatusJson.GetValue<string>(\"cache_age\");\n            if (!string.IsNullOrWhiteSpace(cacheAgeStr)) \n                CacheAge = ulong.Parse(cacheAgeStr);\n        }\n\n        public string Html { get; set; }\n\n        public string AuthorName { get; set; }\n\n        public string ProviderUrl { get; set; }\n\n        public string Url { get; set; }\n\n        public string ProviderName { get; set; }\n\n        public string Version { get; set; }\n\n        public string Type { get; set; }\n\n        public int Height { get; set; }\n\n        public ulong CacheAge { get; set; }\n\n        public string AuthorUrl { get; set; }\n\n        public int Width { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/EmbeddedStatusAlignment.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum EmbeddedStatusAlignment\n    {\n        None,\n\n        Left,\n\n        Right,\n\n        Center\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/FilterLevel.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter evaluation of tweet quality\n    /// </summary>\n    public enum FilterLevel\n    {\n        /// <summary>\n        /// No value\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// Low value\n        /// </summary>\n        Low,\n\n        /// <summary>\n        /// Medium quality\n        /// </summary>\n        Medium,\n\n        /// <summary>\n        /// High quality\n        /// </summary>\n        High\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/Media.cs",
    "content": "﻿using LitJson;\nusing System;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Media\n    {\n        public Media() { }\n        public Media(JsonData media)\n        {\n            if (media == null) return;\n\n            Image = new MediaImage(media.GetValue<JsonData>(\"image\"));\n            MediaID = media.GetValue<string>(\"media_id_string\").GetULong(0);\n            Size = media.GetValue<int>(\"size\");\n        }\n\n        public MediaType Type { get; set; }\n\n        public MediaImage Image { get; set; }\n\n        public ulong MediaID { get; set; }\n\n        public int Size { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/MediaImage.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LitJson;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class MediaImage\n    {\n        public MediaImage(JsonData image)\n        {\n            Width = image.GetValue<int>(\"w\");\n            Height = image.GetValue<int>(\"h\");\n            ImageType = image.GetValue<string>(\"image_type\");\n        }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string ImageType { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/MediaType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum MediaType\n    {\n        Image\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/Retweet.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Retweet Information\n    /// </summary>\n    [Obsolete(\"Deprecated: Use RetweetedStatus on Status instead.\")]\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Retweet\n    {\n        /// <summary>\n        /// Retweet ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Date/Time Retweeted\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// User of Original Tweet\n        /// </summary>\n        public User RetweetedUser { get; set; }\n\n        /// <summary>\n        /// Retweet Text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Which application sent retweet\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// Is text truncated\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// Status ID retweeted\n        /// </summary>\n        public string InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// ID of User retweeted\n        /// </summary>\n        public string InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Is Favorited\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// Screen name of retweeted user\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// Number of retweets\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has retweet been retweeted\n        /// </summary>\n        public object Retweeted { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/Status.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Written by: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// returned information from Twitter Status queries\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Status\n    {\n        public Status() {}\n        public Status(JsonData status)\n        {\n            if (status == null) return;\n\n            Retweeted = status.GetValue<bool>(\"retweeted\");\n            Source = status.GetValue<string>(\"source\");\n            InReplyToScreenName = status.GetValue<string>(\"in_reply_to_screen_name\");\n            PossiblySensitive = status.GetValue<bool>(\"possibly_sensitive\");\n            RetweetedStatus = new Status(status.GetValue<JsonData>(\"retweeted_status\"));\n            var contributors = status.GetValue<JsonData>(\"contributors\");\n            Contributors =\n                contributors == null ?\n                    new List<Contributor>() :\n                    (from JsonData contributor in contributors\n                     select new Contributor(contributor))\n                    .ToList();\n            var coords = status.GetValue<JsonData>(\"coordinates\");\n            if (coords != null)\n            {\n                Coordinates = new Coordinate(coords.GetValue<JsonData>(\"coordinates\"));\n            }\n            else\n            {\n                Coordinates = new Coordinate();\n            }\n            Place = new Place(status.GetValue<JsonData>(\"place\"));\n            RetweetCount = status.GetValue<int>(\"retweet_count\");\n            StatusID = status.GetValue<ulong>(\"id\");\n            FavoriteCount = status.GetValue<int?>(\"favorite_count\");\n            Favorited = status.GetValue<bool>(\"favorited\");\n            InReplyToStatusID = status.GetValue<ulong>(\"in_reply_to_status_id\");\n            Source = status.GetValue<string>(\"source\");\n            CreatedAt = status.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            InReplyToUserID = status.GetValue<ulong>(\"in_reply_to_user_id\");\n            Truncated = status.GetValue<bool>(\"truncated\");\n            Text = status.GetValue<string>(\"text\");\n            Annotation = new Annotation(status.GetValue<JsonData>(\"annotation\"));\n            Entities = new Entities(status.GetValue<JsonData>(\"entities\"));\n            ExtendedEntities = new Entities(status.GetValue<JsonData>(\"extended_entities\"));\n            var currentUserRetweet = status.GetValue<JsonData>(\"current_user_retweet\");\n            if (currentUserRetweet != null)\n            {\n                CurrentUserRetweet = currentUserRetweet.GetValue<ulong>(\"id\");\n            }\n            var scopes = status.GetValue<JsonData>(\"scopes\");\n            Scopes =\n                scopes == null ? new Dictionary<string, string>() :\n                (from key in (scopes as IDictionary<string, JsonData>).Keys as List<string>\n                 select new\n                 {\n                     Key = key,\n                     Value = scopes[key].ToString()\n                 })\n                .ToDictionary(\n                    key => key.Key,\n                    val => val.Value);\n            WithheldCopyright = status.GetValue<bool>(\"withheld_copyright\");\n            var withheldCountries = status.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in status.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n            WithheldScope = status.GetValue<string>(\"withheld_scope\");\n            MetaData = new StatusMetaData(status.GetValue<JsonData>(\"metadata\"));\n            Lang = status.GetValue<string>(\"lang\");\n            string filterLvl = status.GetValue<string>(\"filter_level\");\n            try\n            {\n                FilterLevel =\n                    filterLvl == null ? FilterLevel.None :\n                    (FilterLevel)Enum.Parse(typeof(FilterLevel), filterLvl, ignoreCase: true);\n            }\n            catch (ArgumentException)\n            {\n                FilterLevel = FilterLevel.None;\n            }\n            User = new User(status.GetValue<JsonData>(\"user\"));\n            Users = new List<ulong>();\n        }\n\n        /// <summary>\n        /// Supports XML serialization\n        /// </summary>\n        [XmlIgnore]\n        StatusType type;\n\n        /// <summary>\n        /// type of status request, i.e. Friends or Public\n        /// </summary>\n        [XmlIgnore]\n        public StatusType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlAttribute(AttributeName = \"Type\")]\n        internal StatusType StatusTypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// ID of User\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// User Screen Name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// By default, user timeline doesn't include retweets,\n        /// but you can set this to true to includes retweets\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in results\n        /// </summary>\n        public bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add entities to user (default: true)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        public bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        public string OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        public int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand image\n        /// </summary>\n        public bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        public bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        public bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        public EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        public string OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        public string OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// when was the tweet created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// ID of this status\n        /// </summary>\n        public ulong StatusID { get; set; }\n\n        /// <summary>\n        /// Tweet Text (140)characters\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// where did the tweet come from\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// has the tweet been truncated\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// id of tweet being replied to, if it is a reply\n        /// </summary>\n        public ulong InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// id of user being replied to, if it is a reply\n        /// </summary>\n        public ulong InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Number of times this tweet has been favorited\n        /// </summary>\n        public int? FavoriteCount { get; set; }\n\n        /// <summary>\n        /// is listed as a favorite\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// screen name of user being replied to, if it is a reply\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// information about user posting tweet (except in user tweets)\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Users who retweeted a tweet (used in StatusType.RetweetedBy queries)\n        /// </summary>\n        public List<ulong> Users { get; set; }\n\n        /// <summary>\n        /// users who have contributed\n        /// </summary>\n        public List<Contributor> Contributors { get; set; }\n\n        /// <summary>\n        /// Coordinates of where tweet occurred\n        /// </summary>\n        public Coordinate Coordinates { get; set; }\n\n        /// <summary>\n        /// Place where status was created\n        /// </summary>\n        public Place Place { get; set; }\n\n        /// <summary>\n        /// Meta-data applied to tweet\n        /// </summary>\n        public Annotation Annotation { get; set; }\n\n        /// <summary>\n        /// Entities connected to the status\n        /// </summary>\n        public Entities Entities { get; set; }\n\n        /// <summary>\n        /// Additional entities connected to the status\n        /// </summary>\n        public Entities ExtendedEntities { get; set; }\n\n        /// <summary>\n        /// Removes all user info, except for ID\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Include more contributor info, beyond ID\n        /// </summary>\n        public bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Number of times retweeted\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has tweet been retweeted\n        /// </summary>\n        public bool Retweeted { get; set; }\n\n        /// <summary>\n        /// Is tweet possibly sensitive (can be set via TweetWithMedia)\n        /// </summary>\n        public bool PossiblySensitive { get; set; }\n\n        /// <summary>\n        /// Retweeted status is status is a retweet\n        /// </summary>\n        public Status RetweetedStatus { get; set; }\n\n        /// <summary>\n        /// ID of source status of retweet if IncludeMyRetweet is true.\n        /// Set to 0 if IncludeMyRetweet is false or tweet not retweeted\n        /// by authenticating user.\n        /// </summary>\n        public ulong CurrentUserRetweet { get; set; }\n\n        /// <summary>\n        /// Set of key/value pairs to support promoted tweets\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string> Scopes { get; set; }\n\n        /// <summary>\n        /// Indicates that you shouldn't display because there\n        /// is currently a DMCA complaint against the tweet.\n        /// </summary>\n        public bool WithheldCopyright { get; set; }\n\n        /// <summary>\n        /// Don't display tweet in countries in this list\n        /// </summary>\n        public List<string> WithheldInCountries { get; set; }\n\n        /// <summary>\n        /// Part of the tweet that should not be displayed.\n        /// </summary>\n        public string WithheldScope { get; set; }\n\n        /// <summary>\n        /// Status meta-data returned from searches\n        /// </summary>\n        public StatusMetaData MetaData { get; set; }\n\n        /// <summary>\n        /// Twitter machine-detected prediction of language tweet is written in\n        /// </summary>\n        public string Lang { get; set; }\n\n        /// <summary>\n        /// Indicate that a status lookup should return null objects for \n        /// tweets that the authorizing user doesn't have access to. \n        /// (e.g. tweet is from a protected account or doesn't exist)\n        /// </summary>\n        public bool Map { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet IDs passed to Lookup.\n        /// </summary>\n        public string TweetIDs { get; set; }\n\n        /// <summary>\n        /// Twitter's evaluation of tweet quality\n        /// </summary>\n        public FilterLevel FilterLevel { get; set; }\n\n        /// <summary>\n        /// Populated with OEmbed response for StatusType.OEmbed queries\n        /// </summary>\n        public EmbeddedStatus EmbeddedStatus { get; set; }\n\n        /// <summary>\n        /// Manage paging through a list (e.g. IDs from Users collection)\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// This helps process media uploads via StatusRequestProcessor.ProcessActionResult\n        /// </summary>\n        internal Media Media { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/StatusAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum StatusAction\n    {\n        SingleStatus,\n\n        MediaUpload\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/StatusMetaData.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class StatusMetaData\n    {\n        public StatusMetaData() { }\n        public StatusMetaData(JsonData mdJson)\n        {\n            ResultType = mdJson.GetValue<string>(\"result_type\");\n            IsoLanguageCode = mdJson.GetValue<string>(\"iso_language_code\");\n        }\n\n        public string ResultType { get; set; }\n\n        public string IsoLanguageCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/StatusRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Status requests\n    /// </summary>\n    public class StatusRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of status request, i.e. Show or User\n        /// </summary>\n        internal StatusType Type { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// User ID to disambiguate when ID is same as screen name\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen Name to disambiguate when ID is same as UserD\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Retweets are optional and you must set this to true\n        /// before they will be included in the user timeline\n        /// </summary>\n        internal bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in responses\n        /// </summary>\n        internal bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Include entities in tweets (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Include entities in users (default: true)\n        /// </summary>\n        internal bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Remove all user info, except for User ID\n        /// </summary>\n        internal bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Enhances contributor info, beyond the default ID\n        /// </summary>\n        internal bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        internal bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        internal string OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        internal int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand media\n        /// </summary>\n        internal bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        internal bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        internal bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        internal EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        internal string OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        internal string OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet IDs passed to Lookup.\n        /// </summary>\n        public string TweetIDs { get; set; }\n\n        /// <summary>\n        /// Indicate that a status lookup should return null objects for \n        /// tweets that the authorizing user doesn't have access to. \n        /// (e.g. tweet is from a protected account or doesn't exist)\n        /// </summary>\n        internal bool Map { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Status>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"IncludeRetweets\",\n                       \"ExcludeReplies\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"TrimUser\",\n                       \"IncludeContributorDetails\",\n                       \"IncludeMyRetweet\",\n                       \"OEmbedUrl\",\n                       \"OEmbedMaxWidth\",\n                       \"OEmbedHideMedia\",\n                       \"OEmbedHideThread\",\n                       \"OEmbedOmitScript\",\n                       \"OEmbedAlign\",\n                       \"OEmbedRelated\",\n                       \"OEmbedLanguage\",\n                       \"TweetIDs\",\n                       \"Map\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<StatusType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StatusType.Conversation:\n                    return BuildConversationUrl(parameters);\n                case StatusType.Home:\n                    return BuildHomeUrl(parameters);\n                case StatusType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case StatusType.Mentions:\n                    return BuildMentionsUrl(parameters);\n                case StatusType.Oembed:\n                    return BuildOembedUrl(parameters);\n                case StatusType.RetweetsOfMe:\n                    return BuildRetweetsOfMeUrl(parameters);\n                case StatusType.Retweets:\n                    return BuildRetweets(parameters);\n                case StatusType.Show:\n                    return BuildShowUrl(parameters);\n                case StatusType.User:\n                    return BuildUserUrl(parameters);\n                case StatusType.Retweeters:\n                    return BuildRetweetersUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters that are common to both friend and user queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = ulong.Parse(parameters[\"ID\"]);\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"ExcludeReplies\"))\n            {\n                ExcludeReplies = bool.Parse(parameters[\"ExcludeReplies\"]);\n                urlParams.Add(new QueryParameter(\"exclude_replies\", parameters[\"ExcludeReplies\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeMyRetweet\"))\n            {\n                IncludeMyRetweet = bool.Parse(parameters[\"IncludeMyRetweet\"]);\n                urlParams.Add(new QueryParameter(\"include_my_retweet\", parameters[\"IncludeMyRetweet\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeContributorDetails\"))\n            {\n                IncludeContributorDetails = bool.Parse(parameters[\"IncludeContributorDetails\"]);\n                urlParams.Add(new QueryParameter(\"contributor_details\", parameters[\"IncludeContributorDetails\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildConversationUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\") || string.IsNullOrWhiteSpace(parameters[\"ID\"]))\n                throw new ArgumentNullException(\"ID\", \"ID is required\");\n\n            var req = new Request(BaseUrl + \"conversation/show.json\");\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base home url\n        /// </summary>\n        /// <returns>base url + home segment</returns>\n        Request BuildHomeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/home_timeline.json\");\n        }\n\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"TweetIDs\") || string.IsNullOrWhiteSpace(parameters[\"TweetIDs\"]))\n                throw new ArgumentNullException(\"TweetIDs\", \"TweetIDs is required\");\n\n            var req = new Request(BaseUrl + \"statuses/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            TweetIDs = parameters[\"TweetIDs\"].Replace(\" \", \"\");\n            urlParams.Add(new QueryParameter(\"id\", TweetIDs));\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Map\"))\n            {\n                Map = bool.Parse(parameters[\"Map\"]);\n                urlParams.Add(new QueryParameter(\"map\", parameters[\"Map\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">parameters to build url query with</param>\n        /// <returns>base url + mentions segment</returns>\n        Request BuildMentionsUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/mentions_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct an oembed url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + url segment</returns>\n        Request BuildOembedUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/oembed.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = ulong.Parse(parameters[\"ID\"]);\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedUrl\"))\n            {\n                OEmbedUrl = parameters[\"OEmbedUrl\"];\n                urlParams.Add(new QueryParameter(\"url\", parameters[\"OEmbedUrl\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedMaxWidth\"))\n            {\n                OEmbedMaxWidth = int.Parse(parameters[\"OEmbedMaxWidth\"]);\n                urlParams.Add(new QueryParameter(\"maxwidth\", parameters[\"OEmbedMaxWidth\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideMedia\"))\n            {\n                OEmbedHideMedia = bool.Parse(parameters[\"OEmbedHideMedia\"]);\n                urlParams.Add(new QueryParameter(\"hide_media\", parameters[\"OEmbedHideMedia\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideThread\"))\n            {\n                OEmbedHideThread = bool.Parse(parameters[\"OEmbedHideThread\"]);\n                urlParams.Add(new QueryParameter(\"hide_thread\", parameters[\"OEmbedHideThread\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedOmitScript\"))\n            {\n                OEmbedOmitScript = bool.Parse(parameters[\"OEmbedOmitScript\"]);\n                urlParams.Add(new QueryParameter(\"omit_script\", parameters[\"OEmbedOmitScript\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedAlign\"))\n            {\n                OEmbedAlign = (EmbeddedStatusAlignment)Enum.Parse(typeof(EmbeddedStatusAlignment), parameters[\"OEmbedAlign\"], true);\n                urlParams.Add(new QueryParameter(\"align\", OEmbedAlign.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedRelated\"))\n            {\n                OEmbedRelated = parameters[\"OEmbedRelated\"];\n                urlParams.Add(new QueryParameter(\"related\", parameters[\"OEmbedRelated\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedLanguage\"))\n            {\n                OEmbedLanguage = parameters[\"OEmbedLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"OEmbedLanguage\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base retweeted by user url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweeted by user segment</returns>\n        Request BuildRetweets(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentNullException(\"ID\", \"ID is required.\");\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n\n            var req = new Request(BaseUrl + \"statuses/retweets/\" + ID + \".json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweets of me segment</returns>\n        Request BuildRetweetsOfMeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/retweets_of_me.json\");\n        }\n\n        Request BuildRetweetersUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required.\", \"ID\");\n\n            var url = BaseUrl + \"statuses/retweeters/ids.json\";\n            var req = new Request(url);\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for showing status of user\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/show.json\");\n        }\n\n        /// <summary>\n        /// construct an url for the user timeline\n        /// </summary>\n        /// <returns>base url + user timeline segment</returns>\n        Request BuildUserUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/user_timeline.json\");\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of Status\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of Status</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            List<Status> statusList;\n            switch (Type)\n            {\n                case StatusType.Show:\n                    statusList = new List<Status> { new Status(statusJson) };\n                    break;\n                case StatusType.Home:\n                case StatusType.Lookup:\n                case StatusType.Mentions:\n                case StatusType.RetweetsOfMe:\n                case StatusType.Retweets:\n                case StatusType.User:\n                    statusList =\n                        (from JsonData status in statusJson\n                         select new Status(status))\n                        .ToList();\n                    break;\n                case StatusType.Retweeters:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            Users =\n                                (from JsonData id in statusJson.GetValue<JsonData>(\"ids\")\n                                 select (ulong)id)\n                                .ToList(),\n                            CursorMovement = new Cursors(statusJson)\n                        }\n                    };\n                    break;\n                case StatusType.Oembed:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            EmbeddedStatus = new EmbeddedStatus(statusJson)\n                        }\n                    };\n                    break;\n                default:\n                    statusList = new List<Status>();\n                    break;\n            }\n\n            foreach (var status in statusList)\n            {\n                status.Type = Type;\n                status.ID = ID;\n                status.UserID = UserID;\n                status.ScreenName = ScreenName;\n                status.SinceID = SinceID;\n                status.MaxID = MaxID;\n                status.Count = Count;\n                status.Cursor = Cursor;\n                status.IncludeRetweets = IncludeRetweets;\n                status.ExcludeReplies = ExcludeReplies;\n                status.IncludeEntities = IncludeEntities;\n                status.IncludeUserEntities = IncludeUserEntities;\n                status.TrimUser = TrimUser;\n                status.IncludeContributorDetails = IncludeContributorDetails;\n                status.IncludeMyRetweet = IncludeMyRetweet;\n                status.OEmbedAlign = OEmbedAlign;\n                status.OEmbedHideMedia = OEmbedHideMedia;\n                status.OEmbedHideThread = OEmbedHideThread;\n                status.OEmbedMaxWidth = OEmbedMaxWidth;\n                status.OEmbedOmitScript = OEmbedOmitScript;\n                status.OEmbedRelated = OEmbedRelated;\n                status.OEmbedUrl = OEmbedUrl;\n                status.OEmbedLanguage = OEmbedLanguage;\n                status.TweetIDs = TweetIDs;\n                status.Map = Map;\n            }\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            Status status = null;\n\n            switch ((StatusAction)theAction)\n            {\n                case StatusAction.SingleStatus:\n                    status = new Status(statusJson);\n                    break;\n                case StatusAction.MediaUpload:\n                    status = new Status\n                    {\n                        Media = new Media(statusJson)\n                    };\n                    break;\n                default:\n                    break;\n            }\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/StatusType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// type of status request\n    /// </summary>\n    public enum StatusType\n    {\n        /// <summary>\n        /// tweets from a specific user\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, user ID to retrieve tweets for\n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        ///     - IncludeRetweets, return retweets too\n        /// </summary>\n        User,\n\n        /// <summary>\n        /// a specific tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to retrieve\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// lists the 20 most recent tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        Mentions,\n\n        /// <summary>\n        /// Same as Friend, but includes retweets too\n        /// \n        /// Available Options:\n        /// \n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        /// </summary>\n        Home,\n\n        /// <summary>\n        /// gets retweets of specified tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to get retweets for\n        ///     - Count, number of tweets to retrieve\n        /// </summary>\n        Retweets,\n\n        /// <summary>\n        /// lists the 20 most recent re-tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        RetweetsOfMe,\n\n        /// <summary>\n        /// lists up to 100 ids of users who retweeted a status\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, retweeted tweet ID\n        ///     - Cursor, page to return\n        /// </summary>\n        Retweeters,\n\n        /// <summary>\n        /// provides information, such as HTML, to embed a tweet in a Web page\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet ID\n        ///     - OEmbedUrl, Url of tweet to embed\n        ///     - OEmbedMaxWidth, Max number of pixels for width\n        ///     - OEmbedHideMedia, Don't initially expand image\n        ///     - OEmbedHideThread, Show original message for replies\n        ///     - OEmbedOmitScript, Don't include widgets.js script\n        ///     - OEmbedAlign, Image alignment: Left, Right, Center, or None\n        ///     - OEmbedRelated, Suggested accounts for the viewer to follow\n        ///     - OEmbedLanguage, Language code for rendered tweet\n        /// </summary>\n        Oembed,\n\n        /// <summary>\n        /// Shows a conversation associated with a tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet ID\n        /// </summary>\n        Conversation,\n\n        /// <summary>\n        /// Returns tweets matching a list of ids\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, comma-separated list of tweet ids\n        ///     - IncludeEntities, add entity metadata to tweets\n        ///     - TrimUser, omit the user object from tweets\n        ///     - Map, include null object for missing tweets\n        ///     \n        /// </summary>\n        Lookup\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Status/TwitterContextStatusCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        public const ulong MissingID = 0ul;\n        public const ulong NoReply = 0ul;\n        public const decimal NoCoordinate = Decimal.MaxValue;\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"status\">Status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"image\">Media to send</param>\n        /// <returns>Status containing new tweet</returns>\n        [Obsolete(\"Twitter has deprecated this API and you should use UploadMediaAsync/TweetAsync instead.\")]\n        public async Task<Status> TweetWithMediaAsync(string status, bool possiblySensitive, byte[] image)\n        {\n            return await ReplyWithMediaAsync(NoReply, status, possiblySensitive, NoCoordinate, NoCoordinate, null, false, image).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with attached media\n        /// </summary>\n        /// <param name=\"status\">Status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"image\">Media to send</param>\n        /// <returns>Status containing new reply</returns>\n        [Obsolete(\"Twitter has deprecated this API and you should use UploadMediaAsync/TweetAsync instead.\")]\n        public async Task<Status> TweetWithMediaAsync(string status, bool possiblySensitive, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, byte[] image)\n        {\n            return await ReplyWithMediaAsync(NoReply, status, possiblySensitive, latitude, longitude, placeID, displayCoordinates, image).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"status\">Status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"image\">Media to send</param>\n        /// <returns>Status containing new reply</returns>\n        [Obsolete(\"Twitter has deprecated this API and you should use UploadMediaAsync/ReplyAsync instead.\")]\n        public async Task<Status> ReplyWithMediaAsync(ulong inReplyToStatusID, string status, bool possiblySensitive, byte[] image)\n        {\n            return await ReplyWithMediaAsync(inReplyToStatusID, status, possiblySensitive, NoCoordinate, NoCoordinate, null, false, image).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// sends a status update with attached media\n        /// </summary>\n        /// <param name=\"inReplyToStatusID\">id of status replying to - optional - pass null if not used</param>\n        /// <param name=\"status\">Status text</param>\n        /// <param name=\"possiblySensitive\">Set to true if media does not contain age appropriate content</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query)</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet</param>\n        /// <param name=\"image\">Media to send</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        [Obsolete(\"Twitter has deprecated this API and you should use UploadMediaAsync/ReplyAsync instead.\")]\n        public async Task<Status> ReplyWithMediaAsync(ulong inReplyToStatusID, string status, bool possiblySensitive, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, byte[] image, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(status))\n                throw new ArgumentNullException(\"status\", \"status is a required parameter.\");\n\n            if (image == null || image.Length == 0)\n                throw new ArgumentNullException(\"image\", \"You must provide a byte[] of image data.\");\n\n            string updateUrl = BaseUrl + \"statuses/update_with_media.json\";\n            string imageType = \"application/octet-stream\";\n            string name = \"media[]\";\n            string randomUnusedFileName = new Random().Next(100, 999).ToString();\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostMediaAsync(\n                    updateUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"status\", status},\n                        {\"possibly_sensitive\", possiblySensitive ? true.ToString() : null },\n                        {\"lat\", latitude == NoCoordinate ? null : latitude.ToString(Culture.US) },\n                        {\"long\", longitude == NoCoordinate ? null : longitude.ToString(Culture.US) },\n                        {\"place_id\", string.IsNullOrWhiteSpace(placeID) ? null : placeID },\n                        {\"display_coordinates\", displayCoordinates ? true.ToString() : null },\n                        {\"in_reply_to_status_id\", inReplyToStatusID == NoReply ? null : inReplyToStatusID.ToString(CultureInfo.InvariantCulture)}\n                    },\n                    image, \n                    name,\n                    randomUnusedFileName,\n                    imageType,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Uploads a media (e.g. media) to be attached to a subsequent tweet.\n        /// </summary>\n        /// <param name=\"media\">Media to upload</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public async Task<Media> UploadMediaAsync(byte[] media, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (media == null || media.Length == 0)\n                throw new ArgumentNullException(\"image\", \"You must provide a byte[] of image data.\");\n\n            string updateUrl = UploadUrl + \"media/upload.json\";\n            string imageType = \"application/octet-stream\";\n            string name = \"media\";\n            string randomUnusedFileName = new Random().Next(100, 999).ToString();\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostMediaAsync(\n                    updateUrl,\n                    new Dictionary<string, string>(),\n                    media,\n                    name,\n                    randomUnusedFileName,\n                    imageType,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            Status status = reqProc.ProcessActionResult(RawResult, StatusAction.MediaUpload);\n            return status.Media;\n        }\n\n        /// <summary>\n        /// Replies to a tweet.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <returns>Reply status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status)\n        {\n            return await ReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, null, false, false).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with coordinates.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <returns>Reply status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, bool displayCoordinates)\n        {\n            return await ReplyAsync(tweetID, status, latitude, longitude, null, displayCoordinates, false).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with coordinates, place, and option to not include the user entity.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <returns>Reply status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool trimUser)\n        {\n            return await ReplyAsync(tweetID, status, latitude, longitude, placeID, false, trimUser).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with place, option to display coordinates, and option to not include user entity.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <returns>Reply status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, string placeID, bool displayCoordinates, bool trimUser)\n        {\n            return await ReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, placeID, displayCoordinates, trimUser).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with all non-media options.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <returns>Reply status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser)\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're replying to.\", \"tweetID\");\n\n            return await TweetOrReplyAsync(tweetID, status, latitude, longitude, placeID, displayCoordinates, trimUser, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with attached media.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, IEnumerable<ulong> mediaIds)\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're replying to.\", \"tweetID\");\n\n            return await TweetOrReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, NoInputParam, false, false, mediaIds).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with all options.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"trimUser\">Remove user entity from response</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, IEnumerable<ulong> mediaIds)\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're replying to.\", \"tweetID\");\n\n            return await TweetOrReplyAsync(tweetID, status, latitude, longitude, placeID, displayCoordinates, trimUser, mediaIds).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, null, false, false, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with coordinates.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, null, false, false, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with coordinates and option to display.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, bool displayCoordinates)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, null, displayCoordinates, false, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with coordinates, placeID, and option to not include user entity.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, string placeID, bool trimUser)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, placeID, false, trimUser, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with all location options and option to not include user entity.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, placeID, displayCoordinates, trimUser, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with place, option to display coordinates, and option to not include user entity.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, string placeID, bool displayCoordinates, bool trimUser)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, placeID, displayCoordinates, trimUser, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with attached media.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, IEnumerable<ulong> mediaIds)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, NoInputParam, false, false, mediaIds).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with all options.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"trimUser\">Remove user entity from response</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, IEnumerable<ulong> mediaIds)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, placeID, displayCoordinates, trimUser, mediaIds).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update.\n        /// </summary>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to. Sent via ReplyAsync overloads.</param>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"trimUser\">Remove user entity from response</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        internal async Task<Status> TweetOrReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, IEnumerable<ulong> mediaIds, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(status) && (mediaIds == null || !mediaIds.Any()))\n                throw new ArgumentException(\"status is a required parameter.\", \"status\");\n\n            var updateUrl = BaseUrl + \"statuses/update.json\";\n\n            RawResult =\n                await TwitterExecutor.PostToTwitterAsync<Status>(\n                    updateUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"status\", status},\n                        {\"in_reply_to_status_id\", tweetID == NoReply ? null : tweetID.ToString()},\n                        {\"lat\", latitude == NoCoordinate ? null : latitude.ToString(Culture.US)},\n                        {\"long\", longitude == NoCoordinate ? null : longitude.ToString(Culture.US)},\n                        {\"place_id\", placeID},\n                        {\"display_coordinates\", displayCoordinates ? displayCoordinates.ToString().ToLower() : null},\n                        {\"trim_user\", trimUser ? trimUser.ToString().ToLower() : null },\n                        {\"media_ids\", mediaIds == null || !mediaIds.Any() ? null : string.Join(\",\", mediaIds) }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Deletes a tweet.\n        /// </summary>\n        /// <param name=\"tweetID\">ID of tweet to delete.</param>\n        /// <returns>Deleted tweet.</returns>\n        public async Task<Status> DeleteTweetAsync(ulong tweetID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're deleting.\", \"tweetID\");\n\n            var destroyUrl = BaseUrl + \"statuses/destroy/\" + tweetID + \".json\";\n\n            RawResult = await TwitterExecutor\n                .PostToTwitterAsync<Status>(destroyUrl, new Dictionary<string, string>(), cancelToken)\n                .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Retweets a tweet.\n        /// </summary>\n        /// <param name=\"tweetID\">ID of tweet being retweeted.</param>\n        /// <returns>Retweeted tweet.</returns>\n        public async Task<Status> RetweetAsync(ulong tweetID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're retweeting.\", \"tweetID\");\n\n            var retweetUrl = BaseUrl + \"statuses/retweet/\" + tweetID + \".json\";\n\n            RawResult = await TwitterExecutor\n                .PostToTwitterAsync<Status>(retweetUrl, new Dictionary<string, string>(), cancelToken)\n                .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/ControlStream.cs",
    "content": "﻿\nusing System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Info for queries and responses from control streams\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class ControlStream\n    {\n        /// <summary>\n        /// Type of control stream query (Followers or Info)\n        /// </summary>\n        public ControlStreamType Type { get; set; }\n\n        /// <summary>\n        /// ID of user to get followers for\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// ID of stream to query\n        /// </summary>\n        public string StreamID { get; set; }\n\n        /// <summary>\n        /// Response from an Info query\n        /// </summary>\n        public ControlStreamInfo Info { get; set; }\n\n        /// <summary>\n        /// Response from a Follow query\n        /// </summary>\n        public ControlStreamFollow Follow { get; set; }\n\n        /// <summary>\n        /// Response from a command, such as AddSiteStreamUserAsync or RemoveSiteStreamUserAsync\n        /// </summary>\n        public string CommandResponse { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/ControlStreamFollow.cs",
    "content": "﻿\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from ControlStreams Followers query\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class ControlStreamFollow\n    {\n        public ControlStreamFollow(JsonData csJson)\n        {\n            var follow = csJson.GetValue<JsonData>(\"follow\");\n            User = new ControlStreamUser(follow.GetValue<JsonData>(\"user\"));\n            Friends =\n                (from JsonData friend in follow.GetValue<JsonData>(\"friends\")\n                 select (ulong)friend)\n                .ToList();\n            Cursors = new Cursors(follow);\n        }\n\n        /// <summary>\n        /// User to get followers for\n        /// </summary>\n        public ControlStreamUser User { get; set; }\n\n        /// <summary>\n        /// User's friends\n        /// </summary>\n        public List<ulong> Friends { get; set; }\n\n        /// <summary>\n        /// Cursors for paging through friends results\n        /// </summary>\n        public Cursors Cursors { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/ControlStreamInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from ControlStreams Info query\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class ControlStreamInfo\n    {\n        public ControlStreamInfo(JsonData infoJson)\n        {\n            var info = infoJson.GetValue<JsonData>(\"info\");\n            Users =\n                (from JsonData user in info.GetValue<JsonData>(\"users\")\n                 select new ControlStreamUser(user))\n                .ToList();\n            Delimited = info.GetValue<string>(\"delimited\");\n            IncludeFollowingsActivity = info.GetValue<bool>(\"include_followings_activity\");\n            IncludeUserChanges = info.GetValue<bool>(\"include_user_changes\");\n            Replies = info.GetValue<string>(\"replies\");\n            With = info.GetValue<string>(\"with\");\n        }\n\n        /// <summary>\n        /// List of users on stream\n        /// </summary>\n        public List<ControlStreamUser> Users { get; set; }\n\n        /// <summary>\n        /// Whether stream is using delimeters\n        /// </summary>\n        public string Delimited { get; set; }\n\n        /// <summary>\n        /// If stream returns followers activity\n        /// </summary>\n        public bool IncludeFollowingsActivity { get; set; }\n\n        /// <summary>\n        /// If stream includes user changes\n        /// </summary>\n        public bool IncludeUserChanges { get; set; }\n\n        /// <summary>\n        /// Set to \"all\" to include replies\n        /// </summary>\n        public string Replies { get; set; }\n\n        /// <summary>\n        /// Type of messages: \"followings\" include followers and \"user\" is onlly user\n        /// </summary>\n        public string With { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/ControlStreamRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Control Streams Queries\n    /// </summary>\n    public class ControlStreamRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// base url of SiteStream\n        /// </summary>\n        public virtual string SiteStreamUrl { get; set; }\n\n        /// <summary>\n        /// Type of Direct Message\n        /// </summary>\n        internal ControlStreamType Type { get; set; }\n\n        /// <summary>\n        /// ID of User\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// ID of site stream to operate on\n        /// </summary>\n        internal string StreamID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<ControlStream>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"StreamID\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<ControlStreamType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case ControlStreamType.Followers:\n                    return BuildFollowersUrl(parameters);\n                case ControlStreamType.Info:\n                    return BuildInfoUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildFollowersUrl(Dictionary<string, string> parameters)\n        {\n            const string UserIdParam = \"UserID\";\n            if (parameters == null || !parameters.ContainsKey(UserIdParam))\n                throw new ArgumentNullException(UserIdParam, \"UserID is required.\");\n\n            const string StreamIdParam = \"StreamID\";\n            if (parameters == null || !parameters.ContainsKey(StreamIdParam))\n                throw new ArgumentNullException(StreamIdParam, \"StreamID is required.\");\n\n            StreamID = parameters[StreamIdParam];\n            var req = new Request(SiteStreamUrl + \"site/c/\" + parameters[StreamIdParam] + \"/friends/ids.json\");\n            parameters.Remove(StreamIdParam);\n\n            var urlParams = req.RequestParameters;\n\n            UserID = ulong.Parse(parameters[UserIdParam]);\n            urlParams.Add(new QueryParameter(\"user_id\", UserID.ToString()));\n\n            return req;\n        }\n\n        Request BuildInfoUrl(Dictionary<string, string> parameters)\n        {\n            const string StreamIdParam = \"StreamID\";\n            if (parameters == null || !parameters.ContainsKey(StreamIdParam))\n                throw new ArgumentNullException(StreamIdParam, \"StreamID is required.\");\n\n            StreamID = parameters[StreamIdParam];\n            var req = new Request(SiteStreamUrl + \"site/c/\" + parameters[StreamIdParam] + \"/info.json\");\n            parameters.Remove(StreamIdParam);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            var csJson = JsonMapper.ToObject(responseJson);\n\n            var ctrlStream = new ControlStream\n            {\n                Type = Type,\n                UserID = UserID,\n                StreamID = StreamID\n            };\n\n            var csList = new List<ControlStream>\n            {\n                ctrlStream\n            };\n\n            switch (Type)\n            {\n                case ControlStreamType.Followers:\n                    ctrlStream.Follow = new ControlStreamFollow(csJson);\n                    break;\n                case ControlStreamType.Info:\n                    ctrlStream.Info = new ControlStreamInfo(csJson);\n                    break;\n                default:\n                    csList = new List<ControlStream>();\n                    break;\n            }\n\n            return csList.OfType<T>().ToList();\n        }\n  \n        /// <summary>\n        /// Handles command responses\n        /// </summary>\n        /// <param name=\"responseJson\">Response from Twitter</param>\n        /// <param name=\"theAction\">Identifies the type of response to work with.</param>\n        /// <returns></returns>\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var cs = new ControlStream { CommandResponse = responseJson };\n\n            return cs.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/ControlStreamType.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    public enum ControlStreamType\n    {\n        /// <summary>\n        /// List of a user's followers\n        /// </summary>\n        Followers,\n\n        /// <summary>\n        /// Detailed info on a Site Stream\n        /// </summary>\n        Info\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/ControlStreamUser.cs",
    "content": "﻿using LitJson;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// User returned by Control Stream query\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class ControlStreamUser\n    {\n        public ControlStreamUser(JsonData userJson)\n        {\n            UserID = userJson.GetValue<ulong>(\"id\");\n            Name = userJson.GetValue<string>(\"name\");\n            DM = userJson.GetValue<bool>(\"dm\");\n        }\n\n        /// <summary>\n        /// User's unique Twitter ID\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// User's screen name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Does the authenticated user have RW+DM access to user\n        /// </summary>\n        public bool DM { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/IStreamContent.cs",
    "content": "namespace LinqToTwitter\n{\n    public interface IStreamContent\n    {\n        string Content { get; set; }\n\n        void CloseStream();\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/Control.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Control\n    {\n        public Control() { }\n        public Control(JsonData control)\n        {\n            var ctrl = control.GetValue<JsonData>(\"control\");\n            URL = ctrl.GetValue<string>(\"control_uri\");\n        }\n\n        public string URL { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/Delete.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Delete\n    {\n        public Delete() { }\n        public Delete(JsonData delete)\n        {\n            var del = delete.GetValue<JsonData>(\"delete\");\n            var status = del.GetValue<JsonData>(\"status\");\n            StatusID = status.GetValue<ulong>(\"id\");\n            UserID = status.GetValue<ulong>(\"user_id\");\n        }\n\n        public ulong StatusID { get; set; }\n\n        public ulong UserID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/Disconnect.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Disconnect\n    {\n        public Disconnect() { }\n        public Disconnect(JsonData json)\n        {\n            var disconnect = json.GetValue<JsonData>(\"disconnect\");\n            Code = disconnect.GetValue<int>(\"code\");\n            StreamName = disconnect.GetValue<string>(\"stream_name\");\n            Reason = disconnect.GetValue<string>(\"reason\");\n        }\n\n        public int Code { get; set; }\n\n        public string StreamName { get; set; }\n\n        public string Reason { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/Event.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Event\n    {\n        public Event() { }\n        public Event(JsonData evt)\n        {\n            Target = new User(evt.GetValue<JsonData>(\"target\"));\n            Source = new User(evt.GetValue<JsonData>(\"source\"));\n            EventName = evt.GetValue<string>(\"event\");\n            var targetObj = evt.GetValue<JsonData>(\"target_object\", defaultValue: null);\n            TargetObject = targetObj == null ? (string)null : targetObj.ToString();\n            CreatedAt = evt.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n        }\n\n        public User Target { get; set; }\n\n        public User Source { get; set; }\n\n        public string EventName { get; set; }\n\n        public string TargetObject { get; set; }\n\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/ForUser.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class ForUser\n    {\n        public ForUser() { }\n        public ForUser(JsonData user)\n        {\n            UserID = user.GetValue<ulong>(\"for_user\");\n            var message = user.GetValue<JsonData>(\"message\");\n            var friends = message.GetValue<JsonData>(\"friends\");\n            Friends =\n                friends == null ? new List<ulong>() :\n                (from JsonData friend in friends\n                 select (ulong)friend)\n                .ToList();\n        }\n\n        public ulong UserID { get; set; }\n\n        public List<ulong> Friends { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/FriendsList.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class FriendsList\n    {\n        public FriendsList() { }\n        public FriendsList(JsonData friends)\n        {\n            Friends =\n                friends == null ? new List<ulong>() :\n                (from JsonData friend in friends.GetValue<JsonData>(\"friends\")\n                 select (ulong)friend)\n                .ToList();\n        }\n\n        public List<ulong> Friends { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/GeoScrub.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class GeoScrub\n    {\n        public GeoScrub() { }\n        public GeoScrub(JsonData geo)\n        {\n            var scrub = geo.GetValue<JsonData>(\"scrub_geo\");\n            UserID = scrub.GetValue<ulong>(\"user_id\");\n            UpToStatusID = scrub.GetValue<ulong>(\"up_to_status_id\");\n        }\n        \n        public ulong UserID { get; set; }\n\n        public ulong UpToStatusID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/Limit.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Limit\n    {\n        public Limit() { }\n        public Limit(JsonData json)\n        {\n            var scrub = json.GetValue<JsonData>(\"limit\");\n            Track = scrub.GetValue<ulong>(\"track\");\n        }\n\n        public ulong Track { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/Stall.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Stall\n    {\n        public Stall() { }\n        public Stall(JsonData stall)\n        {\n            var warning = stall.GetValue<JsonData>(\"user_withheld\");\n            Code = warning.GetValue<string>(\"code\");\n            Message = warning.GetValue<string>(\"message\");\n            PercentFull = warning.GetValue<int>(\"percent_full\");\n        }\n\n        public string Code { get; set; }\n\n        public string Message { get; set; }\n\n        public int PercentFull { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/StatusWithheld.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LitJson;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class StatusWithheld\n    {\n        public StatusWithheld() { }\n        public StatusWithheld(JsonData status)\n        {\n            var withheld = status.GetValue<JsonData>(\"status_withheld\");\n            StatusID = withheld.GetValue<ulong>(\"id\");\n            UserID = withheld.GetValue<ulong>(\"user_id\");\n            var withheldCountries = withheld.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in withheld.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n        }\n\n        public ulong StatusID { get; set; }\n\n        public ulong UserID { get; set; }\n\n        public List<string> WithheldInCountries { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/TooManyFollows.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class TooManyFollows\n    {\n        public TooManyFollows() { }\n        public TooManyFollows(JsonData warning)\n        {\n            var warn = warning.GetValue<JsonData>(\"warning\");\n            Code = warn.GetValue<string>(\"code\");\n            Message = warn.GetValue<string>(\"message\");\n            UserID = warn.GetValue<ulong>(\"user_id\");\n        }\n\n        public string Code { get; set; }\n\n        public string Message { get; set; }\n\n        public ulong UserID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Messages/UserWithheld.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class UserWithheld\n    {\n        public UserWithheld() { }\n        public UserWithheld(JsonData user)\n        {\n            var withheld = user.GetValue<JsonData>(\"user_withheld\");\n            UserID = withheld.GetValue<ulong>(\"user_id\");\n            var withheldCountries = withheld.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in withheld.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n        }\n\n        public ulong UserID { get; set; }\n\n        public List<string> WithheldInCountries { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/StreamContent.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter stream\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class StreamContent : IStreamContent, IDisposable\n    {\n        private readonly ITwitterExecute exec;\n\n        public StreamContent(ITwitterExecute exec, string content)\n        {\n            this.exec = exec;\n            Content = content;\n            ParseJson(content);\n        }\n\n        void ParseJson(string json)\n        {\n            JsonData jsonObj = JsonMapper.ToObject(json);\n            if (jsonObj == null || jsonObj.InstObject == null)\n            {\n                EntityType = StreamEntityType.Unknown;\n                return;\n            }\n            var inst = jsonObj.InstObject;\n\n            try\n            {\n                if (inst.ContainsKey(\"control\"))\n                {\n                    EntityType = StreamEntityType.Control;\n                    Entity = new Control(jsonObj);\n                }\n                else if (inst.ContainsKey(\"delete\"))\n                {\n                    EntityType = StreamEntityType.Delete;\n                    Entity = new Delete(jsonObj);\n                }\n                else if (inst.ContainsKey(\"direct_message\"))\n                {\n                    EntityType = StreamEntityType.DirectMessage;\n                    var dmObj = jsonObj.GetValue<JsonData>(\"direct_message\");\n                    Entity = new DirectMessage(dmObj);\n                }\n                else if (inst.ContainsKey(\"disconnect\"))\n                {\n                    EntityType = StreamEntityType.Disconnect;\n                    Entity = new Disconnect(jsonObj);\n                }\n                else if (inst.ContainsKey(\"event\"))\n                {\n                    EntityType = StreamEntityType.Event;\n                    Entity = new Event(jsonObj);\n                }\n                else if (inst.ContainsKey(\"for_user\"))\n                {\n                    EntityType = StreamEntityType.ForUser;\n                    Entity = new ForUser(jsonObj);\n                }\n                else if (inst.ContainsKey(\"friends\") && inst.Count == 1)\n                {\n                    EntityType = StreamEntityType.FriendsList;\n                    Entity = new FriendsList(jsonObj);\n                }\n                else if (inst.ContainsKey(\"geo_scrub\"))\n                {\n                    EntityType = StreamEntityType.GeoScrub;\n                    Entity = new GeoScrub(jsonObj);\n                }\n                else if (inst.ContainsKey(\"limit\"))\n                {\n                    EntityType = StreamEntityType.Limit;\n                    Entity = new Limit(jsonObj);\n                }\n                else if (inst.ContainsKey(\"warning\") && inst.ContainsKey(\"percent_full\"))\n                {\n                    EntityType = StreamEntityType.Stall;\n                    Entity = new Stall(jsonObj);\n                }\n                else if (inst.ContainsKey(\"status_withheld\"))\n                {\n                    EntityType = StreamEntityType.StatusWithheld;\n                    Entity = new StatusWithheld(jsonObj);\n                }\n                else if (inst.ContainsKey(\"warning\") && inst.ContainsKey(\"user_id\"))\n                {\n                    EntityType = StreamEntityType.TooManyFollows;\n                    Entity = new TooManyFollows(jsonObj);\n                }\n                else if (inst.ContainsKey(\"retweeted\"))\n                {\n                    EntityType = StreamEntityType.Status;\n                    Entity = new Status(jsonObj);\n                }\n                else if (inst.ContainsKey(\"user_withheld\"))\n                {\n                    EntityType = StreamEntityType.UserWithheld;\n                    Entity = new UserWithheld(jsonObj);\n                }\n                else\n                {\n                    EntityType = StreamEntityType.Unknown;\n                }\n            }\n            catch (Exception ex)\n            {\n                string parseError = string.Format(\"Error parsing twitter message. Please create a new issue on the LINQ to Twitter site at https://linqtotwitter.codeplex.com/ with this info. \\n\\nMessage Type: {0}, Message Text:\\n {1} \\n\", EntityType, json);\n                \n                EntityType = StreamEntityType.ParseError;\n                Entity = parseError;\n\n                if (TwitterExecute.Log != null)\n                    TwitterExecute.Log.WriteLine(parseError);\n            }\n        }\n\n        /// <summary>\n        /// Stream object, which is a Twitter message of various\n        /// formats or empty string for keep-alive message\n        /// </summary>\n        public string Content { get; set; }\n\n        /// <summary>\n        /// Type of Stream Message\n        /// </summary>\n        public StreamEntityType EntityType { get; private set; }\n\n        /// <summary>\n        /// LINQ to Twitter entity\n        /// </summary>\n        public object Entity { get; private set; }\n\n        /// <summary>\n        /// Closes Twitter stream.\n        /// </summary>\n        public virtual void CloseStream()\n        {\n            exec.CloseStream();\n        }\n\n        public void Dispose()\n        {\n            CloseStream();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/StreamEntityType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum StreamEntityType\n    {\n        Unknown,\n\n        ParseError,\n\n        Control,\n\n        Delete,\n\n        DirectMessage,\n\n        Disconnect,\n\n        Event,\n\n        ForUser,\n\n        FriendsList,\n\n        GeoScrub,\n\n        Limit,\n        \n        Stall,\n\n        Status,\n\n        StatusWithheld,\n\n        TooManyFollows,\n\n        UserWithheld\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/Streaming.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Reference to stream, details, and controls\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Streaming\n    {\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Normally, only replies between two users that follow each other show.\n        /// Setting this to true will show replies, regardless of follow status.\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Number of tweets to go back to when reconnecting\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Tweets are delimeted in the stream\n        /// </summary>\n        public string Delimited { get; set; }\n\n        /// <summary>\n        /// Limit results to a comma-separated set of users\n        /// </summary>\n        public string Follow { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Get tweets in the comma-separated list of lat/lon's\n        /// </summary>\n        public string Locations { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of keywords to get tweets for\n        /// </summary>\n        public string Track { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        public bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Type of entities to return, i.e. Follow, User, etc.\n        /// </summary>\n        public string With { get; set; }\n\n        /// <summary>\n        /// Executor managing stream\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Closes stream\n        /// </summary>\n        public void CloseStream()\n        {\n            TwitterExecutor.CloseStream();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/StreamingRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public class StreamingRequestProcessor<T> : IRequestProcessor<T>\n    {\n        public string BaseUrl { get; set; }\n\n        public string UserStreamUrl { get; set; }\n\n        public string SiteStreamUrl { get; set; }\n\n        public ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Normally, only replies between two users that follow each other show.\n        /// Setting this to true will show replies, regardless of follow status.\n        /// </summary>\n        internal bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Number of tweets to go back to when reconnecting\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Tweets are delimeted in the stream\n        /// </summary>\n        internal string Delimited { get; set; }\n\n        /// <summary>\n        /// Limit results to a comma-separated set of users\n        /// </summary>\n        internal string Follow { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        internal string Language { get; set; }\n\n        /// <summary>\n        /// Get tweets in the comma-separated list of lat/lon's\n        /// </summary>\n        internal string Locations { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        internal bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of keywords to get tweets for\n        /// </summary>\n        internal string Track { get; set; }\n\n        /// <summary>\n        /// Type of entities to return, i.e. \"followings\" or \"user\".\n        /// </summary>\n        internal string With { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<Streaming>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"AllReplies\",\n                       \"Count\",\n                       \"Delimited\",\n                       \"Follow\",\n                       \"Language\",\n                       \"Locations\",\n                       \"StallWarnings\",\n                       \"Track\",\n                       \"With\",\n                   }).Parameters;\n\n            if (parameters.ContainsKey(\"AllReplies\")) \n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n\n            if (parameters.ContainsKey(\"Count\"))\n                Count = int.Parse(parameters[\"Count\"]);\n\n            if (parameters.ContainsKey(\"Delimited\"))\n                Delimited = parameters[\"Delimited\"];\n\n            if (parameters.ContainsKey(\"Follow\"))\n                Follow = parameters[\"Follow\"];\n\n            if (parameters.ContainsKey(\"Language\"))\n                Language = parameters[\"Language\"];\n\n            if (parameters.ContainsKey(\"Locations\"))\n                Locations = parameters[\"Locations\"];\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n\n            if (parameters.ContainsKey(\"Track\"))\n                Track = parameters[\"Track\"];\n\n            if (parameters.ContainsKey(\"With\"))\n                With = parameters[\"With\"];\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n \n            Type = RequestProcessorHelper.ParseQueryEnumType<StreamingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StreamingType.Filter:\n                    return BuildFilterUrl(parameters);\n                case StreamingType.Firehose:\n                    return BuildFirehoseUrl(parameters);\n                case StreamingType.Sample:\n                    return BuildSampleUrl(parameters);\n                case StreamingType.Site:\n                    return BuildSiteUrl(parameters);\n                case StreamingType.User:\n                    return BuildUserUrl(parameters);\n                default:\n                    break;\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Builds an url for filtering stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFilterUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Follow\") &&\n                !parameters.ContainsKey(\"Locations\") &&\n                !parameters.ContainsKey(\"Track\"))\n            {\n                throw new ArgumentException(\"You must specify at least one of the parameters Follow, Locations, or Track.\", \"FollowOrLocationsOrTrack\");\n            }\n\n            var req = new Request(BaseUrl + \"statuses/filter.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                urlParams.Add(new QueryParameter(\"follow\", parameters[\"Follow\"]));\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                urlParams.Add(new QueryParameter(\"locations\", parameters[\"Locations\"]));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                urlParams.Add(new QueryParameter(\"track\", parameters[\"Track\"]));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an url for getting all results from the Twitter stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFirehoseUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/firehose.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an url for getting random sample tweets from the stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildSampleUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"Count\"))\n                throw new ArgumentException(\"Count is forbidden in Sample streams.\", \"Count\");\n\n            var req = new Request(BaseUrl + \"statuses/sample.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n        \n        /// <summary>\n        /// Builds an url for getting info for multiple users from stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildSiteUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Follow\"))\n            {\n                throw new ArgumentNullException(\"Follow\", \"Follow is required.\");\n            }\n\n            var req = new Request(SiteStreamUrl + \"site.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                Delimited = parameters[\"Delimited\"];\n                urlParams.Add(new QueryParameter(\"delimited\", Delimited.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                Language = parameters[\"Language\"].Replace(\" \", \"\");\n                urlParams.Add(new QueryParameter(\"language\", Language));\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                Follow = parameters[\"Follow\"].Replace(\" \", \"\");\n                urlParams.Add(new QueryParameter(\"follow\", Follow.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                throw new ArgumentException(\"Track is not supported for Site Streams.\", \"Track\");\n            }\n\n            if (parameters.ContainsKey(\"With\"))\n            {\n                With = parameters[\"With\"];\n                urlParams.Add(new QueryParameter(\"with\", With.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"AllReplies\"))\n            {\n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n\n                if (AllReplies)\n                {\n                    urlParams.Add(new QueryParameter(\"replies\", \"all\"));\n                }\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an url for getting user info from stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildUserUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(UserStreamUrl + \"user.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                Delimited = parameters[\"Delimited\"];\n                urlParams.Add(new QueryParameter(\"delimited\", Delimited.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                Language = parameters[\"Language\"].Replace(\" \", \"\");\n                urlParams.Add(new QueryParameter(\"language\", Language));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                Track = parameters[\"Track\"];\n                urlParams.Add(new QueryParameter(\"track\", Track));\n            }\n\n            if (parameters.ContainsKey(\"With\"))\n            {\n                With = parameters[\"With\"];\n                urlParams.Add(new QueryParameter(\"with\", With.ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"AllReplies\"))\n            {\n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n\n                if (AllReplies)\n                {\n                    urlParams.Add(new QueryParameter(\"replies\", \"all\"));\n                }\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                Locations = parameters[\"Locations\"];\n                urlParams.Add(new QueryParameter(\"locations\", Locations));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Returns an object for interacting with stream\n        /// </summary>\n        /// <param name=\"notUsed\">Not used</param>\n        /// <returns>List with a single Streaming</returns>\n        public List<T> ProcessResults(string notUsed)\n        {\n            var streamingList = new List<Streaming>\n            {\n                new Streaming\n                {\n                    AllReplies = AllReplies,\n                    Type = Type,\n                    Count = Count,\n                    Delimited = Delimited,\n                    Follow = Follow,\n                    Locations = Locations,\n                    Track = Track,\n                    TwitterExecutor = TwitterExecutor,\n                    With = With\n                }\n            };\n\n            return streamingList.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/StreamingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum StreamingType\n    {\n        /// <summary>\n        /// Tweets matching a predicate (count, delimited, follow, locations, or track)\n        /// </summary>\n        Filter,\n\n        /// <summary>\n        /// All tweets\n        /// </summary>\n        Firehose,\n\n        /// <summary>\n        /// Random (as defined by Twitter) tweets\n        /// </summary>\n        Sample,\n\n        /// <summary>\n        /// Activity for multiple users\n        /// </summary>\n        Site,\n\n        /// <summary>\n        /// A single user's activity\n        /// </summary>\n        User\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Streaming/TwitterContextStreamCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds one or more users to a Site Stream.\n        /// </summary>\n        /// <param name=\"userIDs\">List of user IDs to add to Site Stream</param>\n        /// <param name=\"streamID\">ID of Site Stream to add users to</param>\n        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>\n        public async Task<ControlStream> AddSiteStreamUserAsync(List<ulong> userIDs, string streamID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(streamID)) throw new ArgumentNullException(\"streamID\", \"streamID is required.\");\n\n            var newUrl = SiteStreamUrl + \"site/c/\" + streamID + \"/add_user.json\";\n\n            string userIDString = string.Join(\",\", userIDs.Select(user => user.ToString()).ToArray());\n\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>();\n\n            var resultsJson =\n                await TwitterExecutor.PostToTwitterAsync<ControlStream>(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"user_id\", userIDString}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(resultsJson, ControlStreamType.Info);\n        }\n\n        /// <summary>\n        /// Removes one or more users from a Site Stream\n        /// </summary>\n        /// <param name=\"userIDs\">List of user IDs to remove from Site Stream</param>\n        /// <param name=\"streamID\">ID of Site Stream to remove users from</param>\n        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>\n        public async Task<ControlStream> RemoveSiteStreamUserAsync(List<ulong> userIDs, string streamID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(streamID)) throw new ArgumentNullException(\"streamID\", \"streamID is required.\");\n\n            var newUrl = SiteStreamUrl + \"site/c/\" + streamID + \"/remove_user.json\";\n\n            string userIDString = string.Join(\",\", userIDs.Select(user => user.ToString()).ToArray());\n\n            var reqProc = new ControlStreamRequestProcessor<ControlStream>();\n\n            var resultsJson =\n                await TwitterExecutor.PostToTwitterAsync<ControlStream>(\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"user_id\", userIDString}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(resultsJson, ControlStreamType.Info);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Trends/Location.cs",
    "content": "﻿using System.Globalization;\nusing LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Location\n    {\n        public Location() {}\n        internal Location(JsonData trendLocation)\n        {\n            var placeType = trendLocation.GetValue<JsonData>(\"placeType\");\n\n            Country = trendLocation.GetValue<string>(\"country\");\n            Name = trendLocation.GetValue<string>(\"name\");\n            CountryCode = trendLocation.GetValue<string>(\"countryCode\");\n            ParentID = trendLocation.GetValue<int>(\"parentid\").ToString(CultureInfo.InvariantCulture);\n            PlaceTypeName = placeType.GetValue<string>(\"name\");\n            PlaceTypeNameCode = placeType.GetValue<int>(\"code\");\n            Url = trendLocation.GetValue<string>(\"url\");\n            WoeID = trendLocation.GetValue<int>(\"woeid\");\n        }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Name of location\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Type of location\n        /// </summary>\n        public string PlaceTypeName { get; set; }\n\n        /// <summary>\n        /// Code for PlaceTypeName\n        /// </summary>\n        public int PlaceTypeNameCode { get; set; }\n\n        /// <summary>\n        /// Country of Location\n        /// </summary>\n        public string Country { get; set; }\n\n        /// <summary>\n        /// Country Code\n        /// </summary>\n        public string CountryCode { get; set; }\n\n        /// <summary>\n        /// Yahoo Location URL\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Parent location relative to current location.\n        /// Set to null if current location is World.\n        /// </summary>\n        public string ParentID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Trends/Trend.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps to work with trends\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Trend\n    {\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        public TrendType Type { get; set; }\n\n        /// <summary>\n        /// When place trend was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// time of request\n        /// </summary>\n        public DateTime AsOf { get; set; }\n\n        /// <summary>\n        /// twitter search query on topic\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Search URL returned from Local Trends\n        /// </summary>\n        public string SearchUrl { get; set; }\n\n        /// <summary>\n        /// name of trend topic\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        public bool Exclude { get; set; }\n\n        /// <summary>\n        /// No idea, perhaps the event associated with a trend\n        /// </summary>\n        public string Events { get; set; }\n\n        /// <summary>\n        /// Flag indicating this is a promoted trend (as opposed to organic)\n        /// </summary>\n        public string PromotedContent { get; set; }\n\n        /// <summary>\n        /// Return value for Avalable query listing locations of trending topics\n        /// </summary>\n        public List<Location> Locations { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Trends/TrendRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps process trend requests\n    /// </summary>\n    public class TrendRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string WoeIDParam = \"WoeID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        internal TrendType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        internal double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        internal double Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        internal int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        internal bool Exclude { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Trend>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Latitude\",\n                       \"Longitude\",\n                       \"WoeID\",\n                       \"Exclude\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<TrendType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case TrendType.Available:\n                    return BuildAvailableTrendsUrl();\n                case TrendType.Closest:\n                    return BuildClosestTrendsUrl(parameters);\n                case TrendType.Place:\n                    return BuildPlaceTrendsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// Builds a url for finding trends at a specified location\n        /// </summary>\n        /// <param name=\"parameters\">parameters should contain WoeID</param>\n        /// <returns>base url + location segment</returns>\n        Request BuildPlaceTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(WoeIDParam))\n                throw new ArgumentException(\"WoeID is a required parameter.\", WoeIDParam);\n\n            var req = new Request(BaseUrl + \"trends/place.json\");\n            var urlParams = req.RequestParameters;\n\n            WoeID = int.Parse(parameters[WoeIDParam]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[WoeIDParam]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL for finding where trends are occurring\n        /// </summary>\n        /// <returns>base url + Available segment</returns>\n        Request BuildAvailableTrendsUrl()\n        {\n            return new Request(BaseUrl + \"trends/available.json\");\n        }\n\n        /// <summary>\n        /// Builds an URL for finding trends closest to a lat/long\n        /// </summary>\n        /// <param name=\"parameters\">parameters can include Latitude and Longitude (must have either both parameters or neither)</param>\n        /// <returns>base url + Available segment</returns>\n        Request BuildClosestTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if ((parameters.ContainsKey(\"Latitude\") && !parameters.ContainsKey(\"Longitude\")) ||\n                (!parameters.ContainsKey(\"Latitude\") && parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"If you pass either Latitude or Longitude then you must pass both. Otherwise, don't pass either.\", \"Latitude/Longitude\");\n\n            var req = new Request(BaseUrl + \"trends/closest.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", parameters[\"Latitude\"]));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", parameters[\"Longitude\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Trend\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Trend</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Trend> trends = Enumerable.Empty<Trend>();\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch (Type)\n                {\n                    case TrendType.Available:\n                    case TrendType.Closest:\n                        trends = HandleAvailableOrClosestResponse(responseJson);\n                        break;\n\n                    case TrendType.Place:\n                        trends = HandlePlaceResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n            }\n\n            return trends.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Type of action to process</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var trend = new Trend();\n\n            return trend.ItemCast(default(T));\n        }\n\n        IEnumerable<Trend> HandlePlaceResponse(string responseJson)\n        {\n            var responses = JsonMapper.ToObject(responseJson);\n\n            var flat =\n                from JsonData response in responses\n                let asOf = response.GetValue<string>(\"as_of\").GetDate(DateTime.UtcNow)\n                let createdAt = response.GetValue<string>(\"created_at\").GetDate(DateTime.UtcNow)\n                let locations =\n                     (from JsonData place in response.GetValue<JsonData>(\"locations\")\n                      select new Location(place)).ToList()\n                let trends =\n                     (from JsonData trend in response.GetValue<JsonData>(\"trends\")\n                      select new Trend\n                      {\n                          Type = Type,\n                          AsOf = asOf,\n                          CreatedAt = createdAt,\n                          Latitude = Latitude,\n                          Longitude = Longitude,\n                          WoeID = WoeID,\n                          Exclude = Exclude,\n                          Name = trend.GetValue<string>(\"name\"),\n                          Query = trend.GetValue<string>(\"query\"),\n                          SearchUrl = trend.GetValue<string>(\"url\"),\n                          Events = trend.GetValue<string>(\"events\"),\n                          PromotedContent = trend.GetValue<string>(\"promoted_content\"),\n                          Locations = locations\n                      })\n                select trends;\n\n            return flat.SelectMany(trend => trend);\n        }\n\n        IEnumerable<Trend> HandleAvailableOrClosestResponse(string responseJson)\n        {\n            var trends = JsonMapper.ToObject(responseJson);\n            var locations =\n                (from JsonData loc in trends\n                 select new Location(loc))\n                .ToList();\n\n            // we fake a single Trend to hang the locations off of...\n            yield return new Trend\n            {\n                Type = Type,\n                AsOf = DateTime.UtcNow,\n                Latitude = Latitude,\n                Longitude = Longitude,\n                WoeID = WoeID,\n                Exclude = Exclude,\n                Locations = locations\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Trends/TrendType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of trend to query\n    /// </summary>\n    public enum TrendType\n    {\n        /// <summary>\n        /// Locations of where trends are occurring\n        /// </summary>\n        Available,\n\n        /// <summary>\n        /// Trends closest to specified lat/long\n        /// </summary>\n        Closest,\n\n        /// <summary>\n        /// Top 10 topics for a WOEID\n        /// </summary>\n        Place\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/Category.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A single category for Twitter suggested categories\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Category\n    {\n        public Category() { }\n        public Category(JsonData catJson)\n        {\n            Size = catJson.GetValue<int>(\"size\");\n            Name = catJson.GetValue<string>(\"name\");\n            Slug = catJson.GetValue<string>(\"slug\");\n\n            var users = catJson.GetValue<JsonData>(\"users\");\n            if (users != null)\n                Users =\n                    (from JsonData user in users\n                     select new User(user))\n                    .ToList();\n        }\n\n        /// <summary>\n        /// Category name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Category description\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Number of users in category\n        /// </summary>\n        public int Size { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<Category> Categories { get; set; }\n\n        /// <summary>\n        /// Users in category\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/ProfileImageSize.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum ProfileImageSize\n    {\n        /// <summary>\n        /// 48 x 48 pixels (default)\n        /// </summary>\n        Normal,\n\n        /// <summary>\n        /// 73 x 73 pixels\n        /// </summary>\n        Bigger,\n\n        /// <summary>\n        /// 24 x 24 pixels\n        /// </summary>\n        Mini,\n\n        /// <summary>\n        /// Size of the originally uploaded image\n        /// </summary>\n        Original\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/TwitterContextUserCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets logged-in user report spam.\n        /// </summary>\n        /// <param name=\"userID\">User id of alleged spammer.</param>\n        /// <returns>Alleged spammer user info.</returns>\n        public async Task<User> ReportSpamAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"Twitter doesn't have a user with ID == 0\", \"userID\");\n\n            var reportParams = new Dictionary<string, string>\n            {\n                { \"user_id\", userID.ToString() }\n            };\n\n            return await ReportSpamAsync(reportParams, cancelToken).ConfigureAwait(false);\n        }\n\n\n        /// <summary>\n        /// Lets logged-in user report spam.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of alleged spammer.</param>\n        /// <returns>Alleged spammer user info.</returns>\n        public async Task<User> ReportSpamAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Please supply a valid screen name\", \"screenName\");\n\n            var reportParams = new Dictionary<string, string>\n            {\n                { \"screen_name\", screenName }\n            };\n\n            return await ReportSpamAsync(reportParams, cancelToken).ConfigureAwait(false);\n        }\n\n        internal async Task<User> ReportSpamAsync(IDictionary<string, string> reportParams, CancellationToken cancelToken = default(CancellationToken))\n        {\n            string reportSpamUrl = BaseUrl + \"users/report_spam.json\";\n\n            RawResult =\n                await TwitterExecutor\n                    .PostToTwitterAsync<User>(reportSpamUrl, reportParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return new UserRequestProcessor<User>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/User.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for a twitter user\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class User\n    {\n        public User() {}\n        public User(JsonData user)\n        {\n            if (user == null) return;\n\n            BannerSizes = new List<BannerSize>();\n            Categories = new List<Category>();\n            UserIDResponse = user.GetValue<ulong>(\"id\").ToString(CultureInfo.InvariantCulture);\n            ScreenNameResponse = user.GetValue<string>(\"screen_name\");\n            Name = user.GetValue<string>(\"name\");\n            Location = user.GetValue<string>(\"location\");\n            Description = user.GetValue<string>(\"description\");\n            ProfileImageUrl = user.GetValue<string>(\"profile_image_url\");\n            ProfileImageUrlHttps = user.GetValue<string>(\"profile_image_url_https\");\n            Url = user.GetValue<string>(\"url\");\n            Protected = user.GetValue<bool>(\"protected\");\n            ProfileUseBackgroundImage = user.GetValue<bool>(\"profile_use_background_image\");\n            IsTranslator = user.GetValue<bool>(\"is_translator\");\n            FollowersCount = user.GetValue<int>(\"followers_count\");\n            DefaultProfile = user.GetValue<bool>(\"default_profile\");\n            ProfileBackgroundColor = user.GetValue<string>(\"profile_background_color\");\n            LangResponse = user.GetValue<string>(\"lang\");\n            ProfileTextColor = user.GetValue<string>(\"profile_text_color\");\n            ProfileLinkColor = user.GetValue<string>(\"profile_link_color\");\n            ProfileSidebarFillColor = user.GetValue<string>(\"profile_sidebar_fill_color\");\n            ProfileSidebarBorderColor = user.GetValue<string>(\"profile_sidebar_border_color\");\n            FriendsCount = user.GetValue<int>(\"friends_count\");\n            DefaultProfileImage = user.GetValue<bool>(\"default_profile_image\");\n            CreatedAt = user.GetValue<string>(\"created_at\").GetDate(DateTime.MinValue);\n            FavoritesCount = user.GetValue<int>(\"favourites_count\");\n            UtcOffset = user.GetValue<int>(\"utc_offset\");\n            TimeZone = user.GetValue<string>(\"time_zone\");\n            ProfileBackgroundImageUrl = user.GetValue<string>(\"profile_background_image_url\");\n            ProfileBackgroundImageUrlHttps = user.GetValue<string>(\"profile_background_image_url_https\");\n            ProfileBackgroundTile = user.GetValue<bool>(\"profile_background_tile\");\n            ProfileBannerUrl = user.GetValue<string>(\"profile_banner_url\");\n            StatusesCount = user.GetValue<int>(\"statuses_count\");\n            Notifications = user.GetValue<bool>(\"notifications\");\n            GeoEnabled = user.GetValue<bool>(\"geo_enabled\");\n            Verified = user.GetValue<bool>(\"verified\");\n            ContributorsEnabled = user.GetValue<bool>(\"contributors_enabled\");\n            Following = user.GetValue<bool>(\"following\");\n            ShowAllInlineMedia = user.GetValue<bool>(\"show_all_inline_media\");\n            ListedCount = user.GetValue<int>(\"listed_count\");\n            FollowRequestSent = user.GetValue<bool>(\"follow_request_sent\");\n            Status = new Status(user.GetValue<JsonData>(\"status\"));\n            CursorMovement = new Cursors(user);\n        }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        public UserType Type { get; set; }\n\n        /// <summary>\n        /// Query User ID\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs (e.g. for Lookup query)\n        /// </summary>\n        public string UserIdList { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names (e.g. for Lookup queries)\n        /// </summary>\n        public string ScreenNameList { get; set; }\n\n        /// <summary>\n        /// Page to return\n        /// </summary>\n        /// <remarks>\n        /// This was made obsolete for one API, but not Search. Therefore, we can't mark it as obsolete yet.\n        /// </remarks>\n        //[Obsolete(\"This property has been deprecated and will be ignored by Twitter. Please use Cursor/CursorMovement properties instead.\")]\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Query User ID\n        /// </summary>\n        public string UserIDResponse { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// </summary>\n        public string ScreenNameResponse { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        public ProfileImageSize ImageSize { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// name of user\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// location of user\n        /// </summary>\n        public string Location { get; set; }\n\n        /// <summary>\n        /// user's description\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// user's image\n        /// </summary>\n        public string ProfileImageUrl { get; set; }\n\n        /// <summary>\n        /// user's image for use on HTTPS secured pages\n        /// </summary>\n        public string ProfileImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// user's image is a defaulted placeholder\n        /// </summary>\n        public bool DefaultProfileImage{ get; set; }\n\n        /// <summary>\n        /// user's URL\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// user's profile has not been configured (is just defaults)\n        /// </summary>\n        public bool DefaultProfile { get; set; }\n\n        /// <summary>\n        /// is user protected\n        /// </summary>\n        public bool Protected { get; set; }\n\n        /// <summary>\n        /// number of people following user\n        /// </summary>\n        public int FollowersCount { get; set; }\n\n        /// <summary>\n        /// color of profile background\n        /// </summary>\n        public string ProfileBackgroundColor { get; set; }\n\n        /// <summary>\n        /// color of profile text\n        /// </summary>\n        public string ProfileTextColor { get; set; }\n\n        /// <summary>\n        /// color of profile links\n        /// </summary>\n        public string ProfileLinkColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar\n        /// </summary>\n        public string ProfileSidebarFillColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar border\n        /// </summary>\n        public string ProfileSidebarBorderColor { get; set; }\n\n        /// <summary>\n        /// number of friends\n        /// </summary>\n        public int FriendsCount { get; set; }\n\n        /// <summary>\n        /// date and time when profile was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// number of favorites\n        /// </summary>\n        public int FavoritesCount { get; set; }\n\n        /// <summary>\n        /// UTC Offset\n        /// </summary>\n        public int UtcOffset { get; set; }\n\n        /// <summary>\n        /// Time Zone\n        /// </summary>\n        public string TimeZone { get; set; }\n\n        /// <summary>\n        /// URL of profile background image\n        /// </summary>\n        public string ProfileBackgroundImageUrl { get; set; }\n\n        /// <summary>\n        /// URL of profile background image for use on HTTPS secured pages\n        /// </summary>\n        public string ProfileBackgroundImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// Title of profile background\n        /// </summary>\n        public bool ProfileBackgroundTile { get; set; }\n\n        /// <summary>\n        /// Should we use the profile background image?\n        /// </summary>\n        public bool ProfileUseBackgroundImage { get; set; }\n\n        /// <summary>\n        /// number of status updates user has made\n        /// </summary>\n        public int StatusesCount { get; set; }\n\n        /// <summary>\n        /// type of device notifications\n        /// </summary>\n        public bool Notifications { get; set; }\n\n        /// <summary>\n        /// Supports Geo Tracking\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Is a verified account\n        /// </summary>\n        public bool Verified { get; set; }\n\n        /// <summary>\n        /// Is contributors enabled on account?\n        /// </summary>\n        public bool ContributorsEnabled { get; set; }\n\n        /// <summary>\n        /// Is this a translator?\n        /// </summary>\n        public bool IsTranslator { get; set; }\n\n        /// <summary>\n        /// is authenticated user following this user\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// current user status (valid only in user queries)\n        /// </summary>\n        public Status Status { get; set; }\n\n        /// <summary>\n        /// User categories for Twitter Suggested Users\n        /// </summary>\n        public List<Category> Categories { get; set; }\n\n        /// <summary>\n        /// Input param for Category queries\n        /// </summary>\n        public string Lang { get; set; }\n\n        /// <summary>\n        /// Return results for specified language\n        ///  Note: Twitter only supports a limited number of languages,\n        ///  which include en, fr, de, es, it when this feature was added.\n        /// </summary>\n        public string LangResponse { get; set; }\n\n        /// <summary>\n        /// Indicates if user has inline media enabled\n        /// </summary>\n        public bool ShowAllInlineMedia { get; set; }\n\n        /// <summary>\n        /// Number of lists user is a member of\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// If authenticated user has requested to follow this use\n        /// </summary>\n        public bool FollowRequestSent { get; set; }\n\n        /// <summary>\n        /// Response from ProfileImage query\n        /// </summary>\n        public string ProfileImage { get; set; }\n\n        /// <summary>\n        /// Url of Profile Banner image.\n        /// </summary>\n        public string ProfileBannerUrl { get; set; }\n\n        /// <summary>\n        /// Available sizes to use in account banners.\n        /// </summary>\n        public List<BannerSize> BannerSizes { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/UserAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum UserAction\n    {\n        SingleUser\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/UserRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter User requests.\n    /// </summary>\n    public class UserRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string ScreenNameOrUserID = \"ScreenNameOrUserID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        internal UserType Type { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs (e.g. for Lookup query)\n        /// </summary>\n        internal string UserIdList { get; set; }\n\n        /// <summary>\n        /// user's screen name\n        /// On Input - disambiguates when ID is User ID\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names (e.g. for Lookup query)\n        /// </summary>\n        public string ScreenNameList { get; set; }\n\n        /// <summary>\n        /// page number of results to retrieve\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        internal string Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// Supports various languages\n        /// </summary>\n        internal string Lang { get; set; }\n\n        /// <summary>\n        /// Add entities to results\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        internal ProfileImageSize ImageSize { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<User>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"UserIdList\",\n                       \"ScreenName\",\n                       \"ScreenNameList\",\n                       \"Page\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"Slug\",\n                       \"Query\",\n                       \"Lang\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\",\n                       \"ImageSize\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<UserType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case UserType.Show:\n                    return BuildShowUrl(parameters);\n                case UserType.Categories:\n                    return BuildCategoriesUrl(parameters);\n                case UserType.Category:\n                    return BuildUsersInCategoryUrl(parameters);\n                case UserType.CategoryStatus:\n                    return BuildCategoryStatusUrl(parameters);\n                case UserType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case UserType.Search:\n                    return BuildSearchUrl(parameters);\n                case UserType.Contributees:\n                    return BuildContributeesUrl(parameters);\n                case UserType.Contributors:\n                    return BuildContributorsUrl(parameters);\n                case UserType.BannerSizes:\n                    return BuildBannerSizesUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildContributorsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/contributors.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            return req;\n        }\n \n        Request BuildContributeesUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            var req = new Request(BaseUrl + \"users/contributees.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a URL to perform a user search\n        /// </summary>\n        /// <param name=\"parameters\">Query, Page, and Count</param>\n        /// <returns>URL for performing user search</returns>\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryParam = \"Query\";\n            if (!parameters.ContainsKey(\"Query\"))\n                throw new ArgumentException(\"Query parameter is required.\", QueryParam);\n\n            var req = new Request(BaseUrl + \"users/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"q\", parameters[\"Query\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url for performing lookups\n        /// </summary>\n        /// <param name=\"parameters\">Either UserID or ScreenName</param>\n        /// <returns>URL for performing lookups</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenNameList\") || parameters.ContainsKey(\"UserIdList\")) ||\n                (parameters.ContainsKey(\"ScreenNameList\") && parameters.ContainsKey(\"UserIdList\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            var req = new Request(BaseUrl + \"users/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ScreenNameList\"))\n            {\n                ScreenNameList = parameters[\"ScreenNameList\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenNameList\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserIdList\"))\n            {\n                UserIdList = parameters[\"UserIdList\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserIdList\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds url for getting users that belong to a suggestion category\n        /// </summary>\n        /// <param name=\"parameters\">Contains Slug. Required.</param>\n        /// <returns>Url for query + slug</returns>\n        Request BuildUsersInCategoryUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Slug\"))\n                throw new ArgumentException(\"Slug parameter is required.\", \"Slug\");\n\n            Slug = parameters[\"Slug\"];\n\n            var req = new Request(BaseUrl + \"users/suggestions/\" + Slug + \".json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Lang\"))\n            {\n                Lang = parameters[\"Lang\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"Lang\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url to get suggested user categories\n        /// </summary>\n        /// <param name=\"parameters\">Not used</param>\n        /// <returns>Url for suggested user categories</returns>\n        Request BuildCategoriesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/suggestions.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Lang\"))\n            {\n                Lang = parameters[\"Lang\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"Lang\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url to get tweets of users in a suggested category\n        /// </summary>\n        /// <param name=\"parameters\">Reads Slug param</param>\n        /// <returns>Url for category statuses</returns>\n        Request BuildCategoryStatusUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Slug\"))\n                throw new ArgumentNullException(\"Slug\", \"You must set the Slug property, which is the suggested category.\");\n\n            Slug = parameters[\"Slug\"];\n            var req = new Request(BaseUrl + \"users/suggestions/\" + Slug.ToLower() + \"/members.json\");\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds a url to show user info\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrWhiteSpace(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrWhiteSpace(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            var req = new Request(BaseUrl + \"users/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildBannerSizesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/profile_banner.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrWhiteSpace(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrWhiteSpace(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            List<User> userList = null;\n\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case UserType.Show:\n                    userList = HandleSingleUserResponse(userJson);\n                    break;\n                case UserType.Categories:\n                    userList = HandleMultipleCategoriesResponse(userJson);\n                    break;\n                case UserType.Category:\n                    userList = HandleSingleCategoryResponse(userJson);\n                    break;\n                case UserType.Contributees:\n                case UserType.Contributors:\n                case UserType.CategoryStatus:\n                case UserType.Lookup:\n                case UserType.Search:\n                    userList = HandleMultipleUserResponse(userJson);\n                    break;\n                case UserType.BannerSizes:\n                    userList = HandleBannerSizesResponse(userJson);\n                    break;\n                default:\n                    userList = new List<User>();\n                    break;\n            }\n\n            foreach(var user in userList)\n            {\n                user.Type = Type;\n                user.UserID = UserID;\n                user.UserIdList = UserIdList;\n                user.ScreenName = ScreenName;\n                user.ScreenNameList = ScreenNameList;\n                user.Page = Page;\n                user.Count = Count;\n                user.Cursor = Cursor;\n                user.Slug = Slug;\n                user.Lang = Lang;\n                user.Query = Query;\n                user.IncludeEntities = IncludeEntities;\n                user.SkipStatus = SkipStatus;\n                user.ImageSize = ImageSize;\n            }\n\n            return userList.OfType<T>().ToList();\n        }\n  \n        List<User> HandleSingleUserResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n  \n        List<User> HandleMultipleCategoriesResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User>\n            {\n                new User\n                {\n                    Categories =\n                        (from JsonData cat in userJson\n                         select new Category(cat))\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n  \n        List<User> HandleSingleCategoryResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User>\n            {\n                new User\n                {\n                    Categories = new List<Category> { new Category(userJson) }\n                }\n            };\n\n            return userList;\n        }\n  \n        List<User> HandleMultipleUserResponse(JsonData userJson)\n        {\n            List<User> userList =\n                (from JsonData user in userJson\n                 select new User(user))\n                .ToList();\n\n            return userList;\n        }\n\n        List<User> HandleBannerSizesResponse(JsonData userJson)\n        {\n            var sizes = userJson.GetValue<JsonData>(\"sizes\");\n            var userList = new List<User>\n            {\n                new User\n                {\n                    BannerSizes =     \n                        (from key in (sizes as IDictionary<string, JsonData>).Keys as List<string>\n                         let sizesKey = sizes.GetValue<JsonData>(key)\n                         select new BannerSize\n                         {\n                             Label = key,\n                             Width = sizesKey.GetValue<int>(\"w\"),\n                             Height = sizesKey.GetValue<int>(\"h\"),\n                             Url = sizesKey.GetValue<string>(\"url\")\n                         })\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/User/UserType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of user request\n    /// </summary>\n    public enum UserType\n    {\n        /// <summary>\n        /// extended information on a user\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Available Twitter suggestion categories\n        /// </summary>\n        Categories,\n\n        /// <summary>\n        /// Users under a specified category\n        /// </summary>\n        Category,\n\n        /// <summary>\n        /// Get most recent tweet of each user in category\n        /// </summary>\n        CategoryStatus,\n\n        /// <summary>\n        /// Get user details for a set of users\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// Perform a user search\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Users that specified user can contribute to\n        /// </summary>\n        Contributees,\n\n        /// <summary>\n        /// Users who can contribute to an account\n        /// </summary>\n        Contributors,\n\n        /// <summary>\n        /// List of sizes for account banners\n        /// </summary>\n        BannerSizes\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Vine/Vine.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing System;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Vine\n    {\n        public Vine() { }\n        public Vine(JsonData vine)\n        {\n            if (vine == null) return;\n\n            Version = vine.GetValue<double>(\"version\");\n            TypeResponse = vine.GetValue<string>(\"type\");\n            CacheAge = vine.GetValue<long>(\"cache_age\");\n            ProviderName = vine.GetValue<string>(\"provider_name\");\n            ProviderUrl = vine.GetValue<string>(\"provider_url\");\n            AuthorName = vine.GetValue<string>(\"author_name\");\n            AuthorUrl = vine.GetValue<string>(\"author_url\");\n            Title = vine.GetValue<string>(\"title\");\n            ThumbnailUrl = vine.GetValue<string>(\"thumbnail_url\");\n            ThumbnailWidth = vine.GetValue<int>(\"thumbnail_width\");\n            ThumbnailHeight = vine.GetValue<int>(\"thumbnail_height\");\n            Html = vine.GetValue<string>(\"html\");\n            Width = vine.GetValue<int>(\"width\");\n            Height = vine.GetValue<int>(\"height\");\n        }\n\n        //\n        // input filters\n        //\n\n        /// <summary>\n        /// Type of vine query to perform.\n        /// </summary>\n        public VineType Type { get; set; }\n\n        /// <summary>\n        /// ID of vine to query\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Url of vine to query.\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Maximum width of script.\n        /// </summary>\n        public int MaxWidth { get; set; }\n\n        /// <summary>\n        /// Maximum height of script.\n        /// </summary>\n        public int MaxHeight { get; set; }\n\n        /// <summary>\n        /// Don't include script.\n        /// </summary>\n        public bool OmitScript { get; set; }\n\n        //\n        // response output\n        //\n\n        /// <summary>\n        /// Vine version.\n        /// </summary>\n        public double Version { get; set; }\n\n        /// <summary>\n        /// Type of response. e.g. video\n        /// </summary>\n        public string TypeResponse { get; set; }\n\n        /// <summary>\n        /// Age of cache\n        /// </summary>\n        public long CacheAge { get; set; }\n\n        /// <summary>\n        /// Video provider\n        /// </summary>\n        public string ProviderName { get; set; }\n\n        /// <summary>\n        /// URL of video provider\n        /// </summary>\n        public string ProviderUrl { get; set; }\n\n        /// <summary>\n        /// Person who published video\n        /// </summary>\n        public string AuthorName { get; set; }\n\n        /// <summary>\n        /// URL for person who published video\n        /// </summary>\n        public string AuthorUrl { get; set; }\n\n        /// <summary>\n        /// Name of video\n        /// </summary>\n        public string Title { get; set; }\n\n        /// <summary>\n        /// Still thumbnail image from video\n        /// </summary>\n        public string ThumbnailUrl { get; set; }\n\n        /// <summary>\n        /// Width of thumbnail image\n        /// </summary>\n        public int ThumbnailWidth { get; set; }\n\n        /// <summary>\n        /// Height of thumbnail image\n        /// </summary>\n        public int ThumbnailHeight { get; set; }\n\n        /// <summary>\n        /// Html/script for embedded video\n        /// </summary>\n        public string Html { get; set; }\n\n        /// <summary>\n        /// Video width\n        /// </summary>\n        public int Width { get; set; }\n\n        /// <summary>\n        /// Video height\n        /// </summary>\n        public int Height { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Vine/VineRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Vine requests.\n    /// </summary>\n    public class VineRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// base url for vine requests\n        /// </summary>\n        public virtual string VineUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        internal VineType Type { get; set; }\n\n        /// <summary>\n        /// ID of vine to query\n        /// </summary>\n        internal string ID { get; set; }\n\n        /// <summary>\n        /// Url of vine to query.\n        /// </summary>\n        internal string Url { get; set; }\n\n        /// <summary>\n        /// Maximum width of script.\n        /// </summary>\n        internal int MaxWidth { get; set; }\n\n        /// <summary>\n        /// Maximum height of script.\n        /// </summary>\n        internal int MaxHeight { get; set; }\n\n        /// <summary>\n        /// Don't include script.\n        /// </summary>\n        internal bool OmitScript { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Vine>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\",\n                       \"Url\",\n                       \"MaxWidth\",\n                       \"MaxHeight\",\n                       \"OmitScript\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseQueryEnumType<VineType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case VineType.Oembed:\n                    return BuildIDsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(VineUrl + \"oembed.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = parameters[\"ID\"];\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Url\"))\n            {\n                Url = parameters[\"Url\"];\n                urlParams.Add(new QueryParameter(\"url\", parameters[\"Url\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxWidth\"))\n            {\n                MaxWidth = int.Parse(parameters[\"MaxWidth\"]);\n                urlParams.Add(new QueryParameter(\"max_width\", parameters[\"MaxWidth\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxHeight\"))\n            {\n                MaxHeight = int.Parse(parameters[\"MaxHeight\"]);\n                urlParams.Add(new QueryParameter(\"max_height\", parameters[\"MaxHeight\"]));\n            }\n\n            if (parameters.ContainsKey(\"OmitScript\"))\n            {\n                OmitScript = bool.Parse(parameters[\"OmitScript\"]);\n                urlParams.Add(new QueryParameter(\"omit_script\", parameters[\"OmitScript\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData vineJson = JsonMapper.ToObject(responseJson);\n\n            var vineList = new List<Vine>\n            {\n                new Vine(vineJson)\n                {\n                    ID = ID,\n                    Url = Url,\n                    MaxWidth = MaxWidth,\n                    MaxHeight = MaxHeight,\n                    OmitScript = OmitScript\n                }\n            };\n\n            return vineList.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/Vine/VineType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum VineType\n    {\n        /// <summary>\n        /// Get embedded vine video info.\n        /// </summary>\n        Oembed,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n</configuration>\n"
  },
  {
    "path": "src/LinqToTwitter4/Libraries/LinqToTwitterPcl/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter4/LinqToTwitterPcl.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterPcl\", \"Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\", \"{CAAFF164-A681-4183-BB83-A07B668F7FFC}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.AspNet\", \"Libraries\\LinqToTwitter.AspNet\\LinqToTwitter.AspNet.csproj\", \"{946A0061-58F9-467D-9907-3046CEFB4524}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.WindowsStore\", \"Libraries\\LinqToTwitter.WindowsStore\\LinqToTwitter.WindowsStore.csproj\", \"{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitterPcl.Tests\", \"Tests\\LinqToTwitterPcl.Tests\\LinqToTwitterPcl.Tests.csproj\", \"{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_Console\", \"Demos\\Linq2TwitterDemos_Console\\Linq2TwitterDemos_Console.csproj\", \"{734E827E-3635-4840-A060-7F30966ABFDD}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_WindowsForms\", \"Demos\\Linq2TwitterDemos_WindowsForms\\Linq2TwitterDemos_WindowsForms.csproj\", \"{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_WindowsPhone\", \"Demos\\Linq2TwitterDemos_WindowsPhone\\Linq2TwitterDemos_WindowsPhone.csproj\", \"{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_WindowsStore\", \"Demos\\Linq2TwitterDemos_WindowsStore\\Linq2TwitterDemos_WindowsStore.csproj\", \"{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_WPF\", \"Demos\\Linq2TwitterDemos_WPF\\Linq2TwitterDemos_WPF.csproj\", \"{6F72EB65-5A86-4935-B8F5-350B4524C89D}\"\nEndProject\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"Linq2TwitterVbDemos_Console\", \"Demos\\Linq2TwitterVbDemos_Console\\Linq2TwitterVbDemos_Console.vbproj\", \"{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Demos\", \"Demos\", \"{CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Libraries\", \"Libraries\", \"{07D6972E-DD43-4B36-85A2-60FD0912F015}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{A72BBC18-CFC5-42A6-84C4-82901B143DBD}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Resources\", \"Resources\", \"{4FB7A8CE-8F74-45BA-876B-C5FD8560510E}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tResources\\LinqToTwitter.snk = Resources\\LinqToTwitter.snk\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_WebForms\", \"Demos\\Linq2TwitterDemos_WebForms\\Linq2TwitterDemos_WebForms.csproj\", \"{91B2C679-6016-4BBD-A5D7-2104E7A8072E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Linq2TwitterDemos_Mvc\", \"Linq2TwitterDemos_Mvc\\Linq2TwitterDemos_Mvc.csproj\", \"{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tDebug|Win32 = Debug|Win32\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\t\tRelease|Win32 = Release|Win32\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|Win32.ActiveCfg = Debug|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|Win32.Build.0 = Debug|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|x64.Build.0 = Debug|x64\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Debug|x86.Build.0 = Debug|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|ARM.Build.0 = Release|ARM\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|Win32.ActiveCfg = Release|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|Win32.Build.0 = Release|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|x64.ActiveCfg = Release|x64\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|x64.Build.0 = Release|x64\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|x86.ActiveCfg = Release|x86\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0}.Release|x86.Build.0 = Release|x86\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Win32.ActiveCfg = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Win32.Build.0 = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|Win32.Deploy.0 = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|x86.Build.0 = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|ARM.Build.0 = Release|ARM\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Win32.ActiveCfg = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Win32.Build.0 = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|Win32.Deploy.0 = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|x86.ActiveCfg = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|x86.Build.0 = Release|x86\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29}.Release|x86.Deploy.0 = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Mixed Platforms.Deploy.0 = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Win32.ActiveCfg = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Win32.Build.0 = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|Win32.Deploy.0 = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|x64.Build.0 = Debug|x64\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|x86.Build.0 = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|ARM.Build.0 = Release|ARM\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Mixed Platforms.Deploy.0 = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Win32.ActiveCfg = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Win32.Build.0 = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|Win32.Deploy.0 = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|x64.ActiveCfg = Release|x64\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|x64.Build.0 = Release|x64\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|x64.Deploy.0 = Release|x64\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|x86.ActiveCfg = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|x86.Build.0 = Release|x86\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB}.Release|x86.Deploy.0 = Release|x86\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|Win32.ActiveCfg = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|Win32.ActiveCfg = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{CAAFF164-A681-4183-BB83-A07B668F7FFC} = {07D6972E-DD43-4B36-85A2-60FD0912F015}\n\t\t{946A0061-58F9-467D-9907-3046CEFB4524} = {07D6972E-DD43-4B36-85A2-60FD0912F015}\n\t\t{AAA9AEBB-50DA-4693-A82B-184F7455B4F0} = {07D6972E-DD43-4B36-85A2-60FD0912F015}\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6} = {A72BBC18-CFC5-42A6-84C4-82901B143DBD}\n\t\t{734E827E-3635-4840-A060-7F30966ABFDD} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{0F6AD36A-BDE4-47A5-B50E-E2C7AB7EE43D} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{CDFFAA64-BDA8-48D7-9534-85E5E09C9F29} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{D6EF223B-3F8F-4E9A-AEE8-820BD76D02CB} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{6F72EB65-5A86-4935-B8F5-350B4524C89D} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{EF64FF93-DB9D-46D3-BACB-B7F7ADD31976} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{91B2C679-6016-4BBD-A5D7-2104E7A8072E} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\t\t{E51DF9C2-AFF5-4CD1-9619-5D4D0BEA2C73} = {CAA5F409-DEE2-4CEA-BBB9-6D124781C990}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/AccountTests/AccountCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class AccountCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public AccountCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostToTwitterAsync<Account>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountProfileAsync(Name, Url, Location, Description, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/account/update_profile.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ExpectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_WithRawResult_Succeeds()\n        {\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountProfileAsync(Name, Url, Location, Description, true, SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(null, null, null, null, true, false));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Name_Over_20_Chars()\n        {\n            const string ExpectedParamName = \"name\";\n            string name = new string(Enumerable.Repeat('x', 21).ToArray());\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(name, Url, Location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfile_Throws_On_Url_Over_100_Chars()\n        {\n            const string ExpectedParamName = \"url\";\n            const string Name = \"Joe\";\n            var url = new string(Enumerable.Repeat('x', 101).ToArray());\n            const string Location = \"Denver, CO\";\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, url, Location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Location_Over_30_Chars()\n        {\n            const string ExpectedParamName = \"location\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            var location = new string(Enumerable.Repeat('x', 31).ToArray());\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, Url, location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Description_Over_160_Chars()\n        {\n            const string ExpectedParamName = \"description\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"Denver, CO\";\n            var description = new string(Enumerable.Repeat('x', 161).ToArray());\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, Url, Location, description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountImageAsync(new byte[] { 1 }, \"myFile.jpg\", \"jpg\", SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    \"https://api.twitter.com/1.1/account/update_profile_image.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ExpectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_WithRawResult_Succeeds()\n        {\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountImageAsync(new byte[] { 1 }, \"myFile.jpg\", \"jpg\", SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Throws_On_Empty_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountImageAsync(new byte[] { }, \"myImage.jpg\", \"jpg\", SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Throws_On_Null_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountImageAsync(null, \"myImage.jpg\", \"jpg\", SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountColorsAsync_Invokes_Executor_Execute()\n        {\n            const string Background = \"9ae4e8\";\n            const string Text = \"#000000\";\n            const string Link = \"#0000ff\";\n            const string SidebarFill = \"#e0ff92\";\n            const string SidebarBorder = \"#87bc44\";\n            string expectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountColorsAsync(Background, Text, Link, SidebarFill, SidebarBorder, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/account/update_profile_colors.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountColorsAsync_WithRawResult_Succeeds()\n        {\n            const string Background = \"9ae4e8\";\n            const string Text = \"#000000\";\n            const string Link = \"#0000ff\";\n            const string SidebarFill = \"#e0ff92\";\n            const string SidebarBorder = \"#87bc44\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountColorsAsync(Background, Text, Link, SidebarFill, SidebarBorder, true, SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountColorsAsync_Throws_On_No_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountColorsAsync(null, null, null, null, null, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountColorsAsync_Allows_Null_Parameters()\n        {\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User user = await ctx.UpdateAccountColorsAsync(\"#9ae4e8\", null, null, null, null, true, SkipStatus);\n\n            Assert.IsNotNull(user);\n\n            user = await ctx.UpdateAccountColorsAsync(null, \"#9ae4e8\", null, null, null, true, SkipStatus);\n\n            Assert.IsNotNull(user);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountBackgroundImageAsync_Invokes_Executor_PostTwitterFile()\n        {\n            const bool Tile = false;\n            const bool Use = false;\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountBackgroundImageAsync(\n                new byte[] {1}, \"image.png\", \"png\", Tile, Use, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    \"https://api.twitter.com/1.1/account/update_profile_background_image.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountBackgroundImageAsync_WithRawResult_Succeeds()\n        {\n            const bool Tile = false;\n            const bool Use = false;\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountBackgroundImageAsync(\n                new byte[] { 1 }, \"image.png\", \"png\", Tile, Use, true, SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountBackgroundImageAsync_Throws_On_Empty_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool Tile = false;\n            const bool Use = false;\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountBackgroundImageAsync(\n                    new byte[] {  }, \"image.png\", \"png\", Tile, Use, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountBackgroundImageAsync_Throws_On_Null_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool Tile = false;\n            const bool Use = false;\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountBackgroundImageAsync(\n                    null, \"image.png\", \"png\", Tile, Use, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"time_zone\", \"MST\" },\n                { \"lang\", \"en\" },\n                { \"trend_location_woeid\", \"1\" },\n                { \"sleep_time_enabled\", \"true\" },\n                { \"start_sleep_time\", \"20\" },\n                { \"end_sleep_time\", \"6\" },\n            };\n\n            Account acct = await ctx.UpdateAccountSettingsAsync(1, true, 20, 6, \"MST\", \"en\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<Account>(\n                    \"https://api.twitter.com/1.1/account/settings.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(acct);\n            Settings settings = acct.Settings;\n            Assert.IsNotNull(settings);\n            Assert.AreEqual(\"en\", settings.Language);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_WithRawResult_Succeeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n\n            await ctx.UpdateAccountSettingsAsync(1, true, 20, 6, \"MST\", \"en\");\n\n            Assert.AreEqual(SettingsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_Throws_On_No_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountSettingsAsync(null, null, null, null, null, null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateDeliveryDeviceAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"device\", DeviceType.Sms.ToString().ToLower() },\n                { \"include_entities\", true.ToString().ToLower() }\n            };\n\n            Account acct = await ctx.UpdateDeliveryDeviceAsync(DeviceType.Sms, true);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<Account>(\n                    \"https://api.twitter.com/1.1/account/update_delivery_device.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(acct);\n            Settings settings = acct.Settings;\n            Assert.IsNotNull(settings);\n        }\n\n        [TestMethod]\n        public async Task UpdateDeliveryDeviceAsync_WithRawResult_Succeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n\n            await ctx.UpdateDeliveryDeviceAsync(DeviceType.Sms, true);\n\n            Assert.AreEqual(SettingsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedProfileBannerUrl = \"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\";\n            byte[] banner = new byte[]{ 1, 2, 3 };\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateProfileBannerAsync(banner, FileName, FileType);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    \"https://api.twitter.com/1.1/account/update_profile_banner.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(actual);\n            Assert.IsNotNull(actual.ProfileBannerUrl);\n            Assert.AreEqual(ExpectedProfileBannerUrl, actual.ProfileBannerUrl);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_WithRawResult_Succeeds()\n        {\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateProfileBannerAsync(banner, FileName, FileType);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Null_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = null;\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner, FileName, FileType));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Empty_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = new byte[0];\n            const string FileName = \"MyImage.png\";\n            const string FileType = \"png\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner, FileName, FileType));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Null_FileName()\n        {\n            const string ExpectedParamName = \"fileName\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = null;\n            const string FileType = \"png\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner, FileName, FileType));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Empty_FileName()\n        {\n            const string ExpectedParamName = \"fileName\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"\";\n            const string FileType = \"png\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner, FileName, FileType));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Null_FileType()\n        {\n            const string ExpectedParamName = \"imageType\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"MyFile.png\";\n            const string FileType = null;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner, FileName, FileType));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Empty_FileType()\n        {\n            const string ExpectedParamName = \"imageType\";\n            byte[] banner = new byte[] { 1, 2, 3 };\n            const string FileName = \"MyFile.png\";\n            const string FileType = \"\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner, FileName, FileType));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RemoveProfileBannerAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.RemoveProfileBannerAsync();\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/account/remove_profile_banner.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(actual);\n        }\n\n        [TestMethod]\n        public async Task RemoveProfileBannerAsync_WithRawResult_Succeeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.RemoveProfileBannerAsync();\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string SettingsResponse = @\"{\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"protected\"\":false,\n   \"\"geo_enabled\"\":false,\n   \"\"time_zone\"\":{\n      \"\"name\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"tzinfo_name\"\":\"\"America\\/Denver\"\"\n   },\n   \"\"sleep_time\"\":{\n      \"\"enabled\"\":true,\n      \"\"start_time\"\":20,\n      \"\"end_time\"\":8\n   },\n   \"\"show_all_inline_media\"\":true,\n   \"\"discoverable_by_email\"\":true,\n   \"\"trend_location\"\":[\n      {\n         \"\"woeid\"\":23424977,\n         \"\"name\"\":\"\"United States\"\",\n         \"\"country\"\":\"\"United States\"\",\n         \"\"countryCode\"\":\"\"US\"\",\n         \"\"placeType\"\":{\n            \"\"name\"\":\"\"Country\"\",\n            \"\"code\"\":12\n         },\n         \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424977\"\",\n         \"\"parentid\"\":1\n      }\n   ],\n   \"\"language\"\":\"\"en\"\",\n   \"\"always_use_https\"\":true\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/AccountTests/AccountRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class AccountRequestProcessorTests\n    {\n        public AccountRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_VerifyCredentials()\n        {\n            var target = new AccountRequestProcessor<Account> { Type = AccountType.VerifyCredentials };\n\n            List<Account> actual = target.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            var acct = actual.Cast<Account>().ToList().FirstOrDefault();\n            Assert.IsNotNull(acct);\n            Assert.AreEqual(\"Joe Mayo\", acct.User.Name);\n        }\n\n        [TestMethod]\n        public void HandleSettingsResponse_Converts_Settings_To_Account()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>();\n\n            Account acct = acctReqProc.HandleSettingsResponse(TestSettingsResponse);\n\n            Assert.IsNotNull(acct);\n            Assert.AreEqual(23424977, acct.Settings.TrendLocation.WoeID);\n            Assert.AreEqual(\"United States\", acct.Settings.TrendLocation.Name);\n            Assert.AreEqual(12, acct.Settings.TrendLocation.PlaceTypeNameCode);\n            Assert.AreEqual(\"Country\", acct.Settings.TrendLocation.PlaceTypeName);\n            Assert.AreEqual(\"US\", acct.Settings.TrendLocation.CountryCode);\n            Assert.AreEqual(\"United States\", acct.Settings.TrendLocation.Country);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/23424977\", acct.Settings.TrendLocation.Url);\n            Assert.AreEqual(true, acct.Settings.GeoEnabled);\n            Assert.AreEqual(false, acct.Settings.SleepTime.Enabled);\n            Assert.AreEqual(0, acct.Settings.SleepTime.StartHour);\n            Assert.AreEqual(0, acct.Settings.SleepTime.EndHour);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var accts = reqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, accts.Count);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new AccountRequestProcessor<Account>();\n            Expression<Func<Account, bool>> expression = \n                acct => \n                    acct.Type == AccountType.Settings &&\n                    acct.SkipStatus == true &&\n                    acct.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_VerifyCredentials_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/verify_credentials.json?skip_status=true&include_entities=false\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.VerifyCredentials).ToString(CultureInfo.InvariantCulture) },\n                        { \"SkipStatus\", true.ToString() },\n                        { \"IncludeEntities\", false.ToString() }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Settings_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/settings.json\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_Null_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>\n            {\n                Type = AccountType.VerifyCredentials,\n                SkipStatus = true,\n                IncludeEntities = true\n            };\n\n            var accounts = acctReqProc.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            Assert.IsNotNull(accounts);\n            Assert.IsNotNull(accounts.SingleOrDefault());\n            var account = accounts.Single();\n            Assert.AreEqual(AccountType.VerifyCredentials, account.Type);\n            Assert.IsTrue(account.SkipStatus);\n            Assert.IsTrue(account.IncludeEntities);\n        }\n\n        const string TestVerifyCredentialsQueryResponse = @\"{\n   \"\"statuses_count\"\":1624,\n   \"\"favourites_count\"\":65,\n   \"\"protected\"\":false,\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a2.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\",\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"default_profile\"\":false,\n   \"\"listed_count\"\":101,\n   \"\"following\"\":false,\n   \"\"profile_background_tile\"\":false,\n   \"\"utc_offset\"\":-25200,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; MVP; interested in C#, MVC, and Language Integrated Query (LINQ)\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"contributors_enabled\"\":false,\n   \"\"verified\"\":false,\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"followers_count\"\":875,\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":2,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"id_str\"\":\"\"115131137906589696\"\",\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":115131137906589696,\n      \"\"created_at\"\":\"\"Sat Sep 17 18:32:56 +0000 2011\"\",\n      \"\"possibly_sensitive\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Visual Studio 11 Developer Preview: http:\\/\\/t.co\\/fISuavMD\"\"\n   },\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"geo_enabled\"\":true,\n   \"\"profile_use_background_image\"\":true,\n   \"\"friends_count\"\":161,\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"is_translator\"\":false,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"id\"\":15411837,\n   \"\"follow_request_sent\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a1.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\"\n}\";\n\n        const string TestSettingsResponse = @\"{\n   \"\"protected\"\":false,\n   \"\"trend_location\"\":[\n      {\n         \"\"name\"\":\"\"United States\"\",\n         \"\"countryCode\"\":\"\"US\"\",\n         \"\"placeType\"\":{\n            \"\"name\"\":\"\"Country\"\",\n            \"\"code\"\":12\n         },\n         \"\"parentid\"\":1,\n         \"\"country\"\":\"\"United States\"\",\n         \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424977\"\",\n         \"\"woeid\"\":23424977\n      }\n   ],\n   \"\"language\"\":\"\"en\"\",\n   \"\"sleep_time\"\":{\n      \"\"start_time\"\":null,\n      \"\"end_time\"\":null,\n      \"\"enabled\"\":false\n   },\n   \"\"show_all_inline_media\"\":false,\n   \"\"discoverable_by_email\"\":true,\n   \"\"time_zone\"\":{\n      \"\"tzinfo_name\"\":\"\"America\\/Denver\"\",\n      \"\"name\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"utc_offset\"\":-25200\n   },\n   \"\"geo_enabled\"\":true,\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"always_use_https\"\":true\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <appSettings>\n    <!-- Set culture to test localization settings, all ClassInitialize in\n         tests should set CurrentCulture and CurrentUICulture with this value\n    <add key=\"culture\" value=\"nn-NO\"/>\n    -->\n\n    <add key=\"culture\" value=\"\" />\n  </appSettings>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/BlocksTests/BlocksCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.BlocksTests\n{\n    [TestClass]\n    public class BlocksCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public BlocksCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BlocksRequestProcessor_Works_With_Actions()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(blocksReqProc, typeof(IRequestProcessorWithAction<User>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(BlocksUserJson);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.PostToTwitterAsync<User>(\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_Handles_Response()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            User actual = await ctx.CreateBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(\"LINQ to Tweeter Test\", actual.Name);\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(BlocksUserJson, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_Builds_Url()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateBlockAsync(Id, null, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/blocks/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_Throws_On_Null_UserID_And_ScreenName()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateBlockAsync(0, null, true));\n\n            Assert.AreEqual(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_Handles_Response()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            User actual = await ctx.DestroyBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(\"LINQ to Tweeter Test\", actual.Name);\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(BlocksUserJson, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_Builds_Url()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyBlockAsync(Id, null, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/blocks/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_Throws_On_No_ID_Or_ScreenName()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyBlockAsync(0, null, true));\n\n            Assert.AreEqual(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        const string BlocksUserJson = @\"{\n   \"\"id\"\":16761255,\n   \"\"listed_count\"\":2,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":0,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"followers_count\"\":22,\n   \"\"is_translator\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"follow_request_sent\"\":false,\n   \"\"statuses_count\"\":100,\n   \"\"utc_offset\"\":-25200,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"favourites_count\"\":2,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"verified\"\":false,\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"default_profile\"\":false,\n   \"\"following\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"notifications\"\":false,\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"coordinates\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"place\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":176445993091481604,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/BlocksTests/BlocksRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.BlocksTests\n{\n    [TestClass]\n    public class BlocksRequestProcessorTests\n    {\n        public BlocksRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IDs()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.Ids\n            };\n\n            IList<Blocks> blocksResponse = blockReqProc.ProcessResults(BlockedIDsJson);\n\n            Assert.IsNotNull(blocksResponse);\n            Blocks blocks = blocksResponse.First();\n            List<string> ids = blocks.IDs;\n            Assert.AreEqual(5, ids.Count());\n            Assert.AreEqual(\"35080286\", ids.First());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_BlockedUsers()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List\n            };\n\n            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            var actualQuery = actual as IList<Blocks>;\n            Assert.IsNotNull(actualQuery);\n            Assert.AreEqual(actualQuery[0].Users.Count, 3);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var blocks = blocksReqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(1, blocks.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List,\n                ScreenName = \"somename\",\n                Page = 1,\n                PerPage = 10,\n                IncludeEntities = true,\n                SkipStatus = true,\n                Cursor = \"789\"\n            };\n\n            var blocks = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            Assert.IsNotNull(blocks);\n            Assert.IsNotNull(blocks.SingleOrDefault());\n            var block = blocks.Single();\n            Assert.AreEqual(BlockingType.List, block.Type);\n            Assert.AreEqual(\"somename\", block.ScreenName);\n            Assert.AreEqual(1, block.Page);\n            Assert.AreEqual(10, block.PerPage);\n            Assert.IsTrue(block.IncludeEntities);\n            Assert.IsTrue(block.SkipStatus);\n            Assert.AreEqual(\"789\", block.Cursor);\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks>();\n            Expression<Func<Blocks, bool>> expression =\n                block =>\n                    block.Type == BlockingType.List &&\n                    block.UserID == 123ul &&\n                    block.ScreenName == \"JoeMayo\" &&\n                    block.Page == 1 &&\n                    block.PerPage == 10 &&\n                    block.IncludeEntities == true &&\n                    block.SkipStatus == true &&\n                    block.Cursor == \"789\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = blocksReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PerPage\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_List_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/list.json?page=2&per_page=10&include_entities=true&skip_status=true&cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture) },\n                    { \"Page\", \"2\" },\n                    { \"PerPage\", \"10\" },\n                    { \"SkipStatus\", true.ToString() },\n                    { \"Cursor\", \"789\" },\n                    { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_BlockingIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/ids.json?cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.Ids).ToString(CultureInfo.InvariantCulture) },\n                    { \"Cursor\", \"789\" }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Parameter()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n\n        const string BlockedUsersJson = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":35080286,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":0,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":null,\n         \"\"name\"\":\"\"Nunya Business\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Fri Apr 24 23:44:07 +0000 2009\"\",\n         \"\"time_zone\"\":null,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"35080286\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"followers_count\"\":1,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"somename\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Apr 24 23:44:34 +0000 2009\"\",\n            \"\"id_str\"\":\"\"1608673165\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"whatever\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":1608673165,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":0\n      },\n      {\n         \"\"id\"\":132447355,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":1,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":14400,\n         \"\"name\"\":\"\"abcdefg\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Tue Apr 13 07:49:37 +0000 2010\"\",\n         \"\"time_zone\"\":\"\"Baku\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"132447355\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"followers_count\"\":33,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"abcdefg\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":17,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Tue Apr 13 08:09:41 +0000 2010\"\",\n            \"\"id_str\"\":\"\"12093232220\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"hi\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":12093232220,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":6\n      },\n      {\n         \"\"id\"\":22785157,\n         \"\"location\"\":\"\"Orange County, CA\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"profile_background_color\"\":\"\"B2DFDA\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"name\"\":\"\"Patrick Kerr\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"statuses_count\"\":9823,\n         \"\"profile_link_color\"\":\"\"93A644\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":null,\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        31\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\"\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Wed Mar 04 15:15:54 +0000 2009\"\",\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"22785157\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"followers_count\"\":1149,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"eeeeee\"\",\n         \"\"listed_count\"\":11,\n         \"\"screen_name\"\":\"\"patrickkerr\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Dec 28 15:00:13 +0000 2012\"\",\n            \"\"id_str\"\":\"\"284675125813575680\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":\"\"lnkd.in\\/_n9Mq5\"\",\n                     \"\"expanded_url\"\":\"\"http:\\/\\/lnkd.in\\/_n9Mq5\"\",\n                     \"\"indices\"\":[\n                        66,\n                        86\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/t.co\\/Fil30ira\"\"\n                  }\n               ],\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"Lincoln Property Makes Second SoCal Office Acquisition in a Month http:\\/\\/t.co\\/Fil30ira\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.linkedin.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ELinkedIn\\u003C\\/a\\u003E\"\",\n            \"\"id\"\":284675125813575680,\n            \"\"possibly_sensitive\"\":false,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":\"\"Patrick Kerr at Kerr Organization, develops & invests in commercial real estate #realestate #properties #buildings #multifamily #investments #homes\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"ffffff\"\",\n         \"\"friends_count\"\":155\n      }\n   ],\n   \"\"next_cursor\"\":0,\n   \"\"previous_cursor\"\":0,\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n\n        const string BlockedIDsJson = @\"{\n   \"\"previous_cursor\"\":0,\n   \"\"ids\"\":[\n      35080286,\n      132447355,\n      22785157,\n      238429025,\n      256075978\n   ],\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\",\n   \"\"next_cursor\"\":0\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Common/DebuggerWriter.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    /// <summary>\n    /// Implements a <see cref=\"TextWriter\"/> for writing information to the debugger log.\n    /// </summary>\n    /// <seealso cref=\"Debugger.Log\"/>\n    /// <remarks>This code is created by Kris Vandermotten</remarks>\n    /// /// <remarks>For more information check this link: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11 </remarks>\n    public class DebuggerWriter : TextWriter\n    {\n        private bool isOpen;\n        private static UnicodeEncoding encoding;\n        private readonly int level;\n        private readonly string category;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class.\n        /// </summary>\n        public DebuggerWriter()\n            : this(0, Debugger.DefaultCategory)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level and category.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        public DebuggerWriter(int level, string category)\n            : this(level, category, CultureInfo.CurrentCulture)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level, category and format provider.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        /// <param name=\"formatProvider\">An <see cref=\"IFormatProvider\"/> object that controls formatting.</param>\n        public DebuggerWriter(int level, string category, IFormatProvider formatProvider)\n            : base(formatProvider)\n        {\n            this.level = level;\n            this.category = category;\n            this.isOpen = true;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            isOpen = false;\n            base.Dispose(disposing);\n        }\n\n        public override void Write(char value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            Debugger.Log(level, category, value.ToString());\n        }\n\n        public override void Write(string value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (value != null)\n            {\n                Debugger.Log(level, category, value);\n            }\n        }\n\n        public override void Write(char[] buffer, int index, int count)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (buffer == null || index < 0 || count < 0 || buffer.Length - index < count)\n            {\n                base.Write(buffer, index, count); // delegate throw exception to base class\n            }\n            Debugger.Log(level, category, new string(buffer, index, count));\n        }\n\n        public override Encoding Encoding\n        {\n            get\n            {\n                if (encoding == null)\n                {\n                    encoding = new UnicodeEncoding(false, false);\n                }\n                return encoding;\n            }\n        }\n\n        public int Level\n        {\n            get { return level; }\n        }\n\n        public string Category\n        {\n            get { return category; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Common/EntitiesTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    [TestClass]\n    public class EntitiesTests\n    {\n        [TestMethod]\n        public void InstantiateEntities_WithNull_SuccessfullyCreatesEmptyCollectionProperties()\n        {\n            var emptyEntities = new Entities(null);\n\n            Assert.IsNotNull(emptyEntities);\n            Assert.IsNotNull(emptyEntities.HashTagEntities);\n            Assert.IsFalse(emptyEntities.HashTagEntities.Any());\n            Assert.IsNotNull(emptyEntities.MediaEntities);\n            Assert.IsFalse(emptyEntities.MediaEntities.Any());\n            Assert.IsNotNull(emptyEntities.SymbolEntities);\n            Assert.IsFalse(emptyEntities.SymbolEntities.Any());\n            Assert.IsNotNull(emptyEntities.UrlEntities);\n            Assert.IsFalse(emptyEntities.UrlEntities.Any());\n            Assert.IsNotNull(emptyEntities.UserMentionEntities);\n            Assert.IsFalse(emptyEntities.UserMentionEntities.Any());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Common/L2TAssert.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    class L2TAssert\n    {\n        public static async Task<T> Throws<T>(Func<Task> task) \n            where T : Exception\n        {\n            try\n            {\n                await task();\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(T));\n                return (T)ex;\n            }\n\n            if (typeof(T).Equals(new Exception().GetType()))\n                Assert.Fail(\"Expected exception but no exception was thrown.\");\n            else\n                Assert.Fail(\n                    string.Format(\n                        \"Expected exception of type {0} but no exception was thrown.\", \n                        typeof(T)));\n\n            return null;\n        }\n\n        public static T Throws<T>(Action task)\n            where T : Exception\n        {\n            try\n            {\n                task();\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(T));\n                return (T)ex;\n            }\n\n            if (typeof(T).Equals(new Exception().GetType()))\n                Assert.Fail(\"Expected exception but no exception was thrown.\");\n            else\n                Assert.Fail(\n                    string.Format(\n                        \"Expected exception of type {0} but no exception was thrown.\",\n                        typeof(T)));\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Common/OAuthTwitterMock.cs",
    "content": "﻿//using System;\n//using System.Collections.Generic;\n//using LinqToTwitter;\n\n//namespace LinqToTwitterPcl.Tests.Common\n//{\n//    class OAuthTwitterMock : IOAuthTwitter\n//    {\n//        public void GetRequestTokenAsync(Uri oauthRequestTokenUrl, Uri oauthAuthorizeUrl, string twitterCallbackUrl, AuthAccessType authAccessType, bool forceLogin, Action<string> authorizationCallback, Action<TwitterAsyncResponse<object>> authenticationCompleteCallback)\n//        {\n//            authenticationCompleteCallback(new TwitterAsyncResponse<object>());\n//        }\n\n//        public void AccessTokenGet(string authToken, string verifier, string accessTokenUrl, string callback, out string screenName, out string userID)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string AuthorizationLinkGet(string requestToken, string authorizeUrl, string callback, bool forceLogin, AuthAccessType authAccessType)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public void GetOAuthQueryString(HttpMethod method, Request url, string callback, out string outUrl, out string queryString)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string GetOAuthQueryStringForPost(Request url, IDictionary<string, string> postData)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string OAuthConsumerKey\n//        {\n//            get\n//            {\n//                throw new NotImplementedException();\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public string OAuthConsumerSecret\n//        {\n//            get\n//            {\n//                throw new NotImplementedException();\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public string OAuthToken\n//        {\n//            get\n//            {\n//                return \"123\";\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public string OAuthTokenSecret\n//        {\n//            get\n//            {\n//                return \"123\";\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public string OAuthUserAgent\n//        {\n//            get\n//            {\n//                throw new NotImplementedException();\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public string OAuthVerifier\n//        {\n//            get\n//            {\n//                throw new NotImplementedException();\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public string oAuthWebRequest(HttpMethod method, string url, string postData, string callback, AuthAccessType authAccessType)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string WebRequest(HttpMethod method, string url, string authHeader, IDictionary<string, string> postData)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string WebResponseGet(System.Net.HttpWebRequest webRequest)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string GetOAuthHeader(Uri requestUrl, Uri callbackUrl)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public void GetAccessTokenAsync(string verifier, Uri oauthAccessTokenUrl, Uri twitterCallbackUrl, AuthAccessType authAccessType, Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback)\n//        {\n//            authenticationCompleteCallback(new TwitterAsyncResponse<UserIdentifier>());\n//        }\n\n//        public string ProxyUrl\n//        {\n//            get\n//            {\n//                throw new NotImplementedException();\n//            }\n//            set\n//            {\n//                throw new NotImplementedException();\n//            }\n//        }\n\n//        public void GetAccessTokenAsync(string verifier, Uri oauthAccessTokenUrl, string twitterCallbackUrl, AuthAccessType authAccessType, Action<TwitterAsyncResponse<UserIdentifier>> authenticationCompleteCallback)\n//        {\n//            authenticationCompleteCallback(new TwitterAsyncResponse<UserIdentifier>());\n//        }\n\n//        public string FilterRequestParameters(Uri fullUrl)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string GetUrlParamValue(string queryString, string paramKey)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public void PostAccessToken(Request accessTokenUrl, IDictionary<string, string> postData, out string screenName, out string userID)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public string OAuthWebRequest(HttpMethod method, Request url, IDictionary<string, string> postData, string callback)\n//        {\n//            throw new NotImplementedException();\n//        }\n\n//        public void PostAccessTokenAsync(Request uri, IDictionary<string, string> postData, Action<TwitterAsyncResponse<UserIdentifier>> authorizationCompleteCallback)\n//        {\n//            throw new NotImplementedException();\n//        }\n//    }\n//}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Common/TestCulture.cs",
    "content": "﻿using System.Configuration;\nusing System.Globalization;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    public class TestCulture\n    {\n        public static void SetCulture()\n        {\n            string culture = ConfigurationManager.AppSettings[\"culture\"];\n            var cultureInfo = new CultureInfo(culture);\n            Thread.CurrentThread.CurrentCulture = cultureInfo;\n            Thread.CurrentThread.CurrentUICulture = cultureInfo;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Common/TwitterExtensionsTests.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    public class TwitterExtensionsTests\n    {\n        public TwitterExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/DirectMessageTests/DirectMessageCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class DirectMessageCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public DirectMessageCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void DirectMessageRequestProcessor_Works_With_Actions()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>();\n\n            Assert.IsInstanceOfType(dmReqProc, typeof(IRequestProcessorWithAction<DirectMessage>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(DirectMessageResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.PostToTwitterAsync<DirectMessage>(\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageAsync_Returns_Created_DM()\n        {\n            const string UserID = \"1\";\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            DirectMessage actual = await ctx.NewDirectMessageAsync(UserID, Text);\n\n            Assert.AreEqual(189086715040903168ul, actual.IDResponse);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageAsync_WithRawResult_Succeeds()\n        {\n            const string UserID = \"1\";\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.NewDirectMessageAsync(UserID, Text);\n\n            Assert.AreEqual(DirectMessageResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageAsync_Constructs_Url()\n        {\n            const string UserID = \"1\";\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.NewDirectMessageAsync(UserID, Text);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<DirectMessage>(\n                    \"https://api.twitter.com/1.1/direct_messages/new.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageAsync_Throws_On_Null_Text()\n        {\n            const string ScreenName = \"JoeMayo\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageAsync(ScreenName, null));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageAsync_Throws_On_Empty_ScreenName()\n        {\n            string screenName = string.Empty;\n            const string Text = \"Test Text\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageAsync(screenName, Text));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageAsync_Throws_On_Zero_UserID()\n        {\n            const int UserID = 0;\n            const string Text = \"Test Text\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageAsync(UserID, Text));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyDirectMessageAsync_Returns_Deleted_DM()\n        {\n            const ulong Id = 1;\n            var ctx = InitializeTwitterContext();\n\n            DirectMessage actual = await ctx.DestroyDirectMessageAsync(Id, true);\n\n            Assert.AreEqual(189086715040903168ul, actual.IDResponse);\n        }\n\n        [TestMethod]\n        public async Task DestroyDirectMessageAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyDirectMessageAsync(Id, true);\n\n            Assert.AreEqual(DirectMessageResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyDirectMessageAsync_Constructs_Url()\n        {\n            const ulong Id = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyDirectMessageAsync(Id, true);\n\n            execMock.Verify(\n                exec =>\n                exec.PostToTwitterAsync<DirectMessage>(\n                    \"https://api.twitter.com/1.1/direct_messages/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DestroyDirectMessageAsync_Throws_On_Zero_ID()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyDirectMessageAsync(0, true));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        const string DirectMessageResponse = @\"\n   {\n      \"\"recipient\"\":{\n         \"\"id\"\":16761255,\n         \"\"listed_count\"\":2,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":22,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":100,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"favourites_count\"\":2,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n      },\n      \"\"created_at\"\":\"\"Sun Apr 08 20:26:00 +0000 2012\"\",\n      \"\"entities\"\":{\n         \"\"user_mentions\"\":[\n\n         ],\n         \"\"urls\"\":[\n\n         ],\n         \"\"hashtags\"\":[\n\n         ]\n      },\n      \"\"sender_id\"\":15411837,\n      \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n      \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"recipient_id\"\":16761255,\n      \"\"id\"\":189086715040903168,\n      \"\"sender\"\":{\n         \"\"id\"\":15411837,\n         \"\"listed_count\"\":108,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":204,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":1083,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":1867,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"favourites_count\"\":39,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP; interests: Windows 8.\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"JoeMayo\"\"\n      },\n      \"\"text\"\":\"\"This is a test.\"\",\n      \"\"id_str\"\":\"\"189086715040903168\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/DirectMessageTests/DirectMessageRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class DirectMessageRequestProcessorTests\n    {\n        public DirectMessageRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_SentTo_Url()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            const string Expected = \"https://api.twitter.com/1/direct_messages.json?since_id=1234567&max_id=357&page=1&count=2&include_entities=true&skip_status=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.SentTo).ToString(CultureInfo.InvariantCulture) },\n                        { \"SinceID\", \"1234567\" },\n                        { \"MaxID\", \"357\" },\n                        { \"Page\", \"1\" },\n                        { \"Count\", \"2\" },\n                        { \"IncludeEntities\", true.ToString() },\n                        { \"SkipStatus\", true.ToString() }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_SentBy_Url()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            const string Expected = \"https://api.twitter.com/1/direct_messages/sent.json?since_id=1234567&max_id=357&page=1&count=2&include_entities=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.SentBy).ToString(CultureInfo.InvariantCulture) },\n                        { \"SinceID\", \"1234567\" },\n                        { \"MaxID\", \"357\" },\n                        { \"Page\", \"1\" },\n                        { \"Count\", \"2\" },\n                        { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            const string Expected = \"https://api.twitter.com/1/direct_messages/show.json?id=478805447\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.Show).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"478805447\" },\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Requires_ID()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageType.Show).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var actual = dmReqProc.ProcessResults(TestQueryResponse);\n\n            var actualQuery = actual as IList<DirectMessage>;\n            Assert.IsNotNull(actualQuery);\n            Assert.AreEqual(1, actualQuery.Count());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var dms = dmReqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(dms.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Single_Result_For_Show()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> \n            { \n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = DirectMessageType.Show\n            };\n\n            var dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            Assert.IsNotNull(dms.SingleOrDefault());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Replaces_Input_Params_For_Show()\n        {\n            const ulong SinceID = 1;\n            const ulong MaxID = 2;\n            const int Page = 3;\n            const int Count = 4;\n            const ulong ID = 5;\n            const bool SkipStatus = true;\n\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = DirectMessageType.Show,\n                SinceID = SinceID,\n                MaxID = MaxID,\n                Page = Page,\n                Count = Count,\n                ID = ID,\n                SkipStatus = SkipStatus\n            };\n\n            var dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            var dm = dms.First();\n\n            Assert.AreEqual(SinceID, dm.SinceID);\n            Assert.AreEqual(MaxID, dm.MaxID);\n            Assert.AreEqual(Page, dm.Page);\n            Assert.AreEqual(Count, dm.Count);\n            Assert.AreEqual(ID, dm.ID);\n            Assert.AreEqual(SkipStatus, dm.SkipStatus);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Replaces_Input_Params_For_SentBy_And_SentTo()\n        {\n            const ulong SinceID = 1;\n            const ulong MaxID = 2;\n            const int Page = 3;\n            const int Count = 4;\n            const ulong ID = 5;\n            const bool SkipStatus = true;\n\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1/\",\n                Type = DirectMessageType.SentBy,\n                SinceID = SinceID,\n                MaxID = MaxID,\n                Page = Page,\n                Count = Count,\n                ID = ID,\n                SkipStatus = SkipStatus\n            };\n\n            var dms = dmReqProc.ProcessResults(TestQueryResponse);\n\n            var dm = dms.First();\n\n            Assert.AreEqual(SinceID, dm.SinceID);\n            Assert.AreEqual(MaxID, dm.MaxID);\n            Assert.AreEqual(Page, dm.Page);\n            Assert.AreEqual(Count, dm.Count);\n            Assert.AreEqual(ID, dm.ID);\n            Assert.AreEqual(SkipStatus, SkipStatus);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage>();\n            Expression<Func<DirectMessage, bool>> expression =\n                dm =>\n                    dm.Type == DirectMessageType.Show &&\n                    dm.Count == 1 &&\n                    dm.MaxID == 789 &&\n                    dm.Page == 1 &&\n                    dm.SinceID == 123 &&\n                    dm.ID == 456 &&\n                    dm.IncludeEntities == true &&\n                    dm.SkipStatus == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = dmReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)DirectMessageType.Show).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Param()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Param_Dictionary()\n        {\n            var dmReqProc = new DirectMessageRequestProcessor<DirectMessage> { BaseUrl = \"https://api.twitter.com/1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        const string TestQueryResponse = @\"[\n   {\n      \"\"recipient\"\":{\n         \"\"id\"\":16761255,\n         \"\"listed_count\"\":2,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":22,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":100,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"favourites_count\"\":2,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n      },\n      \"\"created_at\"\":\"\"Sun Apr 08 20:26:00 +0000 2012\"\",\n      \"\"entities\"\":{\n         \"\"user_mentions\"\":[\n\n         ],\n         \"\"urls\"\":[\n\n         ],\n         \"\"hashtags\"\":[\n\n         ]\n      },\n      \"\"sender_id\"\":15411837,\n      \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n      \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"recipient_id\"\":16761255,\n      \"\"id\"\":189086715040903168,\n      \"\"sender\"\":{\n         \"\"id\"\":15411837,\n         \"\"listed_count\"\":108,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":204,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"followers_count\"\":1083,\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"statuses_count\"\":1867,\n         \"\"utc_offset\"\":-25200,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"favourites_count\"\":39,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n         \"\"verified\"\":false,\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP; interests: Windows 8.\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"default_profile\"\":false,\n         \"\"following\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"notifications\"\":false,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"screen_name\"\":\"\"JoeMayo\"\"\n      },\n      \"\"text\"\":\"\"This is a test.\"\",\n      \"\"id_str\"\":\"\"189086715040903168\"\"\n   }\n]\";\n\n        const string TestQuerySingleResponse = @\"{\n   \"\"recipient\"\":{\n      \"\"id\"\":16761255,\n      \"\"profile_background_tile\"\":false,\n      \"\"listed_count\"\":3,\n      \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n      \"\"location\"\":\"\"Anywhere In The World\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n      \"\"is_translator\"\":false,\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n      \"\"protected\"\":false,\n      \"\"geo_enabled\"\":false,\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n      \"\"friends_count\"\":1,\n      \"\"lang\"\":\"\"en\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"favourites_count\"\":2,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n      \"\"statuses_count\"\":100,\n      \"\"show_all_inline_media\"\":true,\n      \"\"profile_link_color\"\":\"\"0000ff\"\",\n      \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"verified\"\":false,\n      \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"profile_use_background_image\"\":true,\n      \"\"id_str\"\":\"\"16761255\"\",\n      \"\"notifications\"\":false,\n      \"\"following\"\":false,\n      \"\"profile_text_color\"\":\"\"000000\"\",\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n      \"\"default_profile\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n      \"\"followers_count\"\":22,\n      \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n      \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\"\n   },\n   \"\"sender\"\":{\n      \"\"id\"\":15411837,\n      \"\"profile_background_tile\"\":false,\n      \"\"listed_count\"\":111,\n      \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n      \"\"location\"\":\"\"Denver, CO\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"is_translator\"\":false,\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_background_color\"\":\"\"0099B9\"\",\n      \"\"protected\"\":false,\n      \"\"geo_enabled\"\":true,\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"friends_count\"\":214,\n      \"\"lang\"\":\"\"en\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"favourites_count\"\":39,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"statuses_count\"\":1891,\n      \"\"show_all_inline_media\"\":false,\n      \"\"profile_link_color\"\":\"\"0099B9\"\",\n      \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"verified\"\":false,\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"profile_use_background_image\"\":true,\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"notifications\"\":false,\n      \"\"following\"\":false,\n      \"\"profile_text_color\"\":\"\"3C3940\"\",\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"default_profile\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n      \"\"followers_count\"\":1092,\n      \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n      \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\"\n   },\n   \"\"created_at\"\":\"\"Sat Apr 21 03:23:55 +0000 2012\"\",\n   \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"recipient_id\"\":16761255,\n   \"\"id_str\"\":\"\"193540539663126529\"\",\n   \"\"id\"\":193540539663126529,\n   \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n   \"\"sender_id\"\":15411837,\n   \"\"text\"\":\"\"Direct Message Test - 4\\/20\\/2012 9:25:06 PM\"\"\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/DirectMessageTests/DirectMessageTests.cs",
    "content": "﻿using System;\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter;\n\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class DirectMessageTests\n    {\n        public DirectMessageTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void DirectMessage_Constructor_Parses_Json()\n        {\n            var dmJson = JsonMapper.ToObject(DirectMessagesResponse);\n\n            var dm = new DirectMessage(dmJson);\n\n            Assert.AreEqual(new DateTimeOffset(2012, 7, 22, 18, 38, 09, new TimeSpan(0L)).DateTime, dm.CreatedAt);\n            Assert.AreEqual(15411837ul, dm.SenderID);\n            Assert.AreEqual(\"JoeMayo\", dm.SenderScreenName);\n            Assert.IsNotNull(dm.Sender);\n            Assert.AreEqual(16761255ul, dm.RecipientID);\n            Assert.AreEqual(\"Linq2Tweeter\", dm.RecipientScreenName);\n            Assert.IsNotNull(dm.Recipient);\n            Assert.AreEqual(227110300510461952ul, dm.IDResponse);\n            Assert.AreEqual(\"227110300510461952\", dm.IDString);\n            Assert.AreEqual(\"Testing entities from @JoeMayo : http://t.co/Q1CQHi2 #entitytest\", dm.Text);\n            Entities entities = dm.Entities;\n            Assert.IsNotNull(entities);\n            List<UserMentionEntity> userMentions = entities.UserMentionEntities;\n            Assert.IsNotNull(userMentions);\n            Assert.IsTrue(userMentions.Any());\n            UserMentionEntity usrMention = userMentions.FirstOrDefault();\n            Assert.IsNotNull(usrMention);\n            Assert.AreEqual(\"Joe Mayo\", usrMention.Name);\n        }\n\n        const string DirectMessagesResponse = @\"{\n      \"\"recipient\"\":{\n         \"\"id\"\":16761255,\n         \"\"verified\"\":false,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2182212102\\/200xColor_2_normal.png\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"statuses_count\"\":103,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_background_color\"\":\"\"FFF04D\"\",\n         \"\"friends_count\"\":5,\n         \"\"show_all_inline_media\"\":true,\n         \"\"notifications\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"utc_offset\"\":-25200,\n         \"\"listed_count\"\":4,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme19\\/bg.gif\"\",\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"profile_link_color\"\":\"\"0099CC\"\",\n         \"\"protected\"\":false,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"is_translator\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme19\\/bg.gif\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_sidebar_border_color\"\":\"\"fff8ad\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"f6ffd1\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2182212102\\/200xColor_2_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"contributors_enabled\"\":false\n      },\n      \"\"recipient_id\"\":16761255,\n      \"\"id_str\"\":\"\"227110300510461952\"\",\n      \"\"sender\"\":{\n         \"\"id\"\":15411837,\n         \"\"verified\"\":false,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"statuses_count\"\":2064,\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_background_color\"\":\"\"FFF04D\"\",\n         \"\"friends_count\"\":221,\n         \"\"show_all_inline_media\"\":false,\n         \"\"notifications\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"utc_offset\"\":-25200,\n         \"\"listed_count\"\":122,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/579400467\\/200xColor_2.png\"\",\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_link_color\"\":\"\"0099CC\"\",\n         \"\"protected\"\":false,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"is_translator\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP; author of LINQ to Twitter - http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/579400467\\/200xColor_2.png\"\",\n         \"\"favourites_count\"\":51,\n         \"\"profile_sidebar_border_color\"\":\"\"FFF8AD\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"F6FFD1\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"following\"\":false,\n         \"\"followers_count\"\":1174,\n         \"\"contributors_enabled\"\":false\n      },\n      \"\"sender_screen_name\"\":\"\"JoeMayo\"\",\n      \"\"sender_id\"\":15411837,\n      \"\"entities\"\":{\n         \"\"user_mentions\"\":[\n            {\n               \"\"name\"\":\"\"Joe Mayo\"\",\n               \"\"screen_name\"\":\"\"JoeMayo\"\",\n               \"\"id_str\"\":\"\"15411837\"\",\n               \"\"indices\"\":[\n                  22,\n                  30\n               ],\n               \"\"id\"\":15411837\n            }\n         ],\n         \"\"hashtags\"\":[\n            {\n               \"\"indices\"\":[\n                  53,\n                  64\n               ],\n               \"\"text\"\":\"\"entitytest\"\"\n            }\n         ],\n         \"\"urls\"\":[\n            {\n               \"\"display_url\"\":\"\"linqtotwitter.codeplex.com\"\",\n               \"\"url\"\":\"\"http:\\/\\/t.co\\/Q1CQHi2\"\",\n               \"\"indices\"\":[\n                  33,\n                  52\n               ],\n               \"\"expanded_url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\"\n            }\n         ]\n      },\n      \"\"recipient_screen_name\"\":\"\"Linq2Tweeter\"\",\n      \"\"id\"\":227110300510461952,\n      \"\"created_at\"\":\"\"Sun Jul 22 18:38:09 +0000 2012\"\",\n      \"\"text\"\":\"\"Testing entities from @JoeMayo : http:\\/\\/t.co\\/Q1CQHi2 #entitytest\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/FavoritesTests/FavoritesCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesCommandsTests\n    {\n        public FavoritesCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void CreateFavoritesRequestProcessor_Works_With_Actions()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            Assert.IsInstanceOfType(favReqProc, typeof(IRequestProcessorWithAction<Favorites>));\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_WithValidID_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            Status actual = await ctx.CreateFavoriteAsync(Id);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1ul;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateFavoriteAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_Throws_On_Zero_ID()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateFavoriteAsync(0));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_WithValidID_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            Status actual = await ctx.DestroyFavoriteAsync(Id, true);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyFavoriteAsync(Id, true);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_Throws_On_Zero_ID()\n        {\n            const ulong ID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFavoriteAsync(ID, true));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/FavoritesTests/FavoritesCtorTests.cs",
    "content": "﻿using System;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesCtorTests\n    {\n        public FavoritesCtorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Favorites_Ctor_Parses_JsonData()\n        {\n            var favJson = JsonMapper.ToObject(TwitterResponse);\n\n            var favorite = new Favorites(favJson);\n\n            Assert.AreEqual(1234ul, favorite.InReplyToStatusID);\n            Assert.AreEqual(new DateTimeOffset(2012, 4, 5, 16, 44, 8, new TimeSpan(0)).DateTime, favorite.CreatedAt);\n            Assert.IsFalse(favorite.Truncated);\n            Assert.AreEqual(false, favorite.Retweeted);\n            Assert.IsNotNull(favorite.User);\n        }\n\n        const string TwitterResponse = @\"\n   {\n      \"\"in_reply_to_status_id_str\"\":\"\"1234\"\",\n      \"\"in_reply_to_status_id\"\":1234,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":\"\"5678\"\",\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      }\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/FavoritesTests/FavoritesRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesRequestProcessorTests\n    {\n        public FavoritesRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            List<Favorites> favorites = favReqProc.ProcessResults(TwitterResponse);\n\n            Assert.AreEqual(2, favorites.Count());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var favorites = reqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(favorites.Any());\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Favorites, bool>> expression =\n                fav =>\n                    fav.Type == FavoritesType.Favorites &&\n                    fav.UserID == 123ul &&\n                    fav.ScreenName == \"JoeMayo\" &&\n                    fav.Count == 100 &&\n                    fav.SinceID == 456 &&\n                    fav.MaxID == 789 &&\n                    fav.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = favReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)FavoritesType.Favorites).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"100\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Favorites_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/favorites/list.json?user_id=123&screen_name=JoeMayo&count=100&since_id=456&max_id=789&include_entities=true\";\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FavoritesType.Favorites.ToString() },\n                    { \"UserID\", \"123\" },\n                    { \"ScreenName\", \"JoeMayo\" },\n                    { \"Count\", \"100\" },\n                    { \"SinceID\", \"456\" },\n                    { \"MaxID\", \"789\" },\n                    { \"IncludeEntities\", true.ToString() }\n\n                };\n\n            Request req = favReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Param()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => favReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Params_Dictionary()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => favReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"parameters\", ex.ParamName);\n        }\n\n        const string TwitterResponse = @\"[\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":41,\n      \"\"favorited\"\":true,\n      \"\"id\"\":187943716558864384,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Windows Internals 6th Edition Part 1 (on Win7\\/Server 2008R2) is now available for purchase! http:\\/\\/t.co\\/F8vE1LnC\"\"\n   },\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Mar 22 15:34:00 +0000 2012\"\",\n      \"\"id_str\"\":\"\"182852636905701377\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"id\"\":14457688,\n         \"\"statuses_count\"\":8803,\n         \"\"profile_sidebar_fill_color\"\":\"\"e9e9dc\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_background_color\"\":\"\"1574a4\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Andrew Brust\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"1574a4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/bit.ly\\/bigondata\"\",\n         \"\"created_at\"\":\"\"Mon Apr 21 02:57:59 +0000 2008\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Founder\\/CEO, Blue Badge Insights; ZDNet Big Data blogger; RedDevNews.com columnist; co-author Programming Microsoft SQL Server 2012; Microsoft tech influencer.\"\",\n         \"\"id_str\"\":\"\"14457688\"\",\n         \"\"profile_text_color\"\":\"\"5e6466\"\",\n         \"\"time_zone\"\":\"\"Eastern Time (US & Canada)\"\",\n         \"\"following\"\":true,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"1c4273\"\",\n         \"\"location\"\":\"\"New York, NY\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":111,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":720,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"followers_count\"\":1743,\n         \"\"screen_name\"\":\"\"andrewbrust\"\",\n         \"\"profile_background_tile\"\":false\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":true,\n      \"\"id\"\":182852636905701377,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Check out my #ZDNet blog post - Big Data\\u2019s Ground Floor Consulting Opportunity - http:\\/\\/t.co\\/PxDMPRJT\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/FriendshipTests/FriendshipCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.FriendshipTests\n{\n    [TestClass]\n    class FriendshipCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public FriendshipCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<TEntity>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void FriendshipRequestProcessor_Works_With_Actions()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsInstanceOfType(freindReqProc, typeof(IRequestProcessorWithAction<Friendship>));\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_WithValidInput_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = await ctx.CreateFriendshipAsync(ScreenName, Follow);\n\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_RawResult_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            await ctx.CreateFriendshipAsync(ScreenName, Follow);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_Throws_On_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateFriendshipAsync(UserID, Follow));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_WithValidScreenName_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = await ctx.DestroyFriendshipAsync(ScreenName);\n\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            await ctx.DestroyFriendshipAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Empty_ScreenName()\n        {\n            string screenName = string.Empty;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(screenName));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Null_ScreenName()\n        {\n            string screenName = null;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(screenName));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(UserID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Calls_Execute()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            await ctx.UpdateFriendshipSettingsAsync(\"Linq2Tweeter\", true, true);\n\n            execMock.Verify(exec => exec.PostToTwitterAsync<Friendship>(\n                \"https://api.twitter.com/1.1/friendships/update.json\",\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            await ctx.UpdateFriendshipSettingsAsync(\"Linq2Tweeter\", true, true);\n\n            Assert.AreEqual(RelationshipResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Null_ScreenName()\n        {\n            string screenName = null;\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(screenName, true, true));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Empty_ScreenName()\n        {\n            const string ScreenName = \"\";\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(ScreenName, true, true));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(UserID, true, true));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":15411837,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"followers_count\"\":1101,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"listed_count\"\":113,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":true,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"statuses_count\"\":1907,\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"friends_count\"\":210,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"favourites_count\"\":44,\n   \"\"status\"\":{\n      \"\"retweeted\"\":true,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"possibly_sensitive_editable\"\":true,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":3,\n      \"\"id_str\"\":\"\"196991337554378752\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Apr 30 15:56:09 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196991337554378752,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Funny - http:\\/\\/t.co\\/yZW2Sbmi :)\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false\n      }\n   }\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/FriendshipTests/FriendshipRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.FriendshipTests\n{\n    [TestClass]\n    public class FriendshipRequestProcessorTests\n    {\n        public FriendshipRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void FriendshipRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsInstanceOfType(freindReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Translates_Relationships_From_LookupQuery()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Lookup };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var relations = friends.Single().Relationships;\n            Assert.IsNotNull(relations);\n            Assert.IsNotNull(relations.SingleOrDefault());\n            var connections = relations.Single().Connections;\n            Assert.IsNotNull(connections);\n            Assert.IsNotNull(connections.SingleOrDefault());\n            var connection = connections.First();\n            Assert.IsNotNull(connection);\n            Assert.AreEqual(\"following\", connection);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Show };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(RelationshipResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var tgtRel = friend.TargetRelationship;\n            Assert.IsNotNull(tgtRel);\n            Assert.AreEqual(\"JoeMayo\", tgtRel.ScreenName);\n            Assert.IsTrue(tgtRel.FollowedBy);\n            Assert.AreEqual(15411837ul, tgtRel.ID);\n            Assert.IsFalse(tgtRel.Following);\n            var srcRel = friend.SourceRelationship;\n            Assert.IsNotNull(srcRel);\n            Assert.AreEqual(\"Linq2Tweeter\", srcRel.ScreenName);\n            Assert.IsTrue(srcRel.RetweetsWanted);\n            Assert.IsFalse(srcRel.AllReplies);\n            Assert.IsFalse(srcRel.MarkedSpam);\n            Assert.IsFalse(srcRel.FollowedBy);\n            Assert.AreEqual(16761255ul, srcRel.ID);\n            Assert.IsFalse((bool)srcRel.Blocking);\n            Assert.IsTrue((bool)srcRel.NotificationsEnabled);\n            Assert.IsTrue(srcRel.Following);\n            Assert.IsFalse(srcRel.CanDm);\n            Assert.IsTrue(srcRel.Muting);\n        }\n\n        void TestParsingIds(FriendshipType friendType)\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = friendType };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(IdsResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var cursor = friend.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n            var idList = friend.IDInfo;\n            Assert.IsNotNull(idList);\n            var idsCursor = idList.CursorMovement;\n            Assert.IsNotNull(idsCursor);\n            Assert.AreEqual(2, idsCursor.Previous);\n            Assert.AreEqual(1, idsCursor.Next);\n            var ids = idList.IDs;\n            Assert.IsNotNull(ids);\n            Assert.IsTrue(ids.Any());\n            var id = ids.First();\n            Assert.AreEqual(5676142ul, id);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Incoming_Response()\n        {\n            TestParsingIds(FriendshipType.Incoming);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Outgoing_Response()\n        {\n            TestParsingIds(FriendshipType.Outgoing);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_NoRetweetIDs_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.NoRetweetIDs };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(NoRetweetIDsResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var idList = friend.IDInfo;\n            Assert.IsNotNull(idList);\n            var ids = idList.IDs;\n            Assert.IsNotNull(ids);\n            Assert.IsTrue(ids.Any());\n            var id = ids.First();\n            Assert.AreEqual(15411837ul, id);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<Friendship> friendships = reqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(friendships.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_FriendsListOrFollowersList_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.FriendsList };\n\n            List<Friendship> friendshipList = friendReqProc.ProcessResults(FriendsFollowersResponse);\n\n            Assert.IsNotNull(friendshipList);\n            Assert.IsNotNull(friendshipList.SingleOrDefault());\n            var friendship = friendshipList.Single();\n            Assert.IsNotNull(friendship);\n            var users = friendship.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            var user = users.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"93604443\", user.UserIDResponse);\n         }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Params()\n        {\n            const ulong SrcUsrID = 1;\n            const string SrcScrNm = \"JoeMayo\";\n            const ulong TgtUsrID = 2;\n            const string TgtScrNm = \"MayMayo\";\n            const long Cursor = 123;\n            const int Count = 20;\n            const string ScrNm = \"JoeMayo,MayMayo\";\n            const string UsrID = \"1,2\";\n            const bool SkipStatus = true;\n            const bool IncludeUserEntities = true;\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> \n            { \n                Type = FriendshipType.Lookup,\n                SourceUserID = SrcUsrID,\n                SourceScreenName = SrcScrNm,\n                TargetUserID = TgtUsrID,\n                TargetScreenName = TgtScrNm,\n                Count = Count,\n                Cursor = Cursor,\n                ScreenName = ScrNm,\n                UserID = UsrID,\n                SkipStatus = SkipStatus,\n                IncludeUserEntities = IncludeUserEntities\n            };\n\n            List<Friendship> friendships = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.IsNotNull(friendships);\n            Assert.IsTrue(friendships.Any());\n            var friendship = friendships.First();\n            Assert.IsNotNull(friendship);\n            Assert.AreEqual(FriendshipType.Lookup, friendship.Type);\n            Assert.AreEqual(SrcUsrID, friendship.SourceUserID);\n            Assert.AreEqual(SrcScrNm, friendship.SourceScreenName);\n            Assert.AreEqual(TgtUsrID, friendship.TargetUserID);\n            Assert.AreEqual(TgtScrNm, friendship.TargetScreenName);\n            Assert.AreEqual(Count, friendship.Count);\n            Assert.AreEqual(Cursor, friendship.Cursor);\n            Assert.AreEqual(ScrNm, friendship.ScreenName);\n            Assert.AreEqual(UsrID, friendship.UserID);\n            Assert.AreEqual(SkipStatus, friendship.SkipStatus);\n            Assert.AreEqual(IncludeUserEntities, friendship.IncludeUserEntities);\n        }\n\n        [TestMethod]\n        public void ProcessActionResult_Translates_Relationships_From_UpdateSettings()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Friendship friend = friendReqProc.ProcessActionResult(RelationshipResponse, FriendshipAction.Update);\n\n            var srcRel = friend.SourceRelationship;\n            Assert.AreEqual(true, srcRel.RetweetsWanted);\n            Assert.AreEqual(true, srcRel.NotificationsEnabled);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Friendship, bool>> expression =\n                friend =>\n                         friend.Type == FriendshipType.Show &&\n                         friend.SourceUserID == 1 &&\n                         friend.SourceScreenName == \"Name\" &&\n                         friend.TargetUserID == 2 &&\n                         friend.TargetScreenName == \"Name\" &&\n                         friend.Cursor == -1 &&\n                         friend.ScreenName == \"twitter,joemayo\" &&\n                         friend.UserID == \"123,456\" &&\n                         friend.SkipStatus == true &&\n                         friend.IncludeUserEntities == true &&\n                         friend.Count == 7;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = friendReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)FriendshipType.Show).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceUserID\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceScreenName\", \"Name\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetUserID\", \"2\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetScreenName\", \"Name\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"-1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"twitter,joemayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123,456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"7\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"SourceUserID\", \"123\" },\n                    { \"SourceScreenName\", \"JoeMayo\" },\n                    { \"TargetUserID\", \"456\" },\n                    { \"TargetScreenName\", \"LinqToTweeter\" }\n                };\n            string expected = \"https://api.twitter.com/1.1/friendships/show.json?source_id=123&source_screen_name=JoeMayo&target_id=456&target_screen_name=LinqToTweeter\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_Without_Source_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"friendReqProcUserID\", \"456\" },\n                    { \"friendReqProcScreenName\", \"LinqToTweeter\" }\n                };\n\n            L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_Without_FriendsReqProcUrl()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Show.ToString() },\n                { \"SourceUserID\", \"123\" },\n                { \"SourceScreenName\", \"JoeMayo\" },\n            };\n\n            L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_No_Retweet_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.NoRetweetIDs.ToString() }\n            };\n            string expected = \"http://api.twitter.com/1.1/friendships/no_retweets/ids.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Missing_Type()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters = null;\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Incoming_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Incoming.ToString() }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/incoming.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_With_Cursor_Param_Constructs_Incoming_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Incoming.ToString() },\n                { \"Cursor\", \"-1\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/incoming.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Outgoing_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Outgoing.ToString() }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/outgoing.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_With_Cursor_Param_Constructs_Outgoing_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Outgoing.ToString() },\n                { \"Cursor\", \"-1\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/outgoing.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Returns_Url_For_ScreenName()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                { \"ScreenName\", \"twitter,joemayo\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/lookup.json?screen_name=twitter%2Cjoemayo\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Returns_Url_For_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                { \"UserID\", \"123,456\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/lookup.json?user_id=123%2C456\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                //{ \"ScreenName\", \"twitter,joemayo\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FriendsList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/list.json?user_id=1&screen_name=abc&count=20&cursor=234&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"234\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildFriendListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                //{ \"UserID\", \"1\" },\n                //{ \"ScreenName\", \"abc\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FollowersList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/list.json?user_id=1&screen_name=abc&count=20&cursor=234&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FollowersList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"234\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildFollowerListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                //{ \"UserID\", \"1\" },\n                //{ \"ScreenName\", \"abc\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FollowerIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FollowerIDs).ToString() },\n                        { \"UserID\", \"123\" },\n                        { \"ScreenName\", \"456\" },\n                        { \"Cursor\", \"1\" },\n                        { \"Count\", \"1\" }\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FriendIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FriendIDs).ToString() },\n                        { \"UserID\", \"123\" },\n                        { \"ScreenName\", \"456\" },\n                        { \"Cursor\", \"1\" },\n                        { \"Count\", \"1\" }\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Defaults_Cursor_When_Not_Specified()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?screen_name=JoeMayo&cursor=-1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FriendIDs).ToString() },\n                        { \"ScreenName\", \"JoeMayo\" },\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        const string LookupResponse = @\"[\n   {\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"connections\"\":[\n         \"\"following\"\"\n      ],\n      \"\"id\"\":15411837\n   }\n]\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false,\n         \"\"muting\"\": true\n      }\n   }\n}\";\n\n        const string IdsResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"ids\"\":[\n      5676142\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":1\n}\";\n\n        const string NoRetweetIDsResponse = @\"[\n15411837,\n241594327\n]\";\n\n        const string FriendsFollowersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":93604443,\n         \"\"id_str\"\":\"\"93604443\"\",\n         \"\"name\"\":\"\"Geert van Horrik\"\",\n         \"\"screen_name\"\":\"\"GeertvanHorrik\"\",\n         \"\"location\"\":\"\"Heeze, The Netherlands\"\",\n         \"\"description\"\":\"\"Software Developer and creator of the Catel MVVM framework (see http:\\/\\/catel.codeplex.com)\"\",\n         \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        27\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":212,\n         \"\"friends_count\"\":97,\n         \"\"listed_count\"\":12,\n         \"\"created_at\"\":\"\"Mon Nov 30 10:32:19 +0000 2009\"\",\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":3600,\n         \"\"time_zone\"\":\"\"Amsterdam\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":4431,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 11:10:16 +0000 2012\"\",\n            \"\"id\"\":280993376646598658,\n            \"\"id_str\"\":\"\"280993376646598658\"\",\n            \"\"text\"\":\"\"@FransBouma Dank, ik zocht op changes maar moest queue hebben, kan ik weer verder :-)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":280993183754768384,\n            \"\"in_reply_to_status_id_str\"\":\"\"280993183754768384\"\",\n            \"\"in_reply_to_user_id\"\":67035608,\n            \"\"in_reply_to_user_id_str\"\":\"\"67035608\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"FransBouma\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"FransBouma\"\",\n                     \"\"name\"\":\"\"Frans Bouma\"\",\n                     \"\"id\"\":67035608,\n                     \"\"id_str\"\":\"\"67035608\"\",\n                     \"\"indices\"\":[\n                        0,\n                        11\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":389487039,\n         \"\"id_str\"\":\"\"389487039\"\",\n         \"\"name\"\":\"\"Elizabeth Hulett\"\",\n         \"\"screen_name\"\":\"\"EHulett\"\",\n         \"\"location\"\":\"\"Defuniak Springs\"\",\n         \"\"description\"\":\"\"\"\",\n         \"\"url\"\":null,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":4,\n         \"\"friends_count\"\":10,\n         \"\"listed_count\"\":0,\n         \"\"created_at\"\":\"\"Wed Oct 12 14:16:54 +0000 2011\"\",\n         \"\"favourites_count\"\":1,\n         \"\"utc_offset\"\":null,\n         \"\"time_zone\"\":null,\n         \"\"geo_enabled\"\":false,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":3,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Mon Dec 17 19:47:23 +0000 2012\"\",\n            \"\"id\"\":280761124901765120,\n            \"\"id_str\"\":\"\"280761124901765120\"\",\n            \"\"text\"\":\"\"Can't believe Amanda is 28weeks today.... Lily Rose will be here soon :)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/#!\\/download\\/ipad\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for iPad\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":608455311,\n         \"\"id_str\"\":\"\"608455311\"\",\n         \"\"name\"\":\"\"\\/\\/ mellodev\"\",\n         \"\"screen_name\"\":\"\"mellodev\"\",\n         \"\"location\"\":\"\"Las Vegas, NV\"\",\n         \"\"description\"\":\"\".Net aficionado and Software craftsman. C#, Asp.Net, TSQL, Quartz.Net, WebForms, MVC + WP7. I build Social Office Suite (@SOS) and tweet about #DevLife\"\",\n         \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        46\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":355,\n         \"\"friends_count\"\":1373,\n         \"\"listed_count\"\":20,\n         \"\"created_at\"\":\"\"Thu Jun 14 18:32:56 +0000 2012\"\",\n         \"\"favourites_count\"\":109,\n         \"\"utc_offset\"\":-28800,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":1272,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 21:05:14 +0000 2012\"\",\n            \"\"id\"\":281143104046768129,\n            \"\"id_str\"\":\"\"281143104046768129\"\",\n            \"\"text\"\":\"\"@adamralph Nice background btw! Can't wait to go riding this year!\"\",\n            \"\"source\"\":\"\"web\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":281141527877652480,\n            \"\"in_reply_to_status_id_str\"\":\"\"281141527877652480\"\",\n            \"\"in_reply_to_user_id\"\":5966642,\n            \"\"in_reply_to_user_id_str\"\":\"\"5966642\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"adamralph\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"adamralph\"\",\n                     \"\"name\"\":\"\"Adam Ralph\"\",\n                     \"\"id\"\":5966642,\n                     \"\"id_str\"\":\"\"5966642\"\",\n                     \"\"indices\"\":[\n                        0,\n                        10\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"191134\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/608455311\\/1348679711\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"previous_cursor\"\":0,\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/GeoTests/CoordinateTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class CoordinateTests\n    {\n        public CoordinateTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Coordinate_Ctor_Parses_JsonData()\n        {\n            var coordJson = JsonMapper.ToObject(CoordinateJson);\n\n            var coord = new Coordinate(coordJson);\n\n            Assert.AreEqual(-122.51368188, coord.Longitude);\n            Assert.AreEqual(37.70813196, coord.Latitude);\n        }\n\n        [TestMethod]\n        public void Coordinate_Ctor_Returns_Null_JsonData()\n        {\n            var coord = new Coordinate(null);\n\n            Assert.AreEqual(0, coord.Longitude);\n            Assert.AreEqual(0, coord.Latitude);\n        }\n\n        const string CoordinateJson = @\"[\n                              -122.51368188,\n                              37.70813196\n                           ]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/GeoTests/GeoRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class GeoRequestProcessorTests\n    {\n        public GeoRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n            Expression<Func<Geo, bool>> expression =\n                geo =>\n                    geo.Type == GeoType.Reverse &&\n                    geo.Accuracy == \"10\" &&\n                    geo.Granularity == \"city\" &&\n                    geo.Latitude == 37.78215 &&\n                    geo.Longitude == -122.40060 &&\n                    geo.MaxResults == 10 &&\n                    geo.ID == \"456\" &&\n                    geo.IP == \"168.143.171.180\" &&\n                    geo.Query == \"place\" &&\n                    geo.ContainedWithin == \"abc\" &&\n                    geo.Attribute == \"street_address=123\" &&\n                    geo.PlaceName == \"placeName\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = geoReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)GeoType.Reverse).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Accuracy\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Granularity\", \"city\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", (37.78215).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", (-122.4006).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxResults\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IP\", \"168.143.171.180\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"place\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ContainedWithin\", \"abc\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Attribute\", \"street_address=123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PlaceName\", \"placeName\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Reverse_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/reverse_geocode.json?lat=37.78215&long=-122.4006&accuracy=city&granularity=10&max_results=10\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrlReverseL_WithoutLatLongIPOrQuery_ExpectException()\n        {\n            const string ExpectedLatLongParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedLatLongParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_ID_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/id/7695dd2ec2f86f2b.json\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n                 {\"ID\", \"7695dd2ec2f86f2b\"},\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ID_Without_ID_Throws()\n        {\n            const string ExpectedIDParamName = \"ID\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedIDParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?lat=37.78215&long=-122.4006&query=Twitter%20HQ&ip=168.143.171.180&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrlForSearch_WithQueryButNotLatLongAndIP_ExpectSuccess()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?query=Twitter%20HQ&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 //{\"Latitude\", (37.78215).ToString()},\n                 //{\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 //{\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Search_With_Attribute_Missing_Equals_Symbol_Throws()\n        {\n            const string ExpectedAttributeParam = \"Attribute\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Attribute\", \"street_address\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedAttributeParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Similar_Places_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/similar_places.json?lat=37.78215&long=-122.4006&name=placeName&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_For_Similar_Places_Requires_Lat_And_Long()\n        {\n            const string ExpectedParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 //{\"Latitude\", \"37.78215\"},\n                 //{\"Longitude\", \"-122.40060\"},\n                 {\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_For_Similar_Places_Requires_PlaceName()\n        {\n            const string ExpectedParamName = \"PlaceName\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 //{\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void GeoRequestProcessor_Processes_Json_Format_Responses()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            Assert.IsInstanceOfType(geoReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_ReverseGeoCode_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            List<Geo> geo = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlacesCount, geo.Single().Places.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_ID_Response()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResultsForID_WithNullGeometry_ExpectSucces()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponseWithNullGeometry);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Search_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            const string ExpectedPlaceFullName = \"SoMa, San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.Search };\n\n            List<Geo> geo = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlacesCount, geo.Single().Places.Count);\n            Assert.AreEqual(ExpectedPlaceFullName, geo.Single().Places.First().FullName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Simlar_Places_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            const string ExpectedPlaceFullName = \"SoMa, San Francisco\";\n            const string ExpectedToken = \"15f3c6f2b94ba19faee70d9d61aaebee\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.SimilarPlaces };\n\n            List<Geo> geoResponse = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.IsNotNull(geoResponse);\n            Assert.IsNotNull(geoResponse.SingleOrDefault());\n            var geo = geoResponse.Single();\n            Assert.AreEqual(ExpectedToken, geo.Token);\n            var places = geo.Places;\n            Assert.IsNotNull(places);\n            Assert.AreEqual(ExpectedPlacesCount, places.Count);\n            Assert.AreEqual(ExpectedPlaceFullName, places.First().FullName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var geo = geoReqProc.ProcessResults(string.Empty);\n\n            Assert.IsNotNull(geo);\n            Assert.IsFalse(geo.Any());\n        }\n\n        const string MultiPlaceResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"token\"\":\"\"15f3c6f2b94ba19faee70d9d61aaebee\"\",\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n\n        const string IDResponse = @\"{\n   \"\"country\"\":\"\"United States\"\",\n   \"\"place_type\"\":\"\"city\"\",\n   \"\"name\"\":\"\"San Francisco\"\",\n   \"\"geometry\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.46628284,\n               37.70813196\n            ],\n            [\n               -122.47088292,\n               37.70823204\n            ],\n            [\n               -122.48518284,\n               37.71123201\n            ],\n            [\n               -122.48948304,\n               37.712232\n            ],\n            [\n               -122.497983,\n               37.71713196\n            ],\n            [\n               -122.49978012,\n               37.71960696\n            ],\n            [\n               -122.50198296,\n               37.723131\n            ],\n            [\n               -122.50787796,\n               37.73529\n            ],\n            [\n               -122.51368188,\n               37.77856803\n            ],\n            [\n               -122.51305692,\n               37.78252398\n            ],\n            [\n               -122.47808292,\n               37.81082799\n            ],\n            [\n               -122.47738308,\n               37.81102797\n            ],\n            [\n               -122.37322716,\n               37.83245301\n            ],\n            [\n               -122.36652288,\n               37.83081303\n            ],\n            [\n               -122.365395,\n               37.82917296\n            ],\n            [\n               -122.36177592,\n               37.82153403\n            ],\n            [\n               -122.35845384,\n               37.81450503\n            ],\n            [\n               -122.377842,\n               37.72782\n            ],\n            [\n               -122.38322616,\n               37.70940303\n            ],\n            [\n               -122.39378208,\n               37.70823096\n            ],\n            [\n               -122.43398184,\n               37.70813196\n            ],\n            [\n               -122.46628284,\n               37.70813196\n            ]\n         ]\n      ]\n   },\n   \"\"bounding_box\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.51368188,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.83245301\n            ],\n            [\n               -122.51368188,\n               37.83245301\n            ]\n         ]\n      ]\n   },\n   \"\"attributes\"\":{\n      \"\"189390:id\"\":\"\"san-francisco-ca\"\",\n      \"\"162772:pop100\"\":\"\"776733\"\",\n      \"\"162772:place_id\"\":\"\"0667000\"\"\n   },\n   \"\"full_name\"\":\"\"San Francisco, CA\"\",\n   \"\"polylines\"\":[\n      \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n   ],\n   \"\"country_code\"\":\"\"US\"\",\n   \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n   \"\"id\"\":\"\"5a110d312052166f\"\",\n   \"\"contained_within\"\":[\n      {\n         \"\"country\"\":\"\"United States\"\",\n         \"\"place_type\"\":\"\"admin\"\",\n         \"\"name\"\":\"\"California\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -124.482003,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     42.009517\n                  ],\n                  [\n                     -124.482003,\n                     42.009517\n                  ]\n               ]\n            ]\n         },\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"California, US\"\",\n         \"\"country_code\"\":\"\"US\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n         \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n      }\n   ]\n}\";\n\n        const string IDResponseWithNullGeometry = @\"{\n\t\"\"id\"\": \"\"5a110d312052166f\"\",\n\t\"\"url\"\": \"\"https:\\/\\/api.twitter.com\\/1.1\\/geo\\/id\\/5a110d312052166f.json\"\",\n\t\"\"place_type\"\": \"\"city\"\",\n\t\"\"name\"\": \"\"San Francisco\"\",\n\t\"\"full_name\"\": \"\"San Francisco, CA\"\",\n\t\"\"country_code\"\": \"\"US\"\",\n\t\"\"country\"\": \"\"United States\"\",\n\t\"\"contained_within\"\": [{\n\t\t\"\"id\"\": \"\"fbd6d2f5a4e4a15e\"\",\n\t\t\"\"url\"\": \"\"https:\\/\\/api.twitter.com\\/1.1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n\t\t\"\"place_type\"\": \"\"admin\"\",\n\t\t\"\"name\"\": \"\"California\"\",\n\t\t\"\"full_name\"\": \"\"California, US\"\",\n\t\t\"\"country_code\"\": \"\"US\"\",\n\t\t\"\"country\"\": \"\"United States\"\",\n\t\t\"\"bounding_box\"\": {\n\t\t\t\"\"type\"\": \"\"Polygon\"\",\n\t\t\t\"\"coordinates\"\": [[[-124.482003,\n\t\t\t32.528832],\n\t\t\t[-124.482003,\n\t\t\t42.009519],\n\t\t\t[-114.131212,\n\t\t\t42.009519],\n\t\t\t[-114.131212,\n\t\t\t32.528832],\n\t\t\t[-124.482003,\n\t\t\t32.528832]]]\n\t\t},\n\t\t\"\"attributes\"\": {\n\t\t\t\n\t\t}\n\t}],\n\t\"\"geometry\"\": null,\n\t\"\"polylines\"\": [],\n\t\"\"bounding_box\"\": {\n\t\t\"\"type\"\": \"\"Polygon\"\",\n\t\t\"\"coordinates\"\": [[[-122.514926,\n\t\t37.708075],\n\t\t[-122.514926,\n\t\t37.833238],\n\t\t[-122.357031,\n\t\t37.833238],\n\t\t[-122.357031,\n\t\t37.708075],\n\t\t[-122.514926,\n\t\t37.708075]]]\n\t},\n\t\"\"attributes\"\": {\n\t\t\"\"162772:pop100\"\": \"\"776733\"\",\n\t\t\"\"162772:place_id\"\": \"\"0667000\"\",\n\t\t\"\"189390:id\"\": \"\"san-francisco-ca\"\"\n\t}\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/GeoTests/GeoTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class GeoTests\n    {\n        public GeoTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Geo_Ctor_Parses_JsonData()\n        {\n            var geoJson = JsonMapper.ToObject(ReverseResponse);\n\n            var geo = new Geo(geoJson);\n\n            Assert.IsNotNull(geo.Places);\n            var places = geo.Places;\n            Assert.AreEqual(4, places.Count);\n            Assert.AreEqual(\"neighborhood\", places.First().PlaceType);\n        }\n\n        [TestMethod]\n        public void Geo_Ctor_Returns_On_Null_JsonData()\n        {\n            var geo = new Geo((JsonData)null);\n\n            Assert.IsNull(geo.Places);\n        }\n\n        const string ReverseResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/GeoTests/GeometryTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class GeometryTests\n    {\n        public GeometryTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Geometry_Ctor_Parses_JsonData()\n        {\n            var geometryJson = JsonMapper.ToObject(GeometryJson);\n\n            var geometry = new Geometry(geometryJson);\n\n            Assert.AreEqual(\"Polygon\", geometry.Type);\n            Assert.IsNotNull(geometry.Coordinates);\n            Assert.AreEqual(4, geometry.Coordinates.Count);\n            Coordinate coord = geometry.Coordinates.First();\n            Assert.AreEqual(-122.51368188, coord.Longitude);\n            Assert.AreEqual(37.70813196, coord.Latitude);\n        }\n\n        [TestMethod]\n        public void Geometry_Ctor_Returns_On_Null_JsonData()\n        {\n            var geometry = new Geometry(null);\n\n            Assert.AreEqual(null, geometry.Type);\n        }\n\n        const string GeometryJson = @\"{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  }\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/GeoTests/PlaceTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class PlaceTests\n    {\n        public PlaceTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Place_Ctor_Parses_JsonData()\n        {\n            const string ExpectedPolyLine = \"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\";\n            var placeJson = JsonMapper.ToObject(PlaceJson);\n\n            var place = new Place(placeJson);\n\n            Assert.IsNotNull(place.ContainedWithin);\n            Assert.AreEqual(\"United States\", place.ContainedWithin.Country);\n\n            Assert.AreEqual(\"neighborhood\", place.PlaceType);\n            Assert.AreEqual(\"United States\", place.Country);\n            Assert.AreEqual(\"SoMa\", place.Name);\n            Assert.AreEqual(\"SoMa, San Francisco\", place.FullName);\n\n            Assert.IsNotNull(place.Attributes);\n            var attrDict = place.Attributes;\n            Assert.AreEqual(3, attrDict.Count);\n            Assert.AreEqual(attrDict[\"street_address\"], \"795 Folsom St\");\n            Assert.AreEqual(attrDict[\"623:id\"], \"210176\");\n            Assert.AreEqual(attrDict[\"twitter\"], \"JoeMayo\");\n\n            Assert.IsNotNull(place.BoundingBox);\n            Assert.AreEqual(\"Polygon\", place.BoundingBox.Type);\n\n            Assert.AreEqual(\"US\", place.CountryCode);\n            Assert.AreEqual(\"http://api.twitter.com/1/geo/id/2b6ff8c22edd9576.json\", place.Url);\n            Assert.AreEqual(\"2b6ff8c22edd9576\", place.ID);\n\n            Assert.IsNotNull(place.PolyLines);\n            Assert.IsNotNull(place.PolyLines.SingleOrDefault());\n            Assert.AreEqual(ExpectedPolyLine, place.PolyLines.First());\n        }\n\n        [TestMethod]\n        public void Place_Ctor_Returns_On_Null_JsonData()\n        {\n            var place = new Place(null);\n\n            Assert.IsNull(place.Country);\n        }\n\n        const string PlaceJson = @\"{\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"polylines\"\":[\n               \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n            ],\n            \"\"attributes\"\":{\n               \"\"street_address\"\": \"\"795 Folsom St\"\",\n                \"\"623:id\"\": \"\"210176\"\",\n                \"\"twitter\"\": \"\"JoeMayo\"\"\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/HelpTests/HelpRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.HelpTests\n{\n    [TestClass]\n    public class HelpRequestProcessorTests\n    {\n        public HelpRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n            Expression<Func<Help, bool>> expression =\n                help =>\n                    help.Type == HelpType.RateLimits &&\n                    help.Resources == \"search\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = helpReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)HelpType.RateLimits).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Resources\", \"search\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_Configuration_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/configuration.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Configuration).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_Languages_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/languages.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Languages).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search,users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Removes_Parameter_Spaces_In_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search, users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_No_Type()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"Type\", ((int) HelpType.Languages).ToString()}\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => helpReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void HelpRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n\n            Assert.IsInstanceOfType(helpReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Configuration_Results()\n        {\n            const int ExpectedCharsRsvpPerMedia = 21;\n            const int ExpectedPhotoSizesCount = 4;\n            const string ExpectedPhotoSizeType = \"thumb\";\n            const int ExpectedPhotoSizeHeight = 150;\n            const int ExpectedPhotoSizeWidth = 150;\n            const string ExpectedPhotoSizeResize = \"crop\";\n            const int ExpectedShortUrlLength = 20;\n            const int ExpectedPhotoSizeLimit = 3145728;\n            const int ExpectedNonUsernamePathsCount = 82;\n            const string ExpectedNonUsernamePathsFirstItem = \"about\";\n            const int ExpectedMaxMediaPerUpload = 1;\n            const int ExpectedShortUrlLengthHttps = 21;\n            var helpReqProc = new HelpRequestProcessor<Help> \n            {\n                Type = HelpType.Configuration,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpConfigurationResponse);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.Configuration, help.Type);\n            Assert.IsNotNull(help.Configuration);\n            Configuration config = help.Configuration;\n            Assert.AreEqual(ExpectedCharsRsvpPerMedia, config.CharactersReservedPerMedia);\n            List<PhotoSize> photoSizes = config.PhotoSizes;\n            Assert.IsNotNull(photoSizes);\n            Assert.AreEqual(ExpectedPhotoSizesCount, photoSizes.Count);\n            PhotoSize photoSize = photoSizes.First();\n            Assert.AreEqual(ExpectedPhotoSizeType, photoSize.Type);\n            Assert.AreEqual(ExpectedPhotoSizeHeight, photoSize.Height);\n            Assert.AreEqual(ExpectedPhotoSizeWidth, photoSize.Width);\n            Assert.AreEqual(ExpectedPhotoSizeResize, photoSize.Resize);\n            Assert.AreEqual(ExpectedShortUrlLength, config.ShortUrlLength);\n            Assert.AreEqual(ExpectedPhotoSizeLimit, config.PhotoSizeLimit);\n            List<string> nonUsernamePaths = config.NonUserNamePaths;\n            Assert.IsNotNull(nonUsernamePaths);\n            Assert.AreEqual(ExpectedNonUsernamePathsCount, nonUsernamePaths.Count);\n            Assert.AreEqual(ExpectedNonUsernamePathsFirstItem, nonUsernamePaths.First());\n            Assert.AreEqual(ExpectedMaxMediaPerUpload, config.MaxMediaPerUpload);\n            Assert.AreEqual(ExpectedShortUrlLengthHttps, config.ShortUrlLengthHttps);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Languages_Results()\n        {\n            const int ExpectedLanguagesCount = 28;\n            const string ExpectedLanguageName = \"Hungarian\";\n            const string ExpectedLanguageStatus = \"production\";\n            const string ExpectedLanguageCode = \"hu\";\n            var helpReqProc = new HelpRequestProcessor<Help> \n            {\n                Type = HelpType.Languages,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpLanguagesXml);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.Languages, help.Type);\n            List<Language> languages = help.Languages;\n            Assert.IsNotNull(languages);\n            Assert.AreEqual(ExpectedLanguagesCount, languages.Count);\n            Language language = languages.First();\n            Assert.AreEqual(ExpectedLanguageName, language.Name);\n            Assert.AreEqual(ExpectedLanguageStatus, language.Status);\n            Assert.AreEqual(ExpectedLanguageCode, language.Code);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_RateLimits_Results()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>\n            {\n                Type = HelpType.RateLimits,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(RateLimitsResponse);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.RateLimits, help.Type);\n            Assert.AreEqual(\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\", help.RateLimitAccountContext);\n            Assert.IsNotNull(help.RateLimits);\n            Assert.IsTrue(help.RateLimits.Any());\n            Dictionary<string, List<RateLimits>> rateLimits = help.RateLimits;\n            Assert.IsTrue(rateLimits.ContainsKey(\"lists\"));\n            List<RateLimits> limitsList = rateLimits[\"lists\"];\n            Assert.IsNotNull(limitsList);\n            Assert.IsTrue(limitsList.Any());\n            RateLimits limits = limitsList.First();\n            Assert.IsNotNull(limits);\n            Assert.AreEqual(\"/lists/subscriptions\", limits.Resource);\n            Assert.AreEqual(15, limits.Limit);\n            Assert.AreEqual(15, limits.Remaining);\n            Assert.AreEqual(1348087186ul, limits.Reset);\n        }\n\n        const string HelpConfigurationResponse = @\"{\n   \"\"characters_reserved_per_media\"\":21,\n   \"\"photo_sizes\"\":{\n      \"\"thumb\"\":{\n         \"\"h\"\":150,\n         \"\"w\"\":150,\n         \"\"resize\"\":\"\"crop\"\"\n      },\n      \"\"small\"\":{\n         \"\"h\"\":480,\n         \"\"w\"\":340,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"large\"\":{\n         \"\"h\"\":2048,\n         \"\"w\"\":1024,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"medium\"\":{\n         \"\"h\"\":1200,\n         \"\"w\"\":600,\n         \"\"resize\"\":\"\"fit\"\"\n      }\n   },\n   \"\"short_url_length\"\":20,\n   \"\"photo_size_limit\"\":3145728,\n   \"\"non_username_paths\"\":[\n      \"\"about\"\",\n      \"\"account\"\",\n      \"\"accounts\"\",\n      \"\"activity\"\",\n      \"\"all\"\",\n      \"\"announcements\"\",\n      \"\"anywhere\"\",\n      \"\"api_rules\"\",\n      \"\"api_terms\"\",\n      \"\"apirules\"\",\n      \"\"apps\"\",\n      \"\"auth\"\",\n      \"\"badges\"\",\n      \"\"blog\"\",\n      \"\"business\"\",\n      \"\"buttons\"\",\n      \"\"contacts\"\",\n      \"\"devices\"\",\n      \"\"direct_messages\"\",\n      \"\"download\"\",\n      \"\"downloads\"\",\n      \"\"edit_announcements\"\",\n      \"\"faq\"\",\n      \"\"favorites\"\",\n      \"\"find_sources\"\",\n      \"\"find_users\"\",\n      \"\"followers\"\",\n      \"\"following\"\",\n      \"\"friend_request\"\",\n      \"\"friendrequest\"\",\n      \"\"friends\"\",\n      \"\"goodies\"\",\n      \"\"help\"\",\n      \"\"home\"\",\n      \"\"im_account\"\",\n      \"\"inbox\"\",\n      \"\"invitations\"\",\n      \"\"invite\"\",\n      \"\"jobs\"\",\n      \"\"list\"\",\n      \"\"login\"\",\n      \"\"logout\"\",\n      \"\"me\"\",\n      \"\"mentions\"\",\n      \"\"messages\"\",\n      \"\"mockview\"\",\n      \"\"newtwitter\"\",\n      \"\"notifications\"\",\n      \"\"nudge\"\",\n      \"\"oauth\"\",\n      \"\"phoenix_search\"\",\n      \"\"positions\"\",\n      \"\"privacy\"\",\n      \"\"public_timeline\"\",\n      \"\"related_tweets\"\",\n      \"\"replies\"\",\n      \"\"retweeted_of_mine\"\",\n      \"\"retweets\"\",\n      \"\"retweets_by_others\"\",\n      \"\"rules\"\",\n      \"\"saved_searches\"\",\n      \"\"search\"\",\n      \"\"sent\"\",\n      \"\"settings\"\",\n      \"\"share\"\",\n      \"\"signup\"\",\n      \"\"signin\"\",\n      \"\"similar_to\"\",\n      \"\"statistics\"\",\n      \"\"terms\"\",\n      \"\"tos\"\",\n      \"\"translate\"\",\n      \"\"trends\"\",\n      \"\"tweetbutton\"\",\n      \"\"twttr\"\",\n      \"\"update_discoverability\"\",\n      \"\"users\"\",\n      \"\"welcome\"\",\n      \"\"who_to_follow\"\",\n      \"\"widgets\"\",\n      \"\"zendesk_auth\"\",\n      \"\"media_signup\"\"\n   ],\n   \"\"max_media_per_upload\"\":1,\n   \"\"short_url_length_https\"\":21\n}\";\n\n        const string HelpLanguagesXml = @\"[\n   {\n      \"\"name\"\":\"\"Hungarian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hu\"\"\n   },\n   {\n      \"\"name\"\":\"\"Finnish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fi\"\"\n   },\n   {\n      \"\"name\"\":\"\"Swedish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"sv\"\"\n   },\n   {\n      \"\"name\"\":\"\"Norwegian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"no\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hebrew\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"he\"\"\n   },\n   {\n      \"\"name\"\":\"\"Korean\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ko\"\"\n   },\n   {\n      \"\"name\"\":\"\"Portuguese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pt\"\"\n   },\n   {\n      \"\"name\"\":\"\"French\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fr\"\"\n   },\n   {\n      \"\"name\"\":\"\"German\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"de\"\"\n   },\n   {\n      \"\"name\"\":\"\"Arabic\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ar\"\"\n   },\n   {\n      \"\"name\"\":\"\"Russian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ru\"\"\n   },\n   {\n      \"\"name\"\":\"\"Dutch\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"nl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Indonesian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"id\"\"\n   },\n   {\n      \"\"name\"\":\"\"Traditional Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-tw\"\"\n   },\n   {\n      \"\"name\"\":\"\"Italian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"it\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hindi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hi\"\"\n   },\n   {\n      \"\"name\"\":\"\"English\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"en\"\"\n   },\n   {\n      \"\"name\"\":\"\"Filipino\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fil\"\"\n   },\n   {\n      \"\"name\"\":\"\"Japanese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ja\"\"\n   },\n   {\n      \"\"name\"\":\"\"Thai\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"th\"\"\n   },\n   {\n      \"\"name\"\":\"\"Urdu\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ur\"\"\n   },\n   {\n      \"\"name\"\":\"\"Polish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Simplified Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-cn\"\"\n   },\n   {\n      \"\"name\"\":\"\"Turkish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"tr\"\"\n   },\n   {\n      \"\"name\"\":\"\"Farsi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Danish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"da\"\"\n   },\n   {\n      \"\"name\"\":\"\"Malay\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"msa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Spanish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"es\"\"\n   }\n]\";\n\n        const string RateLimitsResponse = @\"{\n   \"\"rate_limit_context\"\":{\n      \"\"access_token\"\":\"\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\"\"\n   },\n   \"\"resources\"\":{\n      \"\"lists\"\":{\n         \"\"/lists/subscriptions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/memberships\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/statuses\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friendships\"\":{\n         \"\"/friendships/incoming\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/lookup\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/outgoing\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"blocks\"\":{\n         \"\"/blocks/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/blocks/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"geo\"\":{\n         \"\"/geo/id/:place_id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/reverse_geocode\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/search\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/similar_places\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"users\"\":{\n         \"\"/users/suggestions/:slug/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/search\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/show\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributees\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributors\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/lookup\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions/:slug\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"followers\"\":{\n         \"\"/followers/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"statuses\"\":{\n         \"\"/statuses/home_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/mentions_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/show/:id\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/retweets/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/user_timeline\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/oembed\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"help\"\":{\n         \"\"/help/privacy\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/tos\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/configuration\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/languages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friends\"\":{\n         \"\"/friends/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"direct_messages\"\":{\n         \"\"/direct_messages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/sent\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"account\"\":{\n         \"\"/account/verify_credentials\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/account/settings\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"favorites\"\":{\n         \"\"/favorites/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"saved_searches\"\":{\n         \"\"/saved_searches/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/saved_searches/show/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"search\"\":{\n         \"\"/search/tweets\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"trends\"\":{\n         \"\"/trends/available\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/closest\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/place\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/LinqToTwitterPcl.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitterPcl.Tests</RootNamespace>\n    <AssemblyName>LinqToTwitterPcl.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <NuGetPackageImportStamp>287ddb8f</NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"AccountTests\\AccountCommandsTests.cs\" />\n    <Compile Include=\"AccountTests\\AccountRequestProcessorTests.cs\" />\n    <Compile Include=\"BlocksTests\\BlocksCommandsTests.cs\" />\n    <Compile Include=\"BlocksTests\\BlocksRequestProcessorTests.cs\" />\n    <Compile Include=\"Common\\L2TAssert.cs\" />\n    <Compile Include=\"Common\\DebuggerWriter.cs\" />\n    <Compile Include=\"Common\\OAuthTwitterMock.cs\" />\n    <Compile Include=\"Common\\TestCulture.cs\" />\n    <Compile Include=\"Common\\TwitterExtensionsTests.cs\" />\n    <Compile Include=\"Common\\EntitiesTests.cs\" />\n    <Compile Include=\"DirectMessageTests\\DirectMessageCommandsTests.cs\" />\n    <Compile Include=\"DirectMessageTests\\DirectMessageRequestProcessorTests.cs\" />\n    <Compile Include=\"DirectMessageTests\\DirectMessageTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesCtorTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesCommandsTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesRequestProcessorTests.cs\" />\n    <Compile Include=\"FriendshipTests\\FriendshipCommandsTests.cs\" />\n    <Compile Include=\"FriendshipTests\\FriendshipRequestProcessorTests.cs\" />\n    <Compile Include=\"GeoTests\\CoordinateTests.cs\" />\n    <Compile Include=\"GeoTests\\GeometryTests.cs\" />\n    <Compile Include=\"GeoTests\\GeoRequestProcessorTests.cs\" />\n    <Compile Include=\"GeoTests\\GeoTests.cs\" />\n    <Compile Include=\"GeoTests\\PlaceTests.cs\" />\n    <Compile Include=\"HelpTests\\HelpRequestProcessorTests.cs\" />\n    <Compile Include=\"LinqToTwitterTests\\TwitterErrorHandlerTests.cs\" />\n    <Compile Include=\"ListTests\\ListCommandsTests.cs\" />\n    <Compile Include=\"ListTests\\ListRequestProcessorTests.cs\" />\n    <Compile Include=\"MuteTests\\MuteRequestProcessorTests.cs\" />\n    <Compile Include=\"MuteTests\\MuteCommandsTests.cs\" />\n    <Compile Include=\"RawTests\\RawCommandsTests.cs\" />\n    <Compile Include=\"RawTests\\RawRequestProcessorTests.cs\" />\n    <Compile Include=\"UserTests\\UserCommandsTests.cs\" />\n    <Compile Include=\"SavedSearchTests\\SavedSearchCommandsTests.cs\" />\n    <Compile Include=\"SavedSearchTests\\SavedSearchRequestProcessorTests.cs\" />\n    <Compile Include=\"SearchTests\\SearchRequestProcessorTests.cs\" />\n    <Compile Include=\"SecurityTests\\OAuthTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SecurityTests\\Sha1Tests.cs\" />\n    <Compile Include=\"SecurityTests\\HmacTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusCommandsReplyWithMediaAndLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusCommandsReplyWithMediaNoLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusCommandsTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusCommandsTweetsWithMediaAndLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusCommandsTweetWithMediaNoLocationTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusRequestProcessorTests.cs\" />\n    <Compile Include=\"TrendsTests\\TrendRequestProcessorTests.cs\" />\n    <Compile Include=\"UserTests\\UserRequestProcessorTests.cs\" />\n    <Compile Include=\"Vine\\VineRequestProcessorTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"LinqToTwitter.snk\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Libraries\\LinqToTwitterPcl\\LinqToTwitterPcl.csproj\">\n      <Project>{caaff164-a681-4183-bb83-a07b668f7ffc}</Project>\n      <Name>LinqToTwitterPcl</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n    <Reference Include=\"Moq, Version=4.2.1409.1722, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Moq.4.2.1409.1722\\lib\\net40\\Moq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\net45\\System.Net.Http.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/LinqToTwitterTests/TwitterErrorHandlerTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.LinqToTwitterTests\n{\n    [TestClass]\n    public class TwitterErrorHandlerTests\n    {\n        [TestMethod]\n        public void ParseTwitterErrorMessage_Handles_String_Types()\n        {\n            string stringError = \"{\\\"errors\\\":\\\"sharing is not permissible for this status (Share validations failed)\\\"}\";\n\n            TwitterErrorHandler.TwitterErrorDetails details = \n                TwitterErrorHandler.ParseTwitterErrorMessage(stringError);\n\n            Assert.IsNotNull(details);\n            Assert.AreEqual(\n                \"sharing is not permissible for this status (Share validations failed)\",\n                details.Message);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/ListTests/ListCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.ListTests\n{\n    [TestClass]\n    public class ListCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public ListCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(TestStatusQueryResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => \n                exec.PostToTwitterAsync<List>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void ListRequestProcessor_Handles_Actions()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            Assert.IsInstanceOfType(listReqProc, typeof(IRequestProcessorWithAction<List>));\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_Requires_ListName()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateListAsync(null, \"public\", \"desc\"));\n\n            Assert.AreEqual(\"listName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"name\", \"test\" },\n                { \"mode\", \"public\" },\n                { \"description\", \"desc\" }\n            };\n\n            await ctx.CreateListAsync(\"test\", \"public\", \"desc\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.CreateListAsync(\"test\", \"public\", \"desc\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateListAsync(0, null, null, 0, null, null, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateListAsync(123, \"test\", null, 0, null, null, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n                { \"mode\", \"public\" },\n                { \"description\", \"desc\" },\n                { \"name\", \"Test List\" }\n            };\n\n            await ctx.UpdateListAsync(123, \"test\", \"Test List\", 456, \"JoeMayo\", \"public\", \"desc\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/update.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.UpdateListAsync(123, \"test\", \"Test List\", 456, \"JoeMayo\", \"public\", \"desc\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteListAsync(0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteListAsync(123, \"test\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Works_With_Slug_And_OwnerID()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteListAsync(0, \"test\", 456, null);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Works_With_ListID_Only()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteListAsync(123, null, 0, null);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.DeleteListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/destroy.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Requires_UserID_Or_ScreenName()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(null, 0, null, 0, null));\n\n            Assert.AreEqual(\"UserIdOrScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(\"JoeMayo\", 0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(\"JoeMayo\", 0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.AddMemberToListAsync(\"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/members/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.AddMemberToListAsync(\"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, null, 0, null, new List<string> { \"SomeName\" }));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 0, null, new List<string> { \"SomeOne\" }));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ScreenNames()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, (List<string>)null));\n\n            Assert.AreEqual(\"screenNames\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ScreenNames_With_Values()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, new List<string>()));\n\n            Assert.AreEqual(\"screenNames\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ScreenNames_Count_LessThanOrEqualTo_100()\n        {\n            InitializeTwitterContext();\n            var screenNames = Enumerable.Range(1, 101).Select(item => item.ToString(CultureInfo.InvariantCulture)).ToList();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, screenNames));\n\n            Assert.AreEqual(\"screenNames\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"screen_name\", \"JoeMayo,Linq2Tweeter,SomeOneElse\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n            };\n            var screenNames = new List<string> { \"JoeMayo\", \"Linq2Tweeter\", \"SomeOneElse\" };\n\n            await ctx.AddMemberRangeToListAsync(123, \"test\", 456, \"JoeMayo\", screenNames);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/members/create_all.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n            var screenNames = new List<string> { \"JoeMayo\", \"Linq2Tweeter\", \"SomeOneElse\" };\n\n            await ctx.AddMemberRangeToListAsync(123, \"test\", 456, \"JoeMayo\", screenNames);\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Requires_UserIDs()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, (List<ulong>)null));\n\n            Assert.AreEqual(\"userIDs\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Requires_UserIDs_With_Values()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, new List<ulong>()));\n\n            Assert.AreEqual(\"userIDs\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Requires_UserIDs_Count_LessThanOrEqualTo_100()\n        {\n            InitializeTwitterContext();\n            var userIDs = Enumerable.Range(1, 101).Select(item => (ulong)item).ToList();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, userIDs));\n\n            Assert.AreEqual(\"userIDs\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"123,234,345\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n            };\n            var userIDs = new List<ulong> { 123ul, 234ul, 345ul };\n\n            await ctx.AddMemberRangeToListAsync(123, \"test\", 456, \"JoeMayo\", userIDs);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/members/create_all.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Requires_UserID_Or_ScreenName()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(0, null, 0, null, 0, null));\n\n            Assert.AreEqual(\"UserIdOrScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(0, \"JoeMayo\", 0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(0, \"JoeMayo\", 0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"789\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.DeleteMemberFromListAsync(789, \"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/members/destroy.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteMemberFromListAsync(789, \"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.SubscribeToListAsync(0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.SubscribeToListAsync(0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.SubscribeToListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/subscribers/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.SubscribeToListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnsubscribeFromListAsync(0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnsubscribeFromListAsync(0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.UnsubscribeFromListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/subscribers/destroy.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.UnsubscribeFromListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 456 };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"456\" },\n                { \"owner_id\", \"789\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.DeleteMemberRangeFromListAsync(123, \"test\", userIDs, 789, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<List>(\n                    \"https://api.twitter.com/1.1/lists/members/destroy_all.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 456 };\n\n            await ctx.DeleteMemberRangeFromListAsync(123, \"test\", userIDs, 789, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_Requires_Either_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberRangeFromListAsync(0, null, userIDs, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Using_Slug()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberRangeFromListAsync(0, \"slug\", userIDs, 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberRangeFromListAsync_Accepts_Missing_OwnerID_And_OwnerScreenName_If_Using_ListID()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            await ctx.DeleteMemberRangeFromListAsync(1, \"slug\", userIDs, 0, null);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberRangeFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            await ctx.DeleteMemberRangeFromListAsync(1, \"slug\", userIDs, 0, null);\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        const string TestStatusQueryResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/ListTests/ListRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.ListTests\n{\n    [TestClass]\n    public class ListRequestProcessorTests\n    {\n        public ListRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_All_Available_Parameters()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n            Expression<Func<List, bool>> expression =\n                list =>\n                    list.Type == ListType.Members &&\n                    list.UserID == 456ul &&\n                    list.ScreenName == \"JoeMayo\" &&\n                    list.ListID == 456ul &&\n                    list.Slug == \"test\" &&\n                    list.OwnerID == 789ul &&\n                    list.OwnerScreenName == \"JoeMayo\" &&\n                    list.Cursor == 123 &&\n                    list.MaxID == 789 &&\n                    list.Page == 1 &&\n                    list.Count == 10 &&\n                    list.SinceID == 123 &&\n                    list.FilterToOwnedLists == true &&\n                    list.TrimUser == true &&\n                    list.IncludeEntities == true &&\n                    list.IncludeRetweets == true &&\n                    list.SkipStatus == true &&\n                    list.Reverse == true;\n\n            var queryParams = listReqProc.GetParameters(expression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)ListType.Members).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ListID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Slug\", \"test\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OwnerID\", \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OwnerScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"FilterToOwnedLists\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Reverse\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Works_With_Json_Format_Data()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            Assert.IsInstanceOfType(listReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_Lists_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/list.json?screen_name=JoeMayo\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ListType.List).ToString() },\n                    { \"ScreenName\", \"JoeMayo\" }\n                };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            const string ExpectedParam = \"Type\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"ScreenName\", \"JoeMayo\" }\n                };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ListType.List).ToString() },\n                };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Param_List()\n        {\n            const string ExpectedParamName = \"Type\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildListUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.List).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildListsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/list.json?user_id=123&screen_name=JoeMayo&cursor=456&reverse=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.List).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"Reverse\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembershipsUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Memberships).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembershipsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/memberships.json?user_id=123&screen_name=JoeMayo&cursor=456&filter_to_owned_lists=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Memberships).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"FilterToOwnedLists\", \"true\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembershipsUrl_Does_Not_Add_False_Filter_To_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/memberships.json?user_id=123&screen_name=JoeMayo&cursor=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Memberships).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"FilterToOwnedLists\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildSubscriptionsUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Subscriptions).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildSubscriptionsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscriptions.json?user_id=123&screen_name=JoeMayo&count=10&cursor=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscriptions).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Count\", \"10\" },\n                { \"Cursor\", \"456\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpecteParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpecteParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                { \"ListID\", null },\n                { \"Slug\", \"\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/show.json?slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/statuses.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&since_id=789&max_id=234&count=25&per_page=25&page=3&trim_user=true&include_entities=true&include_rts=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" },\n                { \"SinceID\", \"789\" },\n                { \"MaxID\", \"234\" },\n                { \"Count\", \"25\" },\n                { \"Page\", \"3\" },\n                { \"TrimUser\", \"true\" },\n                { \"IncludeEntities\", \"true\" },\n                { \"IncludeRetweets\", \"true\" },\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/statuses.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&since_id=789&max_id=234&count=25&per_page=25&page=3&trim_user=false&include_entities=false&include_rts=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" },\n                { \"SinceID\", \"789\" },\n                { \"MaxID\", \"234\" },\n                { \"Count\", \"25\" },\n                { \"Page\", \"3\" },\n                { \"TrimUser\", \"false\" },\n                { \"IncludeEntities\", \"false\" },\n                { \"IncludeRetweets\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"Slug\", \"test\" },\n                {\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_SubscribersUrl()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscribedUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscriberUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscriberUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString()},\n                { \"Slug\", \"test\" },\n                {\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_IsSubscribedUrl()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscriberUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Ownerships_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/ownerships.json?user_id=789&screen_name=JoeMayo&count=10&cursor=1\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Ownerships).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Count\", \"10\" },\n                { \"Cursor\", \"1\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        void TestMultipleListsResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(MultipleListsResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.AreEqual(4, lists.Count());\n            var list = lists.First();\n            Assert.AreEqual(\"test\", list.Name);\n            Assert.AreEqual(\"@Linq2Tweeter/test\", list.FullName);\n            Assert.AreEqual(1, list.MemberCount);\n            Assert.AreEqual(\"This is a test2\", list.Description);\n            Assert.AreEqual(\"public\", list.Mode);\n            Assert.AreEqual(\"/Linq2Tweeter/test\", list.Uri);\n            var users = list.Users;\n            Assert.IsNotNull(users);\n            Assert.IsNotNull(users.SingleOrDefault());\n            Assert.AreEqual(\"LINQ to Tweeter\", users.First().Name);\n            Assert.AreEqual(44758373ul, list.ListIDResponse);\n            Assert.AreEqual(0, list.SubscriberCount);\n            Assert.AreEqual(new DateTime(2011, 5, 8, 2, 0, 33), list.CreatedAt);\n            Assert.AreEqual(false, list.Following);\n            Assert.AreEqual(\"test\", list.SlugResponse);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Lists_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.List };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Subscriptions_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Subscriptions };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Memberships_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Memberships };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Show_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Show };\n\n            var listsResponse = listProc.ProcessResults(SingleListResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var list = lists.Single();\n            Assert.AreEqual(\"DotNetTwittterDevs\", list.Name);\n            var users = list.Users;\n            Assert.IsNotNull(users);\n            Assert.IsNotNull(users.SingleOrDefault());\n            Assert.AreEqual(\"Joe Mayo\", users.Single().Name);\n        }\n  \n        void TestMultipleUsersResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(MultipleUsersResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var list = lists.Single();\n            var statuses = list.Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.IsFalse(statuses.Any());\n            var users = list.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            Assert.AreEqual(\"LINQ to Tweeter Test\", users.First().Name);\n            var cursor = list.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(1352721896474871923, cursor.Next);\n            Assert.AreEqual(7, cursor.Previous);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Subscribers_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Subscribers };\n\n            TestMultipleUsersResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Members_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Members };\n\n            TestMultipleUsersResponse(listProc);\n        }\n  \n        void TestSingleUserResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(SingleUserResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var users = lists.Single().Users;\n            Assert.IsNotNull(users);\n            Assert.IsNotNull(users.SingleOrDefault());\n            Assert.AreEqual(\"LINQ to Tweeter Test\", users.Single().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IsMember_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.IsMember };\n\n            TestSingleUserResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IsSubscribed_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.IsSubscriber };\n\n            TestSingleUserResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Statuses_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Statuses };\n\n            var listsResponse = listProc.ProcessResults(ListStatusesResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var statuses = lists.Single().Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(4, statuses.Count);\n            Assert.IsTrue(statuses.First().Text.StartsWith(\"so using this approach\"));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            var results = listReqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, results.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var listProc = new ListRequestProcessor<List> \n            { \n                Type = ListType.Show,\n                UserID = 123ul,\n                ScreenName = \"JoeMayo\",\n                Cursor = 456L,\n                ListID = 789ul,\n                Slug = \"MyList\",\n                OwnerID = 123ul,\n                OwnerScreenName = \"JoeMayo\",\n                MaxID = 150,\n                Count = 50,\n                Page = 1,\n                SinceID = 25,\n                TrimUser = true,\n                IncludeEntities = true,\n                IncludeRetweets = true,\n                FilterToOwnedLists = true,\n                SkipStatus = true,\n                Reverse = true\n            };\n\n            var listsResponse = listProc.ProcessResults(SingleListResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists);\n            var list = lists.Single();\n            Assert.AreEqual(ListType.Show, list.Type);\n            Assert.AreEqual(123ul, list.UserID);\n            Assert.AreEqual(\"JoeMayo\", list.ScreenName);\n            Assert.AreEqual(456L, list.Cursor);\n            Assert.AreEqual(789ul, list.ListID);\n            Assert.AreEqual(\"MyList\", list.Slug);\n            Assert.AreEqual(123ul, list.OwnerID);\n            Assert.AreEqual(\"JoeMayo\", list.OwnerScreenName);\n            Assert.AreEqual(150ul, list.MaxID);\n            Assert.AreEqual(50, list.Count);\n            Assert.AreEqual(1, list.Page);\n            Assert.AreEqual(25ul, list.SinceID);\n            Assert.IsTrue(list.TrimUser);\n            Assert.IsTrue(list.IncludeEntities);\n            Assert.IsTrue(list.IncludeRetweets);\n            Assert.IsTrue(list.FilterToOwnedLists);\n            Assert.IsTrue(list.SkipStatus);\n            Assert.IsTrue(list.Reverse);\n        }\n\n        const string SingleListResponse = @\"{\n   \"\"name\"\":\"\"DotNetTwittterDevs\"\",\n   \"\"full_name\"\":\"\"@JoeMayo\\/dotnettwittterdevs\"\",\n   \"\"member_count\"\":269,\n   \"\"description\"\":\"\".NET Developers who use the Twitter API\"\",\n   \"\"mode\"\":\"\"public\"\",\n   \"\"uri\"\":\"\"\\/JoeMayo\\/dotnettwittterdevs\"\",\n   \"\"user\"\":{\n      \"\"id\"\":15411837,\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n      \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n      \"\"followers_count\"\":1099,\n      \"\"default_profile\"\":false,\n      \"\"profile_background_color\"\":\"\"0099B9\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"location\"\":\"\"Denver, CO\"\",\n      \"\"profile_link_color\"\":\"\"0099B9\"\",\n      \"\"listed_count\"\":111,\n      \"\"verified\"\":false,\n      \"\"protected\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"is_translator\"\":false,\n      \"\"following\"\":false,\n      \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n      \"\"profile_text_color\"\":\"\"3C3940\"\",\n      \"\"statuses_count\"\":1905,\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"friends_count\"\":210,\n      \"\"default_profile_image\"\":false,\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"geo_enabled\"\":true,\n      \"\"favourites_count\"\":41,\n      \"\"profile_background_tile\"\":false,\n      \"\"notifications\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n      \"\"follow_request_sent\"\":false\n   },\n   \"\"id_str\"\":\"\"4557337\"\",\n   \"\"subscriber_count\"\":34,\n   \"\"created_at\"\":\"\"Sat Dec 12 22:55:43 +0000 2009\"\",\n   \"\"following\"\":false,\n   \"\"slug\"\":\"\"dotnettwittterdevs\"\",\n   \"\"id\"\":4557337\n}\";\n\n        const string MultipleListsResponse = @\"[\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/test\"\",\n      \"\"name\"\":\"\"test\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/test\"\",\n      \"\"description\"\":\"\"This is a test2\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"44758373\"\",\n      \"\"member_count\"\":1,\n      \"\"created_at\"\":\"\"Sun May 08 02:00:33 +0000 2011\"\",\n      \"\"id\"\":44758373,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"test\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/privatelist-4\"\",\n      \"\"name\"\":\"\"Privatelist\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/privatelist-4\"\",\n      \"\"description\"\":\"\"This is a private list for testing.\"\",\n      \"\"mode\"\":\"\"private\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897042\"\",\n      \"\"member_count\"\":0,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:42:12 +0000 2009\"\",\n      \"\"id\"\":3897042,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"privatelist-4\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/mvc-4\"\",\n      \"\"name\"\":\"\"MVC\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/mvc-4\"\",\n      \"\"description\"\":\"\"Developers Interested in ASP.NET MVC\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897016\"\",\n      \"\"member_count\"\":0,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:41:12 +0000 2009\"\",\n      \"\"id\"\":3897016,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"mvc-4\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/linq\"\",\n      \"\"name\"\":\"\"LINQ\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/linq\"\",\n      \"\"description\"\":\"\"People who specialize in LINQ\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897006\"\",\n      \"\"member_count\"\":3,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:40:48 +0000 2009\"\",\n      \"\"id\"\":3897006,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"linq\"\"\n   }\n]\";\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":16761255,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"followers_count\"\":22,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"listed_count\"\":3,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":false,\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"statuses_count\"\":100,\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":1,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"favourites_count\"\":2,\n   \"\"status\"\":{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"annotations\"\":null,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":176445993091481604,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":16761255,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"followers_count\"\":22,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"listed_count\"\":3,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"statuses_count\"\":100,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"status\"\":{\n            \"\"annotations\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"176445993091481604\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n            \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":176445993091481604,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      {\n         \"\"id\"\":313139213,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1405826247\\/twitter_icon_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/wefollow.com\\/harithamtech\"\",\n         \"\"created_at\"\":\"\"Wed Jun 08 06:12:33 +0000 2011\"\",\n         \"\"followers_count\"\":1146,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"106100\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":19800,\n         \"\"name\"\":\"\"HarithamTechnologies\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/276751844\\/twitter_bg.jpg\"\",\n         \"\"location\"\":\"\"Coimbatore\"\",\n         \"\"profile_link_color\"\":\"\"000000\"\",\n         \"\"listed_count\"\":1,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Enterprise Application Development | Mobile Apps | SEO | Social Media Marketing | Software Testing | Business Consultancy Services\"\",\n         \"\"profile_text_color\"\":\"\"2b2b2b\"\",\n         \"\"statuses_count\"\":1751,\n         \"\"screen_name\"\":\"\"harithamtech\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1405826247\\/twitter_icon_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Chennai\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/276751844\\/twitter_bg.jpg\"\",\n         \"\"friends_count\"\":1903,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"488f3f\"\",\n         \"\"id_str\"\":\"\"313139213\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":10,\n         \"\"status\"\":{\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"possibly_sensitive\"\":false,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"196237455870017538\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.twimbow.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETwimbow\\u003C\\/a\\u003E\"\",\n            \"\"created_at\"\":\"\"Sat Apr 28 14:00:30 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":196237455870017538,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"Global Partners of Haritham Technologies ensures a Win-Win situation #enterprise #marketing #harithamtech #in. http:\\/\\/t.co\\/EdUCAXhY\"\"\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"eeffd9\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      {\n         \"\"id\"\":266862319,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1620398936\\/untitled_normal.JPG\"\",\n         \"\"url\"\":null,\n         \"\"created_at\"\":\"\"Tue Mar 15 23:21:41 +0000 2011\"\",\n         \"\"followers_count\"\":15,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"181b1c\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":7200,\n         \"\"name\"\":\"\"talat taher\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme14\\/bg.gif\"\",\n         \"\"location\"\":\"\"DOHA,QATAR\"\",\n         \"\"profile_link_color\"\":\"\"009999\"\",\n         \"\"listed_count\"\":1,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"I'm a Muslim, Software Engineer at ASIS -Qatar\"\",\n         \"\"profile_text_color\"\":\"\"fffaff\"\",\n         \"\"statuses_count\"\":38,\n         \"\"screen_name\"\":\"\"TalatTaher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1620398936\\/untitled_normal.JPG\"\",\n         \"\"time_zone\"\":\"\"Cairo\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme14\\/bg.gif\"\",\n         \"\"friends_count\"\":44,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"3d3b3d\"\",\n         \"\"id_str\"\":\"\"266862319\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":12,\n         \"\"status\"\":{\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"194760674243645440\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"created_at\"\":\"\"Tue Apr 24 12:12:17 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":194760674243645440,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"\\u0641\\u0643\\u0631\\u0648\\u0646\\u0649 \\u0627\\u0632\\u0627\\u0649 ....\\u0647\\u0648 \\u0627\\u0646\\u0627 \\u0646\\u0633\\u064a\\u062a\\u0643\\u061f\\u061f\\u061f\"\"\n         },\n         \"\"profile_background_tile\"\":true,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"1a181a\"\",\n         \"\"follow_request_sent\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":1352721896474871923,\n   \"\"previous_cursor\"\":7,\n   \"\"next_cursor_str\"\":\"\"1352721896474871923\"\",\n   \"\"previous_cursor_str\"\":\"\"7\"\"\n}\";\n\n        const string ListStatusesResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":14855950,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1151413227\\/MePimping_normal.png\"\",\n         \"\"url\"\":\"\"http:\\/\\/weblogs.sqlteam.com\\/mladenp\\/\"\",\n         \"\"created_at\"\":\"\"Wed May 21 12:55:05 +0000 2008\"\",\n         \"\"followers_count\"\":2083,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0060A5\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Mladen Prajdic\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/4781051\\/twitterPic.png\"\",\n         \"\"location\"\":\"\"Ljubljana, Slovenia\"\",\n         \"\"profile_link_color\"\":\"\"FF9000\"\",\n         \"\"listed_count\"\":195,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"SQL Server MVP and C# developer. Creator of SSMS Tools Pack add-in for SSMS.\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"statuses_count\"\":39733,\n         \"\"screen_name\"\":\"\"MladenPrajdic\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1151413227\\/MePimping_normal.png\"\",\n         \"\"time_zone\"\":\"\"Ljubljana\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/4781051\\/twitterPic.png\"\",\n         \"\"friends_count\"\":1002,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"id_str\"\":\"\"14855950\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":32,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_sidebar_fill_color\"\":\"\"0060A5\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286812220690433\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:16:37 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286812220690433,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"so using this approach i don't even need to sign my assemblies. well that lessens the complexity a bit. yay!\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":95212023,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/571849590\\/minha_foto_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.globalcode.com.br\"\",\n         \"\"created_at\"\":\"\"Mon Dec 07 14:40:21 +0000 2009\"\",\n         \"\"followers_count\"\":2208,\n         \"\"default_profile\"\":true,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"lang\"\":\"\"pt\"\",\n         \"\"utc_offset\"\":-10800,\n         \"\"name\"\":\"\"Vinicius\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"location\"\":\"\"Ubatuba - SP\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":98,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Programar, educar, criar os filhos, cozinhar, surfar, velejar e claro, beber. Simples n\\u00e3o? Ah, aqui eu sou eu, n\\u00e3o globalcode ok?\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":8628,\n         \"\"screen_name\"\":\"\"vsenger\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/571849590\\/minha_foto_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Greenland\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"friends_count\"\":369,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"95212023\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":41,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286622063525889\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:52 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286622063525889,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Tudo bem n\\u00e3o ter anvisa aqui no aeroporto, mas ent\\u00e3o coloca um bom rod\\u00edzio de carnes vai...\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n         \"\"type\"\":\"\"Point\"\",\n         \"\"coordinates\"\":[\n            -41.9644758,\n            -18.8669036\n         ]\n      },\n      \"\"place\"\":{\n         \"\"name\"\":\"\"Governador Valadares\"\",\n         \"\"country\"\":\"\"Brasil\"\",\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"Governador Valadares, Minas Gerais\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2fdc3603bc0c1d1d.json\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -42.339393,\n                     -19.039766\n                  ],\n                  [\n                     -41.539846,\n                     -19.039766\n                  ],\n                  [\n                     -41.539846,\n                     -18.5511242\n                  ],\n                  [\n                     -42.339393,\n                     -18.5511242\n                  ]\n               ]\n            ]\n         },\n         \"\"country_code\"\":\"\"BR\"\",\n         \"\"id\"\":\"\"2fdc3603bc0c1d1d\"\",\n         \"\"place_type\"\":\"\"city\"\"\n      },\n      \"\"user\"\":{\n         \"\"id\"\":86172114,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2172389365\\/gg4QUwKC_normal\"\",\n         \"\"url\"\":\"\"http:\\/\\/janynnegomes.com\"\",\n         \"\"created_at\"\":\"\"Thu Oct 29 21:56:49 +0000 2009\"\",\n         \"\"followers_count\"\":1741,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"642D8B\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-10800,\n         \"\"name\"\":\"\"Janny Gomes\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme10\\/bg.gif\"\",\n         \"\"location\"\":\"\"Minas Gerais, Brasil\"\",\n         \"\"profile_link_color\"\":\"\"FF0000\"\",\n         \"\"listed_count\"\":105,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Android & .NET Developer. My programmer daily is http:\\/\\/facebook.com\\/DiarioDeUmaProgramadorA\"\",\n         \"\"profile_text_color\"\":\"\"3D1957\"\",\n         \"\"statuses_count\"\":17504,\n         \"\"screen_name\"\":\"\"devnetgomez\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2172389365\\/gg4QUwKC_normal\"\",\n         \"\"time_zone\"\":\"\"Greenland\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme10\\/bg.gif\"\",\n         \"\"friends_count\"\":1208,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"65B0DA\"\",\n         \"\"id_str\"\":\"\"86172114\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":88,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"7AC3EE\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196284867770716160\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/twitter.com\\/download\\/android\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETwitter for Android\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:08:53 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196284867770716160,\n      \"\"geo\"\":{\n         \"\"type\"\":\"\"Point\"\",\n         \"\"coordinates\"\":[\n            -18.8669036,\n            -41.9644758\n         ]\n      },\n      \"\"text\"\":\"\"A id\\u00e9ia \\u00e9 que eu aguente segurar at\\u00e9 l\\u00e1, mas t\\u00e1 dificil \\\"\"@BrayanCordeiro: @devnetgomez MENTIRA que ele vai nascer no mesmo dia que eu?! &lt;3\\\"\"\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/MuteTests/MuteCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.MuteTests\n{\n    [TestClass]\n    public class MuteCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public MuteCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.MuteAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/mutes/users/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            const ulong UserID = 1;\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.MuteAsync(UserID);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/mutes/users/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.MuteAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_ScreenName_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"screenName\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.MuteAsync(null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_UserID_Throws_On_Zero_Input()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.MuteAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UnMuteAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/mutes/users/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            const ulong UserID = 1;\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UnMuteAsync(UserID);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/mutes/users/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UnMuteAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_ScreenName_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"screenName\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UnMuteAsync(null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_UserID_Throws_On_Zero_Input()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnMuteAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/MuteTests/MuteRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.MuteTests\n{\n    [TestClass]\n    public class MuteRequestProcessorTests\n    {\n        public MuteRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new MuteRequestProcessor<Mute>();\n            Expression<Func<Mute, bool>> expression =\n                mute =>\n                    mute.Type == MuteType.List &&\n                    mute.Cursor == 123l &&\n                    mute.SkipStatus == true &&\n                    mute.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)MuteType.List).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_IDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/mutes/users/ids.json?cursor=123\";\n            var reqProc = new MuteRequestProcessor<Mute> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)MuteType.IDs).ToString(CultureInfo.InvariantCulture) },\n                        { \"Cursor\", \"123\" }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_List_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/mutes/users/list.json?cursor=123&include_entities=false&skip_status=true\";\n            var reqProc = new MuteRequestProcessor<Mute> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)MuteType.List).ToString(CultureInfo.InvariantCulture) },\n                        { \"Cursor\", \"123\" },\n                        { \"IncludeEntities\", false.ToString() },\n                        { \"SkipStatus\", true.ToString() }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_IDs_Response()\n        {\n            var reqProc = new MuteRequestProcessor<Mute> { Type = MuteType.IDs };\n\n            List<Mute> mutes = reqProc.ProcessResults(IdsResponse);\n\n            Assert.IsNotNull(mutes);\n            Assert.IsNotNull(mutes.SingleOrDefault());\n            var mute = mutes.Single();\n            Assert.IsNotNull(mute);\n            var idList = mute.IDList;\n            Assert.IsNotNull(idList);\n            Assert.IsTrue(idList.Any());\n            var id = idList.First();\n            Assert.AreEqual(5676142ul, id);\n            var users = mute.Users;\n            Assert.IsNotNull(users);\n            Assert.IsFalse(users.Any());\n            var cursor = mute.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_UsersList_Response()\n        {\n            var reqProc = new MuteRequestProcessor<Mute> { Type = MuteType.List };\n\n            List<Mute> muteList = reqProc.ProcessResults(UsersResponse);\n\n            Assert.IsNotNull(muteList);\n            Assert.IsNotNull(muteList.SingleOrDefault());\n            var mute = muteList.Single();\n            Assert.IsNotNull(mute);\n            var users = mute.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            var user = users.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"93604443\", user.UserIDResponse);\n            var ids = mute.IDList;\n            Assert.IsNotNull(ids);\n            Assert.IsFalse(ids.Any());\n            var cursor = mute.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n        }\n\n        const string IdsResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"ids\"\":[\n      5676142\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":1\n}\";\n\n        const string UsersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":93604443,\n         \"\"id_str\"\":\"\"93604443\"\",\n         \"\"name\"\":\"\"Geert van Horrik\"\",\n         \"\"screen_name\"\":\"\"GeertvanHorrik\"\",\n         \"\"location\"\":\"\"Heeze, The Netherlands\"\",\n         \"\"description\"\":\"\"Software Developer and creator of the Catel MVVM framework (see http:\\/\\/catel.codeplex.com)\"\",\n         \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        27\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":212,\n         \"\"friends_count\"\":97,\n         \"\"listed_count\"\":12,\n         \"\"created_at\"\":\"\"Mon Nov 30 10:32:19 +0000 2009\"\",\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":3600,\n         \"\"time_zone\"\":\"\"Amsterdam\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":4431,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 11:10:16 +0000 2012\"\",\n            \"\"id\"\":280993376646598658,\n            \"\"id_str\"\":\"\"280993376646598658\"\",\n            \"\"text\"\":\"\"@FransBouma Dank, ik zocht op changes maar moest queue hebben, kan ik weer verder :-)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":280993183754768384,\n            \"\"in_reply_to_status_id_str\"\":\"\"280993183754768384\"\",\n            \"\"in_reply_to_user_id\"\":67035608,\n            \"\"in_reply_to_user_id_str\"\":\"\"67035608\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"FransBouma\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"FransBouma\"\",\n                     \"\"name\"\":\"\"Frans Bouma\"\",\n                     \"\"id\"\":67035608,\n                     \"\"id_str\"\":\"\"67035608\"\",\n                     \"\"indices\"\":[\n                        0,\n                        11\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":389487039,\n         \"\"id_str\"\":\"\"389487039\"\",\n         \"\"name\"\":\"\"Elizabeth Hulett\"\",\n         \"\"screen_name\"\":\"\"EHulett\"\",\n         \"\"location\"\":\"\"Defuniak Springs\"\",\n         \"\"description\"\":\"\"\"\",\n         \"\"url\"\":null,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":4,\n         \"\"friends_count\"\":10,\n         \"\"listed_count\"\":0,\n         \"\"created_at\"\":\"\"Wed Oct 12 14:16:54 +0000 2011\"\",\n         \"\"favourites_count\"\":1,\n         \"\"utc_offset\"\":null,\n         \"\"time_zone\"\":null,\n         \"\"geo_enabled\"\":false,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":3,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Mon Dec 17 19:47:23 +0000 2012\"\",\n            \"\"id\"\":280761124901765120,\n            \"\"id_str\"\":\"\"280761124901765120\"\",\n            \"\"text\"\":\"\"Can't believe Amanda is 28weeks today.... Lily Rose will be here soon :)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/#!\\/download\\/ipad\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for iPad\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":608455311,\n         \"\"id_str\"\":\"\"608455311\"\",\n         \"\"name\"\":\"\"\\/\\/ mellodev\"\",\n         \"\"screen_name\"\":\"\"mellodev\"\",\n         \"\"location\"\":\"\"Las Vegas, NV\"\",\n         \"\"description\"\":\"\".Net aficionado and Software craftsman. C#, Asp.Net, TSQL, Quartz.Net, WebForms, MVC + WP7. I build Social Office Suite (@SOS) and tweet about #DevLife\"\",\n         \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        46\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":355,\n         \"\"friends_count\"\":1373,\n         \"\"listed_count\"\":20,\n         \"\"created_at\"\":\"\"Thu Jun 14 18:32:56 +0000 2012\"\",\n         \"\"favourites_count\"\":109,\n         \"\"utc_offset\"\":-28800,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":1272,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 21:05:14 +0000 2012\"\",\n            \"\"id\"\":281143104046768129,\n            \"\"id_str\"\":\"\"281143104046768129\"\",\n            \"\"text\"\":\"\"@adamralph Nice background btw! Can't wait to go riding this year!\"\",\n            \"\"source\"\":\"\"web\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":281141527877652480,\n            \"\"in_reply_to_status_id_str\"\":\"\"281141527877652480\"\",\n            \"\"in_reply_to_user_id\"\":5966642,\n            \"\"in_reply_to_user_id_str\"\":\"\"5966642\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"adamralph\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"adamralph\"\",\n                     \"\"name\"\":\"\"Adam Ralph\"\",\n                     \"\"id\"\":5966642,\n                     \"\"id_str\"\":\"\"5966642\"\",\n                     \"\"indices\"\":[\n                        0,\n                        10\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"191134\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/608455311\\/1348679711\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":1,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"previous_cursor\"\":2,\n   \"\"previous_cursor_str\"\":\"\"2\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterPcl.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterPcl.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"d1517f7c-d2db-4eab-997f-c05f895eee4f\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/RawTests/RawCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.RawTests\n{\n    [TestClass]\n    public class RawCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public RawCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(EmptyRawResponse);\n            execMock.Setup(\n                exec => exec.PostToTwitterAsync<Raw>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void RawRequestProcessor_Works_With_Actions()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            Assert.IsInstanceOfType(rawReqProc, typeof(IRequestProcessorWithAction<Raw>));\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<Raw>(\n                    \"https://api.twitter.com/1.1/statuses/update.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawAsync_WithRawResultProperty_Succeeds()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            Assert.AreEqual(EmptyRawResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_Returns_Raw_Result()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n            const string ExpectedResult = \"<status>xxx</status>\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(ExpectedResult);\n            execMock.Setup(exec => exec.PostToTwitterAsync<Raw>(FullUrl, parameters, It.IsAny<CancellationToken>())).Returns(tcsResponse.Task);\n\n            string actualResult = await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            Assert.AreEqual(ExpectedResult, actualResult);\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_Resolves_Too_Many_Url_Slashes()\n        {\n            const string QueryStringWithBeginningSlash = \"/statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryStringWithBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<Raw>(\n                    FullUrl,\n                    parameters,\n                    It.IsAny<CancellationToken>()), Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_Resolves_Too_Few_Url_Slashes()\n        {\n            const string QueryStringWithoutBeginningSlash = \"statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryStringWithoutBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<Raw>(\n                    FullUrl,\n                    parameters,\n                    It.IsAny<CancellationToken>()), Times.Once());\n        }\n\n        const string EmptyRawResponse = \"{}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/RawTests/RawRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.RawTests\n{\n    [TestClass]\n    public class RawRequestProcessorTests\n    {\n        public RawRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n            Expression<Func<Raw, bool>> expression =\n                raw =>\n                    raw.QueryString == \"/statuses/public_timeline.json\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = rawReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"QueryString\", \"/statuses/public_timeline.json\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Full_Url()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"QueryString\", \"statuses/public_timeline.json\"},\n             };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_NonNull_QueryString()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"QueryString\", \"statuses/public_timeline.json\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"QueryString\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_NonBlank_QueryString()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", \" \"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"QueryString\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Resolves_Extra_Slash_Between_BaseUrl_And_QueryString()\n        {\n            string baseUrlWithTrailingSlash = \"https://api.twitter.com/1.1/\";\n            string queryStringWithPrecedingSlash = \"/statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", queryStringWithPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Resolves_No_Slash_Between_BaseUrl_And_QueryString()\n        {\n            string baseUrlWithoutTrailingSlash = \"https://api.twitter.com/1.1\";\n            string queryStringWithoutPrecedingSlash = \"statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithoutTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", queryStringWithoutPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessIDResultsTest()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            List<Raw> result = rawReqProc.ProcessResults(QueryResponse);\n\n            Assert.AreEqual(QueryResponse, result.First().Response);\n        }\n\n        const string QueryResponse = @\"<statuses type=\"\"array\"\">\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906745</id>\n    <text>ah,vou lá comer</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>77880019</id>\n      <name>caah </name>\n      <screen_name>caahbuss</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/440024240/d_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>48</followers_count>\n      <profile_background_color>131516</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>009999</profile_link_color>\n      <profile_sidebar_fill_color>efefef</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>eeeeee</profile_sidebar_border_color>\n      <friends_count>47</friends_count>\n      <created_at>Mon Sep 28 00:47:48 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme14/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>211</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906740</id>\n    <text>É só ir no site e participar... http://tinyurl.com/ygvepg5</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>76732695</id>\n      <name>Embarque Imediato</name>\n      <screen_name>EmbarqueNoFilme</screen_name>\n      <location></location>\n      <description>Twitter oficial do filme Embarque Imediato autorizado pela Europa Filmes.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/473272502/poster_embarque_imediato_rostoatores_2_normal.jpg</profile_image_url>\n      <url>http://embarqueimediatoofilme.blogspot.com/</url>\n      <protected>false</protected>\n      <followers_count>401</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>381</friends_count>\n      <created_at>Wed Sep 23 19:33:49 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-14400</utc_offset>\n      <time_zone>Santiago</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/45672389/twitter08.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>224</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906722</id>\n    <text>Se pá, ir em aniversário rico, onde deve haver muitas etiquetas, e eu odeio, pois gosto de aniversário de pobre onde é churras de havaiana</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>55657026</id>\n      <name>bee</name>\n      <screen_name>beemk</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/463563734/Imagem_004_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>76</followers_count>\n      <profile_background_color>1A1B1F</profile_background_color>\n      <profile_text_color>666666</profile_text_color>\n      <profile_link_color>2FC2EF</profile_link_color>\n      <profile_sidebar_fill_color>252429</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>181A1E</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Jul 10 20:34:52 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme9/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>819</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906718</id>\n    <text>@BruBloinski é... digamos que de tradicional só os mesmos shows horríveis de sempre. só.</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118865157</in_reply_to_status_id>\n    <in_reply_to_user_id>60946427</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>BruBloinski</in_reply_to_screen_name>\n    <user>\n      <id>16219715</id>\n      <name>wickybr</name>\n      <screen_name>wickybr</screen_name>\n      <location></location>\n      <description>25 anos, publicidade, cerveja Original. Blogueiro, curioso, as vezes nervoso, nem sempre calmo. Leitor, afinador e desajeitador.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/287234140/fbranco_copy_normal.jpg</profile_image_url>\n      <url>http://www.wickybr.blogspot.com</url>\n      <protected>false</protected>\n      <followers_count>41</followers_count>\n      <profile_background_color>642D8B</profile_background_color>\n      <profile_text_color>3D1957</profile_text_color>\n      <profile_link_color>FF0000</profile_link_color>\n      <profile_sidebar_fill_color>7AC3EE</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>65B0DA</profile_sidebar_border_color>\n      <friends_count>59</friends_count>\n      <created_at>Wed Sep 10 11:58:16 +0000 2008</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/28744035/base-back-twitter2.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>586</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906715</id>\n    <text>Завтра \"\"Саломея\"\" Виктюка ^^</text>\n    <source>&lt;a href=\"\"http://www.tweetdeck.com/\"\" rel=\"\"nofollow\"\"&gt;TweetDeck&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>45792079</id>\n      <name>Нестерова Валерия</name>\n      <screen_name>Valeriya22</screen_name>\n      <location>Russia, Kazan</location>\n      <description>Sunshine Cowboy</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/511281997/IMG_6486-_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>30</followers_count>\n      <profile_background_color>9AE4E8</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n      <friends_count>31</friends_count>\n      <created_at>Tue Jun 09 07:59:17 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/17289836/22334353_lll01.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>241</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906713</id>\n    <text>Diferente C S!</text>\n    <source>&lt;a href=\"\"http://www.myspace.com/sync\"\" rel=\"\"nofollow\"\"&gt;MySpace&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>83531026</id>\n      <name>Abraham</name>\n      <screen_name>yosoeelabraham</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/479193636/bleach_chad0005_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>0</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>0</friends_count>\n      <created_at>Mon Oct 19 05:38:34 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906712</id>\n    <text>@REL407 you sound like a Disney original! I was scared for the entire summer!!!! Smdh</text>\n    <source>&lt;a href=\"\"http://ubertwitter.com\"\" rel=\"\"nofollow\"\"&gt;UberTwitter&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118659350</in_reply_to_status_id>\n    <in_reply_to_user_id>33132386</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>REL407</in_reply_to_screen_name>\n    <user>\n      <id>91234221</id>\n      <name>Calesha Thompson</name>\n      <screen_name>missKILLAmouse</screen_name>\n      <location>ÜT: 39.739345,-104.97695</location>\n      <description>La plus belle. KILLA. Never change</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/544207431/135152_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>13</followers_count>\n      <profile_background_color>030303</profile_background_color>\n      <profile_text_color>8c878c</profile_text_color>\n      <profile_link_color>e30417</profile_link_color>\n      <profile_sidebar_fill_color>393f42</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>050505</profile_sidebar_border_color>\n      <friends_count>18</friends_count>\n      <created_at>Fri Nov 20 00:53:08 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Eastern Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/56030928/killainstincts.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>108</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906709</id>\n    <text>45 I use http://x2t.com/6145 to get 100 followers a day. It work great</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>50541031</id>\n      <name>oaiden;</name>\n      <screen_name>helloaiden17</screen_name>\n      <location>Philadelphia</location>\n      <description>by the looks of my twitter picture, you can call me Lindsey Lohan.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/533420177/151033_normal.jpg</profile_image_url>\n      <url>http://www.myspace.com/omgaiden</url>\n      <protected>false</protected>\n      <followers_count>92</followers_count>\n      <profile_background_color>fa3483</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>fa3483</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>202</friends_count>\n      <created_at>Thu Jun 25 03:45:43 +0000 2009</created_at>\n      <favourites_count>4</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/54654224/1111111111.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>706</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906708</id>\n    <text>Police parked outside my house #ilovemyneighbourhood</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>23310378</id>\n      <name>Natalie Dye</name>\n      <screen_name>natalie_xo</screen_name>\n      <location>Yorkshire, its a state of mind</location>\n      <description>Listen to the sound of the world then watch it turn.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/525311356/Snapshot_20091026_10_normal.jpg</profile_image_url>\n      <url>http://www.facebook.com/natalie0x</url>\n      <protected>false</protected>\n      <followers_count>102</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>4597d6</profile_link_color>\n      <profile_sidebar_fill_color>2b3575</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>93</friends_count>\n      <created_at>Sun Mar 08 14:05:12 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/55410721/Desktop_Background.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>1794</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906705</id>\n    <text>@robertabachert ta eu vo tenta adiantar algumas coisas mais eu preciso das fotos</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118781972</in_reply_to_status_id>\n    <in_reply_to_user_id>61624985</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>robertabachert</in_reply_to_screen_name>\n    <user>\n      <id>61279770</id>\n      <name>Patrícia Ferrari</name>\n      <screen_name>PatyFerrariC</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/534284147/patttttttty_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>35</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>050505</profile_text_color>\n      <profile_link_color>4978d6</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>090a0a</profile_sidebar_border_color>\n      <friends_count>51</friends_count>\n      <created_at>Wed Jul 29 19:53:07 +0000 2009</created_at>\n      <favourites_count>6</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/26221650/16587349.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>518</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906704</id>\n    <text>RT @ALuizCosta: Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <retweeted_status>\n      <created_at>Fri Nov 27 12:31:15 +0000 2009</created_at>\n      <id>6110610973</id>\n      <text>Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n      <source>web</source>\n      <truncated>false</truncated>\n      <in_reply_to_status_id></in_reply_to_status_id>\n      <in_reply_to_user_id></in_reply_to_user_id>\n      <favorited>false</favorited>\n      <in_reply_to_screen_name></in_reply_to_screen_name>\n      <user>\n        <id>67778641</id>\n        <name>AntonioLuiz MCCosta</name>\n        <screen_name>ALuizCosta</screen_name>\n        <location>São Paulo, Brasil</location>\n        <description>Antonio Luiz escreve na revista CartaCapital e gosta de ciência, filosofia e literatura, principalmente fantasia e ficção científica</description>\n        <profile_image_url>http://a3.twimg.com/profile_images/375056565/AntonioLuiz_normal.jpg</profile_image_url>\n        <url>http://www.scribd.com/people/documents/3817321-antonio-luiz-monteiro-coelho-da-costa</url>\n        <protected>false</protected>\n        <followers_count>460</followers_count>\n        <profile_background_color>9AE4E8</profile_background_color>\n        <profile_text_color>333333</profile_text_color>\n        <profile_link_color>b30000</profile_link_color>\n        <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n        <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n        <friends_count>44</friends_count>\n        <created_at>Sat Aug 22 01:31:02 +0000 2009</created_at>\n        <favourites_count>0</favourites_count>\n        <utc_offset>-10800</utc_offset>\n        <time_zone>Brasilia</time_zone>\n        <profile_background_image_url>http://a1.twimg.com/profile_background_images/31703608/celebraohf2.jpg</profile_background_image_url>\n        <profile_background_tile>true</profile_background_tile>\n        <statuses_count>1427</statuses_count>\n        <notifications>false</notifications>\n        <geo_enabled>false</geo_enabled>\n        <verified>false</verified>\n        <following>false</following>\n      </user>\n      <geo />\n    </retweeted_status>\n    <user>\n      <id>77265167</id>\n      <name>SL da Silva</name>\n      <screen_name>sergio_virtual</screen_name>\n      <location></location>\n      <description>Um brasileiro no mundo do Twitter!</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/460588539/DSC00180_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>20</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Sep 25 17:31:11 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>514</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906701</id>\n    <text>@No1SassyGrl anywhere! I have to take vacay bc I have too many hours accrued at work and I want to travel!</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6113853732</in_reply_to_status_id>\n    <in_reply_to_user_id>14408045</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>No1SassyGrl</in_reply_to_screen_name>\n    <user>\n      <id>9408302</id>\n      <name>Ian Mone</name>\n      <screen_name>x5455</screen_name>\n      <location>Puerto Rico</location>\n      <description>Intelligent, laid back, addicted to videogames, X-Men and TV. Hopelessly romantic and hoping for a nice boy to spend time with</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/84361594/icon_twitter_normal.jpg</profile_image_url>\n      <url>http://x5455.livejournal.com</url>\n      <protected>false</protected>\n      <followers_count>75</followers_count>\n      <profile_background_color>8B542B</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>9D582E</profile_link_color>\n      <profile_sidebar_fill_color>EADEAA</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>D9B17E</profile_sidebar_border_color>\n      <friends_count>38</friends_count>\n      <created_at>Fri Oct 12 18:26:24 +0000 2007</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme8/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1194</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906696</id>\n    <text>@nickjonas amor! te hiciste el twitter! jaja el otro día me lo habías dicho XD ahora unite al @teamfasofachero</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>56783491</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>nickjonas</in_reply_to_screen_name>\n    <user>\n      <id>37250104</id>\n      <name>Milagros C.</name>\n      <screen_name>militaaa</screen_name>\n      <location>Buenos Aires, Argentina</location>\n      <description>This is my crazy world... I'm just being milita. I hope you like my antics and madness, because that's me :)  </description>\n      <profile_image_url>http://a3.twimg.com/profile_images/532032207/P1050370_-_copia_normal.JPG</profile_image_url>\n      <url>http://www.facebook.com/profile.php?id=1010395037&amp;ref=name</url>\n      <protected>false</protected>\n      <followers_count>204</followers_count>\n      <profile_background_color>050505</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>746278</profile_link_color>\n      <profile_sidebar_fill_color>ff088c</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>d1bcbc</profile_sidebar_border_color>\n      <friends_count>300</friends_count>\n      <created_at>Sat May 02 18:17:02 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Buenos Aires</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/54044533/Teen_Vogue_Collage_by_bob55_JOE.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>6718</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906693</id>\n    <text>@MrPeterAndre its really good of u to set the record straight on that coz every1 believes everything they read abwt katie n its not fair!x</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6106899259</in_reply_to_status_id>\n    <in_reply_to_user_id>24086418</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>MrPeterAndre</in_reply_to_screen_name>\n    <user>\n      <id>54843229</id>\n      <name>ashleigh berry</name>\n      <screen_name>missashleigh19</screen_name>\n      <location>bradford</location>\n      <description>waaasssssup :) mobile beauty therapist from bradford, probably should say leeds but that would be lying haha follow me :)</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/503338157/halloween_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>7</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>362720</profile_text_color>\n      <profile_link_color>B40B43</profile_link_color>\n      <profile_sidebar_fill_color>E5507E</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>CC3366</profile_sidebar_border_color>\n      <friends_count>16</friends_count>\n      <created_at>Wed Jul 08 08:56:21 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme11/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>49</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906692</id>\n    <text>RT @ArmsLikeYours Chain Reaction with a Skylit Drive Next Friday!!!</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>18696988</id>\n      <name>Faith Sugarhigh</name>\n      <screen_name>Miss_Sugarhigh</screen_name>\n      <location>Texas</location>\n      <description>I'm a ProMoTeR/Booking Agent. I love helping bands/artists/Concerts &amp; events that inspire/change the scene. I support Skate4Cancer.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/367961955/pink_pink_003_normal.JPG</profile_image_url>\n      <url>http://www.myspace.com/miss_sugarhigh</url>\n      <protected>false</protected>\n      <followers_count>1172</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>373799</profile_link_color>\n      <profile_sidebar_fill_color>ff3892</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>822</friends_count>\n      <created_at>Tue Jan 06 21:42:00 +0000 2009</created_at>\n      <favourites_count>3</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/30568555/btf_witness_cover400x400.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>11612</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906683</id>\n    <text>64 Heyy I just got alot of followers using http://ohurl.com/0G .</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>61754026</id>\n      <name>Samien</name>\n      <screen_name>Samien501</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://s.twimg.com/a/1259091217/images/default_profile_5_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>382</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>1071</friends_count>\n      <created_at>Fri Jul 31 11:52:27 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>208</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906674</id>\n    <text>@JohnCarnell Thanks for the blog post, looking forward to getting you a proper write up. Have yourself a good evening : )</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>39247092</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>JohnCarnell</in_reply_to_screen_name>\n    <user>\n      <id>29426018</id>\n      <name>David Wood</name>\n      <screen_name>BigDaveSB</screen_name>\n      <location>Gloucester</location>\n      <description>I’m a serial fundraising; capoeira playing; science loving; hat wearing; skeptically enquiring geek</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/359441931/twitterProfilePhoto_normal.jpg</profile_image_url>\n      <url>http://justgiving.com/melonandbigdave</url>\n      <protected>false</protected>\n      <followers_count>177</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>161</friends_count>\n      <created_at>Tue Apr 07 11:02:36 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1335</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906673</id>\n    <text>I think it's possible my characters laugh and smile too much. Not that I need to be thinking about such things since I just need to write!</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>14297876</id>\n      <name>Misty Baird</name>\n      <screen_name>Langwidere</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/66698519/Photo_80_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>47</followers_count>\n      <profile_background_color>0099B9</profile_background_color>\n      <profile_text_color>3C3940</profile_text_color>\n      <profile_link_color>0099B9</profile_link_color>\n      <profile_sidebar_fill_color>95E8EC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>5ED4DC</profile_sidebar_border_color>\n      <friends_count>56</friends_count>\n      <created_at>Thu Apr 03 23:38:48 +0000 2008</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-25200</utc_offset>\n      <time_zone>Mountain Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme4/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1907</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906670</id>\n    <text>@bpradolovers eu nem ligo pra essas coisas de responder e pa.. pra MIM eles sao os msm desde SEMPRE e vo continuar amando eles me*</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118810923</in_reply_to_status_id>\n    <in_reply_to_user_id>74561853</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>bpradolovers</in_reply_to_screen_name>\n    <user>\n      <id>48044595</id>\n      <name>Marie Rochebois !</name>\n      <screen_name>marie_vr</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/541774726/Picture_066_normal.jpg</profile_image_url>\n      <url>http://www.orkut.com.br/Main#Profile?uid=8665293908869110209&amp;rl=t</url>\n      <protected>false</protected>\n      <followers_count>239</followers_count>\n      <profile_background_color>eb1717</profile_background_color>\n      <profile_text_color>1f1f1d</profile_text_color>\n      <profile_link_color>f01fe9</profile_link_color>\n      <profile_sidebar_fill_color>8838bd</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>fc0ad8</profile_sidebar_border_color>\n      <friends_count>160</friends_count>\n      <created_at>Wed Jun 17 17:44:04 +0000 2009</created_at>\n      <favourites_count>85</favourites_count>\n      <utc_offset>-32400</utc_offset>\n      <time_zone>Alaska</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/53871388/caveira-de-diamantes_-amor_dios.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>7664</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906667</id>\n    <text>Follow my nigga, my Lil brother @KENNETHVP he keep big shit going on in the M</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>30511463</id>\n      <name>Dj Hollywood Oompa </name>\n      <screen_name>HollywoodOompa</screen_name>\n      <location></location>\n      <description>i am a cool ass person. i am a DJ and i am an entertainer. i dont keep drama around me, and i am a hard worker hell im working now </description>\n      <profile_image_url>http://a1.twimg.com/profile_images/540923604/16644_568873017318_56703609_33197738_592021_n_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>278</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>81</friends_count>\n      <created_at>Sat Apr 11 19:55:17 +0000 2009</created_at>\n      <favourites_count>2</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/55606030/mix.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>457</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n</statuses>\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/SavedSearchTests/SavedSearchCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.SavedSearchTests\n{\n    [TestClass]\n    public class SavedSearchCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public SavedSearchCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitializeTwitterContextMock()\n        {\n            authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void SavedSearchRequestProcessor_Handles_Actions()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsInstanceOfType(searchReqProc, typeof(IRequestProcessorWithAction<SavedSearch>));\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_Throws_On_Missing_Query()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateSavedSearchAsync(null));\n\n            Assert.AreEqual(\"query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_Invokes_Executor_Execute()\n        {\n            const string Query = \"#LinqToTwitter\";\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<SavedSearch>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"query\", Query }\n            };\n\n            SavedSearch search = await ctx.CreateSavedSearchAsync(\"#LinqToTwitter\");\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<SavedSearch>(\n                    \"https://api.twitter.com/1.1/saved_searches/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(search);\n            Assert.AreEqual(Query, search.Name);\n            Assert.AreEqual(Query, search.Query);\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_WithRawResult_Succeeds()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<SavedSearch>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            await ctx.CreateSavedSearchAsync(\"#LinqToTwitter\");\n\n            Assert.AreEqual(SavedSearchResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearch_Throws_On_Invalid_ID()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroySavedSearchAsync(0));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearchAsync_Invokes_Executor_Execute()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<SavedSearch>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var parameters = new Dictionary<string, string>();\n\n            SavedSearch search = await ctx.DestroySavedSearchAsync(123);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<SavedSearch>(\n                    \"https://api.twitter.com/1.1/saved_searches/destroy/123.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(123ul, search.ID);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearchAsync_WithRawResult_Succeeds()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<SavedSearch>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            await ctx.DestroySavedSearchAsync(123);\n\n            Assert.AreEqual(SavedSearchResponse, ctx.RawResult);\n        }\n\n        const string SavedSearchResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/SavedSearchTests/SavedSearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SavedSearchTests\n{\n    [TestClass]\n    public class SavedSearchRequestProcessorTests\n    {\n        public SavedSearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void SavedSearchRequestProcessor_Works_On_Json_Format_Data()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsInstanceOfType(searchReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Searches_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Searches };\n\n            var searches = searchReqProc.ProcessResults(SearchesResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.AreEqual(2, searches.Count);\n            var search = searches.First();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Query);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(0, search.Position);\n            Assert.AreEqual(3275867ul, search.IDResponse);\n            Assert.AreEqual(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Show };\n\n            var searches = searchReqProc.ProcessResults(ShowResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.IsNotNull(searches.SingleOrDefault());\n            var search = searches.Single();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Query);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(0, search.Position);\n            Assert.AreEqual(3275867ul, search.IDResponse);\n            Assert.AreEqual(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            var searches = reqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, searches.Count);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<SavedSearch, bool>> expression =\n                search =>\n                    search.Type == SavedSearchType.Show &&\n                    search.ID == 123;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = searchReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SavedSearchType.Show).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"123\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Missing_ID()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/show/123.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() },\n                { \"ID\", \"123\" }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_SavedSearches_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/list.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Searches.ToString() }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n\n        const string SearchesResponse = @\"[\n   {\n      \"\"query\"\":\"\"#LinqToTwitter\"\",\n      \"\"name\"\":\"\"#LinqToTwitter\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"3275867\"\",\n      \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n      \"\"id\"\":3275867\n   },\n   {\n      \"\"query\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"name\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"101035995\"\",\n      \"\"created_at\"\":\"\"Sun Apr 29 04:09:00 +0000 2012\"\",\n      \"\"id\"\":101035995\n   }\n]\";\n\n        const string ShowResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/SearchTests/SearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SearchTests\n{\n    [TestClass]\n    public class SearchRequestProcessorTests\n    {\n        public SearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new SearchRequestProcessor<Search>();\n            Expression<Func<Search, bool>> expression =\n                search =>\n                    search.Type == SearchType.Search &&\n                    search.GeoCode == \"40.757929,-73.985506,25km\" &&\n                    search.SearchLanguage == \"en\" &&\n                    search.Count == 10 &&\n                    search.Query == \"LINQ to Twitter\" &&\n                    search.SinceID == 123 &&\n                    search.MaxID == 200 &&\n                    search.ResultType == ResultType.Popular &&\n                    search.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SearchType.Search).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"GeoCode\", \"40.757929,-73.985506,25km\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SearchLanguage\", \"en\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"LINQ to Twitter\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"MaxID\", \"200\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ResultType\", ((int)ResultType.Popular).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&geocode=40.757929%2C-73.985506%2C25km&lang=en&count=10&until=2011-07-04&since_id=1&result_type=popular&include_entities=false\";\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"GeoCode\", \"40.757929,-73.985506,25km\" },\n                    { \"SearchLanguage\", \"en\" },\n                    { \"Count\", \"10\" },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"SinceID\", \"1\" },\n                    { \"Until\", new DateTime(2011, 7, 4).ToString() },\n                    { \"ResultType\", ResultType.Popular.ToString() },\n                    { \"IncludeEntities\", false.ToString() }\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Parameters_Null()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                searchReqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_Encodes_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            string expected = searchReqProc.BaseUrl + \"search/tweets.json?q=Contains%20Space\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"Contains Space\" }\n                };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentNullException>(() =>\n                    searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Adds_True_IncludeEntities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&include_entities=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"LINQ to Twitter\"},\n                    { \"IncludeEntities\", true.ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = searchProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Creates_List_Of_Status()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results.First().Statuses);\n            Assert.IsTrue(results.First().Statuses.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_CreatedAt()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(\n                new DateTimeOffset(2012, 9, 6, 0, 10, 12, new TimeSpan(0, 0, 0)), \n                results.First().Statuses.First().CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Instantiates_Entities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results.First().Statuses.First().Entities);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Urls()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UrlEntity> urls = results.First().Statuses.First().Entities.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(1, urls.Count);\n            UrlEntity firstUrl = urls.First();\n            Assert.AreEqual(\"http://t.co/Cc85Yzpj\", firstUrl.Url);\n            Assert.AreEqual(\"http://bit.ly/PSOVso\", firstUrl.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/PSOVso\", firstUrl.DisplayUrl);\n            Assert.AreEqual(68, firstUrl.Start);\n            Assert.AreEqual(88, firstUrl.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Hashtags()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<HashTagEntity> hashes = results.First().Statuses[0].Entities.HashTagEntities;\n            Assert.IsNotNull(hashes);\n            Assert.AreEqual(3, hashes.Count);\n            HashTagEntity firstHash = hashes.First();\n            Assert.AreEqual(\"twitterapi\", firstHash.Tag);\n            Assert.AreEqual(89, firstHash.Start);\n            Assert.AreEqual(100, firstHash.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Users()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UserMentionEntity> users = results.First().Statuses[0].Entities.UserMentionEntities;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            UserMentionEntity firstUser = users.First();\n            Assert.AreEqual(\"JoeMayo\", firstUser.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", firstUser.Name);\n            Assert.AreEqual(15411837ul, firstUser.Id);\n            Assert.AreEqual(3, firstUser.Start);\n            Assert.AreEqual(11, firstUser.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Media()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<MediaEntity> media = results.First().Statuses[0].Entities.MediaEntities;\n            Assert.IsNotNull(media);\n            Assert.AreEqual(1, media.Count);\n            MediaEntity firstMedia = media.First();\n            Assert.AreEqual(155683816676134913ul, firstMedia.ID);\n            Assert.AreEqual(\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrl);\n            Assert.AreEqual(\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrlHttps);\n            Assert.AreEqual(\"http://t.co/36MZIOyW\", firstMedia.Url);\n            Assert.AreEqual(\"pic.twitter.com/36MZIOyW\", firstMedia.DisplayUrl);\n            Assert.AreEqual(\"http://twitter.com/rschu/status/155683816671940609/photo/1\", firstMedia.ExpandedUrl);\n            Assert.AreEqual(\"photo\", firstMedia.Type);\n            Assert.IsNotNull(firstMedia.Sizes);\n            Assert.AreEqual(5, firstMedia.Sizes.Count);\n            PhotoSize firstSize = firstMedia.Sizes.First();\n            Assert.AreEqual(\"orig\", firstSize.Type);\n            Assert.AreEqual(1161, firstSize.Width);\n            Assert.AreEqual(925, firstSize.Height);\n            Assert.AreEqual(\"fit\", firstSize.Resize);\n            Assert.AreEqual(59, firstMedia.Start);\n            Assert.AreEqual(79, firstMedia.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Symbols()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<SymbolEntity> symbols = results.First().Statuses[0].Entities.SymbolEntities;\n            Assert.IsNotNull(symbols);\n            Assert.AreEqual(2, symbols.Count);\n            SymbolEntity symbol = symbols.First();\n            Assert.AreEqual(\"PEP\", symbol.Text);\n            Assert.AreEqual(114, symbol.Start);\n            Assert.AreEqual(118, symbol.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Search_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results);\n            Assert.IsNotNull(results.SingleOrDefault());\n            Search search = results.Single();\n            Assert.IsNotNull(search);\n            SearchMetaData metaData = search.SearchMetaData;\n            Assert.IsNotNull(metaData);\n            Assert.AreEqual(0.046m, metaData.CompletedIn);\n            Assert.AreEqual(281604225014824960ul, metaData.MaxID);\n            Assert.AreEqual(5ul, metaData.SinceID);\n            Assert.AreEqual(10, metaData.Count);\n            Assert.AreEqual(\"Twitter\", metaData.Query);\n            Assert.AreEqual(\n                \"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\",\n                metaData.NextResults);\n            Assert.AreEqual(\n                \"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\", \n                metaData.RefreshUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Status_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results);\n            Assert.IsNotNull(results.SingleOrDefault());\n            Search search = results.Single();\n            Assert.IsNotNull(search);\n            List<Status> statuses = search.Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.IsTrue(statuses.Any());\n            Status status = search.Statuses.First();\n            Assert.IsNotNull(status);\n            StatusMetaData metaData = status.MetaData;\n            Assert.IsNotNull(metaData);\n            Assert.AreEqual(\"recent\", metaData.ResultType);\n            Assert.AreEqual(\"en\", metaData.IsoLanguageCode);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Source()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(@\"<a href=\"\"http://www.csharp-station.com/\"\" rel=\"\"nofollow\"\">C# Station</a>\", results.First().Statuses.First().Source);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Text()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http://t.co/Cc85Yzpj #twitterapi #linq #linq2twitter\", results.First().Statuses.First().Text);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> searches = searchProc.ProcessResults(EmptyResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.IsNotNull(searches.SingleOrDefault());\n            var search = searches.Single();\n            Assert.IsNotNull(search);\n            var results = search.Statuses;\n            Assert.IsNotNull(results);\n            Assert.IsFalse(results.Any());\n        }\n\n        const string SearchJson = @\"{\n   \"\"statuses\"\":[\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Sep 06 00:10:12 +0000 2012\"\",\n         \"\"id\"\":243501315039322112,\n         \"\"id_str\"\":\"\"243501315039322112\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eC# Station\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ],\n            \"\"symbols\"\": [\n                {\n                    \"\"text\"\": \"\"PEP\"\",\n                    \"\"indices\"\": [\n                        114,\n                        118\n                    ]\n                    },\n                    {\n                    \"\"text\"\": \"\"COKE\"\",\n                    \"\"indices\"\": [\n                        128,\n                        133\n                    ]\n                }\n            ],\n            \"\"media\"\":[\n               {\n                  \"\"id\"\":155683816676134913,\n                  \"\"id_str\"\":\"\"155683816676134913\"\",\n                  \"\"indices\"\":[\n                     59,\n                     79\n                  ],\n                  \"\"media_url\"\":\"\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"media_url_https\"\":\"\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"url\"\":\"\"http://t.co/36MZIOyW\"\",\n                  \"\"display_url\"\":\"\"pic.twitter.com/36MZIOyW\"\",\n                  \"\"expanded_url\"\":\"\"http://twitter.com/rschu/status/155683816671940609/photo/1\"\",\n                  \"\"type\"\":\"\"photo\"\",\n                  \"\"sizes\"\":{\n                     \"\"orig\"\":{\n                        \"\"w\"\":1161,\n                        \"\"h\"\":925,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"thumb\"\":{\n                        \"\"w\"\":150,\n                        \"\"h\"\":150,\n                        \"\"resize\"\":\"\"crop\"\"\n                     },\n                     \"\"large\"\":{\n                        \"\"w\"\":1024,\n                        \"\"h\"\":816,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"small\"\":{\n                        \"\"w\"\":340,\n                        \"\"h\"\":271,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"medium\"\":{\n                        \"\"w\"\":600,\n                        \"\"h\"\":478,\n                        \"\"resize\"\":\"\"fit\"\"\n                     }\n                  }\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:08:16 +0000 2012\"\",\n         \"\"id\"\":243123342771625985,\n         \"\"id_str\"\":\"\"243123342771625985\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:08:13\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:51 +0000 2012\"\",\n         \"\"id\"\":243121726920224769,\n         \"\"id_str\"\":\"\"243121726920224769\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:47\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:40 +0000 2012\"\",\n         \"\"id\"\":243121682787741696,\n         \"\"id_str\"\":\"\"243121682787741696\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:39\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 06:34:40 +0000 2012\"\",\n         \"\"id\"\":242873292950757376,\n         \"\"id_str\"\":\"\"242873292950757376\"\",\n         \"\"text\"\":\"\"Check out Working with Timelines with LINQ to Twitter written by @JoeMayo http:\\/\\/t.co\\/wTSodeyq\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/tweetbutton\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTweet Button\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/wTSodeyq\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/wblo.gs\\/dB3\"\",\n                  \"\"display_url\"\":\"\"wblo.gs\\/dB3\"\",\n                  \"\"indices\"\":[\n                     74,\n                     94\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     65,\n                     73\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 06:18:02 +0000 2012\"\",\n         \"\"id\"\":242506723078836224,\n         \"\"id_str\"\":\"\"242506723078836224\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 04:12:43 +0000 2012\"\",\n         \"\"id\"\":242475182780973056,\n         \"\"id_str\"\":\"\"242475182780973056\"\",\n         \"\"text\"\":\"\"Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":2,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     76,\n                     87\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     88,\n                     93\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     94,\n                     107\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     55,\n                     75\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Fri Aug 31 20:02:43 +0000 2012\"\",\n         \"\"id\"\":241627095502041088,\n         \"\"id_str\"\":\"\"241627095502041088\"\",\n         \"\"text\"\":\"\"@ChevonChr Here's an example what i use LINQ on to extract the user values http:\\/\\/t.co\\/UL222Y5Q\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":241623155712610306,\n         \"\"in_reply_to_status_id_str\"\":\"\"241623155712610306\"\",\n         \"\"in_reply_to_user_id\"\":128105076,\n         \"\"in_reply_to_user_id_str\"\":\"\"128105076\"\",\n         \"\"in_reply_to_screen_name\"\":\"\"ChevonChr\"\",\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/UL222Y5Q\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/j.mp\\/ODpb3E\"\",\n                  \"\"display_url\"\":\"\"j.mp\\/ODpb3E\"\",\n                  \"\"indices\"\":[\n                     75,\n                     95\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"ChevonChr\"\",\n                  \"\"name\"\":\"\"Chevon Christie\"\",\n                  \"\"id\"\":128105076,\n                  \"\"id_str\"\":\"\"128105076\"\",\n                  \"\"indices\"\":[\n                     0,\n                     10\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 22:48:05 +0000 2012\"\",\n         \"\"id\"\":241306323923390464,\n         \"\"id_str\"\":\"\"241306323923390464\"\",\n         \"\"text\"\":\"\"Cool, I'm about to reach 100 followers! See the rest of my stats at Twitter Counter: http:\\/\\/t.co\\/QH864mhf\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twittercounter.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eThe Visitor Widget\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/QH864mhf\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/twtr.to\\/lINq\"\",\n                  \"\"display_url\"\":\"\"twtr.to\\/lINq\"\",\n                  \"\"indices\"\":[\n                     85,\n                     105\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"es\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 00:00:51 +0000 2012\"\",\n         \"\"id\"\":240962249802530816,\n         \"\"id_str\"\":\"\"240962249802530816\"\",\n         \"\"text\"\":\"\"TWITTER to LINQ parece tan sencillo... No s\\u00e9 porqu\\u00e9 me trae tantos problemas :S\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/blackberry.com\\/twitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for BlackBerry\\u00ae\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      }\n   ],\n   \"\"search_metadata\"\":{\n       \"\"completed_in\"\":0.046,\n       \"\"max_id\"\":281604225014824960,\n       \"\"max_id_str\"\":\"\"281604225014824960\"\",\n       \"\"next_results\"\":\"\"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"query\"\":\"\"Twitter\"\",\n       \"\"refresh_url\"\":\"\"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"count\"\":10,\n       \"\"since_id\"\":5,\n       \"\"since_id_str\"\":\"\"5\"\"\n   }\n}\";\n\n        const string EmptyResponse = @\"{\n   \"\"statuses\"\":[\n   ],\n   \"\"search_metadata\"\":{\n      \"\"completed_in\"\":0.038,\n      \"\"max_id\"\":243501315039322112,\n      \"\"max_id_str\"\":\"\"243501315039322112\"\",\n      \"\"page\"\":1,\n      \"\"query\"\":\"\"LINQ+To+Twitter\"\",\n      \"\"refresh_url\"\":\"\"?since_id=243501315039322112&q=LINQ%20To%20Twitter&include_entities=1\"\",\n      \"\"results_per_page\"\":15,\n      \"\"since_id\"\":0,\n      \"\"since_id_str\"\":\"\"0\"\"\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/SecurityTests/HmacTests.cs",
    "content": "﻿using System;\nusing System.Text;\nusing LinqToTwitter.Security;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SecurityTests\n{\n    /// <summary>\n    /// Tests from RFC 2202\n    /// </summary>\n    [TestClass]\n    public class HmacTests\n    {\n        [TestMethod]\n        public void TestMethod1()\n        {\n            byte[] expectedHash = { 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1, 0x46, 0xbe, 0x00 };\n            byte[] key = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };\n            byte[] msg = Encoding.UTF8.GetBytes(\"Hi There\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod2()\n        {\n            byte[] expectedHash = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 };\n            byte[] key = Encoding.UTF8.GetBytes(\"Jefe\");\n            byte[] msg = Encoding.UTF8.GetBytes(\"what do ya want for nothing?\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod3()\n        {\n            const int Size = 50;\n            byte[] expectedHash = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 };\n            byte[] key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };\n            byte[] msg = new byte[Size];\n            for (int i = 0; i < Size; i++) msg[i] = (byte)0xdd;\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod4()\n        {\n            const int Size = 50;\n            byte[] expectedHash = { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84, 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda };\n            byte[] key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 };\n            byte[] msg = new byte[Size];\n            for (int i = 0; i < Size; i++) msg[i] = (byte)0xcd;\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod5()\n        {\n            byte[] expectedHash = { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2, 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 };\n            byte[] key = { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c };\n            byte[] msg = Encoding.UTF8.GetBytes(\"Test With Truncation\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod6()\n        {\n            const int Size = 80;\n            byte[] expectedHash = { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 };\n            byte[] key = new byte[Size];\n            for (int i = 0; i < Size; i++) key[i] = (byte)0xaa;\n            byte[] msg = Encoding.UTF8.GetBytes(\"Test Using Larger Than Block-Size Key - Hash Key First\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod7()\n        {\n            const int Size = 80;\n            byte[] expectedHash = { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91 };\n            byte[] key = new byte[Size];\n            for (int i = 0; i < Size; i++) key[i] = (byte)0xaa;\n            byte[] msg = Encoding.UTF8.GetBytes(\"Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/SecurityTests/OAuthTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Security;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SecurityTests\n{\n    [TestClass]\n    public class OAuthTests\n    {\n        const string Method = \"POST\";\n        const string Url = \"https://api.twitter.com/1/statuses/update.json\";\n        const string StatusKey = \"status\";\n        const string EntitiesKey = \"include_entities\";\n        const string ConsumerSecret = \"kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw\";\n        const string OAuthTokenSecret = \"LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE\";\n\n        IDictionary<string, string> parameters;\n        OAuth oAuth;\n\n        [TestInitialize]\n        public void InitTests()\n        {\n            oAuth = new OAuth();\n\n            // No security vulnerability - credentials are from Twitter's Creating a signature documentation: https://dev.twitter.com/docs/auth/creating-signature\n            parameters =\n                new Dictionary<string, string>\n                {\n                    {StatusKey, \"Hello Ladies + Gentlemen, a signed OAuth request!\"},\n                    {EntitiesKey, \"true\"},\n                    {\"oauth_consumer_key\", \"xvz1evFS4wEEPTGEFPHBog\" },\n                    {\"oauth_nonce\", \"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\" },\n                    {\"oauth_signature_method\", \"HMAC-SHA1\" },\n                    {\"oauth_timestamp\", \"1318622958\" },\n                    {\"oauth_token\", \"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\" }, \n                    {\"oauth_version\", \"1.0\" }\n                };\n        }\n\n        [TestMethod]\n        public void GetAuthorizationStringReturnsValidString()\n        {\n            const string ExpectedAuthorizationString = \"OAuth oauth_consumer_key=\\\"xvz1evFS4wEEPTGEFPHBog\\\", oauth_nonce=\\\"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\\\", oauth_signature=\\\"tnnArxj06cWHq44gCs1OSKk%2FjLY%3D\\\", oauth_signature_method=\\\"HMAC-SHA1\\\", oauth_timestamp=\\\"1318622958\\\", oauth_token=\\\"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\\\", oauth_version=\\\"1.0\\\"\";\n\n            string authString = oAuth.GetAuthorizationString(Method, Url, parameters, ConsumerSecret, OAuthTokenSecret);\n\n            Assert.AreEqual(ExpectedAuthorizationString, authString);\n        }\n\n        [TestMethod]\n        public void GetAuthorizationStringAddsMissingParameters()\n        {\n            parameters =\n                new Dictionary<string, string>\n                {\n                    {StatusKey, \"Hello Ladies + Gentlemen, a signed OAuth request!\"},\n                    {EntitiesKey, \"true\"},\n                    {\"oauth_consumer_key\", \"xvz1evFS4wEEPTGEFPHBog\" },\n                    {\"oauth_token\", \"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\" }, \n                };\n\n            oAuth.GetAuthorizationString(Method, Url, parameters, ConsumerSecret, OAuthTokenSecret);\n\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_nonce\"));\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_timestamp\"));\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_signature_method\"));\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_version\"));\n        }\n\n        [TestMethod]\n        public void BuildEncodedSortedStringTransformsParametersIntoEncodedSortedString()\n        {\n            const string ExpectedString = \"include_entities=true&oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog&oauth_nonce=kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1318622958&oauth_token=370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb&oauth_version=1.0&status=Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21\";\n            \n            string encodedSortedResponse = oAuth.BuildEncodedSortedString(parameters);\n\n            Assert.AreEqual(ExpectedString, encodedSortedResponse);\n        }\n\n        [TestMethod]\n        public void CreateSignatureBaseStringReturnsProperString()\n        {\n            const string EncodedStringParameters = \"include_entities=true&oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog&oauth_nonce=kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1318622958&oauth_token=370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb&oauth_version=1.0&status=Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21\";\n            const string ExpectedSignatureBaseString = \"POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521\";\n\n            string signatureBaseString = oAuth.BuildSignatureBaseString(Method, Url, EncodedStringParameters);\n\n            Assert.AreEqual(ExpectedSignatureBaseString, signatureBaseString);\n        }\n\n        [TestMethod]\n        public void CreateSigningKeyReturnsProcessedConsumerSecretAndOAuthTokenSecret()\n        {\n            const string ExpectedSigningKey = \"kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE\";\n\n            string signingKey = oAuth.BuildSigningKey(ConsumerSecret, OAuthTokenSecret);\n\n            Assert.AreEqual(ExpectedSigningKey, signingKey);\n        }\n\n        [TestMethod]\n        public void CalculateSignatureReturnsSignatureString()\n        {\n            const string ExpectedSignature = \"tnnArxj06cWHq44gCs1OSKk/jLY=\";\n            const string SignatureBaseString = \"POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521\";\n            const string SigningKey = \"kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE\";\n\n            string signature = oAuth.CalculateSignature(SigningKey, SignatureBaseString);\n\n            Assert.AreEqual(ExpectedSignature, signature);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/SecurityTests/Sha1Tests.cs",
    "content": "﻿using System;\nusing System.Text;\nusing LinqToTwitter.Security;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SecurityTests\n{\n    /// <summary>\n    /// Tests from RFC 3174 + more\n    /// </summary>\n    [TestClass]\n    public class Sha1Tests\n    {\n        [TestMethod]\n        public void AbcHashesCorrectly()\n        {\n            byte[] expectedResults = { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"abc\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n\n        [TestMethod]\n        public void AlternatingLettersHashesCorrectly()\n        {\n            byte[] expectedResults = { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n\n        [TestMethod]\n        public void LettarAHashesCorrectly()\n        {\n            byte[] expectedResults = { 0x86, 0xF7, 0xE4, 0x37, 0xFA, 0xA5, 0xA7, 0xFC, 0xE1, 0x5D, 0x1D, 0xDC, 0xB9, 0xEA, 0xEA, 0xEA, 0x37, 0x76, 0x67, 0xB8 };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"a\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n\n        [TestMethod]\n        public void OctalSequenceHashesCorrectly()\n        {\n            byte[] expectedResults = { 0xE0, 0xC0, 0x94, 0xE8, 0x67, 0xEF, 0x46, 0xC3, 0x50, 0xEF, 0x54, 0xA7, 0xF5, 0x9D, 0xD6, 0x0B, 0xED, 0x92, 0xAE, 0x83 };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"0123456701234567012345670123456701234567012345670123456701234567\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/StatusTests/StatusCommandsReplyWithMediaAndLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusCommandsReplyWithMediaAndLocationTests\n    {\n        const string ExpectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n        const string FrenchLocale = \"FR-fr\";\n\n        readonly Mock<TwitterContext> ctx;\n        readonly Mock<ITwitterExecute> execMock;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n\n        readonly byte[] imageBytes = new byte[] { 0xFF };\n\n        string status = \"test\";\n        bool possiblySensitive = true;\n        decimal latitude = 37.78215m;\n        decimal longitude = -122.40060m;\n        string placeID = \"place\";\n        bool displayCoordinates = true;\n        ulong inReplyToStatusID = 23030327348932ul;\n\n        public StatusCommandsReplyWithMediaAndLocationTests()\n        {\n            statusReqProc = new Mock<IRequestProcessor<Status>>();\n            statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n                .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            execMock = new Mock<ITwitterExecute>();\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            ctx = new Mock<TwitterContext>(execMock.Object);\n            ctx.Setup(twitterCtx => twitterCtx.CreateRequestProcessor<Status>())\n                .Returns(statusReqProc.Object);\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_Throws_On_Null_Status()\n        {\n            status = null;\n\n            var ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.Object.ReplyWithMediaAsync(\n                        inReplyToStatusID, status, possiblySensitive, imageBytes));\n\n            Assert.AreEqual(\"status\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_Calls_PostMediaAsync()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"PostMedia was not called only one time.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.Is<string>(url => url == ExpectedUploadUrl),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass status properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            possiblySensitive = false;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, new byte[] {1});\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == placeID),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass placeID parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_DoesNot_Pass_Null_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            placeID = null;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_DoesNot_Pass_Empty_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            placeID = \"\";\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == displayCoordinates.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass displayCoordinates parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_DoesNot_Pass_False_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            displayCoordinates = false;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == inReplyToStatusID.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass inReplyToStatusID parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_DoesNot_Pass_NoReply_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            inReplyToStatusID = TwitterContext.NoReply;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_Latitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"lat\"] == latitude.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass latitude parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Passes_Longitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"long\"] == longitude.ToString(CultureInfo.InvariantCulture)),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass longitude parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_DoesNot_Pass_NoCoordinate_Lat_And_Long_To_PostMedia()\n        {\n            latitude = TwitterContext.NoCoordinate;\n            longitude = TwitterContext.NoCoordinate;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(\n                        parms =>\n                        parms[\"lat\"] == null &&\n                        parms[\"long\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Translates_Localized_Lat_And_Long()\n        {\n            string latString = latitude.ToString(CultureInfo.InvariantCulture);\n            string longString = longitude.ToString(CultureInfo.InvariantCulture);\n            Thread.CurrentThread.CurrentUICulture = new CultureInfo(FrenchLocale);\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(\n                        parms =>\n                        parms[\"lat\"] == latString &&\n                        parms[\"long\"] == longString),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"Invariant culture not applied to Lat and/or long.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_Passes_Image_Bytes_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.Is<byte[]>(image => image.Length > 0),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_Requires_NonNull_Image()\n        {\n            byte[] nullImage = null;\n\n            var ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.Object.ReplyWithMediaAsync(\n                        inReplyToStatusID, status, possiblySensitive,\n                        latitude, longitude, placeID, displayCoordinates, nullImage));\n\n            Assert.AreEqual(\"image\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_Returns_Status()\n        {\n            Status tweet = await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            Assert.IsTrue(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_WithRawResult_Succeeds()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates, imageBytes);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.Object.RawResult);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/StatusTests/StatusCommandsReplyWithMediaNoLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusCommandsReplyWithMediaNoLocationTests\n    {\n        readonly string expectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n\n        readonly Mock<TwitterContext> ctx;\n        readonly Mock<ITwitterExecute> execMock;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n\n        readonly byte[] imageBytes = new byte[] { 0xFF };\n\n        string status = \"test\";\n        bool possiblySensitive = true;\n        decimal latitude = 37.78215m;\n        ulong inReplyToStatusID = 23030327348932ul;\n\n        public StatusCommandsReplyWithMediaNoLocationTests()\n        {\n            statusReqProc = new Mock<IRequestProcessor<Status>>();\n            statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n            .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            execMock = new Mock<ITwitterExecute>();\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n\n            ctx = new Mock<TwitterContext>(execMock.Object);\n            ctx.Setup(twtrCtx => twtrCtx.CreateRequestProcessor<Status>())\n            .Returns(statusReqProc.Object);\n        }\n\n        public decimal Latitude\n        {\n            get\n            {\n                return latitude;\n            }\n            set\n            {\n                latitude = value;\n            }\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Throws_On_Null_Status()\n        {\n            status = null;\n\n            ArgumentNullException ex =\n            await L2TAssert.Throws<ArgumentNullException>(async () =>\n                await ctx.Object.ReplyWithMediaAsync(\n                    inReplyToStatusID, status, possiblySensitive, imageBytes));\n\n            Assert.AreEqual(\"status\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Calls_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"PostMedia was not called only one time.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.Is<string>(url => url == expectedUploadUrl),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass status properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString()),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            possiblySensitive = false;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_DoesNot_Pass_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_DoesNot_Pass_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Passes_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == inReplyToStatusID.ToString()),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass inReplyToStatusID parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_DoesNot_Pass_NoReply_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            inReplyToStatusID = TwitterContext.NoReply;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_DoesNot_Pass_Lat_And_Long_To_PostMedia()\n        {\n            latitude = TwitterContext.NoCoordinate;\n\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(\n                        parms =>\n                        parms[\"lat\"] == null &&\n                        parms[\"long\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMediaAsync_Without_Location_Params_Passes_Image_To_PostMediaAsync()\n        {\n            await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID,\n                status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.Is<byte[]>(image => object.ReferenceEquals(image, imageBytes)),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"ReplyWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Requires_NonNull_Image()\n        {\n            byte[] nullImage = null;\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.Object.ReplyWithMediaAsync(\n                        inReplyToStatusID, status, possiblySensitive, nullImage));\n\n            Assert.AreEqual(\"image\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Requires_NonEmpty_Array()\n        {\n            byte[] imageBytes = new byte[] {};\n\n            ArgumentException ex =\n                await L2TAssert.Throws<ArgumentException>(async () =>\n                    await ctx.Object.ReplyWithMediaAsync(\n                        inReplyToStatusID, status, possiblySensitive, imageBytes));\n\n            Assert.AreEqual(\"image\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReplyWithMedia_Without_Location_Params_Returns_Status()\n        {\n            Status tweet = await ctx.Object.ReplyWithMediaAsync(\n                inReplyToStatusID, status, possiblySensitive, imageBytes);\n\n            Assert.IsTrue(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/StatusTests/StatusCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusCommandsTests\n    {\n        public StatusCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        async Task<TwitterContext> InitializeTwitterContext()\n        {\n            await Task.Delay(1);\n            var authMock = new Mock<IAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n\n            var tcsMedia = new TaskCompletionSource<string>();\n            tcsMedia.SetResult(MediaResponse);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsMedia.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void StatusRequestProcessor_Handles_Actions()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status>();\n\n            Assert.IsInstanceOfType(statusReqProc, typeof(IRequestProcessorWithAction<Status>));\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_Sets_StatusID()\n        {\n            const string Status = \"Hello\";\n            const ulong InReplyToStatusID = 1;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = await InitializeTwitterContext();\n\n            Status responseTweet = await ctx.ReplyAsync(InReplyToStatusID, Status);\n\n            Assert.AreEqual(ExpectedStatusID, responseTweet.StatusID);\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_WithRawResult_Succeeds()\n        {\n            const string Status = \"Hello\";\n            const ulong InReplyToStatusID = 1;\n            var ctx = await InitializeTwitterContext();\n\n            await ctx.ReplyAsync(InReplyToStatusID, Status);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_Throws_On_Null_Tweet()\n        {\n            var ctx = await InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.TweetAsync(null));\n\n            Assert.AreEqual(\"status\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_Throws_On_Bad_Tweet()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n\n            var tcsMedia = new TaskCompletionSource<string>();\n            tcsMedia.SetResult(MediaResponse);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsMedia.Task);\n\n            var ctx = new Mock<TwitterContext>(execMock.Object);\n            ctx.Setup(mock => mock.TweetAsync(null))\n                .ThrowsAsync(new ArgumentException());\n\n            //Assert.AreEqual(\"status\", ex.ParamName);\n        }\n        [TestMethod]\n        public async Task TweetAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 184835136037191681ul;\n            var ctx = await InitializeTwitterContext();\n\n            await ctx.DeleteTweetAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_Sets_StatusID()\n        {\n            const string Status = \"Hello\";\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = await InitializeTwitterContext();\n\n            Status actual = await ctx.TweetAsync(Status);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_WithMediaIds_ReturnsStatus()\n        {\n            const string Status = \"Hello\";\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var mediaIds = new List<ulong> { 1, 2, 3 };\n            var ctx = await InitializeTwitterContext();\n\n            Status actual = await ctx.TweetAsync(Status, mediaIds);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task UploadMediaAsync_WithBinaryImage_ReturnsMedia()\n        {\n            const ulong ExpectedMediaID = 521449660083609601ul;\n            var image = new byte[] { 1, 2, 3 };\n            var ctx = await InitializeTwitterContext();\n\n            Media actual = await ctx.UploadMediaAsync(image);\n\n            Assert.AreEqual(ExpectedMediaID, actual.MediaID);\n        }\n\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_Sets_ID()\n        {\n            const ulong Id = 184835136037191681ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = await InitializeTwitterContext();\n\n            Status actual = await ctx.DeleteTweetAsync(Id);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_WithRawResults_Succeeds()\n        {\n            const ulong Id = 184835136037191681ul;\n            var ctx = await InitializeTwitterContext();\n\n            await ctx.DeleteTweetAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_Throws_On_Zero_ID()\n        {\n            const ulong ID = 0;\n            var ctx = await InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteTweetAsync(ID));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string MediaResponse = @\"{\n\t\"\"media_id\"\": 521449660083609601,\n\t\"\"media_id_string\"\": \"\"521449660083609601\"\",\n\t\"\"size\"\": 6955,\n\t\"\"image\"\": {\n\t\t\"\"w\"\": 100,\n\t\t\"\"h\"\": 100,\n\t\t\"\"image_type\"\": \"\"image\\/png\"\"\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/StatusTests/StatusCommandsTweetWithMediaNoLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusCommandsTweetWithMediaNoLocationTests\n    {\n        readonly string expectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n\n        readonly Mock<TwitterContext> ctx;\n        readonly Mock<ITwitterExecute> execMock;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n\n        readonly byte[] imageBytes = new byte[] { 0xFF };\n\n        string status = \"test\";\n        bool possiblySensitive = true;\n\n        public StatusCommandsTweetWithMediaNoLocationTests()\n        {\n            statusReqProc = new Mock<IRequestProcessor<Status>>();\n            statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n                         .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            execMock = new Mock<ITwitterExecute>();\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            ctx = new Mock<TwitterContext>(execMock.Object);\n            ctx.Setup(twtrCtx => twtrCtx.CreateRequestProcessor<Status>())\n                      .Returns(this.statusReqProc.Object);\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Throws_On_Null_Status()\n        {\n            this.status = null;\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes));\n\n            Assert.AreEqual(\"status\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Calls_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"PostMedia was not called only one time.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.Is<string>(url => url == expectedUploadUrl),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass status properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString()),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            possiblySensitive = false;\n\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_DoesNot_Pass_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_DoesNot_Pass_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_DoesNot_Pass_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => !parms.ContainsKey(\"in_reply_To_status_id\")),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_DoesNot_Pass_Lat_And_Long_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"lat\"] == null && parms[\"long\"] == null),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMediaAsync_Without_Location_Params_Passes_Image_To_PostMediaAsync()\n        {\n            await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.Is<byte[]>(image => object.ReferenceEquals(image, imageBytes)),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Requires_NonNull_Image()\n        {\n            byte[] nullImage = null;\n\n            ArgumentNullException ex = await L2TAssert.Throws<ArgumentNullException>(\n                    async () => await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, nullImage));\n\n            Assert.AreEqual(\"image\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Without_Location_Params_Returns_Status()\n        {\n            Status tweet = await ctx.Object.TweetWithMediaAsync(status, possiblySensitive, imageBytes);\n\n            Assert.IsTrue(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Accepts_Internationalized_Characters()\n        {\n            string statusMsg = \"My new car £10,555. http://test.com #CodePlex #testing\";\n\n            Status tweet = await ctx.Object.TweetWithMediaAsync(statusMsg, possiblySensitive, imageBytes);\n\n            Assert.IsTrue(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_To_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_To_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_To_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_To_status_id_str\"\":null,\n         \"\"in_reply_To_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_To_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_To_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_To_status_id_str\"\":null,\n      \"\"in_reply_To_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_To_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/StatusTests/StatusCommandsTweetsWithMediaAndLocationTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusCommandsTweetsWithMediaAndLocationTests\n    {\n        readonly string expectedUploadUrl = \"https://api.twitter.com/1.1/statuses/update_with_media.json\";\n\n        readonly Mock<TwitterContext> ctx;\n        readonly Mock<ITwitterExecute> execMock;\n        readonly Mock<IRequestProcessor<Status>> statusReqProc;\n         \n        readonly string frenchLocale = \"FR-fr\";\n        readonly byte[] imageBytes = new byte[] { 0xFF };\n\n        string status = \"test\";\n        bool possiblySensitive = true;\n        decimal latitude = 37.78215m;\n        decimal longitude = -122.40060m;\n        string placeID = \"place\";\n        bool displayCoordinates = true;\n\n        public StatusCommandsTweetsWithMediaAndLocationTests()\n        {\n            statusReqProc = new Mock<IRequestProcessor<Status>>();\n            statusReqProc.Setup(reqProc => reqProc.ProcessResults(It.IsAny<string>()))\n                .Returns(new List<Status> { new Status { Text = \"Test\" } });\n\n            execMock = new Mock<ITwitterExecute>();\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n\n            ctx = new Mock<TwitterContext>(execMock.Object);\n            ctx.Setup(twtrCtx => twtrCtx.CreateRequestProcessor<Status>())\n            .Returns(statusReqProc.Object);\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Throws_On_Null_Status()\n        {\n            status = null;\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(() =>\n                    ctx.Object.TweetWithMediaAsync(\n                        status, possiblySensitive,\n                        latitude, longitude, placeID, displayCoordinates,\n                        imageBytes));\n\n            Assert.AreEqual(\"status\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Calls_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                    Times.Once(),\n                    \"PostMedia was not called only one time.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_Properly_Formatted_Url_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.Is<string>(url => url == expectedUploadUrl),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                    Times.Once(),\n                    \"TweetWithMedia didn't pass properly formatted URL.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_Status_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"status\"] == status),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass status properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == possiblySensitive.ToString()),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass possiblySensitive parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_DoesNot_Pass_False_PossiblySensitive_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            possiblySensitive = false;\n\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"possibly_sensitive\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia should not have passed possiblySensitive parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == placeID),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass placeID parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_DoesNot_Pass_Null_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            placeID = null;\n\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_DoesNot_Pass_Empty_PlaceID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            placeID = \"\";\n\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"place_id\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass placeID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == displayCoordinates.ToString()),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass displayCoordinates parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_DoesNot_Pass_False_DisplayCoordinates_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            displayCoordinates = false;\n\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"display_coordinates\"] == null),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass displayCoordinates parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_DoesNot_Pass_InReplyToStatusID_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"in_reply_to_status_id\"] == null),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia shouldn't pass inReplyToStatusID parameter.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_Latitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"lat\"] == latitude.ToString()),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass latitude parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_Longitude_Via_Parameter_Dictionary_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.Is<IDictionary<string, string>>(parms => parms[\"long\"] == longitude.ToString()),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass longitude parameter properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_DoesNot_Pass_NoCoordinate_Lat_And_Long_To_PostMedia()\n        {\n            latitude = TwitterContext.NoCoordinate;\n            longitude = TwitterContext.NoCoordinate;\n\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec => exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(parms => parms[\"lat\"] == null && parms[\"long\"] == null),\n                It.IsAny<byte[]>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"Lat and long should be null.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Translates_Localized_Lat_And_Long()\n        {\n            string latString = latitude.ToString();\n            string longString = longitude.ToString();\n            Thread.CurrentThread.CurrentUICulture = new CultureInfo(frenchLocale);\n\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n            exec.PostMediaAsync(\n                It.IsAny<string>(),\n                It.Is<IDictionary<string, string>>(\n                    parms =>\n                    parms[\"lat\"] == latString &&\n                    parms[\"long\"] == longString),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                    Times.Once(),\n                    \"Invariant culture not applied to Lat and/or long.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Passes_Media_To_PostMedia()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            execMock.Verify(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.Is<byte[]>(image => image.Length > 0),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once(),\n                \"TweetWithMedia didn't pass mediaItems properly.\");\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Requires_NonNull_Image()\n        {\n            byte[] nullImage = null;\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(() =>\n                    ctx.Object.TweetWithMediaAsync(\n                        status, possiblySensitive,\n                        latitude, longitude, placeID, displayCoordinates,\n                        nullImage));\n\n            Assert.AreEqual(\"image\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_Returns_Status()\n        {\n            Status tweet = await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            Assert.IsTrue(tweet.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n        }\n\n        [TestMethod]\n        public async Task TweetWithMedia_WithRawResult_Succeeds()\n        {\n            await ctx.Object.TweetWithMediaAsync(\n                status, possiblySensitive,\n                latitude, longitude, placeID, displayCoordinates,\n                imageBytes);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.Object.RawResult);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/StatusTests/StatusRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusRequestProcessorTests\n    {\n        public StatusRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            Expression<Func<Status, bool>> expression =\n            status =>\n                status.Type == StatusType.Home &&\n                status.ID == 10 &&\n                status.UserID == 10 &&\n                status.ScreenName == \"JoeMayo\" &&\n                status.SinceID == 123 &&\n                status.MaxID == 456 &&\n                status.Count == 50 &&\n                status.Cursor == 789 &&\n                status.IncludeRetweets == true &&\n                status.ExcludeReplies == true &&\n                status.IncludeEntities == true &&\n                status.IncludeUserEntities == true &&\n                status.TrimUser == true &&\n                status.IncludeContributorDetails == true &&\n                status.IncludeMyRetweet == true &&\n                status.OEmbedUrl == \"http://myurl.com\" &&\n                status.OEmbedAlign == EmbeddedStatusAlignment.Center &&\n                status.OEmbedHideMedia == true &&\n                status.OEmbedHideThread == true &&\n                status.OEmbedLanguage == \"en\" &&\n                status.OEmbedMaxWidth == 300 &&\n                status.OEmbedOmitScript == true &&\n                status.OEmbedRelated == \"JoeMayo\" &&\n                status.TweetIDs == \"1,2,3\" &&\n                status.Map == true;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)StatusType.Home).ToString())));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ID\", \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"MaxID\", \"456\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Count\", \"50\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"ExcludeReplies\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeContributorDetails\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeMyRetweet\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedUrl\", \"http://myurl.com\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedAlign\", ((int)EmbeddedStatusAlignment.Center).ToString())));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideMedia\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideThread\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedLanguage\", \"en\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedMaxWidth\", \"300\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedOmitScript\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TweetIDs\", \"1,2,3\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Map\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Conversations_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/conversation/show.json?id=123\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Conversation).ToString() },\n                { \"ID\", \"123\" }\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Conversations_Throws_On_Missing_ID()\n        {\n            const string ExpectedParam = \"ID\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Conversation).ToString() },\n                //{ \"ID\", \"123\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => statProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Mentions_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/mentions_timeline.json?since_id=123&max_id=145&count=50\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Mentions).ToString() },\n                { \"SinceID\", \"123\" },\n                { \"MaxID\", \"145\" },\n                { \"Count\", \"50\" }\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/show.json?id=945932078&include_my_retweet=true&include_entities=true&trim_user=true\";\n            var reqProc = new StatusRequestProcessor<Status> \n            { \n                Type = StatusType.Show,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Show).ToString() },\n                { \"ID\", \"945932078\" },\n                { \"TrimUser\", true.ToString() },\n                { \"IncludeMyRetweet\", true.ToString() },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_User_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&user_id=15411837&screen_name=JoeMayo\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Home_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/home_timeline.json?count=5\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Home).ToString() },\n                { \"Count\", \"5\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_IncludeRetweets_On_User_Timeline()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", \"True\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_False_Include_Rts_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", false.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_OEmbed()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/oembed.json?id=1&url=abc&maxwidth=300&hide_media=true&hide_thread=true&omit_script=true&align=left&related=JoeMayo%2CTwitterAPI&lang=en\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Oembed).ToString() },\n                { \"ID\", \"1\" },\n                { \"OEmbedUrl\", \"abc\" },\n                { \"OEmbedMaxWidth\", \"300\" },\n                { \"OEmbedHideMedia\", true.ToString() },\n                { \"OEmbedHideThread\", true.ToString() },\n                { \"OEmbedOmitScript\", true.ToString() },\n                { \"OEmbedAlign\", ((int)EmbeddedStatusAlignment.Left).ToString() },\n                { \"OEmbedRelated\", \"JoeMayo, TwitterAPI\" },\n                { \"OEmbedLanguage\", \"en\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_RetweetsOfMe()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?since_id=2&max_id=3&count=1&include_entities=true&include_user_entities=true&trim_user=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"Count\", \"1\" },\n                { \"SinceID\", \"2\" },\n                { \"MaxID\", \"3\" },\n                { \"TrimUser\", true.ToString() },\n                { \"IncludeEntities\", true.ToString() },\n                { \"IncludeUserEntities\", true.ToString() },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_False_IncludeUserEntities_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?include_user_entities=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"IncludeUserEntities\", false.ToString() },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Retweeters_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=5&cursor=7\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                { \"ID\", \"5\" },\n                { \"Cursor\", \"7\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_RetweetedBy_Throws_On_Missing_ID()\n        {\n            const string ExpectedParam = \"ID\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Retweeters,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                //{ \"ID\", \"123\" },\n                { \"Cursor\", \"25\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => statusReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameter()\n        {\n            var target = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Lookup_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/lookup.json?id=1%2C2%2C3&include_entities=true&trim_user=true&map=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Lookup).ToString() },\n                { \"TweetIDs\", \"1,2,3\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"TrimUser\", true.ToString() },\n                { \"Map\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Removes_Spaces_In_TweetIDs()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/lookup.json?id=1%2C2%2C3\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Lookup).ToString() },\n                { \"TweetIDs\", \"1, 2, 3\" },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Throws_On_Missing_TweetIDs()\n        {\n            const string ExpectedParameterName = \"TweetIDs\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Lookup).ToString() },\n                //{ \"TweetIDs\", \"1, 2, 3\" },\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(ExpectedParameterName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void StatusRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            Assert.IsInstanceOfType(statProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Multiple_Statuses()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Home, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleStatusResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(3, statuses.Count);\n            var status = statuses.First();\n            Assert.IsNotNull(status);\n            Assert.IsFalse(status.Retweeted);\n            Assert.IsNull(status.InReplyToScreenName);\n            Assert.IsFalse(status.PossiblySensitive);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.IsNotNull(retweetedStatus);\n            Assert.IsNotNull(retweetedStatus.Text);\n            Assert.IsTrue(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            var contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsFalse(contributors.Any());\n            var coords = status.Coordinates;\n            Assert.IsNotNull(coords);\n            Assert.AreEqual(-122.40060, coords.Longitude);\n            Assert.AreEqual(37.78215, coords.Latitude);\n            Assert.IsNotNull(status.Place);\n            Assert.IsNull(status.Place.Name);\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.AreEqual(393, status.RetweetCount);\n            Assert.AreEqual(184835136037191681ul, status.StatusID);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsFalse(status.Favorited);\n            Assert.AreEqual(0ul, status.InReplyToStatusID);\n            Assert.AreEqual(\"web\", status.Source);\n            Assert.AreEqual(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsFalse(status.Truncated);\n            Assert.IsNotNull(status.Text);\n            Assert.IsTrue(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.IsNotNull(status.Annotation);\n            Assert.IsFalse(status.Annotation.Attributes.Any());\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_A_Single_Status()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(SingleStatusResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.IsNotNull(status.Annotation);\n            Assert.IsNotNull(status.Annotation.Attributes);\n            Assert.IsFalse(status.Annotation.Attributes.Any());\n            Assert.IsNotNull(status.Annotation.Elements);\n            Assert.IsFalse(status.Annotation.Elements.Any());\n            Assert.AreEqual(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            var contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsFalse(contributors.Any());\n            var coords = status.Coordinates;\n            Assert.IsNotNull(coords);\n            Assert.AreEqual(-122.40060, coords.Longitude);\n            Assert.AreEqual(37.78215, coords.Latitude);\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n            Assert.IsFalse(status.Entities.HashTagEntities.Any());\n            Assert.IsFalse(status.Favorited);\n            Assert.IsNull(status.InReplyToScreenName);\n            Assert.AreEqual(0ul, status.InReplyToStatusID);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsNotNull(status.Place);\n            Assert.IsNull(status.Place.Name);\n            Assert.IsFalse(status.PossiblySensitive);\n            Assert.AreEqual(393, status.RetweetCount);\n            Assert.IsFalse(status.Retweeted);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.IsNotNull(retweetedStatus);\n            Assert.IsNotNull(retweetedStatus.Text);\n            Assert.IsTrue(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            Assert.AreEqual(\"web\", status.Source);\n            Assert.IsTrue(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.AreEqual(184835136037191681ul, status.StatusID);\n            Assert.IsNotNull(status.Text);\n            Assert.IsFalse(status.Truncated);\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.IsNotNull(status.Users);\n            Assert.IsFalse(status.Users.Any());\n            Assert.IsNotNull(status.WithheldInCountries);\n            Assert.IsFalse(status.WithheldInCountries.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Multiple_Users()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Retweeters, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleUsersResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            var users = status.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(5, users.Count);\n            ulong user = users.First();\n            Assert.AreEqual(34649740ul, user);\n            var cursor = status.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(123L, cursor.Next);\n            Assert.AreEqual(456L, cursor.Previous);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var statProc = new StatusRequestProcessor<Status>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var stats = statProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, stats.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_An_Embedded_Status()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Oembed, BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string ExpectedType = \"rich\";\n            const ulong ExpectedCacheAge = 3153600000;\n            const string ExpectedVersion = \"1.0\";\n            const string ExpectedProviderName = \"Twitter\";\n            const string ExpectedUrl = \"https://twitter.com/JoeMayo/statuses/305050067973312514\";\n            const int ExpectedWidth = 550;\n            const int ExpectedHeight = 0;\n            const string ExpectedHtml = \"some html\";\n            const string ExpectedProviderUrl = \"https://twitter.com\";\n            const string ExpectedAuthorUrl = \"https://twitter.com/JoeMayo\";\n            const string ExpectedAuthorName = \"Joe Mayo\";\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            var embeddedStatus = status.EmbeddedStatus;\n            Assert.IsNotNull(embeddedStatus);\n            Assert.AreEqual(ExpectedType, embeddedStatus.Type);\n            Assert.AreEqual(ExpectedCacheAge, embeddedStatus.CacheAge);\n            Assert.AreEqual(ExpectedVersion, embeddedStatus.Version);\n            Assert.AreEqual(ExpectedProviderName, embeddedStatus.ProviderName);\n            Assert.AreEqual(ExpectedUrl, embeddedStatus.Url);\n            Assert.AreEqual(ExpectedWidth, embeddedStatus.Width);\n            Assert.AreEqual(ExpectedHeight, embeddedStatus.Height);\n            Assert.AreEqual(ExpectedHtml, embeddedStatus.Html);\n            Assert.AreEqual(ExpectedProviderUrl, embeddedStatus.ProviderUrl);\n            Assert.AreEqual(ExpectedAuthorUrl, embeddedStatus.AuthorUrl);\n            Assert.AreEqual(ExpectedAuthorName, embeddedStatus.AuthorName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>() \n            { \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Show,\n                ID = 123,\n                UserID = 123,\n                ScreenName = \"abc\",\n                SinceID = 1,\n                MaxID = 2,\n                Count = 3,\n                Cursor= 123,\n                IncludeRetweets = true,\n                ExcludeReplies = true,\n                IncludeEntities = true,\n                IncludeUserEntities = true,\n                TrimUser = true,\n                IncludeContributorDetails = true,\n                IncludeMyRetweet = true,\n                TweetIDs = \"1,2,3\",\n                Map = true\n            };\n\n            var statuses = statProc.ProcessResults(SingleStatusResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.AreEqual(StatusType.Show, status.Type);\n            Assert.AreEqual(123ul, status.ID);\n            Assert.AreEqual(123ul, status.UserID);\n            Assert.AreEqual(\"abc\", status.ScreenName);\n            Assert.AreEqual(1ul, status.SinceID);\n            Assert.AreEqual(2ul, status.MaxID);\n            Assert.AreEqual(3, status.Count);\n            Assert.AreEqual(123L, status.Cursor);\n            Assert.IsTrue(status.IncludeRetweets);\n            Assert.IsTrue(status.ExcludeReplies);\n            Assert.IsTrue(status.IncludeEntities);\n            Assert.IsTrue(status.IncludeUserEntities);\n            Assert.IsTrue(status.TrimUser);\n            Assert.IsTrue(status.IncludeContributorDetails);\n            Assert.IsTrue(status.IncludeMyRetweet);\n            Assert.AreEqual(\"1,2,3\", status.TweetIDs);\n            Assert.IsTrue(status.Map);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_EmbeddedStatus_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Oembed,\n                ID = 123,\n                OEmbedUrl = \"http://myurl.com\",\n                OEmbedMaxWidth = 300,\n                OEmbedHideMedia = true,\n                OEmbedHideThread = true,\n                OEmbedOmitScript = true,\n                OEmbedAlign = EmbeddedStatusAlignment.Left,\n                OEmbedRelated = \"JoeMayo,TwitterAPI\",\n                OEmbedLanguage = \"en\"\n            };\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.AreEqual(StatusType.Oembed, status.Type);\n            Assert.AreEqual(123ul, status.ID);\n            Assert.AreEqual(\"http://myurl.com\", status.OEmbedUrl);\n            Assert.AreEqual(300, status.OEmbedMaxWidth);\n            Assert.IsTrue(status.OEmbedHideMedia);\n            Assert.IsTrue(status.OEmbedHideThread);\n            Assert.IsTrue(status.OEmbedOmitScript);\n            Assert.AreEqual(EmbeddedStatusAlignment.Left, status.OEmbedAlign);\n            Assert.AreEqual(\"JoeMayo,TwitterAPI\", status.OEmbedRelated);\n            Assert.AreEqual(\"en\", status.OEmbedLanguage);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string MultipleStatusResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"184374428111601664\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Mar 26 20:21:03 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184374428111601664,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Speaking at Twin Cities Code Camp: http:\\/\\/t.co\\/3tJz5vPW #tccc12\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":1,\n      \"\"id_str\"\":\"\"183620070084325376\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Sat Mar 24 18:23:30 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":183620070084325376,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Free ebook: Introducing Microsoft SQL Server 2012: http:\\/\\/t.co\\/VZ52WIZf\"\"\n   }\n]\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"ids\"\":[\n      34649740,\n      6411122,\n      106069564,\n      152318142,\n      72197816\n   ],\n   \"\"next_cursor\"\":123,\n   \"\"next_cursor_str\"\":\"\"123\"\",\n   \"\"previous_cursor\"\":456,\n   \"\"previous_cursor_str\"\":\"\"456\"\"\n}\";\n\n        const string OEmbedResponse = @\"{\n   \"\"cache_age\"\":\"\"3153600000\"\",\n   \"\"url\"\":\"\"https://twitter.com/JoeMayo/statuses/305050067973312514\"\",\n   \"\"height\"\":null,\n   \"\"provider_url\"\":\"\"https://twitter.com\"\",\n   \"\"provider_name\"\":\"\"Twitter\"\",\n   \"\"author_name\"\":\"\"Joe Mayo\"\",\n   \"\"version\"\":\"\"1.0\"\",\n   \"\"author_url\"\":\"\"https://twitter.com/JoeMayo\"\",\n   \"\"type\"\":\"\"rich\"\",\n   \"\"html\"\":\"\"some html\"\",\n   \"\"width\"\":550\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/TrendsTests/TrendRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.TrendTests\n{\n    [TestClass]\n    public class TrendRequestProcessorTests\n    {\n        public TrendRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Collects_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend>();\n            Expression<Func<Trend, bool>> expression =\n                trend =>\n                    trend.Type == TrendType.Available &&\n                    trend.WoeID == 1 &&\n                    trend.Latitude == 1.2 &&\n                    trend.Longitude == 3.4 &&\n                    trend.Exclude == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = trendReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"WoeID\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", \"1.2\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", \"3.4\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Exclude\", \"True\")));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = TrendType.Place,\n                Exclude = true,\n                Latitude = 1.1,\n                Longitude = 2.2,\n                WoeID = 1\n            };\n\n            var trends = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.IsNotNull(trends);\n            Assert.IsTrue(trends.Any());\n            var trend = trends.First();\n            Assert.IsNotNull(trend);\n            Assert.IsTrue(trend.Exclude);\n            Assert.AreEqual(1.1, trend.Latitude);\n            Assert.AreEqual(2.2, trend.Longitude);\n            Assert.AreEqual(1, trend.WoeID);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_Available_Trends()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_AvailableTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_ClosestTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/closest.json?lat=37.78215&long=-122.40060\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Closest).ToString(CultureInfo.InvariantCulture) },\n                    { \"Latitude\", \"37.78215\" },\n                    { \"Longitude\", \"-122.40060\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Place_Trends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/place.json?id=1\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                    { \"WoeID\", \"1\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Place_Trends_WithoutWoeID()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"WoeID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_No_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Available()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Available };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            var trends = trendList.SingleOrDefault();\n            Assert.IsNotNull(trends);\n            var locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(2, locations.Count);\n            Location location = locations[0];\n            Assert.AreEqual(\"Country\", location.PlaceTypeName);\n            Assert.AreEqual(12, location.PlaceTypeNameCode);\n            Assert.AreEqual(\"Turkey\", location.Name);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/23424969\", location.Url);\n            Assert.AreEqual(23424969, location.WoeID);\n            Assert.AreEqual(\"TR\", location.CountryCode);\n            Assert.AreEqual(\"1\", location.ParentID);\n            Assert.AreEqual(\"Turkey\", location.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Closest()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Closest };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            var trends = trendList.SingleOrDefault();\n            Assert.IsNotNull(trends);\n            var locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(2, locations.Count);\n            Location location = locations[1];\n            Assert.IsNotNull(location);\n            Assert.AreEqual(\"Town\", location.PlaceTypeName);\n            Assert.AreEqual(7, location.PlaceTypeNameCode);\n            Assert.AreEqual(\"Birmingham\", location.Name);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/2364559\", location.Url);\n            Assert.AreEqual(2364559, location.WoeID);\n            Assert.AreEqual(\"US\", location.CountryCode);\n            Assert.AreEqual(\"23424977\", location.ParentID);\n            Assert.AreEqual(\"United States\", location.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Location()\n        {\n            var trendProc = new TrendRequestProcessor<Trend> { Type = TrendType.Place };\n\n            List<Trend> trendList = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            var trends = trendList.FirstOrDefault();\n            Assert.IsNotNull(trends);\n            var locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(1, locations.Count);\n            Location location = locations[0];\n            Assert.AreEqual(\"Worldwide\", location.Name);\n            Assert.AreEqual(1, location.WoeID);\n            Assert.AreEqual(\"%22Julianna%20Margulies%22\", trends.Query);\n            Assert.AreEqual(\"Julianna Margulies\", trends.Name);\n            Assert.IsNull(trends.PromotedContent);\n            Assert.AreEqual(\"http://twitter.com/search/%22Julianna%20Margulies%22\", trends.SearchUrl);\n            Assert.IsNull(trends.Events);\n            Assert.AreEqual(new DateTime(2011, 9, 19, 2, 4, 39), trends.AsOf);\n            Assert.AreEqual(new DateTime(2011, 9, 19, 2, 0, 17), trends.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>();\n\n            var trends = trendProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, trends.Count);\n        }\n\n        const string TestTrendQueryResponse = @\"[\n   {\n      \"\"as_of\"\":\"\"2011-09-19T02:04:39Z\"\",\n      \"\"locations\"\":[\n         {\n            \"\"name\"\":\"\"Worldwide\"\",\n            \"\"woeid\"\":1\n         }\n      ],\n      \"\"trends\"\":[\n         {\n            \"\"query\"\":\"\"%22Julianna%20Margulies%22\"\",\n            \"\"name\"\":\"\"Julianna Margulies\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Julianna%20Margulies%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%23ThingsThatGetMeUpset\"\",\n            \"\"name\"\":\"\"#ThingsThatGetMeUpset\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ThingsThatGetMeUpset\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%23ReasonsWeCantBeTogether\"\",\n            \"\"name\"\":\"\"#ReasonsWeCantBeTogether\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ReasonsWeCantBeTogether\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Peter%20Dinklage%22\"\",\n            \"\"name\"\":\"\"Peter Dinklage\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Peter%20Dinklage%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Connie%20Britton%22\"\",\n            \"\"name\"\":\"\"Connie Britton\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Connie%20Britton%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%23100BestGogoSongs\"\",\n            \"\"name\"\":\"\"#100BestGogoSongs\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23100BestGogoSongs\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Kyle%20Chandler%22\"\",\n            \"\"name\"\":\"\"Kyle Chandler\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Kyle%20Chandler%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Tony%20Gonzalez%22\"\",\n            \"\"name\"\":\"\"Tony Gonzalez\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Tony%20Gonzalez%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Drew%20Barrymore%22\"\",\n            \"\"name\"\":\"\"Drew Barrymore\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Drew%20Barrymore%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"query\"\":\"\"%22Elisabeth%20Moss%22\"\",\n            \"\"name\"\":\"\"Elisabeth Moss\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Elisabeth%20Moss%22\"\",\n            \"\"events\"\":null\n         }\n      ],\n      \"\"created_at\"\":\"\"2011-09-19T02:00:17Z\"\"\n   }\n]\";\n\n        const string TestAvailableOrClosestQueryResponse = @\"[\n   {\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Country\"\",\n         \"\"code\"\":12\n      },\n      \"\"name\"\":\"\"Turkey\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424969\"\",\n      \"\"woeid\"\":23424969,\n      \"\"countryCode\"\":\"\"TR\"\",\n      \"\"parentid\"\":1,\n      \"\"country\"\":\"\"Turkey\"\"\n   },\n   {\n      \"\"name\"\":\"\"Birmingham\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/2364559\"\",\n      \"\"parentid\"\":23424977,\n      \"\"woeid\"\":2364559,\n      \"\"countryCode\"\":\"\"US\"\",\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Town\"\",\n         \"\"code\"\":7\n      },\n      \"\"country\"\":\"\"United States\"\"\n   }\n]\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/UserTests/UserCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class UserCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public UserCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_WithRawResponse_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.ReportSpamAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(1);\n\n            execMock.Verify(exec =>\n                exec.PostToTwitterAsync<User>(\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_Throws_On_Null_ScreenName()\n        {\n            const string ExpectedParamName = \"screenName\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.ReportSpamAsync((string)null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_Throws_On_Zero_UserID()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.ReportSpamAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n        \n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/UserTests/UserRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.UserTests\n{\n    [TestClass]\n    public class UserRequestProcessorTests\n    {\n        public UserRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_BannerSize_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/profile_banner.json?user_id=15411837&screen_name=JoeMayo\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_ScreenName_Or_UserID()\n        {\n            const string ExpectedParamName = \"ScreenNameOrUserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"15411837\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonNull_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", null },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonNull_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", null },\n                { \"ScreenName\", null }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"\" },\n                { \"ScreenName\", \"\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/show.json?user_id=15411837&screen_name=JoeMayo&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Null_UserID()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"UserID\", null }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"UserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Null_ScreenName()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"ScreenName\", null }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Categories_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions/technology/members.json\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.CategoryStatus).ToString() },\n                { \"Slug\", \"Technology\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Categores_Throws_On_Missing_Slug()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)UserType.CategoryStatus).ToString() },\n                        //{ \"Slug\", \"Technology\" }\n                    };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Slug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Categories_Constructs_Url_For_Lang_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions.json?lang=it\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Categories).ToString() },\n                { \"Lang\", \"it\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Category_Constructs_Url_For_Slug_And_Lang_Params()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions/twitter.json?lang=it\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Category).ToString() },\n                { \"Slug\", \"twitter\" },\n                { \"Lang\", \"it\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Category_Thows_On_Missing_Slug()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Category).ToString() },\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Slug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Constructs_Url_With_ScreenNameList_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?screen_name=JoeMayo%2CLinqToTweeter\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"ScreenNameList\", \"JoeMayo,LinqToTweeter\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Constructs_Url_With_UserIDList_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?user_id=1%2C2\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"UserIdList\", \"1,2\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Throws_On_Missing_ScreenName()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Throws_On_Both_UserID_And_ScreenName_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"ScreenName\", \"JoeMayo,LinqToTweeter\" },\n                { \"UserID\", \"1,2\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/search.json?q=Joe%20Mayo&page=2&count=10&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n                { \"Query\", \"Joe Mayo\" },\n                { \"Page\", \"2\" },\n                { \"Count\", \"10\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Search_Throws_On_Missing_Query()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Contributees_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributees.json?screen_name=JoeMayo&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributees).ToString() },\n                //{ \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Contributors_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributors.json?user_id=123&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributors).ToString() },\n                { \"UserID\", \"123\" },\n                //{ \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Lookup_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?user_id=1%2C2&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"UserIdList\", \"1,2\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Expression<Func<User, bool>> expression =\n            user =>\n                user.Type == UserType.Show &&\n                user.UserID == 10 &&\n                user.UserIdList == \"1,2\" &&\n                user.ScreenName == \"JoeMayo\" &&\n                user.ScreenNameList == \"JoeMayo,Linq2Tweeter\" &&\n                user.Cursor == 10819235 &&\n                user.Slug == \"twitter\" &&\n                user.Query == \"Joe Mayo\" &&\n                user.Page == 2 &&\n                user.Count == 10 &&\n                user.Lang == \"it\" &&\n                user.IncludeEntities == true &&\n                user.SkipStatus == true &&\n                user.ImageSize == ProfileImageSize.Mini;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)UserType.Show).ToString())));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserIdList\", \"1,2\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenNameList\", \"JoeMayo,Linq2Tweeter\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Cursor\", \"10819235\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Slug\", \"twitter\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Query\", \"Joe Mayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Page\", \"2\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Lang\", \"it\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ImageSize\", ((int)ProfileImageSize.Mini).ToString())));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var reqProc = new UserRequestProcessor<User> \n            { \n                Type = UserType.Show, \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                UserID = 123ul,\n                UserIdList = \"1,2\",\n                ScreenName = \"JoeMayo\",\n                ScreenNameList = \"JoeMayo,Linq2Tweeter\",\n                Page = 1,\n                Count = 10,\n                Cursor = 456,\n                Slug = \"myslug\",\n                Query = \"myquery\",\n                Lang = \"en-US\",\n                SkipStatus = true,\n                ImageSize = ProfileImageSize.Bigger,\n                IncludeEntities = true\n            };\n\n            List<User> users = reqProc.ProcessResults(SingleUserResponse);\n\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            var user = users.First();\n            Assert.AreEqual(123ul, user.UserID);\n            Assert.AreEqual(\"1,2\", user.UserIdList);\n            Assert.AreEqual(\"JoeMayo\", user.ScreenName);\n            Assert.AreEqual(\"JoeMayo,Linq2Tweeter\", user.ScreenNameList);\n            Assert.AreEqual(1, user.Page);\n            Assert.AreEqual(10, user.Count);\n            Assert.AreEqual(456L, user.Cursor);\n            Assert.AreEqual(\"myslug\", user.Slug);\n            Assert.AreEqual(\"myquery\", user.Query);\n            Assert.AreEqual(\"en-US\", user.Lang);\n            Assert.IsTrue(user.SkipStatus);\n            Assert.AreEqual(ProfileImageSize.Bigger, user.ImageSize);\n            Assert.IsTrue(user.IncludeEntities);\n        }\n\n        [TestMethod]\n        public void UserRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(reqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void UserRequestProcessor_Handles_Actions()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(reqProc, typeof(IRequestProcessorWithAction<User>));\n        }\n\n        void VerifySingleUserResponse(User user)\n        {\n            Assert.IsNotNull(user);\n            Assert.IsNotNull(user.BannerSizes);\n            Assert.IsFalse(user.BannerSizes.Any());\n            Assert.IsNotNull(user.Categories);\n            Assert.IsFalse(user.Categories.Any());\n            Assert.AreEqual(\"6253282\", user.UserIDResponse);\n            Assert.AreEqual(\"twitterapi\", user.ScreenNameResponse);\n            Assert.AreEqual(\"San Francisco, CA\", user.Location);\n            Assert.IsNotNull(user.Description);\n            Assert.IsTrue(user.Description.StartsWith(\"The Real Twitter API.\"));\n            Assert.AreEqual(\"http://dev.twitter.com\", user.Url);\n            Assert.IsFalse(user.Protected);\n            Assert.AreEqual(1009508, user.FollowersCount);\n            Assert.AreEqual(31, user.FriendsCount);\n            Assert.AreEqual(10361, user.ListedCount);\n            Assert.AreEqual(new DateTime(2007, 5, 23, 6, 1, 13), user.CreatedAt);\n            Assert.AreEqual(24, user.FavoritesCount);\n            Assert.AreEqual(-28800, user.UtcOffset);\n            Assert.AreEqual(\"Pacific Time (US & Canada)\", user.TimeZone);\n            Assert.IsTrue(user.GeoEnabled);\n            Assert.IsTrue(user.Verified);\n            Assert.AreEqual(3278, user.StatusesCount);\n            Assert.AreEqual(\"en\", user.LangResponse);\n            var status = user.Status;\n            Assert.IsNotNull(status);\n            Assert.AreEqual(\"web\", status.Source);\n            var contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsTrue(contributors.Any());\n            var contributor = contributors.First();\n            Assert.IsNotNull(contributor);\n            Assert.IsTrue(user.ContributorsEnabled);\n            Assert.IsFalse(user.IsTranslator);\n            Assert.AreEqual(\"E8F2F7\", user.ProfileBackgroundColor);\n            Assert.AreEqual(\"http://a0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrl);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrlHttps);\n            Assert.IsFalse(user.ProfileBackgroundTile);\n            Assert.AreEqual(\"http://a0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrl);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrlHttps);\n            Assert.AreEqual(\"0094C2\", user.ProfileLinkColor);\n            Assert.AreEqual(\"0094C2\", user.ProfileSidebarBorderColor);\n            Assert.AreEqual(\"A9D9F1\", user.ProfileSidebarFillColor);\n            Assert.AreEqual(\"437792\", user.ProfileTextColor);\n            Assert.IsTrue(user.ProfileUseBackgroundImage);\n            Assert.IsFalse(user.ShowAllInlineMedia);\n            Assert.IsFalse(user.DefaultProfile);\n            Assert.IsFalse(user.DefaultProfileImage);\n            Assert.IsFalse(user.Following);\n            Assert.IsFalse(user.FollowRequestSent);\n            Assert.IsFalse(user.Notifications);\n        }\n        \n        [TestMethod]\n        public void ProcessActionResult_Parses_SingleUser_Response()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            User user = reqProc.ProcessActionResult(SingleUserResponse, UserAction.SingleUser);\n\n            VerifySingleUserResponse(user);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<User> users = reqProc.ProcessResults(SingleUserResponse);\n\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            var user = users.First();\n            VerifySingleUserResponse(user);\n        }\n  \n        [TestMethod]\n        public void ProcessResults_Parses_Categories_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Categories, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(CategoriesResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.AreEqual(1, userList.Count);\n            var user = userList.Single();\n            Assert.IsNotNull(user);\n            var categories = user.Categories;\n            Assert.IsNotNull(categories);\n            Assert.IsTrue(categories.Any());\n            var category = categories.First();\n            Assert.IsNotNull(category);\n            Assert.AreEqual(106, category.Size);\n            Assert.AreEqual(\"Music\", category.Name);\n            Assert.AreEqual(\"music\", category.Slug);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Category_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Category, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(CategoryResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.AreEqual(1, userList.Count);\n            var user = userList.Single();\n            Assert.IsNotNull(user);\n            var categories = user.Categories;\n            Assert.IsNotNull(categories);\n            Assert.IsTrue(categories.Any());\n            var category = categories.First();\n            Assert.IsNotNull(category);\n            Assert.AreEqual(64, category.Size);\n            Assert.AreEqual(\"Funny\", category.Name);\n            Assert.AreEqual(\"funny\", category.Slug);\n            var users = category.Users;\n            Assert.IsNotNull(users);\n            Assert.IsTrue(users.Any());\n            var catUser = users.First();\n            Assert.IsNotNull(catUser);\n            Assert.AreEqual(\"OMG TestMethods\", catUser.Name);\n        }\n\n        void TestMultipleUserResponse(UserType type)\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = type, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(MultipleUserResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.IsTrue(userList.Any());\n            var user = userList.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"bbccff\", user.ProfileSidebarBorderColor);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_CategoryStatus_Response()\n        {\n            TestMultipleUserResponse(UserType.CategoryStatus);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Lookup_Response()\n        {\n            TestMultipleUserResponse(UserType.Lookup);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Search_Response()\n        {\n            TestMultipleUserResponse(UserType.Search);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Contributee_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributees);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Contributor_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributors);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_BannerSizes_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.BannerSizes, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(BannerSizesResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.IsTrue(userList.Any());\n            Assert.AreEqual(1, userList.Count);\n            var user = userList.Single();\n            Assert.IsNotNull(user);\n            var bannerSizes = user.BannerSizes;\n            Assert.IsNotNull(bannerSizes);\n            Assert.AreEqual(6, bannerSizes.Count);\n            var firstSize = bannerSizes.First();\n            Assert.IsNotNull(firstSize);\n            Assert.AreEqual(\"ipad_retina\", firstSize.Label);\n            Assert.AreEqual(1252, firstSize.Width);\n            Assert.AreEqual(626, firstSize.Height);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_banners/16761255/1355801341/ipad_retina\", firstSize.Url);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var userProc = new UserRequestProcessor<User> { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> users = userProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(users.Any());\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string CategoriesResponse = @\"[\n   {\n      \"\"size\"\":106,\n      \"\"name\"\":\"\"Music\"\",\n      \"\"slug\"\":\"\"music\"\"\n   },\n   {\n      \"\"size\"\":78,\n      \"\"name\"\":\"\"Sports\"\",\n      \"\"slug\"\":\"\"sports\"\"\n   },\n   {\n      \"\"size\"\":79,\n      \"\"name\"\":\"\"Entertainment\"\",\n      \"\"slug\"\":\"\"entertainment\"\"\n   }\n]\";\n\n        const string CategoryResponse = @\"{\n   \"\"size\"\":64,\n   \"\"name\"\":\"\"Funny\"\",\n   \"\"users\"\":[\n      {\n         \"\"id\"\":77888423,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/omg-TestMethods.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"006da8\"\",\n         \"\"statuses_count\"\":9494,\n         \"\"created_at\"\":\"\"Mon Sep 28 01:28:23 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-21600,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"friends_count\"\":7,\n         \"\"name\"\":\"\"OMG TestMethods\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":false,\n         \"\"profile_text_color\"\":\"\"332d2d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"OMGTestMethods\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"Chicago, Illinois\"\",\n         \"\"verified\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"ffffff\"\",\n         \"\"id_str\"\":\"\"77888423\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Central Time (US & Canada)\"\",\n         \"\"description\"\":\"\"The #1 TestMethod Site. For more TestMethods, follow:\\r\\n @OMGTestMethodsSex @OMGTestMethodsCelebs @OMGTestMethodsAnimals @OMGTestMethodsSports\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"f2f2f2\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"479ec9\"\",\n         \"\"listed_count\"\":32263,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":4042870\n      },\n      {\n         \"\"id\"\":25521487,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.danieltosh.com\\/\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"2FC2EF\"\",\n         \"\"statuses_count\"\":5219,\n         \"\"created_at\"\":\"\"Fri Mar 20 15:32:52 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"friends_count\"\":59,\n         \"\"name\"\":\"\"daniel tosh\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"666666\"\",\n         \"\"favourites_count\"\":6,\n         \"\"screen_name\"\":\"\"danieltosh\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"beach\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"181A1E\"\",\n         \"\"id_str\"\":\"\"25521487\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"description\"\":\"\"not a doctor\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"252429\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"1A1B1F\"\",\n         \"\"listed_count\"\":33001,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":5520666\n      },\n      {\n         \"\"id\"\":36686415,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"url\"\":\"\"http:\\/\\/www.zachgalifianakis.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"c5bbb5\"\",\n         \"\"statuses_count\"\":58,\n         \"\"created_at\"\":\"\"Thu Apr 30 15:19:13 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"friends_count\"\":0,\n         \"\"name\"\":\"\"zach galifianakis\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"e29d9d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"galifianakisz\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"north carolina\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"3b2511\"\",\n         \"\"id_str\"\":\"\"36686415\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Quito\"\",\n         \"\"description\"\":\"\"OFFICIAL ZACH GALIFIANAKIS\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"864711\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_color\"\":\"\"c9bea1\"\",\n         \"\"listed_count\"\":17016,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":1818218\n      }\n   ],\n   \"\"slug\"\":\"\"funny\"\"\n}\";\n\n        const string MultipleUserResponse = @\"[\n   {\n      \"\"id\"\":20536157,\n      \"\"geo_enabled\"\":true,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":true,\n      \"\"url\"\":\"\"http:\\/\\/www.google.com\\/support\\/\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0000cc\"\",\n      \"\"statuses_count\"\":3416,\n      \"\"created_at\"\":\"\"Tue Feb 10 19:14:39 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"friends_count\"\":366,\n      \"\"name\"\":\"\"A Googler\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"000000\"\",\n      \"\"favourites_count\"\":131,\n      \"\"screen_name\"\":\"\"google\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Mountain View, CA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"bbccff\"\",\n      \"\"id_str\"\":\"\"20536157\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"News and updates from Google\"\",\n      \"\"profile_background_tile\"\":false,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"ebeff9\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 14:33:09 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"196970449412960257\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":126,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":196970449412960257,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"There's lots of data online. We're supporting journalists who research and report on it in innovative ways http:\\/\\/t.co\\/iSNFLbh9\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_color\"\":\"\"ffffff\"\",\n      \"\"listed_count\"\":76043,\n      \"\"contributors_enabled\"\":true,\n      \"\"followers_count\"\":4656496\n   },\n   {\n      \"\"id\"\":50393960,\n      \"\"geo_enabled\"\":false,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/www.thegatesnotes.com\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0084B4\"\",\n      \"\"statuses_count\"\":476,\n      \"\"created_at\"\":\"\"Wed Jun 24 18:44:10 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"friends_count\"\":107,\n      \"\"name\"\":\"\"Bill Gates\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"333333\"\",\n      \"\"favourites_count\"\":2,\n      \"\"screen_name\"\":\"\"BillGates\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Seattle, WA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n      \"\"id_str\"\":\"\"50393960\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"Sharing things I'm learning through my foundation work and other interests...\"\",\n      \"\"profile_background_tile\"\":true,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 22:39:58 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"197092962461696000\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":215,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":197092962461696000,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"You asked \\u201chow does your approach compare to 50 yrs of mixed results from NGOs\\u201d? #askbillg: http:\\/\\/t.co\\/LVuNXIDy\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_color\"\":\"\"C0DEED\"\",\n      \"\"listed_count\"\":90298,\n      \"\"contributors_enabled\"\":false,\n      \"\"followers_count\"\":6266743\n   }\n]\";\n\n        const string BannerSizesResponse = @\"{\n   \"\"sizes\"\":{\n      \"\"ipad_retina\"\":{\n         \"\"w\"\":1252,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad_retina\"\",\n         \"\"h\"\":626\n      },\n      \"\"mobile\"\":{\n         \"\"w\"\":320,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile\"\",\n         \"\"h\"\":160\n      },\n      \"\"web\"\":{\n         \"\"w\"\":520,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web\"\",\n         \"\"h\"\":260\n      },\n      \"\"web_retina\"\":{\n         \"\"w\"\":1040,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web_retina\"\",\n         \"\"h\"\":520\n      },\n      \"\"mobile_retina\"\":{\n         \"\"w\"\":640,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile_retina\"\",\n         \"\"h\"\":320\n      },\n      \"\"ipad\"\":{\n         \"\"w\"\":626,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad\"\",\n         \"\"h\"\":313\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/Vine/VineRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.MuteTests\n{\n    [TestClass]\n    public class VineRequestProcessorTests\n    {\n        public VineRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new VineRequestProcessor<Vine>();\n            Expression<Func<Vine, bool>> expression =\n                vine =>\n                    vine.Type == VineType.Oembed &&\n                    vine.ID == \"123\" &&\n                    vine.Url == \"https://www.vine.com/v/123\" &&\n                    vine.MaxWidth == 500 &&\n                    vine.MaxHeight == 500 &&\n                    vine.OmitScript == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)VineType.Oembed).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Url\", \"https://www.vine.com/v/123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxWidth\", \"500\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxHeight\", \"500\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OmitScript\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Oembeds_Url()\n        {\n            const string ExpectedUrl = \"https://vine.co/oembed.json?id=Ml16lZVTTxe&url=https%3A%2F%2Fvine.co%2Fv%2FMl16lZVTTxe&max_width=500&max_height=500&omit_script=true\";\n            var reqProc = new VineRequestProcessor<Vine> { VineUrl = \"https://vine.co/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)VineType.Oembed).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"Ml16lZVTTxe\" },\n                        { \"Url\", \"https://vine.co/v/Ml16lZVTTxe\" },\n                        { \"MaxWidth\", 500.ToString() },\n                        { \"MaxHeight\", 500.ToString() },\n                        { \"OmitScript\", true.ToString() }\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Oembed_Response()\n        {\n            var reqProc = new VineRequestProcessor<Vine> { Type = VineType.Oembed };\n\n            List<Vine> vines = reqProc.ProcessResults(OembedResponse);\n\n            Assert.IsNotNull(vines);\n            Assert.IsNotNull(vines.SingleOrDefault());\n            var vine = vines.Single();\n            Assert.IsNotNull(vine);\n            Assert.AreEqual(1.0d, vine.Version);\n            Assert.AreEqual(\"video\", vine.TypeResponse);\n            Assert.AreEqual(3153600000, vine.CacheAge);\n            Assert.AreEqual(\"Vine\", vine.ProviderName);\n            Assert.AreEqual(\"https://vine.co/\", vine.ProviderUrl);\n            Assert.AreEqual(\"The White House\", vine.AuthorName);\n            Assert.AreEqual(\"https://vine.co/u/944054069482373120\", vine.AuthorUrl);\n            Assert.AreEqual(\"Marine One, ready for takeoff. \\ud83d\\ude81\", vine.Title);\n            Assert.AreEqual(\"https://v.cdn.vine.co/r/thumbs/3A1E5CC27C1116110482407841792_2.5.1.13603721890676705621.mp4.jpg?versionId=_B5dDtCI.ZNd_JLK_.sFmfpQq44iXdey\", vine.ThumbnailUrl);\n            Assert.AreEqual(480, vine.ThumbnailWidth);\n            Assert.AreEqual(480, vine.ThumbnailHeight);\n            Assert.IsTrue(vine.Html.StartsWith(\"<iframe\"));\n            Assert.AreEqual(600, vine.Width);\n            Assert.AreEqual(600, vine.Height);\n        }\n\n        const string OembedResponse = @\"{\n  \"\"version\"\": 1.0,\n  \"\"type\"\": \"\"video\"\",\n  \"\"cache_age\"\": 3153600000,\n  \"\"provider_name\"\": \"\"Vine\"\",\n  \"\"provider_url\"\": \"\"https://vine.co/\"\",\n  \"\"author_name\"\": \"\"The White House\"\",\n  \"\"author_url\"\": \"\"https://vine.co/u/944054069482373120\"\",\n\n  \"\"title\"\": \"\"Marine One, ready for takeoff. \\ud83d\\ude81\"\",\n\n  \"\"thumbnail_url\"\": \"\"https://v.cdn.vine.co/r/thumbs/3A1E5CC27C1116110482407841792_2.5.1.13603721890676705621.mp4.jpg?versionId=_B5dDtCI.ZNd_JLK_.sFmfpQq44iXdey\"\",\n  \"\"thumbnail_width\"\": 480,\n  \"\"thumbnail_height\"\": 480,\n  \"\"html\"\": \"\"<iframe class=\\\"\"vine-embed\\\"\" src=\\\"\"https://vine.co/v/Ml16lZVTTxe/embed/simple\\\"\" width=\\\"\"600\\\"\" height=\\\"\"600\\\"\" frameborder=\\\"\"0\\\"\"><\\/iframe><script async src=\\\"\"//platform.vine.co/static/scripts/embed.js\\\"\"><\\/script>\"\",\n  \"\"width\"\": 600,\n  \"\"height\"\": 600\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter4/Tests/LinqToTwitterPcl.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"net45\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"net45\" />\n  <package id=\"Moq\" version=\"4.2.1409.1722\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter5/.editorconfig",
    "content": "﻿[*.cs]\n\n# ConfigureAwaitChecker: CAC001\ndotnet_diagnostic.ConfigureAwaitChecker.severity = none\n\n# IDE0055: Fix formatting\ndotnet_diagnostic.IDE0055.severity = none\n\n# IDE0005: Using directive is unnecessary.\ndotnet_diagnostic.IDE0005.severity = suggestion\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/LinqToTwitter.AspNet.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.AspNet</RootNamespace>\n    <AssemblyName>LinqToTwitter.AspNet</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <Deterministic>true</Deterministic>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Owin.Security.Twitter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Owin.Security.Twitter.4.1.0\\lib\\net45\\Microsoft.Owin.Security.Twitter.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Net.Http.4.3.4\\lib\\net46\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n    <Reference Include=\"System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Algorithms.4.3.1\\lib\\net461\\System.Security.Cryptography.Algorithms.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Encoding.4.3.0\\lib\\net46\\System.Security.Cryptography.Encoding.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Primitives.4.3.0\\lib\\net46\\System.Security.Cryptography.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.X509Certificates.4.3.2\\lib\\net461\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Text.Encodings.Web, Version=4.0.5.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Text.Encodings.Web.4.7.2\\lib\\net461\\System.Text.Encodings.Web.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNet.Mvc.5.2.7\\lib\\net45\\System.Web.Mvc.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"LinqToTwitterAuthenticationProvider.cs\" />\n    <Compile Include=\"MvcAuthorizer.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SessionStateCredentialStore.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter.net\\LinqToTwitter.net.csproj\">\n      <Project>{8bea10cb-ff91-4d13-868d-2210ec2f8294}</Project>\n      <Name>LinqToTwitter.net</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"..\\LinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/LinqToTwitterAuthenticationProvider.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.Owin.Security.Twitter;\n\nnamespace LinqToTwitter\n{\n    public class LinqToTwitterAuthenticationProvider : TwitterAuthenticationProvider\n    {\n        public const string AccessToken = \"TwitterAccessToken\";\n        public const string AccessTokenSecret = \"TwitterAccessTokenSecret\";\n\n        public override Task Authenticated(TwitterAuthenticatedContext context)\n        {\n            context.Identity.AddClaims(\n                new List<Claim>\n                {\n                    new Claim(AccessToken, context.AccessToken),\n                    new Claim(AccessTokenSecret, context.AccessTokenSecret)\n                });\n\n            return base.Authenticated(context);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/MvcAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Web.Mvc;\n\nnamespace LinqToTwitter\n{\n    public class MvcAuthorizer : AspNetAuthorizer\n    {\n        private string _authUrl;\n\n        public async  Task<ActionResult> BeginAuthorizationAsync()\n        {\n            return await BeginAuthorizationAsync(Callback).ConfigureAwait(false);\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { _authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback, parameters).ConfigureAwait(false);\n\n            return new RedirectResult(_authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.AspNet\")]\n[assembly: AssemblyDescription(\"Types specific to ASP.NET.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LinqToTwitter.AspNet\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"1152db10-f205-4f4a-8a95-bdf3dbacefe2\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"5.1.3.0\")]\n[assembly: AssemblyFileVersion(\"5.1.3.0\")]\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/SessionStateCredentialStore.cs",
    "content": "﻿using System.Threading.Tasks;\nusing System.Web;\nusing System.Web.SessionState;\n\nnamespace LinqToTwitter\n{\n    public class SessionStateCredentialStore : InMemoryCredentialStore\n    {\n        readonly HttpSessionState session;\n\n        public SessionStateCredentialStore()\n        {\n            session = HttpContext.Current.Session;\n        }\n\n        public SessionStateCredentialStore(HttpSessionState session)\n        {\n            this.session = session;\n        }\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return session[\"OAuthConsumerKey\"] as string;\n            }\n            set\n            {\n                session[\"OAuthConsumerKey\"] = value;\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return session[\"OAuthConsumerSecret\"] as string;\n            }\n            set\n            {\n                session[\"OAuthConsumerSecret\"] = value;\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return session[\"OAuthToken\"] as string;\n            }\n            set\n            {\n                session[\"OAuthToken\"] = value;\n            }\n        }\n\n        public override string OAuthTokenSecret\n        {\n            get\n            {\n                return session[\"OAuthTokenSecret\"] as string;\n            }\n            set\n            {\n                session[\"OAuthTokenSecret\"] = value;\n            }\n        }\n\n        public override string ScreenName\n        {\n            get\n            {\n                return session[\"ScreenNameToken\"] as string;\n            }\n            set\n            {\n                session[\"ScreenNameToken\"] = value;\n            }\n        }\n\n        public override ulong UserID\n        {\n            get\n            {\n                return (ulong)(session[\"UserIdToken\"] ?? 0ul);\n            }\n            set\n            {\n                session[\"UserIdToken\"] = value;\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            ConsumerKey = null;\n            ConsumerSecret = null;\n            OAuthToken = null;\n            OAuthTokenSecret = null;\n            ScreenName = null;\n            UserID = 0ul;\n\n            return base.ClearAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.1.1.3\" newVersion=\"4.1.1.3\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.6.0\" newVersion=\"4.0.6.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Memory\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.1\" newVersion=\"4.0.1.1\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Buffers\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\" /></startup></configuration>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNet/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.AspNet.Mvc\" version=\"5.2.7\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.Razor\" version=\"3.2.7\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNet.WebPages\" version=\"3.2.7\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.AspNetCore.Http.Features\" version=\"3.1.7\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"3.1.7\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Owin\" version=\"4.2.2\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Owin.Security\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Owin.Security.Twitter\" version=\"4.1.0\" targetFramework=\"net461\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" targetFramework=\"net461\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net461\" />\n  <package id=\"Owin\" version=\"1.0\" targetFramework=\"net461\" />\n  <package id=\"System.Buffers\" version=\"4.5.1\" targetFramework=\"net461\" />\n  <package id=\"System.IO.Pipelines\" version=\"4.7.2\" targetFramework=\"net461\" />\n  <package id=\"System.Memory\" version=\"4.5.4\" targetFramework=\"net461\" />\n  <package id=\"System.Net.Http\" version=\"4.3.4\" targetFramework=\"net461\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.5.0\" targetFramework=\"net461\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.7.1\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Algorithms\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Encoding\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.X509Certificates\" version=\"4.3.2\" targetFramework=\"net461\" />\n  <package id=\"System.Text.Encodings.Web\" version=\"4.7.2\" targetFramework=\"net48\" />\n  <package id=\"System.Threading.Tasks.Extensions\" version=\"4.5.4\" targetFramework=\"net461\" />\n  <package id=\"System.ValueTuple\" version=\"4.5.0\" targetFramework=\"net461\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNetCore/LinqToTwitter.AspNetCore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n    <Description>A LINQ Provider for the Twitter API</Description>\n    <Version>5.1.3</Version>\n    <Authors>@JoeMayo</Authors>\n    <Product>LinqToTwitter.AspNetCore</Product>\n    <Company>LINQ to Twitter</Company>\n    <Copyright>Copyright ©  2020</Copyright>\n  </PropertyGroup>\n\n  <Import Project=\"..\\LinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems\" Label=\"Shared\" />\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Core\" Version=\"2.2.5\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter.Core\\LinqToTwitter.Core.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNetCore/MvcAuthorizer.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class MvcAuthorizer : AspNetAuthorizer\n    {\n        private string _authUrl;\n\n        public async  Task<ActionResult> BeginAuthorizationAsync()\n        {\n            return await BeginAuthorizationAsync(Callback).ConfigureAwait(false);\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { _authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback, parameters).ConfigureAwait(false);\n\n            return new RedirectResult(_authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNetCore/SessionStateCredentialStore.cs",
    "content": "﻿using Microsoft.AspNetCore.Http;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class SessionStateCredentialStore : InMemoryCredentialStore\n    {\n        readonly ISession session;\n\n        public SessionStateCredentialStore(ISession session)\n        {\n            this.session = session;\n        }\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return session.GetString(\"OAuthConsumerKey\");\n            }\n            set\n            {\n                session.SetString(\"OAuthConsumerKey\", value);\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuthConsumerSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuthConsumerSecret\", value);\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return session.GetString(\"OAuthToken\");\n            }\n            set\n            {\n                session.SetString(\"OAuthToken\", value);\n            }\n        }\n\n        public override string OAuthTokenSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuthTokenSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuthTokenSecret\", value);\n            }\n        }\n\n        public override string ScreenName\n        {\n            get\n            {\n                return session.GetString(\"ScreenNameToken\");\n            }\n            set\n            {\n                session.SetString(\"ScreenNameToken\", value);\n            }\n        }\n\n        public override ulong UserID\n        {\n            get\n            {\n                string userIDString = session.GetString(\"UserIdToken\") ?? \"0\";\n                ulong.TryParse(userIDString, out ulong userID);\n                return userID;\n            }\n            set\n            {\n                session.SetString(\"UserIdToken\", value.ToString());\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            ConsumerKey = null;\n            ConsumerSecret = null;\n            OAuthToken = null;\n            OAuthTokenSecret = null;\n            ScreenName = null;\n            UserID = 0ul;\n\n            return base.ClearAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNetStd/LinqToTwitter.AspNetStd.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <Version>5.1.3</Version>\n    <Authors>@JoeMayo</Authors>\n    <Company>LINQ to Twitter</Company>\n    <Description>A LINQ Provider for the Twitter API</Description>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Core\" Version=\"2.2.5\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Session\" Version=\"2.2.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter.netstandard\\LinqToTwitter.netstandard.csproj\" />\n  </ItemGroup>\n\n  <Import Project=\"..\\LinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems\" Label=\"Shared\" />\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNetStd/MvcAuthorizer.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class MvcAuthorizer : AspNetAuthorizer\n    {\n        private string _authUrl;\n\n        public async  Task<ActionResult> BeginAuthorizationAsync()\n        {\n            return await BeginAuthorizationAsync(Callback).ConfigureAwait(false);\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { _authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback, parameters).ConfigureAwait(false);\n\n            return new RedirectResult(_authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.AspNetStd/SessionStateCredentialStore.cs",
    "content": "﻿using Microsoft.AspNetCore.Http;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class SessionStateCredentialStore : InMemoryCredentialStore\n    {\n        readonly ISession session;\n\n        public SessionStateCredentialStore(ISession session)\n        {\n            this.session = session;\n        }\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return session.GetString(\"OAuthConsumerKey\");\n            }\n            set\n            {\n                session.SetString(\"OAuthConsumerKey\", value);\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuthConsumerSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuthConsumerSecret\", value);\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return session.GetString(\"OAuthToken\");\n            }\n            set\n            {\n                session.SetString(\"OAuthToken\", value);\n            }\n        }\n\n        public override string OAuthTokenSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuthTokenSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuthTokenSecret\", value);\n            }\n        }\n\n        public override string ScreenName\n        {\n            get\n            {\n                return session.GetString(\"ScreenNameToken\");\n            }\n            set\n            {\n                session.SetString(\"ScreenNameToken\", value);\n            }\n        }\n\n        public override ulong UserID\n        {\n            get\n            {\n                string userIDString = session.GetString(\"UserIdToken\") ?? \"0\";\n                ulong.TryParse(userIDString, out ulong userID);\n                return userID;\n            }\n            set\n            {\n                session.SetString(\"UserIdToken\", value.ToString());\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            ConsumerKey = null;\n            ConsumerSecret = null;\n            OAuthToken = null;\n            OAuthTokenSecret = null;\n            ScreenName = null;\n            UserID = 0ul;\n\n            return base.ClearAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Core/LinqToTwitter.Core.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n    <Version>5.1.3</Version>\n    <Authors>@JoeMayo</Authors>\n    <Company>LINQ to Twitter</Company>\n    <Product>LinqToTwitter.Core</Product>\n    <Description>A LINQ Provider for the Twitter API</Description>\n    <Copyright>Copyright ©  2020</Copyright>\n    <PackageProjectUrl></PackageProjectUrl>\n    <RepositoryUrl></RepositoryUrl>\n    <RepositoryType></RepositoryType>\n  </PropertyGroup>\n\n  <Import Project=\"..\\LinqToTwitter.Shared\\LinqToTwitter.Shared.projitems\" Label=\"Shared\" />\n\n  <Import Project=\"..\\LinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems\" Label=\"Shared\" />\n\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\n    <PackageReference Include=\"System.Reactive.Core\" Version=\"4.4.1\" />\n    <PackageReference Include=\"System.Reactive.Interfaces\" Version=\"4.4.1\" />\n    <PackageReference Include=\"System.Reactive.Linq\" Version=\"4.4.1\" />\n    <PackageReference Include=\"System.Reactive.PlatformServices\" Version=\"4.4.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/Account.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for account queries\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Account\n    {\n        /// <summary>\n        /// Type of account query (VerifyCredentials or Settings)\n        /// </summary>\n        public AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Includes the user's email address in response (requires whitelisting,\n        /// see https://dev.twitter.com/rest/reference/get/account/verify_credentials)\n        /// </summary>\n        public bool IncludeEmail { get; set; }\n\n        /// <summary>\n        /// User returned by VerifyCredentials Queries\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Current Totals\n        /// </summary>\n        public Totals Totals { get; set; }\n\n        /// <summary>\n        /// Account settings, such as trend location, geo enabled, and sleep time\n        /// </summary>\n        public Settings Settings { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/AccountAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum AccountAction\n    {\n        /// <summary>\n        /// Ends the session of the authenticating user\n        /// </summary>\n        EndSession,\n\n        /// <summary>\n        /// Populates new settings\n        /// </summary>\n        Settings\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/AccountRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// handles query processing for accounts\n    /// </summary>\n    public class AccountRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of account query (VerifyCredentials or Settings)\n        /// </summary>\n        internal AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include status in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Includes the user's email address in response (requires whitelisting,\n        /// see https://dev.twitter.com/rest/reference/get/account/verify_credentials)\n        /// </summary>\n        internal bool IncludeEmail { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Account>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\",\n                       \"IncludeEmail\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<AccountType>(parameters[TypeParam]);\n\n            switch (Type)\n            {\n                case AccountType.VerifyCredentials:\n                    return BuildVerifyCredentialsUrl(parameters);\n                case AccountType.Settings:\n                    return new Request(BaseUrl + \"account/settings.json\");\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n  \n        Request BuildVerifyCredentialsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"account/verify_credentials.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SkipStatus\") &&\n                RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n            {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEmail\"))\n            {\n                IncludeEmail = bool.Parse(parameters[\"IncludeEmail\"]);\n                urlParams.Add(new QueryParameter(\"include_email\", parameters[\"IncludeEmail\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms json into IQueryable of Account\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <returns>List of Account</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Account acct = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch (Type)\n                {\n                    case AccountType.Settings:\n                        acct = HandleSettingsResponse(responseJson);\n                        break;\n\n                    case AccountType.VerifyCredentials:\n                        acct = HandleVerifyCredentialsResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n\n                acct.Type = Type;\n                acct.SkipStatus = SkipStatus;\n                acct.IncludeEntities = IncludeEntities;\n                acct.IncludeEmail = IncludeEmail;\n            }\n\n            return new List<Account> { acct }.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            Account acct = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch ((AccountAction)theAction)\n                {\n                    case AccountAction.Settings:\n                        acct = HandleSettingsResponse(responseJson);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessActionResult should never execute because a Type must be specified.\");\n                }\n            }\n\n            return acct.ItemCast(default(T));\n        }\n\n        internal Account HandleSettingsResponse(string responseJson)\n        {\n            var settings = JsonMapper.ToObject(responseJson);\n            var sleepTime = settings.GetValue<JsonData>(\"sleep_time\");\n            var timeZone = settings.GetValue<JsonData>(\"time_zone\");\n            var trendLocationData = settings.GetValue<JsonData>(\"trend_location\");\n            var trendLocation = trendLocationData == null ? null : trendLocationData[0];\n\n            var acct = new Account\n            {\n                Type = Type,\n                Settings = new Settings\n                {\n                    TrendLocation = new Location(trendLocation),\n                    GeoEnabled = settings.GetValue<bool>(\"geo_enabled\"),\n                    SleepTime = new SleepTime(sleepTime),\n                    Language = settings.GetValue<string>(\"language\"),\n                    AlwaysUseHttps = settings.GetValue<bool>(\"always_use_https\"),\n                    DiscoverableByEmail = settings.GetValue<bool>(\"discoverable_by_email\"),\n                    DiscoverableByMobilePhone = settings.GetValue<bool>(\"discoverable_by_mobile_phone\"),\n                    TimeZone = new TZInfo(timeZone),\n                    ScreenName = settings.GetValue<string>(\"screen_name\"),\n                    UseCookiePersonalization = settings.GetValue<bool>(\"use_cookie_personalization\"),\n                    DisplaySensitiveMedia = settings.GetValue<bool>(\"display_sensitive_media\"),\n                    AllowContributorRequest = settings.GetValue<string>(\"allow_contributor_request\"),\n                    AllowDmsFrom = settings.GetValue<string>(\"allow_dms_from\"),\n                    AllowDmGroupsFrom = settings.GetValue<string>(\"allow_dm_groups_from\")\n                }\n            };\n\n\n            return acct;\n        }\n\n        private Account HandleVerifyCredentialsResponse(string responseJson)\n        {\n            var user = JsonMapper.ToObject(responseJson);\n\n            var acct = new Account\n            {\n                Type = Type,\n                User = new User(user)\n            };\n\n            return acct;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/AccountType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// actions for querying accounts\n    /// </summary>\n    public enum AccountType\n    {\n        /// <summary>\n        /// Gets trend, geo, and sleep settings\n        /// </summary>\n        Settings,\n\n        /// <summary>\n        /// Allows you to check user credentails\n        /// </summary>\n        VerifyCredentials\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/DeviceType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of device for account updates\n    /// </summary>\n    public enum DeviceType\n    {\n        /// <summary>\n        /// no device specified\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// use SMS text\n        /// </summary>\n        Sms,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/Settings.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Account Settings\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Settings\n    {\n        /// <summary>\n        /// Location to display trends for\n        /// </summary>\n        public Location TrendLocation { get; set; }\n\n        /// <summary>\n        /// Is Geo Tracking On?\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Times to not notify (i.e. when you're sleeping)\n        /// </summary>\n        public SleepTime SleepTime { get; set; }\n\n        /// <summary>\n        /// The user's UI language selection on Twitter\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Should they always use https protocol\n        /// </summary>\n        public bool AlwaysUseHttps { get; set; }\n\n        /// <summary>\n        /// Can this user be found by email address?\n        /// </summary>\n        public bool DiscoverableByEmail { get; set; }\n\n        /// <summary>\n        /// The user's timezone selection on Twitter\n        /// </summary>\n        public TZInfo TimeZone { get; set; }\n\n        /// <summary>\n        /// Account screen name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Use cookie personalization\n        /// </summary>\n        public bool UseCookiePersonalization { get; set; }\n\n        /// <summary>\n        /// Can other users find you on Twitter via your mobile phone\n        /// </summary>\n        public bool DiscoverableByMobilePhone { get; set; }\n\n        /// <summary>\n        /// User can see media marked as sensitive\n        /// </summary>\n        public bool DisplaySensitiveMedia { get; set; }\n\n        /// <summary>\n        /// Allow contributor requests\n        /// </summary>\n        public string AllowContributorRequest { get; set; }\n\n        /// <summary>\n        /// Who is allowed to send DMs\n        /// </summary>\n        public string AllowDmsFrom { get; set; }\n\n        /// <summary>\n        /// Who is allowed to send grouped DMs\n        /// </summary>\n        public string AllowDmGroupsFrom { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/SleepTime.cs",
    "content": "﻿using LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Times to stop and start sending notifications\n    ///     - Times are null when Enabled is false\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SleepTime\n    {\n        public SleepTime() {}\n        internal SleepTime(JsonData sleepTime)\n        {\n            StartHour = sleepTime.GetValue<int>(\"start_time\");\n            EndHour = sleepTime.GetValue<int>(\"end_time\");\n            Enabled = sleepTime.GetValue<bool>(\"enabled\");\n        }\n\n        /// <summary>\n        /// Stop sending notifications at this time\n        /// </summary>\n        public int? StartHour { get; set; }\n\n        /// <summary>\n        /// Resume sending notifications at this time\n        /// </summary>\n        public int? EndHour { get; set; }\n\n        /// <summary>\n        /// Is sleep times turned on\n        /// </summary>\n        public bool Enabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/TZInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Time zone informtion\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class TZInfo\n    {\n        public TZInfo() {}\n        internal TZInfo(JsonData timeZone)\n        {\n            Name = timeZone.GetValue<string>(\"name\");\n            TzInfoName = timeZone.GetValue<string>(\"tzinfo_name\");\n            UtcOffset = timeZone.GetValue<int>(\"utc_offset\");\n        }\n\n        /// <summary>\n        /// Human-readable timezone name\n        /// </summary>\n        /// <example>Pacific Time (US &amp; Canada)</example>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Rails/unix TZINFO name\n        /// </summary>\n        /// <example>America/Los_Angeles</example>\n        public string TzInfoName { get; set; }\n\n        /// <summary>\n        /// Seconds to subtract from UTC time\n        /// </summary>\n        /// <example>-28800</example>\n        public int? UtcOffset { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/Totals.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Current totals\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Totals\n    {\n        /// <summary>\n        /// Total Updates\n        /// </summary>\n        public int Updates { get; set; }\n\n        /// <summary>\n        /// Total Friends\n        /// </summary>\n        public int Friends { get; set; }\n\n        /// <summary>\n        /// Total Favorites\n        /// </summary>\n        public int Favorites { get; set; }\n\n        /// <summary>\n        /// Total Followers\n        /// </summary>\n        public int Followers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Account/TwitterContextAccountCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        const string NoInputParam = \"NoInput\";\n        const ulong NoMediaID = 0;\n        const byte[] NoImage = null;\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User info with new colors</returns>\n        [Obsolete(\"This twitter endpoint doesn't exist anymore\", error: true)] // TODO: remove after a few versions.\n        public async Task<User> UpdateAccountColorsAsync(string background, string text, string link, string sidebarFill, string sidebarBorder, bool skipStatus)\n        {\n            return await UpdateAccountColorsAsync(background, text, link, sidebarFill, sidebarBorder, true, skipStatus).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Update Twitter colors\n        /// </summary>\n        /// <remarks>\n        /// The # character prefix is optional.  At least one color argument must be provided.\n        /// </remarks>\n        /// <param name=\"background\">background color</param>\n        /// <param name=\"text\">text color</param>\n        /// <param name=\"link\">link color</param>\n        /// <param name=\"sidebarFill\">sidebar color</param>\n        /// <param name=\"sidebarBorder\">sidebar border color</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User info with new colors</returns>\n        [Obsolete(\"This twitter endpoint doesn't exist anymore\", error: true)] // TODO: remove after a few versions.\n        public async Task<User> UpdateAccountColorsAsync(string background, string text, string link, string sidebarFill, string sidebarBorder, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_colors.json\";\n\n            if (string.IsNullOrWhiteSpace(background) &&\n                string.IsNullOrWhiteSpace(text) &&\n                string.IsNullOrWhiteSpace(link) &&\n                string.IsNullOrWhiteSpace(sidebarFill) &&\n                string.IsNullOrWhiteSpace(sidebarBorder))\n                throw new ArgumentException(\"At least one of the colors (background, text, link, sidebarFill, or sidebarBorder) must be provided as arguments, but none are specified.\", NoInputParam);\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"profile_background_color\", string.IsNullOrWhiteSpace(background) ? null : background.TrimStart('#') },\n                        { \"profile_text_color\", string.IsNullOrWhiteSpace(text) ? null : text.TrimStart('#') },\n                        { \"profile_link_color\", string.IsNullOrWhiteSpace(link) ? null : link.TrimStart('#') },\n                        { \"profile_sidebar_fill_color\", string.IsNullOrWhiteSpace(sidebarFill) ? null : sidebarFill.TrimStart('#') },\n                        { \"profile_sidebar_border_color\", string.IsNullOrWhiteSpace(sidebarBorder) ? null : sidebarBorder.TrimStart('#') },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User> UpdateAccountImageAsync(byte[] image, string fileName, string imageType, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountImageAsync(image, fileName, imageType, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image file to Twitter to replace user image.\n        /// </summary>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User> UpdateAccountImageAsync(byte[] image, string fileName, string imageType, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_image.json\";\n\n            if (image == null || image.Length == 0)\n                throw new ArgumentException(\"image is required.\", \"image\");\n\n            if (string.IsNullOrWhiteSpace(fileName))\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n\n            if (string.IsNullOrWhiteSpace(imageType))\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n\n            var reqProc = new UserRequestProcessor<User>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    };\n\n            string name = \"image\";\n            string imageMimeType = \"image/\" + imageType;\n\n            RawResult = await TwitterExecutor.PostImageAsync(accountUrl, parameters, image, name, fileName, imageMimeType, cancelToken: cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public async Task<User> UpdateAccountProfileAsync(string name, string url, string location, string description, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountProfileAsync(name, url, location, description, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public async Task<User> UpdateAccountProfileAsync(string name, string url, string location, string description, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile.json\";\n\n            if (string.IsNullOrWhiteSpace(name) &&\n                string.IsNullOrWhiteSpace(url) &&\n                string.IsNullOrWhiteSpace(location) &&\n                string.IsNullOrWhiteSpace(description))\n                throw new ArgumentException(\"At least one of the text fields (name, email, url, location, or description) must be provided as arguments, but none are specified.\", NoInputParam);\n\n            if (!string.IsNullOrWhiteSpace(name) && name.Length > 50)\n                throw new ArgumentException(\"name must be no longer than 50 characters\", \"name\");\n\n            if (!string.IsNullOrWhiteSpace(url) && url.Length > 100)\n                throw new ArgumentException(\"url must be no longer than 100 characters\", \"url\");\n\n            if (!string.IsNullOrWhiteSpace(location) && location.Length > 30)\n                throw new ArgumentException(\"location must be no longer than 30 characters\", \"location\");\n\n            if (!string.IsNullOrWhiteSpace(description) && description.Length > 160)\n                throw new ArgumentException(\"description must be no longer than 160 characters\", \"description\");\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"name\", name },\n                        { \"url\", url },\n                        { \"location\", location },\n                        { \"description\", description },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Updates user's account settings\n        /// </summary>\n        /// <param name=\"trendLocationWeoid\">WEOID for Trend Location the user is interested in.</param>\n        /// <param name=\"sleepTimeEnabled\">Turn on time periods when notifications won't be sent.</param>\n        /// <param name=\"startSleepTime\">Don't send notifications at this time or later this time. (hour from 00 to 23)</param>\n        /// <param name=\"endSleepTime\">Start sending notifications again after this time. (hour from 00 to 23)</param>\n        /// <param name=\"timeZone\">User's time zone.</param>\n        /// <param name=\"lang\">User's language.</param>\n        /// <returns>Account information with Settings property populated.</returns>\n        public async Task<Account> UpdateAccountSettingsAsync(int? trendLocationWoeid, bool? sleepTimeEnabled, int? startSleepTime, int? endSleepTime, string timeZone, string lang, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/settings.json\";\n\n            if (trendLocationWoeid == null &&\n                sleepTimeEnabled == null &&\n                startSleepTime == null &&\n                endSleepTime == null &&\n                string.IsNullOrWhiteSpace(timeZone) &&\n                string.IsNullOrWhiteSpace(lang))\n                throw new ArgumentException(\"At least one parameter must be provided as arguments, but none are specified.\", NoInputParam);\n\n            var reqProc = new AccountRequestProcessor<Account>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"time_zone\", timeZone },\n                        { \"lang\", lang }\n                    };\n\n            if (trendLocationWoeid != null)\n                parameters.Add(\"trend_location_woeid\", trendLocationWoeid.ToString());\n            if (sleepTimeEnabled != null)\n                parameters.Add(\"sleep_time_enabled\", sleepTimeEnabled.ToString().ToLower());\n            if (startSleepTime != null)\n                parameters.Add(\"start_sleep_time\", startSleepTime.ToString());\n            if (endSleepTime != null)\n                parameters.Add(\"end_sleep_time\", endSleepTime.ToString());\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Account>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    parameters,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, AccountAction.Settings);\n        }\n\n        /// <summary>\n        /// Modify device information\n        /// </summary>\n        /// <param name=\"device\">Which device to use.</param>\n        /// <param name=\"includeEntitites\">Set this to false to not add entitites to response. (default: true)</param>\n        /// <returns></returns>\n        [Obsolete(\"This twitter endpoint doesn't exist anymore\", error: true)] // TODO: remove after a few versions.\n        public async Task<Account> UpdateDeliveryDeviceAsync(DeviceType device, bool? includeEntitites, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_delivery_device.json\";\n\n            var reqProc = new AccountRequestProcessor<Account>();\n\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"device\", device.ToString().ToLower() }\n                    };\n\n            if (includeEntitites != null)\n                parameters.Add(\"include_entities\", includeEntitites.ToString().ToLower());\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Account>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    parameters,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, AccountAction.Settings);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public async Task<User> UpdateProfileBannerAsync(byte[] banner, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateProfileBannerAsync(banner, 1500, 500, 0, 0, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"width\">Pixel width to clip image.</param>\n        /// <param name=\"height\">Pixel height to clip image.</param>\n        /// <param name=\"offsetLeft\">Pixels to offset start of image from the left.</param>\n        /// <param name=\"offsetTop\">Pixels to offset start of image from the top.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public async Task<User> UpdateProfileBannerAsync(byte[] banner, int width, int height, int offsetLeft, int offsetTop, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_banner.json\";\n\n            if (banner == null || banner.Length == 0)\n                throw new ArgumentException(\"banner is required.\", \"banner\");\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"width\", width.ToString() },\n                { \"height\", height.ToString() },\n                { \"offset_left\", offsetLeft.ToString() },\n                { \"offset_top\", offsetTop.ToString() },\n                { \"banner\", Convert.ToBase64String(banner) }\n            };\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult = await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(HttpMethod.Post.ToString(), accountUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Removes banner from authenticated user's profile.\n        /// </summary>\n        /// <returns>Empty User instance.</returns>\n        public async Task<User> RemoveProfileBannerAsync(CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/remove_profile_banner.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    new Dictionary<string, string>(),\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/AccountActivity/AccountActivity.cs",
    "content": "﻿using System.Xml.Serialization;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Account Activity support for Twitter chatbot messages.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class AccountActivity\n    {\n        /// <summary>\n        /// Input: ID for a webhook\n        /// </summary>\n        public ulong WebhookID { get; set; }\n\n        /// <summary>\n        /// Input: Url for adding a webhook\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Input (All Queries): Type of Account Activity\n        /// </summary>\n        public AccountActivityType Type { get; set; }\n\n        /// <summary>\n        /// Output: Indicates whether a user is subscribed. Populated via a subscription command or query.\n        /// </summary>\n        public SubscriptionValue SubscriptionValue { get; set; }\n\n        /// <summary>\n        /// Output: Webhooks response from Twitter. Populated via a webhook command or query.\n        /// </summary>\n        public WebhooksValue WebhooksValue { get; set; }\n    }\n\n    public class SubscriptionValue\n    {\n        /// <summary>\n        /// Indicates whether the authorizing user is subscribed to a Webhook.\n        /// </summary>\n        /// <exception cref=\"TwitterQueryException\">\n        /// Throws TwitterQueryException when an AddAccountActivitySubscriptionAsync fails.\n        /// </exception>\n        public bool IsSubscribed { get; set; }\n    }\n\n    public class AccountActivityValue\n    {\n        /// <summary>\n        /// Show and List queries populate this to show which app created the DM.\n        /// You need to use JSON.NET because the nested object ID is a property matching the app id, \n        /// which is different for every app, precluding the ability to assign a C# property.\n        /// </summary>\n        [JsonProperty(\"apps\")]\n        public JObject Apps { get; set; }\n\n        [JsonProperty(\"next_cursor\")]\n        public string NextCursor { get; set; }\n    }\n\n    public class WebhooksValue\n    {\n        public Webhook[] Webhooks { get; set; }\n    }\n\n    public class Webhook\n    {\n        /// <summary>\n        /// Webhook ID\n        /// </summary>\n        [JsonProperty(\"id\")]\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Webhook URL\n        /// </summary>\n        [JsonProperty(\"url\")]\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Did Webhook pass CRC\n        /// </summary>\n        [JsonProperty(\"valid\")]\n        public bool Valid { get; set; }\n\n        /// <summary>\n        /// UTC DateTime Webhook was created\n        /// </summary>\n        [JsonProperty(\"created_timestamp\")]\n        public string CreatedTimestamp { get; set; }\n    }\n\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/AccountActivity/AccountActivityRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class AccountActivityRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Account Activity\n        /// </summary>\n        public AccountActivityType Type { get; set; }\n\n        /// <summary>\n        /// ID for a webhook\n        /// </summary>\n        internal ulong WebhookID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<AccountActivity>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(WebhookID)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException($\"You must set {nameof(Type)}.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<AccountActivityType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case AccountActivityType.Subscriptions:\n                    return BuildSubscriptionsUrl(parameters);\n                case AccountActivityType.Webhooks:\n                    return BuildWebhooksUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\n                        $\"Didn't recognize '{Type}' for {nameof(Type)} parameter in AccountActivityRequestProcessor.BuildUrl.\");\n            }\n        }\n\n        Request BuildWebhooksUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"account_activity/webhooks.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            return req;\n        }\n\n        Request BuildSubscriptionsUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(WebhookID)))\n                throw new ArgumentNullException(nameof(WebhookID), $\"{nameof(WebhookID)} is required.\");\n\n            WebhookID = ulong.Parse(parameters[nameof(WebhookID)]);\n\n            var req = new Request(BaseUrl + $\"account_activity/webhooks/{WebhookID}/subscriptions.json\");\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<AccountActivity> accActList;\n\n            switch (Type)\n            {\n                case AccountActivityType.Subscriptions:\n                    accActList = HandleSubscriptions(responseJson);\n                    break;\n                case AccountActivityType.Webhooks:\n                    accActList = HandleWebhooks(responseJson);\n                    break;\n                default:\n                    accActList = new List<AccountActivity>();\n                    break;\n            }\n\n            return accActList.OfType<T>().ToList();\n        }\n\n        IEnumerable<AccountActivity> HandleSubscriptions(string accActJson)\n        {\n            return new List<AccountActivity>\n            {\n                new AccountActivity\n                {\n                    Type = Type,\n                    WebhookID = WebhookID,\n                    SubscriptionValue = new SubscriptionValue { IsSubscribed = true }\n                }\n            };\n        }\n        IEnumerable<AccountActivity> HandleWebhooks(string accActJson)\n        {\n            Webhook[] webhooks = JsonConvert.DeserializeObject<Webhook[]>(accActJson);\n\n            return new List<AccountActivity> \n            { \n                new AccountActivity\n                {\n                    Type = Type,\n                    WebhookID = WebhookID,\n                    WebhooksValue = new WebhooksValue\n                    {\n                        Webhooks = webhooks\n                    }\n                }\n            };\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var accAct = new AccountActivity();\n\n            if ((AccountActivityType)theAction == AccountActivityType.Webhooks)\n                accAct.WebhooksValue =\n                    new WebhooksValue\n                    {\n                        Webhooks =\n                            new Webhook[]\n                            {\n                                responseJson == null ?\n                                    new Webhook() :\n                                    JsonConvert.DeserializeObject<Webhook>(responseJson)\n                            }\n                    };\n            else if ((AccountActivityType)theAction == AccountActivityType.Subscriptions)\n                accAct.SubscriptionValue = new SubscriptionValue { IsSubscribed = true };\n\n            return accAct.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/AccountActivity/AccountActivityType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of account activity query\n    /// </summary>\n    public enum AccountActivityType\n    {\n        /// <summary>\n        /// all subscriptions\n        /// </summary>\n        Subscriptions,\n\n        /// <summary>\n        /// all webhooks\n        /// </summary>\n        Webhooks\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/AccountActivity/TwitterContextAccountActivityCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a user subscription to specified webhook\n        /// </summary>\n        /// <param name=\"webhookID\">ID of webhook user is subscribing to.</param>\n        /// <returns>Account Activity data.</returns>\n        /// <exception cref=\"TwitterQueryException\">\n        /// Throws TwitterQueryException when an AddAccountActivitySubscriptionAsync fails.\n        /// </exception>\n        public async Task<AccountActivity> AddAccountActivitySubscriptionAsync(ulong webhookID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (webhookID == default(ulong))\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}/subscriptions.json\";\n\n            var accActValue = new AccountActivityValue();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Subscriptions);\n\n            accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Adds a new webhook to account\n        /// </summary>\n        /// <param name=\"url\">Url of webhook.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity> AddAccountActivityWebhookAsync(string url, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(url))\n                throw new ArgumentException($\"{nameof(url)} must be set.\", nameof(url));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<AccountActivity>(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"url\", url }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Webhooks);\n\n            accAct.Url = url;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Sends a CRC check to a webhook for testing\n        /// </summary>\n        /// <param name=\"webhookID\">ID of webhook to send CRC to.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity> SendAccountActivityCrcAsync(ulong webhookID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (webhookID == default(ulong))\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}.json\";\n\n            var accActValue = new AccountActivityValue();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Webhooks);\n\n            accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Deletes a user subscription to specified webhook\n        /// </summary>\n        /// <param name=\"webhookID\">ID of webhook user is subscribing to.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity> DeleteAccountActivitySubscriptionAsync(ulong webhookID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (webhookID == default(ulong))\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}/subscriptions.json\";\n\n            var accActValue = new AccountActivityValue();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Subscriptions);\n\n            accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Deletes a new webhook to account\n        /// </summary>\n        /// <param name=\"webhookID\">Url of webhook.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity> DeleteAccountActivityWebhookAsync(ulong webhookID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (webhookID == default(ulong))\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}.json\";\n\n            var accActValue = new AccountActivity\n            {\n                WebhookID = webhookID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Webhooks);\n\n            accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Blocks/BlockingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum BlockingType\n    {\n        /// <summary>\n        /// Retrieve list of users (full User objects) being blocked\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Retrieve a list of IDs of users being blocked\n        /// </summary>\n        Ids\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Blocks/Blocks.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps retrieve information about blocks\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Blocks\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of blocks request to perform (input only)\n        /// </summary>\n        public BlockingType Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name (input only)\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id (input only)\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve (input only)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        public int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        public string Cursor { get; set; }\n\n        //\n        // Output parameters\n        //\n\n        /// <summary>\n        /// Prev/Next cursor to move through ID and User lists.\n        /// </summary>\n        public Cursors Cursors { get; set; }\n\n        /// <summary>\n        /// Listed Count\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// List of blocked IDs\n        /// </summary>\n        public List<string> IDs { get; set; }\n\n        /// <summary>\n        /// user being blocked\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Populated for blocking queries, showing all blocked users\n        /// </summary>\n        public List<User> Users { get; set; }\n\n        /// <summary>\n        /// Twitter response for no block on specified user\n        /// </summary>\n        public TwitterHashResponse NoBlock { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Blocks/BlocksRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes block queries\n    /// </summary>\n    public class BlocksRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of blocks request to perform\n        /// </summary>\n        internal BlockingType Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        internal int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Blocks>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Page\",\n                       \"PerPage\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\",\n                       \"Cursor\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<BlockingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case BlockingType.List:\n                    return BuildListUrl(parameters);\n                case BlockingType.Ids:\n                    return BuildBlockingIDsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting blocking ids\n        /// </summary>\n        /// <returns>base url + show segment</returns>\n        Request BuildBlockingIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/ids.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of blocked users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"PerPage\"))\n            {\n                PerPage = int.Parse(parameters[\"PerPage\"]);\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"PerPage\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <returns>List of Blocks</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            var blocks = new Blocks\n            {\n                Type = Type,\n                UserID = UserID,\n                ScreenName = ScreenName,\n                Page = Page,\n                PerPage = PerPage,\n                IncludeEntities = IncludeEntities,\n                SkipStatus = SkipStatus,\n                Cursor = Cursor\n            };\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                blocks.Users = new List<User>();\n            }\n            else\n            {\n                var blocksJson = JsonMapper.ToObject(responseJson);\n                blocks.Cursors = new Cursors(blocksJson);\n\n                switch (Type)\n                {\n                    case BlockingType.List:\n                        HandleList(blocks, blocksJson);\n                        break;\n                    case BlockingType.Ids:\n                        HandleBlockingIDs(blocks, blocksJson);\n                        break;\n                    default:\n                        throw new ArgumentException(\"Unhandled BlockingType.\");\n                }\n            }\n\n            return new List<Blocks> { blocks }.OfType<T>().ToList();\n        }\n\n        void HandleList(Blocks blocks, JsonData blocksJson)\n        {\n            var users = blocksJson.GetValue<JsonData>(\"users\");\n\n            blocks.Users =\n                (from JsonData user in users\n                 select new User(user))\n                .ToList();\n        }\n\n        void HandleBlockingIDs(Blocks blocks, JsonData blocksJson)\n        {\n            var ids = blocksJson.GetValue<JsonData>(\"ids\");\n\n            blocks.IDs =\n                (from JsonData id in ids\n                 select id.ToString())\n                .ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData blocksJson = JsonMapper.ToObject(responseJson);\n\n            var user = new User(blocksJson);\n\n            return user.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Blocks/TwitterContextBlockCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Blocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> CreateBlockAsync(ulong userID, string screenName, bool skipStatus)\n        {\n            return await CreateBlockAsync(userID, screenName, true, skipStatus).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Blocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> CreateBlockAsync(ulong userID, string screenName, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID <= 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName are required parameters.\", \"UserIDOrScreenName\");\n\n            var blocksUrl = BaseUrl + \"blocks/create.json\";\n\n            var reqProc = new BlocksRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    blocksUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID <= 0 ? (string)null : userID.ToString() },\n                        { \"screen_name\", screenName },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Unblocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> DestroyBlockAsync(ulong userID, string screenName, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DestroyBlockAsync(userID, screenName, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Unblocks a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to block</param>\n        /// <param name=\"screenName\">Screen name of user to block</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<User> DestroyBlockAsync(ulong userID, string screenName, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID <= 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName are required parameters.\", \"UserIDOrScreenName\");\n\n            var blocksUrl = BaseUrl + \"blocks/destroy.json\";\n\n            var reqProc = new BlocksRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    blocksUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID <= 0 ? (string)null : userID.ToString() },\n                        { \"screen_name\", screenName },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/BannerSize.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class BannerSize\n    {\n        public string Label { get; set; }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Culture.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Culture\n    {\n        static CultureInfo usCulture;\n\n        public static CultureInfo US\n        {\n            get\n            {\n                if (usCulture == null)\n                {\n                    usCulture = new CultureInfo(\"en-US\");\n                }\n\n                return usCulture;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Cursors.cs",
    "content": "﻿using System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter for previous and next pages\n    /// </summary>\n    /// <remarks>\n    /// To use a cursor, start by setting the cursor to -1\n    /// and then use one of these response cursors to move\n    /// backwards or forwards in paged results.\n    /// </remarks>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Cursors\n    {\n        public Cursors() {}\n        internal Cursors(JsonData cursors)\n        {\n            Next = cursors.GetValue<long>(\"next_cursor\");\n            Previous = cursors.GetValue<long>(\"previous_cursor\");\n        }\n\n        /// <summary>\n        /// Use this value to retrieve the next page\n        /// </summary>\n        [XmlIgnore]\n        public long Next { get; internal set; }\n\n        /// <summary>\n        /// Use this value to go back to the previous page\n        /// </summary>\n        [XmlIgnore]\n        public long Previous { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/DefaultJsonSerializer.cs",
    "content": "﻿using Newtonsoft.Json;\n\nnamespace LinqToTwitter.Shared.Common\n{\n    public class DefaultJsonSerializer : JsonSerializerSettings\n    {\n        public DefaultJsonSerializer()\n        {\n            NullValueHandling = NullValueHandling.Ignore;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/AspectRatio.cs",
    "content": "﻿using LitJson;\n\nnamespace LinqToTwitter\n{\n    public class AspectRatio\n    {\n        const int WidthIndex = 0;\n        const int HeightIndex = 1;\n\n        public AspectRatio() { }\n        public AspectRatio(JsonData aspectRatio)\n        {\n            if (aspectRatio == null) return;\n\n            Width = (int) aspectRatio[WidthIndex];\n            Height = (int) aspectRatio[HeightIndex];\n        }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/Entities.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Container for mention entities\n    /// </summary>\n    public class Entities\n    {\n        public Entities() { }\n        public Entities(JsonData entityJson)\n        {\n            if (entityJson == null)\n            {\n                HashTagEntities = new List<HashTagEntity>();\n                MediaEntities = new List<MediaEntity>();\n                UrlEntities = new List<UrlEntity>();\n                UserMentionEntities = new List<UserMentionEntity>();\n                SymbolEntities = new List<SymbolEntity>();\n\n                return;\n            }\n\n            JsonData hashTagEntities = entityJson.GetValue<JsonData>(\"hashtags\");\n            JsonData mediaEntities = entityJson.GetValue<JsonData>(\"media\");\n            JsonData urlEntities = entityJson.GetValue<JsonData>(\"urls\");\n            JsonData userEntities = entityJson.GetValue<JsonData>(\"user_mentions\");\n            JsonData symbolEntities = entityJson.GetValue<JsonData>(\"symbols\");\n            HashTagEntities =\n                hashTagEntities == null\n                    ? new List<HashTagEntity>()\n                    : (from JsonData hash in hashTagEntities\n                       let indices = hash.GetValue<JsonData>(\"indices\")\n                       select new HashTagEntity\n                       {\n                           Text = hash.GetValue<string>(\"text\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                       .ToList();\n            MediaEntities =\n                mediaEntities == null\n                    ? new List<MediaEntity>()\n                    : (from JsonData media in mediaEntities\n                       let indices = media.GetValue<JsonData>(\"indices\")\n                       let sizes = media.GetValue<JsonData>(\"sizes\")\n                       select new MediaEntity\n                       {\n                           DisplayUrl = media.GetValue<string>(\"display_url\"),\n                           ExpandedUrl = media.GetValue<string>(\"expanded_url\"),\n                           ID = media.GetValue<ulong>(\"id\"),\n                           AltText = media.GetValue<string>(\"ext_alt_text\"),\n                           Indices = new List<int> { (int)indices[0], (int)indices[1] },\n                           MediaUrl = media.GetValue<string>(\"media_url\"),\n                           MediaUrlHttps = media.GetValue<string>(\"media_url_https\"),\n                           Sizes =\n                               (from key in (sizes as IDictionary<string, JsonData>).Keys as List<string>\n                                let sizesKey = sizes.GetValue<JsonData>(key)\n                                select new PhotoSize\n                                {\n                                    Type = key,\n                                    Width = sizesKey.GetValue<int>(\"w\"),\n                                    Height = sizesKey.GetValue<int>(\"h\"),\n                                    Resize = sizesKey.GetValue<string>(\"resize\")\n                                })\n                               .ToList(),\n                           Type = media.GetValue<string>(\"type\"),\n                           Url = media.GetValue<string>(\"url\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0,\n                           VideoInfo = new VideoInfo(media.GetValue<JsonData>(\"video_info\")),\n                       })\n                       .ToList();\n            UrlEntities =\n                urlEntities == null\n                    ? new List<UrlEntity>()\n                    : (from JsonData url in urlEntities\n                       let indices = url.GetValue<JsonData>(\"indices\")\n                       select new UrlEntity\n                       {\n                           Url = url.GetValue<string>(\"url\"),\n                           DisplayUrl = url.GetValue<string>(\"display_url\"),\n                           ExpandedUrl = url.GetValue<string>(\"expanded_url\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n            UserMentionEntities =\n                userEntities == null\n                    ? new List<UserMentionEntity>()\n                    : (from JsonData user in userEntities\n                       let indices = user.GetValue<JsonData>(\"indices\")\n                       select new UserMentionEntity\n                       {\n                           ScreenName = user.GetValue<string>(\"screen_name\"),\n                           Name = user.GetValue<string>(\"name\"),\n                           Id = user.GetValue<ulong>(\"id\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n            SymbolEntities =\n                symbolEntities == null\n                    ? new List<SymbolEntity>()\n                    : (from JsonData user in symbolEntities\n                       let indices = user.GetValue<JsonData>(\"indices\")\n                       select new SymbolEntity\n                       {\n                           Text = user.GetValue<string>(\"text\"),\n                           Start = indices.Count > 0 ? (int)indices[0] : 0,\n                           End = indices.Count > 1 ? (int)indices[1] : 0\n                       })\n                      .ToList();\n        }\n\n        /// <summary>\n        /// Mentions of the user in the tweet\n        /// </summary>\n        [JsonProperty(\"user_mentions\")]\n        public List<UserMentionEntity> UserMentionEntities { get; set; }\n\n        /// <summary>\n        /// Url entities in the tweet\n        /// </summary>\n        [JsonProperty(\"urls\")]\n        public List<UrlEntity> UrlEntities { get; set; }\n\n        /// <summary>\n        /// Hash tag entities in the tweet\n        /// </summary>\n        [JsonProperty(\"hashtags\")]\n        public List<HashTagEntity> HashTagEntities { get; set; }\n\n        /// <summary>\n        /// Media entities in the tweet\n        /// </summary>\n        public List<MediaEntity> MediaEntities { get; set; }\n\n        /// <summary>\n        /// Symbol entities in the tweet\n        /// </summary>\n        [JsonProperty(\"symbols\")]\n        public List<SymbolEntity> SymbolEntities { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/EntityBase.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Base for all entities\n    /// </summary>\n    public abstract class EntityBase\n    {\n        /// <summary>\n        /// Start of the entity in the tweet\n        /// </summary>\n        public int Start { get; set; }\n\n        /// <summary>\n        /// End of the entity in the tweet\n        /// </summary>\n        public int End { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/HashTagEntity.cs",
    "content": "using Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Hash tag entity\n    /// </summary>\n    /// <example>#linqtotwitter</example>\n    public class HashTagEntity : EntityBase\n    {\n        /// <summary>\n        /// Tag name without the # sign\n        /// </summary>\n        [JsonProperty(\"text\")]\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where hashtag occurs.\n        /// </summary>\n        [JsonProperty(\"indices\")]\n        public int[] Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/MediaEntity.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    public class MediaEntity : UrlEntity\n    {\n        /// <summary>\n        /// ID of the media\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// URL where media is located\n        /// </summary>\n        public string MediaUrl { get; set; }\n\n        /// <summary>\n        /// Populated with media alt text, if available.\n        /// </summary>\n        public string AltText { get; set; }\n\n        /// <summary>\n        /// SSL version of media URL\n        /// </summary>\n        public string MediaUrlHttps { get; set; }\n\n        /// <summary>\n        /// Supported media sizes\n        /// </summary>\n        public List<PhotoSize> Sizes { get; set; }\n\n        /// <summary>\n        /// Type of media\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Character positions of extracted media\n        /// </summary>\n        public new List<int> Indices { get; set; }\n\n        public VideoInfo VideoInfo { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/SymbolEntity.cs",
    "content": "using Newtonsoft.Json;\nusing System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter symbol entity in the tweet\n    /// </summary>\n    /// <example>@linkedin</example>\n    public class SymbolEntity : EntityBase\n    {\n        /// <summary>\n        /// Symbol\n        /// </summary>\n        [JsonProperty(\"text\")]\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where symbol occurs.\n        /// </summary>\n        [JsonProperty(\"indices\")]\n        public int[] Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/UrlEntity.cs",
    "content": "using Newtonsoft.Json;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Url mention in the tweet\n    /// </summary>\n    /// <example>http://bit.ly/129Ad</example>\n    public class UrlEntity : EntityBase\n    {\n        /// <summary>\n        /// Absolute Url in the tweet\n        /// </summary>\n        [JsonProperty(\"url\")]\n        public string Url { get; set; }\n\n        /// <summary>\n        /// t.co shortened URL\n        /// </summary>\n        [JsonProperty(\"display_url\")]\n        public string DisplayUrl { get; set; }\n\n        /// <summary>\n        /// t.co expanded URL\n        /// </summary>\n        [JsonProperty(\"expanded_url\")]\n        public string ExpandedUrl { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where URL occurs.\n        /// </summary>\n        [JsonProperty(\"indices\")]\n        public int[] Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/UserMentionEntity.cs",
    "content": "using Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter user mention entity in the tweet\n    /// </summary>\n    /// <example>@JoeMayo</example>\n    public class UserMentionEntity : EntityBase\n    {\n        /// <summary>\n        /// Twitter user Id\n        /// </summary>\n        [JsonProperty(\"id\")]\n        public ulong Id { get; set; }\n\n        /// <summary>\n        /// Screen name of the Twitter User\n        /// </summary>\n        [JsonProperty(\"screen_name\")]\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Name of the Twitter User\n        /// </summary>\n        [JsonProperty(\"name\")]\n        public string Name { get; set; }\n\n        /// <summary>\n        /// String version of the ID\n        /// </summary>\n        [JsonProperty(\"id_str\")]\n        public string IdStr { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where user mention occurs.\n        /// </summary>\n        [JsonProperty(\"indices\")]\n        public int[] Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/Variant.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Variant\n    {\n        public Variant() { }\n        public Variant(JsonData variant)\n        {\n            BitRate = variant.GetValue<int>(\"bitrate\", defaultValue: 0);\n            ContentType = variant.GetValue<string>(\"content_type\");\n            Url = variant.GetValue<string>(\"url\");\n        }\n\n        public int BitRate { get; set; }\n\n        public string ContentType { get; set; }\n\n        public string Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Entities/VideoInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public class VideoInfo\n    {\n        public VideoInfo() { }\n        public VideoInfo(JsonData videoInfo)\n        {\n            AspectRatio = new AspectRatio(videoInfo.GetValue<JsonData>(\"aspect_ratio\"));\n            Duration = videoInfo.GetValue<int>(\"duration_millis\");\n            JsonData variants = videoInfo.GetValue<JsonData>(\"variants\");\n\n            if (variants != null && variants.Count > 0)\n                Variants =\n                    (from JsonData variant in videoInfo.GetValue<JsonData>(\"variants\")\n                     select new Variant(variant))\n                    .ToList();\n        }\n\n        /// <summary>\n        /// Width and Height\n        /// </summary>\n        public AspectRatio AspectRatio { get; set; }\n\n        /// <summary>\n        /// Duration in milliseconds\n        /// </summary>\n        public int Duration { get; set; }\n\n        /// <summary>\n        /// Available encodings/data streams\n        /// </summary>\n        public List<Variant> Variants { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Evaluator.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n#if !ASYNC\nusing LinqToTwitter.Common;\n#endif\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// translates variable references in expressions to constants\n    /// </summary>\n    public static class Evaluator\n    {\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <param name=\"fnCanBeEvaluated\">A function that decides whether a given expression node can be part of the local function.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression PartialEval(Expression expression, Func<Expression, bool> fnCanBeEvaluated)\n        {\n            return new SubtreeEvaluator(new Nominator(fnCanBeEvaluated).Nominate(expression)).Eval(expression);\n        }\n\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression PartialEval(Expression expression)\n        {\n            return PartialEval(expression, Evaluator.CanBeEvaluatedLocally);\n        }\n\n        private static bool CanBeEvaluatedLocally(Expression expression)\n        {\n            return expression.NodeType != ExpressionType.Parameter;\n        }\n\n        /// <summary>\n        /// Evaluates & replaces sub-trees when first candidate is reached (top-down)\n        /// </summary>\n        class SubtreeEvaluator : ExpressionVisitor\n        {\n            readonly HashSet<Expression> candidates;\n\n            internal SubtreeEvaluator(HashSet<Expression> candidates)\n            {\n                this.candidates = candidates;\n            }\n\n            internal Expression Eval(Expression exp)\n            {\n                return this.Visit(exp);\n            }\n\n            public override Expression Visit(Expression exp)\n            {\n                if (exp == null)\n                {\n                    return null;\n                }\n                if (this.candidates.Contains(exp))\n                {\n                    return this.Evaluate(exp);\n                }\n                return base.Visit(exp);\n            }\n\n            private Expression Evaluate(Expression e)\n            {\n                if (e.NodeType == ExpressionType.Constant)\n                {\n                    return e;\n                }\n                LambdaExpression lambda = Expression.Lambda(e);\n                Delegate fn = lambda.Compile();\n                return Expression.Constant(fn.DynamicInvoke(null), e.Type);\n            }\n        }\n\n        /// <summary>\n        /// Performs bottom-up analysis to determine which nodes can possibly\n        /// be part of an evaluated sub-tree.\n        /// </summary>\n        class Nominator : ExpressionVisitor\n        {\n            readonly Func<Expression, bool> fnCanBeEvaluated;\n            HashSet<Expression> candidates;\n            bool cannotBeEvaluated;\n\n            internal Nominator(Func<Expression, bool> fnCanBeEvaluated)\n            {\n                this.fnCanBeEvaluated = fnCanBeEvaluated;\n            }\n\n            internal HashSet<Expression> Nominate(Expression expression)\n            {\n                this.candidates = new HashSet<Expression>();\n                this.Visit(expression);\n                return this.candidates;\n            }\n\n            public override Expression Visit(Expression expression)\n            {\n                if (expression != null)\n                {\n                    bool saveCannotBeEvaluated = this.cannotBeEvaluated;\n                    this.cannotBeEvaluated = false;\n                    base.Visit(expression);\n                    if (!this.cannotBeEvaluated)\n                    {\n                        if (this.fnCanBeEvaluated(expression))\n                        {\n                            this.candidates.Add(expression);\n                        }\n                        else\n                        {\n                            this.cannotBeEvaluated = true;\n                        }\n                    }\n                    this.cannotBeEvaluated |= saveCannotBeEvaluated;\n                }\n                return expression;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/ExpressionTreeHelpers.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// utilities for working with expression trees\n    /// </summary>\n    internal class ExpressionTreeHelpers\n    {\n        /// <summary>\n        /// test to see if expression is a binary expression that checks equality with a constant value\n        /// - essentially, the caller wants to know if this is a well-formed expression with certain criteria\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">type containing member</param>\n        /// <param name=\"memberName\">member being checked</param>\n        /// <returns>true if member is being checked for equality with value</returns>\n        internal static bool IsMemberEqualsValueExpression(Expression exp, Type declaringType, string memberName)\n        {\n            if (exp.NodeType != ExpressionType.Equal &&\n                exp.NodeType != ExpressionType.NotEqual &&\n                exp.NodeType != ExpressionType.GreaterThan &&\n                exp.NodeType != ExpressionType.GreaterThanOrEqual &&\n                exp.NodeType != ExpressionType.LessThan &&\n                exp.NodeType != ExpressionType.LessThanOrEqual)\n                return false;\n\n            BinaryExpression be = (BinaryExpression)exp;\n\n            // Assert.\n            if (ExpressionTreeHelpers.IsSpecificMemberExpression(be.Left, declaringType, memberName) &&\n                ExpressionTreeHelpers.IsSpecificMemberExpression(be.Right, declaringType, memberName))\n                throw new Exception(\"Cannot have 'member' == 'member' in an expression!\");\n\n            return (ExpressionTreeHelpers.IsSpecificMemberExpression(be.Left, declaringType, memberName) ||\n                ExpressionTreeHelpers.IsSpecificMemberExpression(be.Right, declaringType, memberName));\n        }\n\n        /// <summary>\n        /// verify that the type and member name in the expression are what is expected\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">expected type</param>\n        /// <param name=\"memberName\">expected member name</param>\n        /// <returns>true if type and name in expression match expected type and name</returns>\n        internal static bool IsSpecificMemberExpression(Expression exp, Type declaringType, string memberName)\n        {\n            // adjust for enums or VB ConvertChecked\n            // VB wraps Type in a ConvertChecked that we must extract\n            Expression tempExp =\n                exp.NodeType == ExpressionType.Convert ||\n                exp.NodeType == ExpressionType.ConvertChecked ?\n                    (exp as UnaryExpression).Operand :\n                    exp;\n\n            return ((tempExp is MemberExpression) &&\n                (((MemberExpression)tempExp).Member.DeclaringType == declaringType) &&\n                (((MemberExpression)tempExp).Member.Name == memberName));\n        }\n\n        /// <summary>\n        /// extracts the constant value from a binary equals expression\n        /// - either the left or right side of the expression\n        /// </summary>\n        /// <param name=\"be\">binary expression</param>\n        /// <param name=\"memberDeclaringType\">type of object</param>\n        /// <param name=\"memberName\">member to get value for</param>\n        /// <returns>string representation of value</returns>\n        internal static string GetValueFromEqualsExpression(BinaryExpression be, Type memberDeclaringType, string memberName)\n        {\n            if (be.NodeType != ExpressionType.Equal &&\n                be.NodeType != ExpressionType.NotEqual &&\n                be.NodeType != ExpressionType.GreaterThan &&\n                be.NodeType != ExpressionType.GreaterThanOrEqual &&\n                be.NodeType != ExpressionType.LessThan &&\n                be.NodeType != ExpressionType.LessThanOrEqual)\n                throw new Exception(\"There is a bug in this program.\");\n\n            if (be.Left.NodeType == ExpressionType.MemberAccess ||\n                be.Left.NodeType == ExpressionType.Convert ||\n                be.Left.NodeType == ExpressionType.ConvertChecked)\n            {\n                // adjust for enums & VB ConvertChecked\n                MemberExpression me =\n                    be.Left.NodeType == ExpressionType.Convert ||\n                    be.Left.NodeType == ExpressionType.ConvertChecked ?\n                        (be.Left as UnaryExpression).Operand as MemberExpression :\n                        be.Left as MemberExpression;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                {\n                    return GetValueFromExpression(be.Right);\n                }\n            }\n            else if (be.Right.NodeType == ExpressionType.MemberAccess)\n            {\n                MemberExpression me = (MemberExpression)be.Right;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                {\n                    return GetValueFromExpression(be.Left);\n                }\n            }\n\n            // We should have returned by now.\n            throw new Exception(\"There is a bug in this program.\");\n        }\n\n        /// <summary>\n        /// converts constant expression to constant value\n        /// </summary>\n        /// <param name=\"expression\">constant expression</param>\n        /// <returns>constant value</returns>\n        internal static string GetValueFromExpression(Expression expression)\n        {\n            if (expression.NodeType == ExpressionType.Constant)\n                return ((ConstantExpression)expression).Value.ToString();\n            else if (expression.NodeType == ExpressionType.Convert || expression.NodeType == ExpressionType.ConvertChecked)\n                return ((int)((expression as UnaryExpression).Operand as ConstantExpression).Value).ToString();\n            else\n                throw new InvalidQueryException(\n                    String.Format(\"The expression type {0} is not supported to obtain a value.\", expression.NodeType));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/ExpressionTreeModifier.cs",
    "content": "﻿using System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    class ExpressionTreeModifier<T> : ExpressionVisitor\n    {\n        readonly IQueryable<T> queryableItems;\n\n        internal ExpressionTreeModifier(IQueryable<T> items)\n        {\n            queryableItems = items;\n        }\n\n        internal Expression CopyAndModify(Expression expression)\n        {\n            return Visit(expression);\n        }\n\n        protected override Expression VisitConstant(ConstantExpression c)\n        {\n            // Replace the constant TwitterQueryable arg with the queryable collection.\n            if (c.Type.Name == \"TwitterQueryable`1\")\n                return Expression.Constant(queryableItems);\n            \n            return c;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/ExpressionVisitor.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public abstract class ExpressionVisitor\n    {\n        public virtual Expression Visit(Expression exp)\n        {\n            if (exp == null)\n                return exp;\n\n            switch (exp.NodeType)\n            {\n                case ExpressionType.Negate:\n                case ExpressionType.NegateChecked:\n                case ExpressionType.Not:\n                case ExpressionType.Convert:\n                case ExpressionType.ConvertChecked:\n                case ExpressionType.ArrayLength:\n                case ExpressionType.Quote:\n                case ExpressionType.TypeAs:\n                    return this.VisitUnary((UnaryExpression)exp);\n                case ExpressionType.Add:\n                case ExpressionType.AddChecked:\n                case ExpressionType.Subtract:\n                case ExpressionType.SubtractChecked:\n                case ExpressionType.Multiply:\n                case ExpressionType.MultiplyChecked:\n                case ExpressionType.Divide:\n                case ExpressionType.Modulo:\n                case ExpressionType.And:\n                case ExpressionType.AndAlso:\n                case ExpressionType.Or:\n                case ExpressionType.OrElse:\n                case ExpressionType.LessThan:\n                case ExpressionType.LessThanOrEqual:\n                case ExpressionType.GreaterThan:\n                case ExpressionType.GreaterThanOrEqual:\n                case ExpressionType.Equal:\n                case ExpressionType.NotEqual:\n                case ExpressionType.Coalesce:\n                case ExpressionType.ArrayIndex:\n                case ExpressionType.RightShift:\n                case ExpressionType.LeftShift:\n                case ExpressionType.ExclusiveOr:\n                    return this.VisitBinary((BinaryExpression)exp);\n                case ExpressionType.TypeIs:\n                    return this.VisitTypeIs((TypeBinaryExpression)exp);\n                case ExpressionType.Conditional:\n                    return this.VisitConditional((ConditionalExpression)exp);\n                case ExpressionType.Constant:\n                    return this.VisitConstant((ConstantExpression)exp);\n                case ExpressionType.Parameter:\n                    return this.VisitParameter((ParameterExpression)exp);\n                case ExpressionType.MemberAccess:\n                    return this.VisitMemberAccess((MemberExpression)exp);\n                case ExpressionType.Call:\n                    return this.VisitMethodCall((MethodCallExpression)exp);\n                case ExpressionType.Lambda:\n                    return this.VisitLambda((LambdaExpression)exp);\n                case ExpressionType.New:\n                    return this.VisitNew((NewExpression)exp);\n                case ExpressionType.NewArrayInit:\n                case ExpressionType.NewArrayBounds:\n                    return this.VisitNewArray((NewArrayExpression)exp);\n                case ExpressionType.Invoke:\n                    return this.VisitInvocation((InvocationExpression)exp);\n                case ExpressionType.MemberInit:\n                    return this.VisitMemberInit((MemberInitExpression)exp);\n                case ExpressionType.ListInit:\n                    return this.VisitListInit((ListInitExpression)exp);\n                default:\n                    throw new Exception(string.Format(\"Unhandled expression type: '{0}'\", exp.NodeType));\n            }\n        }\n\n        protected virtual MemberBinding VisitBinding(MemberBinding binding)\n        {\n            switch (binding.BindingType)\n            {\n                case MemberBindingType.Assignment:\n                    return this.VisitMemberAssignment((MemberAssignment)binding);\n                case MemberBindingType.MemberBinding:\n                    return this.VisitMemberMemberBinding((MemberMemberBinding)binding);\n                case MemberBindingType.ListBinding:\n                    return this.VisitMemberListBinding((MemberListBinding)binding);\n                default:\n                    throw new Exception(string.Format(\"Unhandled binding type '{0}'\", binding.BindingType));\n            }\n        }\n\n        protected virtual ElementInit VisitElementInitializer(ElementInit initializer)\n        {\n            ReadOnlyCollection<Expression> arguments = this.VisitExpressionList(initializer.Arguments);\n\n            if (arguments != initializer.Arguments)\n            {\n                return Expression.ElementInit(initializer.AddMethod, arguments);\n            }\n\n            return initializer;\n        }\n\n        protected virtual Expression VisitUnary(UnaryExpression u)\n        {\n            Expression operand = this.Visit(u.Operand);\n\n            if (operand != u.Operand)\n            {\n                return Expression.MakeUnary(u.NodeType, operand, u.Type, u.Method);\n            }\n\n            return u;\n        }\n\n        protected virtual Expression VisitBinary(BinaryExpression b)\n        {\n            Expression left = this.Visit(b.Left);\n            Expression right = this.Visit(b.Right);\n            Expression conversion = this.Visit(b.Conversion);\n\n            if (left != b.Left || right != b.Right || conversion != b.Conversion)\n            {\n                if (b.NodeType == ExpressionType.Coalesce && b.Conversion != null)\n                    return Expression.Coalesce(left, right, conversion as LambdaExpression);\n                else\n                    return Expression.MakeBinary(b.NodeType, left, right, b.IsLiftedToNull, b.Method);\n            }\n\n            return b;\n        }\n\n        protected virtual Expression VisitTypeIs(TypeBinaryExpression b)\n        {\n            Expression expr = this.Visit(b.Expression);\n\n            if (expr != b.Expression)\n            {\n                return Expression.TypeIs(expr, b.TypeOperand);\n            }\n\n            return b;\n        }\n\n        protected virtual Expression VisitConstant(ConstantExpression c)\n        {\n            return c;\n        }\n\n        protected virtual Expression VisitConditional(ConditionalExpression c)\n        {\n            Expression test = this.Visit(c.Test);\n            Expression ifTrue = this.Visit(c.IfTrue);\n            Expression ifFalse = this.Visit(c.IfFalse);\n\n            if (test != c.Test || ifTrue != c.IfTrue || ifFalse != c.IfFalse)\n            {\n                return Expression.Condition(test, ifTrue, ifFalse);\n            }\n\n            return c;\n        }\n\n        protected virtual Expression VisitParameter(ParameterExpression p)\n        {\n            return p;\n        }\n\n        protected virtual Expression VisitMemberAccess(MemberExpression m)\n        {\n            Expression exp = this.Visit(m.Expression);\n\n            if (exp != m.Expression)\n            {\n                return Expression.MakeMemberAccess(exp, m.Member);\n            }\n\n            return m;\n        }\n\n        protected virtual Expression VisitMethodCall(MethodCallExpression m)\n        {\n            Expression obj = this.Visit(m.Object);\n            IEnumerable<Expression> args = this.VisitExpressionList(m.Arguments);\n\n            if (obj != m.Object || args != m.Arguments)\n            {\n                return Expression.Call(obj, m.Method, args);\n            }\n\n            return m;\n        }\n\n        protected virtual ReadOnlyCollection<Expression> VisitExpressionList(ReadOnlyCollection<Expression> original)\n        {\n            List<Expression> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                Expression p = this.Visit(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(p);\n                }\n                else if (p != original[i])\n                {\n                    list = new List<Expression>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(p);\n                }\n            }\n\n            if (list != null)\n            {\n                return new ReadOnlyCollection<Expression>(list);\n            }\n\n            return original;\n        }\n\n        protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assignment)\n        {\n            Expression e = this.Visit(assignment.Expression);\n\n            if (e != assignment.Expression)\n            {\n                return Expression.Bind(assignment.Member, e);\n            }\n\n            return assignment;\n        }\n\n        protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)\n        {\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(binding.Bindings);\n\n            if (bindings != binding.Bindings)\n            {\n                return Expression.MemberBind(binding.Member, bindings);\n            }\n\n            return binding;\n        }\n\n        protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)\n        {\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(binding.Initializers);\n\n            if (initializers != binding.Initializers)\n            {\n                return Expression.ListBind(binding.Member, initializers);\n            }\n\n            return binding;\n        }\n\n        protected virtual IEnumerable<MemberBinding> VisitBindingList(ReadOnlyCollection<MemberBinding> original)\n        {\n            List<MemberBinding> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                MemberBinding b = this.VisitBinding(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(b);\n                }\n                else if (b != original[i])\n                {\n                    list = new List<MemberBinding>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(b);\n                }\n            }\n\n            if (list != null)\n                return list;\n\n            return original;\n        }\n\n        protected virtual IEnumerable<ElementInit> VisitElementInitializerList(ReadOnlyCollection<ElementInit> original)\n        {\n            List<ElementInit> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                ElementInit init = this.VisitElementInitializer(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(init);\n                }\n                else if (init != original[i])\n                {\n                    list = new List<ElementInit>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(init);\n                }\n            }\n\n            if (list != null)\n                return list;\n\n            return original;\n        }\n\n        protected virtual Expression VisitLambda(LambdaExpression lambda)\n        {\n            Expression body = this.Visit(lambda.Body);\n\n            if (body != lambda.Body)\n            {\n                return Expression.Lambda(lambda.Type, body, lambda.Parameters);\n            }\n\n            return lambda;\n        }\n\n        protected virtual NewExpression VisitNew(NewExpression nex)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(nex.Arguments);\n\n            if (args != nex.Arguments)\n            {\n                if (nex.Members != null)\n                    return Expression.New(nex.Constructor, args, nex.Members);\n                else\n                    return Expression.New(nex.Constructor, args);\n            }\n\n            return nex;\n        }\n\n        protected virtual Expression VisitMemberInit(MemberInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(init.Bindings);\n\n            if (n != init.NewExpression || bindings != init.Bindings)\n            {\n                return Expression.MemberInit(n, bindings);\n            }\n\n            return init;\n        }\n\n        protected virtual Expression VisitListInit(ListInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(init.Initializers);\n\n            if (n != init.NewExpression || initializers != init.Initializers)\n            {\n                return Expression.ListInit(n, initializers);\n            }\n\n            return init;\n        }\n\n        protected virtual Expression VisitNewArray(NewArrayExpression na)\n        {\n            IEnumerable<Expression> exprs = this.VisitExpressionList(na.Expressions);\n\n            if (exprs != na.Expressions)\n            {\n                if (na.NodeType == ExpressionType.NewArrayInit)\n                {\n                    return Expression.NewArrayInit(na.Type.GetElementType(), exprs);\n                }\n                else\n                {\n                    return Expression.NewArrayBounds(na.Type.GetElementType(), exprs);\n                }\n            }\n\n            return na;\n        }\n\n        protected virtual Expression VisitInvocation(InvocationExpression iv)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(iv.Arguments);\n            Expression expr = this.Visit(iv.Expression);\n\n            if (args != iv.Arguments || expr != iv.Expression)\n            {\n                return Expression.Invoke(expr, args);\n            }\n\n            return iv;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/IDList.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with lists of IDs\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class IDList\n    {\n        public IDList() { }\n        public IDList(JsonData idJson)\n        {\n            if (idJson == null) return;\n\n            CursorMovement = new Cursors(idJson);\n            var ids = idJson.GetValue<JsonData>(\"ids\");\n            IDs =\n                (from JsonData id in ids\n                 select (ulong)id)\n                .ToList();\n        }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of IDs returned\n        /// </summary>\n        public List<ulong> IDs { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/IRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public interface IRequestProcessor<T>\n    {\n        string BaseUrl { get; set; }\n        Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression);\n        Request BuildUrl(Dictionary<string, string> expressionParameters);\n        List<T> ProcessResults(string twitterResponse);\n    }\n\n    // temporary marker interface used to communicate that this\n    // request processor wants native JSON objects.\n    public interface IRequestProcessorWantsJson\n    {\n    }\n\n    // Declare that this request processor knows how to handle action\n    // responses, implies the request processor also wants native JSON objects.\n    public interface IRequestProcessorWithAction<T>\n        : IRequestProcessorWantsJson\n    {\n        T ProcessActionResult(string twitterResponse, Enum theAction);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/InvalidQueryException.cs",
    "content": "﻿/*****************************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 5/2/09 -\n * \n * ReTestMethodored as standard exception: \n * \n *      - derives from Application\n *      - has standard exception constructors\n *      - beyond the type name, it looks nothing like the original\n *****************************************************************/\nusing System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// custom exception for handling bad queries\n    /// </summary>\n    public class InvalidQueryException : Exception\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public InvalidQueryException()\n            : this(\"Invalid query: reason not specified.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public InvalidQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public InvalidQueryException(string message, Exception inner)\n            : base(message, inner) { }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/L2TKeys.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// This is for constants that are used accross different classes and projects.\n    /// </summary>\n    public class L2TKeys\n    {\n        //\n        // HTTP Headers\n        //\n\n        public const string DefaultUserAgent = \"LINQ-To-Twitter/5.1\";\n\n        //\n        // Error handling\n        //\n\n        public const string FaqHelpUrl = \"https://github.com/JoeMayo/LinqToTwitter/wiki/LINQ-to-Twitter-FAQ\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/LinqExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public static class LinqExtensions\n    {\n        /// <summary>\n        /// Takes a single element and returns an IEnumerable of just that element.\n        /// </summary>\n        /// <typeparam name=\"T\">What kind of element we're enumerating</typeparam>\n        /// <param name=\"oneOff\">The one element in the resulting enumeration</param>\n        /// <returns>An IEnumerable that has one element (consisting of the oneOff parameter)</returns>\n        public static IEnumerable<T> ToEnumerable<T>(this T oneOff)\n        {\n            yield return oneOff;\n        }\n\n        public static TTo ItemCast<TFrom, TTo>(this TFrom item, TTo defaultValue)\n            where TTo: class\n        {\n            if (item is TTo)\n                return item as TTo;\n            else\n                return defaultValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/MethodCallExpressionTypeFinder.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Common\n{\n    internal class MethodCallExpressionTypeFinder : ExpressionVisitor\n    {\n        private Type genericType;\n\n        /// <summary>\n        /// Gets the underlying type of the whole method call expression\n        /// </summary>\n        /// <param name=\"exp\">MethodCallExpression</param>\n        /// <returns>Type</returns>\n        public Type GetGenericType(Expression exp)\n        {\n            Visit(exp);\n            return genericType;\n        }\n\n\n        /// <summary>\n        /// Sets the expression type when found\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (expression.Arguments.Count > 0)\n                genericType = expression.Method.GetGenericArguments()[0];\n\n            // look at extension source to see if there is an inner type\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/ParameterFinder.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// extracts parameters from an expression\n    /// - called for extracting parameters and values on where clauses\n    /// </summary>\n    /// <typeparam name=\"T\">type to get parameters for</typeparam>\n    internal class ParameterFinder<T> : ExpressionVisitor\n    {\n        /// <summary>\n        /// expression being searched\n        /// </summary>\n        private readonly Expression expression;\n\n        /// <summary>\n        /// parameters to search for\n        /// </summary>\n        private Dictionary<string, string> parameters;\n\n        /// <summary>\n        /// keep track of expression and parameter list\n        /// </summary>\n        /// <param name=\"exp\">expression to search</param>\n        /// <param name=\"parameters\">parameters to search for</param>\n        public ParameterFinder(Expression exp, List<string> parameters)\n        {\n            expression = exp;\n            ParameterNames = parameters;\n        }\n\n        /// <summary>\n        /// name/value pairs of parameters and their values\n        /// </summary>\n        public Dictionary<string, string> Parameters\n        {\n            get\n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    Visit(expression);\n                }\n                return parameters;\n            }\n        }\n\n        /// <summary>\n        /// names of input parameters\n        /// </summary>\n        public List<string> ParameterNames { get; set; }\n\n        /// <summary>\n        /// extracts values from equality expressions that match parameter names\n        /// </summary>\n        /// <param name=\"be\">binary expression to evaluate</param>\n        /// <returns>binary expression - supports recursive tree traversal in visitor</returns>\n        protected override Expression VisitBinary(BinaryExpression be)\n        {\n            if (be.NodeType == ExpressionType.Equal || \n                be.NodeType == ExpressionType.GreaterThan ||\n                be.NodeType == ExpressionType.GreaterThanOrEqual ||\n                be.NodeType == ExpressionType.LessThan ||\n                be.NodeType == ExpressionType.LessThanOrEqual ||\n                be.NodeType == ExpressionType.NotEqual)\n            {\n                foreach (var param in ParameterNames)\n                {\n                    if (ExpressionTreeHelpers.IsMemberEqualsValueExpression(be, typeof(T), param))\n                    {\n                        parameters.Add(param, ExpressionTreeHelpers.GetValueFromEqualsExpression(be, typeof(T), param));\n                        return be;\n                    }\n                }\n\n                return base.VisitBinary(be);\n            }\n            else\n                return base.VisitBinary(be);\n        }\n\n        protected override Expression VisitMethodCall(MethodCallExpression me)\n        {\n\n            foreach (var param in ParameterNames)\n            {\n                if (me.Method.Name == \"CompareString\" && (me.Arguments[0] as MemberExpression).Member.Name == param)\n                {\n                    parameters.Add(param, (me.Arguments[1] as ConstantExpression).Value.ToString());\n                    return me;\n                } \n            }\n\n            return base.VisitMethodCall(me);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/QueryParameter.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Provides an structure to hold the query parameters\n    /// </summary>\n    public class QueryParameter : IComparable<QueryParameter>, IComparable\n    {\n        private readonly string name = null;\n        private string value = null;\n\n        public QueryParameter(string name, string value)\n        {\n            this.name = name;\n            this.value = value;\n        }\n\n        public string Name\n        {\n            get { return name; }\n        }\n\n        public string Value\n        {\n            get { return value; }\n            internal set { this.value = value; }\n        }\n\n        public int CompareTo(object obj)\n        {\n            if (Object.ReferenceEquals(obj, null))\n                return Object.ReferenceEquals(this, null) ? 0 : 1;\n\n            var other = obj as QueryParameter;\n            return CompareTo(other);\n        }\n\n        public int CompareTo(QueryParameter other)\n        {\n            return defaultComparer.Compare(this, other);\n        }\n\n        public static IComparer<QueryParameter> defaultComparer = new QueryParameterComparer();\n    }\n\n    /// <summary>\n    /// Comparer class used to perform the sorting of the query parameters\n    /// </summary>\n    public class QueryParameterComparer : IComparer<QueryParameter>\n    {\n        public int Compare(QueryParameter x, QueryParameter y)\n        {\n            if (x.Name.Equals(y.Name))\n            {\n                return string.Compare(x.Value, y.Value);\n            }\n            else\n            {\n                return string.Compare(x.Name, y.Name);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/Request.cs",
    "content": "using LinqToTwitter.Net;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace LinqToTwitter\n{\n    public class Request\n    {\n        public string Endpoint { get; set; }\n        public IList<QueryParameter> RequestParameters { get; internal set; }\n\n        public Request(string endpoint)\n        {\n            this.Endpoint = endpoint;\n            this.RequestParameters = new List<QueryParameter>();\n        }\n\n        public string FullUrl\n        {\n            get\n            {\n                var queryString = this.QueryString;\n\n                if (queryString.Length > 0)\n                    return Endpoint + \"?\" + QueryString;\n                else return Endpoint;\n            }\n        }\n\n        public string QueryString\n        {\n            get\n            {\n                if (RequestParameters == null)\n                    throw new ArgumentNullException(\"parameters\");\n\n                StringBuilder builder = new StringBuilder();\n                foreach (var pair in RequestParameters.Where(p => !string.IsNullOrWhiteSpace(p.Value)))\n                {\n                    builder.Append(Url.PercentEncode(pair.Name));\n                    builder.Append('=');\n                    builder.Append(Url.PercentEncode(pair.Value));\n                    builder.Append('&');\n                }\n\n                if (builder.Length > 1)\n                    builder.Length--;   // truncate trailing &\n\n                return builder.ToString();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/RequestProcessorHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// reusable methods for all request processors\n    /// </summary>\n    internal class RequestProcessorHelper\n    {\n        /// <summary>\n        /// Some query parameters represent enum types. Different languages\n        /// handle such values in different ways when translating query expressions.\n        /// This method performs the conversion to the enum type regardless of whether\n        /// the parameter string represents an int value or a textual enum case name.\n        /// </summary>\n        /// <remarks>\n        /// Delphi and F# enums come to the IRequestProcessor as pneumonic strings,\n        /// but C# enums arrive as the underlying int type of the enum;\n        /// therefore, we must determine what we're working with to succeed.\n        /// </remarks>\n        /// <typeparam name=\"T\">Enum type to convert to</typeparam>\n        /// <param name=\"enumValue\">\n        /// Either a string enum member name (from Delphi Prism or F#)\n        /// or an underlying int value (from C#/VB)\n        /// </param>\n        /// <returns>Parameter value translated to the requested enum type</returns>\n        internal static T ParseEnum<T>(string enumValue)\n        {\n            return (T)Enum.Parse(typeof(T), enumValue, /*ignoreCase:*/ true);\n        }\n\n        /// <summary>\n        /// Determines if a parameter is true\n        /// </summary>\n        /// <param name=\"parameters\">Name/Value list of parameters</param>\n        /// <param name=\"key\">Name of parameter to check.</param>\n        /// <returns>Boolean value of parameter (false if value is false or not bool)</returns>\n        internal static bool FlagTrue(IDictionary<string, string> parameters, string key)\n        {\n            bool flag;\n\n            if (!bool.TryParse(parameters[key], out flag))\n                flag = false;\n\n            return flag;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TweetMode.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum TweetMode\n    {\n        /// <summary>\n        /// Traditional compatibility mode (default)\n        /// </summary>\n        Compat,\n\n        /// <summary>\n        /// New extended mode allows more characters in tweets with Mentions and URL suffix not counted.\n        /// </summary>\n        Extended\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TwitterAsyncResponse.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response info from an asynchronous Twitter request\n    /// </summary>\n    public class TwitterAsyncResponse<TState>\n    {\n        public TwitterAsyncResponse()\n        {\n            Status = TwitterErrorStatus.Success;\n            Message = \"Your request succeeded. Error property is null.\";\n        }\n\n        /// <summary>\n        /// You can check this value in the callback to\n        /// see if the request succeeded or failed\n        /// </summary>\n        public TwitterErrorStatus Status { get; set; }\n\n        /// <summary>\n        /// Additional info, specific to Status\n        /// </summary>\n        public string Message { get; set; }\n\n        /// <summary>\n        /// Will contain Exception if there was an error\n        /// </summary>\n        public Exception Exception { get; set; }\n\n        /// <summary>\n        /// Request specific info\n        /// </summary>\n        public TState State { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TwitterErrorStatus.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of result from processing an \n    /// asynchronous request to Twitter\n    /// </summary>\n    public enum TwitterErrorStatus\n    {\n        /// <summary>\n        /// No error\n        /// </summary>\n        Success,\n\n        /// <summary>\n        /// Error received from Twitter\n        /// </summary>\n        TwitterApiError,\n\n        /// <summary>\n        /// Error detected by LINQ to Twitter\n        /// while processing request\n        /// </summary>\n        RequestProcessingException,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TwitterHashResponse.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Response for HTTP errors and end response\n    /// </summary>\n    public class TwitterHashResponse\n    {\n        /// <summary>\n        /// URL action from request\n        /// </summary>\n        public string Request { get; set; }\n\n        /// <summary>\n        /// Response message\n        /// </summary>\n        public string Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TwitterProgressEventArgs.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Lets caller know the percentage of completion of operation\n    /// </summary>\n    public class TwitterProgressEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Percentage of completion\n        /// </summary>\n        public int PercentComplete { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TypeConversionExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Collections.Generic;\n\nusing LitJson;\n\nnamespace LinqToTwitter.Common\n{\n    public static class TypeConversionExtensions\n    {\n\n        public static ulong GetULong(this string val, ulong defaultValue /* = 0*/)\n        {\n            ulong result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !ulong.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this string val, double defaultValue /* = 0*/)\n        {\n            double result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !double.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        private static readonly string[] dateFormats = { \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n                                                         \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n                                                         \"yyyy-MM-dd HH:mm:ss\",\n                                                         \"yyyy-MM-dd HH:mm\"};\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            DateTime result;\n\n            return String.IsNullOrWhiteSpace(date) ||\n                !DateTime.TryParseExact(date,\n                        dateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string date, DateTime defaultValue)\n        {\n            var epochSeconds = date.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n            \n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n\n        public static DateTime GetEpochDateFromTimestamp(this string timestamp)\n        {\n            ulong.TryParse(timestamp, out ulong epochMilliseconds);\n            return EpochBase + +TimeSpan.FromMilliseconds(epochMilliseconds);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value))\n                return (T)value;\n\n            return default(T);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key, T defaultValue)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value))\n                return (T)value;\n            \n            return defaultValue;\n        }\n\n        public static T GetValue<T>(this JsonData data, string key)\n        {\n            return GetValue(data, key, default(T));\n        }\n\n        public static T GetValue<T>(this JsonData data, string key, T defaultValue)\n        {\n            object value = defaultValue;\n            if (data != null && data.InstObject != null && \n                data.InstObject.ContainsKey(key) && data.InstObject[key] != null)\n            {\n                var dataItem = data.InstObject[key] as IJsonWrapper;\n\n                string type = typeof (T).Name;\n                switch (type)\n                {\n                    case \"String\":\n                        value = dataItem.GetString();\n                        break;\n                    case \"Int32\":\n                        value = dataItem.GetInt();\n                        break;\n                    case \"Int64\":\n                        value = dataItem.GetLong();\n                        break;\n                    case \"Double\":\n                        value = dataItem.GetDouble();\n                        break;\n                    case \"Boolean\":\n                        value = dataItem.GetBoolean();\n                        break;\n                    case \"Decimal\":\n                        value = dataItem.GetDecimal();\n                        break;\n                    case \"UInt64\":\n                        value = dataItem.GetUlong();\n                        break;\n                    case \"JsonData\":\n                        value = data.InstObject[key];\n                        break;\n                    case \"Nullable`1\":\n                        if (typeof(T) == typeof(int?) && dataItem.IsInt) { value = dataItem.GetInt(); break; }\n                        if (typeof(T) == typeof(long?) && dataItem.IsLong) { value = dataItem.GetLong(); break; }\n                        if (typeof(T) == typeof(double?) && dataItem.IsDouble) { value = dataItem.GetDouble(); break; }\n                        if (typeof(T) == typeof(bool?) && dataItem.IsBoolean) { value = dataItem.GetBoolean(); break; }\n                        if (typeof(T) == typeof(decimal?) && dataItem.IsDecimal) { value = dataItem.GetDecimal(); break; }\n                        if (typeof(T) == typeof(ulong?) && dataItem.IsULong) { value = dataItem.GetUlong(); break; }\n                        break;\n                }\n            }\n\n            return (T)value;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/TypeSystem.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace LinqToTwitter\n{\n    internal static class TypeSystem\n    {\n//#if NETFX_CORE\n        internal static Type GetElementType(Type seqType)\n        {\n            Type ienum = FindIEnumerable(seqType);\n            if (ienum == null) return seqType;\n            return ienum.GenericTypeArguments[0];\n        }\n\n        private static Type FindIEnumerable(Type seqType)\n        {\n            TypeInfo seqTypeInfo = seqType.GetTypeInfo();\n            if (seqType == null || seqType == typeof(string))\n                return null;\n\n            if (seqTypeInfo.IsArray)\n                return typeof(IEnumerable<>).MakeGenericType(seqTypeInfo.GetElementType());\n\n            if (seqTypeInfo.IsGenericType)\n            {\n                foreach (Type arg in seqTypeInfo.GenericTypeArguments)\n                {\n                    Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n                    if (ienum.GetTypeInfo().IsAssignableFrom(seqTypeInfo))\n                    {\n                        return ienum;\n                    }\n                }\n            }\n\n            Type[] ifaces = seqTypeInfo.ImplementedInterfaces.ToArray();\n            if (ifaces != null && ifaces.Length > 0)\n            {\n                foreach (Type iface in ifaces)\n                {\n                    Type ienum = FindIEnumerable(iface);\n                    if (ienum != null) return ienum;\n                }\n            }\n\n            if (seqTypeInfo.BaseType != null && seqTypeInfo.BaseType != typeof(object))\n            {\n                return FindIEnumerable(seqTypeInfo.BaseType);\n            }\n\n            return null;\n        }\n//#else\n//        internal static Type GetElementType(Type seqType)\n//        {\n//            Type ienum = FindIEnumerable(seqType);\n//            if (ienum == null) return seqType;\n//            return ienum.GetGenericArguments()[0];\n//        }\n\n//        private static Type FindIEnumerable(Type seqType)\n//        {\n//            if (seqType == null || seqType == typeof(string))\n//                return null;\n\n//            if (seqType.IsArray)\n//                return typeof(IEnumerable<>).MakeGenericType(seqType.GetElementType());\n\n//            if (seqType.IsGenericType)\n//            {\n//                foreach (Type arg in seqType.GetGenericArguments())\n//                {\n//                    Type ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n//                    if (ienum.IsAssignableFrom(seqType))\n//                    {\n//                        return ienum;\n//                    }\n//                }\n//            }\n\n//            Type[] ifaces = seqType.GetInterfaces();\n//            if (ifaces != null && ifaces.Length > 0)\n//            {\n//                foreach (Type iface in ifaces)\n//                {\n//                    Type ienum = FindIEnumerable(iface);\n//                    if (ienum != null) return ienum;\n//                }\n//            }\n\n//            if (seqType.BaseType != null && seqType.BaseType != typeof(object))\n//            {\n//                return FindIEnumerable(seqType.BaseType);\n//            }\n\n//            return null;\n//        }\n//#endif\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Common/WhereClauseFinder.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// finds where clauses in the expression tree\n    /// </summary>\n    internal class WhereClauseFinder : ExpressionVisitor\n    {\n        static readonly string[] WhereMethodNames = { \"Where\", \"Single\", \"SingleOrDefault\", \"First\", \"FirstOrDefault\" };\n\n        // holds all where expressions\n        readonly List<MethodCallExpression> whereExpressions = new List<MethodCallExpression>();\n\n        /// <summary>\n        /// searches expression tree for wheres and returns collection of all it finds.\n        /// </summary>\n        /// <param name=\"expression\">query expression to search.</param>\n        /// <returns>collection of where expressions.</returns>\n        public MethodCallExpression[] GetAllWheres(Expression expression)\n        {\n            Visit(expression);\n            return whereExpressions.ToArray();\n        }\n\n        /// <summary>\n        /// custom processing of MethodCallExpression NodeType that checks for a\n        /// where clause and retains expression as member of list of where clauses.\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (WhereMethodNames.Contains(expression.Method.Name) && expression.Arguments.Count == 2)\n            {\n                whereExpressions.Add(expression);\n            }\n\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/DirectMessageEvents/DirectMessageEvents.cs",
    "content": "﻿using System.Xml.Serialization;\nusing Newtonsoft.Json;\nusing System;\nusing LinqToTwitter.Common;\nusing Newtonsoft.Json.Linq;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Direct message events support Twitter chatbot messages.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class DirectMessageEvents\n    {\n        /// <summary>\n        /// Input (List Query): Number of items to return for a single page.\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Input (List Query): Supports paging through results on List queries\n        /// </summary>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// Input (Show Query): ID of DM\n        /// </summary>\n        public ulong ID { get; set; }\n\n        ///// <summary>\n        ///// Input (New DM): ID of the user the DM is sent to\n        ///// </summary>\n        //public ulong RecipientID { get; set; }\n\n        ///// <summary>\n        ///// Input (New DM): DM contents\n        ///// </summary>\n        //public string Text { get; set; }\n\n        /// <summary>\n        /// Input (All Queries): Type of Direct Message Events\n        /// </summary>\n        public DirectMessageEventsType Type { get; set; }\n\n        /// <summary>\n        /// Output: Response from Twitter\n        /// </summary>\n        public DirectMessageEventsValue Value { get; set; }\n    }\n\n    public class DirectMessageEventsValue\n    {\n        /// <summary>\n        /// Twitter DM event container for a single event. e.g. Show query or NewDirectMessageEventAsync call\n        /// </summary>\n        [JsonProperty(\"event\")]\n        public DMEvent DMEvent { get; set; }\n\n        /// <summary>\n        /// Twitter DM event container for multiple events e.g. List query\n        /// </summary>\n        [JsonProperty(\"events\")]\n        public List<DMEvent> DMEvents { get; set; }\n\n        /// <summary>\n        /// Show and List queries populate this to show which app created the DM.\n        /// You need to use JSON.NET because the nested object ID is a property matching the app id, \n        /// which is different for every app, precluding the ability to assign a C# property.\n        /// </summary>\n        [JsonProperty(\"apps\")]\n        public JObject Apps { get; set; }\n\n        /// <summary>\n        /// ID for the next page or null if there isn't a next page\n        /// </summary>\n        [JsonProperty(\"next_cursor\")]\n        public string NextCursor { get; set; }\n    }\n\n    public class DMEvent\n    {\n        /// <summary>\n        /// Type of event: message_create for new DMs\n        /// </summary>\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n\n        /// <summary>\n        /// DM ID\n        /// </summary>\n        [JsonProperty(\"id\")]\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Milliseconds since 1/1/1970 00:00:00 when event was created\n        /// </summary>\n        [JsonProperty(\"created_timestamp\")]\n        public string CreatedTimestamp { get; set; }\n\n        /// <summary>\n        /// Twitter entity before this DM\n        /// </summary>\n        [JsonProperty(\"initiated_via\")]\n        public InitiatedVia InitiatedVia { get; set; }\n\n        /// <summary>\n        /// Twitter container for message and metadata\n        /// </summary>\n        [JsonProperty(\"message_create\")]\n        public DirectMessageCreate MessageCreate { get; set; }\n\n        DateTime createdAt;\n        /// <summary>\n        /// Helper property for C# DateTime matching CreatedTimestamp (so you don't have to convert it yourself)\n        /// </summary>\n        [JsonIgnore]\n        public DateTime CreatedAt\n        {\n            get\n            {\n                if (createdAt == default(DateTime))\n                    createdAt = CreatedTimestamp.GetEpochDateFromTimestamp();\n\n                return createdAt;\n            }\n        }\n    }\n\n    public class InitiatedVia\n    {\n        [JsonProperty(\"tweet_id\")]\n        public string TweetId { get; set; }\n        [JsonProperty(\"welcome_message_id\")]\n        public string WelcomeMessageId { get; set; }\n    }\n\n    public class DirectMessageCreate\n    {\n        /// <summary>\n        /// Who the DM is sent to\n        /// </summary>\n        [JsonProperty(\"target\")]\n        public DirectMessageTarget Target { get; set; }\n\n        /// <summary>\n        /// ID of person who sent the DM.\n        /// Populated for DM Show and List queries.\n        /// </summary>\n        [JsonProperty(\"sender_id\")]\n        public string SenderID { get; set; }\n\n        /// <summary>\n        /// ID of the application creating the DM\n        /// </summary>\n        [JsonProperty(\"source_app_id\")]\n        public string SourceAppID { get; set; }\n\n        /// <summary>\n        /// DM Contents\n        /// </summary>\n        [JsonProperty(\"message_data\")]\n        public DirectMessageData MessageData { get; set; }\n    }\n\n    public class DirectMessageTarget\n    {\n        /// <summary>\n        /// ID of person DM is sent to\n        /// </summary>\n        [JsonProperty(\"recipient_id\")]\n        public string RecipientID { get; set; }\n    }\n\n    public class DirectMessageData\n    {\n        /// <summary>\n        /// DM contents\n        /// </summary>\n        [JsonProperty(\"text\")]\n        public string Text { get; set; }\n\n        [JsonProperty(\"attachment\")]\n        public Attachment Attachment { get; set; }\n\n        /// <summary>\n        /// Extracted entities and indices in Text where they occur\n        /// </summary>\n        [JsonProperty(\"entities\")]\n        public Entities Entities { get; set; }\n\n        [JsonProperty(\"quick_reply\")]\n        public QuickReply QuickReply { get; set; }\n\n        [JsonProperty(\"ctas\")]\n        public IEnumerable<CallToAction> CallToActions { get; set; }\n    }\n\n    public class Attachment\n    {\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"location\")]\n        public DirectMessageEventLocation Location { get; set; }\n        [JsonProperty(\"media\")]\n        public DirectMessageMedia Media { get; set; }\n    }\n\n    public class DirectMessageEventLocation\n    {\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"shared_coordinate\")]\n        public SharedCoordinate SharedCoordinate { get; set; }\n        [JsonProperty(\"shared_place\")]\n        public SharedPlace SharedPlace { get; set; }\n    }\n\n    public class SharedCoordinate\n    {\n        [JsonProperty(\"coordinates\")]\n        public DirectMessageEventCoordinates Coordinates { get; set; }\n    }\n\n    public class DirectMessageEventCoordinates\n    {\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"coordinates\")]\n        public double[] Coordinates { get; set; }\n    }\n\n    public class SharedPlace\n    {\n        [JsonProperty(\"place\")]\n        public DirectMessageEventPlace Place { get; set; }\n    }\n\n    public class DirectMessageEventPlace\n    {\n        [JsonProperty(\"id\")]\n        public string Id { get; set; }\n    }\n\n    public class DirectMessageMedia\n    {\n        [JsonProperty(\"id\")]\n        public ulong Id { get; set; }\n        [JsonProperty(\"id_str\")]\n        public string IdStr { get; set; }\n        [JsonProperty(\"indices\")]\n        public int[] Indices { get; set; }\n        [JsonProperty(\"media_url\")]\n        public string MediaUrl { get; set; }\n        [JsonProperty(\"media_url_https\")]\n        public string MediaUrlHttps { get; set; }\n        [JsonProperty(\"url\")]\n        public string Url { get; set; }\n        [JsonProperty(\"display_url\")]\n        public string DisplayUrl { get; set; }\n        [JsonProperty(\"expanded_url\")]\n        public string ExpandedUrl { get; set; }\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"sizes\")]\n        public Sizes Sizes { get; set; }\n    }\n\n    public class Sizes\n    {\n        [JsonProperty(\"small\")]\n        public MediaSize Small { get; set; }\n        [JsonProperty(\"medium\")]\n        public MediaSize Medium { get; set; }\n        [JsonProperty(\"large\")]\n        public MediaSize Large { get; set; }\n        [JsonProperty(\"thumb\")]\n        public MediaSize Thumb { get; set; }\n    }\n\n    public class MediaSize\n    {\n        [JsonProperty(\"w\")]\n        public int Width { get; set; }\n        [JsonProperty(\"h\")]\n        public int Height { get; set; }\n        [JsonProperty(\"resize\")]\n        public string Resize { get; set; }\n    }\n\n    public class QuickReply\n    {\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"options\")]\n        public IEnumerable<QuickReplyOption> Options { get; set; }\n\n    }\n\n    public class QuickReplyOption\n    {\n        [JsonProperty(\"label\")]\n        public string Label { get; set; }\n        [JsonProperty(\"description\")]\n        public string Description { get; set; }\n        [JsonProperty(\"metadata\")]\n        public string Metadata { get; set; }\n    }\n\n    public class CallToAction\n    {\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"label\")]\n        public string Label { get; set; }\n        [JsonProperty(\"tco_url\")]\n        public string TcoUrl { get; set; }\n        [JsonProperty(\"url\")]\n        public string Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/DirectMessageEvents/DirectMessageEventsRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class DirectMessageEventsRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Direct Message Events\n        /// </summary>\n        internal DirectMessageEventsType Type { get; set; }\n\n        /// <summary>\n        /// Number of items to return for a single page.\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Supports paging through results on List queries\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// ID of DM\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<DirectMessageEvents>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Count),\n                       nameof(ID),\n                       nameof(Cursor)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException($\"You must set {nameof(Type)}.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<DirectMessageEventsType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case DirectMessageEventsType.List:\n                    return BuildListUrl(parameters);\n                case DirectMessageEventsType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\n                        $\"Didn't recognize '{Type}' for {nameof(Type)} parameter in DirectMessageEventsRequestProcessor.BuildUrl.\");\n            }\n        }\n\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(ID)))\n                throw new ArgumentNullException(nameof(ID), $\"{nameof(ID)} is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/events/show.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[nameof(ID)]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct messages\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"direct_messages/events/list.json\");\n            IList <QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(nameof(Count)))\n            {\n                Count = int.Parse(parameters[nameof(Count)]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Cursor)))\n            {\n                Cursor = parameters[nameof(Cursor)];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[nameof(Cursor)]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson))\n                return new List<T>();\n\n            IEnumerable<DirectMessageEvents> dmList;\n\n            switch (Type)\n            {\n                case DirectMessageEventsType.List:\n                case DirectMessageEventsType.Show:\n                    dmList = HandleDirectMessage(responseJson);\n                    break;\n                default:\n                    dmList = new List<DirectMessageEvents>();\n                    break;\n            }\n\n            return dmList.OfType<T>().ToList();\n        }\n\n        IEnumerable<DirectMessageEvents> HandleDirectMessage(string dmJson)\n        {\n            DirectMessageEventsValue dmEvent = JsonConvert.DeserializeObject<DirectMessageEventsValue>(dmJson);\n\n            return new List<DirectMessageEvents> \n            { \n                new DirectMessageEvents\n                {\n                    Type = Type,\n                    Count = Count,\n                    Cursor = Cursor,\n                    ID = ID,\n                    Value = dmEvent\n                }\n            };\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var dm = new DirectMessageEvents\n            {\n                Value = JsonConvert.DeserializeObject<DirectMessageEventsValue>(responseJson ?? \"\")\n            };\n\n            return dm.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/DirectMessageEvents/DirectMessageEventsType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of direct message events query\n    /// </summary>\n    public enum DirectMessageEventsType\n    {\n        /// <summary>\n        /// all direct message events\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// get a single direct message\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/DirectMessageEvents/TwitterContextDirectMessageEventsCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Sends a new direct message that attaches media.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"mediaId\">ID of an uploaded media.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> NewDirectMessageEventAsync(ulong recipientID, string text, ulong mediaId, CancellationToken cancelToken = default)\n        {\n            var attachment = new Attachment\n            {\n                Type = \"media\",\n                Media = new DirectMessageMedia\n                {\n                    Id = mediaId\n                }\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with lat/long location.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"latitude\">Latitude coordinate.</param>\n        /// <param name=\"longitude\">Longitude coordinate.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> NewDirectMessageEventAsync(ulong recipientID, string text, double latitude, double longitude, CancellationToken cancelToken = default)\n        {\n            var attachment = new Attachment\n            {\n                Type = \"location\",\n                Location = new DirectMessageEventLocation\n                {\n                    Type = \"shared_coordinate\",\n                    SharedCoordinate = new SharedCoordinate\n                    {\n                        Coordinates = new DirectMessageEventCoordinates\n                        {\n                            Type = \"Point\",\n                            Coordinates = new double[] { latitude, longitude }\n                        }\n                    }\n                }\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with place ID location.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"placeID\">ID of place (Tip: Use the Geo API if you don't already have a place ID)</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> NewDirectMessageEventAsync(ulong recipientID, string text, string placeID, CancellationToken cancelToken = default)\n        {\n            var attachment = new Attachment\n            {\n                Type = \"location\",\n                Location = new DirectMessageEventLocation\n                {\n                    Type = \"shared_place\",\n                    SharedPlace = new SharedPlace\n                    {\n                        Place = new DirectMessageEventPlace\n                        {\n                            Id = placeID\n                        }\n                    }\n                }\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message to specified user with just text.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> NewDirectMessageEventAsync(ulong recipientID, string text, CancellationToken cancelToken = default)\n        {\n            return await NewDirectMessageEventAsync(recipientID, text, attachment: null, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with options.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"options\">List of options for the user to choose from.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> RequestQuickReplyOptionsAsync(ulong recipientID, string text, IEnumerable<QuickReplyOption> options, CancellationToken cancelToken = default)\n        {\n            var quickReply = new QuickReply\n            {\n                Type = \"options\",\n                Options = options\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment: null, quickReply: quickReply, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with buttons.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"callToActions\">List of Call to Action, which creates buttons in the message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> RequestButtonChoiceAsync(ulong recipientID, string text, IEnumerable<CallToAction> callToActions, CancellationToken cancelToken = default)\n        {\n            return await NewDirectMessageEventAsync(recipientID, text, attachment: null, quickReply: null, callToActions: callToActions, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message to specified user.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"attachment\">Optional attachment from overloads that support it.</param>\n        /// <param name=\"quickReply\">Quick reply from overloads that support it.</param>\n        /// <param name=\"callToActions\">List of Call to Action, which creates buttons in the message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents> NewDirectMessageEventAsync(ulong recipientID, string text, Attachment attachment, QuickReply quickReply, IEnumerable<CallToAction> callToActions, CancellationToken cancelToken = default)\n        {\n            if (recipientID == default)\n                throw new ArgumentException($\"{nameof(recipientID)} must be set.\", nameof(recipientID));\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException($\"{nameof(text)} is a required parameter.\", nameof(text));\n\n            var newUrl = BaseUrl + \"direct_messages/events/new.json\";\n\n            var dmEventParams = new DirectMessageEventsValue\n            {\n                DMEvent = new DMEvent\n                {\n                    MessageCreate = new DirectMessageCreate\n                    {\n                        MessageData = new DirectMessageData\n                        {\n                            Text = text,\n                            Attachment = attachment,\n                            QuickReply = quickReply,\n                            CallToActions = callToActions\n                        },\n                        Target = new DirectMessageTarget\n                        {\n                            RecipientID = recipientID.ToString()\n                        }\n                    },\n                    Type = \"message_create\"\n                }\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    dmEventParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>();\n            DirectMessageEvents dmEvents = reqProc.ProcessActionResult(RawResult, DirectMessageEventsType.Show);\n\n            return dmEvents;\n        }\n\n        /// <summary>\n        /// Deletes a direct message.\n        /// </summary>\n        /// <param name=\"directMessageID\">ID of direct message to delete.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task DeleteDirectMessageEventAsync(ulong directMessageID, CancellationToken cancelToken = default)\n        {\n            if (directMessageID == default)\n                throw new ArgumentException($\"{nameof(directMessageID)} must be set.\", nameof(directMessageID));\n\n            var newUrl = BaseUrl + \"direct_messages/events/destroy.json?id=\" + directMessageID;\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        [\"id\"] = directMessageID.ToString()\n                    },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Marks direct messages as having been read.\n        /// </summary>\n        /// <param name=\"lastReadEventID\">ID of last direct message read.</param>\n        /// <param name=\"recipientID\">ID of user to send typing indicator to.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task MarkReadAsync(ulong lastReadEventID, ulong recipientID, CancellationToken cancelToken = default)\n        {\n            if (lastReadEventID == default)\n                throw new ArgumentException($\"{nameof(lastReadEventID)} must be set.\", nameof(lastReadEventID));\n            if (recipientID == default)\n                throw new ArgumentException($\"{nameof(recipientID)} must be set.\", nameof(recipientID));\n\n            var newUrl = BaseUrl + \"direct_messages/mark_read.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        [\"last_read_event_id\"] = lastReadEventID.ToString(),\n                        [\"recipient_id\"] = recipientID.ToString()\n                    },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a typing indicator to a user.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send typing indicator to.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task IndicateTypingAsync(ulong recipientID, CancellationToken cancelToken = default)\n        {\n            if (recipientID == default)\n                throw new ArgumentException($\"{nameof(recipientID)} must be set.\", nameof(recipientID));\n\n            var newUrl = BaseUrl + \"direct_messages/indicate_typing.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>\n                    {\n                        [\"recipient_id\"] = recipientID.ToString()\n                    },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Favorites/Favorites.cs",
    "content": "﻿using System.Xml.Serialization;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter favorites info\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Favorites : Status\n    {\n        public Favorites() { }\n\n        public Favorites(JsonData favJson) : base(favJson) { }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        [XmlIgnore]\n        public new FavoritesType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new string ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        [XmlIgnore]\n        public new TweetMode TweetMode { get; set; }\n\n        //\n        // The following types support XML serialization\n        //\n\n        [XmlIgnore]\n        FavoritesType type;\n        [XmlAttribute(AttributeName = \"Type\")]\n        FavoritesType TypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlIgnore]\n        ulong userID;\n        [XmlAttribute(AttributeName=\"UserID\")]\n        public ulong UserIDXml\n        {\n            get { return userID; }\n            set { userID = value; }\n        }\n\n        [XmlIgnore]\n        string screenName;\n        [XmlAttribute(AttributeName=\"ScreenName\")]\n        public string ScreenNameXml\n        {\n            get { return screenName; }\n            set { screenName = value; }\n        }\n\n        [XmlIgnore]\n        int count;\n        [XmlAttribute(AttributeName=\"Count\")]\n        public int CountXml\n        {\n            get { return count; }\n            set { count = value; }\n        }\n\n        [XmlIgnore]\n        ulong sinceID;\n        [XmlAttribute(AttributeName=\"SinceID\")]\n        public ulong SinceIDXml\n        {\n            get { return sinceID; }\n            set { sinceID = value; }\n        }\n\n        [XmlIgnore]\n        ulong maxID;\n        [XmlAttribute(AttributeName=\"MaxID\")]\n        public ulong MaxIDXml\n        {\n            get { return maxID; }\n            set { maxID = value; }\n        }\n        \n        [XmlIgnore]\n        bool includeEntities;\n        [XmlAttribute(AttributeName=\"IncludeEntities\")]\n        public bool IncludeEntitiesXml\n        {\n            get { return includeEntities; }\n            set { includeEntities = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Favorites/FavoritesAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FavoritesAction\n    {\n        SingleStatus\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Favorites/FavoritesRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Manages request processing for favorites\n    /// </summary>\n    public class FavoritesRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        internal FavoritesType Type { get; set; }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        internal TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Favorites>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(UserID),\n                       nameof(ScreenName),\n                       nameof(Count),\n                       nameof(SinceID),\n                       nameof(MaxID),\n                       nameof(IncludeEntities),\n                       nameof(TweetMode)\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            const string ParamsParam = \"parameters\";\n\n            if (parameters == null)\n                throw new ArgumentException(\"You must pass a \\\"parameters\\\" Dictionary<string, string> parameter.\", ParamsParam);\n\n            if (!parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<FavoritesType>(parameters[\"Type\"]);\n\n            return BuildFavoritesUrlParameters(parameters);\n        }\n\n        /// <summary>\n        /// appends parameters for Favorites request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildFavoritesUrlParameters(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"favorites/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n\n        /// <summary>\n        /// transforms Twitter response into list of Favorites\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of Favorite</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData favoritesJson = JsonMapper.ToObject(responseJson);\n\n            var statusList =\n                from JsonData favJson in favoritesJson\n                select new Favorites(favJson)\n                {\n                    Type = Type,\n                    UserID = UserID,\n                    ScreenName = ScreenName,\n                    Count = Count,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    IncludeEntities = IncludeEntities,\n                    TweetMode = TweetMode\n                };\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            var status = new Status(statusJson);\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Favorites/FavoritesType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of favorites queries\n    /// </summary>\n    public enum FavoritesType\n    {\n        /// <summary>\n        /// Get favorites list for user\n        /// </summary>\n        Favorites\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Favorites/TwitterContextFavoritesCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> CreateFavoriteAsync(ulong id)\n        {\n            return await CreateFavoriteAsync(id, true).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> CreateFavoriteAsync(ulong id, bool includeEntities, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n\n            var favoritesUrl = BaseUrl + \"favorites/create.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Status>(\n                    HttpMethod.Post.ToString(),\n                    favoritesUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FavoritesAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> DestroyFavoriteAsync(ulong id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DestroyFavoriteAsync(id, true, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        public async Task<Status> DestroyFavoriteAsync(ulong id, bool includeEntities, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n\n            var favoritesUrl = BaseUrl + \"favorites/destroy.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Status>(\n                    HttpMethod.Post.ToString(),\n                    favoritesUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FavoritesAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Friendship/Friendship.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// parameters for freindship actions\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Friendship\n    {\n        public const ulong UserIDNotIncluded = 0;\n        public const string ScreenNameNotIncluded = null;\n\n        public Friendship() { }\n        public Friendship(JsonData friendJson)\n        {\n            if (friendJson == null) return;\n\n            TargetRelationship = new Relationship(friendJson.GetValue<JsonData>(\"target\"));\n            SourceRelationship = new Relationship(friendJson.GetValue<JsonData>(\"source\"));\n        }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        public FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user (Show query)\n        /// </summary>\n        public ulong SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user (Show query)\n        /// </summary>\n        public string SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user (Show query)\n        /// </summary>\n        public ulong TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user (Show query)\n        /// </summary>\n        public string TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names for Lookup query\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs for Lookup query\n        /// </summary>\n        public string UserID { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        [Obsolete(\"Please use IncludeUserEntities instead.\")]\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// info on friend\n        /// </summary>\n        public User Friend { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the source (Show query)\n        /// </summary>\n        public Relationship SourceRelationship { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the target (Show query)\n        /// </summary>\n        public Relationship TargetRelationship { get; set; }\n\n        /// <summary>\n        /// List of ids returned by Incoming and Outgoing queries\n        /// </summary>\n        public IDList IDInfo { get; set; }\n\n        /// <summary>\n        /// List of relationships from Lookup query\n        /// </summary>\n        public List<Relationship> Relationships { get; set; }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of User that are friends or followers, depending on type of query\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Friendship/FriendshipAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FriendshipAction\n    {\n        Create,\n        Destroy,\n        Update\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Friendship/FriendshipRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Friendship queries\n    /// </summary>\n    class FriendshipRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        internal FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user\n        /// </summary>\n        internal ulong SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user\n        /// </summary>\n        internal string SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user\n        /// </summary>\n        internal ulong TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user\n        /// </summary>\n        internal string TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of names for lookup\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs to lookup\n        /// </summary>\n        internal string UserID { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        internal bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Friendship>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SourceUserID\",\n                       \"SourceScreenName\",\n                       \"TargetUserID\",\n                       \"TargetScreenName\",\n                       \"Cursor\",\n                       \"ScreenName\",\n                       \"UserID\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"Count\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<FriendshipType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case FriendshipType.Incoming:\n                    return BuildFriendshipIncomingUrl(parameters);\n                case FriendshipType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case FriendshipType.Outgoing:\n                    return BuildFriendshipOutgoingUrl(parameters);\n                case FriendshipType.Show:\n                    return BuildFriendshipShowUrl(parameters);\n                case FriendshipType.NoRetweetIDs:\n                    return BuildFriendshipNoRetweetIDsUrl();\n                case FriendshipType.FollowersList:\n                    return BuildFollowersListUrl(parameters);\n                case FriendshipType.FriendsList:\n                    return BuildFriendsListUrl(parameters);\n                case FriendshipType.FollowerIDs:\n                    return BuildFollowerIDsUrl(parameters);\n                case FriendshipType.FriendIDs:\n                    return BuildFriendIDsUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid FriendshipType\", \"Type\");\n            }\n        }\n\n        /// <summary>\n        /// Builds an url that retrieves ids of people who the logged in user doesn't want retweets for\n        /// </summary>\n        /// <returns>no_retweet_id URL</returns>\n        Request BuildFriendshipNoRetweetIDsUrl()\n        {\n            return new Request(BaseUrl + \"friendships/no_retweets/ids.json\");\n        }\n\n        /// <summary>\n        /// builds an url for showing friendship details between two users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFriendshipShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"SourceUserID\") && !parameters.ContainsKey(\"SourceScreenName\"))\n                throw new ArgumentException(\"You must specify either SourceUserID or SourceScreenName\");\n\n            if (!parameters.ContainsKey(\"TargetUserID\") && !parameters.ContainsKey(\"TargetScreenName\"))\n                throw new ArgumentException(\"You must specify either TargetUserID or TargetScreenName\");\n\n            var req = new Request(BaseUrl + \"friendships/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SourceUserID\"))\n            {\n                SourceUserID = ulong.Parse(parameters[\"SourceUserID\"]);\n                urlParams.Add(new QueryParameter(\"source_id\", parameters[\"SourceUserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"SourceScreenName\"))\n            {\n                SourceScreenName = parameters[\"SourceScreenName\"];\n                urlParams.Add(new QueryParameter(\"source_screen_name\", SourceScreenName));\n            }\n\n            if (parameters.ContainsKey(\"TargetUserID\"))\n            {\n                TargetUserID = ulong.Parse(parameters[\"TargetUserID\"]);\n                urlParams.Add(new QueryParameter(\"target_id\", parameters[\"TargetUserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"TargetScreenName\"))\n            {\n                TargetScreenName = parameters[\"TargetScreenName\"];\n                urlParams.Add(new QueryParameter(\"target_screen_name\", TargetScreenName));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining incoming friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for incoming</returns>\n        Request BuildFriendshipIncomingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/incoming.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining relationship between logged in user and list of other users\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ScreenName</param>\n        /// <returns>Url for lookup</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining outgoing friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for outgoing</returns>\n        Request BuildFriendshipOutgoingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/outgoing.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowersListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"followers/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n                        \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFriendsListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friends/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID.\");\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n            \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowerIDsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"followers/ids.json\";\n\n            return BuildIdQueryUrlParameters(parameters, url);\n        }\n\n        Request BuildFriendIDsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"friends/ids.json\";\n\n            return BuildIdQueryUrlParameters(parameters, url);\n        }\n\n        Request BuildIdQueryUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            if (!parameters.ContainsKey(\"UserID\") && !parameters.ContainsKey(\"ScreenName\"))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName.\");\n\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n            else\n            {\n                Cursor = -1;\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor.ToString()));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            Friendship friendship;\n\n            switch (Type)\n            {\n                case FriendshipType.Show:\n                    friendship = HandleShowResponse(responseJson);\n                    break;\n                case FriendshipType.Incoming:\n                case FriendshipType.Outgoing:\n                case FriendshipType.FollowerIDs:\n                case FriendshipType.FriendIDs:\n                    friendship = HandleIdsResponse(responseJson);\n                    break;\n                case FriendshipType.Lookup:\n                    friendship = HandleLookupResponse(responseJson);\n                    break;\n                case FriendshipType.NoRetweetIDs:\n                    friendship = HandleNoRetweetIDsResponse(responseJson);\n                    break;\n                case FriendshipType.FriendsList:\n                case FriendshipType.FollowersList:\n                    friendship = HandleFriendsListOrFollowersListResponse(responseJson);\n                    break;\n                default:\n                    friendship = new Friendship();\n                    break;\n            }\n\n            friendship.Type = Type;\n            friendship.SourceUserID = SourceUserID;\n            friendship.SourceScreenName = SourceScreenName;\n            friendship.TargetUserID = TargetUserID;\n            friendship.TargetScreenName = TargetScreenName;\n            friendship.Cursor = Cursor;\n            friendship.ScreenName = ScreenName;\n            friendship.UserID = UserID;\n            friendship.SkipStatus = SkipStatus;\n            friendship.IncludeUserEntities = IncludeUserEntities;\n            friendship.Count = Count;\n\n            var friendList = new List<Friendship>\n            {\n                friendship\n            };\n\n            return friendList.OfType<T>().ToList();\n        }\n  \n        Friendship HandleShowResponse(string responseJson)\n        {\n            JsonData showJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship(showJson.GetValue<JsonData>(\"relationship\"));\n            return friendship;\n        }\n  \n        Friendship HandleIdsResponse(string responseJson)\n        {\n            JsonData idsJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship\n            {\n                IDInfo = new IDList(idsJson),\n                CursorMovement = new Cursors(idsJson)\n            };\n            return friendship;\n        }\n  \n        Friendship HandleLookupResponse(string responseJson)\n        {\n            JsonData lookupJson = JsonMapper.ToObject(responseJson);\n            var friendship = new Friendship\n            {\n                Relationships =\n                    (from JsonData relationship in lookupJson\n                     select new Relationship(relationship))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        Friendship HandleNoRetweetIDsResponse(string responseJson)\n        {\n            string idsJson = \"{ \\\"ids\\\":\" + responseJson + \" }\";\n            return HandleIdsResponse(idsJson);\n        }\n\n        Friendship HandleFriendsListOrFollowersListResponse(string responseJson)\n        {\n            JsonData friendsOrFollowersJson = JsonMapper.ToObject(responseJson);\n            var users = friendsOrFollowersJson.GetValue<JsonData>(\"users\");\n\n            var friendship = new Friendship\n            {\n                CursorMovement = new Cursors(friendsOrFollowersJson),\n                Users =\n                    (from JsonData user in users\n                     select new User(user))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData friendJson = JsonMapper.ToObject(responseJson);\n\n            switch ((FriendshipAction) theAction)\n            {\n                case FriendshipAction.Create:\n                case FriendshipAction.Destroy:\n                    var user = new User(friendJson);\n                    return user.ItemCast(default(T));\n                case FriendshipAction.Update:\n                    var friendship = new Friendship(friendJson.GetValue<JsonData>(\"relationship\"));\n                    return friendship.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Friendship/FriendshipType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of friendship actions\n    /// </summary>\n    public enum FriendshipType\n    {\n        /// <summary>\n        /// Detailed information on the relationship between two people\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show IDs of all users requesting friendship with logged in user\n        /// </summary>\n        Incoming,\n\n        /// <summary>\n        /// Show IDs of all users logged in user is requesting friendship with\n        /// </summary>\n        Outgoing,\n\n        /// <summary>\n        /// Allows you to examine the relationship of a list of users, ScreenName,\n        /// to the logged in user\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// List of user IDs logged in user doesn't want to receive retweets for\n        /// </summary>\n        NoRetweetIDs,\n\n        /// <summary>\n        /// List of User entities of friends (people the authenticated user follows)\n        /// </summary>\n        FriendsList,\n\n        /// <summary>\n        /// List of User entities of followers (people who follow the authenticated user)\n        /// </summary>\n        FollowersList,\n\n        /// <summary>\n        /// people user is following\n        /// </summary>\n        FriendIDs,\n\n        /// <summary>\n        /// people following user\n        /// </summary>\n        FollowerIDs\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Friendship/Relationship.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Friendship details for either a Source or Target\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Relationship\n    {\n        public Relationship() { }\n        public Relationship(JsonData relJson)\n        {\n            if (relJson == null) return;\n\n            ScreenName = relJson.GetValue<string>(\"screen_name\");\n            Name = relJson.GetValue<string>(\"name\");\n            RetweetsWanted = relJson.GetValue<bool>(\"want_retweets\");\n            AllReplies = relJson.GetValue<bool>(\"all_replies\");\n            MarkedSpam = relJson.GetValue<bool>(\"marked_spam\");\n            ID = relJson.GetValue<ulong>(\"id\");\n            Blocking = relJson.GetValue<bool>(\"blocking\");\n            NotificationsEnabled = relJson.GetValue<bool>(\"notifications_enabled\");\n            CanDm = relJson.GetValue<bool>(\"can_dm\");\n            Muting = relJson.GetValue<bool>(\"muting\", false);\n\n            var connections = relJson.GetValue<JsonData>(\"connections\");\n            if (connections != null)\n                Connections =\n                    (from JsonData connection in connections\n                     select connection.ToString())\n                    .ToList();\n            else\n                Connections = new List<string>();\n\n            FollowedBy = \n                relJson.GetValue<bool>(\"followed_by\") ||\n                Connections.Contains(\"followed_by\");\n            Following = \n                relJson.GetValue<bool>(\"following\") ||\n                Connections.Contains(\"following\");\n        }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// User's screen name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// User's name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Is this user following the other\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Does the other user follow this one\n        /// </summary>\n        public bool FollowedBy { get; set; }\n\n        /// <summary>\n        /// Is this user blocking the other\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? Blocking { get; set; }\n\n        /// <summary>\n        /// Are this user's notifications enabled\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? NotificationsEnabled { get; set; }\n\n        /// <summary>\n        /// Does the user want to receive retweets from person they follow\n        /// </summary>\n        public bool RetweetsWanted { get; set; }\n\n        /// <summary>\n        /// Shows relationships between the logged in user and \n        /// the person identified by this relationship\n        /// </summary>\n        public List<string> Connections { get; set; }\n\n        /// <summary>\n        /// Sees all replies\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Marked as SPAM\n        /// </summary>\n        public bool MarkedSpam { get; set; }\n\n        /// <summary>\n        /// Allowed to send direct messages\n        /// </summary>\n        public bool CanDm { get; set; }\n\n        /// <summary>\n        /// User is muted.\n        /// </summary>\n        public bool Muting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Friendship/TwitterContextFriendshipCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets logged-in user follow another user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> CreateFriendshipAsync(ulong userID, bool follow, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID is a required parameter.\", \"userID\");\n\n            string destroyUrl = BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string>\n                {\n                    { \"user_id\", userID.ToString() }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n                createParams.Add(\"follow\", \"true\");\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    createParams,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Create);\n        }\n\n        /// <summary>\n        /// Lets logged-in user follow another user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> CreateFriendshipAsync(string screenName, bool follow, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            string destroyUrl = BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string>\n                {\n                    { \"screen_name\", screenName }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n                createParams.Add(\"follow\", \"true\");\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    createParams,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Create);\n        }\n\n        /// <summary>\n        /// Lets logged-in user un-follow another user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> DestroyFriendshipAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID is a required parameter.\", \"userID\");\n\n            string destroyUrl = BaseUrl + \"friendships/destroy.json\";\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"user_id\", userID.ToString() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Destroy);\n        }\n\n        /// <summary>\n        /// Lets logged-in user un-follow another user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User> DestroyFriendshipAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            string destroyUrl = BaseUrl + \"friendships/destroy.json\";\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"screen_name\", screenName }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Destroy);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public async Task<Friendship> UpdateFriendshipSettingsAsync(string screenName, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is a required parameter.\");\n\n            return await UpdateFriendshipSettingsAsync(0, screenName, retweets, device, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public async Task<Friendship> UpdateFriendshipSettingsAsync(ulong userID, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentNullException(\"userID\", \"userID is a required parameter.\");\n\n            return await UpdateFriendshipSettingsAsync(0, null, retweets, device, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        async Task<Friendship> UpdateFriendshipSettingsAsync(ulong userID, string screenName, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var parms = new Dictionary<string, string>\n            {\n                { \"retweets\", retweets.ToString().ToLower() },\n                { \"device\", device.ToString().ToLower() }\n            };\n\n            if (screenName != null) parms.Add(\"screen_name\", screenName);\n            if (userID > 0) parms.Add(\"user_id\", userID.ToString());\n\n            string updateUrl = BaseUrl + \"friendships/update.json\";\n\n            var reqProc = new FriendshipRequestProcessor<Friendship>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Friendship>(\n                    HttpMethod.Post.ToString(),\n                    updateUrl,\n                    parms,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Update);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/Coordinate.cs",
    "content": "﻿using System.Linq;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical coordinates\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Coordinate\n    {\n        public const int LongitudePos = 0;\n        public const int LatitudePos = 1;\n\n        public Coordinate() { }\n        internal Coordinate(JsonData coord)\n        {\n            if (coord == null)\n            {\n                IsLocationAvailable = false;\n                return;\n            }\n\n            IsLocationAvailable = true;\n\n            JsonData jsonLatitude = coord[LatitudePos];\n            Latitude = jsonLatitude.IsDouble ? (double)jsonLatitude : (int)jsonLatitude;\n            JsonData jsonLongitude = coord[LongitudePos];\n            Longitude = jsonLongitude.IsDouble ? (double)jsonLongitude : (int)jsonLongitude;\n        }\n\n        /// <summary>\n        /// Type of Coordinate\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        public bool IsLocationAvailable { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/Geo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geo info for querying and reading results\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Geo\n    {\n        public Geo() { }\n        public Geo(JsonData geo)\n        {\n            if (geo == null) return;\n\n            JsonData result = geo.GetValue<JsonData>(\"result\");\n            JsonData places = result.GetValue<JsonData>(\"places\");\n\n            Token = result.GetValue<string>(\"token\");\n\n            if (places != null)\n            {\n                Places =\n                    (from JsonData place in places\n                        select new Place(place))\n                    .ToList(); \n            }\n            else\n            {\n                Places = new List<Place>();\n            }\n        }\n\n        /// <summary>\n        /// Type of Geo query (Reverse or ID)\n        /// </summary>\n        public GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        public string IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        public string Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        public string Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        public string ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        public string Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        public string PlaceName { get; set; }\n\n        /// <summary>\n        /// Place token returned from a Similar Places query and used in CreatePlaceAsync\n        /// </summary>\n        public string Token { get; set; }\n\n        /// <summary>\n        /// Results showing places matching query\n        /// </summary>\n        public List<Place> Places { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string ID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/GeoAction.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    enum GeoAction\n    {\n        CreatePlace\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/GeoRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing LinqToTwitter.Serialization.Extensions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Geo requests\n    /// </summary>\n    public class GeoRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T: class\n    {\n        const string AttributeParam = \"Attribute\";\n        const string IDParam = \"ID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of Geo operation (Reverse or ID)\n        /// </summary>\n        internal GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        internal double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        internal double Longitude { get; set; }\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        internal string IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        internal string Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        internal string Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        internal int MaxResults { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        internal string ID { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        internal string ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        internal string Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        internal string PlaceName { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Geo>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Latitude\",\n                   \"Longitude\",\n                   \"IP\",\n                   \"Accuracy\",\n                   \"Granularity\",\n                   \"MaxResults\",\n                   \"ID\",\n                   \"Query\",\n                   \"ContainedWithin\",\n                   \"Attribute\",\n                   \"PlaceName\"\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<GeoType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    return BuildIDUrl(parameters);\n                case GeoType.Reverse:\n                    return BuildReverseUrl(parameters);\n                case GeoType.Search:\n                    return BuildSearchUrl(parameters);\n                case GeoType.SimilarPlaces:\n                    return BuildSimilarPlacesUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        void HandleAttributeParams(Dictionary<string, string> parameters, IList<QueryParameter> urlParams)\n        {\n            if (parameters.ContainsKey(AttributeParam))\n            {\n                // TODO: should really be able to search for more than one Attribute\n                Attribute = parameters[AttributeParam] ?? String.Empty;\n                var parts = Attribute.Split('=');\n\n                if (parts.Length < 2)\n                {\n                    throw new ArgumentException(\n                        \"Attribute must be a name/value pair (i.e. street_address=123); actual value: \" + Attribute,\n                        AttributeParam);\n                }\n\n                urlParams.Add(new QueryParameter(\"attribute:\" + parts[0], parts[1]));\n            }\n        }\n\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"IP\") &&\n                !parameters.ContainsKey(\"Query\") &&\n                !(parameters.ContainsKey(\"Latitude\") &&\n                  parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"Either Latitude and Longitude, Query, or IP address is required.\");\n\n            var req = new Request(BaseUrl + \"geo/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n            \n            if (parameters.ContainsKey(\"IP\"))\n            {\n                IP = parameters[\"IP\"];\n                urlParams.Add(new QueryParameter(\"ip\", IP));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        Request BuildIDUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(IDParam))\n                throw new ArgumentException(\"ID is required for a Geo ID query.\", IDParam);\n\n            ID = parameters[IDParam];\n\n            var url = \"geo/id/\" + ID + \".json\";\n            return new Request(BaseUrl + url);\n        }\n\n        Request BuildReverseUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/reverse_geocode.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"lat\", double.Parse(parameters[\"Latitude\"]).ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"long\", double.Parse(parameters[\"Longitude\"]).ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            return req;\n        }\n\n        Request BuildSimilarPlacesUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            if (!parameters.ContainsKey(\"PlaceName\"))\n            {\n                const string LatLongParam = \"PlaceName\";\n                throw new ArgumentException(\"PlaceName is required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/similar_places.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"PlaceName\"))\n            {\n                PlaceName = parameters[\"PlaceName\"];\n                urlParams.Add(new QueryParameter(\"name\", PlaceName));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response into List of Geo.\n        /// </summary>\n        /// <param name=\"responseJson\">Json with Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData geoJson = JsonMapper.ToObject(responseJson);\n\n            Geo geo;\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    geo = new Geo\n                    {\n                        Places = new List<Place> { new Place(geoJson) }\n                    };\n                    break;\n                case GeoType.Reverse:\n                case GeoType.Search:\n                case GeoType.SimilarPlaces:\n                    geo = new Geo(geoJson);\n                    break;\n                default:\n                    geo = new Geo();\n                    break;\n            }\n\n            geo.Type = Type;\n            geo.Accuracy = Accuracy;\n            geo.Granularity = Granularity;\n            geo.ID = ID;\n            geo.Latitude = Latitude;\n            geo.Longitude = Longitude;\n            geo.IP = IP;\n            geo.MaxResults = MaxResults;\n            geo.Query = Query;\n            geo.ContainedWithin = ContainedWithin;\n            geo.Attribute = Attribute;\n            geo.PlaceName = PlaceName;\n                \n            return new List<Geo> { geo }.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData geoJson = JsonMapper.ToObject(responseJson);\n\n            switch ((GeoAction)theAction)\n            {\n                case GeoAction.CreatePlace:\n                    var place = new Place(geoJson);\n                    return place.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/GeoType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with Twitter Geo places\n    /// </summary>\n    public enum GeoType\n    {\n        /// <summary>\n        /// Get a list of valid places (from Twitter) that can be attached to an Update\n        /// </summary>\n        Reverse,\n\n        /// <summary>\n        /// Get more details on a place (found via GeoType.Reverse)\n        /// </summary>\n        ID,\n\n        /// <summary>\n        /// Performs a search, based on various criteria\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Gets a list of nearby places with similar names\n        /// </summary>\n        SimilarPlaces\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/Geometry.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical area\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Geometry\n    {\n        public Geometry() {}\n        internal Geometry(JsonData geometry)\n        {\n            if (geometry == null) return;\n\n            Type = geometry.GetValue<string>(\"type\");\n\n            var coordinates = geometry.GetValue<JsonData>(\"coordinates\");\n            Coordinates =\n                (from JsonData outer in coordinates\n                 from JsonData coord in outer\n                 select new Coordinate(coord))\n                .ToList();\n        }\n\n        /// <summary>\n        /// Type of bouding box\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Coordinates for bounding box\n        /// </summary>\n        public List<Coordinate> Coordinates { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Geo/Place.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing System.Xml.Serialization;\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A general description of a geographical location in Twitter\n    /// </summary>\n    [XmlType(Namespace=\"LinqToTwitter\")]\n    public class Place\n    {\n        public Place() {}\n        internal Place(JsonData place)\n        {\n            if (place == null) return;\n\n            ID = place.GetValue<string>(\"id\");\n            Name = place.GetValue<string>(\"name\");\n            Country = place.GetValue<string>(\"country\");\n            CountryCode = place.GetValue<string>(\"country_code\");\n            FullName = place.GetValue<string>(\"full_name\");\n            PlaceType = place.GetValue<string>(\"place_type\");\n            Url = place.GetValue<string>(\"url\");\n            BoundingBox = new Geometry(place.GetValue<JsonData>(\"bounding_box\"));\n            Geometry = new Geometry(place.GetValue<JsonData>(\"geometry\"));\n\n            var containedWithin = place.GetValue<JsonData>(\"contained_within\");\n            ContainedWithin = \n                containedWithin != null && containedWithin.Count > 0 ? \n                    new Place(containedWithin[0]) :\n                    null;\n\n            var polyLines = place.GetValue<JsonData>(\"polylines\");\n            PolyLines = \n                polyLines == null ? \n                    new List<string>() \n                        : \n                    (from JsonData line in polyLines\n                     select line.ToString())\n                    .ToList();\n\n            var attrDict = place.GetValue<JsonData>(\"attributes\") as IDictionary<string, JsonData>;\n            Attributes =\n                attrDict == null ?\n                    new Dictionary<string, string>() \n                        :\n                    (from string key in attrDict.Keys\n                     select new \n                     { \n                         Key = key, \n                         Val = attrDict[key].ToString()\n                     })\n                    .ToDictionary(\n                        attr => attr.Key,\n                        attr => attr.Val);\n        }\n\n        /// <summary>\n        /// Name of place\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Country code abbreviation\n        /// </summary>\n        public string CountryCode { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Name of country\n        /// </summary>\n        public string Country { get; set; }\n\n        /// <summary>\n        /// Type of place (i.e. neighborhood, city, country, etc.)\n        /// </summary>\n        public string PlaceType { get; set; }\n\n        /// <summary>\n        /// Url to get more details on place\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Full name of place\n        /// </summary>\n        public string FullName { get; set; }\n\n        /// <summary>\n        /// Place related metadata\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string> Attributes { get; set; }\n\n        /// <summary>\n        /// Geographical outline of place\n        /// </summary>\n        public Geometry BoundingBox { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public Geometry Geometry { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<string> PolyLines { get; set; }\n\n        /// <summary>\n        /// Containing place (i.e. a neighborhood is contained within a city)\n        /// </summary>\n        public Place ContainedWithin { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/Configuration.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Configuration\n    {\n        /// <summary>\n        /// Length of a t.co short url\n        /// </summary>\n        public int ShortUrlLength { get; set; }\n\n        /// <summary>\n        /// Lenght of an https t.co short url\n        /// </summary>\n        public int ShortUrlLengthHttps { get; set; }\n\n        /// <summary>\n        /// Twitter slugs that are not usernames\n        /// </summary>\n        public List<string> NonUserNamePaths { get; set; }\n\n        /// <summary>\n        /// Max photo size\n        /// </summary>\n        public int PhotoSizeLimit { get; set; }\n\n        /// <summary>\n        /// Max number of items that can be uploaded at one time\n        /// </summary>\n        public int MaxMediaPerUpload { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public int CharactersReservedPerMedia { get; set; }\n\n        /// <summary>\n        /// Sizing allowances/behaviors for each type of photo\n        /// </summary>\n        public List<PhotoSize> PhotoSizes { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/Help.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Help\n    {\n        /// <summary>\n        /// Help Type (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        public string Resources { get; set; }\n\n        /// <summary>\n        /// Will be true if help Test succeeds\n        /// </summary>\n        public bool OK { get; set; }\n\n        /// <summary>\n        /// Terms of service or Privacy\n        /// </summary>\n        public string Policies { get; set; }\n\n        /// <summary>\n        /// Populated for Help Configuration query\n        /// </summary>\n        public Configuration Configuration { get; set; }\n\n        /// <summary>\n        /// List of languages, codes, and statuses\n        /// </summary>\n        public List<Language> Languages { get; set; }\n\n        /// <summary>\n        /// Access token for which rate limit applies\n        /// </summary>\n        public string RateLimitAccountContext { get; set; }\n\n        /// <summary>\n        /// Rate limit statuses\n        /// </summary>\n        public Dictionary<string, List<RateLimits>> RateLimits { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/HelpRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Used for Help queries\n    /// </summary>\n    public class HelpRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Help request (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        internal string Resources { get; set; }\n\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Help>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Resources\"\n               })\n               .Parameters;\n        }\n\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<HelpType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case HelpType.Configuration:\n                    return new Request(BaseUrl + \"help/configuration.json\");\n                case HelpType.Languages:\n                    return new Request(BaseUrl + \"help/languages.json\");\n                case HelpType.Privacy:\n                    return new Request(BaseUrl + \"help/privacy.json\");\n                case HelpType.RateLimits:\n                    return BuildRateLimitsUrl(parameters);\n                case HelpType.Tos:\n                    return new Request(BaseUrl + \"help/tos.json\");\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        private Request BuildRateLimitsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"application/rate_limit_status.json\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Resources\"))\n            {\n                Resources = parameters[\"Resources\"];\n                urlParams.Add(new QueryParameter(\"resources\", Resources.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// return response from help request\n        /// </summary>\n        /// <param name=\"responseJson\">response from twitter</param>\n        /// <returns>true</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Help help;\n            JsonData helpJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case HelpType.Configuration:\n                    help = HandleHelpConfiguration(helpJson);\n                    break;\n                case HelpType.Languages:\n                    help = HandleHelpLanguages(helpJson);\n                    break;\n                case HelpType.RateLimits:\n                    help = HandleHelpRateLimits(helpJson);\n                    break;\n                case HelpType.Privacy:\n                    help = new Help \n                    { \n                        Type = HelpType.Privacy,\n                        Policies = helpJson.GetValue<string>(\"privacy\") \n                    };\n                    break;\n                case HelpType.Tos:\n                    help = new Help \n                    { \n                        Type = HelpType.Tos,\n                        Policies = helpJson.GetValue<string>(\"tos\") \n                    };\n                    break;\n                default:\n                    help = new Help();\n                    break;\n            }\n\n            var helpList = new List<Help> { help };\n\n            return helpList.OfType<T>().ToList();\n        }\n\n        Help HandleHelpConfiguration(JsonData helpJson)\n        {\n            var photoSizeDict = helpJson.GetValue<JsonData>(\"photo_sizes\") as IDictionary<string, JsonData>;\n\n            return new Help\n            {\n                Type = HelpType.Configuration,\n                Configuration = new Configuration\n                {\n                    CharactersReservedPerMedia = helpJson.GetValue<int>(\"characters_reserved_per_media\"),\n                    PhotoSizes =\n                        (from string key in photoSizeDict.Keys\n                         let photoSize = photoSizeDict[key]\n                         select new PhotoSize\n                         {\n                             Type = key,\n                             Height = photoSize.GetValue<int>(\"h\"),\n                             Width = photoSize.GetValue<int>(\"w\"),\n                             Resize = photoSize.GetValue<string>(\"resize\")\n                         })\n                        .ToList(),\n                    ShortUrlLength = helpJson.GetValue<int>(\"short_url_length\"),\n                    PhotoSizeLimit = helpJson.GetValue<int>(\"photo_size_limit\"),\n                    NonUserNamePaths =\n                        (from JsonData path in helpJson.GetValue<JsonData>(\"non_username_paths\")\n                         select path.ToString())\n                        .ToList(),\n                    MaxMediaPerUpload = helpJson.GetValue<int>(\"max_media_per_upload\"),\n                    ShortUrlLengthHttps = helpJson.GetValue<int>(\"short_url_length_https\")\n                }\n            };\n        }\n\n        Help HandleHelpLanguages(JsonData helpJson)\n        {\n            return new Help\n            {\n                Type = HelpType.Languages,\n                Languages =\n                    (from JsonData lang in helpJson\n                     select new Language\n                     {\n                         Code = lang.GetValue<string>(\"code\"),\n                         Name = lang.GetValue<string>(\"name\"),\n                         Status = lang.GetValue<string>(\"status\")\n                     })\n                    .ToList()\n            };\n        }\n\n        Help HandleHelpRateLimits(JsonData helpJson)\n        {\n            var context = helpJson.GetValue<JsonData>(\"rate_limit_context\");\n            var resources = helpJson.GetValue<JsonData>(\"resources\") as IDictionary<string, JsonData>;\n\n            return new Help\n            {\n                Type = HelpType.RateLimits,\n                Resources = Resources,\n                RateLimitAccountContext = context.GetValue<string>(\"access_token\"),\n                RateLimits = \n                    (from key in resources.Keys\n                     let category = resources[key] as IDictionary<string, JsonData>\n                     select new\n                     {\n                         Key = key,\n                         Value =\n                            (from cat in category.Keys\n                             let limit = category[cat]\n                             select new RateLimits\n                             {\n                                 Resource = cat,\n                                 Limit = limit.GetValue<int>(\"limit\"),\n                                 Remaining = limit.GetValue<int>(\"remaining\"),\n                                 Reset = limit.GetValue<ulong>(\"reset\")\n                             })\n                            .ToList()\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Value)\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/HelpType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum HelpType\n    {\n        /// <summary>\n        /// Various settings such as image size, t.co url sizes, and more (should be cached and reused, but refreshed no more than once a day)\n        /// </summary>\n        Configuration,\n\n        /// <summary>\n        /// Languages supported by Twitter\n        /// </summary>\n        Languages,\n        \n        /// <summary>\n        /// Get Twitter Privacy Policy\n        /// </summary>\n        Privacy,\n\n        /// <summary>\n        /// Provides Rate Limit Status\n        /// </summary>\n        RateLimits,\n\n        /// <summary>\n        /// Get Twitter Terms of Service\n        /// </summary>\n        Tos\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/Language.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Language\n    {\n        /// <summary>\n        /// Long description of language name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Two character major language code\n        /// </summary>\n        public string Code { get; set; }\n\n        /// <summary>\n        /// Twitter status\n        /// </summary>\n        public string Status { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/PhotoSize.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class PhotoSize\n    {\n        /// <summary>\n        /// Type of photo (i.e. Large, Small, etc.)\n        /// </summary>\n        public string Type { get; set; }\n\n        /// <summary>\n        /// Photo Width\n        /// </summary>\n        public int Width { get; set; }\n\n        /// <summary>\n        /// Photo Height\n        /// </summary>\n        public int Height { get; set; }\n\n        /// <summary>\n        /// Resize Behavior (i.e. crop, fit, ...)\n        /// </summary>\n        public string Resize { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Help/RateLimits.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class RateLimits\n    {\n        /// <summary>\n        /// Url Segment representing resource that rate limits apply to\n        /// </summary>\n        public string Resource { get; set; }\n\n        /// <summary>\n        /// Number of requests left in this time period\n        /// </summary>\n        public int Remaining { get; set; }\n\n        /// <summary>\n        /// Epoch seconds when rate limits reset\n        /// </summary>\n        public ulong Reset { get; set; }\n\n        /// <summary>\n        /// Number of requests allowed\n        /// </summary>\n        public int Limit { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter/ITwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Members for communicating with Twitter\n    /// </summary>\n    public interface ITwitterExecute\n    {\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        IAuthorizer Authorizer { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        Uri LastUrl { get; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        string UserAgent { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        int Timeout { get; set; }\n\n        /// <summary>\n        /// Performs HTTP POST, with JSON payload, to Twitter.\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request.</param>\n        /// <param name=\"postData\">URL parameters to post.</param>\n        /// <param name=\"postObj\">Serializable payload object.</param>\n        /// <param name=\"getResult\">Callback for handling async Json response - null if synchronous.</param>\n        /// <returns>JSON Response from Twitter - empty string if async.</returns>\n        Task<string> SendJsonToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, T postObj, CancellationToken cancelToken);\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        Task<string> PostFormUrlEncodedToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, CancellationToken cancelToken);\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        Task<string> PostImageAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken);\n\n        /// <summary>\n        /// performs HTTP POST media byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">request parameters</param>\n        /// <param name=\"image\">Image data in a byte[]</param>\n        /// <param name=\"name\">Name of parameter to pass to Twitter.</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Cancellation token</param>\n        /// <returns>JSON results From Twitter</returns>\n        Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] image, string name, string fileName, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken);\n\n        /// <summary>\n        /// makes HTTP call to Twitter API\n        /// </summary>\n        /// <param name=\"url\">URL with all query info</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>JSON Results from Twitter</returns>\n        Task<string> QueryTwitterAsync<T>(Request req, IRequestProcessor<T> reqProc);\n\n        /// <summary>\n        /// Query for Twitter Streaming APIs\n        /// </summary>\n        /// <param name=\"req\">Request URL and parameters.</param>\n        /// <returns>Placeholder - real data flows from stream into callback you define.</returns>\n        Task<string> QueryTwitterStreamAsync(Request req);\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        Func<StreamContent, Task> StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        bool IsStreamClosed { get; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        CancellationToken CancellationToken { get; set; }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        void CloseStream();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter/TwitterContext.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n ***********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Net;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// manages access to Twitter API\n    /// </summary>\n    public partial class TwitterContext : IDisposable\n    {\n        //\n        // header constants\n        //\n\n        internal const string XRateLimitLimitKey = \"x-rate-limit-limit\";\n        internal const string XRateLimitRemainingKey = \"x-rate-limit-remaining\";\n        internal const string XRateLimitResetKey = \"x-rate-limit-reset\";\n        internal const string RetryAfterKey = \"Retry-After\";\n        internal const string XMediaRateLimitLimitKey = \"x-mediaratelimit-limit\";\n        internal const string XMediaRateLimitRemainingKey = \"x-mediaratelimit-remaining\";\n        internal const string XMediaRateLimitResetKey = \"x-mediaratelimit-reset\";\n        internal const string DateKey = \"Date\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"authorizer\">The authorizer.</param>\n        public TwitterContext(IAuthorizer authorizer)\n            : this(new TwitterExecute(authorizer))\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"execute\">The <see cref=\"ITwitterExecute\"/> object to use.</param>\n        public TwitterContext(ITwitterExecute execute)\n        {\n            TwitterExecutor = execute ?? throw new ArgumentNullException(\"execute\", \"TwitterExecutor is required.\");\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n\n            BaseUrl = \"https://api.twitter.com/1.1/\";\n            StreamingUrl = \"https://stream.twitter.com/1.1/\";\n            UploadUrl = \"https://upload.twitter.com/1.1/\";\n        }\n\n        /// <summary>\n        /// base URL for accessing Twitter API\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// base URL for uploading media\n        /// </summary>\n        public string UploadUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing streaming APIs\n        /// </summary>\n        public string StreamingUrl { get; set; }\n\n        /// <summary>\n        /// Assign the Log to the context\n        /// </summary>\n        public TextWriter Log\n        {\n            get { return TwitterExecute.Log; }\n            set { TwitterExecute.Log = value; }\n        }\n\n        /// <summary>\n        /// This contains the JSON string from the Twitter response to the most recent query.\n        /// </summary>\n        public string RawResult { get; set; }\n\n        /// <summary>\n        /// By default, LINQ to Twitter populates RawResult on TwitterContext and JsonContent on entities. \n        /// Setting this to true turn this off so that RawResult and JsonContent are not populated.\n        /// </summary>\n        public bool ExcludeRawJson { get; set; }\n\n        //\n        // The routines in this region delegate to TwitterExecute\n        // which contains the methods for communicating with Twitter.\n        // This is necessary so we can make the side-effect methods\n        // more testable, using IoC.\n        //\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                    return TwitterExecutor.UserAgent;\n                else\n                    return string.Empty;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                    TwitterExecutor.UserAgent = value;\n                if (Authorizer != null)\n                    Authorizer.UserAgent = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the read write timeout.\n        /// </summary>\n        /// <value>The read write timeout.</value>\n        public int ReadWriteTimeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.ReadWriteTimeout;\n                }\n                return TwitterExecute.DefaultReadWriteTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.ReadWriteTimeout = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public int Timeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.Timeout;\n                }\n                return TwitterExecute.DefaultTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                {\n                    TwitterExecutor.Timeout = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the authorized client on the <see cref=\"ITwitterExecute\"/> object.\n        /// </summary>\n        public IAuthorizer Authorizer\n        {\n            get { return TwitterExecutor.Authorizer; }\n            set { TwitterExecutor.Authorizer = value; }\n        }\n\n#if !WINDOWS_UWP\n        /// <summary>\n        /// Allows setting the IWebProxy for all HTTP requests.\n        /// </summary>\n        public IWebProxy Proxy\n        {\n            get { return Authorizer.Proxy; }\n            set { Authorizer.Proxy = value; }\n        }\n#endif\n\n        /// <summary>\n        /// Gets the most recent URL executed.\n        /// </summary>\n        /// <remarks>\n        /// Supports debugging.\n        /// </remarks>\n        public Uri LastUrl\n        {\n            get { return TwitterExecutor.LastUrl; }\n        }\n        \n        /// <summary>\n        /// Methods for communicating with Twitter.\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to an int\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>int value from response</returns>\n        private int GetResponseHeaderAsInt(string responseHeader)\n        {\n            int headerVal = -1;\n            IDictionary<string, string> headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                string headerValAsString = headers[responseHeader];\n\n                int.TryParse(headerValAsString, out headerVal);\n            }\n\n            return headerVal;\n        }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to a DateTime\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>DateTime value from response</returns>\n        /// <remarks>Expects a string like: Sat, 26 Feb 2011 01:12:08 GMT</remarks>\n        private DateTime? GetResponseHeaderAsDateTime(string responseHeader)\n        {\n            DateTime? headerVal = null;\n            IDictionary<string, string> headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                string headerValAsString = headers[responseHeader];\n\n                if (DateTime.TryParse(headerValAsString,\n                                        CultureInfo.InvariantCulture,\n                                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,\n                                        out DateTime value))\n                    headerVal = value;\n            }\n\n            return headerVal;\n        }\n        \n        /// <summary>\n        /// Response headers from Twitter Queries\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                {\n                    return TwitterExecutor.ResponseHeaders;\n                }\n                return null;\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per minute\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent search query \n        /// that fails with an HTTP 503\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't exceeded search rate yet\n        /// </remarks>\n        public int RetryAfter\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(RetryAfterKey);\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per window for\n        /// TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// Gets the response header Date and converts to a nullable-DateTime\n        /// </summary>\n        /// <remarks>\n        /// Returns null if the headers don't contain a valid Date value\n        /// i.e. you haven't performed a query yet or not convertable\n        /// </remarks>\n        public DateTime? TwitterDate\n        {\n            get\n            {\n                return GetResponseHeaderAsDateTime(DateKey);\n            }\n        }\n\n        /// <summary>\n        /// Called by QueryProvider to execute queries\n        /// </summary>\n        /// <param name=\"expression\">ExpressionTree to parse</param>\n        /// <param name=\"isEnumerable\">Indicates whether expression is enumerable</param>\n        /// <returns>list of objects with query results</returns>\n        public virtual async Task<object> ExecuteAsync<T>(Expression expression, bool isEnumerable)\n            where T: class\n        {\n            // request processor is specific to request type (i.e. Status, User, etc.)\n            IRequestProcessor<T> reqProc = CreateRequestProcessor<T>(expression);\n\n            // get input parameters that go on the REST query URL\n            Dictionary<string, string> parameters = GetRequestParameters(expression, reqProc);\n\n            // construct REST endpoint, based on input parameters\n            Request request = reqProc.BuildUrl(parameters);\n\n            string results;\n\n             //process request through Twitter\n            if (typeof(T) == typeof(Streaming))\n            {\n                results = await TwitterExecutor.QueryTwitterStreamAsync(request).ConfigureAwait(false);\n            }\n            else\n            {\n                results = await TwitterExecutor.QueryTwitterAsync(request, reqProc).ConfigureAwait(false);\n            }\n\n            if (!ExcludeRawJson)\n                RawResult = results;\n\n            // Transform results into objects\n            List<T> queryableList = reqProc.ProcessResults(results);\n\n            // Copy the IEnumerable entities to an IQueryable.\n            IQueryable<T> queryableItems = queryableList.AsQueryable();\n\n            // Copy the expression tree that was passed in, changing only the first\n            // argument of the innermost MethodCallExpression.\n            // -- Transforms IQueryable<T> into List<T>, which is (IEnumerable<T>)\n            var treeCopier = new ExpressionTreeModifier<T>(queryableItems);\n            Expression newExpressionTree = treeCopier.CopyAndModify(expression);\n\n            // This step creates an IQueryable that executes by replacing Queryable methods with Enumerable methods.\n            if (isEnumerable)\n                return queryableItems.Provider.CreateQuery(newExpressionTree);\n\n            return queryableItems.Provider.Execute<object>(newExpressionTree);\n        }\n\n        /// <summary>\n        /// Search the where clause for query parameters\n        /// </summary>\n        /// <param name=\"expression\">Input query expression tree</param>\n        /// <param name=\"reqProc\">Processor specific to this request type</param>\n        /// <returns>Name/value pairs of query parameters</returns>\n        static Dictionary<string, string> GetRequestParameters<T>(Expression expression, IRequestProcessor<T> reqProc)\n        {\n            var parameters = new Dictionary<string, string>();\n\n            // GHK FIX: Handle all wheres\n            MethodCallExpression[] whereExpressions = new WhereClauseFinder().GetAllWheres(expression);\n            foreach (var whereExpression in whereExpressions)\n            {\n                var lambdaExpression = (LambdaExpression)((UnaryExpression)(whereExpression.Arguments[1])).Operand;\n\n                // translate variable references in expression into constants\n                lambdaExpression = (LambdaExpression)Evaluator.PartialEval(lambdaExpression);\n\n                Dictionary<string, string> newParameters = reqProc.GetParameters(lambdaExpression);\n                foreach (var newParameter in newParameters)\n                {\n                    if (!parameters.ContainsKey(newParameter.Key))\n                    {\n                        parameters.Add(newParameter.Key, newParameter.Value);\n                    }\n                }\n            }\n\n            return parameters;\n        }\n\n        protected internal virtual IRequestProcessor<T> CreateRequestProcessor<T>()\n            where T : class\n        {\n            string requestType = typeof(T).Name;\n\n            IRequestProcessor<T> req = CreateRequestProcessor<T>(requestType);\n\n            return req;\n        }\n\n        /// <summary>\n        /// TestMethodory method for returning a request processor\n        /// </summary>\n        /// <typeparam name=\"T\">type of request</typeparam>\n        /// <returns>request processor matching type parameter</returns>\n        internal IRequestProcessor<T> CreateRequestProcessor<T>(Expression expression)\n            where T: class\n        {\n            if (expression == null)\n            {\n                const string NullExpressionMessage = \"Expression passed to CreateRequestProcessor must not be null.\";\n                throw new ArgumentNullException(\"Expression\", NullExpressionMessage);\n            }\n\n            string requestType = new MethodCallExpressionTypeFinder().GetGenericType(expression).Name;\n\n            IRequestProcessor<T> req = CreateRequestProcessor<T>(requestType);\n            return req;\n        }\n\n        protected internal IRequestProcessor<T> CreateRequestProcessor<T>(string requestType)\n            where T : class\n        {\n            string baseUrl = BaseUrl;\n            IRequestProcessor<T> req;\n\n            switch (requestType)\n            {\n                case nameof(Account):\n                    req = new AccountRequestProcessor<T>();\n                    break;\n                case nameof(AccountActivity):\n                    req = new AccountActivityRequestProcessor<T>();\n                    break;\n                case nameof(Blocks):\n                    req = new BlocksRequestProcessor<T>();\n                    break;\n                case nameof(DirectMessageEvents):\n                    req = new DirectMessageEventsRequestProcessor<T>();\n                    break;\n                case nameof(Favorites):\n                    req = new FavoritesRequestProcessor<T>();\n                    break;\n                case nameof(Friendship):\n                    req = new FriendshipRequestProcessor<T>();\n                    break;\n                case nameof(Geo):\n                    req = new GeoRequestProcessor<T>();\n                    break;\n                case nameof(Help):\n                    req = new HelpRequestProcessor<T>();\n                    break;\n                case nameof(List):\n                    req = new ListRequestProcessor<T>();\n                    break;\n                case nameof(Media):\n                    req = new MediaRequestProcessor<T>\n                    {\n                        UploadUrl = UploadUrl\n                    };\n                    break;\n                case nameof(Mute):\n                    req = new MuteRequestProcessor<T>();\n                    break;\n                case nameof(Raw):\n                    req = new RawRequestProcessor<T>();\n                    break;\n                case nameof(SavedSearch):\n                    req = new SavedSearchRequestProcessor<T>();\n                    break;\n                case nameof(Search):\n                    req = new SearchRequestProcessor<T>();\n                    break;\n                case nameof(Status):\n                    req = new StatusRequestProcessor<T>();\n                    break;\n                case nameof(Streaming):\n                    baseUrl = StreamingUrl;\n                    req = new StreamingRequestProcessor<T>\n                    {\n                        TwitterExecutor = TwitterExecutor\n                    };\n                    break;\n                case nameof(Trend):\n                    req = new TrendRequestProcessor<T>();\n                    break;\n                case nameof(User):\n                    req = new UserRequestProcessor<T>();\n                    break;\n                case nameof(WelcomeMessage):\n                    req = new WelcomeMessageRequestProcessor<T>();\n                    break;\n                default:\n                    throw new ArgumentException($\"Type, {requestType} isn't a supported LINQ to Twitter entity.\", nameof(requestType));\n            }\n\n            if (baseUrl != null)\n                req.BaseUrl = baseUrl;\n\n            return req;\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (TwitterExecutor is IDisposable disposableExecutor)\n                {\n                    disposableExecutor.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter/TwitterContextEntities.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// enables access to Twitter account information, such as Verify Credentials and Rate Limit Status\n        /// </summary>\n        public TwitterQueryable<Account> Account\n        {\n            get\n            {\n                return new TwitterQueryable<Account>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables access to Twitter account activity information, such as listing webhooks and showing subscriptions.\n        /// </summary>\n        public TwitterQueryable<AccountActivity> AccountActivity\n        {\n            get\n            {\n                return new TwitterQueryable<AccountActivity>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter blocking information, such as Exists, Blocks, and IDs\n        /// </summary>\n        public TwitterQueryable<Blocks> Blocks\n        {\n            get\n            {\n                return new TwitterQueryable<Blocks>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Direct Message Events, supporting Twitter chatbots\n        /// </summary>\n        public TwitterQueryable<DirectMessageEvents> DirectMessageEvents\n        {\n            get\n            {\n                return new TwitterQueryable<DirectMessageEvents>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Favorites\n        /// </summary>\n        public TwitterQueryable<Favorites> Favorites\n        {\n            get\n            {\n                return new TwitterQueryable<Favorites>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Friendship info\n        /// </summary>\n        public TwitterQueryable<Friendship> Friendship\n        {\n            get\n            {\n                return new TwitterQueryable<Friendship>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Geo info\n        /// </summary>\n        public TwitterQueryable<Geo> Geo\n        {\n            get\n            {\n                return new TwitterQueryable<Geo>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Help info\n        /// </summary>\n        public TwitterQueryable<Help> Help\n        {\n            get\n            {\n                return new TwitterQueryable<Help>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables access to media commands, like STATUS\n        /// </summary>\n        public TwitterQueryable<Media> Media\n        {\n            get\n            {\n                return new TwitterQueryable<Media>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables access to muted users\n        /// </summary>\n        public TwitterQueryable<Mute> Mute\n        {\n            get\n            {\n                return new TwitterQueryable<Mute>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter List info\n        /// </summary>\n        public TwitterQueryable<List> List\n        {\n            get\n            {\n                return new TwitterQueryable<List>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Raw Query Extensibility\n        /// </summary>\n        public TwitterQueryable<Raw> RawQuery\n        {\n            get\n            {\n                return new TwitterQueryable<Raw>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Saved Searches\n        /// </summary>\n        public TwitterQueryable<SavedSearch> SavedSearch\n        {\n            get\n            {\n                return new TwitterQueryable<SavedSearch>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Search to query tweets\n        /// </summary>\n        public TwitterQueryable<Search> Search\n        {\n            get\n            {\n                return new TwitterQueryable<Search>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Status messages\n        /// </summary>\n        public TwitterQueryable<Status> Status\n        {\n            get\n            {\n                return new TwitterQueryable<Status>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Status messages, such as Friends and Public\n        /// </summary>\n        public TwitterQueryable<Streaming> Streaming\n        {\n            get\n            {\n                return new TwitterQueryable<Streaming>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Trends, such as Trend, Current, Daily, and Weekly\n        /// </summary>\n        public TwitterQueryable<Trend> Trends\n        {\n            get\n            {\n                return new TwitterQueryable<Trend>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter User messages, such as Friends and Followers\n        /// </summary>\n        public TwitterQueryable<User> User\n        {\n            get\n            {\n                return new TwitterQueryable<User>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Welcome messages\n        /// </summary>\n        public TwitterQueryable<WelcomeMessage> WelcomeMessage\n        {\n            get\n            {\n                return new TwitterQueryable<LinqToTwitter.WelcomeMessage>(this);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter/TwitterExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reactive.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public static class TwitterExtensions\n    {\n        /// <summary>\n        /// Callback is invoked by LINQ to Twitter streaming support,\n        /// allowing you to process each individual response from Twitter.\n        /// For best results, please review the Twitter API streaming guidelines.\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static async Task<List<Streaming>> StartAsync(this IQueryable<Streaming> streaming, Func<StreamContent, Task> callback)\n        {\n            var provider = streaming.Provider as TwitterQueryProvider;\n            provider\n                .Context\n                .TwitterExecutor\n                .StreamingCallbackAsync = callback;\n\n            return await streaming.ToListAsync().ConfigureAwait(false);\n        }\n\n        public static async Task<IObservable<StreamContent>> ToObservableAsync(this IQueryable<Streaming> streaming)\n        {\n            IObservable<StreamContent> observableContent = Observable.Create<StreamContent>(\n                async observer =>\n                {\n                    await streaming.StartAsync(async content =>\n                    {\n                        try\n                        {\n                            observer.OnNext(content);\n                            await Task.FromResult(content).ConfigureAwait(false);\n                        }\n                        catch (Exception ex)\n                        {\n                            observer.OnError(ex);\n                        }\n                    }).ConfigureAwait(false);\n\n                    observer.OnCompleted();\n                });\n\n            return await Task.FromResult(observableContent).ConfigureAwait(false);\n        }\n\n        public static async Task<List<T>> ToListAsync<T>(this IQueryable<T> query)\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<IEnumerable<T>>(query.Expression).ConfigureAwait(false);\n\n            return results.ToList();\n        }\n\n        public static async Task<T> FirstOrDefaultAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.FirstOrDefault();\n        }\n\n        public static async Task<T> FirstAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.First();\n        }\n\n        public static async Task<T> SingleOrDefaultAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.SingleOrDefault();\n        }\n\n        public static async Task<T> SingleAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.Single();\n        }\n\n        /// <summary>\n        /// Enables use of .NET Cancellation Framework for this query.\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static IQueryable<T> WithCancellation<T>(this IQueryable<T> query, CancellationToken cancelToken)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n            provider\n                .Context\n                .TwitterExecutor\n                .CancellationToken = cancelToken;\n\n            return query;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter/TwitterQueryProvider.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo 8/26/08\n * \n * - Added Context property\n * - Changed Execute to delegate to TwitterContext through Context property\n * *********************************************************/\n\nusing System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// implementation of IQueryProvider, part of the LINQ Provider API\n    /// </summary>\n    public class TwitterQueryProvider : IQueryProvider\n    {\n        /// <summary>\n        /// refers to TwitterContext that calling code instantiated\n        /// </summary>\n        public TwitterContext Context { get; set; }\n\n        /// <summary>\n        /// Non-generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable CreateQuery(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n            try\n            {\n                return (IQueryable)Activator.CreateInstance(\n                    typeof(TwitterQueryable<>)\n                        .MakeGenericType(elementType), \n                    new object[] { this, expression });\n            }\n            catch (TargetInvocationException tie)\n            {\n                throw tie.InnerException;\n            }\n        }\n\n        /// <summary>\n        /// generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <typeparam name=\"TResult\">current object type being worked with</typeparam>\n        /// <param name=\"expression\">expression tree for query</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable<TResult> CreateQuery<TResult>(Expression expression)\n        {\n            return new TwitterQueryable<TResult>(this, expression);\n        }\n\n        /// <summary>\n        /// non-generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <param name=\"expression\">Expression Tree</param>\n        /// <returns>list of results from query</returns>\n        public object Execute(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n\n            return GetType().GetTypeInfo()\n                .DeclaredMethods.Where(meth => meth.IsGenericMethod && meth.Name == \"Execute\").First()\n                .Invoke(this, new object[] { expression });\n        }\n\n        /// <summary>\n        /// generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <typeparam name=\"TResult\">type of query</typeparam>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>list of results from query</returns>\n        public TResult Execute<TResult>(Expression expression)\n        {\n            bool isEnumerable = \n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n            var methodInfo = Context.GetType().GetTypeInfo().GetDeclaredMethod(\"ExecuteAsync\");\n            MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var exeTask = Task.Run(() => (Task<object>)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable }));\n                return (TResult)exeTask.Result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n\n        public async Task<object> ExecuteAsync<TResult>(Expression expression)\n            where TResult : class\n        {\n            bool isEnumerable =\n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n            var methodInfo = Context.GetType().GetTypeInfo().GetDeclaredMethod(\"ExecuteAsync\");\n            MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var result = await ((Task<object>)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable })).ConfigureAwait(false);\n                return result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter/TwitterQueryable.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 8/26/08\n * \n * Added constructor to pass TwitterContext to Provider\n * *********************************************************/\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// IQueryable of T part of LINQ to Twitter\n    /// </summary>\n    /// <typeparam name=\"T\">Type to operate on</typeparam>\n    public class TwitterQueryable<T> : IOrderedQueryable<T>\n    {\n        /// <summary>\n        /// init with TwitterContext\n        /// </summary>\n        /// <param name=\"context\"></param>\n        public TwitterQueryable(TwitterContext context)\n        {\n            Provider = new TwitterQueryProvider();\n            Expression = Expression.Constant(this);\n\n            // lets provider reach back to TwitterContext, \n            // where execute implementation resides\n            ((TwitterQueryProvider) Provider).Context = context;\n        }\n\n        /// <summary>\n        /// modified as internal because LINQ to Twitter is Unusable \n        /// without TwitterContext, but provider still needs access\n        /// </summary>\n        /// <param name=\"provider\">IQueryProvider</param>\n        /// <param name=\"expression\">Expression Tree</param>\n        internal TwitterQueryable(\n            TwitterQueryProvider provider,\n            Expression expression)\n        {\n            if (provider == null)\n            {\n                throw new ArgumentNullException(\"provider\");\n            }\n\n            if (expression == null)\n            {\n                throw new ArgumentNullException(\"expression\");\n            }\n\n            if (!typeof(IQueryable<T>).GetTypeInfo().IsAssignableFrom(expression.Type.GetTypeInfo()))\n            {\n                throw new ArgumentOutOfRangeException(\"expression\");\n            }\n\n            Provider = provider;\n            Expression = expression;\n        }\n\n        /// <summary>\n        /// IQueryProvider part of LINQ to Twitter\n        /// </summary>\n        public IQueryProvider Provider { get; private set; }\n        \n        /// <summary>\n        /// expression tree\n        /// </summary>\n        public Expression Expression { get; private set; }\n\n        /// <summary>\n        /// type of T in IQueryable of T\n        /// </summary>\n        public Type ElementType\n        {\n            get { return typeof(T); }\n        }\n\n        /// <summary>\n        /// executes when iterating over collection\n        /// </summary>\n        /// <returns>query results</returns>\n        public IEnumerator<T> GetEnumerator()\n        {\n            var tsk = Task.Run(() => (((TwitterQueryProvider)Provider).ExecuteAsync<IEnumerable<T>>(Expression)));\n            return ((IEnumerable<T>)tsk.Result).GetEnumerator();\n        }\n\n        /// <summary>\n        /// non-generic execution when collection is iterated over\n        /// </summary>\n        /// <returns>query results</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return (Provider.Execute<IEnumerable>(Expression)).GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter.Shared.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>7b25a4f0-18ea-4819-b67c-efea0e14f919</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>LinqToTwitter.Shared</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)AccountActivity\\AccountActivity.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)AccountActivity\\AccountActivityRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)AccountActivity\\AccountActivityType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)AccountActivity\\TwitterContextAccountActivityCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\Account.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\AccountAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\AccountRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\AccountType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\DeviceType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\Settings.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\SleepTime.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\Totals.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\TwitterContextAccountCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Account\\TZInfo.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Blocks\\BlockingType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Blocks\\Blocks.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Blocks\\BlocksRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Blocks\\TwitterContextBlockCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\BannerSize.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Culture.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Cursors.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\DefaultJsonSerializer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\Variant.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\Entities.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\EntityBase.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\HashTagEntity.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\MediaEntity.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\SymbolEntity.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\UrlEntity.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\UserMentionEntity.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\AspectRatio.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Entities\\VideoInfo.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Evaluator.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\ExpressionTreeHelpers.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\ExpressionTreeModifier.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\ExpressionVisitor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\IDList.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\InvalidQueryException.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\IRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\L2TKeys.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\LinqExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\MethodCallExpressionTypeFinder.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\ParameterFinder.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\QueryParameter.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\Request.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\RequestProcessorHelper.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TweetMode.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterAsyncResponse.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterErrorStatus.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterHashResponse.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterProgressEventArgs.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TypeConversionExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TypeSystem.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\WhereClauseFinder.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)DirectMessageEvents\\DirectMessageEvents.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)DirectMessageEvents\\DirectMessageEventsRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)DirectMessageEvents\\DirectMessageEventsType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)DirectMessageEvents\\TwitterContextDirectMessageEventsCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Favorites\\Favorites.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Favorites\\FavoritesAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Favorites\\FavoritesRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Favorites\\FavoritesType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Favorites\\TwitterContextFavoritesCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Friendship\\Friendship.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Friendship\\FriendshipAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Friendship\\FriendshipRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Friendship\\FriendshipType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Friendship\\Relationship.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Friendship\\TwitterContextFriendshipCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\Coordinate.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\Geo.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\GeoAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\Geometry.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\GeoRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\GeoType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Geo\\Place.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\Configuration.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\Help.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\HelpRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\HelpType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\Language.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\PhotoSize.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Help\\RateLimits.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)LinqToTwitter\\ITwitterExecute.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)LinqToTwitter\\TwitterContext.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)LinqToTwitter\\TwitterContextEntities.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)LinqToTwitter\\TwitterExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)LinqToTwitter\\TwitterQueryable.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)LinqToTwitter\\TwitterQueryProvider.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)List\\List.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)List\\ListAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)List\\ListRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)List\\ListType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)List\\TwitterContextListCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\Media.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\MediaError.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\MediaImage.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\MediaMetadata.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\MediaRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\MediaProcessingInfo.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\MediaType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Media\\TwitterContextMediaCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Mute\\Mute.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Mute\\MuteRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Mute\\MuteType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Mute\\TwitterContextMuteCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Raw\\Raw.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Raw\\RawRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Raw\\TwitterContextRawCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)SavedSearch\\SavedSearch.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)SavedSearch\\SavedSearchAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)SavedSearch\\SavedSearchRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)SavedSearch\\SavedSearchType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)SavedSearch\\TwitterContextSavedSearchCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Search\\Attitude.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Search\\ResultType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Search\\Search.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Search\\SearchMetaData.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Search\\SearchRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Search\\SearchType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\AuthAccessType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\Hmac.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\ICredentialStore.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\IHash.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\IHmac.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\InMemoryCredentialStore.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\IOAuth.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\OAuth.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\OAuthKeys.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\PinAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\Sha1.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\SingleUserAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\SingleUserInMemoryCredentialStore.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\XAuthAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\XAuthCredentials.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\Extensions\\DictionaryExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\Extensions\\LitJsonExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\Extensions\\StringExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\IJsonWrapper.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\IOrderedDictionary.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\JsonData.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\JsonException.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\JsonMapper.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\JsonReader.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\JsonWriter.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\Lexer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\ParserToken.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\Annotation.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\Contributor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\EmbeddedStatus.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\EmbeddedStatusAlignment.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\FilterLevel.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\Retweet.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\Status.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\StatusAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\StatusMetaData.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\StatusRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\StatusType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Status\\TwitterContextStatusCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\IStreamContent.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\Control.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\Delete.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\Disconnect.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\Event.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\ForUser.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\FriendsList.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\GeoScrub.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\Limit.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\Stall.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\StatusWithheld.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\TooManyFollows.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Messages\\UserWithheld.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\StreamContent.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\StreamEntityType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\Streaming.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\StreamingRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Streaming\\StreamingType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Trends\\Location.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Trends\\Trend.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Trends\\TrendRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Trends\\TrendType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\Category.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\ProfileImageSize.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\UserEntities.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\TwitterContextUserCommands.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\User.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\UserAction.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\UserRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)User\\UserType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)WelcomeMessages\\WelcomeMessage.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)WelcomeMessages\\WelcomeMessageRequestProcessor.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)WelcomeMessages\\WelcomeMessageType.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)WelcomeMessages\\TwitterContextWelcomeMessageCommands.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\AUTHORS\" />\n    <None Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\COPYING\" />\n    <None Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\HACKING\" />\n    <None Include=\"$(MSBuildThisFileDirectory)Serialization\\LitJson\\README\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/LinqToTwitter.Shared.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>7b25a4f0-18ea-4819-b67c-efea0e14f919</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"LinqToTwitter.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/List/List.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Information for a single Twitter List\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class List\n    {\n        public List() \n        {\n            Statuses = new List<Status>();\n        }\n\n        public List(JsonData listJson) : this()\n        {\n            Name = listJson.GetValue<string>(\"name\");\n            FullName = listJson.GetValue<string>(\"full_name\");\n            MemberCount = listJson.GetValue<int>(\"member_count\");\n            Description = listJson.GetValue<string>(\"description\");\n            Mode = listJson.GetValue<string>(\"mode\");\n            Uri = listJson.GetValue<string>(\"uri\");\n            Users = new List<User> { new User(listJson.GetValue<JsonData>(\"user\")) };\n            ListIDResponse = listJson.GetValue<ulong>(\"id\");\n            SubscriberCount = listJson.GetValue<int>(\"subscriber_count\");\n            CreatedAt = listJson.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            Following = listJson.GetValue<bool>(\"following\");\n            SlugResponse = listJson.GetValue<string>(\"slug\");\n        }\n\n        /// <summary>\n        /// Type of List query to perform (Query Filter)\n        /// </summary>\n        public ListType Type { get; set; }\n\n        /// <summary>\n        /// Helps page results (Query Filter)\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// User ID (Query Filter)\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// ScreenName of user for query\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// List ID (Query Filter)\n        /// </summary>\n        public ulong ListID { get; set; }\n\n        /// <summary>\n        /// List ID (Returned from Twitter)\n        /// </summary>\n        public ulong ListIDResponse { get; set; }\n\n        /// <summary>\n        /// Catchword for list (Query Filter)\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Catchword for list (Returned from Twitter)\n        /// </summary>\n        public string SlugResponse { get; set; }\n\n        /// <summary>\n        /// ID of List Owner (Query Filter)\n        /// </summary>\n        public ulong OwnerID { get; set; }\n\n        /// <summary>\n        /// ScreenName of List Owner (Query Filter)\n        /// </summary>\n        public string OwnerScreenName { get; set; }\n\n        /// <summary>\n        /// Max ID to retrieve for statuses (Query Filter)\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Number of statuses per page (Query Filter)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Page number for statuses (Query Filter)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Truncate all user info, except for ID (Query Filter)\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (Query Filter, default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add retweets, in addition to normal tweets (Query Filter)\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Statuses since status ID (Query Filter)\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (Query Filter)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Causes Twitter to return the lists owned by the authenticated user first (Query Filter)\n        /// </summary>\n        public bool Reverse { get; set; }\n\n        /// <summary>\n        /// Short name of List (Returned from Twitter)\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Fully qualified name of list (Returned from Twitter)\n        /// </summary>\n        public string FullName { get; set; }\n\n        /// <summary>\n        /// Description of List's purpose (Returned from Twitter)\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// Number of subscribers (Returned from Twitter)\n        /// </summary>\n        public int SubscriberCount { get; set; }\n\n        /// <summary>\n        /// When the list was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// Is authenticated user following list\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Number of members (Returned from Twitter)\n        /// </summary>\n        public int MemberCount { get; set; }\n\n        /// <summary>\n        /// Uri of List (Returned from Twitter)\n        /// </summary>\n        public string Uri { get; set; }\n\n        /// <summary>\n        /// List mode (Returned from Twitter)\n        /// </summary>\n        public string Mode { get; set; }\n\n        /// <summary>\n        /// Users associated with List (Returned from Twitter)\n        /// </summary>\n        public List<User> Users { get; set; }\n\n        /// <summary>\n        /// Statuses for list (Returned from Twitter)\n        /// </summary>\n        public List<Status> Statuses { get; set; }\n\n        /// <summary>\n        /// Cursors for current request (Returned from Twitter)\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// Only returns lists that belong to authenticated \n        /// user or user identified by ID or ScreenName (Query Filter)\n        /// </summary>\n        public bool FilterToOwnedLists { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/List/ListAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum ListAction\n    {\n        Create,\n\n        Update,\n\n        Delete,\n\n        AddMember,\n\n        AddMemberRange,\n\n        DeleteMember,\n\n        Subscribe,\n\n        Unsubscribe, \n\n        DestroyAll\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/List/ListRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class ListRequestProcessor<T> : \n        IRequestProcessor<T>, \n        IRequestProcessorWantsJson, \n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string TypeParam = \"Type\";\n        const string ListIdOrSlugParam = \"ListIdOrSlug\";\n        const string OwnerIdOrOwnerScreenName = \"OwnerIdOrOwnerScreenName\";\n        const string UserIdOrScreenName = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of list to query\n        /// </summary>\n        internal ListType Type { get; set; }\n\n        /// <summary>\n        /// Helps page results\n        /// </summary>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        internal ulong ListID { get; set; }\n\n        /// <summary>\n        /// Catchword for list\n        /// </summary>\n        internal string Slug { get; set; }\n\n        /// <summary>\n        /// ID of List Owner\n        /// </summary>\n        internal ulong OwnerID { get; set; }\n\n        /// <summary>\n        /// ScreenName of List Owner\n        /// </summary>\n        internal string OwnerScreenName { get; set; }\n\n        /// <summary>\n        /// Statuses since status ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Max ID to retrieve for statuses\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Number of statuses per page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Page number for statuses\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// ScreenName of user for query\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Truncate all user info, except for ID\n        /// </summary>\n        internal bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add retweets, in addition to normal tweets\n        /// </summary>\n        internal bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Only returns lists that belong to authenticated \n        /// user or user identified by ID or ScreenName\n        /// </summary>\n        internal bool FilterToOwnedLists { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Causes Twitter to return the lists owned by the authenticated user first (Query Filter)\n        /// </summary>\n        internal bool Reverse { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<List>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Cursor\",\n                       \"ListID\",\n                       \"Slug\",\n                       \"OwnerID\",\n                       \"OwnerScreenName\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Page\",\n                       \"SinceID\",\n                       \"TrimUser\",\n                       \"IncludeEntities\",\n                       \"IncludeRetweets\",\n                       \"FilterToOwnedLists\",\n                       \"SkipStatus\",\n                       \"Reverse\"\n                   })\n                   .Parameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n\n            if (parameters.ContainsKey(\"UserID\"))\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n                ScreenName = parameters[\"ScreenName\"];\n\n            if (parameters.ContainsKey(\"ListID\"))\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n\n            if (parameters.ContainsKey(\"Slug\"))\n                Slug = parameters[\"Slug\"];\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n\n            if (parameters.ContainsKey(\"MaxID\"))\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n\n            if (parameters.ContainsKey(\"Count\"))\n                Count = int.Parse(parameters[\"Count\"]);\n\n            if (parameters.ContainsKey(\"Page\"))\n                Page = int.Parse(parameters[\"Page\"]);\n\n            if (parameters.ContainsKey(\"SinceID\"))\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n\n            if (parameters.ContainsKey(\"FilterToOwnedLists\"))\n                FilterToOwnedLists = bool.Parse(parameters[\"FilterToOwnedLists\"]);\n\n            if (parameters.ContainsKey(\"Reverse\"))\n                Reverse = bool.Parse(parameters[\"Reverse\"]);\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(TypeParam))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<ListType>(parameters[TypeParam]);\n\n            switch (Type)\n            {\n                case ListType.List:\n                    return BuildListUrl(parameters);\n                case ListType.Show:\n                    return BuildShowUrl(parameters);\n                case ListType.Statuses:\n                    return BuildStatusesUrl(parameters);\n                case ListType.Memberships:\n                    return BuildMembershipsUrl(parameters);\n                case ListType.Subscriptions:\n                    return BuildSubscriptionsUrl(parameters);\n                case ListType.Members:\n                    return BuildMembersUrl(parameters);\n                case ListType.IsMember:\n                    return BuildIsMemberUrl(parameters);\n                case ListType.Subscribers:\n                    return BuildSubscribersUrl(parameters);\n                case ListType.IsSubscriber:\n                    return BuildIsSubcribedUrl(parameters);\n                case ListType.Ownerships:\n                    return BuildOwnershipsUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid ListType\", TypeParam);\n            }\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve all of a user's lists.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n            if (!(parameters.ContainsKey(\"UserID\") && UserID != 0) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIDOrScreenNameParam);\n\n            var req = new Request(BaseUrl + \"lists/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"Reverse\"))\n            {\n                Reverse = bool.Parse(parameters[\"Reverse\"]);\n                urlParams.Add(new QueryParameter(\"reverse\", parameters[\"Reverse\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve info on a specific List.\n        /// </summary>\n        /// <param name=\"parameters\">Contains ID for List</param>\n        /// <returns>URL for List query</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n                (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + @\"lists/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting statuses for a list.\n        /// </summary>\n        /// <param name=\"parameters\">Contains ListID and optionally MaxID, SinceID, Count, and Page</param>\n        /// <returns>URL for statuses query</returns>\n        Request BuildStatusesUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n                (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/statuses.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n                // TODO: twitter seems to be ignoring the documented \"count=\", but does honor \"per_page=\"\n                // for now, send BOTH\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting list memberships.\n        /// </summary>\n        /// <param name=\"parameters\">NoChange required</param>\n        /// <returns>URL for memberships query</returns>\n        Request BuildMembershipsUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIdOrScreenName);\n\n            var req = new Request(BaseUrl + \"lists/memberships.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"FilterToOwnedLists\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"FilterToOwnedLists\"))\n                {\n                    FilterToOwnedLists = true;\n                    urlParams.Add(new QueryParameter(\"filter_to_owned_lists\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting list subscriptions.\n        /// </summary>\n        /// <param name=\"parameters\">NoChange required</param>\n        /// <returns>URL for subscriptions query</returns>\n        Request BuildSubscriptionsUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"UserID\") && !string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n                !(parameters.ContainsKey(\"ScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"Either UserID or ScreenName are required.\", UserIdOrScreenName);\n\n            var req = new Request(BaseUrl + \"lists/subscriptions.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for getting a list of members for a list\n        /// </summary>\n        /// <param name=\"parameters\">Contains ListID and optionally Cursor</param>\n        /// <returns>URL for members query</returns>\n        Request BuildMembersUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n            {\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n            }\n\n            var req = new Request(BaseUrl + \"lists/members.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n\t\t\tif (parameters.ContainsKey(\"Count\"))\n\t\t\t{\n\t\t\t\tCount = int.Parse(parameters[\"Count\"]);\n\t\t\t\turlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n\t\t\t}\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url that determines if a user is a member of a list.\n        /// </summary>\n        /// <param name=\"parameters\">Contains ID and ListID</param>\n        /// <returns>URL for list members query</returns>\n        Request BuildIsMemberUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/members/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL to retrieve subscribers of a list.\n        /// </summary>\n        /// <param name=\"parameters\"></param>\n        /// <returns>URL for list subscribers query</returns>\n        Request BuildSubscribersUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/subscribers.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build URL to see if user is subscribed to a list.\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ID and ListID</param>\n        /// <returns>URL for IsSubscriber query</returns>\n        Request BuildIsSubcribedUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n\n            if ((!parameters.ContainsKey(\"ListID\") || string.IsNullOrWhiteSpace(parameters[\"ListID\"])) &&\n               (!parameters.ContainsKey(\"Slug\") || string.IsNullOrWhiteSpace(parameters[\"Slug\"])))\n                throw new ArgumentException(\"You must specify either ListID or Slug.\", ListIdOrSlugParam);\n\n            if (parameters.ContainsKey(\"Slug\") &&\n                !(parameters.ContainsKey(\"OwnerID\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerID\"])) &&\n                !(parameters.ContainsKey(\"OwnerScreenName\") && !string.IsNullOrWhiteSpace(parameters[\"OwnerScreenName\"])))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIdOrOwnerScreenName);\n\n            var req = new Request(BaseUrl + \"lists/subscribers/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Slug\"))\n            {\n                Slug = parameters[\"Slug\"];\n                urlParams.Add(new QueryParameter(\"slug\", parameters[\"Slug\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerID\"))\n            {\n                OwnerID = ulong.Parse(parameters[\"OwnerID\"]);\n                urlParams.Add(new QueryParameter(\"owner_id\", parameters[\"OwnerID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OwnerScreenName\"))\n            {\n                OwnerScreenName = parameters[\"OwnerScreenName\"];\n                urlParams.Add(new QueryParameter(\"owner_screen_name\", parameters[\"OwnerScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"ListID\"))\n            {\n                ListID = ulong.Parse(parameters[\"ListID\"]);\n                urlParams.Add(new QueryParameter(\"list_id\", parameters[\"ListID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                if (RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n                {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n                }\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build URL to see if user is subscribed to a list.\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ID and ListID</param>\n        /// <returns>URL for IsSubscriber query</returns>\n        Request BuildOwnershipsUrl(Dictionary<string, string> parameters)\n        {\n            if ((!parameters.ContainsKey(\"UserID\") || string.IsNullOrWhiteSpace(parameters[\"UserID\"])) &&\n               (!parameters.ContainsKey(\"ScreenName\") || string.IsNullOrWhiteSpace(parameters[\"ScreenName\"])))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName of the user you're checking.\", UserIdOrScreenName);\n\n            var req = new Request(BaseUrl + \"lists/ownerships.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List.\n        /// </summary>\n        /// <param name=\"responseJson\">Json Twitter response</param>\n        /// <returns>List of List</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData listJson = JsonMapper.ToObject(responseJson);\n\n            List<List> lists;\n            switch (Type)\n            {\n                case ListType.List:\n                case ListType.Memberships:\n                case ListType.Subscriptions:\n                case ListType.Ownerships:\n                    lists = HandleMultipleListsResponse(listJson);\n                    break;\n                case ListType.Show:\n                    lists = HandleSingleListResponse(listJson);\n                    break;\n                case ListType.Statuses:\n                    lists = HandleStatusesResponse(listJson);\n                    break;\n                case ListType.Members:\n                case ListType.Subscribers:\n                    lists = HandleMultipleUsersResponse(listJson);\n                    break;\n                case ListType.IsMember:\n                case ListType.IsSubscriber:\n                    lists = HandleSingleUserResponse(listJson);\n                    break;\n                default:\n                    lists = new List<List>();\n                    break;\n            }\n\n            var cursors = new Cursors(listJson);\n\n            foreach (var list in lists)\n            {\n                list.Type = Type;\n                list.Cursor = Cursor;\n                list.UserID = UserID;\n                list.ListID = ListID;\n                list.Slug = Slug;\n                list.OwnerID = OwnerID;\n                list.OwnerScreenName = OwnerScreenName;\n                list.MaxID = MaxID;\n                list.Count = Count;\n                list.Page = Page;\n                list.ScreenName = ScreenName;\n                list.SinceID = SinceID;\n                list.TrimUser = TrimUser;\n                list.IncludeEntities = IncludeEntities;\n                list.IncludeRetweets = IncludeRetweets;\n                list.FilterToOwnedLists = FilterToOwnedLists;\n                list.CursorMovement = cursors;\n                list.SkipStatus = SkipStatus;\n                list.Reverse = Reverse;\n            }\n\n            return lists.AsEnumerable().OfType<T>().ToList();\n        }\n  \n        private List<List> HandleSingleListResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List(listJson)\n            };\n\n            return lists;\n        }\n  \n        List<List> HandleMultipleListsResponse(JsonData listJson)\n        {\n            JsonData listsEnumerable =\n                listJson.GetValue<JsonData>(\"lists\") ?? listJson; \n\n            var lists =\n                (from JsonData list in listsEnumerable\n                 select new List(list))\n                .ToList();\n\n            return lists;\n        }\n  \n        List<List> HandleSingleUserResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Users = new List<User> { new User(listJson) }\n                }\n            };\n\n            return lists;\n        }\n\n        List<List> HandleMultipleUsersResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Users =\n                        (from JsonData user in listJson.GetValue<JsonData>(\"users\")\n                         select new User(user))\n                        .ToList()\n                }\n            };\n\n            return lists;\n        }\n\n        private List<List> HandleStatusesResponse(JsonData listJson)\n        {\n            var lists = new List<List>\n            {\n                new List\n                {\n                    Statuses =\n                        (from JsonData status in listJson\n                         select new Status(status))\n                        .ToList()\n                }\n            };\n\n            return lists;\n        }\n\n        /// <summary>\n        /// Transforms json into an action response.\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            List list = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                JsonData listJson = JsonMapper.ToObject(responseJson);\n\n                switch ((ListAction)theAction)\n                {\n                    case ListAction.Create:\n                    case ListAction.Update:\n                    case ListAction.Delete:\n                    case ListAction.AddMember:\n                    case ListAction.AddMemberRange:\n                    case ListAction.DeleteMember:\n                    case ListAction.Subscribe:\n                    case ListAction.Unsubscribe:\n                    case ListAction.DestroyAll:\n                        list = new List(listJson);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\n                            \"The default case of ProcessActionResult should never execute because a Type must be specified.\");\n                }\n            }\n\n            return list.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/List/ListType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Available types of queries for the Twitter Lists API\n    /// </summary>\n    public enum ListType\n    {\n        /// <summary>\n        /// Show specified list\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show lists user is subscribed to\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Show tweet timeline for members of the specified list\n        /// </summary>\n        Statuses,\n\n        /// <summary>\n        /// Show lists that specified user is a member of\n        /// </summary>\n        Memberships,\n\n        /// <summary>\n        /// Shows the lists a user is subscribed to\n        /// </summary>\n        Subscriptions,\n\n        /// <summary>\n        /// Members of the specified list\n        /// </summary>\n        Members,\n\n        /// <summary>\n        /// Check if a user is a member of the specified list\n        /// </summary>\n        IsMember,\n\n        /// <summary>\n        /// List the users subscribed to the specified list\n        /// </summary>\n        Subscribers,\n\n        /// <summary>\n        /// Check if a user subscribes to the specified list\n        /// </summary>\n        IsSubscriber,\n\n        /// <summary>\n        /// Get lists belonging to the specified user\n        /// </summary>\n        Ownerships\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/List/TwitterContextListCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        public const string ListIDOrSlugParam = \"ListIdOrSlug\";\n        public const string OwnerIDOrOwnerScreenNameParam = \"OwnerIdOrOwnerScreenName\";\n        public const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// Creates a new list.\n        /// </summary>\n        /// <param name=\"listName\">name of list</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <returns>List info for new list</returns>\n        public async Task<List> CreateListAsync(string listName, string mode, string description, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(listName))\n                throw new ArgumentException(\"listName is required.\", \"listName\");\n\n            var createUrl = BaseUrl + \"lists/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    createUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"name\", listName },\n                        { \"mode\", mode },\n                        { \"description\", description }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Create);\n        }\n\n        /// <summary>\n        /// Modifies an existing list.\n        /// </summary>\n        /// <param name=\"listID\">ID of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"mode\">public or private</param>\n        /// <param name=\"description\">list description</param>\n        /// <returns>List info for modified list</returns>\n        public async Task<List> UpdateListAsync(ulong listID, string slug, string name, ulong ownerID, string ownerScreenName, string mode, string description, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var updateListUrl = BaseUrl + \"lists/update.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    updateListUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID.ToString() },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID.ToString() },\n                        { \"owner_screen_name\", ownerScreenName },\n                        { \"mode\", mode },\n                        { \"description\", description },\n                        { \"name\", name }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Update);\n        }\n\n        /// <summary>\n        /// Deletes an existing list.\n        /// </summary>\n        /// <param name=\"listID\">ID or slug of list</param>\n        /// <param name=\"slug\">name of list</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for deleted list</returns>\n        public async Task<List> DeleteListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"listID is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If you specify a Slug, you must also specify either OwnerID or OwnerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var deleteUrl = BaseUrl + \"lists/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    deleteUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"list_id\", listID.ToString() },\n                        { \"slug\", slug },\n                        { \"owner_id\", ownerID.ToString() },\n                        { \"owner_screen_name\", ownerScreenName }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Delete);\n        }\n        \n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to</returns>\n        public async Task<List> AddMemberToListAsync(ulong userID, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await AddMemberToListAsync(userID, null, listID, slug, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n        \n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to</returns>\n        public async Task<List> AddMemberToListAsync(string screenName, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await AddMemberToListAsync(0, screenName, listID, slug, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member added to</returns>\n        async Task<List> AddMemberToListAsync(ulong userID, string screenName, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName is required.\", UserIDOrScreenNameParam);\n\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var addMemberUrl = BaseUrl + \"lists/members/create.json\";\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userID != 0)\n                parameters.Add(\"user_id\", userID.ToString());\n            if (!string.IsNullOrWhiteSpace(screenName))\n                parameters.Add(\"screen_name\", screenName);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(HttpMethod.Post.ToString(), addMemberUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.AddMember);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        public async Task<List> AddMemberRangeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, List<string> screenNames, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (screenNames == null || screenNames.Count == 0)\n                throw new ArgumentException(\"screenNames is required. Check to see if the argument is null or the List<string> is empty.\", \"screenNames\");\n\n            if (screenNames != null && screenNames.Count > 100)\n                throw new ArgumentException(\"Max screenNames is 100 at a time.\", \"screenNames\");\n\n            return await AddMemberRangeToListAsync(listID, slug, ownerID, ownerScreenName, userIDs: null, screenNames: screenNames, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        public async Task<List> AddMemberRangeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, List<ulong> userIDs, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userIDs == null || userIDs.Count == 0)\n                throw new ArgumentException(\"userIDs is required. Check to see if the argument is null or the List<ulong> is empty.\", \"userIDs\");\n\n            if (userIDs != null && userIDs.Count > 100)\n                throw new ArgumentException(\"Max user IDs is 100 at a time.\", \"userIDs\");\n\n            return await AddMemberRangeToListAsync(listID, slug, ownerID, ownerScreenName, userIDs, screenNames: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a list of users to a list.\n        /// </summary>\n        /// <param name=\"listID\">ID of List.</param>\n        /// <param name=\"slug\">List name.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <param name=\"userIDs\">List of user IDs to be list members. (max 100)</param>\n        /// <param name=\"screenNames\">List of user screen names to be list members. (max 100)</param>\n        /// <returns>List info for list members added to.</returns>\n        async Task<List> AddMemberRangeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, IEnumerable<ulong> userIDs, List<string> screenNames, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var addMemberRangeUrl = BaseUrl + \"lists/members/create_all.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userIDs != null && userIDs.Any())\n                parameters.Add(\"user_id\", string.Join(\",\", userIDs.Select(id => id.ToString(CultureInfo.InvariantCulture)).ToArray()));\n            if (screenNames != null && screenNames.Any())\n                parameters.Add(\"screen_name\", string.Join(\",\", screenNames));\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(HttpMethod.Post.ToString(), addMemberRangeUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.AddMember);\n        }\n\n        /// <summary>\n        /// Removes a user as a list member.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <param name=\"screenName\">ScreenName of user to add to list.</param>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list member removed from</returns>\n        public async Task<List> DeleteMemberFromListAsync(ulong userID, string screenName, ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0 && string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Either userID or screenName is required.\", UserIDOrScreenNameParam);\n\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var deleteUrl = BaseUrl + \"lists/members/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userID != 0)\n                parameters.Add(\"user_id\", userID.ToString());\n            if (!string.IsNullOrWhiteSpace(screenName))\n                parameters.Add(\"screen_name\", screenName);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(HttpMethod.Post.ToString(), deleteUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.DeleteMember);\n        }\n\n        /// <summary>\n        /// Adds a user as a list subscriber.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to add to.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscribed to</returns>\n        public async Task<List> SubscribeToListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var subscribeUrl = BaseUrl + \"lists/subscribers/create.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(HttpMethod.Post.ToString(), subscribeUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Subscribe);\n        }\n\n        /// <summary>\n        /// Removes a user as a list subscriber.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"ownerID\">ID of user who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public async Task<List> UnsubscribeFromListAsync(ulong listID, string slug, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (!string.IsNullOrWhiteSpace(slug) && ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            var unsubscribeUrl = BaseUrl + \"lists/subscribers/destroy.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(HttpMethod.Post.ToString(), unsubscribeUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.Unsubscribe);\n        }\n                \n        /// <summary>\n        /// Deletes membership for a comma-separated list of users.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"userIds\">List of user IDs of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public async Task<List> DeleteMemberRangeFromListAsync(ulong listID, string slug, List<ulong> userIDs, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DeleteMemberRangeFromListAsync(listID, slug, userIDs, null, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes membership for a comma-separated list of users.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"screenNames\">List of screen names of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        public async Task<List> DeleteMemberRangeFromListAsync(ulong listID, string slug, List<string> screenNames, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DeleteMemberRangeFromListAsync(listID, slug, null, screenNames, ownerID, ownerScreenName, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes membership for a comma-separated list of users.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"slug\">Name of list to remove from.</param>\n        /// <param name=\"userIds\">List of user IDs of users to remove from list membership.</param>\n        /// <param name=\"screenNames\">List of screen names of users to remove from list membership.</param>\n        /// <param name=\"ownerID\">ID of users who owns the list.</param>\n        /// <param name=\"ownerScreenName\">Screen name of user who owns the list.</param>\n        /// <returns>List info for list subscription removed from</returns>\n        async Task<List> DeleteMemberRangeFromListAsync(ulong listID, string slug, List<ulong> userIDs, List<string> screenNames, ulong ownerID, string ownerScreenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (listID == 0 && string.IsNullOrWhiteSpace(slug))\n                throw new ArgumentException(\"Either listID or slug is required.\", ListIDOrSlugParam);\n\n            if (listID == 0 && !string.IsNullOrWhiteSpace(slug) && \n                ownerID == 0 && string.IsNullOrWhiteSpace(ownerScreenName))\n                throw new ArgumentException(\"If using slug, you must also provide either ownerID or ownerScreenName.\", OwnerIDOrOwnerScreenNameParam);\n\n            if ((userIDs != null && userIDs.Count > 100) || \n                (screenNames != null && screenNames.Count > 100))\n                throw new ArgumentException(\"You can only remove 100 members at a Time.\", \"userIDs\");\n\n            var destroyAllUrl = BaseUrl + \"lists/members/destroy_all.json\";\n\n            var reqProc = new ListRequestProcessor<List>();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (listID != 0)\n                parameters.Add(\"list_id\", listID.ToString());\n            if (!string.IsNullOrWhiteSpace(slug))\n                parameters.Add(\"slug\", slug);\n            if (userIDs != null && userIDs.Any())\n                parameters.Add(\"user_id\", string.Join(\",\", userIDs.Select(id => id.ToString(CultureInfo.InvariantCulture)).ToArray()));\n            if (screenNames != null && screenNames.Any())\n                parameters.Add(\"screen_name\", string.Join(\",\", screenNames));\n            if (ownerID != 0)\n                parameters.Add(\"owner_id\", ownerID.ToString());\n            if (!string.IsNullOrWhiteSpace(ownerScreenName))\n                parameters.Add(\"owner_screen_name\", ownerScreenName);\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<List>(HttpMethod.Post.ToString(), destroyAllUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, ListAction.DestroyAll);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/Media.cs",
    "content": "﻿using LitJson;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Media\n    {\n        public const string StatusCommand = \"STATUS\";\n\n        public Media() { }\n        public Media(JsonData media)\n        {\n            if (media == null) return;\n\n            Image = new MediaImage(media.GetValue<JsonData>(\"image\"));\n            MediaID = media.GetValue<string>(\"media_id_string\").GetULong(0);\n            Size = media.GetValue<int>(\"size\");\n            JsonData video = media.GetValue<JsonData>(\"video\");\n            VideoType = video.GetValue<string>(\"video_type\");\n            ExpiresAfterSeconds = media.GetValue<int>(\"expires_after_secs\");\n            ProcessingInfo = new MediaProcessingInfo(media.GetValue<JsonData>(\"processing_info\"));\n        }\n\n        public MediaType Type { get; set; }\n\n        public string Command { get; set; }\n\n        public ulong MediaID { get; set; }\n\n        public MediaImage Image { get; set; }\n\n        public int Size { get; set; }\n\n        public int ExpiresAfterSeconds { get; set; }\n\n        public string VideoType { get; set; }\n\n        public MediaProcessingInfo ProcessingInfo { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/MediaError.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class MediaError\n    {\n        public MediaError() { }\n        public MediaError(JsonData error)\n        {\n            Code = error.GetValue<int>(\"code\");\n            Name = error.GetValue<string>(\"name\");\n            Message = error.GetValue<string>(\"message\");\n        }\n\n        /// <summary>\n        /// Code number from Twitter\n        /// </summary>\n        public int Code { get; set; }\n\n        /// <summary>\n        /// Name of the error\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Description of why the error occurred\n        /// </summary>\n        public string Message { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/MediaImage.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LitJson;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class MediaImage\n    {\n        public MediaImage(JsonData image)\n        {\n            Width = image.GetValue<int>(\"w\");\n            Height = image.GetValue<int>(\"h\");\n            ImageType = image.GetValue<string>(\"image_type\");\n        }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string ImageType { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/MediaMetadata.cs",
    "content": "﻿using Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    public class MediaMetadata\n    {\n        [JsonProperty(\"media_id\")]\n        public ulong MediaID { get; set; }\n        [JsonProperty(\"alt_text\")]\n        public AltText AltText { get; set; }\n    }\n\n    public class AltText\n    {\n        [JsonProperty(\"text\")]\n        public string Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/MediaProcessingInfo.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing LitJson;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class MediaProcessingInfo\n    {\n        public const string InProgress = \"in_progress\";\n        public const string Failed = \"failed\";\n        public const string Succeeded = \"succeeded\";\n\n        public MediaProcessingInfo() { }\n        public MediaProcessingInfo(JsonData info)\n        {\n            State = info.GetValue<string>(\"state\");\n            CheckAfterSeconds = info.GetValue<int>(\"check_after_secs\");\n            ProgressPercent = info.GetValue<int>(\"progress_percent\");\n            Error = new MediaError(info.GetValue<JsonData>(\"error\"));\n        }\n\n        /// <summary>\n        /// Current status of media upload.\n        /// </summary>\n        public string State { get; set; }\n\n        /// <summary>\n        /// Recommended number of seconds to delay between status checks.\n        /// </summary>\n        public int CheckAfterSeconds { get; set; }\n\n        /// <summary>\n        /// Percentage done of upload processing.\n        /// </summary>\n        public int ProgressPercent { get; set; }\n\n        /// <summary>\n        /// If the request failed with won't be null.\n        /// </summary>\n        public MediaError Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/MediaRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Status requests\n    /// </summary>\n    public class MediaRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base URL for uploading media\n        /// </summary>\n        public string UploadUrl { get; set; }\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of media request, i.e. Status\n        /// </summary>\n        internal MediaType Type { get; set; }\n\n        /// <summary>\n        /// Media command sent to Twitter. e.g. STATUS for requesting media upload status.\n        /// </summary>\n        public string Command { get; set; }\n\n        /// <summary>\n        /// ID of uploaded media to work with.\n        /// </summary>\n        internal ulong MediaID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Media>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Command),\n                       nameof(MediaID)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">Criteria for url segments and parameters.</param>\n        /// <returns>URL conforming to Twitter API.</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException(\"You must set Type.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<MediaType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case MediaType.Status:\n                    return BuildStatusUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters that are common to both friend and user queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            //var urlParams = req.RequestParameters;\n\n            //if (parameters.ContainsKey(\"ID\"))\n            //{\n            //    ID = ulong.Parse(parameters[\"ID\"]);\n            //    urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"UserID\"))\n            //{\n            //    UserID = ulong.Parse(parameters[\"UserID\"]);\n            //    urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"ScreenName\"))\n            //{\n            //    ScreenName = parameters[\"ScreenName\"];\n            //    urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"SinceID\"))\n            //{\n            //    SinceID = ulong.Parse(parameters[\"SinceID\"]);\n            //    urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"MaxID\"))\n            //{\n            //    MaxID = ulong.Parse(parameters[\"MaxID\"]);\n            //    urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"Count\"))\n            //{\n            //    Count = int.Parse(parameters[\"Count\"]);\n            //    urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeRetweets\"))\n            //{\n            //    IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n            //    urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"ExcludeReplies\"))\n            //{\n            //    ExcludeReplies = bool.Parse(parameters[\"ExcludeReplies\"]);\n            //    urlParams.Add(new QueryParameter(\"exclude_replies\", parameters[\"ExcludeReplies\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeMyRetweet\"))\n            //{\n            //    IncludeMyRetweet = bool.Parse(parameters[\"IncludeMyRetweet\"]);\n            //    urlParams.Add(new QueryParameter(\"include_my_retweet\", parameters[\"IncludeMyRetweet\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeEntities\"))\n            //{\n            //    IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n            //    urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            //{\n            //    IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n            //    urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"TrimUser\"))\n            //{\n            //    TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n            //    urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeContributorDetails\"))\n            //{\n            //    IncludeContributorDetails = bool.Parse(parameters[\"IncludeContributorDetails\"]);\n            //    urlParams.Add(new QueryParameter(\"contributor_details\", parameters[\"IncludeContributorDetails\"].ToLower()));\n            //}\n\n            return req;\n        }\n\n        Request BuildStatusUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(nameof(MediaID)))\n                throw new ArgumentNullException(nameof(MediaID), $\"{nameof(MediaID)} is required\");\n\n            var req = new Request(UploadUrl + \"media/upload.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            string command = \n                !parameters.ContainsKey(nameof(Command)) || string.IsNullOrWhiteSpace(parameters[nameof(Command)]) ? \n                    Media.StatusCommand : parameters[nameof(Command)];\n            urlParams.Add(new QueryParameter(\"command\", command));\n            Command = command;\n\n            MediaID = ulong.Parse(parameters[nameof(MediaID)]);\n            urlParams.Add(new QueryParameter(\"media_id\", parameters[nameof(MediaID)]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of Status\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of Status</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData mediaJson = JsonMapper.ToObject(responseJson);\n\n            var statusList = new List<Media>();\n            switch (Type)\n            {\n                case MediaType.Status:\n                default:\n                    statusList.Add(new Media(mediaJson));\n                    break;\n            }\n\n            foreach (var media in statusList)\n            {\n                media.Type = Type;\n                media.MediaID = MediaID;\n                media.Command = Command;\n            };\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            Status status = null;\n\n            switch ((StatusAction)theAction)\n            {\n                case StatusAction.SingleStatus:\n                    status = new Status(statusJson);\n                    break;\n                case StatusAction.MediaUpload:\n                    status = new Status\n                    {\n                        Media = new Media(statusJson)\n                    };\n                    break;\n                default:\n                    break;\n            }\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/MediaType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum MediaType\n    {\n        Metadata,\n        Status\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Media/TwitterContextMediaCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Uploads a media (e.g. media) to be attached to a subsequent tweet.\n        /// </summary>\n        /// <param name=\"media\">Media to upload</param>\n        /// <param name=\"mediaType\">Type of media. e.g. image/jpg, image/png, or video/mp4.</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public virtual async Task<Media> UploadMediaAsync(byte[] media, string mediaType, string mediaCategory, bool shared = false, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UploadMediaAsync(media, mediaType, null, mediaCategory, shared, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Uploads a media (e.g. media) to be attached to a subsequent tweet.\n        /// </summary>\n        /// <param name=\"media\">Media to upload</param>\n        /// <param name=\"mediaType\">Type of media. e.g. image/jpg, image/png, or video/mp4.</param>\n        /// <param name=\"additionalOwners\">User IDs of accounts that can used the returned media IDs</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public virtual async Task<Media> UploadMediaAsync(byte[] media, string mediaType, IEnumerable<ulong> additionalOwners, string mediaCategory, bool shared = false, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (media == null || media.Length == 0)\n                throw new ArgumentNullException(\"image\", \"You must provide a byte[] of image data.\");\n\n            string updateUrl = UploadUrl + \"media/upload.json\";\n            string name = \"media\";\n            string randomUnusedFileName = new Random().Next(100, 999).ToString();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (additionalOwners != null && additionalOwners.Any())\n                parameters.Add(\"additional_owners\", string.Join(\",\", additionalOwners));\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostMediaAsync(\n                    updateUrl,\n                    parameters,\n                    media,\n                    name,\n                    randomUnusedFileName,\n                    mediaType,\n                    mediaCategory,\n                    shared,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            Status status = reqProc.ProcessActionResult(RawResult, StatusAction.MediaUpload);\n            return status.Media;\n        }\n\n        /// <summary>\n        /// Adds alt text to media to support accessibility. Upload the media and call this to attach alt text.\n        /// </summary>\n        /// <param name=\"mediaID\">ID of media.</param>\n        /// <param name=\"altText\">Media description.</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public virtual async Task CreateMediaMetadataAsync(ulong mediaID, string altText, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (mediaID == 0)\n                throw new ArgumentNullException(nameof(mediaID), $\"Invalid {nameof(mediaID)} parameter: {mediaID}\");\n\n            if (string.IsNullOrWhiteSpace(altText))\n                throw new ArgumentNullException(nameof(altText), $\"The {nameof(altText)} parameter is empty or null and must have a value.\");\n\n            string updateUrl = UploadUrl + \"media/metadata/create.json\";\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    updateUrl,\n                    new Dictionary<string, string>(),\n                    new MediaMetadata { MediaID = mediaID, AltText = new AltText { Text = altText } },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Mute/Mute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Mute\n    {\n        /// <summary>\n        /// Type of mute query to perform.\n        /// </summary>\n        public MuteType Type { get; set; }\n\n        /// <summary>\n        /// Allows you to page through query results\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// Set to true for Twitter to return entity metadata with users last tweet.\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Set to true to remove tweet from user entities.\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// List of ids that are muted, populated by IDs query\n        /// </summary>\n        public List<ulong> IDList { get; set; }\n\n        /// <summary>\n        /// List of User that are muted, populated by List query\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Mute/MuteRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter User requests.\n    /// </summary>\n    public class MuteRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        internal MuteType Type { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Add entities to results\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Mute>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Cursor\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<MuteType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case MuteType.IDs:\n                    return BuildIDsUrl(parameters);\n                case MuteType.List:\n                    return BuildListUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"mutes/users/ids.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"mutes/users/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            List<Mute> muteList = null;\n\n            JsonData mutesJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case MuteType.IDs:\n                    muteList = HandleIdsResponse(mutesJson);\n                    break;\n                case MuteType.List:\n                    muteList = HandleMultipleUserResponse(mutesJson);\n                    break;\n                default:\n                    muteList = new List<Mute>();\n                    break;\n            }\n\n            foreach(var mute in muteList)\n            {\n                mute.Type = Type;\n                mute.Cursor = Cursor;\n                mute.IncludeEntities = IncludeEntities;\n                mute.SkipStatus = SkipStatus;\n            }\n\n            return muteList.OfType<T>().ToList();\n        }\n\n        List<Mute> HandleIdsResponse(JsonData idsJson)\n        {\n            var ids = idsJson.GetValue<JsonData>(\"ids\");\n            var muteList = new List<Mute>\n            {\n                new Mute\n                {\n                    IDList = \n                        (from JsonData id in ids\n                         select (ulong)id)\n                        .ToList(),\n                    Users = new List<User>(),\n                    CursorMovement = new Cursors(idsJson)\n                }\n            };\n            return muteList;\n        }\n  \n        List<Mute> HandleMultipleUserResponse(JsonData userJson)\n        {\n            var users = userJson.GetValue<JsonData>(\"users\");\n            List<Mute> muteList = new List<Mute>\n            {\n                new Mute\n                {\n                    IDList = new List<ulong>(),\n                    Users =\n                        (from JsonData user in users\n                         select new User(user))\n                        .ToList(),\n                    CursorMovement = new Cursors(userJson)\n                }\n            };\n\n            return muteList;\n        }\n\n        List<User> HandleSingleUserResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Mute/MuteType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum MuteType\n    {\n        /// <summary>\n        /// IDs of friends the authorizing user has muted.\n        /// </summary>\n        IDs,\n\n        /// <summary>\n        /// User entities of friends the authorizing user has muted.\n        /// </summary>\n        List\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Mute/TwitterContextMuteCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Mutes a user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> MuteAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is required\");\n\n            var muteParams = new Dictionary<string, string> { { \"screen_name\", screenName } };\n\n            return await MuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Mutes a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> MuteAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID can't be 0 - no user has this ID\", \"userID\");\n\n            var muteParams = new Dictionary<string, string> { { \"user_id\", userID.ToString() } };\n\n            return await MuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<User> MuteAsync(IDictionary<string, string> muteParams, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var muteUrl = BaseUrl + \"mutes/users/create.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor\n                    .PostFormUrlEncodedToTwitterAsync<User>(HttpMethod.Post.ToString(), muteUrl, muteParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// UnMutes a user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> UnMuteAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is required\");\n\n            var muteParams = new Dictionary<string, string> { { \"screen_name\", screenName } };\n\n            return await UnMuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// UnMutes a user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to mute.</param>\n        /// <returns>User entity for muted user.</returns>\n        public async Task<User> UnMuteAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID can't be 0 - no user has this ID\", \"userID\");\n\n            var muteParams = new Dictionary<string, string> { { \"user_id\", userID.ToString() } };\n\n            return await UnMuteAsync(muteParams, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<User> UnMuteAsync(IDictionary<string, string> muteParams, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var muteUrl = BaseUrl + \"mutes/users/destroy.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor\n                    .PostFormUrlEncodedToTwitterAsync<User>(HttpMethod.Post.ToString(), muteUrl, muteParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Raw/Raw.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Allows working at a low level with Twitter API\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Raw\n    {\n        /// <summary>\n        /// Query string with segments and parameters.  \n        /// Do not include BaseUrl as it will be prefixed \n        /// to this value. You're resposible for ensuring\n        /// the format of this part of the query is correct,\n        /// including encoding parameters.\n        /// </summary>\n        public string QueryString { get; set; }\n\n        /// <summary>\n        /// Raw result, returned directly from Twitter.\n        /// </summary>\n        public string Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Raw/RawRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Raw requests, allowing free-form url and query strings.\n    /// </summary>\n    public class RawRequestProcessor<T> : \n        IRequestProcessor<T>,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Actual query string sent to twitter\n        /// </summary>\n        internal string QueryString { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        internal string Result { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Raw>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"QueryString\"\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryStringParam = \"QueryString\";\n            if (parameters == null || !parameters.ContainsKey(\"QueryString\"))\n                throw new ArgumentNullException(QueryStringParam, \"QueryString parameter is required.\");\n\n            QueryString = parameters[\"QueryString\"].Trim();\n\n            if (QueryString == string.Empty)\n                throw new ArgumentException(\"Blank QueryString isn't valid.\", QueryStringParam);\n\n            string url = BaseUrl.TrimEnd('/') + \"/\" + QueryString.TrimStart('/');\n            var parts = url.Split('?');\n            var req = new Request(parts[0]);\n            var urlParams = req.RequestParameters;\n\n            if (parts.Length == 2)\n            {\n                var qsParms =\n                    (from pair in parts[1].Split('&')\n                     let keyVal = pair.Split('=')\n                     select new\n                     {\n                         Key = keyVal[0],\n                         Val = keyVal[1]\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Val);\n\n                foreach (KeyValuePair<string, string> parm in qsParms)\n                    urlParams.Add(new QueryParameter(parm.Key, parm.Value));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms response into List of Raw\n        /// </summary>\n        /// <param name=\"response\">Twitter response</param>\n        /// <returns>List of Raw</returns>\n        public virtual List<T> ProcessResults(string response)\n        {\n            var rawList = new List<Raw>\n            {\n                new Raw\n                {\n                    QueryString = QueryString,\n                    Response = response\n                }\n            };\n\n            return rawList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var raw = new Raw\n            {\n                Response = responseJson\n            };\n\n            return raw.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Raw/TwitterContextRawCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/home_timeline.json\" for a home timeline query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <returns>Twitter JSON response.</returns>\n        public async Task<string> ExecuteRawAsync(string queryString, Dictionary<string, string> parameters, CancellationToken cancelToken = default)\n        {\n            string rawUrl = BaseUrl.TrimEnd('/') + \"/\" + queryString.TrimStart('/');\n\n            RawResult = await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Raw>(HttpMethod.Post.ToString(), rawUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return RawResult;\n        }\n\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/home_timeline.json\" for a home timeline query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <param name=\"method\"><see cref=\"HttpMethod\"/> for sending the request.</param>\n        /// <returns>Twitter JSON response.</returns>\n        public async Task<string> ExecuteRawAsync(string queryString, Dictionary<string, string> parameters, HttpMethod method, CancellationToken cancelToken = default)\n        {\n            string rawUrl = BaseUrl.TrimEnd('/') + \"/\" + queryString.TrimStart('/');\n\n            RawResult = await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Raw>(method.ToString(), rawUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return RawResult;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/SavedSearch/SavedSearch.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// info for query and retrieval of saved searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SavedSearch\n    {\n        public SavedSearch() { }\n        public SavedSearch(JsonData searchJson)\n        {\n            Query = searchJson.GetValue<string>(\"query\");\n            Name = searchJson.GetValue<string>(\"name\");\n            Position = searchJson.GetValue<int>(\"position\");\n            IDResponse = searchJson.GetValue<ulong>(\"id\");\n            CreatedAt = searchJson.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n        }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        public SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Search item ID.\n        /// </summary>\n        public ulong IDResponse { get; set; }\n\n        /// <summary>\n        /// name of search\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// search query contents\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// position in search list\n        /// </summary>\n        public int Position { get; set; }\n\n        /// <summary>\n        /// when search was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/SavedSearch/SavedSearchAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum SavedSearchAction\n    {\n        Create,\n\n        Destroy\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/SavedSearch/SavedSearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    ///Processes Twitter Saved Search requests.\n    /// </summary>\n    public class SavedSearchRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        internal SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<SavedSearch>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", \"Type\");\n\n            Type = RequestProcessorHelper.ParseEnum<SavedSearchType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    return BuildSearchesUrl();\n                case SavedSearchType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// construct a base show url\n        /// </summary>\n        /// <param name=\"url\">base show url</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required for a Saved Search Show query.\", \"ID\");\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n\n            var url = BaseUrl + \"saved_searches/show/\" + ID + \".json\";\n\n            return new Request(url);\n        }\n\n        /// <summary>\n        /// return a saved searches url\n        /// </summary>\n        /// <returns>saved search url</returns>\n        Request BuildSearchesUrl()\n        {\n            return new Request(BaseUrl + \"saved_searches/list.json\");\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of SavedSearch\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData searchJson = JsonMapper.ToObject(responseJson);\n\n            List<SavedSearch> savedSearchList = null;\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    savedSearchList =\n                        (from JsonData search in searchJson\n                         select new SavedSearch(search))\n                        .ToList();\n                    break;\n                case SavedSearchType.Show:\n                    savedSearchList = new List<SavedSearch> { new SavedSearch(searchJson) };\n                    break;\n                default:\n                    break;\n            }\n\n            foreach (var search in savedSearchList)\n            {\n                search.Type = Type;\n                search.ID = ID;\n            };\n\n            return savedSearchList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData searchJson = JsonMapper.ToObject(responseJson);\n\n            var search = new SavedSearch(searchJson);\n\n            return search.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/SavedSearch/SavedSearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of saved search queries\n    /// </summary>\n    public enum SavedSearchType\n    {\n        /// <summary>\n        /// query all searches by logged in user\n        /// </summary>\n        Searches,\n\n        /// <summary>\n        /// query for a single search by the search id\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/SavedSearch/TwitterContextSavedSearchCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"query\">Search query to add</param>\n        /// <returns>SavedSearch object</returns>\n        public async Task<SavedSearch> CreateSavedSearchAsync(string query, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(query))\n                throw new ArgumentException(\"query is required.\", \"query\");\n\n            var savedSearchUrl = BaseUrl + \"saved_searches/create.json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    savedSearchUrl,\n                    new Dictionary<string, string>\n                    {\n                        { \"query\", query }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, SavedSearchAction.Create);\n        }\n\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"id\">ID of saved search</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>SavedSearch object</returns>\n        public async Task<SavedSearch> DestroySavedSearchAsync(ulong id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"Invalid Saved Search ID: \" + id, \"id\");\n\n            var savedSearchUrl = BaseUrl + \"saved_searches/destroy/\" + id + \".json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    savedSearchUrl,\n                    new Dictionary<string, string>(),\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            SavedSearch result = reqProc.ProcessActionResult(RawResult, SavedSearchAction.Destroy);\n            result.ID = id;\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Search/Attitude.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Search for tweets with different types of attitudes\n    /// </summary>\n    [Flags]\n    public enum Attitude\n    {\n        /// <summary>\n        /// Happy\n        /// </summary>\n        Positive = 0x01,\n\n        /// <summary>\n        /// Sad\n        /// </summary>\n        Negative = 0x02,\n\n        /// <summary>\n        /// Curious\n        /// </summary>\n        Question = 0x04\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Search/ResultType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of results to return in a search\n    /// </summary>\n    public enum ResultType\n    {\n        /// <summary>\n        /// Combination of popular and recent\n        /// </summary>\n        Mixed,\n\n        /// <summary>\n        /// Real-time results\n        /// </summary>\n        Recent,\n\n        /// <summary>\n        /// Most popular tweets\n        /// </summary>\n        Popular\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Search/Search.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// for performing Twitter searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Search\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        public SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        public string SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        public string Locale { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        public DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// first status ID\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        public string GeoCode { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result requested (mixed, recent, or popular)\n        /// </summary>\n        public ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// Include entities in results\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Supports compatibility or extended mode tweets.\n        /// </summary>\n        public TweetMode TweetMode { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        public List<Status> Statuses { get; set; }\n\n        /// <summary>\n        /// Tweet metadata returned from search\n        /// </summary>\n        public SearchMetaData SearchMetaData { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Search/SearchMetaData.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SearchMetaData\n    {\n        public SearchMetaData() { }\n        public SearchMetaData(JsonData metaData)\n        {\n            CompletedIn = metaData.GetValue<decimal>(\"completed_in\");\n            MaxID = metaData.GetValue<string>(\"max_id_str\").GetULong(0ul);\n            NextResults = metaData.GetValue<string>(\"next_results\");\n            Query = metaData.GetValue<string>(\"query\");\n            RefreshUrl = metaData.GetValue<string>(\"refresh_url\");\n            Count = metaData.GetValue<int>(\"count\");\n            SinceID = metaData.GetValue<string>(\"since_id_str\").GetULong(0ul);\n        }\n\n        /// <summary>\n        /// Processing time for search\n        /// </summary>\n        public decimal CompletedIn { get; set; }\n\n        /// <summary>\n        /// Max ID returned in search\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Query string to get next page\n        /// </summary>\n        public string NextResults { get; set; }\n\n        /// <summary>\n        /// Original Query\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Query string to refresh this search\n        /// </summary>\n        public string RefreshUrl { get; set; }\n\n        /// <summary>\n        /// Number of results per page to return on next query\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Don't return tweets older than this ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Search/SearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes search queries\n    /// </summary>\n    class SearchRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        internal SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        internal string GeoCode { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        internal string SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        internal string Locale { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result (mixed, recent, or popular)\n        /// </summary>\n        private ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        internal DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Include entities in results (default: false)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// for getting tweets with ID that is less than or equal to this value\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Supports compatibility or extended mode tweets.\n        /// </summary>\n        internal TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Search>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Query\",\n                       \"GeoCode\",\n                       \"SearchLanguage\",\n                       \"Locale\",\n                       \"ResultType\",\n                       \"Count\",\n                       \"Until\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"IncludeEntities\",\n                       nameof(TweetMode)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"Type\"))\n                Type = RequestProcessorHelper.ParseEnum<SearchType>(parameters[\"Type\"]);\n            else\n                throw new ArgumentException(\"Type is required\", \"Type\");\n\n            return BuildSearchUrlParameters(parameters, \"search/tweets.json\");\n        }\n\n        /// <summary>\n        /// appends parameters for Search request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        private Request BuildSearchUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\") && !string.IsNullOrWhiteSpace(parameters[\"Query\"]))\n            {\n                Query = parameters[\"Query\"];\n\n                urlParams.Add(new QueryParameter(\"q\", Query));\n            }\n            else\n            {\n                throw new ArgumentNullException(\"Query\", \"Query filter in where clause is required.\");\n            }\n\n            if (parameters.ContainsKey(\"GeoCode\"))\n            {\n                GeoCode = parameters[\"GeoCode\"];\n                urlParams.Add(new QueryParameter(\"geocode\" , GeoCode));\n            }\n\n            if (parameters.ContainsKey(\"SearchLanguage\"))\n            {\n                SearchLanguage = parameters[\"SearchLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", SearchLanguage));\n            }\n\n            if (parameters.ContainsKey(\"Locale\"))\n            {\n                Locale = parameters[\"Locale\"];\n                urlParams.Add(new QueryParameter(\"locale\", Locale));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Until\"))\n            {\n                Until = DateTime.Parse(parameters[\"Until\"]).Date;\n                urlParams.Add(new QueryParameter(\"until\",  Until.ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", MaxID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ResultType\"))\n            {\n                ResultType = RequestProcessorHelper.ParseEnum<ResultType>(parameters[\"ResultType\"]);\n                urlParams.Add(new QueryParameter(\"result_type\" , ResultType.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Search\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Search> search;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                search = new List<Search> { new Search() };\n            }\n            else\n            {\n                var searchResult = JsonSerialize(responseJson);\n\n                search = new List<Search> { searchResult };\n            }\n\n            return search.OfType<T>().ToList();\n        }\n\n        Search JsonSerialize(string responseJson)\n        {\n            JsonData search = JsonMapper.ToObject(responseJson);\n\n            var searchResult = new Search\n            {\n                Type = Type,\n                GeoCode = GeoCode,\n                Count = Count,\n                Query = Query,\n                MaxID = MaxID,\n                SinceID = SinceID,\n                SearchLanguage = SearchLanguage,\n                Locale = Locale,\n                Until = Until.Date,\n                ResultType = ResultType,\n                IncludeEntities = IncludeEntities,\n                Statuses =\n                    (from JsonData result in search[\"statuses\"]\n                     select new Status(result))\n                    .ToList(),\n                SearchMetaData = \n                    new SearchMetaData(search.GetValue<JsonData>(\"search_metadata\")),\n                TweetMode = TweetMode\n            };\n\n            return searchResult;\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Search/SearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of search\n    /// </summary>\n    public enum SearchType\n    {\n        /// <summary>\n        /// implemented mostly for consistency\n        /// with the rest of the API\n        /// </summary>\n        Search\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/AuthAccessType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Restricts access type\n    /// </summary>\n    public enum AuthAccessType\n    {\n        /// <summary>\n        /// Default - use account settings access\n        /// </summary>\n        NoChange,\n\n        /// <summary>\n        /// Restrict to read-only\n        /// </summary>\n        Read,\n\n        /// <summary>\n        /// Read/write access\n        /// </summary>\n        Write\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/Hmac.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter.Security\n{\n    /// <summary>\n    /// Implements RFC 2104\n    /// </summary>\n    public class Hmac : IHmac\n    {\n        const int Blocksize = 64;\n\n        readonly IHash hash;\n\n        public Hmac(IHash hash)\n        {\n            this.hash = hash;\n        }\n\n        public byte[] Sign(byte[] key, byte[] msg)\n        {\n            byte[] initializedKey = InitializeKey(key);\n\n            byte[] oKeyPad = new byte[Blocksize];\n            byte[] iKeyPad = new byte[Blocksize];\n\n            for (int i = 0; i < Blocksize; i++)\n            {\n                oKeyPad[i] = (byte)(0x5c ^ initializedKey[i]);\n                iKeyPad[i] = (byte)(0x36 ^ initializedKey[i]);\n            }\n\n            byte[] innerHash = hash.Compute(Concat(iKeyPad, msg));\n            byte[] outerHash = hash.Compute(Concat(oKeyPad, innerHash));\n\n            return outerHash;\n        }\n\n        byte[] InitializeKey(byte[] key)\n        {\n            byte[] initializedKey = null;\n\n            if (key.Length > Blocksize)\n            {\n                byte[] hashedKey = hash.Compute(key);\n                byte[] padding = Enumerable.Repeat<byte>(0x00, Blocksize - hashedKey.Length).ToArray();\n                initializedKey = Concat(hashedKey, padding);\n            }\n            else if (key.Length < Blocksize)\n            {\n                byte[] padding = Enumerable.Repeat<byte>(0x00, Blocksize - key.Length).ToArray();\n                initializedKey = Concat(key, padding);\n            }\n            else\n            {\n                initializedKey = key;\n            }\n\n            return initializedKey;\n        }\n\n        byte[] Concat(byte[] first, byte[] second)\n        {\n            byte[] combinedBytes = new byte[first.Length + second.Length];\n            Buffer.BlockCopy(first, 0, combinedBytes, 0, first.Length);\n            Buffer.BlockCopy(second, 0, combinedBytes, first.Length, second.Length);\n            return combinedBytes;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/ICredentialStore.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public interface ICredentialStore\n    {\n        /// <summary>\n        /// Key provided by Twitter for your application\n        /// </summary>\n        string ConsumerKey { get; set; }\n\n        /// <summary>\n        /// Secret provided by Twitter for your application\n        /// </summary>\n        string ConsumerSecret { get; set; }\n\n        /// <summary>\n        /// Token provided by Twitter for making request\n        /// </summary>\n        string OAuthToken { get; set; }\n\n        /// <summary>\n        /// Unique access token for a user\n        /// </summary>\n        string OAuthTokenSecret { get; set; }\n\n        /// <summary>\n        /// Twitter screen name\n        /// </summary>\n        string ScreenName { get; set; }\n\n        /// <summary>\n        /// Twitter user ID\n        /// </summary>\n        ulong UserID { get; set; }\n\n        /// <summary>\n        /// Does this CredentialStore have all credentials populated?\n        /// </summary>\n        bool HasAllCredentials();\n\n        /// <summary>\n        /// Populates this with credential values from storage\n        /// </summary>\n        Task LoadAsync();\n\n        /// <summary>\n        /// Saves credentials from this to storage\n        /// </summary>\n        Task StoreAsync();\n\n        /// <summary>\n        /// Removes credentials from storage\n        /// </summary>\n        Task ClearAsync();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/IHash.cs",
    "content": "namespace LinqToTwitter.Security\n{\n    public interface IHash\n    {\n        byte[] Compute(byte[] key);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/IHmac.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace LinqToTwitter.Security\n{\n    public interface IHmac\n    {\n        byte[] Sign(byte[] key, byte[] msg);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/IOAuth.cs",
    "content": "using System.Collections.Generic;\n\nnamespace LinqToTwitter.Security\n{\n    public interface IOAuth\n    {\n        string GetAuthorizationString(string method, string url, IDictionary<string, string> parameters, string consumerSecret, string oAuthTokenSecret);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/InMemoryCredentialStore.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// These credentials just reside in memory and only\n    /// have a lifetime matching their containing AppDomain.\n    /// </summary>\n    public class InMemoryCredentialStore : ICredentialStore\n    {\n        public virtual string ConsumerKey { get; set; }\n\n        public virtual string ConsumerSecret { get; set; }\n\n        public virtual string OAuthToken { get; set; }\n\n        public virtual string OAuthTokenSecret { get; set; }\n\n        public virtual string ScreenName { get; set; }\n\n        public virtual ulong UserID { get; set; }\n\n        public bool HasAllCredentials()\n        {\n            return\n                !string.IsNullOrWhiteSpace(ConsumerKey) &&\n                !string.IsNullOrWhiteSpace(ConsumerSecret) &&\n                !string.IsNullOrWhiteSpace(OAuthToken) &&\n                !string.IsNullOrWhiteSpace(OAuthTokenSecret);\n        }\n\n#pragma warning disable 1998\n        \n        //\n        // by definition, this type doesn't work \n        // with a data store other than memory.\n        //\n\n        public virtual async Task LoadAsync()\n        {\n        }\n\n        public virtual async Task StoreAsync() { }\n\n        public virtual async Task ClearAsync()\n        {\n            ConsumerKey = null;\n            ConsumerSecret = null;\n            OAuthToken = null;\n            OAuthTokenSecret = null;\n            ScreenName = null;\n            UserID = 0ul;\n        }\n\n#pragma warning restore 1998\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/OAuth.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing LinqToTwitter.Net;\n\nnamespace LinqToTwitter.Security\n{\n    public class OAuth : IOAuth\n    {\n        public string GetAuthorizationString(string method, string url, IDictionary<string, string> parameters, string consumerSecret, string oAuthTokenSecret)\n        {\n            string encodedAndSortedString = BuildEncodedSortedString(parameters);\n            string signatureBaseString = BuildSignatureBaseString(method, url, encodedAndSortedString);\n            string signingKey = BuildSigningKey(consumerSecret, oAuthTokenSecret);\n            string signature = CalculateSignature(signingKey, signatureBaseString);\n            string authorizationHeader = BuildAuthorizationHeaderString(encodedAndSortedString, signature);\n\n            return authorizationHeader;\n        }\n  \n        const string OAuthVersion = \"1.0\";\n        const string OAuthSignatureMethod = \"HMAC-SHA1\";\n        internal void AddMissingOAuthParameters(IDictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"oauth_timestamp\"))\n                parameters.Add(\"oauth_timestamp\", GetTimestamp());\n\n            if (!parameters.ContainsKey(\"oauth_nonce\"))\n                parameters.Add(\"oauth_nonce\", GenerateNonce());\n\n            if (!parameters.ContainsKey(\"oauth_version\"))\n                parameters.Add(\"oauth_version\", OAuthVersion);\n\n            if (!parameters.ContainsKey(\"oauth_signature_method\"))\n                parameters.Add(\"oauth_signature_method\", OAuthSignatureMethod);     \n        }\n\n        internal string BuildEncodedSortedString(IDictionary<string, string> parameters)\n        {\n            AddMissingOAuthParameters(parameters);\n\n            return\n                string.Join(\"&\",\n                    (from parm in parameters\n                     orderby parm.Key\n                     select parm.Key + \"=\" + Url.PercentEncode(parameters[parm.Key]))\n                    .ToArray());\n        }\n\n        internal string BuildSignatureBaseString(string method, string url, string encodedStringParameters)\n        {\n            int paramsIndex = url.IndexOf('?');\n\n            string urlWithoutParams = paramsIndex >= 0 ? url.Substring(0, paramsIndex) : url;\n\n            return string.Join(\"&\", new string[]\n            {\n                method.ToUpper(),\n                Url.PercentEncode(urlWithoutParams, false),\n                Url.PercentEncode(encodedStringParameters, false)\n            });\n        }\n\n        internal string BuildSigningKey(string consumerSecret, string oAuthTokenSecret)\n        {\n            return string.Format(\n                CultureInfo.InvariantCulture, \"{0}&{1}\", \n                Url.PercentEncode(consumerSecret, false),\n                Url.PercentEncode(oAuthTokenSecret, false));\n        }\n\n        internal string CalculateSignature(string signingKey, string signatureBaseString)\n        {\n            byte[] key = Encoding.UTF8.GetBytes(signingKey);\n            byte[] msg = Encoding.UTF8.GetBytes(signatureBaseString);\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            return Convert.ToBase64String(hash);\n        }\n\n        internal string BuildAuthorizationHeaderString(string encodedAndSortedString, string signature)\n        {\n            string[] allParms = (encodedAndSortedString + \"&oauth_signature=\" + Url.PercentEncode(signature)).Split('&');\n            string allParmsString =\n                string.Join(\", \",\n                    (from parm in allParms\n                     let keyVal = parm.Split('=')\n                     where parm.StartsWith(\"oauth\") || parm.StartsWith(\"x_auth\")\n                     orderby keyVal[0]\n                     select keyVal[0] + \"=\\\"\" + keyVal[1] + \"\\\"\")\n                    .ToList());\n            return \"OAuth \" + allParmsString;\n        }\n\n        const long UnixEpocTicks = 621355968000000000L;\n        internal string GetTimestamp()\n        {\n            long ticksSinceUnixEpoc = DateTime.UtcNow.Ticks - UnixEpocTicks;\n            double secondsSinceUnixEpoc = new TimeSpan(ticksSinceUnixEpoc).TotalSeconds;\n            return Math.Floor(secondsSinceUnixEpoc).ToString(CultureInfo.InvariantCulture);\n        }\n\n        internal virtual string GenerateNonce()\n        {\n            return new Random().Next(111111, 9999999).ToString(CultureInfo.InvariantCulture);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/OAuthKeys.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace LinqToTwitter\n{\n    public class OAuthKeys\n    {\n        public const string TwitterConsumerKey = \"TwitterConsumerKey\";\n        public const string TwitterConsumerSecret = \"TwitterConsumerSecret\";\n        public const string TwitterOAuthToken = \"TwitterOAuthToken\";\n        public const string TwitterOAuthTokenSecret = \"TwitterOAuthTokenSecret\";\n        public const string TwitterAccessToken = \"TwitterAccessToken\";\n        public const string TwitterAccessTokenSecret = \"TwitterAccessTokenSecret\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/PinAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class PinAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// PIN-based authorization requires a 7-digit pin that is provided by Twitter.\n        /// The user must copy that PIN and give it back to the program to use as a verifier\n        /// in getting the final access token from Twitter.  You should write code (a lambda)\n        /// that allows the user to provide this pin that this code will return.\n        /// </summary>\n        public Func<string> GetPin { get; set; }\n\n        /// <summary>\n        /// Action to redirect user to Twitter authorization page\n        /// </summary>\n        public Action<string> GoToTwitterAuthorization { get; set; }\n\n        public PinAuthorizer()\n            : base(false, AuthAccessType.NoChange, null) { }\n\n        public PinAuthorizer(bool forceLogin)\n            : base(forceLogin, AuthAccessType.NoChange, null) { }\n\n        public PinAuthorizer(bool forceLogin, AuthAccessType accessType) \n            : base(forceLogin, accessType, null) { }\n\n        public PinAuthorizer(bool forceLogin, AuthAccessType accessType, string preFillScreenName)\n            : base(forceLogin, accessType, preFillScreenName) { }\n\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            if (GetPin == null)\n                throw new InvalidOperationException(\"You must provide an Func<string> delegate/lambda for GetPin.\");\n\n            await GetRequestTokenAsync(\"oob\").ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n\n            string verifier = GetPin();\n\n            var accessTokenParams = new Dictionary<string, string>();\n            accessTokenParams.Add(\"oauth_verifier\", verifier);\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n\n        public async Task BeginAuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            await GetRequestTokenAsync(\"oob\").ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n        }\n\n\n        public async Task CompleteAuthorizeAsync(string pin)\n        {\n            var accessTokenParams = new Dictionary<string, string>();\n            accessTokenParams.Add(\"oauth_verifier\", pin);\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/Sha1.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter.Security\n{\n    /// <summary>\n    /// Implements RFC 3174\n    /// </summary>\n    public class Sha1 : IHash\n    {\n        const int HashSize = 20;\n\n        const uint K0 = 0x5A827999;\n        const uint K1 = 0x6ED9EBA1;\n        const uint K2 = 0x8F1BBCDC;\n        const uint K3 = 0xCA62C1D6;\n\n        class Context\n        {\n            public uint A, B, C, D, E;\n\n            public int MessageBlockIndex;\n            public readonly byte[] MessageBlock = new byte[64];\n\n            public readonly uint[] IntermediateHash = \n            {\n                0x67452301,\n                0xEFCDAB89,\n                0x98BADCFE,\n                0x10325476,\n                0xC3D2E1F0\n            };\n\n            public uint LengthHigh;\n            public uint LengthLow;\n        }\n\n        uint CircularShift(int bits, uint word)\n        {\n            return (((word) << (bits)) | ((word) >> (32 - (bits))));\n        }\n\n        public byte[] Compute(byte[] message)\n        {\n            var ctx = new Context();\n\n            foreach(var msgByte in message)\n            {\n                ctx.MessageBlock[ctx.MessageBlockIndex++] = (byte)(msgByte & 0xFF);\n\n                ctx.LengthLow += 8;\n                if (ctx.LengthLow == 0)\n                    ctx.LengthHigh++;\n\n                if (ctx.MessageBlockIndex == 64)\n                    ProcessMessageBlock(ctx);\n            }\n\n            PadMessage(ctx);\n\n            var msgDigest = new byte[HashSize];\n\n            for (int i = 0; i < HashSize; i++)\n                msgDigest[i] = (byte)(ctx.IntermediateHash[i >> 2] >> 8 * (3 - (i & 0x03)));\n\n            return msgDigest;\n        }\n  \n        void ProcessMessageBlock(Context ctx)\n        {\n            uint[] w = new uint[80];\n\n            for (int t = 0; t < 16; t++)\n            {\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 0] << 24;\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 1] << 16;\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 2] << 08;\n                w[t] |= (uint)ctx.MessageBlock[t * 4 + 3];\n            }\n\n            for (int t = 16; t < 80; t++)\n                w[t] = CircularShift(1, w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16]);\n\n            ctx.A = ctx.IntermediateHash[0];\n            ctx.B = ctx.IntermediateHash[1];\n            ctx.C = ctx.IntermediateHash[2];\n            ctx.D = ctx.IntermediateHash[3];\n            ctx.E = ctx.IntermediateHash[4];\n\n            for (int t = 0; t < 20; t++)\n                RotateWordBuffers(ctx, (b, c, d) => (b & c) | ((~b) & d), w[t], K0);\n\n            for (int t = 20; t < 40; t++)\n                RotateWordBuffers(ctx, (b, c, d) => b ^ c ^ d, w[t], K1);\n\n            for (int t = 40; t < 60; t++)\n                RotateWordBuffers(ctx, (b, c, d) => (b & c) | (b & d) | (c & d), w[t], K2);\n\n            for (int t = 60; t < 80; t++)\n                RotateWordBuffers(ctx, (b, c, d) => b ^ c ^ d, w[t], K3);\n\n            ctx.IntermediateHash[0] += ctx.A;\n            ctx.IntermediateHash[1] += ctx.B;\n            ctx.IntermediateHash[2] += ctx.C;\n            ctx.IntermediateHash[3] += ctx.D;\n            ctx.IntermediateHash[4] += ctx.E;\n\n            ctx.MessageBlockIndex = 0;\n        }\n  \n        void RotateWordBuffers(Context ctx, Func<uint, uint, uint, uint> f, uint wt, uint kt)\n        {\n            uint temp = CircularShift(5, ctx.A) + (f(ctx.B, ctx.C, ctx.D)) + ctx.E + wt + kt;\n\n            ctx.E = ctx.D;\n            ctx.D = ctx.C;\n            ctx.C = CircularShift(30, ctx.B);\n            ctx.B = ctx.A;\n            ctx.A = temp;\n        }\n\n        void PadMessage(Context ctx)\n        {\n            if (ctx.MessageBlockIndex > 55)\n            {\n                ctx.MessageBlock[ctx.MessageBlockIndex++] = 0x80;\n\n                while (ctx.MessageBlockIndex < 64)\n                    ctx.MessageBlock[ctx.MessageBlockIndex++] = 0;\n\n                ProcessMessageBlock(ctx);\n\n                while (ctx.MessageBlockIndex < 56)\n                    ctx.MessageBlock[ctx.MessageBlockIndex++] = 0;\n            }\n            else\n            {\n                ctx.MessageBlock[ctx.MessageBlockIndex++] = 0x80;\n\n                while (ctx.MessageBlockIndex < 56)\n                    ctx.MessageBlock[ctx.MessageBlockIndex++] = 0;\n            }\n\n            ctx.MessageBlock[56] = (byte)(ctx.LengthHigh >> 24);\n            ctx.MessageBlock[57] = (byte)(ctx.LengthHigh >> 16);\n            ctx.MessageBlock[58] = (byte)(ctx.LengthHigh >> 08);\n            ctx.MessageBlock[59] = (byte) ctx.LengthHigh;\n            ctx.MessageBlock[60] = (byte)(ctx.LengthLow >> 24);\n            ctx.MessageBlock[61] = (byte)(ctx.LengthLow >> 16);\n            ctx.MessageBlock[62] = (byte)(ctx.LengthLow >> 08);\n            ctx.MessageBlock[63] = (byte) ctx.LengthLow;\n\n            ProcessMessageBlock(ctx);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/SingleUserAuthorizer.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class SingleUserAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// Not required. Since you've already provided all 4 tokens, you don't need to call this.\n        /// </summary>\n        public async Task AuthorizeAsync()\n        {\n            if (!CredentialStore.HasAllCredentials())\n                throw new InvalidOperationException(\"SingleUserAuthorizer needs pre-set credentials; don't call Authorize unless you've set all four credentials.\");\n\n            await Task.Delay(0).ConfigureAwait(false);\n\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/SingleUserInMemoryCredentialStore.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Maps the twitter-provided credentials to the in memory credentials \n    /// for in-memory use.\n    /// </summary>\n    public class SingleUserInMemoryCredentialStore : InMemoryCredentialStore\n    {\n        // The properties provided by Twitter are named AccessToken and\n        // AccessTokenSecret, we need to map them to what the \n        // IOAuthCredentials interface uses.\n        public virtual string AccessToken { get; set; }\n        public virtual string AccessTokenSecret { get; set; }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return AccessToken;\n            }\n            set\n            {\n                AccessToken = value;\n            }\n        }\n\n        public override string OAuthTokenSecret {\n            get\n            {\n                return AccessTokenSecret;\n            }\n            set\n            {\n                AccessTokenSecret = value;\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            AccessToken = null;\n            AccessTokenSecret = null;\n\n            return base.ClearAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/XAuthAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class XAuthAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public async Task AuthorizeAsync()\n        {\n            var xauthCredentials = CredentialStore as XAuthCredentials;\n            var postData = new Dictionary<string, string>\n            {\n                {\"x_auth_username\", xauthCredentials.UserName},\n                {\"x_auth_password\", xauthCredentials.Password},\n                {\"x_auth_mode\", \"client_auth\"}\n            };\n\n            await PostAccessTokenAsync(postData).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Security/XAuthCredentials.cs",
    "content": "﻿\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Used for XAuthAuthorization, which requires permission from Twitter before using\n    /// </summary>\n    public class XAuthCredentials : InMemoryCredentialStore\n    {\n        /// <summary>\n        /// Twitter User Name\n        /// </summary>\n        public string UserName { get; set; }\n\n        /// <summary>\n        /// Twitter Password\n        /// </summary>\n        public string Password { get; set; }\n\n        //public override void Load(string credentialString)\n        //{\n        //    base.Load(credentialString);\n\n        //    string[] credentials = credentialString.Split(',');\n\n        //    UserName = credentials[4];\n        //    Password = credentials[5];\n        //}\n\n        //public override string ToString()\n        //{\n        //    return base.ToString() + \",\" + UserName + \",\" + Password;\n        //}\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/Extensions/DictionaryExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\n//#if !SILVERLIGHT && !CLIENT_PROFILE && !NETFX_CORE && !L2T_PCL\n//using System.Web.Script.Serialization;\n//#endif\n\nnamespace LinqToTwitter.Json\n{\n    public static class DictionaryExtensions\n    {\n        public static DateTime GetValue(this IDictionary<string, object> dictionary, string key, DateTime defaultValue)\n        {\n            var value = dictionary.GetValue(key, String.Empty);\n            return value.GetDate(defaultValue);\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key)\n        {\n            return dictionary.GetValue(key, default(T));\n        }\n\n        public static T GetValue<T>(this IDictionary<string, object> dictionary, string key, T defaultValue)\n        {\n            object value;\n\n            if (dictionary.TryGetValue(key, out value) && value != null)\n                return (T)value;\n\n            return defaultValue;\n        }\n\n        public static ulong GetULong(this IDictionary<string, object> dictionary, string key)\n        {\n            object value;\n            if (dictionary.TryGetValue(key, out value))\n            {\n                return (ulong)(int)value;\n            }\n\n            return 0UL;\n        }\n\n//        public static T GetNested<T>(this IDictionary<string, object> dictionary, string key, JavaScriptSerializer serializer)\n//            where T : class\n//        {\n//            var nestedObject = dictionary.GetValue<object>(key, null);\n\n//            if (nestedObject != null)\n//            {\n//                return serializer.ConvertToType<T>(nestedObject);\n//            }\n\n//            return default(T);\n//        }\n\n//        public static IEnumerable<T> GetNestedEnumeration<T>(this IDictionary<string, object> dictionary, string key, JavaScriptSerializer serializer)\n//            where T : class\n//        {\n//#if SILVERLIGHT || CLIENT_PROFILE\n//            var array = dictionary.GetValue<List<object>>(key, null);\n//#else\n//            var array = dictionary.GetValue<ArrayList>(key, null);\n//#endif\n\n//            if (array != null)\n//            {\n//                var elements = (from JsonData element in array\n//                                select serializer.ConvertToType<T>(element));\n//                return elements;\n//            }\n\n//            return Enumerable.Empty<T>();\n//        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/Extensions/LitJsonExtensions.cs",
    "content": "﻿using System;\nusing LitJson;\n\nnamespace LinqToTwitter.Serialization.Extensions\n{\n    public static class LitJsonExtensions\n    {\n        public static void WriteJsonData(this JsonWriter writer, JsonData jsonData)\n        {\n            var reader = new JsonReader(jsonData.ToJson());\n\n            while (reader.Read())\n            {\n                switch (reader.Token)\n                {\n                    case JsonToken.None:\n                        break;\n                    case JsonToken.ObjectStart:\n                        writer.WriteObjectStart();\n                        break;\n                    case JsonToken.PropertyName:\n                        writer.WritePropertyName(reader.Value.ToString());\n                        break;\n                    case JsonToken.ObjectEnd:\n                        writer.WriteObjectEnd();\n                        break;\n                    case JsonToken.ArrayStart:\n                        writer.WriteArrayStart();\n                        break;\n                    case JsonToken.ArrayEnd:\n                        writer.WriteArrayEnd();\n                        break;\n                    case JsonToken.Int:\n                        writer.Write((int)reader.Value);\n                        break;\n                    case JsonToken.Long:\n                        writer.Write((long)reader.Value);\n                        break;\n                    case JsonToken.ULong:\n                        writer.Write((ulong)reader.Value);\n                        break;\n                    case JsonToken.Double:\n                        writer.Write((double)reader.Value);\n                        break;\n                    case JsonToken.String:\n                        writer.Write((string)reader.Value);\n                        break;\n                    case JsonToken.Boolean:\n                        writer.Write((bool)reader.Value);\n                        break;\n                    case JsonToken.Null:\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/Extensions/StringExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\n\nnamespace LinqToTwitter.Json\n{\n    public static class StringExtensions\n    {\n        public static bool GetBool(this string val)\n        {\n            return GetBool(val, false);\n        }\n\n        public static bool GetBool(this string val, bool defaultValue /* = false*/)\n        {\n            bool result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !bool.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static int GetInt(this string val)\n        {\n            return GetInt(val, 0);\n        }\n\n        public static int GetInt(this string val, int defaultValue /* = 0*/)\n        {\n            int result;\n            return String.IsNullOrWhiteSpace(val) ||\n                !int.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static long GetLong(this string val)\n        {\n            return GetLong(val, 0L);\n        }\n\n        public static long GetLong(this string val, long defaultValue /* = 0*/)\n        {\n            long result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !long.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static ulong GetULong(this string val)\n        {\n            return GetULong(val, 0ul);\n        }\n\n        public static ulong GetULong(this string val, ulong defaultValue /* = 0*/)\n        {\n            ulong result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !ulong.TryParse(val, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this string val)\n        {\n            return GetDouble(val, 0d);\n        }\n\n        public static double GetDouble(this string val, double defaultValue /* = 0*/)\n        {\n            double result;\n\n            return String.IsNullOrWhiteSpace(val) ||\n                !double.TryParse(val, NumberStyles.Any, CultureInfo.InvariantCulture, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n\n        public static DateTime GetDate(this string date)\n        {\n            return GetDate(date, DateTime.MinValue);\n        }\n\n        public static readonly string[] DateFormats = { \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n                                                         \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n                                                         \"yyyy-MM-dd HH:mm:ss\",\n                                                         \"yyyy-MM-dd HH:mm\"};\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            DateTime result;\n\n            return String.IsNullOrWhiteSpace(date) ||\n                !DateTime.TryParseExact(date,\n                        DateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string date, DateTime defaultValue)\n        {\n            var epochSeconds = date.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n            \n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/AUTHORS",
    "content": "Leonardo Boshell  --  leonardoboshell@users.sourceforge.net\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/COPYING",
    "content": "All the source code and related files distributed with this software have\nbeen dedicated to the public domain by the authors.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute\nthe software, either in source code form or as a compiled binary, for any\npurpose, commercial or non-commercial, and by any means.\n\nThank you for reading this notice. Inspired by the enlightened words used by\nthe authors of another software project, a very popular one, also in the\npublic domain, here's a blessing:\n\n  May you find forgiveness for yourself and forgive others.\n  May you experience and share the gift of uncoditional love.\n  May you see light, wherever the illusion of darkness appears.\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/HACKING",
    "content": "HACKING LitJSON\n\nThis software is dedicated to the public domain. This means that you may\nuse, modify and distribute the code freely without having to ask for\npermissions of any kind and without the need to follow any particular rules\nor conventions.\n\nIf, however, you want to contribute your own changes back to the original\nauthors to be redistributed along with any future versions, please note that\nthe following two requirements do apply:\n\na) Your source code should be written in the same coding style used in the\n   original files. This means that any code submitted to be included in\n   the project has to follow the conventions already in use regarding\n   indentation, spaces, casing, file headers and so on.\n\n   When in doubt, you may submit your contributions as close to the style as\n   you can, and they can be edited before inclusion if necessary.\n\nb) In order to keep this software in the public domain, all new contributors\n   are asked to dedicate their contributions to the public domain. If you\n   want to send a patch or enhancement for possible inclusion, please\n   accompany the patch with the following statement:\n\n     The author or authors of this code dedicate any and all copyright\n     interest in this code to the public domain. We make this dedication for\n     the benefit of the public at large and to the detriment of our heirs\n     and successors. We intend this dedication to be an overt act of\n     relinquishment in perpetuity of all present and future rights to this\n     code under copyright law.\n\n   If you are currently an employee, it is possible that by law your\n   employer automatically receives the copyright to any and all work that\n   you do, including enhancements you might want to submit to this project.\n   In that case, there's some legal work that has to be done to ensure your\n   patches stay in TestMethod in the public domain. We do not have the means nor\n   the will to handle such a process, but we're open to suggestions. Please\n   contact us if this situation applies to you.\n\nAll contributions received are regularly mentioned in the AUTHORS file\nbundled with this package, including the name of the contributor, and a\nshort description of the work. E-mail addresses are not included by default\nfor privacy reasons. If you submit contributions and want your e-mail\naddress added to the AUTHORS file (or don't want to be mentioned at all),\nplease specify that along with your submissions.\n\nThanks.\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/IJsonWrapper.cs",
    "content": "/**\n * IJsonWrapper.cs\n *   Interface that represents a jsonType capable of handling all kinds of JSON\n *   data. This is mainly used when mapping objects through JsonMapper, and\n *   it's implemented by JsonData.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\nusing System.Collections;\n\nnamespace LitJson\n{\n    public enum JsonType\n    {\n        None,\n\n        Object,\n        Array,\n        String,\n        Int,\n        Long,\n        Double,\n        Boolean,\n        Decimal,\n        ULong\n    }\n\n    public interface IJsonWrapper : IList, IOrderedDictionary\n    {\n        bool IsArray   { get; }\n        bool IsBoolean { get; }\n        bool IsDouble  { get; }\n        bool IsDecimal { get; }\n        bool IsInt     { get; }\n        bool IsLong    { get; }\n        bool IsULong   { get; }\n        bool IsObject  { get; }\n        bool IsString  { get; }\n\n        bool     GetBoolean ();\n        double   GetDouble ();\n        decimal  GetDecimal ();\n        int      GetInt ();\n        JsonType GetJsonType ();\n        long     GetLong ();\n        ulong    GetUlong ();\n        string   GetString ();\n\n        void SetBoolean  (bool val);\n        void SetDouble   (double val);\n        void SetDecimal(decimal val);\n        void SetInt      (int val);\n        void SetJsonType (JsonType jsonType);\n        void SetLong     (long val);\n        void SetUlong(ulong val);\n        void SetString   (string val);\n\n        string ToJson ();\n        void   ToJson (JsonWriter writer);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/IOrderedDictionary.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing LinqToTwitter;\n\nnamespace LitJson\n{\n    public interface IOrderedDictionary : IDictionary<string, JsonData>, ICollection, IEnumerable\n    {\n        object this[int index] { get; set; }\n\n        new IDictionaryEnumerator GetEnumerator();\n\n        void Insert(int index, object key, object value);\n\n        void RemoveAt(int index);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/JsonData.cs",
    "content": "/**\n * JsonData.cs\n *   Generic jsonType to hold JSON data (objects, arrays, and so on). This is\n *   the default jsonType returned by JsonMapper.ToObject().\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\n\nnamespace LitJson\n{\n    public class JsonData : IJsonWrapper, IEquatable<JsonData>\n    {\n        internal IDictionary<string, JsonData> InstObject;\n\n        private IList<JsonData>               instArray;\n        private bool                          instBoolean;\n        private double                        instDouble;\n        private int                           instInt;\n        private long                          instLong;\n        private string                        instString;\n        private string                        json;\n        private JsonType                      type;\n        decimal instDecimal;\n        ulong instUlong;\n\n        // Used to implement the IOrderedDictionary interface\n        private IList<KeyValuePair<string, JsonData>> objectList;\n\n        public int Count {\n            get { return EnsureCollection ().Count; }\n        }\n\n        public bool IsArray {\n            get { return type == JsonType.Array; }\n        }\n\n        public bool IsBoolean {\n            get { return type == JsonType.Boolean; }\n        }\n\n        public bool IsDouble {\n            get { return type == JsonType.Double; }\n        }\n\n        public bool IsInt {\n            get { return type == JsonType.Int; }\n        }\n\n        public bool IsLong {\n            get { return type == JsonType.Long; }\n        }\n\n        public bool IsObject {\n            get { return type == JsonType.Object; }\n        }\n\n        public bool IsString {\n            get { return type == JsonType.String; }\n        }\n\n        public bool IsDecimal\n        {\n            get { return type == JsonType.Decimal; }\n        }\n\n        public bool IsULong\n        {\n            get { return type == JsonType.ULong; }\n        }\n\n        int ICollection.Count {\n            get {\n                return Count;\n            }\n        }\n\n        bool ICollection.IsSynchronized {\n            get {\n                return EnsureCollection ().IsSynchronized;\n            }\n        }\n\n        object ICollection.SyncRoot {\n            get {\n                return EnsureCollection ().SyncRoot;\n            }\n        }\n\n        ICollection<string> IDictionary<string, JsonData>.Keys\n        {\n            get {\n                EnsureDictionary ();\n                IList<string> keys = objectList.Select(entry => entry.Key).ToList();\n\n                return (ICollection<string>) keys;\n            }\n        }\n\n        ICollection<JsonData> IDictionary<string, JsonData>.Values\n        {\n            get {\n                EnsureDictionary ();\n                IList<JsonData> values = objectList.Select(entry => entry.Value).ToList();\n\n                return (ICollection<JsonData>) values;\n            }\n        }\n\n        bool IJsonWrapper.IsArray {\n            get { return IsArray; }\n        }\n\n        bool IJsonWrapper.IsBoolean {\n            get { return IsBoolean; }\n        }\n\n        bool IJsonWrapper.IsDouble {\n            get { return IsDouble; }\n        }\n\n        bool IJsonWrapper.IsInt {\n            get { return IsInt; }\n        }\n\n        bool IJsonWrapper.IsLong {\n            get { return IsLong; }\n        }\n\n        bool IJsonWrapper.IsObject {\n            get { return IsObject; }\n        }\n\n        bool IJsonWrapper.IsString {\n            get { return IsString; }\n        }\n\n        bool IList.IsFixedSize {\n            get {\n                return EnsureList ().IsFixedSize;\n            }\n        }\n\n        bool IList.IsReadOnly {\n            get {\n                return EnsureList ().IsReadOnly;\n            }\n        }\n\n        JsonData IDictionary<string, JsonData>.this[string key]\n        {\n           get {\n                return EnsureDictionary ()[key];\n            }\n\n            set\n            {\n                if (! (key is String))\n                    throw new ArgumentException (\n                        \"The key has to be a string\");\n\n                JsonData data = ToJsonData (value);\n\n                this[key] = data;\n            }\n        }\n\n        object IOrderedDictionary.this[int idx] {\n            get {\n                EnsureDictionary ();\n                return objectList[idx].Value;\n            }\n\n            set {\n                EnsureDictionary ();\n                JsonData data = ToJsonData (value);\n\n                KeyValuePair<string, JsonData> oldEntry = objectList[idx];\n\n                InstObject[oldEntry.Key] = data;\n\n                var entry = new KeyValuePair<string, JsonData> (oldEntry.Key, data);\n\n                objectList[idx] = entry;\n            }\n        }\n\n        object IList.this[int index] {\n            get {\n                return EnsureList ()[index];\n            }\n\n            set {\n                EnsureList ();\n                JsonData data = ToJsonData (value);\n\n                this[index] = data;\n            }\n        }\n\n        public JsonData this[string propName] {\n            get {\n                EnsureDictionary ();\n                return InstObject[propName];\n            }\n\n            set {\n                EnsureDictionary ();\n\n                var entry = new KeyValuePair<string, JsonData> (propName, value);\n\n                if (InstObject.ContainsKey (propName)) {\n                    for (int i = 0; i < objectList.Count; i++) {\n                        if (objectList[i].Key == propName) {\n                            objectList[i] = entry;\n                            break;\n                        }\n                    }\n                } else\n                    objectList.Add (entry);\n\n                InstObject[propName] = value;\n\n                json = null;\n            }\n        }\n\n        public JsonData this[int index] {\n            get {\n                EnsureCollection ();\n\n                if (type == JsonType.Array)\n                    return instArray[index];\n\n                return objectList[index].Value;\n            }\n\n            set {\n                EnsureCollection ();\n\n                if (type == JsonType.Array)\n                    instArray[index] = value;\n                else {\n                    KeyValuePair<string, JsonData> entry = objectList[index];\n                    var newEntry = new KeyValuePair<string, JsonData> (entry.Key, value);\n\n                    objectList[index] = newEntry;\n                    InstObject[entry.Key] = value;\n                }\n\n                json = null;\n            }\n        }\n\n        public JsonData ()\n        {\n        }\n\n        public JsonData (bool boolean)\n        {\n            type = JsonType.Boolean;\n            instBoolean = boolean;\n        }\n\n        public JsonData (double number)\n        {\n            type = JsonType.Double;\n            instDouble = number;\n        }\n\n        public JsonData (int number)\n        {\n            type = JsonType.Int;\n            instInt = number;\n        }\n\n        public JsonData(long number)\n        {\n            type = JsonType.Long;\n            instLong = number;\n        }\n\n        public JsonData (decimal number)\n        {\n            type = JsonType.Decimal;\n            instDecimal = number;\n        }\n\n        public JsonData(ulong number)\n        {\n            type = JsonType.ULong;\n            instUlong = number;\n        }\n\n        public JsonData (object obj)\n        {\n            if (obj is Boolean) {\n                type = JsonType.Boolean;\n                instBoolean = (bool) obj;\n                return;\n            }\n\n            if (obj is Double) {\n                type = JsonType.Double;\n                instDouble = (double) obj;\n                return;\n            }\n\n            if (obj is Int32) {\n                type = JsonType.Int;\n                instInt = (int) obj;\n                return;\n            }\n\n            if (obj is Int64) {\n                type = JsonType.Long;\n                instLong = (long) obj;\n                return;\n            }\n\n            if (obj is Decimal)\n            {\n                type = JsonType.Decimal;\n                instDecimal = (decimal)obj;\n                return;\n            }\n\n            if (obj is UInt64)\n            {\n                type = JsonType.ULong;\n                instUlong = (ulong)obj;\n                return;\n            }\n\n            var s = obj as string;\n            if (s != null) {\n                type = JsonType.String;\n                instString = s;\n                return;\n            }\n\n            throw new ArgumentException (\n                \"Unable to wrap the given object with JsonData\");\n        }\n\n        public JsonData (string str)\n        {\n            type = JsonType.String;\n            instString = str;\n        }\n\n        public static implicit operator JsonData (Boolean data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Double data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Int32 data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData (Int64 data)\n        {\n            return new JsonData (data);\n        }\n\n        public static implicit operator JsonData(Decimal data)\n        {\n            return new JsonData(data);\n        }\n\n        public static implicit operator JsonData(UInt64 data)\n        {\n            return new JsonData(data);\n        }\n\n        public static implicit operator JsonData(String data)\n        {\n            return new JsonData (data);\n        }\n\n        public static explicit operator Boolean (JsonData data)\n        {\n            if (data.type != JsonType.Boolean)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a double\");\n\n            return data.instBoolean;\n        }\n\n        public static explicit operator Double (JsonData data)\n        {\n            if (data.type != JsonType.Double)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a double\");\n\n            return data.instDouble;\n        }\n\n        public static explicit operator Int32 (JsonData data)\n        {\n            if (data.type != JsonType.Int)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold an int\");\n\n            return data.instInt;\n        }\n\n        public static explicit operator Int64 (JsonData data)\n        {\n            if (data.type != JsonType.Long)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a long\");\n\n            return data.instLong;\n        }\n\n        public static explicit operator Decimal(JsonData data)\n        {\n            if (data.type != JsonType.Decimal && data.type != JsonType.Double)\n                throw new InvalidCastException(\n                    \"Instance of JsonData doesn't hold a decimal\");\n\n            if (data.type == JsonType.Double)\n            {\n                return (decimal) data.instDouble;\n            }\n\n            return data.instDecimal;\n        }\n\n        public static explicit operator UInt64(JsonData data)\n        {\n            if (data.type != JsonType.ULong && \n                data.type != JsonType.Long &&\n                data.type != JsonType.Int)\n                throw new InvalidCastException(\n                    \"Instance of JsonData doesn't hold a ulong\");\n\n            if (data.type == JsonType.Int)\n            {\n                return (ulong)data.instInt;\n            }\n\n            if (data.type == JsonType.Long)\n            {\n                return (ulong)data.instLong;\n            }\n\n            return data.instUlong;\n        }\n\n        public static explicit operator String (JsonData data)\n        {\n            if (data.type != JsonType.String)\n                throw new InvalidCastException (\n                    \"Instance of JsonData doesn't hold a string\");\n\n            return data.instString;\n        }\n\n        void ICollection.CopyTo (Array array, int index)\n        {\n            EnsureCollection ().CopyTo (array, index);\n        }\n\n        void IDictionary<string, JsonData>.Add (string key, JsonData value)\n        {\n            JsonData data = ToJsonData (value);\n\n            EnsureDictionary ().Add (key, data);\n\n            var entry = new KeyValuePair<string, JsonData>(key, data);\n            objectList.Add(entry);\n\n            json = null;\n        }\n\n        bool IDictionary<string, JsonData>.ContainsKey(string key)\n        {\n            return EnsureDictionary().ContainsKey(key);\n        }\n\n        bool IDictionary<string, JsonData>.Remove(string key)\n        {\n            bool removed = EnsureDictionary ().Remove (key);\n\n            for (int i = 0; i < objectList.Count; i++) {\n                if (objectList[i].Key == key)\n                {\n                    objectList.RemoveAt(i);\n                    break;\n                }\n            }\n\n            json = null;\n\n            return removed;\n        }\n\n        IEnumerator IEnumerable.GetEnumerator ()\n        {\n            return EnsureCollection ().GetEnumerator ();\n        }\n\n        bool IJsonWrapper.GetBoolean ()\n        {\n            if (type != JsonType.Boolean)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a boolean\");\n\n            return instBoolean;\n        }\n\n        double IJsonWrapper.GetDouble ()\n        {\n            if (type != JsonType.Double)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a double\");\n\n            return instDouble;\n        }\n\n        int IJsonWrapper.GetInt ()\n        {\n            if (type != JsonType.Int)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold an int\");\n\n            return instInt;\n        }\n\n        long IJsonWrapper.GetLong ()\n        {\n            if (type == JsonType.Long)\n                return instLong;\n            else if (type == JsonType.Int)\n                return instInt;\n            else\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a long\");\n        }\n\n        string IJsonWrapper.GetString ()\n        {\n            if (type != JsonType.String)\n                throw new InvalidOperationException (\n                    \"JsonData instance doesn't hold a string\");\n\n            return instString;\n        }\n\n        decimal IJsonWrapper.GetDecimal()\n        {\n            if (type != JsonType.Decimal && type != JsonType.Double)\n            {\n                throw new InvalidOperationException(\n                    \"JsonData instance doesn't hold a decimal\");\n            }\n\n            if (type == JsonType.Double)\n            {\n                return (decimal)instDouble;\n            }\n\n            return instDecimal;\n        }\n\n        ulong IJsonWrapper.GetUlong()\n        {\n            if (type != JsonType.ULong && \n                type != JsonType.Long &&\n                type != JsonType.Int)\n            {\n                throw new InvalidOperationException(\n                    \"JsonData instance doesn't hold a ulong\");\n            }\n\n            if (type == JsonType.Int)\n            {\n                return (ulong)instInt;\n            }\n\n            if (type == JsonType.Long)\n            {\n                return (ulong)instLong;\n            }\n\n            return instUlong;\n        }\n\n        void IJsonWrapper.SetBoolean (bool val)\n        {\n            type = JsonType.Boolean;\n            instBoolean = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetDouble (double val)\n        {\n            type = JsonType.Double;\n            instDouble = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetInt (int val)\n        {\n            type = JsonType.Int;\n            instInt = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetLong (long val)\n        {\n            type = JsonType.Long;\n            instLong = val;\n            json = null;\n        }\n\n        void IJsonWrapper.SetString (string val)\n        {\n            type = JsonType.String;\n            instString = val;\n            json = null;\n        }\n\n        public void SetDecimal(decimal val)\n        {\n            type = JsonType.Decimal;\n            instDecimal = val;\n            json = null;\n        }\n\n        public void SetUlong(ulong val)\n        {\n            type = JsonType.ULong;\n            instUlong = val;\n            json = null;\n        }\n\n        string IJsonWrapper.ToJson ()\n        {\n            return ToJson ();\n        }\n\n        void IJsonWrapper.ToJson (JsonWriter writer)\n        {\n            ToJson (writer);\n        }\n\n        int IList.Add (object value)\n        {\n            return Add (value);\n        }\n\n        void IList.Clear ()\n        {\n            EnsureList ().Clear ();\n            json = null;\n        }\n\n        bool IList.Contains (object value)\n        {\n            return EnsureList ().Contains (value);\n        }\n\n        int IList.IndexOf (object value)\n        {\n            return EnsureList ().IndexOf (value);\n        }\n\n        void IList.Insert (int index, object value)\n        {\n            EnsureList ().Insert (index, value);\n            json = null;\n        }\n\n        void IList.Remove (object value)\n        {\n            EnsureList ().Remove (value);\n            json = null;\n        }\n\n        void IList.RemoveAt (int index)\n        {\n            EnsureList ().RemoveAt (index);\n            json = null;\n        }\n\n        IDictionaryEnumerator IOrderedDictionary.GetEnumerator ()\n        {\n            EnsureDictionary ();\n\n            return new OrderedDictionaryEnumerator (\n                objectList.GetEnumerator ());\n        }\n\n        void IOrderedDictionary.Insert (int idx, object key, object value)\n        {\n            var property = (string) key;\n            JsonData data  = ToJsonData (value);\n\n            this[property] = data;\n\n            var entry = new KeyValuePair<string, JsonData> (property, data);\n\n            objectList.Insert (idx, entry);\n        }\n\n        void IOrderedDictionary.RemoveAt (int idx)\n        {\n            EnsureDictionary ();\n\n            InstObject.Remove (objectList[idx].Key);\n            objectList.RemoveAt (idx);\n        }\n\n        private ICollection EnsureCollection ()\n        {\n            if (type == JsonType.Array)\n                return (ICollection) instArray;\n\n            if (type == JsonType.Object)\n                return (ICollection) InstObject;\n\n            throw new InvalidOperationException (\n                \"The JsonData instance has to be initialized first\");\n        }\n\n        private IDictionary<string, JsonData> EnsureDictionary ()\n        {\n            if (type == JsonType.Object)\n                return InstObject;\n\n            if (type != JsonType.None)\n                throw new InvalidOperationException (\n                    \"Instance of JsonData is not a dictionary\");\n\n            type = JsonType.Object;\n            InstObject = new Dictionary<string, JsonData> ();\n            objectList = new List<KeyValuePair<string, JsonData>> ();\n\n            return InstObject;\n        }\n\n        private IList EnsureList ()\n        {\n            if (type == JsonType.Array)\n                return (IList) instArray;\n\n            if (type != JsonType.None)\n                throw new InvalidOperationException (\n                    \"Instance of JsonData is not a list\");\n\n            type = JsonType.Array;\n            instArray = new List<JsonData> ();\n\n            return (IList) instArray;\n        }\n\n        private JsonData ToJsonData (object obj)\n        {\n            if (obj == null)\n                return null;\n\n            var jsonData = obj as JsonData;\n            if (jsonData != null) return jsonData;\n\n            return new JsonData (obj);\n        }\n\n        private static void WriteJson (IJsonWrapper obj, JsonWriter writer)\n        {\n            if (obj.IsString) {\n                writer.Write (obj.GetString ());\n                return;\n            }\n\n            if (obj.IsBoolean) {\n                writer.Write (obj.GetBoolean ());\n                return;\n            }\n\n            if (obj.IsDouble) {\n                writer.Write (obj.GetDouble ());\n                return;\n            }\n\n            if (obj.IsInt) {\n                writer.Write (obj.GetInt ());\n                return;\n            }\n\n            if (obj.IsLong) {\n                writer.Write (obj.GetLong ());\n                return;\n            }\n\n            if (obj.IsDecimal)\n            {\n                writer.Write(obj.GetDecimal());\n                return;\n            }\n\n            if (obj.IsULong)\n            {\n                writer.Write(obj.GetUlong());\n                return;\n            }\n\n            if (obj.IsArray)\n            {\n                writer.WriteArrayStart ();\n                foreach (object elem in (IList) obj)\n                    WriteJson ((JsonData) elem, writer);\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj.IsObject) {\n                writer.WriteObjectStart ();\n\n                foreach (var entry in ((IDictionary<string, JsonData>) obj))\n                {\n                    writer.WritePropertyName(entry.Key);\n                    WriteJson(entry.Value, writer);\n                }\n                writer.WriteObjectEnd ();\n            }\n        }\n\n\n        public int Add (object value)\n        {\n            JsonData data = ToJsonData (value);\n\n            json = null;\n\n            return EnsureList ().Add (data);\n        }\n\n        public void Clear ()\n        {\n            if (IsObject) {\n                ((IDictionary<string, JsonData>)this).Clear();\n                return;\n            }\n\n            if (IsArray) {\n                ((IList) this).Clear ();\n            }\n        }\n\n        public bool Equals (JsonData x)\n        {\n            if (x == null)\n                return false;\n\n            if (x.type != type)\n                return false;\n\n            switch (type) {\n            case JsonType.None:\n                return true;\n\n            case JsonType.Object:\n                return InstObject.Equals (x.InstObject);\n\n            case JsonType.Array:\n                return instArray.Equals (x.instArray);\n\n            case JsonType.String:\n                return instString.Equals (x.instString);\n\n            case JsonType.Int:\n                return instInt.Equals (x.instInt);\n\n            case JsonType.Long:\n                return instLong.Equals (x.instLong);\n\n            case JsonType.Double:\n                return instDouble.Equals (x.instDouble);\n\n            case JsonType.Boolean:\n                return instBoolean.Equals (x.instBoolean);\n\n            case JsonType.Decimal:\n                return instDecimal.Equals(x.instDecimal);\n\n            case JsonType.ULong:\n                return instUlong.Equals(x.instUlong);\n            }\n\n            return false;\n        }\n\n        public JsonType GetJsonType ()\n        {\n            return type;\n        }\n\n        public void SetJsonType (JsonType jsonType)\n        {\n            if (type == jsonType)\n                return;\n\n            switch (jsonType) {\n            case JsonType.None:\n                break;\n\n            case JsonType.Object:\n                InstObject = new Dictionary<string, JsonData> ();\n                objectList = new List<KeyValuePair<string, JsonData>> ();\n                break;\n\n            case JsonType.Array:\n                instArray = new List<JsonData> ();\n                break;\n\n            case JsonType.String:\n                instString = default (String);\n                break;\n\n            case JsonType.Int:\n                instInt = default (Int32);\n                break;\n\n            case JsonType.Long:\n                instLong = default (Int64);\n                break;\n\n            case JsonType.Double:\n                instDouble = default (Double);\n                break;\n\n            case JsonType.Boolean:\n                instBoolean = default (Boolean);\n                break;\n\n            case JsonType.Decimal:\n                instDecimal = default(Decimal);\n                break;\n\n            case JsonType.ULong:\n                instUlong = default(UInt64);\n                break;\n            }\n\n            type = jsonType;\n        }\n\n        public string ToJson ()\n        {\n            if (json != null)\n                return json;\n\n            var sw = new StringWriter ();\n            var writer = new JsonWriter(sw) {Validate = false};\n\n            WriteJson (this, writer);\n            json = sw.ToString ();\n\n            return json;\n        }\n\n        public void ToJson (JsonWriter writer)\n        {\n            bool oldValidate = writer.Validate;\n\n            writer.Validate = false;\n\n            WriteJson (this, writer);\n\n            writer.Validate = oldValidate;\n        }\n\n        public override string ToString ()\n        {\n            switch (type) {\n            case JsonType.Array:\n                return \"JsonData array\";\n\n            case JsonType.Boolean:\n                return instBoolean.ToString ();\n\n            case JsonType.Double:\n                return instDouble.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Int:\n                return instInt.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Long:\n                return instLong.ToString (CultureInfo.InvariantCulture);\n\n            case JsonType.Decimal:\n                return instDecimal.ToString(CultureInfo.InvariantCulture);\n\n            case JsonType.ULong:\n                return instUlong.ToString(CultureInfo.InvariantCulture);\n\n            case JsonType.Object:\n                return \"JsonData object\";\n\n            case JsonType.String:\n                return instString;\n            }\n\n            return \"Uninitialized JsonData\";\n        }\n\n\n        public bool TryGetValue(string key, out JsonData value)\n        {\n            return EnsureDictionary().TryGetValue(key, out value);\n        }\n\n        public void Add(KeyValuePair<string, JsonData> item)\n        {\n            EnsureDictionary().Add(item);\n        }\n\n        public bool Contains(KeyValuePair<string, JsonData> item)\n        {\n            return EnsureDictionary().Contains(item);\n        }\n\n        public void CopyTo(KeyValuePair<string, JsonData>[] array, int arrayIndex)\n        {\n            EnsureDictionary().CopyTo(array, arrayIndex);\n        }\n\n        bool ICollection<KeyValuePair<string, JsonData>>.IsReadOnly\n        {\n            get { return EnsureDictionary().IsReadOnly; }\n        }\n\n        public bool Remove(KeyValuePair<string, JsonData> item)\n        {\n            return EnsureDictionary().Remove(item.Key);\n        }\n\n        IEnumerator<KeyValuePair<string, JsonData>> IEnumerable<KeyValuePair<string, JsonData>>.GetEnumerator()\n        {\n            return EnsureDictionary().GetEnumerator();\n        }\n    }\n\n    internal class OrderedDictionaryEnumerator : IDictionaryEnumerator\n    {\n        readonly IEnumerator<KeyValuePair<string, JsonData>> listEnumerator;\n\n        public object Current {\n            get { return Entry; }\n        }\n\n        public DictionaryEntry Entry {\n            get {\n                KeyValuePair<string, JsonData> curr = listEnumerator.Current;\n                return new DictionaryEntry (curr.Key, curr.Value);\n            }\n        }\n\n        public object Key {\n            get { return listEnumerator.Current.Key; }\n        }\n\n        public object Value {\n            get { return listEnumerator.Current.Value; }\n        }\n\n\n        public OrderedDictionaryEnumerator (\n            IEnumerator<KeyValuePair<string, JsonData>> enumerator)\n        {\n            listEnumerator = enumerator;\n        }\n\n\n        public bool MoveNext ()\n        {\n            return listEnumerator.MoveNext ();\n        }\n\n        public void Reset ()\n        {\n            listEnumerator.Reset ();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/JsonException.cs",
    "content": "/**\n * JsonException.cs\n *   Base class throwed by LitJSON when a parsing error occurs.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\n\n\nnamespace LitJson\n{\n    public class JsonException : Exception\n    {\n        public JsonException () : base ()\n        {\n        }\n\n        internal JsonException (ParserToken token) :\n            base (String.Format (\n                    \"Invalid token '{0}' in input string\", token))\n        {\n        }\n\n        internal JsonException (ParserToken token,\n                                Exception inner_exception) :\n            base (String.Format (\n                    \"Invalid token '{0}' in input string\", token),\n                inner_exception)\n        {\n        }\n\n        internal JsonException (int c) :\n            base (String.Format (\n                    \"Invalid character '{0}' in input string\", (char) c))\n        {\n        }\n\n        internal JsonException (int c, Exception inner_exception) :\n            base (String.Format (\n                    \"Invalid character '{0}' in input string\", (char) c),\n                inner_exception)\n        {\n        }\n\n\n        public JsonException (string message) : base (message)\n        {\n        }\n\n        public JsonException (string message, Exception inner_exception) :\n            base (message, inner_exception)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/JsonMapper.cs",
    "content": "/**\n * JsonMapper.cs\n *   JSON to .Net object and object to JSON conversions.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace LitJson\n{\n    internal struct PropertyMetadata\n    {\n        public MemberInfo Info;\n        public bool       IsField;\n        public Type       Type;\n    }\n\n\n    internal struct ArrayMetadata\n    {\n        private Type element_type;\n        private bool is_array;\n        private bool is_list;\n\n\n        public Type ElementType {\n            get {\n                if (element_type == null)\n                    return typeof (JsonData);\n\n                return element_type;\n            }\n\n            set { element_type = value; }\n        }\n\n        public bool IsArray {\n            get { return is_array; }\n            set { is_array = value; }\n        }\n\n        public bool IsList {\n            get { return is_list; }\n            set { is_list = value; }\n        }\n    }\n\n\n    internal struct ObjectMetadata\n    {\n        private Type element_type;\n        private bool is_dictionary;\n\n        private IDictionary<string, PropertyMetadata> properties;\n\n\n        public Type ElementType {\n            get {\n                if (element_type == null)\n                    return typeof (JsonData);\n\n                return element_type;\n            }\n\n            set { element_type = value; }\n        }\n\n        public bool IsDictionary {\n            get { return is_dictionary; }\n            set { is_dictionary = value; }\n        }\n\n        public IDictionary<string, PropertyMetadata> Properties {\n            get { return properties; }\n            set { properties = value; }\n        }\n    }\n\n\n    internal delegate void ExporterFunc    (object obj, JsonWriter writer);\n    public   delegate void ExporterFunc<T> (T obj, JsonWriter writer);\n\n    internal delegate object ImporterFunc                (object input);\n    public   delegate TValue ImporterFunc<TJson, TValue> (TJson input);\n\n    public delegate IJsonWrapper WrapperTestMethodory ();\n\n\n    public class JsonMapper\n    {\n        private static int max_nesting_depth;\n\n        private static IFormatProvider datetime_format;\n\n        private static IDictionary<Type, ExporterFunc> base_exporters_table;\n        private static IDictionary<Type, ExporterFunc> custom_exporters_table;\n\n        private static IDictionary<Type,\n                IDictionary<Type, ImporterFunc>> base_importers_table;\n        private static IDictionary<Type,\n                IDictionary<Type, ImporterFunc>> custom_importers_table;\n\n        private static IDictionary<Type, ArrayMetadata> array_metadata;\n        private static readonly object array_metadata_lock = new Object ();\n\n        private static IDictionary<Type,\n                IDictionary<Type, MethodInfo>> conv_ops;\n        private static readonly object conv_ops_lock = new Object ();\n\n        private static IDictionary<Type, ObjectMetadata> object_metadata;\n        private static readonly object object_metadata_lock = new Object ();\n\n        private static IDictionary<Type,\n                IList<PropertyMetadata>> type_properties;\n        private static readonly object type_properties_lock = new Object ();\n\n        private static JsonWriter      static_writer;\n        private static readonly object static_writer_lock = new Object ();\n\n        static JsonMapper ()\n        {\n            max_nesting_depth = 100;\n\n            array_metadata = new Dictionary<Type, ArrayMetadata> ();\n            conv_ops = new Dictionary<Type, IDictionary<Type, MethodInfo>> ();\n            object_metadata = new Dictionary<Type, ObjectMetadata> ();\n            type_properties = new Dictionary<Type,\n                            IList<PropertyMetadata>> ();\n\n            static_writer = new JsonWriter ();\n\n            datetime_format = DateTimeFormatInfo.InvariantInfo;\n\n            base_exporters_table   = new Dictionary<Type, ExporterFunc> ();\n            custom_exporters_table = new Dictionary<Type, ExporterFunc> ();\n\n            base_importers_table = new Dictionary<Type,\n                                 IDictionary<Type, ImporterFunc>> ();\n            custom_importers_table = new Dictionary<Type,\n                                   IDictionary<Type, ImporterFunc>> ();\n\n            RegisterBaseExporters ();\n            RegisterBaseImporters ();\n        }\n\n        private static void AddArrayMetadata (Type type)\n        {\n            if (array_metadata.ContainsKey (type))\n                return;\n\n            ArrayMetadata data = new ArrayMetadata ();\n\n            data.IsArray = type.IsArray;\n\n//#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            data.IsList = typeInfo.IsAssignableFrom(typeof(IList).GetTypeInfo());\n            var props = typeInfo.DeclaredProperties;\n//#else\n//            if (type.GetInterface (\"System.Collections.IList\", false) != null)\n//                data.IsList = true;\n//            var props = type.GetProperties ();\n//#endif\n\n            foreach (PropertyInfo p_info in props) {\n                if (p_info.Name != \"Item\")\n                    continue;\n\n                ParameterInfo[] parameters = p_info.GetIndexParameters ();\n\n                if (parameters.Length != 1)\n                    continue;\n\n                if (parameters[0].ParameterType == typeof (int))\n                    data.ElementType = p_info.PropertyType;\n            }\n\n            lock (array_metadata_lock) {\n                try {\n                    array_metadata.Add (type, data);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static void AddObjectMetadata (Type type)\n        {\n            if (object_metadata.ContainsKey (type))\n                return;\n\n            ObjectMetadata data = new ObjectMetadata ();\n\n//#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            data.IsDictionary = typeInfo.IsAssignableFrom(typeof(IDictionary<string, JsonData>).GetTypeInfo());\n            var props = typeInfo.DeclaredProperties;\n            var fields = typeInfo.DeclaredFields;\n//#else\n//            if (type.GetInterface(\"System.Collections.IDictionary\", false) != null)\n//                data.IsDictionary = true;\n//            var props = type.GetProperties ();\n//            var fields = type.GetFields ();\n//#endif\n\n            data.Properties = new Dictionary<string, PropertyMetadata> ();\n\n            foreach (PropertyInfo p_info in props) {\n                if (p_info.Name == \"Item\") {\n                    ParameterInfo[] parameters = p_info.GetIndexParameters ();\n\n                    if (parameters.Length != 1)\n                        continue;\n\n                    if (parameters[0].ParameterType == typeof (string))\n                        data.ElementType = p_info.PropertyType;\n\n                    continue;\n                }\n\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = p_info;\n                p_data.Type = p_info.PropertyType;\n\n                data.Properties.Add (p_info.Name, p_data);\n            }\n\n            foreach (FieldInfo f_info in fields) {\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = f_info;\n                p_data.IsField = true;\n                p_data.Type = f_info.FieldType;\n\n                data.Properties.Add (f_info.Name, p_data);\n            }\n\n            lock (object_metadata_lock) {\n                try {\n                    object_metadata.Add (type, data);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static void AddTypeProperties (Type type)\n        {\n            if (type_properties.ContainsKey (type))\n                return;\n\n            IList<PropertyMetadata> props = new List<PropertyMetadata> ();\n\n//#if NETFX_CORE\n            var typeInfo = type.GetTypeInfo();\n            var propInfos = typeInfo.DeclaredProperties;\n            var fields = typeInfo.DeclaredFields;\n//#else\n//            var propInfos = type.GetProperties ();\n//            var fields = type.GetFields ();\n//#endif\n\n            foreach (PropertyInfo p_info in propInfos)\n            {\n                if (p_info.Name == \"Item\")\n                    continue;\n\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = p_info;\n                p_data.IsField = false;\n                props.Add (p_data);\n            }\n\n            foreach (FieldInfo f_info in fields) {\n                PropertyMetadata p_data = new PropertyMetadata ();\n                p_data.Info = f_info;\n                p_data.IsField = true;\n\n                props.Add (p_data);\n            }\n\n            lock (type_properties_lock) {\n                try {\n                    type_properties.Add (type, props);\n                } catch (ArgumentException) {\n                    return;\n                }\n            }\n        }\n\n        private static MethodInfo GetConvOp (Type t1, Type t2)\n        {\n            lock (conv_ops_lock) {\n                if (! conv_ops.ContainsKey (t1))\n                    conv_ops.Add (t1, new Dictionary<Type, MethodInfo> ());\n            }\n\n            if (conv_ops[t1].ContainsKey (t2))\n                return conv_ops[t1][t2];\n\n//#if NETFX_CORE\n            MethodInfo op = \n                t1.GetTypeInfo()\n                  .DeclaredMethods\n                  .Where(meth => meth.Name == \"op_Implicit\" && meth.IsGenericMethod)\n                  .First();\n//#else\n//            MethodInfo op = t1.GetMethod (\n//                \"op_Implicit\", new Type[] { t2 });\n//#endif\n\n            lock (conv_ops_lock) {\n                try {\n                    conv_ops[t1].Add (t2, op);\n                } catch (ArgumentException) {\n                    return conv_ops[t1][t2];\n                }\n            }\n\n            return op;\n        }\n\n        private static object ReadValue (Type inst_type, JsonReader reader)\n        {\n            reader.Read ();\n\n            if (reader.Token == JsonToken.ArrayEnd)\n                return null;\n\n            if (reader.Token == JsonToken.Null) {\n\n//#if NETFX_CORE\n                if (!inst_type.GetTypeInfo().IsClass)\n//#else\n//                if (! inst_type.IsClass)\n//#endif\n                    throw new JsonException (String.Format (\n                            \"Can't assign null to an instance of type {0}\",\n                            inst_type));\n\n                return null;\n            }\n\n            if (reader.Token == JsonToken.Double ||\n                reader.Token == JsonToken.Int ||\n                reader.Token == JsonToken.Long ||\n                reader.Token == JsonToken.String ||\n                reader.Token == JsonToken.Boolean) {\n\n                Type json_type = reader.Value.GetType ();\n\n//#if NETFX_CORE\n                if (inst_type.GetTypeInfo().IsAssignableFrom(json_type.GetTypeInfo()))\n//#else\n//                if (inst_type.IsAssignableFrom (json_type))\n//#endif\n                    return reader.Value;\n\n                // If there's a custom importer that fits, use it\n                if (custom_importers_table.ContainsKey (json_type) &&\n                    custom_importers_table[json_type].ContainsKey (\n                        inst_type)) {\n\n                    ImporterFunc importer =\n                        custom_importers_table[json_type][inst_type];\n\n                    return importer (reader.Value);\n                }\n\n                // Maybe there's a base importer that works\n                if (base_importers_table.ContainsKey (json_type) &&\n                    base_importers_table[json_type].ContainsKey (\n                        inst_type)) {\n\n                    ImporterFunc importer =\n                        base_importers_table[json_type][inst_type];\n\n                    return importer (reader.Value);\n                }\n\n                // Maybe it's an enum\n//#if NETFX_CORE\n                if (inst_type.GetTypeInfo().IsEnum)\n//#else\n//                if (inst_type.IsEnum)\n//#endif\n                    return Enum.ToObject (inst_type, reader.Value);\n\n                // Try using an implicit conversion operator\n                MethodInfo conv_op = GetConvOp (inst_type, json_type);\n\n                if (conv_op != null)\n                    return conv_op.Invoke (null,\n                                           new object[] { reader.Value });\n\n                // No luck\n                throw new JsonException (String.Format (\n                        \"Can't assign value '{0}' (type {1}) to type {2}\",\n                        reader.Value, json_type, inst_type));\n            }\n\n            object instance = null;\n\n            if (reader.Token == JsonToken.ArrayStart) {\n\n                AddArrayMetadata (inst_type);\n                ArrayMetadata t_data = array_metadata[inst_type];\n\n                if (! t_data.IsArray && ! t_data.IsList)\n                    throw new JsonException (String.Format (\n                            \"Type {0} can't act as an array\",\n                            inst_type));\n\n                IList list;\n                Type elem_type;\n\n                if (! t_data.IsArray) {\n                    list = (IList) Activator.CreateInstance (inst_type);\n                    elem_type = t_data.ElementType;\n                } else {\n                    list = new List<object>();\n                    elem_type = inst_type.GetElementType ();\n                }\n\n                while (true) {\n                    object item = ReadValue (elem_type, reader);\n                    if (reader.Token == JsonToken.ArrayEnd)\n                        break;\n\n                    list.Add (item);\n                }\n\n                if (t_data.IsArray) {\n                    int n = list.Count;\n                    instance = Array.CreateInstance (elem_type, n);\n\n                    for (int i = 0; i < n; i++)\n                        ((Array) instance).SetValue (list[i], i);\n                } else\n                    instance = list;\n\n            } else if (reader.Token == JsonToken.ObjectStart) {\n\n                AddObjectMetadata (inst_type);\n                ObjectMetadata t_data = object_metadata[inst_type];\n\n                instance = Activator.CreateInstance (inst_type);\n\n                while (true) {\n                    reader.Read ();\n\n                    if (reader.Token == JsonToken.ObjectEnd)\n                        break;\n\n                    string property = (string) reader.Value;\n\n                    if (t_data.Properties.ContainsKey (property)) {\n                        PropertyMetadata prop_data =\n                            t_data.Properties[property];\n\n                        if (prop_data.IsField) {\n                            ((FieldInfo) prop_data.Info).SetValue (\n                                instance, ReadValue (prop_data.Type, reader));\n                        } else {\n                            PropertyInfo p_info =\n                                (PropertyInfo) prop_data.Info;\n\n                            if (p_info.CanWrite)\n                                p_info.SetValue (\n                                    instance,\n                                    ReadValue (prop_data.Type, reader),\n                                    null);\n                            else\n                                ReadValue (prop_data.Type, reader);\n                        }\n\n                    } else {\n                        if (! t_data.IsDictionary)\n                            throw new JsonException (String.Format (\n                                    \"The type {0} doesn't have the \" +\n                                    \"property '{1}'\", inst_type, property));\n\n                        ((IDictionary<string, JsonData>)instance).Add(\n                            property, (JsonData)ReadValue (\n                                t_data.ElementType, reader));\n                    }\n\n                }\n\n            }\n\n            return instance;\n        }\n\n        private static IJsonWrapper ReadValue (WrapperTestMethodory TestMethodory,\n                                               JsonReader reader)\n        {\n            reader.Read ();\n\n            if (reader.Token == JsonToken.ArrayEnd ||\n                reader.Token == JsonToken.Null)\n                return null;\n\n            IJsonWrapper instance = TestMethodory ();\n\n            if (reader.Token == JsonToken.String) {\n                instance.SetString ((string) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Double) {\n                instance.SetDouble ((double) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Int) {\n                instance.SetInt ((int) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Long) {\n                instance.SetLong ((long) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.Boolean) {\n                instance.SetBoolean ((bool) reader.Value);\n                return instance;\n            }\n\n            if (reader.Token == JsonToken.ArrayStart) {\n                instance.SetJsonType (JsonType.Array);\n\n                while (true) {\n                    IJsonWrapper item = ReadValue (TestMethodory, reader);\n                    if (item == null && reader.Token == JsonToken.ArrayEnd)\n                        break;\n\n                    ((IList) instance).Add (item);\n                }\n            }\n            else if (reader.Token == JsonToken.ObjectStart) {\n                instance.SetJsonType (JsonType.Object);\n\n                while (true) {\n                    reader.Read ();\n\n                    if (reader.Token == JsonToken.ObjectEnd)\n                        break;\n\n                    string property = (string) reader.Value;\n\n                    ((IDictionary<string, JsonData>)instance)[property] = (JsonData)ReadValue(\n                        TestMethodory, reader);\n                }\n\n            }\n\n            return instance;\n        }\n\n        private static void RegisterBaseExporters ()\n        {\n            base_exporters_table[typeof (byte)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((byte) obj));\n                };\n\n            base_exporters_table[typeof (char)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToString ((char) obj));\n                };\n\n            base_exporters_table[typeof (DateTime)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToString ((DateTime) obj,\n                                                    datetime_format));\n                };\n\n            base_exporters_table[typeof (decimal)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write ((decimal) obj);\n                };\n\n            base_exporters_table[typeof (sbyte)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((sbyte) obj));\n                };\n\n            base_exporters_table[typeof (short)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((short) obj));\n                };\n\n            base_exporters_table[typeof (ushort)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToInt32 ((ushort) obj));\n                };\n\n            base_exporters_table[typeof (uint)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write (Convert.ToUInt64 ((uint) obj));\n                };\n\n            base_exporters_table[typeof (ulong)] =\n                delegate (object obj, JsonWriter writer) {\n                    writer.Write ((ulong) obj);\n                };\n        }\n\n        private static void RegisterBaseImporters ()\n        {\n            ImporterFunc importer;\n\n            importer = delegate (object input) {\n                return Convert.ToByte ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (byte), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt64 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (ulong), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToSByte ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (sbyte), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToInt16 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (short), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt16 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (ushort), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToUInt32 ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (uint), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToSingle ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (float), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDouble ((int) input);\n            };\n            RegisterImporter (base_importers_table, typeof (int),\n                              typeof (double), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDecimal ((double) input);\n            };\n            RegisterImporter (base_importers_table, typeof (double),\n                              typeof (decimal), importer);\n\n\n            importer = delegate (object input) {\n                return Convert.ToUInt32 ((long) input);\n            };\n            RegisterImporter (base_importers_table, typeof (long),\n                              typeof (uint), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToChar ((string) input);\n            };\n            RegisterImporter (base_importers_table, typeof (string),\n                              typeof (char), importer);\n\n            importer = delegate (object input) {\n                return Convert.ToDateTime ((string) input, datetime_format);\n            };\n            RegisterImporter (base_importers_table, typeof (string),\n                              typeof (DateTime), importer);\n        }\n\n        private static void RegisterImporter (\n            IDictionary<Type, IDictionary<Type, ImporterFunc>> table,\n            Type json_type, Type value_type, ImporterFunc importer)\n        {\n            if (! table.ContainsKey (json_type))\n                table.Add (json_type, new Dictionary<Type, ImporterFunc> ());\n\n            table[json_type][value_type] = importer;\n        }\n\n        private static void WriteValue (object obj, JsonWriter writer,\n                                        bool writer_is_private,\n                                        int depth)\n        {\n            if (depth > max_nesting_depth)\n                throw new JsonException (\n                    String.Format (\"Max allowed object depth reached while \" +\n                                   \"trying to export from type {0}\",\n                                   obj.GetType ()));\n\n            if (obj == null) {\n                writer.Write (null);\n                return;\n            }\n\n            if (obj is IJsonWrapper) {\n                if (writer_is_private)\n                    writer.TextWriter.Write (((IJsonWrapper) obj).ToJson ());\n                else\n                    ((IJsonWrapper) obj).ToJson (writer);\n\n                return;\n            }\n\n            if (obj is String) {\n                writer.Write ((string) obj);\n                return;\n            }\n\n            if (obj is Double) {\n                writer.Write ((double) obj);\n                return;\n            }\n\n            if (obj is Int32) {\n                writer.Write ((int) obj);\n                return;\n            }\n\n            if (obj is Boolean) {\n                writer.Write ((bool) obj);\n                return;\n            }\n\n            if (obj is Int64) {\n                writer.Write ((long) obj);\n                return;\n            }\n\n            if (obj is Array) {\n                writer.WriteArrayStart ();\n\n                foreach (object elem in (Array) obj)\n                    WriteValue (elem, writer, writer_is_private, depth + 1);\n\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj is IList) {\n                writer.WriteArrayStart ();\n                foreach (object elem in (IList) obj)\n                    WriteValue (elem, writer, writer_is_private, depth + 1);\n                writer.WriteArrayEnd ();\n\n                return;\n            }\n\n            if (obj is IDictionary<string, JsonData>)\n            {\n                writer.WriteObjectStart ();\n                foreach (var entry in (IDictionary<string, JsonData>)obj)\n                {\n                    writer.WritePropertyName ((string) entry.Key);\n                    WriteValue (entry.Value, writer, writer_is_private,\n                                depth + 1);\n                }\n                writer.WriteObjectEnd ();\n\n                return;\n            }\n\n            Type obj_type = obj.GetType ();\n\n            // See if there's a custom exporter for the object\n            if (custom_exporters_table.ContainsKey (obj_type)) {\n                ExporterFunc exporter = custom_exporters_table[obj_type];\n                exporter (obj, writer);\n\n                return;\n            }\n\n            // If not, maybe there's a base exporter\n            if (base_exporters_table.ContainsKey (obj_type)) {\n                ExporterFunc exporter = base_exporters_table[obj_type];\n                exporter (obj, writer);\n\n                return;\n            }\n\n            // Last option, let's see if it's an enum\n            if (obj is Enum) {\n                Type e_type = Enum.GetUnderlyingType (obj_type);\n\n                if (e_type == typeof (long)\n                    || e_type == typeof (uint)\n                    || e_type == typeof (ulong))\n                    writer.Write ((ulong) obj);\n                else\n                    writer.Write ((int) obj);\n\n                return;\n            }\n\n            // Okay, so it looks like the input should be exported as an\n            // object\n            AddTypeProperties (obj_type);\n            IList<PropertyMetadata> props = type_properties[obj_type];\n\n            writer.WriteObjectStart ();\n            foreach (PropertyMetadata p_data in props) {\n                if (p_data.IsField) {\n                    writer.WritePropertyName (p_data.Info.Name);\n                    WriteValue (((FieldInfo) p_data.Info).GetValue (obj),\n                                writer, writer_is_private, depth + 1);\n                }\n                else {\n                    PropertyInfo p_info = (PropertyInfo) p_data.Info;\n\n                    if (p_info.CanRead) {\n                        writer.WritePropertyName (p_data.Info.Name);\n                        WriteValue (p_info.GetValue (obj, null),\n                                    writer, writer_is_private, depth + 1);\n                    }\n                }\n            }\n            writer.WriteObjectEnd ();\n        }\n\n\n        public static string ToJson (object obj)\n        {\n            lock (static_writer_lock) {\n                static_writer.Reset ();\n\n                WriteValue (obj, static_writer, true, 0);\n\n                return static_writer.ToString ();\n            }\n        }\n\n        public static void ToJson (object obj, JsonWriter writer)\n        {\n            WriteValue (obj, writer, false, 0);\n        }\n\n        public static JsonData ToObject (JsonReader reader)\n        {\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, reader);\n        }\n\n        public static JsonData ToObject (TextReader reader)\n        {\n            JsonReader json_reader = new JsonReader (reader);\n\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, json_reader);\n        }\n\n        public static JsonData ToObject (string json)\n        {\n            return (JsonData) ToWrapper (\n                delegate { return new JsonData (); }, json);\n        }\n\n        public static T ToObject<T> (JsonReader reader)\n        {\n            return (T) ReadValue (typeof (T), reader);\n        }\n\n        public static T ToObject<T> (TextReader reader)\n        {\n            JsonReader json_reader = new JsonReader (reader);\n\n            return (T) ReadValue (typeof (T), json_reader);\n        }\n\n        public static T ToObject<T> (string json)\n        {\n            JsonReader reader = new JsonReader (json);\n\n            return (T) ReadValue (typeof (T), reader);\n        }\n\n        public static IJsonWrapper ToWrapper (WrapperTestMethodory TestMethodory,\n                                              JsonReader reader)\n        {\n            return ReadValue (TestMethodory, reader);\n        }\n\n        public static IJsonWrapper ToWrapper (WrapperTestMethodory TestMethodory,\n                                              string json)\n        {\n            JsonReader reader = new JsonReader (json);\n\n            return ReadValue (TestMethodory, reader);\n        }\n\n        public static void RegisterExporter<T> (ExporterFunc<T> exporter)\n        {\n            ExporterFunc exporter_wrapper =\n                delegate (object obj, JsonWriter writer) {\n                    exporter ((T) obj, writer);\n                };\n\n            custom_exporters_table[typeof (T)] = exporter_wrapper;\n        }\n\n        public static void RegisterImporter<TJson, TValue> (\n            ImporterFunc<TJson, TValue> importer)\n        {\n            ImporterFunc importer_wrapper =\n                delegate (object input) {\n                    return importer ((TJson) input);\n                };\n\n            RegisterImporter (custom_importers_table, typeof (TJson),\n                              typeof (TValue), importer_wrapper);\n        }\n\n        public static void UnregisterExporters ()\n        {\n            custom_exporters_table.Clear ();\n        }\n\n        public static void UnregisterImporters ()\n        {\n            custom_importers_table.Clear ();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/JsonReader.cs",
    "content": "/**\n * JsonReader.cs\n *   Stream-like access to JSON text.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\n\nnamespace LitJson\n{\n    public enum JsonToken\n    {\n        None,\n\n        ObjectStart,\n        PropertyName,\n        ObjectEnd,\n\n        ArrayStart,\n        ArrayEnd,\n\n        Int,\n        Long,\n        ULong,\n        Double,\n\n        String,\n\n        Boolean,\n        Null\n    }\n\n\n    public class JsonReader\n    {\n        private static IDictionary<int, IDictionary<int, int[]>> parse_table;\n\n        private Stack<int>    automaton_stack;\n        private int           current_input;\n        private int           current_symbol;\n        private bool          end_of_json;\n        private bool          end_of_input;\n        private Lexer         lexer;\n        private bool          parser_in_string;\n        private bool          parser_return;\n        private bool          read_started;\n        private TextReader    reader;\n        private bool          reader_is_owned;\n        private object        token_value;\n        private JsonToken     token;\n\n        public bool AllowComments {\n            get { return lexer.AllowComments; }\n            set { lexer.AllowComments = value; }\n        }\n\n        public bool AllowSingleQuotedStrings {\n            get { return lexer.AllowSingleQuotedStrings; }\n            set { lexer.AllowSingleQuotedStrings = value; }\n        }\n\n        public bool EndOfInput {\n            get { return end_of_input; }\n        }\n\n        public bool EndOfJson {\n            get { return end_of_json; }\n        }\n\n        public JsonToken Token {\n            get { return token; }\n        }\n\n        public object Value {\n            get { return token_value; }\n        }\n\n        static JsonReader ()\n        {\n            PopulateParseTable ();\n        }\n\n        public JsonReader (string json_text) :\n            this (new StringReader (json_text), true)\n        {\n        }\n\n        public JsonReader (TextReader reader) :\n            this (reader, false)\n        {\n        }\n\n        private JsonReader (TextReader reader, bool owned)\n        {\n            if (reader == null)\n                throw new ArgumentNullException (\"reader\");\n\n            parser_in_string = false;\n            parser_return = false;\n\n            read_started = false;\n            automaton_stack = new Stack<int> ();\n            automaton_stack.Push ((int) ParserToken.End);\n            automaton_stack.Push ((int) ParserToken.Text);\n\n            lexer = new Lexer (reader);\n\n            end_of_input = false;\n            end_of_json  = false;\n\n            this.reader = reader;\n            reader_is_owned = owned;\n        }\n\n        private static void PopulateParseTable ()\n        {\n            parse_table = new Dictionary<int, IDictionary<int, int[]>> ();\n\n            TableAddRow (ParserToken.Array);\n            TableAddCol (ParserToken.Array, '[',\n                         '[',\n                         (int) ParserToken.ArrayPrime);\n\n            TableAddRow (ParserToken.ArrayPrime);\n            TableAddCol (ParserToken.ArrayPrime, '\"',\n                         (int) ParserToken.Value,\n\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, '[',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, ']',\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, '{',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Number,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.True,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.False,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n            TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Null,\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest,\n                         ']');\n\n            TableAddRow (ParserToken.Object);\n            TableAddCol (ParserToken.Object, '{',\n                         '{',\n                         (int) ParserToken.ObjectPrime);\n\n            TableAddRow (ParserToken.ObjectPrime);\n            TableAddCol (ParserToken.ObjectPrime, '\"',\n                         (int) ParserToken.Pair,\n                         (int) ParserToken.PairRest,\n                         '}');\n            TableAddCol (ParserToken.ObjectPrime, '}',\n                         '}');\n\n            TableAddRow (ParserToken.Pair);\n            TableAddCol (ParserToken.Pair, '\"',\n                         (int) ParserToken.String,\n                         ':',\n                         (int) ParserToken.Value);\n\n            TableAddRow (ParserToken.PairRest);\n            TableAddCol (ParserToken.PairRest, ',',\n                         ',',\n                         (int) ParserToken.Pair,\n                         (int) ParserToken.PairRest);\n            TableAddCol (ParserToken.PairRest, '}',\n                         (int) ParserToken.Epsilon);\n\n            TableAddRow (ParserToken.String);\n            TableAddCol (ParserToken.String, '\"',\n                         '\"',\n                         (int) ParserToken.CharSeq,\n                         '\"');\n\n            TableAddRow (ParserToken.Text);\n            TableAddCol (ParserToken.Text, '[',\n                         (int) ParserToken.Array);\n            TableAddCol (ParserToken.Text, '{',\n                         (int) ParserToken.Object);\n\n            TableAddRow (ParserToken.Value);\n            TableAddCol (ParserToken.Value, '\"',\n                         (int) ParserToken.String);\n            TableAddCol (ParserToken.Value, '[',\n                         (int) ParserToken.Array);\n            TableAddCol (ParserToken.Value, '{',\n                         (int) ParserToken.Object);\n            TableAddCol (ParserToken.Value, (int) ParserToken.Number,\n                         (int) ParserToken.Number);\n            TableAddCol (ParserToken.Value, (int) ParserToken.True,\n                         (int) ParserToken.True);\n            TableAddCol (ParserToken.Value, (int) ParserToken.False,\n                         (int) ParserToken.False);\n            TableAddCol (ParserToken.Value, (int) ParserToken.Null,\n                         (int) ParserToken.Null);\n\n            TableAddRow (ParserToken.ValueRest);\n            TableAddCol (ParserToken.ValueRest, ',',\n                         ',',\n                         (int) ParserToken.Value,\n                         (int) ParserToken.ValueRest);\n            TableAddCol (ParserToken.ValueRest, ']',\n                         (int) ParserToken.Epsilon);\n        }\n\n        private static void TableAddCol (ParserToken row, int col,\n                                         params int[] symbols)\n        {\n            parse_table[(int) row].Add (col, symbols);\n        }\n\n        private static void TableAddRow (ParserToken rule)\n        {\n            parse_table.Add ((int) rule, new Dictionary<int, int[]> ());\n        }\n\n        private void ProcessNumber (string number)\n        {\n            var numStyle = NumberStyles.Any;\n            var culture = new CultureInfo(\"en-US\");\n\n            if (number.IndexOf('.') != -1 ||\n                number.IndexOf('e') != -1 ||\n                number.IndexOf('E') != -1)\n            {\n                double n_double;\n                if (Double.TryParse(number, numStyle, culture, out n_double))\n                {\n                    token = JsonToken.Double;\n                    token_value = n_double;\n\n                    return;\n                }\n            }\n\n            int n_int32;\n            if (Int32.TryParse(number, numStyle, culture, out n_int32))\n            {\n                token = JsonToken.Int;\n                token_value = n_int32;\n\n                return;\n            }\n\n            long n_int64;\n            if (Int64.TryParse(number, out n_int64))\n            {\n                token = JsonToken.Long;\n                token_value = n_int64;\n\n                return;\n            }\n\n            ulong n_uint64;\n            if (UInt64.TryParse(number, numStyle, culture, out n_uint64))\n            {\n                token = JsonToken.ULong;\n                token_value = n_uint64;\n\n                return;\n            }\n\n            // Shouldn't happen, but just in case, return something\n            token = JsonToken.Int;\n            token_value = 0;\n        }\n\n        private void ProcessSymbol ()\n        {\n            if (current_symbol == '[')  {\n                token = JsonToken.ArrayStart;\n                parser_return = true;\n\n            } else if (current_symbol == ']')  {\n                token = JsonToken.ArrayEnd;\n                parser_return = true;\n\n            } else if (current_symbol == '{')  {\n                token = JsonToken.ObjectStart;\n                parser_return = true;\n\n            } else if (current_symbol == '}')  {\n                token = JsonToken.ObjectEnd;\n                parser_return = true;\n\n            } else if (current_symbol == '\"')  {\n                if (parser_in_string) {\n                    parser_in_string = false;\n\n                    parser_return = true;\n\n                } else {\n                    if (token == JsonToken.None)\n                        token = JsonToken.String;\n\n                    parser_in_string = true;\n                }\n\n            } else if (current_symbol == (int) ParserToken.CharSeq) {\n                token_value = lexer.StringValue;\n\n            } else if (current_symbol == (int) ParserToken.False)  {\n                token = JsonToken.Boolean;\n                token_value = false;\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Null)  {\n                token = JsonToken.Null;\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Number)  {\n                ProcessNumber (lexer.StringValue);\n\n                parser_return = true;\n\n            } else if (current_symbol == (int) ParserToken.Pair)  {\n                token = JsonToken.PropertyName;\n\n            } else if (current_symbol == (int) ParserToken.True)  {\n                token = JsonToken.Boolean;\n                token_value = true;\n                parser_return = true;\n\n            }\n        }\n\n        private bool ReadToken ()\n        {\n            if (end_of_input)\n                return false;\n\n            lexer.NextToken ();\n\n            if (lexer.EndOfInput) {\n                Close ();\n\n                return false;\n            }\n\n            current_input = lexer.Token;\n\n            return true;\n        }\n\n\n        public void Close ()\n        {\n            if (end_of_input)\n                return;\n\n            end_of_input = true;\n            end_of_json  = true;\n\n            if (reader_is_owned)\n                reader.Dispose ();\n\n            reader = null;\n        }\n\n        public bool Read ()\n        {\n            if (end_of_input)\n                return false;\n\n            if (end_of_json) {\n                end_of_json = false;\n                automaton_stack.Clear ();\n                automaton_stack.Push ((int) ParserToken.End);\n                automaton_stack.Push ((int) ParserToken.Text);\n            }\n\n            parser_in_string = false;\n            parser_return    = false;\n\n            token       = JsonToken.None;\n            token_value = null;\n\n            if (! read_started) {\n                read_started = true;\n\n                if (! ReadToken ())\n                    return false;\n            }\n\n\n            int[] entry_symbols;\n\n            while (true) {\n                if (parser_return) {\n                    if (automaton_stack.Peek () == (int) ParserToken.End)\n                        end_of_json = true;\n\n                    return true;\n                }\n\n                current_symbol = automaton_stack.Pop ();\n\n                ProcessSymbol ();\n\n                if (current_symbol == current_input) {\n                    if (! ReadToken ()) {\n                        if (automaton_stack.Peek () != (int) ParserToken.End)\n                            throw new JsonException (\n                                \"Input doesn't evaluate to proper JSON text\");\n\n                        if (parser_return)\n                            return true;\n\n                        return false;\n                    }\n\n                    continue;\n                }\n\n                try {\n\n                    entry_symbols =\n                        parse_table[current_symbol][current_input];\n\n                } catch (KeyNotFoundException e) {\n                    throw new JsonException ((ParserToken) current_input, e);\n                }\n\n                if (entry_symbols[0] == (int) ParserToken.Epsilon)\n                    continue;\n\n                for (int i = entry_symbols.Length - 1; i >= 0; i--)\n                    automaton_stack.Push (entry_symbols[i]);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/JsonWriter.cs",
    "content": "/**\n * JsonWriter.cs\n *   Stream-like facility to output JSON text.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\n\nnamespace LitJson\n{\n    internal enum Condition\n    {\n        InArray,\n        InObject,\n        NotAProperty,\n        Property,\n        Value\n    }\n\n    internal class WriterContext\n    {\n        public int  Count;\n        public bool InArray;\n        public bool InObject;\n        public bool ExpectingValue;\n        public int  Padding;\n    }\n\n    public class JsonWriter\n    {\n        private static NumberFormatInfo number_format;\n\n        private WriterContext        context;\n        private Stack<WriterContext> ctx_stack;\n        private bool                 has_reached_end;\n        private char[]               hex_seq;\n        private int                  indentation;\n        private int                  indent_value;\n        private StringBuilder        inst_string_builder;\n        private bool                 pretty_print;\n        private bool                 validate;\n        private TextWriter           writer;\n\n        public int IndentValue {\n            get { return indent_value; }\n            set {\n                indentation = (indentation / indent_value) * value;\n                indent_value = value;\n            }\n        }\n\n        public bool PrettyPrint {\n            get { return pretty_print; }\n            set { pretty_print = value; }\n        }\n\n        public TextWriter TextWriter {\n            get { return writer; }\n        }\n\n        public bool Validate {\n            get { return validate; }\n            set { validate = value; }\n        }\n\n        static JsonWriter ()\n        {\n            number_format = NumberFormatInfo.InvariantInfo;\n        }\n\n        public JsonWriter ()\n        {\n            inst_string_builder = new StringBuilder ();\n            writer = new StringWriter (inst_string_builder);\n\n            Init ();\n        }\n\n        public JsonWriter (StringBuilder sb) :\n            this (new StringWriter (sb))\n        {\n        }\n\n        public JsonWriter (TextWriter writer)\n        {\n            if (writer == null)\n                throw new ArgumentNullException (\"writer\");\n\n            this.writer = writer;\n\n            Init ();\n        }\n\n        private void DoValidation (Condition cond)\n        {\n            if (! context.ExpectingValue)\n                context.Count++;\n\n            if (! validate)\n                return;\n\n            if (has_reached_end)\n                throw new JsonException (\n                    \"A complete JSON symbol has already been written\");\n\n            switch (cond) {\n            case Condition.InArray:\n                if (! context.InArray)\n                    throw new JsonException (\n                        \"Can't close an array here\");\n                break;\n\n            case Condition.InObject:\n                if (! context.InObject || context.ExpectingValue)\n                    throw new JsonException (\n                        \"Can't close an object here\");\n                break;\n\n            case Condition.NotAProperty:\n                if (context.InObject && ! context.ExpectingValue)\n                    throw new JsonException (\n                        \"Expected a property\");\n                break;\n\n            case Condition.Property:\n                if (! context.InObject || context.ExpectingValue)\n                    throw new JsonException (\n                        \"Can't add a property here\");\n                break;\n\n            case Condition.Value:\n                if (! context.InArray &&\n                    (! context.InObject || ! context.ExpectingValue))\n                    throw new JsonException (\n                        \"Can't add a value here\");\n\n                break;\n            }\n        }\n\n        private void Init ()\n        {\n            has_reached_end = false;\n            hex_seq = new char[4];\n            indentation = 0;\n            indent_value = 4;\n            pretty_print = false;\n            validate = true;\n\n            ctx_stack = new Stack<WriterContext> ();\n            context = new WriterContext ();\n            ctx_stack.Push (context);\n        }\n\n        private static void IntToHex (int n, char[] hex)\n        {\n            int num;\n\n            for (int i = 0; i < 4; i++) {\n                num = n % 16;\n\n                if (num < 10)\n                    hex[3 - i] = (char) ('0' + num);\n                else\n                    hex[3 - i] = (char) ('A' + (num - 10));\n\n                n >>= 4;\n            }\n        }\n\n        private void Indent ()\n        {\n            if (pretty_print)\n                indentation += indent_value;\n        }\n\n\n        private void Put (string str)\n        {\n            if (pretty_print && ! context.ExpectingValue)\n                for (int i = 0; i < indentation; i++)\n                    writer.Write (' ');\n\n            writer.Write (str);\n        }\n\n        private void PutNewline ()\n        {\n            PutNewline (true);\n        }\n\n        private void PutNewline (bool add_comma)\n        {\n            if (add_comma && ! context.ExpectingValue &&\n                context.Count > 1)\n                writer.Write (',');\n\n            if (pretty_print && ! context.ExpectingValue)\n                writer.Write ('\\n');\n        }\n\n        private void PutString (string str)\n        {\n            Put (String.Empty);\n\n            writer.Write ('\"');\n\n            int n = str.Length;\n            for (int i = 0; i < n; i++) {\n                switch (str[i]) {\n                case '\\n':\n                    writer.Write (\"\\\\n\");\n                    continue;\n\n                case '\\r':\n                    writer.Write (\"\\\\r\");\n                    continue;\n\n                case '\\t':\n                    writer.Write (\"\\\\t\");\n                    continue;\n\n                case '\"':\n                case '\\\\':\n                    writer.Write ('\\\\');\n                    writer.Write (str[i]);\n                    continue;\n\n                case '\\f':\n                    writer.Write (\"\\\\f\");\n                    continue;\n\n                case '\\b':\n                    writer.Write (\"\\\\b\");\n                    continue;\n                }\n\n                if ((int) str[i] >= 32 && (int) str[i] <= 126) {\n                    writer.Write (str[i]);\n                    continue;\n                }\n\n                // Default, turn into a \\uXXXX sequence\n                IntToHex ((int) str[i], hex_seq);\n                writer.Write (\"\\\\u\");\n                writer.Write (hex_seq);\n            }\n\n            writer.Write ('\"');\n        }\n\n        private void Unindent ()\n        {\n            if (pretty_print)\n                indentation -= indent_value;\n        }\n\n\n        public override string ToString ()\n        {\n            if (inst_string_builder == null)\n                return String.Empty;\n\n            return inst_string_builder.ToString ();\n        }\n\n        public void Reset ()\n        {\n            has_reached_end = false;\n\n            ctx_stack.Clear ();\n            context = new WriterContext ();\n            ctx_stack.Push (context);\n\n            if (inst_string_builder != null)\n                inst_string_builder.Remove (0, inst_string_builder.Length);\n        }\n\n        public void Write (bool boolean)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (boolean ? \"true\" : \"false\");\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (decimal number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (double number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            string str = Convert.ToString (number, number_format);\n            Put (str);\n\n            if (str.IndexOf ('.') == -1 &&\n                str.IndexOf ('E') == -1)\n                writer.Write (\".0\");\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (int number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (long number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (string str)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            if (str == null)\n                Put (\"null\");\n            else\n                PutString (str);\n\n            context.ExpectingValue = false;\n        }\n\n        public void Write (ulong number)\n        {\n            DoValidation (Condition.Value);\n            PutNewline ();\n\n            Put (Convert.ToString (number, number_format));\n\n            context.ExpectingValue = false;\n        }\n\n        public void WriteArrayEnd ()\n        {\n            DoValidation (Condition.InArray);\n            PutNewline (false);\n\n            ctx_stack.Pop ();\n            if (ctx_stack.Count == 1)\n                has_reached_end = true;\n            else {\n                context = ctx_stack.Peek ();\n                context.ExpectingValue = false;\n            }\n\n            Unindent ();\n            Put (\"]\");\n        }\n\n        public void WriteArrayStart ()\n        {\n            DoValidation (Condition.NotAProperty);\n            PutNewline ();\n\n            Put (\"[\");\n\n            context = new WriterContext ();\n            context.InArray = true;\n            ctx_stack.Push (context);\n\n            Indent ();\n        }\n\n        public void WriteObjectEnd ()\n        {\n            DoValidation (Condition.InObject);\n            PutNewline (false);\n\n            ctx_stack.Pop ();\n            if (ctx_stack.Count == 1)\n                has_reached_end = true;\n            else {\n                context = ctx_stack.Peek ();\n                context.ExpectingValue = false;\n            }\n\n            Unindent ();\n            Put (\"}\");\n        }\n\n        public void WriteObjectStart ()\n        {\n            DoValidation (Condition.NotAProperty);\n            PutNewline ();\n\n            Put (\"{\");\n\n            context = new WriterContext ();\n            context.InObject = true;\n            ctx_stack.Push (context);\n\n            Indent ();\n        }\n\n        public void WritePropertyName (string property_name)\n        {\n            DoValidation (Condition.Property);\n            PutNewline ();\n\n            PutString (property_name);\n\n            if (pretty_print) {\n                if (property_name.Length > context.Padding)\n                    context.Padding = property_name.Length;\n\n                for (int i = context.Padding - property_name.Length;\n                     i >= 0; i--)\n                    writer.Write (' ');\n\n                writer.Write (\": \");\n            } else\n                writer.Write (':');\n\n            context.ExpectingValue = true;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/Lexer.cs",
    "content": "/**\n * Lexer.cs\n *   JSON lexer implementation based on a finite state machine.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\nusing System;\nusing System.IO;\nusing System.Text;\n\nnamespace LitJson\n{\n    internal class FsmContext\n    {\n        public bool  Return;\n        public int   NextState;\n        public Lexer L;\n        public int   StateStack;\n    }\n\n\n    internal class Lexer\n    {\n        private delegate bool StateHandler (FsmContext ctx);\n\n        private static int[]          fsm_return_table;\n        private static StateHandler[] fsm_handler_table;\n\n        private bool          allow_comments;\n        private bool          allow_single_quoted_strings;\n        private bool          end_of_input;\n        private FsmContext    fsm_context;\n        private int           input_buffer;\n        private int           input_char;\n        private TextReader    reader;\n        private int           state;\n        private StringBuilder string_buffer;\n        private string        string_value;\n        private int           token;\n        private int           unichar;\n\n        public bool AllowComments {\n            get { return allow_comments; }\n            set { allow_comments = value; }\n        }\n\n        public bool AllowSingleQuotedStrings {\n            get { return allow_single_quoted_strings; }\n            set { allow_single_quoted_strings = value; }\n        }\n\n        public bool EndOfInput {\n            get { return end_of_input; }\n        }\n\n        public int Token {\n            get { return token; }\n        }\n\n        public string StringValue {\n            get { return string_value; }\n        }\n\n        static Lexer ()\n        {\n            PopulateFsmTables ();\n        }\n\n        public Lexer (TextReader reader)\n        {\n            allow_comments = true;\n            allow_single_quoted_strings = true;\n\n            input_buffer = 0;\n            string_buffer = new StringBuilder (128);\n            state = 1;\n            end_of_input = false;\n            this.reader = reader;\n\n            fsm_context = new FsmContext ();\n            fsm_context.L = this;\n        }\n\n        private static int HexValue (int digit)\n        {\n            switch (digit) {\n            case 'a':\n            case 'A':\n                return 10;\n\n            case 'b':\n            case 'B':\n                return 11;\n\n            case 'c':\n            case 'C':\n                return 12;\n\n            case 'd':\n            case 'D':\n                return 13;\n\n            case 'e':\n            case 'E':\n                return 14;\n\n            case 'f':\n            case 'F':\n                return 15;\n\n            default:\n                return digit - '0';\n            }\n        }\n\n        private static void PopulateFsmTables ()\n        {\n            fsm_handler_table = new StateHandler[28] {\n                State1,\n                State2,\n                State3,\n                State4,\n                State5,\n                State6,\n                State7,\n                State8,\n                State9,\n                State10,\n                State11,\n                State12,\n                State13,\n                State14,\n                State15,\n                State16,\n                State17,\n                State18,\n                State19,\n                State20,\n                State21,\n                State22,\n                State23,\n                State24,\n                State25,\n                State26,\n                State27,\n                State28\n            };\n\n            fsm_return_table = new int[28] {\n                (int) ParserToken.Char,\n                0,\n                (int) ParserToken.Number,\n                (int) ParserToken.Number,\n                0,\n                (int) ParserToken.Number,\n                0,\n                (int) ParserToken.Number,\n                0,\n                0,\n                (int) ParserToken.True,\n                0,\n                0,\n                0,\n                (int) ParserToken.False,\n                0,\n                0,\n                (int) ParserToken.Null,\n                (int) ParserToken.CharSeq,\n                (int) ParserToken.Char,\n                0,\n                0,\n                (int) ParserToken.CharSeq,\n                (int) ParserToken.Char,\n                0,\n                0,\n                0,\n                0\n            };\n        }\n\n        private static char ProcessEscChar (int esc_char)\n        {\n            switch (esc_char) {\n            case '\"':\n            case '\\'':\n            case '\\\\':\n            case '/':\n                return Convert.ToChar (esc_char);\n\n            case 'n':\n                return '\\n';\n\n            case 't':\n                return '\\t';\n\n            case 'r':\n                return '\\r';\n\n            case 'b':\n                return '\\b';\n\n            case 'f':\n                return '\\f';\n\n            default:\n                // Unreachable\n                return '?';\n            }\n        }\n\n        private static bool State1 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r')\n                    continue;\n\n                if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 3;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case '\"':\n                    ctx.NextState = 19;\n                    ctx.Return = true;\n                    return true;\n\n                case ',':\n                case ':':\n                case '[':\n                case ']':\n                case '{':\n                case '}':\n                    ctx.NextState = 1;\n                    ctx.Return = true;\n                    return true;\n\n                case '-':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 2;\n                    return true;\n\n                case '0':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 4;\n                    return true;\n\n                case 'f':\n                    ctx.NextState = 12;\n                    return true;\n\n                case 'n':\n                    ctx.NextState = 16;\n                    return true;\n\n                case 't':\n                    ctx.NextState = 9;\n                    return true;\n\n                case '\\'':\n                    if (! ctx.L.allow_single_quoted_strings)\n                        return false;\n\n                    ctx.L.input_char = '\"';\n                    ctx.NextState = 23;\n                    ctx.Return = true;\n                    return true;\n\n                case '/':\n                    if (! ctx.L.allow_comments)\n                        return false;\n\n                    ctx.NextState = 25;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State2 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '1' && ctx.L.input_char<= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 3;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case '0':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 4;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State3 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                case '.':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 5;\n                    return true;\n\n                case 'e':\n                case 'E':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 7;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        private static bool State4 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char == ' ' ||\n                ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case ',':\n            case ']':\n            case '}':\n                ctx.L.UngetChar ();\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            case '.':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 5;\n                return true;\n\n            case 'e':\n            case 'E':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 7;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State5 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 6;\n                return true;\n            }\n\n            return false;\n        }\n\n        private static bool State6 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char <= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                case 'e':\n                case 'E':\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    ctx.NextState = 7;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State7 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') {\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 8;\n                return true;\n            }\n\n            switch (ctx.L.input_char) {\n            case '+':\n            case '-':\n                ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                ctx.NextState = 8;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State8 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') {\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n\n                if (ctx.L.input_char == ' ' ||\n                    ctx.L.input_char >= '\\t' && ctx.L.input_char<= '\\r') {\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                switch (ctx.L.input_char) {\n                case ',':\n                case ']':\n                case '}':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 1;\n                    return true;\n\n                default:\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State9 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'r':\n                ctx.NextState = 10;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State10 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 11;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State11 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'e':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State12 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'a':\n                ctx.NextState = 13;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State13 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.NextState = 14;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State14 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 's':\n                ctx.NextState = 15;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State15 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'e':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State16 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 17;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State17 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.NextState = 18;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State18 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'l':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State19 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                switch (ctx.L.input_char) {\n                case '\"':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 20;\n                    return true;\n\n                case '\\\\':\n                    ctx.StateStack = 19;\n                    ctx.NextState = 21;\n                    return true;\n\n                default:\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State20 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '\"':\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State21 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case 'u':\n                ctx.NextState = 22;\n                return true;\n\n            case '\"':\n            case '\\'':\n            case '/':\n            case '\\\\':\n            case 'b':\n            case 'f':\n            case 'n':\n            case 'r':\n            case 't':\n                ctx.L.string_buffer.Append (\n                    ProcessEscChar (ctx.L.input_char));\n                ctx.NextState = ctx.StateStack;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State22 (FsmContext ctx)\n        {\n            int counter = 0;\n            int mult    = 4096;\n\n            ctx.L.unichar = 0;\n\n            while (ctx.L.GetChar ()) {\n\n                if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' ||\n                    ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' ||\n                    ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') {\n\n                    ctx.L.unichar += HexValue (ctx.L.input_char) * mult;\n\n                    counter++;\n                    mult /= 16;\n\n                    if (counter == 4) {\n                        ctx.L.string_buffer.Append (\n                            Convert.ToChar (ctx.L.unichar));\n                        ctx.NextState = ctx.StateStack;\n                        return true;\n                    }\n\n                    continue;\n                }\n\n                return false;\n            }\n\n            return true;\n        }\n\n        private static bool State23 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                switch (ctx.L.input_char) {\n                case '\\'':\n                    ctx.L.UngetChar ();\n                    ctx.Return = true;\n                    ctx.NextState = 24;\n                    return true;\n\n                case '\\\\':\n                    ctx.StateStack = 23;\n                    ctx.NextState = 21;\n                    return true;\n\n                default:\n                    ctx.L.string_buffer.Append ((char) ctx.L.input_char);\n                    continue;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State24 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '\\'':\n                ctx.L.input_char = '\"';\n                ctx.Return = true;\n                ctx.NextState = 1;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State25 (FsmContext ctx)\n        {\n            ctx.L.GetChar ();\n\n            switch (ctx.L.input_char) {\n            case '*':\n                ctx.NextState = 27;\n                return true;\n\n            case '/':\n                ctx.NextState = 26;\n                return true;\n\n            default:\n                return false;\n            }\n        }\n\n        private static bool State26 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '\\n') {\n                    ctx.NextState = 1;\n                    return true;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State27 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '*') {\n                    ctx.NextState = 28;\n                    return true;\n                }\n            }\n\n            return true;\n        }\n\n        private static bool State28 (FsmContext ctx)\n        {\n            while (ctx.L.GetChar ()) {\n                if (ctx.L.input_char == '*')\n                    continue;\n\n                if (ctx.L.input_char == '/') {\n                    ctx.NextState = 1;\n                    return true;\n                }\n\n                ctx.NextState = 27;\n                return true;\n            }\n\n            return true;\n        }\n\n\n        private bool GetChar ()\n        {\n            if ((input_char = NextChar ()) != -1)\n                return true;\n\n            end_of_input = true;\n            return false;\n        }\n\n        private int NextChar ()\n        {\n            if (input_buffer != 0) {\n                int tmp = input_buffer;\n                input_buffer = 0;\n\n                return tmp;\n            }\n\n            return reader.Read ();\n        }\n\n        public bool NextToken ()\n        {\n            StateHandler handler;\n            fsm_context.Return = false;\n\n            while (true) {\n                handler = fsm_handler_table[state - 1];\n\n                if (! handler (fsm_context))\n                    throw new JsonException (input_char);\n\n                if (end_of_input)\n                    return false;\n\n                if (fsm_context.Return) {\n                    string_value = string_buffer.ToString ();\n                    string_buffer.Remove (0, string_buffer.Length);\n                    token = fsm_return_table[state - 1];\n\n                    if (token == (int) ParserToken.Char)\n                        token = input_char;\n\n                    state = fsm_context.NextState;\n\n                    return true;\n                }\n\n                state = fsm_context.NextState;\n            }\n        }\n\n        private void UngetChar ()\n        {\n            input_buffer = input_char;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/ParserToken.cs",
    "content": "/**\n * ParserToken.cs\n *   Internal representation of the tokens used by the lexer and the parser.\n *\n * The authors disclaim copyright to this source code. For more details, see\n * the COPYING file included with this distribution.\n **/\n\n\nnamespace LitJson\n{\n    internal enum ParserToken\n    {\n        // Lexer tokens\n        None = System.Char.MaxValue + 1,\n        Number,\n        True,\n        False,\n        Null,\n        CharSeq,\n        // Single char\n        Char,\n\n        // Parser Rules\n        Text,\n        Object,\n        ObjectPrime,\n        Pair,\n        PairRest,\n        Array,\n        ArrayPrime,\n        Value,\n        ValueRest,\n        String,\n\n        // End of input\n        End,\n\n        // The empty rule\n        Epsilon\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Serialization/LitJson/README",
    "content": "LitJSON\n=======\n\nA .Net library to handle conversions from and to JSON (JavaScript Object\nNotation) strings.\n\nHome page: http://litjson.sourceforge.net/\n\n\nInstallation\n------------\n\nSee the file INSTALL for generic building and installation instructions.\n\nThe 'configure' script for this package recognizes the following specific\nflags:\n\n  --disable-debug\n    Disables the creation of debug binaries (e.g. LitJson.dll.mdb). These\n    are enabled by default.\n\n\nTests\n-----\n\nThis library comes with a set of unit tests using the NUnit framework. The\n'configure' script tries to find the necessary information in order to use\nthem.\n\nIf everything is set up properly, you may run the tests with 'make check'.\n\n\nUsing LitJSON from an application\n---------------------------------\n\nOnce this library is compiled and optionally installed in the root\nfilesystem, .Net developers may use it by simply copying the .dll file into\ntheir project's directory.\n\nFor those developers using standard Unix tools such as pkg-config and make,\nthis library comes with a .pc file to help in the process of consuming it.\n\nOne way this could work would be adding a rule in the Makefile (normally\ncalled 'update-libraries') where the necessary .dll's are copied into the\nproject's source directory, and a text file is created with the flags that\nare to be passed to the compiler. Then this text file is used in the rules\nused to compile the project. For example:\n\n\nupdate-libraries:\n\tcp `pkg-config --variable=Libraries litjson` .\n\tpkg-config --libs litjson > litjson.flags\n\nDemo.exe: Demo.cs litjson.flags\n\tmcs -out:$@ Demo.cs `cat litjson.flags`\n\n\nFor more information on this process, please see\n<http://www.mono-project.com/Guidelines:Application_Deployment>, section 2.\nLibraries with Unstable APIs.\n\n\nBug Reports\n-----------\n\nPlease submit all bug reports, feature requests and patches on the project's\nwebsite at:\n  http://sourceforge.net/tracker/?group_id=202631\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/Annotation.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Annotation\n    {\n        public Annotation() { }\n        public Annotation(JsonData annotationJson)\n        {\n            if (annotationJson == null)\n            {\n                Attributes = new Dictionary<string, string>();\n                Elements = new Dictionary<string, string>();\n                return;\n            }\n\n            var attrDictionary = annotationJson as IDictionary<string, JsonData>;\n            Attributes =\n                (from string key in attrDictionary.Keys\n                 select new\n                 {\n                     Key = key,\n                     Value = attrDictionary[key]\n                 })\n                .ToDictionary(\n                    atr => atr.Key.ToString(),\n                    atr => atr.Value.ToString());\n        }\n\n        public string Type { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string> Attributes { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string> Elements { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/Contributor.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Contributor\n    {\n        public Contributor() { }\n        public Contributor(JsonData contributorJson)\n        {\n            ID = contributorJson.GetValue<string>(\"id_str\");\n            ScreenName = contributorJson.GetValue<string>(\"screen_name\");\n        }\n\n        public string ID { get; set; }\n\n        public string ScreenName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/EmbeddedStatus.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class EmbeddedStatus\n    {\n        public EmbeddedStatus() { }\n        public EmbeddedStatus(JsonData embeddedStatusJson)\n        {\n            Html = embeddedStatusJson.GetValue<string>(\"html\");\n            AuthorName = embeddedStatusJson.GetValue<string>(\"author_name\");\n            AuthorUrl = embeddedStatusJson.GetValue<string>(\"author_url\");\n            ProviderName = embeddedStatusJson.GetValue<string>(\"provider_name\");\n            ProviderUrl = embeddedStatusJson.GetValue<string>(\"provider_url\");\n            Url = embeddedStatusJson.GetValue<string>(\"url\");\n            Version = embeddedStatusJson.GetValue<string>(\"version\");\n            Type = embeddedStatusJson.GetValue<string>(\"type\");\n            Height = embeddedStatusJson.GetValue<int>(\"height\");\n            Width = embeddedStatusJson.GetValue<int>(\"width\");\n            string cacheAgeStr = embeddedStatusJson.GetValue<string>(\"cache_age\");\n            if (!string.IsNullOrWhiteSpace(cacheAgeStr)) \n                CacheAge = ulong.Parse(cacheAgeStr);\n        }\n\n        public string Html { get; set; }\n\n        public string AuthorName { get; set; }\n\n        public string ProviderUrl { get; set; }\n\n        public string Url { get; set; }\n\n        public string ProviderName { get; set; }\n\n        public string Version { get; set; }\n\n        public string Type { get; set; }\n\n        public int Height { get; set; }\n\n        public ulong CacheAge { get; set; }\n\n        public string AuthorUrl { get; set; }\n\n        public int Width { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/EmbeddedStatusAlignment.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum EmbeddedStatusAlignment\n    {\n        None,\n\n        Left,\n\n        Right,\n\n        Center\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/FilterLevel.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter evaluation of tweet quality\n    /// </summary>\n    public enum FilterLevel\n    {\n        /// <summary>\n        /// No value\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// Low value\n        /// </summary>\n        Low,\n\n        /// <summary>\n        /// Medium quality\n        /// </summary>\n        Medium,\n\n        /// <summary>\n        /// High quality\n        /// </summary>\n        High\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/Retweet.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Retweet Information\n    /// </summary>\n    [Obsolete(\"Deprecated: Use RetweetedStatus on Status instead.\")]\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Retweet\n    {\n        /// <summary>\n        /// Retweet ID\n        /// </summary>\n        public string ID { get; set; }\n\n        /// <summary>\n        /// Date/Time Retweeted\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// User of Original Tweet\n        /// </summary>\n        public User RetweetedUser { get; set; }\n\n        /// <summary>\n        /// Retweet Text\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Which application sent retweet\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// Is text truncated\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// Status ID retweeted\n        /// </summary>\n        public string InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// ID of User retweeted\n        /// </summary>\n        public string InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Is Favorited\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// Screen name of retweeted user\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// Number of retweets\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has retweet been retweeted\n        /// </summary>\n        public object Retweeted { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/Status.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Written by: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// returned information from Twitter Status queries\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Status\n    {\n        public Status() {}\n        public Status(JsonData status)\n        {\n            if (status == null) return;\n\n            JsonData retweetedStatus = status.GetValue<JsonData>(\"retweeted_status\");\n            RetweetedStatus = new Status(retweetedStatus);\n            Retweeted = retweetedStatus != null;\n            Source = status.GetValue<string>(\"source\");\n            InReplyToScreenName = status.GetValue<string>(\"in_reply_to_screen_name\");\n            PossiblySensitive = status.GetValue<bool>(\"possibly_sensitive\");\n            IsQuotedStatus = status.GetValue<bool>(\"is_quote_status\");\n            QuotedStatusID = status.GetValue<ulong>(\"quoted_status_id\");\n            QuotedStatus = new Status(status.GetValue<JsonData>(\"quoted_status\"));\n            JsonData contributors = status.GetValue<JsonData>(\"contributors\");\n            Contributors =\n                contributors == null ?\n                    new List<Contributor>() :\n                    (from JsonData contributor in contributors\n                     select new Contributor(contributor))\n                    .ToList();\n            JsonData coords = status.GetValue<JsonData>(\"coordinates\");\n            Coordinates = coords != null ?\n                new Coordinate(coords.GetValue<JsonData>(\"coordinates\")) :\n                new Coordinate();\n            Place = new Place(status.GetValue<JsonData>(\"place\"));\n            RetweetCount = status.GetValue<int>(\"retweet_count\");\n            StatusID = status.GetValue<ulong>(\"id\");\n            FavoriteCount = status.GetValue<int?>(\"favorite_count\");\n            Favorited = status.GetValue<bool>(\"favorited\");\n            InReplyToStatusID = status.GetValue<ulong>(\"in_reply_to_status_id\");\n            CreatedAt = status.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n            InReplyToUserID = status.GetValue<ulong>(\"in_reply_to_user_id\");\n            Truncated = status.GetValue<bool>(\"truncated\");\n            JsonData displayTextIndices = status.GetValue<JsonData>(\"display_text_range\");\n            if (displayTextIndices != null)\n                DisplayTextRange = new List<int> { (int) displayTextIndices[0], (int) displayTextIndices[1] };\n            TweetMode tweetMode;\n            Enum.TryParse(value: status.GetValue<string>(\"tweet_mode\"), ignoreCase: true, result: out tweetMode);\n            TweetMode = tweetMode;\n            Text = status.GetValue<string>(\"text\");\n            FullText = status.GetValue<string>(\"full_text\");\n            ExtendedTweet = new Status(status.GetValue<JsonData>(\"extended_tweet\"));\n            Annotation = new Annotation(status.GetValue<JsonData>(\"annotation\"));\n            Entities = new Entities(status.GetValue<JsonData>(\"entities\"));\n            ExtendedEntities = new Entities(status.GetValue<JsonData>(\"extended_entities\"));\n            JsonData currentUserRetweet = status.GetValue<JsonData>(\"current_user_retweet\");\n            if (currentUserRetweet != null)\n                CurrentUserRetweet = currentUserRetweet.GetValue<ulong>(\"id\");\n            JsonData scopes = status.GetValue<JsonData>(\"scopes\");\n            Scopes =\n                scopes == null ? new Dictionary<string, string>() :\n                (from key in (scopes as IDictionary<string, JsonData>).Keys as List<string>\n                 select new\n                 {\n                     Key = key,\n                     Value = scopes[key].ToString()\n                 })\n                .ToDictionary(\n                    key => key.Key,\n                    val => val.Value);\n            WithheldCopyright = status.GetValue<bool>(\"withheld_copyright\");\n            JsonData withheldCountries = status.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in status.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n            WithheldScope = status.GetValue<string>(\"withheld_scope\");\n            MetaData = new StatusMetaData(status.GetValue<JsonData>(\"metadata\"));\n            Lang = status.GetValue<string>(\"lang\");\n            FilterLevel filterLevel;\n            Enum.TryParse(value: status.GetValue<string>(\"filter_level\"), ignoreCase: true, result: out filterLevel);\n            FilterLevel = filterLevel;\n            User = new User(status.GetValue<JsonData>(\"user\"));\n            Users = new List<ulong>();\n        }\n\n        /// <summary>\n        /// Supports XML serialization\n        /// </summary>\n        [XmlIgnore]\n        StatusType type;\n\n        /// <summary>\n        /// type of status request, i.e. Friends or Public\n        /// </summary>\n        [XmlIgnore]\n        public StatusType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlAttribute(AttributeName = \"Type\")]\n        internal StatusType StatusTypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// ID of User\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// User Screen Name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// By default, user timeline doesn't include retweets,\n        /// but you can set this to true to includes retweets\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in results\n        /// </summary>\n        public bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add entities to user (default: true)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        public bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Includes Alt Text, if available\n        /// </summary>\n        public bool IncludeAltText { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        public string OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        public int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand image\n        /// </summary>\n        public bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        public bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        public bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        public EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        public string OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        public string OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// when was the tweet created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// ID of this status\n        /// </summary>\n        public ulong StatusID { get; set; }\n\n        /// <summary>\n        /// Tweet Text (140)characters\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// When a tweet is an extended tweet in extended mode, \n        /// Text will be null and FullText will contain the tweet text.\n        /// </summary>\n        public string FullText { get; set; }\n\n        /// <summary>\n        /// Extended tweet with entities in extended mode.\n        /// </summary>\n        public Status ExtendedTweet { get; set; }\n\n        /// <summary>\n        /// where did the tweet come from\n        /// </summary>\n        public string Source { get; set; }\n\n        /// <summary>\n        /// Has the tweet been truncated? True means that this is compatibiltiy mode tweet.\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// Inclusive start and exclusive end of displayable tweet content.\n        /// </summary>\n        public List<int> DisplayTextRange { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        public TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// id of tweet being replied to, if it is a reply\n        /// </summary>\n        public ulong InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// id of user being replied to, if it is a reply\n        /// </summary>\n        public ulong InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Number of times this tweet has been favorited\n        /// </summary>\n        public int? FavoriteCount { get; set; }\n\n        /// <summary>\n        /// is listed as a favorite\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// screen name of user being replied to, if it is a reply\n        /// </summary>\n        public string InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// information about user posting tweet (except in user tweets)\n        /// </summary>\n        public User User { get; set; }\n\n        /// <summary>\n        /// Users who retweeted a tweet (used in StatusType.RetweetedBy queries)\n        /// </summary>\n        public List<ulong> Users { get; set; }\n\n        /// <summary>\n        /// users who have contributed\n        /// </summary>\n        public List<Contributor> Contributors { get; set; }\n\n        /// <summary>\n        /// Coordinates of where tweet occurred\n        /// </summary>\n        public Coordinate Coordinates { get; set; }\n\n        /// <summary>\n        /// Place where status was created\n        /// </summary>\n        public Place Place { get; set; }\n\n        /// <summary>\n        /// Meta-data applied to tweet\n        /// </summary>\n        public Annotation Annotation { get; set; }\n\n        /// <summary>\n        /// Entities connected to the status\n        /// </summary>\n        public Entities Entities { get; set; }\n\n        /// <summary>\n        /// Additional entities connected to the status\n        /// </summary>\n        public Entities ExtendedEntities { get; set; }\n\n        /// <summary>\n        /// Removes all user info, except for ID\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Include more contributor info, beyond ID\n        /// </summary>\n        public bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Number of times retweeted\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has tweet been retweeted\n        /// </summary>\n        public bool Retweeted { get; set; }\n\n        /// <summary>\n        /// Is tweet possibly sensitive (can be set via TweetWithMedia)\n        /// </summary>\n        public bool PossiblySensitive { get; set; }\n\n        /// <summary>\n        /// Retweeted status is status is a retweet\n        /// </summary>\n        public Status RetweetedStatus { get; set; }\n\n        /// <summary>\n        /// ID of source status of retweet if IncludeMyRetweet is true.\n        /// Set to 0 if IncludeMyRetweet is false or tweet not retweeted\n        /// by authenticating user.\n        /// </summary>\n        public ulong CurrentUserRetweet { get; set; }\n\n        /// <summary>\n        /// Is this status quoting another tweet\n        /// </summary>\n        public bool IsQuotedStatus { get; set; }\n\n        /// ID of the quoted status\n        /// </summary>\n        public ulong QuotedStatusID { get; set; }\n\n        /// <summary>\n        /// Complete Status object representing the quoted status\n        /// </summary>\n        public Status QuotedStatus { get; set; }\n\n        /// <summary>\n        /// Set of key/value pairs to support promoted tweets\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string> Scopes { get; set; }\n\n        /// <summary>\n        /// Indicates that you shouldn't display because there\n        /// is currently a DMCA complaint against the tweet.\n        /// </summary>\n        public bool WithheldCopyright { get; set; }\n\n        /// <summary>\n        /// Don't display tweet in countries in this list\n        /// </summary>\n        public List<string> WithheldInCountries { get; set; }\n\n        /// <summary>\n        /// Part of the tweet that should not be displayed.\n        /// </summary>\n        public string WithheldScope { get; set; }\n\n        /// <summary>\n        /// Status meta-data returned from searches\n        /// </summary>\n        public StatusMetaData MetaData { get; set; }\n\n        /// <summary>\n        /// Twitter machine-detected prediction of language tweet is written in\n        /// </summary>\n        public string Lang { get; set; }\n\n        /// <summary>\n        /// Indicate that a status lookup should return null objects for \n        /// tweets that the authorizing user doesn't have access to. \n        /// (e.g. tweet is from a protected account or doesn't exist)\n        /// </summary>\n        public bool Map { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet IDs passed to Lookup.\n        /// </summary>\n        public string TweetIDs { get; set; }\n\n        /// <summary>\n        /// Twitter's evaluation of tweet quality\n        /// </summary>\n        public FilterLevel FilterLevel { get; set; }\n\n        /// <summary>\n        /// Populated with OEmbed response for StatusType.OEmbed queries\n        /// </summary>\n        public EmbeddedStatus EmbeddedStatus { get; set; }\n\n        /// <summary>\n        /// Manage paging through a list (e.g. IDs from Users collection)\n        /// </summary>\n        public Cursors CursorMovement { get; set; }\n\n        /// <summary>\n        /// This helps process media uploads via StatusRequestProcessor.ProcessActionResult\n        /// </summary>\n        internal Media Media { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/StatusAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum StatusAction\n    {\n        SingleStatus,\n\n        MediaUpload\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/StatusMetaData.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class StatusMetaData\n    {\n        public StatusMetaData() { }\n        public StatusMetaData(JsonData mdJson)\n        {\n            ResultType = mdJson.GetValue<string>(\"result_type\");\n            IsoLanguageCode = mdJson.GetValue<string>(\"iso_language_code\");\n        }\n\n        public string ResultType { get; set; }\n\n        public string IsoLanguageCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/StatusRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Status requests\n    /// </summary>\n    public class StatusRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of status request, i.e. Show or User\n        /// </summary>\n        internal StatusType Type { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// User ID to disambiguate when ID is same as screen name\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen Name to disambiguate when ID is same as UserD\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Retweets are optional and you must set this to true\n        /// before they will be included in the user timeline\n        /// </summary>\n        internal bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in responses\n        /// </summary>\n        internal bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Include entities in tweets (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Include entities in users (default: true)\n        /// </summary>\n        internal bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Remove all user info, except for User ID\n        /// </summary>\n        internal bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Enhances contributor info, beyond the default ID\n        /// </summary>\n        internal bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        internal bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Includes Alt Text, if available\n        /// </summary>\n        internal bool IncludeAltText { get; set; }\n\n        /// <summary>\n        /// Indicate that a status lookup should return null objects for \n        /// tweets that the authorizing user doesn't have access to. \n        /// (e.g. tweet is from a protected account or doesn't exist)\n        /// </summary>\n        internal bool Map { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        internal string OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        internal int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand media\n        /// </summary>\n        internal bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        internal bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        internal bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        internal EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        internal string OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        internal string OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet IDs passed to Lookup.\n        /// </summary>\n        internal string TweetIDs { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        internal TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Status>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"IncludeRetweets\",\n                       \"ExcludeReplies\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"TrimUser\",\n                       \"IncludeContributorDetails\",\n                       \"IncludeMyRetweet\",\n                       nameof(IncludeAltText),\n                       \"Map\",\n                       \"OEmbedUrl\",\n                       \"OEmbedMaxWidth\",\n                       \"OEmbedHideMedia\",\n                       \"OEmbedHideThread\",\n                       \"OEmbedOmitScript\",\n                       \"OEmbedAlign\",\n                       \"OEmbedRelated\",\n                       \"OEmbedLanguage\",\n                       \"TweetIDs\",\n                       nameof(TweetMode)\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<StatusType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StatusType.Conversation:\n                    return BuildConversationUrl(parameters);\n                case StatusType.Home:\n                    return BuildHomeUrl(parameters);\n                case StatusType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case StatusType.Mentions:\n                    return BuildMentionsUrl(parameters);\n                case StatusType.Oembed:\n                    return BuildOembedUrl(parameters);\n                case StatusType.RetweetsOfMe:\n                    return BuildRetweetsOfMeUrl(parameters);\n                case StatusType.Retweets:\n                    return BuildRetweets(parameters);\n                case StatusType.Show:\n                    return BuildShowUrl(parameters);\n                case StatusType.User:\n                    return BuildUserUrl(parameters);\n                case StatusType.Retweeters:\n                    return BuildRetweetersUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters that are common to both friend and user queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = ulong.Parse(parameters[\"ID\"]);\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"ExcludeReplies\"))\n            {\n                ExcludeReplies = bool.Parse(parameters[\"ExcludeReplies\"]);\n                urlParams.Add(new QueryParameter(\"exclude_replies\", parameters[\"ExcludeReplies\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeMyRetweet\"))\n            {\n                IncludeMyRetweet = bool.Parse(parameters[\"IncludeMyRetweet\"]);\n                urlParams.Add(new QueryParameter(\"include_my_retweet\", parameters[\"IncludeMyRetweet\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeContributorDetails\"))\n            {\n                IncludeContributorDetails = bool.Parse(parameters[\"IncludeContributorDetails\"]);\n                urlParams.Add(new QueryParameter(\"contributor_details\", parameters[\"IncludeContributorDetails\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(IncludeAltText)))\n            {\n                IncludeAltText = bool.Parse(parameters[nameof(IncludeAltText)]);\n                urlParams.Add(new QueryParameter(\"include_ext_alt_text\", parameters[nameof(IncludeAltText)].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildConversationUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\") || string.IsNullOrWhiteSpace(parameters[\"ID\"]))\n                throw new ArgumentNullException(\"ID\", \"ID is required\");\n\n            var req = new Request(BaseUrl + \"conversation/show.json\");\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base home url\n        /// </summary>\n        /// <returns>base url + home segment</returns>\n        Request BuildHomeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/home_timeline.json\");\n        }\n\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"TweetIDs\") || string.IsNullOrWhiteSpace(parameters[\"TweetIDs\"]))\n                throw new ArgumentNullException(\"TweetIDs\", \"TweetIDs is required\");\n\n            var req = new Request(BaseUrl + \"statuses/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            TweetIDs = parameters[\"TweetIDs\"].Replace(\" \", \"\");\n            urlParams.Add(new QueryParameter(\"id\", TweetIDs));\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Map\"))\n            {\n                Map = bool.Parse(parameters[\"Map\"]);\n                urlParams.Add(new QueryParameter(\"map\", parameters[\"Map\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(IncludeAltText)))\n            {\n                IncludeAltText = bool.Parse(parameters[nameof(IncludeAltText)]);\n                urlParams.Add(new QueryParameter(\"include_ext_alt_text\", parameters[nameof(IncludeAltText)].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">parameters to build url query with</param>\n        /// <returns>base url + mentions segment</returns>\n        Request BuildMentionsUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/mentions_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct an oembed url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + url segment</returns>\n        Request BuildOembedUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/oembed.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = ulong.Parse(parameters[\"ID\"]);\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedUrl\"))\n            {\n                OEmbedUrl = parameters[\"OEmbedUrl\"];\n                urlParams.Add(new QueryParameter(\"url\", parameters[\"OEmbedUrl\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedMaxWidth\"))\n            {\n                OEmbedMaxWidth = int.Parse(parameters[\"OEmbedMaxWidth\"]);\n                urlParams.Add(new QueryParameter(\"maxwidth\", parameters[\"OEmbedMaxWidth\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideMedia\"))\n            {\n                OEmbedHideMedia = bool.Parse(parameters[\"OEmbedHideMedia\"]);\n                urlParams.Add(new QueryParameter(\"hide_media\", parameters[\"OEmbedHideMedia\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideThread\"))\n            {\n                OEmbedHideThread = bool.Parse(parameters[\"OEmbedHideThread\"]);\n                urlParams.Add(new QueryParameter(\"hide_thread\", parameters[\"OEmbedHideThread\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedOmitScript\"))\n            {\n                OEmbedOmitScript = bool.Parse(parameters[\"OEmbedOmitScript\"]);\n                urlParams.Add(new QueryParameter(\"omit_script\", parameters[\"OEmbedOmitScript\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedAlign\"))\n            {\n                OEmbedAlign = RequestProcessorHelper.ParseEnum<EmbeddedStatusAlignment>(parameters[\"OEmbedAlign\"]);\n                urlParams.Add(new QueryParameter(\"align\", OEmbedAlign.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedRelated\"))\n            {\n                OEmbedRelated = parameters[\"OEmbedRelated\"];\n                urlParams.Add(new QueryParameter(\"related\", parameters[\"OEmbedRelated\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedLanguage\"))\n            {\n                OEmbedLanguage = parameters[\"OEmbedLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"OEmbedLanguage\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base retweeted by user url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweeted by user segment</returns>\n        Request BuildRetweets(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentNullException(\"ID\", \"ID is required.\");\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n\n            var req = new Request(BaseUrl + \"statuses/retweets/\" + ID + \".json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweets of me segment</returns>\n        Request BuildRetweetsOfMeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/retweets_of_me.json\");\n        }\n\n        Request BuildRetweetersUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required.\", \"ID\");\n\n            var url = BaseUrl + \"statuses/retweeters/ids.json\";\n            var req = new Request(url);\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for showing status of user\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/show.json\");\n        }\n\n        /// <summary>\n        /// construct an url for the user timeline\n        /// </summary>\n        /// <returns>base url + user timeline segment</returns>\n        Request BuildUserUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/user_timeline.json\");\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of Status\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of Status</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            List<Status> statusList;\n            switch (Type)\n            {\n                case StatusType.Show:\n                    statusList = new List<Status> { new Status(statusJson) };\n                    break;\n                case StatusType.Home:\n                case StatusType.Lookup:\n                case StatusType.Mentions:\n                case StatusType.RetweetsOfMe:\n                case StatusType.Retweets:\n                case StatusType.User:\n                    statusList =\n                        (from JsonData status in statusJson\n                         select new Status(status))\n                        .ToList();\n                    break;\n                case StatusType.Retweeters:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            Users =\n                                (from JsonData id in statusJson.GetValue<JsonData>(\"ids\")\n                                 select (ulong)id)\n                                .ToList(),\n                            CursorMovement = new Cursors(statusJson)\n                        }\n                    };\n                    break;\n                case StatusType.Oembed:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            EmbeddedStatus = new EmbeddedStatus(statusJson)\n                        }\n                    };\n                    break;\n                default:\n                    statusList = new List<Status>();\n                    break;\n            }\n\n            foreach (var status in statusList)\n            {\n                status.Type = Type;\n                status.ID = ID;\n                status.UserID = UserID;\n                status.ScreenName = ScreenName;\n                status.SinceID = SinceID;\n                status.MaxID = MaxID;\n                status.Count = Count;\n                status.Cursor = Cursor;\n                status.IncludeRetweets = IncludeRetweets;\n                status.ExcludeReplies = ExcludeReplies;\n                status.IncludeEntities = IncludeEntities;\n                status.IncludeUserEntities = IncludeUserEntities;\n                status.TrimUser = TrimUser;\n                status.IncludeContributorDetails = IncludeContributorDetails;\n                status.IncludeMyRetweet = IncludeMyRetweet;\n                status.IncludeAltText = IncludeAltText;\n                status.OEmbedAlign = OEmbedAlign;\n                status.OEmbedHideMedia = OEmbedHideMedia;\n                status.OEmbedHideThread = OEmbedHideThread;\n                status.OEmbedMaxWidth = OEmbedMaxWidth;\n                status.OEmbedOmitScript = OEmbedOmitScript;\n                status.OEmbedRelated = OEmbedRelated;\n                status.OEmbedUrl = OEmbedUrl;\n                status.OEmbedLanguage = OEmbedLanguage;\n                status.TweetIDs = TweetIDs;\n                status.Map = Map;\n                status.TweetMode = TweetMode;\n            }\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData statusJson = JsonMapper.ToObject(responseJson);\n\n            Status status = null;\n\n            switch ((StatusAction)theAction)\n            {\n                case StatusAction.SingleStatus:\n                    status = new Status(statusJson);\n                    break;\n                case StatusAction.MediaUpload:\n                    status = new Status\n                    {\n                        Media = new Media(statusJson)\n                    };\n                    break;\n                default:\n                    break;\n            }\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/StatusType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// type of status request\n    /// </summary>\n    public enum StatusType\n    {\n        /// <summary>\n        /// tweets from a specific user\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, user ID to retrieve tweets for\n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        ///     - IncludeRetweets, return retweets too\n        /// </summary>\n        User,\n\n        /// <summary>\n        /// a specific tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to retrieve\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// lists the 20 most recent tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        Mentions,\n\n        /// <summary>\n        /// Same as Friend, but includes retweets too\n        /// \n        /// Available Options:\n        /// \n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        /// </summary>\n        Home,\n\n        /// <summary>\n        /// gets retweets of specified tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to get retweets for\n        ///     - Count, number of tweets to retrieve\n        /// </summary>\n        Retweets,\n\n        /// <summary>\n        /// lists the 20 most recent re-tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        RetweetsOfMe,\n\n        /// <summary>\n        /// lists up to 100 ids of users who retweeted a status\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, retweeted tweet ID\n        ///     - Cursor, page to return\n        /// </summary>\n        Retweeters,\n\n        /// <summary>\n        /// provides information, such as HTML, to embed a tweet in a Web page\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet ID\n        ///     - OEmbedUrl, Url of tweet to embed\n        ///     - OEmbedMaxWidth, Max number of pixels for width\n        ///     - OEmbedHideMedia, Don't initially expand image\n        ///     - OEmbedHideThread, Show original message for replies\n        ///     - OEmbedOmitScript, Don't include widgets.js script\n        ///     - OEmbedAlign, Image alignment: Left, Right, Center, or None\n        ///     - OEmbedRelated, Suggested accounts for the viewer to follow\n        ///     - OEmbedLanguage, Language code for rendered tweet\n        /// </summary>\n        Oembed,\n\n        /// <summary>\n        /// Shows a conversation associated with a tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet ID\n        /// </summary>\n        Conversation,\n\n        /// <summary>\n        /// Returns tweets matching a list of ids\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, comma-separated list of tweet ids\n        ///     - IncludeEntities, add entity metadata to tweets\n        ///     - TrimUser, omit the user object from tweets\n        ///     - Map, include null object for missing tweets\n        ///     \n        /// </summary>\n        Lookup\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Status/TwitterContextStatusCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        public const ulong MissingID = 0ul;\n        public const ulong NoReply = 0ul;\n        public const decimal NoCoordinate = Decimal.MaxValue;\n\n        /// <summary>\n        /// Replies to a tweet.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status)\n        {\n            return await TweetOrReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, null, false, false, null, false, null, null).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, TweetMode tweetMode)\n        {\n            return await TweetOrReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, null, false, false, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"autoPopulateReplyMetadata\">Enables extended tweet mode where mentions don't count towards tweet length.</param>\n        /// <param name=\"excludeReplyUserIds\">Comma-separated list of @mentions to exclude from extended tweet prefix list.</param>\n        /// <param name=\"attachmentUrl\">Tweet link or DM deep link for extended tweet suffix that doesn't count towards tweet length.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, bool autoPopulateReplyMetadata, IEnumerable<ulong> excludeReplyUserIds, string attachmentUrl, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, null, false, false, null, autoPopulateReplyMetadata, excludeReplyUserIds, attachmentUrl, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with coordinates.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, bool displayCoordinates, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await ReplyAsync(tweetID, status, latitude, longitude, null, displayCoordinates, false, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with coordinates, place, and option to not include the user entity.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"trimUser\">Don't include user in returned Status.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool trimUser, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await ReplyAsync(tweetID, status, latitude, longitude, placeID, false, trimUser, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with place, option to display coordinates, and option to not include user entity.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, string placeID, bool displayCoordinates, bool trimUser, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await ReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, placeID, displayCoordinates, trimUser, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with all non-media options.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to.</param>\n        /// <param name=\"status\">Reply status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Reply status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, TweetMode tweetMode = TweetMode.Compat)\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're replying to.\", \"tweetID\");\n\n            return await TweetOrReplyAsync(tweetID, status, latitude, longitude, placeID, displayCoordinates, trimUser, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with attached media.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> ReplyAsync(ulong tweetID, string status, IEnumerable<ulong> mediaIds, TweetMode tweetMode = TweetMode.Compat)\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're replying to.\", \"tweetID\");\n\n            return await TweetOrReplyAsync(tweetID, status, NoCoordinate, NoCoordinate, NoInputParam, false, false, mediaIds, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Replies to a tweet with all options.\n        /// </summary>\n        /// <remarks>\n        /// You must include the recipient's screen name (as @ScreenName) for the reply to work.\n        /// </remarks>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"trimUser\">Remove user entity from response</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <param name=\"autoPopulateReplyMetadata\">Enables extended tweet mode where mentions don't count towards tweet length.</param>\n        /// <param name=\"excludeReplyUserIds\">Comma-separated list of @mentions to exclude from extended tweet prefix list.</param>\n        /// <param name=\"attachmentUrl\">Tweet link or DM deep link for extended tweet suffix that doesn't count towards tweet length.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> ReplyAsync(ulong tweetID, string status, decimal latitude = NoCoordinate, decimal longitude = NoCoordinate, string placeID = null, bool displayCoordinates = false, bool trimUser = false, IEnumerable<ulong> mediaIds = null, bool autoPopulateReplyMetadata = false, IEnumerable<ulong> excludeReplyUserIds = null, string attachmentUrl = null, TweetMode tweetMode = TweetMode.Compat)\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're replying to.\", \"tweetID\");\n\n            return await TweetOrReplyAsync(tweetID, status, latitude, longitude, placeID, displayCoordinates, trimUser, mediaIds, autoPopulateReplyMetadata, excludeReplyUserIds, attachmentUrl, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, null, false, false, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"attachmentUrl\">Tweet link or DM deep link for extended tweet suffix that doesn't count towards tweet length.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, string attachmentUrl, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, null, false, false, null, false, null, attachmentUrl, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with coordinates.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, null, false, false, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with coordinates and option to display.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, bool displayCoordinates, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, null, displayCoordinates, false, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with coordinates, placeID, and option to not include user entity.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, string placeID, bool trimUser, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, placeID, false, trimUser, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with all location options and option to not include user entity.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, placeID, displayCoordinates, trimUser, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with place, option to display coordinates, and option to not include user entity.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, string placeID, bool displayCoordinates, bool trimUser, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, placeID, displayCoordinates, trimUser, null, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with attached media.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, IEnumerable<ulong> mediaIds, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, NoCoordinate, NoCoordinate, NoInputParam, false, false, mediaIds, false, null, null, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update with all options.\n        /// </summary>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"trimUser\">Remove user entity from response</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <param name=\"attachmentUrl\">Tweet link or DM deep link for extended tweet suffix that doesn't count towards tweet length.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <returns>Tweeted status.</returns>\n        public virtual async Task<Status> TweetAsync(string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, IEnumerable<ulong> mediaIds, string attachmentUrl = null, TweetMode tweetMode = TweetMode.Compat)\n        {\n            return await TweetOrReplyAsync(NoReply, status, latitude, longitude, placeID, displayCoordinates, trimUser, mediaIds, false, null, attachmentUrl, tweetMode).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a status update.\n        /// </summary>\n        /// <param name=\"tweetID\">ID (aka StatusID) of tweet to reply to. Sent via ReplyAsync overloads.</param>\n        /// <param name=\"status\">Status text.</param>\n        /// <param name=\"latitude\">Latitude coordinate of where tweet occurred.</param>\n        /// <param name=\"longitude\">Longitude coordinate of where tweet occurred.</param>\n        /// <param name=\"placeID\">ID of place (found via Geo Reverse lookup query).</param>\n        /// <param name=\"displayCoordinates\">Allow or prevent display of coordinates for this tweet.</param>\n        /// <param name=\"trimUser\">Remove user entity from response</param>\n        /// <param name=\"mediaIds\">Collection of ids of media to include in tweet.</param>\n        /// <param name=\"autoPopulateReplyMetadata\">Enables extended tweet mode where mentions don't count towards tweet length.</param>\n        /// <param name=\"excludeReplyUserIds\">Comma-separated list of @mentions to exclude from extended tweet prefix list.</param>\n        /// <param name=\"attachmentUrl\">Tweet link or DM deep link for extended tweet suffix that doesn't count towards tweet length.</param>\n        /// <param name=\"tweetMode\">Set to Extended for 280 characters (Text is blank and FullText contains tweet.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Tweeted status.</returns>\n        internal virtual async Task<Status> TweetOrReplyAsync(ulong tweetID, string status, decimal latitude, decimal longitude, string placeID, bool displayCoordinates, bool trimUser, IEnumerable<ulong> mediaIds, bool autoPopulateReplyMetadata, IEnumerable<ulong> excludeReplyUserIds, string attachmentUrl, TweetMode tweetMode = TweetMode.Compat, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(status) && (mediaIds == null || !mediaIds.Any()))\n                throw new ArgumentException(\"status is a required parameter.\", \"status\");\n\n            var updateUrl = BaseUrl + \"statuses/update.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Status>(\n                    HttpMethod.Post.ToString(),\n                    updateUrl,\n                    new Dictionary<string, string>\n                    {\n                        {\"status\", status},\n                        {\"in_reply_to_status_id\", tweetID == NoReply ? null : tweetID.ToString()},\n                        {\"lat\", latitude == NoCoordinate ? null : latitude.ToString(Culture.US)},\n                        {\"long\", longitude == NoCoordinate ? null : longitude.ToString(Culture.US)},\n                        {\"place_id\", placeID == NoInputParam ? null : placeID },\n                        {\"display_coordinates\", displayCoordinates ? displayCoordinates.ToString().ToLower() : null},\n                        {\"trim_user\", trimUser ? trimUser.ToString().ToLower() : null },\n                        {\"media_ids\", mediaIds == null || !mediaIds.Any() ? null : string.Join(\",\", mediaIds) },\n                        {\"auto_populate_reply_metadata\", autoPopulateReplyMetadata ? autoPopulateReplyMetadata.ToString().ToLower() : null },\n                        {\"exclude_reply_user_ids\", excludeReplyUserIds == null || !excludeReplyUserIds.Any() ? null : string.Join(\",\", excludeReplyUserIds) },\n                        {\"attachment_url\", attachmentUrl },\n                        {\"tweet_mode\", tweetMode == TweetMode.Compat ? null : tweetMode.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Deletes a tweet.\n        /// </summary>\n        /// <param name=\"tweetID\">ID of tweet to delete.</param>\n        /// <returns>Deleted tweet.</returns>\n        public virtual async Task<Status> DeleteTweetAsync(ulong tweetID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're deleting.\", \"tweetID\");\n\n            var destroyUrl = BaseUrl + \"statuses/destroy/\" + tweetID + \".json\";\n\n            RawResult = await TwitterExecutor\n                .PostFormUrlEncodedToTwitterAsync<Status>(HttpMethod.Post.ToString(), destroyUrl, new Dictionary<string, string>(), cancelToken)\n                .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Retweets a tweet.\n        /// </summary>\n        /// <param name=\"tweetID\">ID of tweet being retweeted.</param>\n        /// <returns>Retweeted tweet.</returns>\n        public virtual async Task<Status> RetweetAsync(ulong tweetID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're retweeting.\", \"tweetID\");\n\n            var retweetUrl = BaseUrl + \"statuses/retweet/\" + tweetID + \".json\";\n\n            RawResult = await TwitterExecutor\n                .PostFormUrlEncodedToTwitterAsync<Status>(HttpMethod.Post.ToString(), retweetUrl, new Dictionary<string, string>(), cancelToken)\n                .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/IStreamContent.cs",
    "content": "namespace LinqToTwitter\n{\n    public interface IStreamContent\n    {\n        string Content { get; set; }\n\n        void CloseStream();\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/Control.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Control\n    {\n        public Control() { }\n        public Control(JsonData control)\n        {\n            var ctrl = control.GetValue<JsonData>(\"control\");\n            URL = ctrl.GetValue<string>(\"control_uri\");\n        }\n\n        public string URL { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/Delete.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Delete\n    {\n        public Delete() { }\n        public Delete(JsonData delete)\n        {\n            var del = delete.GetValue<JsonData>(\"delete\");\n            var status = del.GetValue<JsonData>(\"status\");\n            StatusID = status.GetValue<ulong>(\"id\");\n            UserID = status.GetValue<ulong>(\"user_id\");\n        }\n\n        public ulong StatusID { get; set; }\n\n        public ulong UserID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/Disconnect.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Disconnect\n    {\n        public Disconnect() { }\n        public Disconnect(JsonData json)\n        {\n            var disconnect = json.GetValue<JsonData>(\"disconnect\");\n            Code = disconnect.GetValue<int>(\"code\");\n            StreamName = disconnect.GetValue<string>(\"stream_name\");\n            Reason = disconnect.GetValue<string>(\"reason\");\n        }\n\n        public int Code { get; set; }\n\n        public string StreamName { get; set; }\n\n        public string Reason { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/Event.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Event\n    {\n        public Event() { }\n        public Event(JsonData evt)\n        {\n            Target = new User(evt.GetValue<JsonData>(\"target\"));\n            Source = new User(evt.GetValue<JsonData>(\"source\"));\n            EventName = evt.GetValue<string>(\"event\");\n            var targetObj = evt.GetValue<JsonData>(\"target_object\", defaultValue: null);\n            TargetObject = targetObj == null ? (string)null : targetObj.ToString();\n            CreatedAt = evt.GetValue<string>(\"created_at\").GetDate(DateTime.MaxValue);\n        }\n\n        public User Target { get; set; }\n\n        public User Source { get; set; }\n\n        public string EventName { get; set; }\n\n        public string TargetObject { get; set; }\n\n        public DateTime CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/ForUser.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class ForUser\n    {\n        public ForUser() { }\n        public ForUser(JsonData user)\n        {\n            UserID = user.GetValue<ulong>(\"for_user\");\n            var message = user.GetValue<JsonData>(\"message\");\n            var friends = message.GetValue<JsonData>(\"friends\");\n            Friends =\n                friends == null ? new List<ulong>() :\n                (from JsonData friend in friends\n                 select (ulong)friend)\n                .ToList();\n        }\n\n        public ulong UserID { get; set; }\n\n        public List<ulong> Friends { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/FriendsList.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class FriendsList\n    {\n        public FriendsList() { }\n        public FriendsList(JsonData friends)\n        {\n            Friends =\n                friends == null ? new List<ulong>() :\n                (from JsonData friend in friends.GetValue<JsonData>(\"friends\")\n                 select (ulong)friend)\n                .ToList();\n        }\n\n        public List<ulong> Friends { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/GeoScrub.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class GeoScrub\n    {\n        public GeoScrub() { }\n        public GeoScrub(JsonData geo)\n        {\n            var scrub = geo.GetValue<JsonData>(\"scrub_geo\");\n            UserID = scrub.GetValue<ulong>(\"user_id\");\n            UpToStatusID = scrub.GetValue<ulong>(\"up_to_status_id\");\n        }\n        \n        public ulong UserID { get; set; }\n\n        public ulong UpToStatusID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/Limit.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Limit\n    {\n        public Limit() { }\n        public Limit(JsonData json)\n        {\n            var scrub = json.GetValue<JsonData>(\"limit\");\n            Track = scrub.GetValue<ulong>(\"track\");\n        }\n\n        public ulong Track { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/Stall.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class Stall\n    {\n        public Stall() { }\n        public Stall(JsonData stall)\n        {\n            var warning = stall.GetValue<JsonData>(\"user_withheld\");\n            Code = warning.GetValue<string>(\"code\");\n            Message = warning.GetValue<string>(\"message\");\n            PercentFull = warning.GetValue<int>(\"percent_full\");\n        }\n\n        public string Code { get; set; }\n\n        public string Message { get; set; }\n\n        public int PercentFull { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/StatusWithheld.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LitJson;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class StatusWithheld\n    {\n        public StatusWithheld() { }\n        public StatusWithheld(JsonData status)\n        {\n            var withheld = status.GetValue<JsonData>(\"status_withheld\");\n            StatusID = withheld.GetValue<ulong>(\"id\");\n            UserID = withheld.GetValue<ulong>(\"user_id\");\n            var withheldCountries = withheld.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in withheld.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n        }\n\n        public ulong StatusID { get; set; }\n\n        public ulong UserID { get; set; }\n\n        public List<string> WithheldInCountries { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/TooManyFollows.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class TooManyFollows\n    {\n        public TooManyFollows() { }\n        public TooManyFollows(JsonData warning)\n        {\n            var warn = warning.GetValue<JsonData>(\"warning\");\n            Code = warn.GetValue<string>(\"code\");\n            Message = warn.GetValue<string>(\"message\");\n            UserID = warn.GetValue<ulong>(\"user_id\");\n        }\n\n        public string Code { get; set; }\n\n        public string Message { get; set; }\n\n        public ulong UserID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Messages/UserWithheld.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class UserWithheld\n    {\n        public UserWithheld() { }\n        public UserWithheld(JsonData user)\n        {\n            var withheld = user.GetValue<JsonData>(\"user_withheld\");\n            UserID = withheld.GetValue<ulong>(\"user_id\");\n            var withheldCountries = withheld.GetValue<JsonData>(\"withheld_in_countries\");\n            WithheldInCountries =\n                withheldCountries == null ? new List<string>() :\n                (from JsonData country in withheld.GetValue<JsonData>(\"withheld_in_countries\")\n                 select country.ToString())\n                .ToList();\n        }\n\n        public ulong UserID { get; set; }\n\n        public List<string> WithheldInCountries { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/StreamContent.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter stream\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class StreamContent : IStreamContent, IDisposable\n    {\n        private readonly ITwitterExecute exec;\n\n        public StreamContent(ITwitterExecute exec, string content)\n        {\n            this.exec = exec;\n            Content = content;\n            ParseJson(content);\n        }\n\n        void ParseJson(string json)\n        {\n            JsonData jsonObj = JsonMapper.ToObject(json);\n            if (jsonObj == null || jsonObj.InstObject == null)\n            {\n                EntityType = StreamEntityType.Unknown;\n                return;\n            }\n            var inst = jsonObj.InstObject;\n\n            try\n            {\n                if (inst.ContainsKey(\"control\"))\n                {\n                    EntityType = StreamEntityType.Control;\n                    Entity = new Control(jsonObj);\n                }\n                else if (inst.ContainsKey(\"delete\"))\n                {\n                    EntityType = StreamEntityType.Delete;\n                    Entity = new Delete(jsonObj);\n                }\n                else if (inst.ContainsKey(\"disconnect\"))\n                {\n                    EntityType = StreamEntityType.Disconnect;\n                    Entity = new Disconnect(jsonObj);\n                }\n                else if (inst.ContainsKey(\"event\"))\n                {\n                    EntityType = StreamEntityType.Event;\n                    Entity = new Event(jsonObj);\n                }\n                else if (inst.ContainsKey(\"for_user\"))\n                {\n                    EntityType = StreamEntityType.ForUser;\n                    Entity = new ForUser(jsonObj);\n                }\n                else if (inst.ContainsKey(\"friends\") && inst.Count == 1)\n                {\n                    EntityType = StreamEntityType.FriendsList;\n                    Entity = new FriendsList(jsonObj);\n                }\n                else if (inst.ContainsKey(\"geo_scrub\"))\n                {\n                    EntityType = StreamEntityType.GeoScrub;\n                    Entity = new GeoScrub(jsonObj);\n                }\n                else if (inst.ContainsKey(\"limit\"))\n                {\n                    EntityType = StreamEntityType.Limit;\n                    Entity = new Limit(jsonObj);\n                }\n                else if (inst.ContainsKey(\"warning\") && inst.ContainsKey(\"percent_full\"))\n                {\n                    EntityType = StreamEntityType.Stall;\n                    Entity = new Stall(jsonObj);\n                }\n                else if (inst.ContainsKey(\"status_withheld\"))\n                {\n                    EntityType = StreamEntityType.StatusWithheld;\n                    Entity = new StatusWithheld(jsonObj);\n                }\n                else if (inst.ContainsKey(\"warning\") && inst.ContainsKey(\"user_id\"))\n                {\n                    EntityType = StreamEntityType.TooManyFollows;\n                    Entity = new TooManyFollows(jsonObj);\n                }\n                else if (inst.ContainsKey(\"retweeted\"))\n                {\n                    EntityType = StreamEntityType.Status;\n                    Entity = new Status(jsonObj);\n                }\n                else if (inst.ContainsKey(\"user_withheld\"))\n                {\n                    EntityType = StreamEntityType.UserWithheld;\n                    Entity = new UserWithheld(jsonObj);\n                }\n                else\n                {\n                    EntityType = StreamEntityType.Unknown;\n                }\n            }\n            catch (Exception ex)\n            {\n                string parseError = string.Format(\n                    \"Error parsing twitter message. Please create a new issue on the LINQ to Twitter site at https://linqtotwitter.codeplex.com/ \" +\n                    \"with this info. \\n\\nMessage Type: {0}, Message Text:\\n {1} \\nException Details: {2} \\n\", EntityType, json, ex.ToString());\n                \n                EntityType = StreamEntityType.ParseError;\n                Entity = parseError;\n\n                if (TwitterExecute.Log != null)\n                    TwitterExecute.Log.WriteLine(parseError);\n            }\n        }\n\n        /// <summary>\n        /// Stream object, which is a Twitter message of various\n        /// formats or empty string for keep-alive message\n        /// </summary>\n        public string Content { get; set; }\n\n        /// <summary>\n        /// Type of Stream Message\n        /// </summary>\n        public StreamEntityType EntityType { get; private set; }\n\n        /// <summary>\n        /// LINQ to Twitter entity\n        /// </summary>\n        public object Entity { get; private set; }\n\n        /// <summary>\n        /// Closes Twitter stream.\n        /// </summary>\n        public virtual void CloseStream()\n        {\n            exec.CloseStream();\n        }\n\n        public void Dispose()\n        {\n            CloseStream();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/StreamEntityType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum StreamEntityType\n    {\n        Unknown,\n\n        ParseError,\n\n        Control,\n\n        Delete,\n\n        DirectMessage,\n\n        Disconnect,\n\n        Event,\n\n        ForUser,\n\n        FriendsList,\n\n        GeoScrub,\n\n        Limit,\n        \n        Stall,\n\n        Status,\n\n        StatusWithheld,\n\n        TooManyFollows,\n\n        UserWithheld\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/Streaming.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Reference to stream, details, and controls\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Streaming\n    {\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Normally, only replies between two users that follow each other show.\n        /// Setting this to true will show replies, regardless of follow status.\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Number of tweets to go back to when reconnecting\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Tweets are delimeted in the stream\n        /// </summary>\n        public string Delimited { get; set; }\n\n        /// <summary>\n        /// Limit results to a comma-separated set of users\n        /// </summary>\n        public string Follow { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        public string Language { get; set; }\n\n        /// <summary>\n        /// Get tweets in the comma-separated list of lat/lon's\n        /// </summary>\n        public string Locations { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of keywords to get tweets for\n        /// </summary>\n        public string Track { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        public bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Type of entities to return, i.e. Follow, User, etc.\n        /// </summary>\n        public string With { get; set; }\n\n        /// <summary>\n        /// Supports compatibility or extended mode tweets.\n        /// </summary>\n        [Obsolete(\"This isn't required on streams. Instead, check Retweeted.ExtendedTweet.FullText for retweets, ExtendedTweet.FullText for regular tweets, and fallback to FullText if the other checks are null.\")]\n        public TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// Executor managing stream\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Closes stream\n        /// </summary>\n        public void CloseStream()\n        {\n            TwitterExecutor.CloseStream();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/StreamingRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    public class StreamingRequestProcessor<T> : IRequestProcessor<T>\n    {\n        public string BaseUrl { get; set; }\n\n        public ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Normally, only replies between two users that follow each other show.\n        /// Setting this to true will show replies, regardless of follow status.\n        /// </summary>\n        internal bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Number of tweets to go back to when reconnecting\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Tweets are delimeted in the stream\n        /// </summary>\n        internal string Delimited { get; set; }\n\n        /// <summary>\n        /// Limit results to a comma-separated set of users\n        /// </summary>\n        internal string Follow { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of languages to filter results on\n        /// </summary>\n        internal string Language { get; set; }\n\n        /// <summary>\n        /// Get tweets in the comma-separated list of lat/lon's\n        /// </summary>\n        internal string Locations { get; set; }\n\n        /// <summary>\n        /// Tell Twitter to send stall warnings\n        /// </summary>\n        internal bool StallWarnings { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of keywords to get tweets for\n        /// </summary>\n        internal string Track { get; set; }\n\n        /// <summary>\n        /// Type of entities to return, i.e. \"followings\" or \"user\".\n        /// </summary>\n        internal string With { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<Streaming>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"AllReplies\",\n                       \"Count\",\n                       \"Delimited\",\n                       \"Follow\",\n                       \"Language\",\n                       \"Locations\",\n                       \"StallWarnings\",\n                       \"Track\",\n                       \"With\"\n                   }).Parameters;\n\n            if (parameters.ContainsKey(\"AllReplies\")) \n                AllReplies = bool.Parse(parameters[\"AllReplies\"]);\n\n            if (parameters.ContainsKey(\"Count\"))\n                Count = int.Parse(parameters[\"Count\"]);\n\n            if (parameters.ContainsKey(\"Delimited\"))\n                Delimited = parameters[\"Delimited\"];\n\n            if (parameters.ContainsKey(\"Follow\"))\n                Follow = parameters[\"Follow\"];\n\n            if (parameters.ContainsKey(\"Language\"))\n                Language = parameters[\"Language\"];\n\n            if (parameters.ContainsKey(\"Locations\"))\n                Locations = parameters[\"Locations\"];\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n                StallWarnings = bool.Parse(parameters[\"StallWarnings\"]);\n\n            if (parameters.ContainsKey(\"Track\"))\n                Track = parameters[\"Track\"];\n\n            if (parameters.ContainsKey(\"With\"))\n                With = parameters[\"With\"];\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n \n            Type = RequestProcessorHelper.ParseEnum<StreamingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StreamingType.Filter:\n                    return BuildFilterUrl(parameters);\n                case StreamingType.Firehose:\n                    return BuildFirehoseUrl(parameters);\n                case StreamingType.Sample:\n                    return BuildSampleUrl(parameters);\n                default:\n                    break;\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Builds an url for filtering stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFilterUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Follow\") &&\n                !parameters.ContainsKey(\"Locations\") &&\n                !parameters.ContainsKey(\"Track\"))\n            {\n                throw new ArgumentException(\"You must specify at least one of the parameters Follow, Locations, or Track.\", \"FollowOrLocationsOrTrack\");\n            }\n\n            var req = new Request(BaseUrl + \"statuses/filter.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Follow\"))\n            {\n                urlParams.Add(new QueryParameter(\"follow\", parameters[\"Follow\"]));\n            }\n\n            if (parameters.ContainsKey(\"Locations\"))\n            {\n                urlParams.Add(new QueryParameter(\"locations\", parameters[\"Locations\"]));\n            }\n\n            if (parameters.ContainsKey(\"Track\"))\n            {\n                urlParams.Add(new QueryParameter(\"track\", parameters[\"Track\"]));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an url for getting all results from the Twitter stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFirehoseUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"statuses/firehose.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an url for getting random sample tweets from the stream.\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildSampleUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"Count\"))\n                throw new ArgumentException(\"Count is forbidden in Sample streams.\", \"Count\");\n\n            var req = new Request(BaseUrl + \"statuses/sample.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Delimited\"))\n            {\n                urlParams.Add(new QueryParameter(\"delimited\", parameters[\"Delimited\"]));\n            }\n\n            if (parameters.ContainsKey(\"Language\"))\n            {\n                urlParams.Add(new QueryParameter(\"language\", parameters[\"Language\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"StallWarnings\"))\n            {\n                urlParams.Add(new QueryParameter(\"stall_warnings\", parameters[\"StallWarnings\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Returns an object for interacting with stream\n        /// </summary>\n        /// <param name=\"notUsed\">Not used</param>\n        /// <returns>List with a single Streaming</returns>\n        public List<T> ProcessResults(string notUsed)\n        {\n            var streamingList = new List<Streaming>\n            {\n                new Streaming\n                {\n                    AllReplies = AllReplies,\n                    Type = Type,\n                    Count = Count,\n                    Delimited = Delimited,\n                    Follow = Follow,\n                    Locations = Locations,\n                    Track = Track,\n                    TwitterExecutor = TwitterExecutor,\n                    With = With\n                }\n            };\n\n            return streamingList.OfType<T>().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Streaming/StreamingType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum StreamingType\n    {\n        /// <summary>\n        /// Tweets matching a predicate (count, delimited, follow, locations, or track)\n        /// </summary>\n        Filter,\n\n        /// <summary>\n        /// All tweets\n        /// </summary>\n        Firehose,\n\n        /// <summary>\n        /// Random (as defined by Twitter) tweets\n        /// </summary>\n        Sample,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Trends/Location.cs",
    "content": "﻿using System.Globalization;\nusing LinqToTwitter.Common;\n\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Location\n    {\n        public Location() {}\n        internal Location(JsonData trendLocation)\n        {\n            var placeType = trendLocation.GetValue<JsonData>(\"placeType\");\n\n            Country = trendLocation.GetValue<string>(\"country\");\n            Name = trendLocation.GetValue<string>(\"name\");\n            CountryCode = trendLocation.GetValue<string>(\"countryCode\");\n            ParentID = trendLocation.GetValue<int>(\"parentid\").ToString(CultureInfo.InvariantCulture);\n            PlaceTypeName = placeType.GetValue<string>(\"name\");\n            PlaceTypeNameCode = placeType.GetValue<int>(\"code\");\n            Url = trendLocation.GetValue<string>(\"url\");\n            WoeID = trendLocation.GetValue<int>(\"woeid\");\n        }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Name of location\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Type of location\n        /// </summary>\n        public string PlaceTypeName { get; set; }\n\n        /// <summary>\n        /// Code for PlaceTypeName\n        /// </summary>\n        public int PlaceTypeNameCode { get; set; }\n\n        /// <summary>\n        /// Country of Location\n        /// </summary>\n        public string Country { get; set; }\n\n        /// <summary>\n        /// Country Code\n        /// </summary>\n        public string CountryCode { get; set; }\n\n        /// <summary>\n        /// Yahoo Location URL\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Parent location relative to current location.\n        /// Set to null if current location is World.\n        /// </summary>\n        public string ParentID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Trends/Trend.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps to work with trends\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Trend\n    {\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        public TrendType Type { get; set; }\n\n        /// <summary>\n        /// When place trend was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// time of request\n        /// </summary>\n        public DateTime AsOf { get; set; }\n\n        /// <summary>\n        /// twitter search query on topic\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Search URL returned from Local Trends\n        /// </summary>\n        public string SearchUrl { get; set; }\n\n        /// <summary>\n        /// name of trend topic\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        public bool Exclude { get; set; }\n\n        /// <summary>\n        /// No idea, perhaps the event associated with a trend\n        /// </summary>\n        public string Events { get; set; }\n\n        /// <summary>\n        /// Flag indicating this is a promoted trend (as opposed to organic)\n        /// </summary>\n        public string PromotedContent { get; set; }\n\n        /// <summary>\n        /// Return value for Avalable query listing locations of trending topics\n        /// </summary>\n        public List<Location> Locations { get; set; }\n\n        /// <summary>\n        /// Number of tweets in a trend\n        /// </summary>\n        public int TweetVolume { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Trends/TrendRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps process trend requests\n    /// </summary>\n    public class TrendRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string WoeIDParam = \"WoeID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        internal TrendType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        internal double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        internal double Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        internal int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        internal bool Exclude { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Trend>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Latitude\",\n                       \"Longitude\",\n                       \"WoeID\",\n                       \"Exclude\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<TrendType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case TrendType.Available:\n                    return BuildAvailableTrendsUrl();\n                case TrendType.Closest:\n                    return BuildClosestTrendsUrl(parameters);\n                case TrendType.Place:\n                    return BuildPlaceTrendsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// Builds a url for finding trends at a specified location\n        /// </summary>\n        /// <param name=\"parameters\">parameters should contain WoeID</param>\n        /// <returns>base url + location segment</returns>\n        Request BuildPlaceTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(WoeIDParam))\n                throw new ArgumentException(\"WoeID is a required parameter.\", WoeIDParam);\n\n            var req = new Request(BaseUrl + \"trends/place.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            WoeID = int.Parse(parameters[WoeIDParam]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[WoeIDParam]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL for finding where trends are occurring\n        /// </summary>\n        /// <returns>base url + Available segment</returns>\n        Request BuildAvailableTrendsUrl()\n        {\n            return new Request(BaseUrl + \"trends/available.json\");\n        }\n\n        /// <summary>\n        /// Builds an URL for finding trends closest to a lat/long\n        /// </summary>\n        /// <param name=\"parameters\">parameters can include Latitude and Longitude (must have either both parameters or neither)</param>\n        /// <returns>base url + Available segment</returns>\n        Request BuildClosestTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if ((parameters.ContainsKey(\"Latitude\") && !parameters.ContainsKey(\"Longitude\")) ||\n                (!parameters.ContainsKey(\"Latitude\") && parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"If you pass either Latitude or Longitude then you must pass both. Otherwise, don't pass either.\", \"Latitude/Longitude\");\n\n            var req = new Request(BaseUrl + \"trends/closest.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", parameters[\"Latitude\"]));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", parameters[\"Longitude\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Trend\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Trend</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Trend> trends = Enumerable.Empty<Trend>();\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch (Type)\n                {\n                    case TrendType.Available:\n                    case TrendType.Closest:\n                        trends = HandleAvailableOrClosestResponse(responseJson);\n                        break;\n\n                    case TrendType.Place:\n                        trends = HandlePlaceResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n            }\n\n            return trends.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Type of action to process</param>\n        /// <returns>Action response</returns>\n        public virtual T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var trend = new Trend();\n\n            return trend.ItemCast(default(T));\n        }\n\n        IEnumerable<Trend> HandlePlaceResponse(string responseJson)\n        {\n            JsonData responses = JsonMapper.ToObject(responseJson);\n\n            IEnumerable<IEnumerable<Trend>> flat =\n                from JsonData response in responses\n                let asOf = response.GetValue<string>(\"as_of\").GetDate(DateTime.UtcNow)\n                let createdAt = response.GetValue<string>(\"created_at\").GetDate(DateTime.UtcNow)\n                let locations =\n                     (from JsonData place in response.GetValue<JsonData>(\"locations\")\n                      select new Location(place)).ToList()\n                let trends =\n                     (from JsonData trend in response.GetValue<JsonData>(\"trends\")\n                      select new Trend\n                      {\n                          Type = Type,\n                          AsOf = asOf,\n                          CreatedAt = createdAt,\n                          Latitude = Latitude,\n                          Longitude = Longitude,\n                          WoeID = WoeID,\n                          Exclude = Exclude,\n                          Name = trend.GetValue<string>(\"name\"),\n                          Query = trend.GetValue<string>(\"query\"),\n                          SearchUrl = trend.GetValue<string>(\"url\"),\n                          Events = trend.GetValue<string>(\"events\"),\n                          PromotedContent = trend.GetValue<string>(\"promoted_content\"),\n                          Locations = locations,\n                          TweetVolume = trend.GetValue<int>(\"tweet_volume\")\n                      })\n                select trends;\n\n            return flat.SelectMany(trend => trend);\n        }\n\n        IEnumerable<Trend> HandleAvailableOrClosestResponse(string responseJson)\n        {\n            JsonData trends = JsonMapper.ToObject(responseJson);\n            List<Location> locations =\n                (from JsonData loc in trends\n                 select new Location(loc))\n                .ToList();\n\n            // we fake a single Trend to hang the locations off of...\n            yield return new Trend\n            {\n                Type = Type,\n                AsOf = DateTime.UtcNow,\n                Latitude = Latitude,\n                Longitude = Longitude,\n                WoeID = WoeID,\n                Exclude = Exclude,\n                Locations = locations\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/Trends/TrendType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of trend to query\n    /// </summary>\n    public enum TrendType\n    {\n        /// <summary>\n        /// Locations of where trends are occurring\n        /// </summary>\n        Available,\n\n        /// <summary>\n        /// Trends closest to specified lat/long\n        /// </summary>\n        Closest,\n\n        /// <summary>\n        /// Top 10 topics for a WOEID\n        /// </summary>\n        Place\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/Category.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A single category for Twitter suggested categories\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Category\n    {\n        public Category() { }\n        public Category(JsonData catJson)\n        {\n            Size = catJson.GetValue<int>(\"size\");\n            Name = catJson.GetValue<string>(\"name\");\n            Slug = catJson.GetValue<string>(\"slug\");\n\n            var users = catJson.GetValue<JsonData>(\"users\");\n            if (users != null)\n                Users =\n                    (from JsonData user in users\n                     select new User(user))\n                    .ToList();\n        }\n\n        /// <summary>\n        /// Category name\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// Category description\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Number of users in category\n        /// </summary>\n        public int Size { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<Category> Categories { get; set; }\n\n        /// <summary>\n        /// Users in category\n        /// </summary>\n        public List<User> Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/ProfileImageSize.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum ProfileImageSize\n    {\n        /// <summary>\n        /// 48 x 48 pixels (default)\n        /// </summary>\n        Normal,\n\n        /// <summary>\n        /// 73 x 73 pixels\n        /// </summary>\n        Bigger,\n\n        /// <summary>\n        /// 24 x 24 pixels\n        /// </summary>\n        Mini,\n\n        /// <summary>\n        /// Size of the originally uploaded image\n        /// </summary>\n        Original\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/TwitterContextUserCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets logged-in user report spam.\n        /// </summary>\n        /// <param name=\"userID\">User id of alleged spammer.</param>\n        /// <returns>Alleged spammer user info.</returns>\n        public async Task<User> ReportSpamAsync(ulong userID, bool performBlock = false, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"Twitter doesn't have a user with ID == 0\", \"userID\");\n\n            var reportParams = new Dictionary<string, string>\n            {\n                { \"user_id\", userID.ToString() },\n                { \"perform_block\", performBlock ? bool.TrueString.ToLower() : null }\n            };\n\n            return await ReportSpamAsync(reportParams, cancelToken).ConfigureAwait(false);\n        }\n\n\n        /// <summary>\n        /// Lets logged-in user report spam.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of alleged spammer.</param>\n        /// <returns>Alleged spammer user info.</returns>\n        public async Task<User> ReportSpamAsync(string screenName, bool performBlock = false, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Please supply a valid screen name\", \"screenName\");\n\n            var reportParams = new Dictionary<string, string>\n            {\n                { \"screen_name\", screenName },\n                { \"perform_block\", performBlock ? bool.TrueString.ToLower() : null }\n            };\n\n            return await ReportSpamAsync(reportParams, cancelToken).ConfigureAwait(false);\n        }\n\n        internal async Task<User> ReportSpamAsync(IDictionary<string, string> reportParams, CancellationToken cancelToken = default(CancellationToken))\n        {\n            string reportSpamUrl = BaseUrl + \"users/report_spam.json\";\n\n            RawResult =\n                await TwitterExecutor\n                    .PostFormUrlEncodedToTwitterAsync<User>(HttpMethod.Post.ToString(), reportSpamUrl, reportParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return new UserRequestProcessor<User>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/User.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for a twitter user\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class User\n    {\n        public User() {}\n        public User(JsonData user)\n        {\n            if (user == null) return;\n\n            BannerSizes = new List<BannerSize>();\n            Categories = new List<Category>();\n            UserIDResponse = user.GetValue<ulong>(\"id\").ToString(CultureInfo.InvariantCulture);\n            ScreenNameResponse = user.GetValue<string>(\"screen_name\");\n            Name = user.GetValue<string>(\"name\");\n            Location = user.GetValue<string>(\"location\");\n            Description = user.GetValue<string>(\"description\");\n            ProfileImageUrl = user.GetValue<string>(\"profile_image_url\");\n            ProfileImageUrlHttps = user.GetValue<string>(\"profile_image_url_https\");\n            Url = user.GetValue<string>(\"url\");\n            Entities = new UserEntities(user.GetValue<JsonData>(\"entities\"));\n            Protected = user.GetValue<bool>(\"protected\");\n            ProfileUseBackgroundImage = user.GetValue<bool>(\"profile_use_background_image\");\n            IsTranslator = user.GetValue<bool>(\"is_translator\");\n            FollowersCount = user.GetValue<int>(\"followers_count\");\n            DefaultProfile = user.GetValue<bool>(\"default_profile\");\n            ProfileBackgroundColor = user.GetValue<string>(\"profile_background_color\");\n            LangResponse = user.GetValue<string>(\"lang\");\n            ProfileTextColor = user.GetValue<string>(\"profile_text_color\");\n            ProfileLinkColor = user.GetValue<string>(\"profile_link_color\");\n            ProfileSidebarFillColor = user.GetValue<string>(\"profile_sidebar_fill_color\");\n            ProfileSidebarBorderColor = user.GetValue<string>(\"profile_sidebar_border_color\");\n            FriendsCount = user.GetValue<int>(\"friends_count\");\n            DefaultProfileImage = user.GetValue<bool>(\"default_profile_image\");\n            CreatedAt = user.GetValue<string>(\"created_at\").GetDate(DateTime.MinValue);\n            FavoritesCount = user.GetValue<int>(\"favourites_count\");\n            UtcOffset = user.GetValue<int>(\"utc_offset\");\n            TimeZone = user.GetValue<string>(\"time_zone\");\n            ProfileBackgroundImageUrl = user.GetValue<string>(\"profile_background_image_url\");\n            ProfileBackgroundImageUrlHttps = user.GetValue<string>(\"profile_background_image_url_https\");\n            ProfileBackgroundTile = user.GetValue<bool>(\"profile_background_tile\");\n            ProfileBannerUrl = user.GetValue<string>(\"profile_banner_url\");\n            StatusesCount = user.GetValue<int>(\"statuses_count\");\n            Notifications = user.GetValue<bool>(\"notifications\");\n            GeoEnabled = user.GetValue<bool>(\"geo_enabled\");\n            Verified = user.GetValue<bool>(\"verified\");\n            ContributorsEnabled = user.GetValue<bool>(\"contributors_enabled\");\n            Following = user.GetValue<bool>(\"following\");\n            ShowAllInlineMedia = user.GetValue<bool>(\"show_all_inline_media\");\n            ListedCount = user.GetValue<int>(\"listed_count\");\n            FollowRequestSent = user.GetValue<bool>(\"follow_request_sent\");\n            Status = new Status(user.GetValue<JsonData>(\"status\"));\n            CursorMovement = new Cursors(user);\n            Email = user.GetValue<string>(\"email\");\n        }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        public UserType Type { get; set; }\n\n        /// <summary>\n        /// Query User ID\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs (e.g. for Lookup query)\n        /// </summary>\n        public string UserIdList { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// </summary>\n        public string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names (e.g. for Lookup queries)\n        /// </summary>\n        public string ScreenNameList { get; set; }\n\n        /// <summary>\n        /// Page to return\n        /// </summary>\n        /// <remarks>\n        /// This was made obsolete for one API, but not Search. Therefore, we can't mark it as obsolete yet.\n        /// </remarks>\n        //[Obsolete(\"This property has been deprecated and will be ignored by Twitter. Please use Cursor/CursorMovement properties instead.\")]\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        public string Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        public string Query { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Query User ID\n        /// </summary>\n        public string UserIDResponse { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// </summary>\n        public string ScreenNameResponse { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        public ProfileImageSize ImageSize { get; set; }\n\n        /// <summary>\n        /// Set to TweetMode.Extended to receive 280 characters in Status.FullText property\n        /// </summary>\n        public TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// name of user\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// location of user\n        /// </summary>\n        public string Location { get; set; }\n\n        /// <summary>\n        /// user's description\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// user's image\n        /// </summary>\n        public string ProfileImageUrl { get; set; }\n\n        /// <summary>\n        /// user's image for use on HTTPS secured pages\n        /// </summary>\n        public string ProfileImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// user's image is a defaulted placeholder\n        /// </summary>\n        public bool DefaultProfileImage{ get; set; }\n\n        /// <summary>\n        /// user's URL\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Entities connected to the <see cref=\"User\"/>\n        /// </summary>\n        public UserEntities Entities { get; set; }\n\n        /// <summary>\n        /// user's profile has not been configured (is just defaults)\n        /// </summary>\n        public bool DefaultProfile { get; set; }\n\n        /// <summary>\n        /// is user protected\n        /// </summary>\n        public bool Protected { get; set; }\n\n        /// <summary>\n        /// number of people following user\n        /// </summary>\n        public int FollowersCount { get; set; }\n\n        /// <summary>\n        /// color of profile background\n        /// </summary>\n        public string ProfileBackgroundColor { get; set; }\n\n        /// <summary>\n        /// color of profile text\n        /// </summary>\n        public string ProfileTextColor { get; set; }\n\n        /// <summary>\n        /// color of profile links\n        /// </summary>\n        public string ProfileLinkColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar\n        /// </summary>\n        public string ProfileSidebarFillColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar border\n        /// </summary>\n        public string ProfileSidebarBorderColor { get; set; }\n\n        /// <summary>\n        /// number of friends\n        /// </summary>\n        public int FriendsCount { get; set; }\n\n        /// <summary>\n        /// date and time when profile was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// number of favorites\n        /// </summary>\n        public int FavoritesCount { get; set; }\n\n        /// <summary>\n        /// UTC Offset\n        /// </summary>\n        public int UtcOffset { get; set; }\n\n        /// <summary>\n        /// Time Zone\n        /// </summary>\n        public string TimeZone { get; set; }\n\n        /// <summary>\n        /// URL of profile background image\n        /// </summary>\n        public string ProfileBackgroundImageUrl { get; set; }\n\n        /// <summary>\n        /// URL of profile background image for use on HTTPS secured pages\n        /// </summary>\n        public string ProfileBackgroundImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// Title of profile background\n        /// </summary>\n        public bool ProfileBackgroundTile { get; set; }\n\n        /// <summary>\n        /// Should we use the profile background image?\n        /// </summary>\n        public bool ProfileUseBackgroundImage { get; set; }\n\n        /// <summary>\n        /// number of status updates user has made\n        /// </summary>\n        public int StatusesCount { get; set; }\n\n        /// <summary>\n        /// type of device notifications\n        /// </summary>\n        public bool Notifications { get; set; }\n\n        /// <summary>\n        /// Supports Geo Tracking\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Is a verified account\n        /// </summary>\n        public bool Verified { get; set; }\n\n        /// <summary>\n        /// Is contributors enabled on account?\n        /// </summary>\n        public bool ContributorsEnabled { get; set; }\n\n        /// <summary>\n        /// Is this a translator?\n        /// </summary>\n        public bool IsTranslator { get; set; }\n\n        /// <summary>\n        /// is authenticated user following this user\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// current user status (valid only in user queries)\n        /// </summary>\n        public Status Status { get; set; }\n\n        /// <summary>\n        /// User categories for Twitter Suggested Users\n        /// </summary>\n        public List<Category> Categories { get; set; }\n\n        /// <summary>\n        /// Input param for Category queries\n        /// </summary>\n        public string Lang { get; set; }\n\n        /// <summary>\n        /// Return results for specified language\n        ///  Note: Twitter only supports a limited number of languages,\n        ///  which include en, fr, de, es, it when this feature was added.\n        /// </summary>\n        public string LangResponse { get; set; }\n\n        /// <summary>\n        /// Indicates if user has inline media enabled\n        /// </summary>\n        public bool ShowAllInlineMedia { get; set; }\n\n        /// <summary>\n        /// Number of lists user is a member of\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// If authenticated user has requested to follow this use\n        /// </summary>\n        public bool FollowRequestSent { get; set; }\n\n        /// <summary>\n        /// Response from ProfileImage query\n        /// </summary>\n        public string ProfileImage { get; set; }\n\n        /// <summary>\n        /// Url of Profile Banner image.\n        /// </summary>\n        public string ProfileBannerUrl { get; set; }\n\n        /// <summary>\n        /// Available sizes to use in account banners.\n        /// </summary>\n        public List<BannerSize> BannerSizes { get; set; }\n\n        /// <summary>\n        /// User's email-address (null if not filled in on app is\n        /// lacking whitelisting)\n        /// </summary>\n        public string Email { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/UserAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum UserAction\n    {\n        SingleUser\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/UserEntities.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LitJson;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// URLs associated with the User profile\n    /// </summary>\n    public class UserEntities\n    {\n        public UserEntities(JsonData entities)\n        {\n            Url = new Entities(entities.GetValue<JsonData>(\"url\"));\n            Description = new Entities(entities.GetValue<JsonData>(\"description\"));\n        }\n\n        /// <summary>\n        /// Url entities in the profile\n        /// </summary>\n        [JsonProperty(\"url\")]\n        public Entities Url { get; set; }\n\n        /// <summary>\n        /// Url entities in the description\n        /// </summary>\n        [JsonProperty(\"description\")]\n        public Entities Description { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/UserRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter User requests.\n    /// </summary>\n    public class UserRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string ScreenNameOrUserID = \"ScreenNameOrUserID\";\n        const string ScreenNameListOrUserIdList = \"ScreenNameListOrUserIdList\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        internal UserType Type { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs (e.g. for Lookup query)\n        /// </summary>\n        internal string UserIdList { get; set; }\n\n        /// <summary>\n        /// user's screen name\n        /// On Input - disambiguates when ID is User ID\n        /// </summary>\n        internal string ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names (e.g. for Lookup query)\n        /// </summary>\n        public string ScreenNameList { get; set; }\n\n        /// <summary>\n        /// page number of results to retrieve\n        /// </summary>\n        internal int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        internal long Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        internal string Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        internal string Query { get; set; }\n\n        /// <summary>\n        /// Supports various languages\n        /// </summary>\n        internal string Lang { get; set; }\n\n        /// <summary>\n        /// Add entities to results\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        internal bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        internal ProfileImageSize ImageSize { get; set; }\n\n        /// <summary>\n        /// Set to TweetMode.Extended to receive 280 characters in Status.FullText property\n        /// </summary>\n        internal TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<User>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(UserID),\n                       nameof(UserIdList),\n                       nameof(ScreenName),\n                       nameof(ScreenNameList),\n                       nameof(Page),\n                       nameof(Count),\n                       nameof(Cursor),\n                       nameof(Slug),\n                       nameof(Query),\n                       nameof(Lang),\n                       nameof(IncludeEntities),\n                       nameof(SkipStatus),\n                       nameof(ImageSize),\n                       nameof(TweetMode)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<UserType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case UserType.Show:\n                    return BuildShowUrl(parameters);\n                case UserType.Categories:\n                    return BuildCategoriesUrl(parameters);\n                case UserType.Category:\n                    return BuildUsersInCategoryUrl(parameters);\n                case UserType.CategoryStatus:\n                    return BuildCategoryStatusUrl(parameters);\n                case UserType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case UserType.Search:\n                    return BuildSearchUrl(parameters);\n                case UserType.Contributees:\n                    return BuildContributeesUrl(parameters);\n                case UserType.Contributors:\n                    return BuildContributorsUrl(parameters);\n                case UserType.BannerSizes:\n                    return BuildBannerSizesUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildContributorsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/contributors.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n \n        Request BuildContributeesUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            var req = new Request(BaseUrl + \"users/contributees.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a URL to perform a user search\n        /// </summary>\n        /// <param name=\"parameters\">Query, Page, and Count</param>\n        /// <returns>URL for performing user search</returns>\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryParam = \"Query\";\n            if (!parameters.ContainsKey(\"Query\"))\n                throw new ArgumentException(\"Query parameter is required.\", QueryParam);\n\n            var req = new Request(BaseUrl + \"users/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"q\", parameters[\"Query\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url for performing lookups\n        /// </summary>\n        /// <param name=\"parameters\">Either UserID or ScreenName</param>\n        /// <returns>URL for performing lookups</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenNameList\") || parameters.ContainsKey(\"UserIdList\")) ||\n                (parameters.ContainsKey(\"ScreenNameList\") && parameters.ContainsKey(\"UserIdList\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenNameList or UserIdList parameters, but not both.\", ScreenNameListOrUserIdList);\n\n            var req = new Request(BaseUrl + \"users/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ScreenNameList\"))\n            {\n                ScreenNameList = parameters[\"ScreenNameList\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenNameList\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserIdList\"))\n            {\n                UserIdList = parameters[\"UserIdList\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserIdList\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds url for getting users that belong to a suggestion category\n        /// </summary>\n        /// <param name=\"parameters\">Contains Slug. Required.</param>\n        /// <returns>Url for query + slug</returns>\n        Request BuildUsersInCategoryUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Slug\"))\n                throw new ArgumentException(\"Slug parameter is required.\", \"Slug\");\n\n            Slug = parameters[\"Slug\"];\n\n            var req = new Request(BaseUrl + \"users/suggestions/\" + Slug + \".json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Lang\"))\n            {\n                Lang = parameters[\"Lang\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"Lang\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url to get suggested user categories\n        /// </summary>\n        /// <param name=\"parameters\">Not used</param>\n        /// <returns>Url for suggested user categories</returns>\n        Request BuildCategoriesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/suggestions.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Lang\"))\n            {\n                Lang = parameters[\"Lang\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"Lang\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a url to get tweets of users in a suggested category\n        /// </summary>\n        /// <param name=\"parameters\">Reads Slug param</param>\n        /// <returns>Url for category statuses</returns>\n        Request BuildCategoryStatusUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Slug\"))\n                throw new ArgumentNullException(\"Slug\", \"You must set the Slug property, which is the suggested category.\");\n\n            Slug = parameters[\"Slug\"];\n            var req = new Request(BaseUrl + \"users/suggestions/\" + Slug.ToLower() + \"/members.json\");\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds a url to show user info\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrWhiteSpace(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrWhiteSpace(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            var req = new Request(BaseUrl + \"users/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildBannerSizesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/profile_banner.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrWhiteSpace(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrWhiteSpace(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            List<User> userList = null;\n\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            switch (Type)\n            {\n                case UserType.Show:\n                    userList = HandleSingleUserResponse(userJson);\n                    break;\n                case UserType.Categories:\n                    userList = HandleMultipleCategoriesResponse(userJson);\n                    break;\n                case UserType.Category:\n                    userList = HandleSingleCategoryResponse(userJson);\n                    break;\n                case UserType.Contributees:\n                case UserType.Contributors:\n                case UserType.CategoryStatus:\n                case UserType.Lookup:\n                case UserType.Search:\n                    userList = HandleMultipleUserResponse(userJson);\n                    break;\n                case UserType.BannerSizes:\n                    userList = HandleBannerSizesResponse(userJson);\n                    break;\n                default:\n                    userList = new List<User>();\n                    break;\n            }\n\n            foreach(var user in userList)\n            {\n                user.Type = Type;\n                user.UserID = UserID;\n                user.UserIdList = UserIdList;\n                user.ScreenName = ScreenName;\n                user.ScreenNameList = ScreenNameList;\n                user.Page = Page;\n                user.Count = Count;\n                user.Cursor = Cursor;\n                user.Slug = Slug;\n                user.Lang = Lang;\n                user.Query = Query;\n                user.IncludeEntities = IncludeEntities;\n                user.SkipStatus = SkipStatus;\n                user.ImageSize = ImageSize;\n                user.TweetMode = TweetMode;\n            }\n\n            return userList.OfType<T>().ToList();\n        }\n  \n        List<User> HandleSingleUserResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n  \n        List<User> HandleMultipleCategoriesResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User>\n            {\n                new User\n                {\n                    Categories =\n                        (from JsonData cat in userJson\n                         select new Category(cat))\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n  \n        List<User> HandleSingleCategoryResponse(JsonData userJson)\n        {\n            List<User> userList = new List<User>\n            {\n                new User\n                {\n                    Categories = new List<Category> { new Category(userJson) }\n                }\n            };\n\n            return userList;\n        }\n  \n        List<User> HandleMultipleUserResponse(JsonData userJson)\n        {\n            List<User> userList =\n                (from JsonData user in userJson\n                 select new User(user))\n                .ToList();\n\n            return userList;\n        }\n\n        List<User> HandleBannerSizesResponse(JsonData userJson)\n        {\n            var sizes = userJson.GetValue<JsonData>(\"sizes\");\n            var userList = new List<User>\n            {\n                new User\n                {\n                    BannerSizes =     \n                        (from key in (sizes as IDictionary<string, JsonData>).Keys as List<string>\n                         let sizesKey = sizes.GetValue<JsonData>(key)\n                         select new BannerSize\n                         {\n                             Label = key,\n                             Width = sizesKey.GetValue<int>(\"w\"),\n                             Height = sizesKey.GetValue<int>(\"h\"),\n                             Url = sizesKey.GetValue<string>(\"url\")\n                         })\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonData userJson = JsonMapper.ToObject(responseJson);\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/User/UserType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of user request\n    /// </summary>\n    public enum UserType\n    {\n        /// <summary>\n        /// extended information on a user\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Available Twitter suggestion categories\n        /// </summary>\n        Categories,\n\n        /// <summary>\n        /// Users under a specified category\n        /// </summary>\n        Category,\n\n        /// <summary>\n        /// Get most recent tweet of each user in category\n        /// </summary>\n        CategoryStatus,\n\n        /// <summary>\n        /// Get user details for a set of users\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// Perform a user search\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Users that specified user can contribute to\n        /// </summary>\n        Contributees,\n\n        /// <summary>\n        /// Users who can contribute to an account\n        /// </summary>\n        Contributors,\n\n        /// <summary>\n        /// List of sizes for account banners\n        /// </summary>\n        BannerSizes\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/WelcomeMessages/TwitterContextWelcomeMessageCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Creates a new welcome message.\n        /// </summary>\n        /// <param name=\"name\">Name of welcome message.</param>\n        /// <param name=\"text\">Welcome message contents.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<WelcomeMessage> NewWelcomeMessageAsync(string name, string text, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException($\"{nameof(text)} is a required parameter.\", nameof(text));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/new.json\";\n\n            var msgParams = new WelcomeMessageValue\n            {\n                WelcomeMessage = new WelcomeMsg\n                {\n                    Name = name,\n                    MessageData = new WelcomeMessageData\n                    {\n                        Text = text\n                    }\n                }\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    msgParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            //msg.Name = name;\n            //msg.Text = text;\n\n            return msg;\n        }\n\n        /// <summary>\n        /// Updates an existing welcome message.\n        /// <param name=\"welcomeMessageID\">ID of the welcome message.</param>\n        /// <paramref name=\"name\">Updated welcome message name.</paramref>\n        /// <param name=\"text\">Updated welcome message contents.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<WelcomeMessage> UpdateWelcomeMessageAsync(ulong welcomeMessageID, string name, string text, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageID));\n\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException($\"{nameof(text)} is a required parameter.\", nameof(text));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/update.json?id=\" + welcomeMessageID;\n\n            var postData = new Dictionary<string, string>\n            {\n                [\"id\"] = welcomeMessageID.ToString()\n            };\n\n            var msgParams = new WelcomeMsg\n            {\n                Name = name,\n                MessageData = new WelcomeMessageData\n                {\n                    Text = text\n                }\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    newUrl,\n                    postData,\n                    msgParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            //msg.ID = welcomeMessageID;\n            //msg.Text = text;\n\n            return msg;\n        }\n\n        /// <summary>\n        /// Deletes an existing welcome message.\n        /// <param name=\"welcomeMessageID\">ID of the welcome message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task DeleteWelcomeMessageAsync(ulong welcomeMessageID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageID));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/destroy.json?id=\" + welcomeMessageID;\n\n            var postData = new Dictionary<string, string>\n            {\n                [\"id\"] = welcomeMessageID.ToString()\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    postData,\n                    \"\",\n                    cancelToken)\n                   .ConfigureAwait(false) ?? string.Empty;\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            msg.ID = welcomeMessageID;\n        }\n\n        /// <summary>\n        /// Marks a welcome message as the default.\n        /// </summary>\n        /// <param name=\"welcomeMessageID\">ID of the welcome message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<WelcomeMessage> NewWelcomeMessageRuleAsync(ulong welcomeMessageID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageID));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/rules/new.json\";\n\n            var msgParams = new WelcomeMessageValue\n            {\n                WelcomeMessageRule = new WelcomeMessageRule\n                {\n                    WelcomeMessageID = welcomeMessageID.ToString()\n                }\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    msgParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            msg.ID = welcomeMessageID;\n\n            return msg;\n        }\n\n        /// <summary>\n        /// Deletes an existing welcome message rule.\n        /// <param name=\"welcomeMessageRuleID\">ID of the welcome message rule.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task DeleteWelcomeMessageRuleAsync(ulong welcomeMessageRuleID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageRuleID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageRuleID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageRuleID));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/rules/destroy.json?id=\" + welcomeMessageRuleID;\n\n            var postData = new Dictionary<string, string>\n            {\n                [\"id\"] = welcomeMessageRuleID.ToString()\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    postData,\n                    \"\",\n                    cancelToken)\n                   .ConfigureAwait(false) ?? string.Empty;\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            msg.ID = welcomeMessageRuleID;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/WelcomeMessages/WelcomeMessage.cs",
    "content": "﻿using System.Xml.Serialization;\nusing Newtonsoft.Json;\nusing System;\nusing LinqToTwitter.Common;\nusing Newtonsoft.Json.Linq;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Direct message events support Twitter chatbot messages.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class WelcomeMessage\n    {\n        ///// <summary>\n        ///// Input (New Welcome Message): Name of the Welcome Message\n        ///// </summary>\n        //public string Name { get; set; }\n\n        ///// <summary>\n        ///// Input (New Welcome Message): Welcome Message contents\n        ///// </summary>\n        //public string Text { get; set; }\n\n        /// <summary>\n        /// Number of items to return\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Helps page through results greater than Count items\n        /// </summary>\n        public string Cursor { get; set; }\n\n        /// <summary>\n        /// Input (New Welcome Message Rule): ID of the message to set as default.\n        /// </summary>\n        public ulong ID { get; internal set; }\n\n        /// <summary>\n        /// Input (All Queries): Type of Welcome Message\n        /// </summary>\n        public WelcomeMessageType Type { get; set; }\n\n        /// <summary>\n        /// Output: Response from Twitter\n        /// </summary>\n        public WelcomeMessageValue Value { get; set; }\n    }\n\n    public class WelcomeMessageValue\n    {\n        /// <summary>\n        /// Single Welcome Message\n        /// </summary>\n        [JsonProperty(\"welcome_message\")]\n        public WelcomeMsg WelcomeMessage { get; set; }\n\n        /// <summary>\n        /// Multiple Welcome Messages\n        /// </summary>\n        [JsonProperty(\"welcome_messages\")]\n        public List<WelcomeMsg> WelcomeMessages { get; set; }\n\n        /// <summary>\n        /// A single message rule\n        /// </summary>\n        [JsonProperty(\"welcome_message_rule\")]\n        public WelcomeMessageRule WelcomeMessageRule { get; set; }\n\n        /// <summary>\n        /// Multiple message rules\n        /// </summary>\n        [JsonProperty(\"welcome_message_rules\")]\n        public List<WelcomeMessageRule> WelcomeMessageRules { get; set; }\n\n        /// <summary>\n        /// Show and List queries populate this to show which app created the message.\n        /// You need to use JSON.NET because the nested object ID is a property matching the app id, \n        /// which is different for every app, precluding the ability to assign a C# property.\n        /// </summary>\n        [JsonProperty(\"apps\")]\n        public JObject Apps { get; set; }\n\n        /// <summary>\n        /// ID for the next page or null if there isn't a next page\n        /// </summary>\n        [JsonProperty(\"next_cursor\")]\n        public string NextCursor { get; set; }\n    }\n\n    public class WelcomeMsg\n    {\n        [JsonProperty(\"id\")]\n        public string Id { get; set; }\n        [JsonProperty(\"created_timestamp\")]\n        public string CreatedTimestamp { get; set; }\n\n        /// <summary>\n        /// ID of the application creating the Message\n        /// </summary>\n        [JsonProperty(\"source_app_id\")]\n        public string SourceAppId { get; set; }\n        [JsonProperty(\"name\")]\n        public string Name { get; set; }\n        [JsonProperty(\"message_data\")]\n        public WelcomeMessageData MessageData { get; set; }\n\n        DateTime createdAt;\n        /// <summary>\n        /// Helper property for C# DateTime matching CreatedTimestamp (so you don't have to convert it yourself)\n        /// </summary>\n        [JsonIgnore]\n        public DateTime CreatedAt\n        {\n            get\n            {\n                if (createdAt == default(DateTime))\n                    createdAt = CreatedTimestamp.GetEpochDateFromTimestamp();\n\n                return createdAt;\n            }\n        }\n    }\n\n    public class WelcomeMessageData\n    {\n        [JsonProperty(\"text\")]\n        public string Text { get; set; }\n        [JsonProperty(\"entities\")]\n        public Entities Entities { get; set; }\n        [JsonProperty(\"attachment\")]\n        public WelcomeMessageAttachment Attachment { get; set; }\n    }\n\n    public class WelcomeMessageAttachment\n    {\n        [JsonProperty(\"type\")]\n        public string Type { get; set; }\n        [JsonProperty(\"media\")]\n        public WelcomeMessageMedia Media { get; set; }\n    }\n\n    public class WelcomeMessageMedia\n    {\n        [JsonProperty(\"id\")]\n        public string Id { get; set; }\n    }\n\n    public class WelcomeMessageRule\n    {\n        [JsonProperty(\"id\")]\n        public string ID { get; set; }\n        [JsonProperty(\"created_timestamp\")]\n        public string CreatedTimestamp { get; set; }\n        [JsonProperty(\"welcome_message_id\")]\n        public string WelcomeMessageID { get; set; }\n\n        /// <summary>\n        /// Helper property for C# DateTime matching CreatedTimestamp (so you don't have to convert it yourself)\n        /// </summary>\n        DateTime createdAt;\n        [JsonIgnore]\n        public DateTime CreatedAt\n        {\n            get\n            {\n                if (createdAt == default(DateTime))\n                    createdAt = CreatedTimestamp.GetEpochDateFromTimestamp();\n\n                return createdAt;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/WelcomeMessages/WelcomeMessageRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class WelcomeMessageRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string BaseUrl { get; set; }\n\n        /// <summary>\n        /// Number of items to return\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Helps page through results greater than Count items\n        /// </summary>\n        internal string Cursor { get; set; }\n\n        /// <summary>\n        /// ID of item to show\n        /// </summary>\n        internal ulong ID { get; set; }\n\n        /// <summary>\n        /// Type of Welcome Message\n        /// </summary>\n        internal WelcomeMessageType Type { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<WelcomeMessage>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Count),\n                       nameof(Cursor),\n                       nameof(ID),\n                       nameof(Type)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException($\"You must set {nameof(Type)}.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<WelcomeMessageType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case WelcomeMessageType.ListMessages:\n                    return BuildListMessagesUrl(parameters);\n                case WelcomeMessageType.ListRules:\n                    return BuildListRulesUrl(parameters);\n                case WelcomeMessageType.ShowMessage:\n                    return BuildShowMessagesUrl(parameters);\n                case WelcomeMessageType.ShowRule:\n                    return BuildShowRuleUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\n                        $\"Didn't recognize '{Type}' for {nameof(Type)} parameter in WelcomeMessageRequestProcessor.BuildUrl.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct messages\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildListMessagesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/list.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(nameof(Count)))\n            {\n                Count = int.Parse(parameters[nameof(Count)]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Cursor)))\n            {\n                Cursor = parameters[nameof(Cursor)];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[nameof(Cursor)]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct messages\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildListRulesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/rules/list.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(nameof(Count)))\n            {\n                Count = int.Parse(parameters[nameof(Count)]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Cursor)))\n            {\n                Cursor = parameters[nameof(Cursor)];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[nameof(Cursor)]));\n            }\n\n            return req;\n        }\n\n        Request BuildShowMessagesUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(ID)))\n                throw new ArgumentNullException(nameof(ID), $\"{nameof(ID)} is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/show.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[nameof(ID)]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            return req;\n        }\n\n        Request BuildShowRuleUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(ID)))\n                throw new ArgumentNullException(nameof(ID), $\"{nameof(ID)} is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/rules/show.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[nameof(ID)]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of WelcomeMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson))\n                return new List<T>();\n\n            IEnumerable<WelcomeMessage> msgList;\n\n            switch (Type)\n            {\n                case WelcomeMessageType.ListMessages:\n                case WelcomeMessageType.ListRules:\n                case WelcomeMessageType.ShowMessage:\n                case WelcomeMessageType.ShowRule:\n                    msgList = HandleWelcomeMessage(responseJson);\n                    break;\n                default:\n                    msgList = new List<WelcomeMessage>();\n                    break;\n            }\n\n            return msgList.OfType<T>().ToList();\n        }\n\n        IEnumerable<WelcomeMessage> HandleWelcomeMessage(string msgJson)\n        {\n            WelcomeMessageValue welcomeMsg = JsonConvert.DeserializeObject<WelcomeMessageValue>(msgJson);\n\n            return new List<WelcomeMessage>\n            {\n                new WelcomeMessage\n                {\n                    Type = Type,\n                    Count = Count,\n                    Cursor = Cursor,\n                    ID = ID,\n                    Value = welcomeMsg\n                }\n            };\n        }\n\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var msg = new WelcomeMessage\n            {\n                Value = JsonConvert.DeserializeObject<WelcomeMessageValue>(responseJson ?? \"\")\n            };\n\n            return msg.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared/WelcomeMessages/WelcomeMessageType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of welcome message query\n    /// </summary>\n    public enum WelcomeMessageType\n    {\n        /// <summary>\n        /// All welcome messages\n        /// </summary>\n        ListMessages,\n\n        /// <summary>\n        /// All welcome message rules\n        /// </summary>\n        ListRules,\n\n        /// <summary>\n        /// A single welcome message\n        /// </summary>\n        ShowMessage,\n\n        /// <summary>\n        /// A single welcome message rule\n        /// </summary>\n        ShowRule\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.aspnet/AccountActivityExtensions.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace LinqToTwitter\n{\n    public static class AccountActivityExtensions\n    {\n        public static string BuildCrcResponse(this AccountActivity accAct, string crc_token, string consumerSecret)\n        {\n            byte[] keyBytes = Encoding.UTF8.GetBytes(consumerSecret);\n            byte[] crcBytes = Encoding.UTF8.GetBytes(crc_token);\n\n            var hmac = new HMACSHA256(keyBytes);\n            var hash = hmac.ComputeHash(crcBytes);\n            var base64Hmac = Convert.ToBase64String(hash);\n\n            return \"sha256=\" + base64Hmac;\n        }\n\n        public static bool IsValidPostSignature(this AccountActivity accAct, HttpRequestMessage request, string message, string consumerSecret)\n        {\n            string webhooksSignature =\n                request?.Headers\n                    ?.GetValues(\"x-twitter-webhooks-signature\")\n                    ?.First()\n                    ?.Replace(\"sha256=\", \"\");\n\n            if (webhooksSignature == null)\n                return false;\n\n            byte[] webhookSignatureByes = Convert.FromBase64String(webhooksSignature);\n\n            byte[] keyBytes = Encoding.UTF8.GetBytes(consumerSecret);\n            byte[] contentBytes = Encoding.UTF8.GetBytes(message);\n\n            var hmac = new HMACSHA256(keyBytes);\n            var contentHash = hmac.ComputeHash(contentBytes);\n\n            if (!SecureCompareEqual(webhookSignatureByes, contentHash))\n                return false;\n\n            return true;\n        }\n\n        /// <summary>\n        /// Avoid timing attack - see https://en.wikipedia.org/wiki/Timing_attack for more details.\n        /// </summary>\n        /// <param name=\"arrayA\">First byte[].</param>\n        /// <param name=\"arrayB\">Second byte[].</param>\n        /// <returns>True if both arrays are equal.</returns>\n        static bool SecureCompareEqual(byte[] arrayA, byte[] arrayB)\n        {\n            if (arrayA.Length != arrayB.Length)\n                return false;\n\n            int result = 0;\n            for (int i = 0; i < arrayA.Length; i++)\n                result |= (arrayA[i] ^ arrayB[i]);\n\n            return result == 0;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.aspnet/AspNetAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class AspNetAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public new Uri Callback { get; set; }\n\n        /// <summary>\n        /// This is a hook where you can assign\n        /// a lambda to perform the technology\n        /// specific redirection action.\n        /// \n        /// The string passed as the lambda paramter\n        /// is the Twitter authorization URL.\n        /// </summary>\n        public Action<string> GoToTwitterAuthorization { get; set; }\n\n        public AspNetAuthorizer()\n            : base(false, AuthAccessType.NoChange, null) { }\n\n        public AspNetAuthorizer(bool forceLogin)\n            : base(forceLogin, AuthAccessType.NoChange, null) { }\n\n        public AspNetAuthorizer(bool forceLogin, AuthAccessType accessType) \n            : base(forceLogin, accessType, null) { }\n\n        public AspNetAuthorizer(bool forceLogin, AuthAccessType accessType, string preFillScreenName)\n            : base(forceLogin, accessType, preFillScreenName) { }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        public Task AuthorizeAsync()\n        {\n            throw new InvalidOperationException(\n                \"For ASP.NET apps, you should use BeginAuthorization and CompleteAuthorization instead. Please visit the LINQ to Twitter documentation and samples for examples on how to do this.\");\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        public async Task BeginAuthorizeAsync()\n        {\n            await BeginAuthorizeAsync(Callback).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        /// <param name=\"callback\">This is where you want Twitter to redirect to after authorization</param>\n        public virtual async Task BeginAuthorizeAsync(Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials())\n                throw new InvalidOperationException(\n                    \"Your LINQ to Twitter Authorizer already has all credentials assigned to it. In this \" +\n                    \"case, You don't need to re-authorize because having the OAuthToken/AccessToken and \" +\n                    \"OAuthTokenSecret/AccessTokenSecret means that you already have the user's credentials \" +\n                    \"and re-authorization isn't required. If for some reason, these credentials are not \" +\n                    \"working (e.g. the user might have removed your app from their Twitter app list). Set the \" +\n                    \"OAuthToken/AccessToken and OAuthTokenSecret/AccessTokenSecret in the authorizer's credential \" +\n                    \"store to 'null' and then re-authorize. Tip: Call Authorizer.CredentialStore.HasAllCredentials() \" +\n                    \"to see if all of the credentials are already populated. Additionally, if you meant to authorize \" +\n                    \"for a different user, you can call Authorizer.CredentialStore.ClearAsync() to remove the \" +\n                    \"previous user's credentials. (just make sure you've re-loaded your consumerKey and consumerSecret).\");\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            string callbackString = callback.ToString();\n\n            if (parameters != null)\n            {\n                var paramsList = new List<string>();\n                foreach (var parm in parameters)\n                {\n                    Parameters.Add(parm);\n                    paramsList.Add($\"{parm.Key}={parm.Value}\");\n                }\n\n                string queryString = \"?\" +  string.Join(\"&\", paramsList);\n\n                OAuthRequestTokenUrl += queryString;\n                callbackString += queryString;\n            }\n\n            await GetRequestTokenAsync(callbackString).ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n        }\n\n        /// <summary>\n        /// After the user Authorizes the app, Twitter will \n        /// redirect to the responseUrl url, provided during \n        /// BeginAuthorization. When redirecting, Twitter will \n        /// also provide oauth_verifier and oauth_token \n        /// parameters. This method uses those parameters to \n        /// request an access token, which is used automatically\n        /// by LINQ to Twitter when executing queries.\n        /// </summary>\n        /// <param name=\"responseUrl\">\n        /// URL that Twitter redirected to after authorization.\n        /// We need this because it contains important parameters\n        /// we need to finish the OAuth process.\n        /// </param>\n        /// <returns>True if successful</returns>\n        public virtual async Task CompleteAuthorizeAsync(Uri responseUrl)\n        {\n            if (responseUrl == null)\n                throw new ArgumentNullException(\"responseUrl\", \"You must pass in the callback that Twitter returned after authentication.\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            string pin = ParseVerifierFromResponseUrl(responseUrl.ToString());\n\n            var accessTokenParams = new Dictionary<string, string>\n            {\n                { \"oauth_verifier\", pin }\n            };\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.aspnet/AspNetSignInAuthorizer.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class AspNetSignInAuthorizer : AspNetAuthorizer, IAuthorizer\n    {\n        public AspNetSignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.aspnet/LinqToTwitter.Shared.aspnet.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>4cdadc23-01e2-41eb-bbda-3c76e2582b50</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>LinqToTwitter.Shared.aspnet</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)AccountActivityExtensions.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)AspNetAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)AspNetSignInAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)MvcSignInAuthorizer.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.aspnet/LinqToTwitter.Shared.aspnet.shproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>4cdadc23-01e2-41eb-bbda-3c76e2582b50</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"LinqToTwitter.Shared.aspnet.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.aspnet/MvcSignInAuthorizer.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class MvcSignInAuthorizer : MvcAuthorizer, IAuthorizer\n    {\n        public MvcSignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Common/TwitterQueryException.cs",
    "content": "﻿using System;\nusing System.Net;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Use for errors returned from HTTP GET and POST to Twitter\n    /// </summary>\n    public class TwitterQueryException : InvalidQueryException\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public TwitterQueryException()\n            : this(\"Twitter returned an error from your query.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public TwitterQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public TwitterQueryException(string message, Exception inner)\n            : base(message, inner) { }\n\n        /// <summary>\n        /// Error code assigned by Twitter\n        /// </summary>\n        public int ErrorCode { get; set; }\n\n        /// <summary>\n        /// Http status code from Twitter response\n        /// </summary>\n        public HttpStatusCode StatusCode { get; set; }\n\n        /// <summary>\n        /// Http status reason from Twitter response\n        /// </summary>\n        public string ReasonPhrase { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/LinqToTwitter.Shared.net.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>37396599-8a5a-4ac5-b583-c49ec4e40781</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>LinqToTwitter.Shared.net</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterQueryException.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\GetMessageHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\PostMessageHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\TwitterErrorHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\TwitterExecute.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\Url.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\ApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\AuthorizerBase.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\IAuthorizer.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/LinqToTwitter.Shared.net.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>37396599-8a5a-4ac5-b583-c49ec4e40781</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"LinqToTwitter.Shared.net.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Net/GetMessageHandler.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class GetMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> parameters;\n        readonly string url;\n\n        public GetMessageHandler(TwitterExecute exe, IDictionary<string, string> parameters, string url)\n        {\n            this.exe = exe;\n            this.parameters = parameters;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(HttpMethod.Get.ToString(), url, parameters, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            if (SupportsAutomaticDecompression)\n                AutomaticDecompression = DecompressionMethods.GZip;\n            if (exe.Authorizer.Proxy != null && SupportsProxy)\n                Proxy = exe.Authorizer.Proxy;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Net/PostMessageHandler.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class PostMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> postData;\n        readonly string url;\n\n        public PostMessageHandler(TwitterExecute exe, IDictionary<string, string> postData, string url)\n        {\n            this.exe = exe;\n            this.postData = postData;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(request.Method.ToString(), url, postData, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            request.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true };\n\n            if (SupportsAutomaticDecompression)\n                AutomaticDecompression = DecompressionMethods.GZip;\n            if (exe.Authorizer.Proxy != null && SupportsProxy)\n                Proxy = exe.Authorizer.Proxy;\n\n            //if (exe.ReadWriteTimeout != 0)\n            //    ReadWriteTimeout = exe.ReadWriteTimeout;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Net/TwitterErrorHandler.cs",
    "content": "﻿using System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter.Net\n{\n    class TwitterErrorHandler\n    {\n        public static async Task ThrowIfErrorAsync(HttpResponseMessage msg)\n        {\n            const int TooManyRequests = 429;\n\n            // TODO: research proper handling of 304\n\n            if ((int)msg.StatusCode < 400) return;\n\n            switch (msg.StatusCode)\n            {\n                case HttpStatusCode.Unauthorized:\n                    await HandleUnauthorizedAsync(msg).ConfigureAwait(false);\n                    break;\n                default:\n                    switch ((int)msg.StatusCode)\n\t                {\n                        case TooManyRequests:\n                            await HandleTooManyRequestsAsync(msg).ConfigureAwait(false);\n                            break;\n\t\t                default:\n                            await HandleGenericErrorAsync(msg).ConfigureAwait(false);\n                            break;\n\t                }\n                    break;\n            } \n        }\n  \n        internal static async Task HandleGenericErrorAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            BuildAndThrowTwitterQueryException(responseStr, msg);\n        }\n \n        internal static async Task HandleTooManyRequestsAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.SeeOther,\n                ReasonPhrase = msg.ReasonPhrase + \" (HTTP 429 - Too Many Requests)\"\n            };\n        }\n \n        internal static void BuildAndThrowTwitterQueryException(string responseStr, HttpResponseMessage msg)\n        {\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            throw new TwitterQueryException(error.Message)\n            {\n                ErrorCode = error.Code,\n                StatusCode = msg.StatusCode,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n  \n        internal async static Task HandleUnauthorizedAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.Unauthorized,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n\n        internal static TwitterErrorDetails ParseTwitterErrorMessage(string responseStr)\n        {\n            if (responseStr.StartsWith(\"{\"))\n            {\n                JsonData responseJson = JsonMapper.ToObject(responseStr);\n\n                var errors = responseJson.GetValue<JsonData>(\"errors\");\n\n                if (errors != null)\n                {\n                    if (errors.GetJsonType() == JsonType.String)\n                        return new TwitterErrorDetails\n                        {\n                            Message = responseJson.GetValue<string>(\"errors\"),\n                            Code = -1\n                        };\n\n                    if (errors.Count > 0)\n                    {\n                        var error = errors[0];\n                        return new TwitterErrorDetails\n                        {\n                            Message = error.GetValue<string>(\"message\"),\n                            Code = error.GetValue<int>(\"code\")\n                        };\n                    }\n                }\n            }\n\n            return new TwitterErrorDetails { Message = responseStr };\n        }\n\n        internal class TwitterErrorDetails\n        {\n            public int Code { get; set; }\n            public string Message { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Net/TwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LinqToTwitter.Shared.Common;\nusing LitJson;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Logic that performs actual communication with Twitter\n    /// </summary>\n    internal partial class TwitterExecute : ITwitterExecute, IDisposable\n    {\n        internal const int DefaultReadWriteTimeout = 300000;\n        internal const int DefaultTimeout = 100000;\n\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        public IAuthorizer Authorizer { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        public int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        public int Timeout { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public Uri LastUrl { get; private set; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                return Authorizer.UserAgent;\n            }\n            set\n            {\n                Authorizer.UserAgent =\n                    string.IsNullOrWhiteSpace(value) ?\n                        Authorizer.UserAgent :\n                        value + \", \" + Authorizer.UserAgent;\n            }\n        }\n\n        /// <summary>\n        /// Assign your TextWriter instance to receive LINQ to Twitter output\n        /// </summary>\n        public static TextWriter Log { get; set; }\n\n        readonly object streamingCallbackLock = new object();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Func<StreamContent, Task> StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// HttpClient instance being used in a streaming operation\n        /// </summary>\n        internal HttpClient StreamingClient { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        public bool IsStreamClosed { get; internal set; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        public CancellationToken CancellationToken { get; set; }\n\n        readonly object asyncCallbackLock = new object();\n\n        /// <summary>\n        /// supports testing\n        /// </summary>\n        public TwitterExecute(IAuthorizer authorizer)\n        {\n            Authorizer = authorizer ?? throw new ArgumentNullException(\"authorizedClient\");\n            Authorizer.UserAgent = Authorizer.UserAgent ?? L2TKeys.DefaultUserAgent;\n        }\n\n        /// <summary>\n        /// Used in queries to read information from Twitter API endpoints.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Respose from Twitter</returns>\n        public async Task<string> QueryTwitterAsync<T>(Request request, IRequestProcessor<T> reqProc)\n        {\n            WriteLog(request.FullUrl, nameof(QueryTwitterAsync));\n\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            var handler = new GetMessageHandler(this, parms, request.FullUrl);\n\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                var msg = await client.SendAsync(req, CancellationToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n  \n        internal void SetAuthorizationHeader(string method, string url, IDictionary<string, string> parms, HttpRequestMessage req)\n        {\n            var authStringParms = parms.ToDictionary(parm => parm.Key, elm => elm.Value);\n            authStringParms.Add(\"oauth_consumer_key\", Authorizer.CredentialStore.ConsumerKey);\n            authStringParms.Add(\"oauth_token\", Authorizer.CredentialStore.OAuthToken);\n\n            string authorizationString = Authorizer.GetAuthorizationString(method, url, authStringParms);\n\n            req.Headers.Add(\"Authorization\", authorizationString);\n        }\n\n        /// <summary>\n        /// Performs a query on the Twitter Stream.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters.</param>\n        /// <returns>\n        /// Caller expects an JSON formatted string response, but\n        /// real response(s) with streams is fed to the callback.\n        /// </returns>\n        public async Task<string> QueryTwitterStreamAsync(Request request)\n        {\n            WriteLog(request.FullUrl, nameof(QueryTwitterStreamAsync));\n\n            var handler = new HttpClientHandler();\n            if (Authorizer.Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Authorizer.Proxy;\n\n            using (StreamingClient = new HttpClient(handler))\n            {\n                StreamingClient.Timeout = TimeSpan.FromMilliseconds(System.Threading.Timeout.Infinite);\n\n                var httpRequest = ConfigureRequest(request);\n\n                var response = await StreamingClient.SendAsync(\n                    httpRequest, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(response).ConfigureAwait(false);\n\n                Stream stream = await CreateStream(response).ConfigureAwait(false);\n\n                const int CarriageReturn = 0x0D;\n                const int LineFeed = 0x0A;\n\n                var memStr = new MemoryStream();\n                byte[] readByte;\n\n                while (stream.CanRead && !IsStreamClosed)\n                {\n                    readByte = new byte[1];\n                    await stream.ReadAsync(readByte, 0, 1, CancellationToken).ConfigureAwait(false);\n                    byte nextByte = readByte.SingleOrDefault();\n\n                    CancellationToken.ThrowIfCancellationRequested();\n\n                    if (IsStreamClosed) break;\n\n                    if (nextByte == 0xff) break;\n\n                    if (nextByte != CarriageReturn && nextByte != LineFeed)\n                        memStr.WriteByte(nextByte);\n\n                    if (nextByte == LineFeed)\n                    {\n                        int byteCount = (int)memStr.Length;\n                        byte[] tweetBytes = new byte[byteCount];\n\n                        memStr.Position = 0;\n                        await memStr.ReadAsync(tweetBytes, 0, byteCount, CancellationToken).ConfigureAwait(false);\n\n                        string tweet = Encoding.UTF8.GetString(tweetBytes, 0, byteCount);\n                        var strmContent = new StreamContent(this, tweet);\n\n                        await StreamingCallbackAsync(strmContent).ConfigureAwait(false);\n\n                        memStr.Dispose();\n                        memStr = new MemoryStream();\n                    }\n                }\n            }\n\n            IsStreamClosed = false;\n\n            return \"{}\";\n        }\n \n        HttpRequestMessage ConfigureRequest(Request request)\n        {\n            var httpRequest = new HttpRequestMessage(HttpMethod.Post, request.Endpoint);\n\n            var parameters =\n                string.Join(\"&\",\n                    (from parm in request.RequestParameters\n                     select parm.Name + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());                            \n            var content = new StringContent(parameters, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            httpRequest.Content = content;\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            SetAuthorizationHeader(HttpMethod.Post.ToString(), request.FullUrl, parms, httpRequest);\n            httpRequest.Headers.Add(\"User-Agent\", UserAgent);\n            httpRequest.Headers.ExpectContinue = false;\n\n            if (Authorizer.SupportsCompression)\n                httpRequest.Headers.AcceptEncoding.TryParseAdd(\"gzip\");\n\n            return httpRequest;\n        }\n \n        async Task<Stream> CreateStream(HttpResponseMessage response)\n        {\n            var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);\n\n            if (Authorizer.SupportsCompression)\n                return new GZipStream(stream, CompressionMode.Decompress);\n            else\n                return stream;\n        }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        public void CloseStream()\n        {\n            IsStreamClosed = true;\n\n            if (StreamingClient != null)\n                StreamingClient.CancelPendingRequests();\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostImageAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostImageAsync));\n\n            var multiPartContent = new MultipartFormDataContent();\n            var byteArrayContent = new ByteArrayContent(data);\n            byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n            multiPartContent.Add(byteArrayContent, name, fileName);\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    cleanPostData.Add(pair.Key, pair.Value);\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n                }\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, and tweet_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Cancellation token</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostMediaAsync));\n\n            ulong mediaID = await InitAsync(url, data, postData, contentType, mediaCategory, shared, cancelToken).ConfigureAwait(false);\n\n            await AppendChunksAsync(url, mediaID, data, name, fileName, contentType, cancelToken).ConfigureAwait(false);\n\n            return await FinalizeAsync(url, mediaID, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<ulong> InitAsync(string url, byte[] data, IDictionary<string, string> postData, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            var multiPartContent = new MultipartFormDataContent\n            {\n                { new StringContent(\"INIT\"), \"command\" },\n                { new StringContent(contentType), \"media_type\" }\n            };\n            if (!string.IsNullOrWhiteSpace(mediaCategory))\n                multiPartContent.Add(new StringContent(mediaCategory), \"media_category\");\n            if (shared)\n                multiPartContent.Add(new StringContent(\"true\"), \"shared\");\n            multiPartContent.Add(new StringContent(data.Length.ToString()), \"total_bytes\");\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                string response = await HandleResponseAsync(msg).ConfigureAwait(false);\n\n                var media = JsonMapper.ToObject(response);\n                var mediaID = media.GetValue<ulong>(\"media_id\");\n                return mediaID;\n            }\n        }\n\n        async Task AppendChunksAsync(string url, ulong mediaID, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            const int ChunkSize = 5000000;\n\n            for (\n                int segmentIndex = 0, skip = 0; \n                skip < data.Length; \n                segmentIndex++, skip = segmentIndex * ChunkSize)\n            {\n                byte[] chunk = data.Skip(skip).Take(ChunkSize).ToArray();\n\n                var multiPartContent = new MultipartFormDataContent();\n\n                var byteArrayContent = new ByteArrayContent(chunk);\n                byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n                multiPartContent.Add(byteArrayContent, name, fileName);\n\n                multiPartContent.Add(new StringContent(\"APPEND\"), \"command\");\n                multiPartContent.Add(new StringContent(mediaID.ToString()), \"media_id\");\n                multiPartContent.Add(new StringContent(segmentIndex.ToString()), \"segment_index\");\n\n                var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n                using (var client = new HttpClient(handler))\n                {\n                    if (Timeout != 0)\n                        client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                    HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                    await HandleResponseAsync(msg).ConfigureAwait(false);\n                } \n            }\n        }\n\n        async Task<string> FinalizeAsync(string url, ulong mediaID, CancellationToken cancelToken)\n        {\n            var multiPartContent = new MultipartFormDataContent\n            {\n                { new StringContent(\"FINALIZE\"), \"command\" },\n                { new StringContent(mediaID.ToString()), \"media_id\" }\n            };\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// Performs HTTP POST, with JSON payload, to Twitter.\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request.</param>\n        /// <param name=\"postData\">URL parameters to post.</param>\n        /// <param name=\"postObj\">Serializable payload object.</param>\n        /// <param name=\"getResult\">Callback for handling async Json response - null if synchronous.</param>\n        /// <returns>JSON Response from Twitter - empty string if async.</returns>\n        public async Task<string> SendJsonToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, T postObj, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(SendJsonToTwitterAsync));\n\n            var postJson = postObj == null ? \"\" : JsonConvert.SerializeObject(postObj, new DefaultJsonSerializer());\n            var content = new StringContent(postJson, Encoding.UTF8, \"application/json\");\n\n            var cleanPostData = new Dictionary<string, string>();\n            foreach (var pair in postData)\n                if (pair.Value != null)\n                    cleanPostData.Add(pair.Key, pair.Value);\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg;\n\n                if (method == HttpMethod.Post.ToString())\n                    msg = await client.PostAsync(url, content).ConfigureAwait(false);\n                else if (method == HttpMethod.Delete.ToString())\n                    msg = await client.DeleteAsync(url).ConfigureAwait(false);\n                else\n                    msg = await client.PutAsync(url, content).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        public async Task<string> PostFormUrlEncodedToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostFormUrlEncodedToTwitterAsync));\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            var dataString = new StringBuilder();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    dataString.AppendFormat(\"{0}={1}&\", pair.Key, Url.PercentEncode(pair.Value));\n                    cleanPostData.Add(pair.Key, pair.Value);\n                }\n            }\n\n            var content = new StringContent(dataString.ToString().TrimEnd('&'), Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg;\n                if (method == HttpMethod.Delete.ToString())\n                    msg = await client.DeleteAsync(url).ConfigureAwait(false);\n                else\n                    msg = await client.PostAsync(url, content).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n  \n        async Task<string> HandleResponseAsync(HttpResponseMessage msg)\n        {\n            LastUrl = msg.RequestMessage.RequestUri;\n\n            ResponseHeaders =\n                (from header in msg.Headers\n                 select new\n                 {\n                     header.Key,\n                     Value = string.Join(\", \", header.Value)\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        void WriteLog(string content, string currentMethod)\n        {\n            if (Log != null)\n            {\n                Log.WriteLine(\"--Log Starts Here--\");\n                Log.WriteLine(\"Query:\" + content);\n                Log.WriteLine(\"Method:\" + currentMethod);\n                Log.WriteLine(\"--Log Ends Here--\");\n                Log.Flush();\n            }\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                StreamingCallbackAsync = null;\n\n                if (Log != null)\n                {\n                    Log.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Net/Url.cs",
    "content": "﻿using System;\nusing System.Text;\n\nnamespace LinqToTwitter.Net\n{\n    public class Url\n    {\n        /// <summary>\n        /// Implements Percent Encoding according to RFC 3986\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>Encoded string</returns>\n        public static string PercentEncode(string value, bool isParam = true)\n        {\n            const string IsParamReservedChars = @\"`!@#$^&*+=,:;'?/|\\[] \";\n            const string NoParamReservedChars = @\"`!@#$^&*()+=,:;'?/|\\[] \";\n\n            var result = new StringBuilder();\n\n            if (string.IsNullOrWhiteSpace(value))\n                return string.Empty;\n\n            var escapedValue = EncodeDataString(value);\n\n            var reservedChars = isParam ? IsParamReservedChars : NoParamReservedChars;\n\n            // Windows Phone doesn't escape all the ReservedChars properly, so we have to do it manually.\n            foreach (char symbol in escapedValue)\n            {\n                if (reservedChars.IndexOf(symbol) != -1)\n                {\n                    result.Append('%' + String.Format(\"{0:X2}\", (int)symbol).ToUpper());\n                }\n                else\n                {\n                    result.Append(symbol);\n                }\n            }\n\n            return result.ToString();\n        }\n\n        /// <summary>\n        /// URL-encode a string of any length.\n        /// </summary>\n        private static string EncodeDataString(string data)\n        {\n            // the max length in .NET 4.5+ is 65520\n            const int maxLength = 65519;\n\n            if (data.Length <= maxLength)\n            {\n                return Uri.EscapeDataString(data);\n            }\n\n            var totalChunks = data.Length / maxLength;\n\n            var builder = new StringBuilder();\n            for (var i = 0; i <= totalChunks; i++)\n            {\n\t            var chunk = i < totalChunks ? data.Substring(maxLength * i, maxLength) : data.Substring(maxLength * i);\n\n                // Uri.EscapeDataString is sufficient for percent-encoding. no need for Uri.EscapeUriString.\n                // https://stackoverflow.com/questions/4396598/whats-the-difference-between-escapeuristring-and-escapedatastring/#34189188\n                builder.Append(Uri.EscapeDataString(chunk));\n            }\n            return builder.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Security/ApplicationOnlyAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class ApplicationOnlyAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public string BasicToken { get; set; }\n        public string BearerToken { get; set; }\n        public string OAuth2Token { get; set; }\n        public string OAuth2InvalidateToken { get; set; }\n\n        public ApplicationOnlyAuthorizer()\n        {\n            OAuth2Token = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateToken = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public async Task AuthorizeAsync()\n        {\n            EncodeCredentials();\n            await GetBearerTokenAsync().ConfigureAwait(false);\n        }\n\n        public async Task InvalidateAsync()\n        {\n            EncodeCredentials();\n\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2InvalidateToken);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"access_token=\" + BearerToken, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n                string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n  \n        async Task GetBearerTokenAsync()\n        {\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2Token);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"grant_type=client_credentials\", Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n                string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n\n        internal void EncodeCredentials()\n        {\n            string encodedConsumerKey = Url.PercentEncode(CredentialStore.ConsumerKey);\n            string encodedConsumerSecret = Url.PercentEncode(CredentialStore.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n        public override string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            return \"Bearer \" + BearerToken;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Security/AuthorizerBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Security;\nusing LinqToTwitter.Net;\nusing System.Text;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class AuthorizerBase\n    {\n        /// <summary>\n        /// URL for OAuth Request Tokens\n        /// </summary>\n        public string OAuthRequestTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth authorization\n        /// </summary>\n        public string OAuthAuthorizeUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth Access Tokens\n        /// </summary>\n        public string OAuthAccessTokenUrl { get; set; }\n\n        /// <summary>\n        /// Get/Set Credentials\n        /// </summary>\n        public ICredentialStore CredentialStore { get; set; }\n\n        /// <summary>\n        /// Force the user to enter their name/password when authorizing\n        /// </summary>\n        public bool ForceLogin { get; set; }\n\n        /// <summary>\n        /// Overrides read/write settings for application registered with Twitter\n        /// </summary>\n        public AuthAccessType AccessType { get; set; }\n\n        /// <summary>\n        /// Optional name to prefill when user visits the Twitter authorization screen\n        /// </summary>\n        public string PreFillScreenName { get; set; }\n\n        /// <summary>\n        /// User-Agent header string sent to Twitter to represent your application. Defaults to LINQ to Twitter.\n        /// </summary>\n        public string UserAgent { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app.\n        /// </summary>\n        public string Callback { get; set; }\n\n        public IWebProxy Proxy { get; set; }\n\n        public bool SupportsCompression { get; set; }\n\n        protected string ParseVerifierFromResponseUrl(string responseUrl)\n        {\n            string[] keyValPairs = new Uri(responseUrl).Query.TrimStart('?').Split('&');\n\n            string verifier =\n                (from keyValPair in keyValPairs\n                 let pair = keyValPair.Split('=')\n                 let key = pair[0]\n                 let val = pair.Length == 2 ? pair[1] : string.Empty\n                 where key == \"oauth_verifier\"\n                 select val)\n                .SingleOrDefault();\n\n            return verifier;\n        }\n\n        IDictionary<string, string> parameters;\n        public IDictionary<string, string> Parameters\n        {\n            get \n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    parameters.Add(\"oauth_consumer_key\", CredentialStore.ConsumerKey);\n                    parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n                }\n\n                return parameters; \n            }\n        }\n\n        public AuthorizerBase() : this(false, AuthAccessType.NoChange, string.Empty) { }\n\n        public AuthorizerBase(bool forceLogin, AuthAccessType accessType, string prefillScreenName)\n        {\n            ForceLogin = forceLogin;\n            AccessType = accessType;\n            PreFillScreenName = prefillScreenName;\n            SupportsCompression = true;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n\n            OAuthRequestTokenUrl = \"https://api.twitter.com/oauth/request_token\";\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authorize\";\n            OAuthAccessTokenUrl = \"https://api.twitter.com/oauth/access_token\";\n        }\n\n        public async Task GetRequestTokenAsync(string callback)\n        {\n            if (string.IsNullOrWhiteSpace(callback))\n                throw new ArgumentNullException(\"callback\", \"callback is required.\");\n\n            Parameters.Add(\"oauth_callback\", EncodeToProtectMultiByteCharUrls(callback));\n            Parameters.Remove(\"oauth_token\");\n\n            if (AccessType != AuthAccessType.NoChange)\n                Parameters.Add(\"x_auth_access_type\", AccessType.ToString().ToLower());\n\n            string response = await HttpGetAsync(OAuthRequestTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to request token response from Twitter.\");\n\n            UpdateCredentialsFromRequestTokenResponse(response);\n        }\n  \n        string EncodeToProtectMultiByteCharUrls(string callback)\n        {\n            return callback == \"oob\" ? \"oob\" : new Uri(callback).AbsoluteUri;\n        }\n\n        public string PrepareAuthorizeUrl(bool forceLogin)\n        {\n            if (CredentialStore.OAuthToken == null)\n                throw new InvalidOperationException(\"OAuthToken not set. Call GetRequestTokenAsync first and verify that OAuthToken is set.\");\n\n            string forceLoginParamString = forceLogin ? \"&force_login=true\" : \"\";\n\n            string preFillScreenNameParamString = \n                !string.IsNullOrWhiteSpace(PreFillScreenName) ? \"&screen_name=\" + PreFillScreenName : \"\";\n\n            return string.Format(\n                \"{0}?oauth_token={1}{2}{3}\", \n                OAuthAuthorizeUrl, CredentialStore.OAuthToken, \n                forceLoginParamString, preFillScreenNameParamString);\n        }\n\n        public async Task GetAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpGetAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n            \n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        public async Task PostAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"x_auth_mode\") && !accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required, unless using xAuth.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpPostAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n\n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        void UpdateCredentialsFromRequestTokenResponse(string response)\n        {\n            CredentialStore.OAuthToken =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 where pair[0] == \"oauth_token\"\n                 select pair[1])\n                .SingleOrDefault();\n\n            Parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n        }\n\n        void UpdateCredentialsWithAccessTokenResponse(string response)\n        {\n            var responseParams =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 select new\n                 {\n                     Key = pair[0],\n                     Value = pair[1]\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            if (responseParams[\"oauth_token\"] != null)\n                CredentialStore.OAuthToken = responseParams[\"oauth_token\"];\n\n            if (responseParams[\"oauth_token_secret\"] != null)\n                CredentialStore.OAuthTokenSecret = responseParams[\"oauth_token_secret\"];\n\n            if (responseParams[\"screen_name\"] != null)\n                CredentialStore.ScreenName = responseParams[\"screen_name\"];\n\n            if (responseParams[\"user_id\"] != null)\n            {\n                ulong userID = 0;\n                ulong.TryParse(responseParams[\"user_id\"], out userID);\n                CredentialStore.UserID = userID;\n            }\n        }\n\n        internal async Task<string> HttpGetAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var req = new HttpRequestMessage(HttpMethod.Get, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Get.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        internal async Task<string> HttpPostAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var postData =\n                (from keyValPair in parameters\n                 where !keyValPair.Key.StartsWith(\"oauth\")\n                 select keyValPair)\n                .ToDictionary(pair => pair.Key, pair => pair.Value);\n\n            var req = new HttpRequestMessage(HttpMethod.Post, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Post.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var paramString =\n                string.Join(\"&\",\n                    (from parm in postData\n                     select parm.Key + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());\n            var content = new StringContent(paramString, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            req.Content = content;\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n \n        public virtual string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            string consumerSecret = CredentialStore.ConsumerSecret ?? \"\";\n            string oAuthTokenSecret = CredentialStore.OAuthTokenSecret ?? \"\";\n            string authorizationString =\n                new OAuth().GetAuthorizationString(\n                    method, oauthUrl, parameters, consumerSecret, oAuthTokenSecret);\n            return authorizationString;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.net/Security/IAuthorizer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public interface IAuthorizer\n    {\n        Task AuthorizeAsync();\n\n        string UserAgent { get; set; }\n\n        ICredentialStore CredentialStore { get; set; }\n\n        IWebProxy Proxy { get; set; }\n\n        bool SupportsCompression { get; set; }\n\n        string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Common/TwitterQueryException.cs",
    "content": "﻿using System;\nusing Windows.Web.Http;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Use for errors returned from HTTP GET and POST to Twitter\n    /// </summary>\n    public class TwitterQueryException : InvalidQueryException\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public TwitterQueryException()\n            : this(\"Twitter returned an error from your query.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public TwitterQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public TwitterQueryException(string message, Exception inner)\n            : base(message, inner) { }\n\n        /// <summary>\n        /// Error code assigned by Twitter\n        /// </summary>\n        public int ErrorCode { get; set; }\n\n        /// <summary>\n        /// Http status code from Twitter response\n        /// </summary>\n        public HttpStatusCode StatusCode { get; set; }\n\n        /// <summary>\n        /// Http status reason from Twitter response\n        /// </summary>\n        public string ReasonPhrase { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/LinqToTwitter.Shared.uap.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>0936a109-c6b5-4527-89a9-966e8e6c9e26</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>LinqToTwitter.Shared.uap</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterQueryException.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\GetMessageFilter.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\PostMessageFilter.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\TwitterErrorHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\TwitterExecute.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\Url.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\ApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\AuthorizerBase.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\IAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\UniversalAuthorizer.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/LinqToTwitter.Shared.uap.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>0936a109-c6b5-4527-89a9-966e8e6c9e26</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"LinqToTwitter.Shared.uap.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Net/GetMessageFilter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing System.Threading;\nusing Windows.Foundation;\nusing Windows.Web.Http;\nusing Windows.Web.Http.Filters;\n\nnamespace LinqToTwitter.Net\n{\n    class GetMessageFilter : IHttpFilter\n    {\n        readonly CancellationToken cancellationToken;\n        readonly IHttpFilter innerFilter;\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> parameters;\n        readonly string url;\n\n        public GetMessageFilter(TwitterExecute exe, IDictionary<string, string> parameters, string url, IHttpFilter innerFilter, CancellationToken cancellationToken)\n        {\n            this.exe = exe;\n            this.parameters = parameters;\n            this.url = url;\n\n            if (innerFilter == null)\n            {\n                throw new ArgumentException(\"innerFilter cannot be null.\");\n            }\n            this.innerFilter = innerFilter;\n            this.cancellationToken = cancellationToken;\n        }\n\n        public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request)\n        {\n            return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>\n            {\n                cancellationToken = this.cancellationToken;\n\n                exe.SetAuthorizationHeader(HttpMethod.Get, url, parameters, request);\n                request.Headers.Add(\"User-Agent\", exe.UserAgent);\n                request.Headers.Add(\"Expect\", \"100-continue\");\n                request.Headers.Add(\"Accept-Encoding\", \"gzip\");\n\n                cancellationToken.ThrowIfCancellationRequested();\n\n                return await innerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress);\n            });\n        }\n\n        private bool disposedValue = false;\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!disposedValue)\n            {\n                if (disposing)\n                {\n                }\n\n                disposedValue = true;\n            }\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Net/PostMessageFilter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing System.Threading;\nusing Windows.Foundation;\nusing Windows.Web.Http;\nusing Windows.Web.Http.Filters;\n\nnamespace LinqToTwitter.Net\n{\n    class PostMessageFilter : IHttpFilter\n    {\n        readonly CancellationToken cancellationToken;\n        readonly IHttpFilter innerFilter;\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> parameters;\n        readonly string url;\n\n        public PostMessageFilter(TwitterExecute exe, IDictionary<string, string> parameters, string url, IHttpFilter innerFilter, CancellationToken cancellationToken)\n        {\n            this.exe = exe;\n            this.parameters = parameters;\n            this.url = url;\n\n            if (innerFilter == null)\n            {\n                throw new ArgumentException(\"innerFilter cannot be null.\");\n            }\n            this.innerFilter = innerFilter;\n            this.cancellationToken = cancellationToken;\n        }\n\n        public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request)\n        {\n            return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>\n            {\n                cancellationToken = this.cancellationToken;\n\n                exe.SetAuthorizationHeader(HttpMethod.Post, url, parameters, request);\n                request.Headers.Add(\"User-Agent\", exe.UserAgent);\n                request.Headers.Add(\"Expect\", \"100-continue\");\n                request.Headers.Add(\"Accept-Encoding\", \"gzip\");\n                request.Headers.Add(\"Cache-Control\", \"no-cache\");\n\n                cancellationToken.ThrowIfCancellationRequested();\n\n                return await innerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress);\n            });\n        }\n\n        private bool disposedValue = false;\n\n        protected virtual void Dispose(bool disposing)\n        {\n            if (!disposedValue)\n            {\n                if (disposing)\n                {\n                }\n\n                disposedValue = true;\n            }\n        }\n\n        public void Dispose()\n        {\n            Dispose(true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Net/TwitterErrorHandler.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing Windows.Web.Http;\n\nnamespace LinqToTwitter\n{\n    class TwitterErrorHandler\n    {\n        public static async Task ThrowIfErrorAsync(HttpResponseMessage msg)\n        {\n            const int TooManyRequests = 429;\n\n            // TODO: research proper handling of 304\n\n            if ((int)msg.StatusCode < 400) return;\n\n            switch (msg.StatusCode)\n            {\n                case HttpStatusCode.Unauthorized:\n                    await HandleUnauthorizedAsync(msg).ConfigureAwait(false);\n                    break;\n                default:\n                    switch ((int)msg.StatusCode)\n\t                {\n                        case TooManyRequests:\n                            await HandleTooManyRequestsAsync(msg).ConfigureAwait(false);\n                            break;\n\t\t                default:\n                            await HandleGenericErrorAsync(msg).ConfigureAwait(false);\n                            break;\n\t                }\n                    break;\n            } \n        }\n  \n        internal static async Task HandleGenericErrorAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync();\n\n            BuildAndThrowTwitterQueryException(responseStr, msg);\n        }\n \n        internal static async Task HandleTooManyRequestsAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync();\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.SeeOther,\n                ReasonPhrase = msg.ReasonPhrase + \" (HTTP 429 - Too Many Requests)\"\n            };\n        }\n \n        internal static void BuildAndThrowTwitterQueryException(string responseStr, HttpResponseMessage msg)\n        {\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            throw new TwitterQueryException(error.Message)\n            {\n                ErrorCode = error.Code,\n                StatusCode = msg.StatusCode,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n  \n        internal async static Task HandleUnauthorizedAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync();\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.Unauthorized,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n\n        internal static TwitterErrorDetails ParseTwitterErrorMessage(string responseStr)\n        {\n            if (responseStr.StartsWith(\"{\"))\n            {\n                JsonData responseJson = JsonMapper.ToObject(responseStr);\n\n                var errors = responseJson.GetValue<JsonData>(\"errors\");\n\n                if (errors != null)\n                {\n                    if (errors.GetJsonType() == JsonType.String)\n                        return new TwitterErrorDetails\n                        {\n                            Message = responseJson.GetValue<string>(\"errors\"),\n                            Code = -1\n                        };\n\n                    if (errors.Count > 0)\n                    {\n                        var error = errors[0];\n                        return new TwitterErrorDetails\n                        {\n                            Message = error.GetValue<string>(\"message\"),\n                            Code = error.GetValue<int>(\"code\")\n                        };\n                    }\n                }\n            }\n\n            return new TwitterErrorDetails { Message = responseStr };\n        }\n\n        internal class TwitterErrorDetails\n        {\n            public int Code { get; set; }\n            public string Message { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Net/TwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Windows.Web.Http;\nusing LinqToTwitter.Net;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Web.Http.Filters;\nusing Windows.Web.Http.Headers;\nusing LinqToTwitter.Common;\nusing LitJson;\nusing Newtonsoft.Json;\nusing LinqToTwitter.Shared.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Logic that performs HTTP communication with Twitter\n    /// </summary>\n    internal partial class TwitterExecute : ITwitterExecute, IDisposable\n    {\n        internal const int DefaultReadWriteTimeout = 300000;\n        internal const int DefaultTimeout = 100000;\n\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        public IAuthorizer Authorizer { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        public int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        public int Timeout { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public Uri LastUrl { get; private set; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                return Authorizer.UserAgent;\n            }\n            set\n            {\n                Authorizer.UserAgent =\n                    string.IsNullOrWhiteSpace(value) ?\n                        Authorizer.UserAgent :\n                        value + \", \" + Authorizer.UserAgent;\n            }\n        }\n\n        /// <summary>\n        /// Assign your TextWriter instance to receive LINQ to Twitter output\n        /// </summary>\n        public static TextWriter Log { get; set; }\n\n        readonly object streamingCallbackLock = new object();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Func<StreamContent, Task> StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// HttpClient instance being used in a streaming operation\n        /// </summary>\n        internal HttpClient StreamingClient { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        public bool IsStreamClosed { get; internal set; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        public CancellationToken CancellationToken { get; set; }\n\n        readonly object asyncCallbackLock = new object();\n\n        /// <summary>\n        /// supports testing\n        /// </summary>\n        public TwitterExecute(IAuthorizer authorizer)\n        {\n            if (authorizer == null)\n                throw new ArgumentNullException(\"authorizedClient\");\n\n            Authorizer = authorizer;\n            Authorizer.UserAgent = Authorizer.UserAgent ?? L2TKeys.DefaultUserAgent;\n        }\n\n        /// <summary>\n        /// Used in queries to read information from Twitter API endpoints.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>Respose from Twitter</returns>\n        public async Task<string> QueryTwitterAsync<T>(Request request, IRequestProcessor<T> reqProc)\n        {\n            WriteLog(request.FullUrl, \"QueryTwitterAsync\");\n\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            var baseFilter = new HttpBaseProtocolFilter();\n\n            var handler = new GetMessageFilter(this, parms, request.FullUrl, baseFilter, CancellationToken);\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendRequestAsync(req);\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// This sets the OAuth header, which Twitter required on every request.\n        /// </summary>\n        /// <param name=\"method\">HTTP Method.</param>\n        /// <param name=\"url\">Query url.</param>\n        /// <param name=\"parms\">Query parameters.</param>\n        /// <param name=\"req\">HttpRequestMessage for making the HTTP call.</param>\n        internal void SetAuthorizationHeader(HttpMethod method, string url, IDictionary<string, string> parms, HttpRequestMessage req)\n        {\n            var authStringParms = parms.ToDictionary(parm => parm.Key, elm => elm.Value);\n            authStringParms.Add(\"oauth_consumer_key\", Authorizer.CredentialStore.ConsumerKey);\n            authStringParms.Add(\"oauth_token\", Authorizer.CredentialStore.OAuthToken);\n\n            string authorizationString = Authorizer.GetAuthorizationString(method.ToString(), url, authStringParms);\n\n            int endOfScheme = authorizationString.IndexOf(' ');\n            string scheme = authorizationString.Substring(0, endOfScheme).Trim();\n            string authStringMinusScheme = authorizationString.Substring(endOfScheme + 1);\n            req.Headers.Authorization = new HttpCredentialsHeaderValue(scheme, authStringMinusScheme);\n        }\n\n        /// <summary>\n        /// Performs a query on the Twitter Stream.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters.</param>\n        /// <returns>\n        /// Caller expects an JSON formatted string response, but\n        /// real response(s) with streams is fed to the callback.\n        /// </returns>\n        public async Task<string> QueryTwitterStreamAsync(Request request)\n        {\n            const int CarriageReturn = 0x0D;\n            const int LineFeed = 0x0A;\n            const int EndOfStream = 0xFF;\n\n            WriteLog(request.FullUrl, \"QueryTwitterStreamAsync\");\n\n            IDictionary<string, string> reqParams =\n                request.RequestParameters.ToDictionary(key => key.Name, val => val.Value);\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = Authorizer.SupportsCompression,\n                ProxyCredential = Authorizer.ProxyCredential,\n                UseProxy = Authorizer.UseProxy\n            };\n\n            var streamFilter = new GetMessageFilter(this, reqParams, request.FullUrl, baseFilter, CancellationToken);\n\n            using (StreamingClient = new HttpClient(streamFilter))\n            {\n                var httpRequest = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n                var response = await StreamingClient.SendRequestAsync(\n                    httpRequest, HttpCompletionOption.ResponseHeadersRead);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(response).ConfigureAwait(false);\n\n                var inputStream = await response.Content.ReadAsInputStreamAsync();\n                Stream stream = inputStream.AsStreamForRead();\n\n                var memStr = new MemoryStream();\n                byte[] readByte;\n\n                while (stream.CanRead && !IsStreamClosed)\n                {\n                    readByte = new byte[1];\n                    await stream.ReadAsync(readByte, 0, 1, CancellationToken).ConfigureAwait(false);\n                    byte nextByte = readByte.SingleOrDefault();\n\n                    CancellationToken.ThrowIfCancellationRequested();\n\n                    if (IsStreamClosed) break;\n\n                    // TODO: review end-of-stream protocol\n                    if (nextByte == EndOfStream) break;\n\n                    if (nextByte != CarriageReturn && nextByte != LineFeed)\n                        memStr.WriteByte(nextByte);\n\n                    if (nextByte == LineFeed)\n                    {\n                        int byteCount = (int)memStr.Length;\n                        byte[] tweetBytes = new byte[byteCount];\n\n                        memStr.Position = 0;\n                        await memStr.ReadAsync(tweetBytes, 0, byteCount, CancellationToken).ConfigureAwait(false);\n\n                        string tweet = Encoding.UTF8.GetString(tweetBytes, 0, byteCount);\n                        var strmContent = new StreamContent(this, tweet);\n\n                        await StreamingCallbackAsync(strmContent).ConfigureAwait(false);\n\n                        memStr.Dispose();\n                        memStr = new MemoryStream();\n                    }\n                }\n            }\n\n            IsStreamClosed = false;\n\n            return \"{}\";\n        }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        public void CloseStream()\n        {\n            IsStreamClosed = true;\n\n            if (StreamingClient != null)\n                StreamingClient.Dispose();\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostImageAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostImageAsync));\n\n            var multiPartContent = new HttpMultipartFormDataContent();\n            var byteArrayContent = new HttpBufferContent(data.AsBuffer());\n            byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n            multiPartContent.Add(byteArrayContent, name, fileName);\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    cleanPostData.Add(pair.Key, pair.Value);\n                    multiPartContent.Add(new HttpStringContent(pair.Value), pair.Key);\n                }\n            }\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = Authorizer.SupportsCompression,\n                ProxyCredential = Authorizer.ProxyCredential,\n                UseProxy = Authorizer.UseProxy\n            };\n            var handler = new PostMessageFilter(this, new Dictionary<string, string>(), url, baseFilter, cancelToken);\n            var client = new HttpClient(handler);\n\n            HttpResponseMessage msg = await client.PostAsync(new Uri(url), multiPartContent);\n\n            return await HandleResponseAsync(msg);\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, and tweet_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Cancellation token</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            WriteLog(url, \"PostMediaAsync\");\n\n            ulong mediaID = await InitAsync(url, data, postData, name, fileName, contentType, mediaCategory, shared, cancelToken);\n\n            await AppendChunksAsync(url, mediaID, data, name, fileName, contentType, cancelToken);\n\n            return await FinalizeAsync(url, mediaID, cancelToken);\n        }\n\n        async Task<ulong> InitAsync(string url, byte[] data, IDictionary<string, string> postData, string name, string fileName, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            var multiPartContent = new HttpMultipartFormDataContent();\n\n            multiPartContent.Add(new HttpStringContent(\"INIT\"), \"command\");\n            multiPartContent.Add(new HttpStringContent(contentType), \"media_type\");\n            if (!string.IsNullOrWhiteSpace(mediaCategory))\n                multiPartContent.Add(new HttpStringContent(mediaCategory), \"media_category\");\n            if (shared)\n                multiPartContent.Add(new HttpStringContent(\"true\"), \"shared\");\n            multiPartContent.Add(new HttpStringContent(data.Length.ToString()), \"total_bytes\");\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                    multiPartContent.Add(new HttpStringContent(pair.Value), pair.Key);\n            }\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = Authorizer.SupportsCompression,\n                ProxyCredential = Authorizer.ProxyCredential,\n                UseProxy = Authorizer.UseProxy\n            };\n\n            var filter = new PostMessageFilter(this, new Dictionary<string, string>(), url, baseFilter, CancellationToken);\n            using (var client = new HttpClient(filter))\n            {\n                HttpResponseMessage msg = await client.PostAsync(new Uri(url), multiPartContent);\n\n                string response = await HandleResponseAsync(msg);\n\n                var media = JsonMapper.ToObject(response);\n                var mediaID = media.GetValue<ulong>(\"media_id\");\n                return mediaID;\n            }\n        }\n\n        async Task AppendChunksAsync(string url, ulong mediaID, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            const int ChunkSize = 500000;\n\n            for (\n                int segmentIndex = 0, skip = 0;\n                skip < data.Length;\n                segmentIndex++, skip = segmentIndex * ChunkSize)\n            {\n                int take = Math.Min(data.Length - skip, ChunkSize);\n                byte[] chunk = data.Skip(skip).Take(ChunkSize).ToArray();\n\n                var multiPartContent = new HttpMultipartFormDataContent();\n\n                var byteArrayContent = new HttpBufferContent(chunk.AsBuffer());\n                byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n                multiPartContent.Add(byteArrayContent, name, fileName);\n\n                multiPartContent.Add(new HttpStringContent(\"APPEND\"), \"command\");\n                multiPartContent.Add(new HttpStringContent(mediaID.ToString()), \"media_id\");\n                multiPartContent.Add(new HttpStringContent(segmentIndex.ToString()), \"segment_index\");\n\n                var baseFilter = new HttpBaseProtocolFilter\n                {\n                    AutomaticDecompression = Authorizer.SupportsCompression,\n                    ProxyCredential = Authorizer.ProxyCredential,\n                    UseProxy = Authorizer.UseProxy\n                };\n\n                var filter = new PostMessageFilter(this, new Dictionary<string, string>(), url, baseFilter, CancellationToken);\n                using (var client = new HttpClient(filter))\n                {\n                    HttpResponseMessage msg = await client.PostAsync(new Uri(url), multiPartContent);\n\n                    await HandleResponseAsync(msg);\n                }\n            }\n        }\n\n        async Task<string> FinalizeAsync(string url, ulong mediaID, CancellationToken cancelToken)\n        {\n            var multiPartContent = new HttpMultipartFormDataContent();\n\n            multiPartContent.Add(new HttpStringContent(\"FINALIZE\"), \"command\");\n            multiPartContent.Add(new HttpStringContent(mediaID.ToString()), \"media_id\");\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = Authorizer.SupportsCompression,\n                ProxyCredential = Authorizer.ProxyCredential,\n                UseProxy = Authorizer.UseProxy\n            };\n\n            var filter = new PostMessageFilter(this, new Dictionary<string, string>(), url, baseFilter, CancellationToken);\n            using (var client = new HttpClient(filter))\n            {\n                HttpResponseMessage msg = await client.PostAsync(new Uri(url), multiPartContent);\n\n                return await HandleResponseAsync(msg);\n            }\n        }\n\n        /// <summary>\n        /// Performs HTTP POST, with JSON payload, to Twitter.\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request.</param>\n        /// <param name=\"postData\">URL parameters to post.</param>\n        /// <param name=\"postObj\">Serializable payload object.</param>\n        /// <param name=\"getResult\">Callback for handling async Json response - null if synchronous.</param>\n        /// <returns>JSON Response from Twitter - empty string if async.</returns>\n        public async Task<string> SendJsonToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, T postObj, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostFormUrlEncodedToTwitterAsync));\n\n            var postJson = JsonConvert.SerializeObject(postObj, new DefaultJsonSerializer());\n            var content = new HttpStringContent(postJson, Windows.Storage.Streams.UnicodeEncoding.Utf8, \"application/json\");\n\n            var cleanPostData = new Dictionary<string, string>();\n            foreach (var pair in postData)\n                if (pair.Value != null)\n                    cleanPostData.Add(pair.Key, pair.Value);\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = Authorizer.SupportsCompression,\n                ProxyCredential = Authorizer.ProxyCredential,\n                UseProxy = Authorizer.UseProxy\n            };\n\n            var filter = new PostMessageFilter(this, cleanPostData, url, baseFilter, CancellationToken);\n\n            using (var client = new HttpClient(filter))\n            {\n                HttpResponseMessage msg;\n\n                if (method == HttpMethod.Post.ToString())\n                    msg = await client.PostAsync(new Uri(url), content);\n                else if (method == HttpMethod.Delete.ToString())\n                    msg = await client.DeleteAsync(new Uri(url));\n                else\n                    msg = await client.PutAsync(new Uri(url), content);\n\n                return await HandleResponseAsync(msg);\n            }\n        }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        public async Task<string> PostFormUrlEncodedToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostFormUrlEncodedToTwitterAsync));\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            var dataString = new StringBuilder();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    dataString.AppendFormat(\"{0}={1}&\", pair.Key, Uri.EscapeUriString(pair.Value));\n                    cleanPostData.Add(pair.Key, pair.Value);\n                }\n            }\n\n            var content = new HttpStringContent(dataString.ToString().TrimEnd('&'), Windows.Storage.Streams.UnicodeEncoding.Utf8, \"application/x-www-form-urlencoded\");\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = Authorizer.SupportsCompression,\n                ProxyCredential = Authorizer.ProxyCredential,\n                UseProxy = Authorizer.UseProxy\n            };\n\n            var filter = new PostMessageFilter(this, cleanPostData, url, baseFilter, CancellationToken);\n            using (var client = new HttpClient(filter))\n            {\n                HttpResponseMessage msg;\n                if (method == HttpMethod.Delete.ToString())\n                    msg = await client.DeleteAsync(new Uri(url));\n                else\n                    msg = await client.PostAsync(new Uri(url), content);\n\n                return await HandleResponseAsync(msg);\n            }\n        }\n\n        async Task<string> HandleResponseAsync(HttpResponseMessage msg)\n        {\n            LastUrl = msg.RequestMessage.RequestUri;\n\n            ResponseHeaders =\n                (from header in msg.Headers\n                 select new\n                 {\n                     Key = header.Key,\n                     Value = string.Join(\", \", header.Value)\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync();\n        }\n\n        void WriteLog(string content, string currentMethod)\n        {\n            if (Log != null)\n            {\n                Log.WriteLine(\"--Log Starts Here--\");\n                Log.WriteLine(\"Query:\" + content);\n                Log.WriteLine(\"Method:\" + currentMethod);\n                Log.WriteLine(\"--Log Ends Here--\");\n                Log.Flush();\n            }\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                StreamingCallbackAsync = null;\n\n                if (Log != null)\n                {\n                    Log.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Net/Url.cs",
    "content": "﻿using System;\nusing System.Text;\n\nnamespace LinqToTwitter.Net\n{\n    public class Url\n    {\n        /// <summary>\n        /// Implements Percent Encoding according to RFC 3986\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>Encoded string</returns>\n        /// <summary>\n        /// Implements Percent Encoding according to RFC 3986\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>Encoded string</returns>\n        public static string PercentEncode(string value, bool isParam = true)\n        {\n            const string IsParamReservedChars = @\"`!@#$^&*+=,:;'?/|\\[] \";\n            const string NoParamReservedChars = @\"`!@#$^&*()+=,:;'?/|\\[] \";\n\n            var result = new StringBuilder();\n\n            if (string.IsNullOrWhiteSpace(value))\n                return string.Empty;\n\n            var escapedValue = isParam ? Uri.EscapeUriString(value) : Uri.EscapeDataString(value);\n            var reservedChars = isParam ? IsParamReservedChars : NoParamReservedChars;\n\n            // Windows Phone doesn't escape all the ReservedChars properly, so we have to do it manually.\n            foreach (char symbol in escapedValue)\n            {\n                if (reservedChars.IndexOf(symbol) != -1)\n                {\n                    result.Append('%' + String.Format(\"{0:X2}\", (int)symbol).ToUpper());\n                }\n                else\n                {\n                    result.Append(symbol);\n                }\n            }\n\n            return result.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Security/ApplicationOnlyAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LitJson;\nusing Windows.Web.Http;\nusing Windows.Web.Http.Filters;\n\nnamespace LinqToTwitter\n{\n    public class ApplicationOnlyAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public string BasicToken { get; set; }\n        public string BearerToken { get; set; }\n        public string OAuth2Token { get; set; }\n        public string OAuth2InvalidateToken { get; set; }\n\n        public ApplicationOnlyAuthorizer()\n        {\n            OAuth2Token = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateToken = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public async Task AuthorizeAsync()\n        {\n            EncodeCredentials();\n            await GetBearerTokenAsync().ConfigureAwait(false);\n        }\n\n        public async Task InvalidateAsync()\n        {\n            EncodeCredentials();\n\n            var req = new HttpRequestMessage(HttpMethod.Post, new Uri(OAuth2InvalidateToken));\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.Add(\"Expect\", \"100-continue\");\n            req.Content = new HttpStringContent(\"access_token=\" + BearerToken, Windows.Storage.Streams.UnicodeEncoding.Utf8, \"application/x-www-form-urlencoded\");\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = SupportsCompression,\n                ProxyCredential = ProxyCredential,\n                UseProxy = UseProxy\n            };\n\n            using (var client = new HttpClient(baseFilter))\n            {\n                var msg = await client.SendRequestAsync(req);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg);\n\n                string response = await msg.Content.ReadAsStringAsync();\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n  \n        async Task GetBearerTokenAsync()\n        {\n            var req = new HttpRequestMessage(HttpMethod.Post, new Uri(OAuth2Token));\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.Add(\"Expect\", \"100-continue\");\n            req.Content = new HttpStringContent(\"grant_type=client_credentials\", Windows.Storage.Streams.UnicodeEncoding.Utf8, \"application/x-www-form-urlencoded\");\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = SupportsCompression,\n                ProxyCredential = ProxyCredential,\n                UseProxy = UseProxy\n            };\n\n            using (var client = new HttpClient(baseFilter))\n            {\n                var msg = await client.SendRequestAsync(req);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg);\n\n                string response = await msg.Content.ReadAsStringAsync();\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n\n        internal void EncodeCredentials()\n        {\n            string encodedConsumerKey = Url.PercentEncode(CredentialStore.ConsumerKey);\n            string encodedConsumerSecret = Url.PercentEncode(CredentialStore.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n        public override string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            return \"Bearer \" + BearerToken;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Security/AuthorizerBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Security;\nusing LinqToTwitter.Net;\nusing Windows.Web.Http;\nusing Windows.Web.Http.Filters;\nusing LinqToTwitter.Common;\nusing Windows.Security.Credentials;\n\nnamespace LinqToTwitter\n{\n    public class AuthorizerBase\n    {\n        /// <summary>\n        /// URL for OAuth Request Tokens\n        /// </summary>\n        public string OAuthRequestTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth authorization\n        /// </summary>\n        public string OAuthAuthorizeUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth Access Tokens\n        /// </summary>\n        public string OAuthAccessTokenUrl { get; set; }\n\n        /// <summary>\n        /// Get/Set Credentials\n        /// </summary>\n        public ICredentialStore CredentialStore { get; set; }\n\n        /// <summary>\n        /// Force the user to enter their name/password when authorizing\n        /// </summary>\n        public bool ForceLogin { get; set; }\n\n        /// <summary>\n        /// Overrides read/write settings for application registered with Twitter\n        /// </summary>\n        public AuthAccessType AccessType { get; set; }\n\n        /// <summary>\n        /// Optional name to prefill when user visits the Twitter authorization screen\n        /// </summary>\n        public string PreFillScreenName { get; set; }\n\n        /// <summary>\n        /// User-Agent header string sent to Twitter to represent your application. Defaults to LINQ to Twitter.\n        /// </summary>\n        public string UserAgent { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app.\n        /// </summary>\n        public string Callback { get; set; }\n\n        public bool SupportsCompression { get; set; }\n\n        public PasswordCredential ProxyCredential { get; set; }\n\n        public bool UseProxy { get; set; }\n\n        protected string ParseVerifierFromResponseUrl(string responseUrl)\n        {\n            string[] keyValPairs = new Uri(responseUrl).Query.TrimStart('?').Split('&');\n\n            string verifier =\n                (from keyValPair in keyValPairs\n                 let pair = keyValPair.Split('=')\n                 let key = pair[0]\n                 let val = pair.Length == 2 ? pair[1] : string.Empty\n                 where key == \"oauth_verifier\"\n                 select val)\n                .SingleOrDefault();\n\n            return verifier;\n        }\n\n        IDictionary<string, string> parameters;\n        public IDictionary<string, string> Parameters\n        {\n            get \n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    parameters.Add(\"oauth_consumer_key\", CredentialStore.ConsumerKey);\n                    parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n                }\n\n                return parameters; \n            }\n        }\n\n        public AuthorizerBase() : this(false, AuthAccessType.NoChange, string.Empty) { }\n\n        public AuthorizerBase(bool forceLogin, AuthAccessType accessType, string prefillScreenName)\n        {\n            ForceLogin = forceLogin;\n            AccessType = accessType;\n            PreFillScreenName = prefillScreenName;\n            SupportsCompression = true;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n\n            OAuthRequestTokenUrl = \"https://api.twitter.com/oauth/request_token\";\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authorize\";\n            OAuthAccessTokenUrl = \"https://api.twitter.com/oauth/access_token\";\n        }\n\n        public async Task GetRequestTokenAsync(string callback)\n        {\n            if (string.IsNullOrWhiteSpace(callback))\n                throw new ArgumentNullException(\"callback\", \"callback is required.\");\n\n            Parameters.Add(\"oauth_callback\", EncodeToProtectMultiByteCharUrls(callback));\n            Parameters.Remove(\"oauth_token\");\n\n            if (AccessType != AuthAccessType.NoChange)\n                Parameters.Add(\"x_auth_access_type\", AccessType.ToString().ToLower());\n\n            string response = await HttpGetAsync(OAuthRequestTokenUrl, Parameters);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to request token response from Twitter.\");\n\n            UpdateCredentialsFromRequestTokenResponse(response);\n        }\n  \n        string EncodeToProtectMultiByteCharUrls(string callback)\n        {\n            return callback == \"oob\" ? \"oob\" : new Uri(callback).AbsoluteUri;\n        }\n\n        public string PrepareAuthorizeUrl(bool forceLogin)\n        {\n            if (CredentialStore.OAuthToken == null)\n                throw new InvalidOperationException(\"OAuthToken not set. Call GetRequestTokenAsync first and verify that OAuthToken is set.\");\n\n            string forceLoginParamString = forceLogin ? \"&force_login=true\" : \"\";\n\n            string preFillScreenNameParamString = \n                !string.IsNullOrWhiteSpace(PreFillScreenName) ? \"&screen_name=\" + PreFillScreenName : \"\";\n\n            return string.Format(\n                \"{0}?oauth_token={1}{2}{3}\", \n                OAuthAuthorizeUrl, CredentialStore.OAuthToken, \n                forceLoginParamString, preFillScreenNameParamString);\n        }\n\n        public async Task GetAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpGetAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n            \n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        public async Task PostAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"x_auth_mode\") && !accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required, unless using xAuth.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpPostAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n\n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        void UpdateCredentialsFromRequestTokenResponse(string response)\n        {\n            CredentialStore.OAuthToken =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 where pair[0] == \"oauth_token\"\n                 select pair[1])\n                .SingleOrDefault();\n\n            Parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n        }\n\n        void UpdateCredentialsWithAccessTokenResponse(string response)\n        {\n            var responseParams =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 select new\n                 {\n                     Key = pair[0],\n                     Value = pair[1]\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            if (responseParams[\"oauth_token\"] != null)\n                CredentialStore.OAuthToken = responseParams[\"oauth_token\"];\n\n            if (responseParams[\"oauth_token_secret\"] != null)\n                CredentialStore.OAuthTokenSecret = responseParams[\"oauth_token_secret\"];\n\n            if (responseParams[\"screen_name\"] != null)\n                CredentialStore.ScreenName = responseParams[\"screen_name\"];\n\n            if (responseParams[\"user_id\"] != null)\n            {\n                ulong userID = 0;\n                ulong.TryParse(responseParams[\"user_id\"], out userID);\n                CredentialStore.UserID = userID;\n            }\n        }\n\n        internal async Task<string> HttpGetAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(oauthUrl));\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Get.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.Add(\"Expect\", \"100-continue\");\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = SupportsCompression,\n                ProxyCredential = ProxyCredential,\n                UseProxy = UseProxy\n            };\n\n            var msg = await new HttpClient(baseFilter).SendRequestAsync(req);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync();\n        }\n\n        internal async Task<string> HttpPostAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var postData =\n                (from keyValPair in parameters\n                 where !keyValPair.Key.StartsWith(\"oauth\")\n                 select keyValPair)\n                .ToDictionary(pair => pair.Key, pair => pair.Value);\n\n            var req = new HttpRequestMessage(HttpMethod.Post, new Uri(oauthUrl));\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Post.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.Add(\"Expect\", \"100-continue\");\n\n            var paramString =\n                string.Join(\"&\",\n                    (from parm in postData\n                     select parm.Key + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());\n            var content = new HttpStringContent(paramString, Windows.Storage.Streams.UnicodeEncoding.Utf8, \"application/x-www-form-urlencoded\");\n            req.Content = content;\n\n            var baseFilter = new HttpBaseProtocolFilter\n            {\n                AutomaticDecompression = SupportsCompression,\n                ProxyCredential = ProxyCredential,\n                UseProxy = UseProxy\n            };\n\n            var msg = await new HttpClient(baseFilter).SendRequestAsync(req);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync();\n        }\n \n        public virtual string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            string consumerSecret = CredentialStore.ConsumerSecret ?? \"\";\n            string oAuthTokenSecret = CredentialStore.OAuthTokenSecret ?? \"\";\n            string authorizationString =\n                new OAuth().GetAuthorizationString(\n                    method, oauthUrl, parameters, consumerSecret, oAuthTokenSecret);\n            return authorizationString;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Security/IAuthorizer.cs",
    "content": "using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Windows.Security.Credentials;\n\nnamespace LinqToTwitter\n{\n    public interface IAuthorizer\n    {\n        Task AuthorizeAsync();\n\n        string UserAgent { get; set; }\n\n        ICredentialStore CredentialStore { get; set; }\n\n        bool SupportsCompression { get; set; }\n\n        PasswordCredential ProxyCredential { get; set; }\n\n        bool UseProxy { get; set; }\n\n        string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.uap/Security/UniversalAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Windows.Security.Authentication.Web;\n\nnamespace LinqToTwitter\n{\n    public class UniversalAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        const string CallbackPlaceholderRequiredByTwitterOauth = \"http://localhost.com\";\n\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            string authCallback = \n                string.IsNullOrWhiteSpace(Callback) ? CallbackPlaceholderRequiredByTwitterOauth : Callback;\n            await GetRequestTokenAsync(authCallback);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n\n            WebAuthenticationResult webAuthenticationResult =\n                await WebAuthenticationBroker.AuthenticateAsync(\n                    WebAuthenticationOptions.None,\n                    new Uri(authUrl),\n                    new Uri(authCallback));\n\n            if (webAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)\n            {\n                string verifier = ParseVerifierFromResponseUrl(webAuthenticationResult.ResponseData);\n                var accessTokenParams = new Dictionary<string, string>();\n                accessTokenParams.Add(\"oauth_verifier\", verifier);\n\n                await GetAccessTokenAsync(accessTokenParams);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Common/TwitterQueryException.cs",
    "content": "﻿using System;\nusing System.Net;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Use for errors returned from HTTP GET and POST to Twitter\n    /// </summary>\n    public class TwitterQueryException : InvalidQueryException\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public TwitterQueryException()\n            : this(\"Twitter returned an error from your query.\", null) { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public TwitterQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public TwitterQueryException(string message, Exception inner)\n            : base(message, inner) { }\n\n        /// <summary>\n        /// Error code assigned by Twitter\n        /// </summary>\n        public int ErrorCode { get; set; }\n\n        /// <summary>\n        /// Http status code from Twitter response\n        /// </summary>\n        public HttpStatusCode StatusCode { get; set; }\n\n        /// <summary>\n        /// Http status reason from Twitter response\n        /// </summary>\n        public string ReasonPhrase { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/LinqToTwitter.Shared.xamarin.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>4aa86b5f-fbbb-473c-a9f2-fca5dd7c6c71</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>LinqToTwitter.Shared.xamarin</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)Common\\TwitterQueryException.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\GetMessageHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\PostMessageHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\TwitterErrorHandler.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\TwitterExecute.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Net\\Url.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\ApplicationOnlyAuthorizer.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\AuthorizerBase.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)Security\\IAuthorizer.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/LinqToTwitter.Shared.xamarin.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>4aa86b5f-fbbb-473c-a9f2-fca5dd7c6c71</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"LinqToTwitter.Shared.xamarin.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Net/GetMessageHandler.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class GetMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> parameters;\n        readonly string url;\n\n        public GetMessageHandler(TwitterExecute exe, IDictionary<string, string> parameters, string url)\n        {\n            this.exe = exe;\n            this.parameters = parameters;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(HttpMethod.Get.ToString(), url, parameters, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Net/PostMessageHandler.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class PostMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> postData;\n        readonly string url;\n\n        public PostMessageHandler(TwitterExecute exe, IDictionary<string, string> postData, string url)\n        {\n            this.exe = exe;\n            this.postData = postData;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(HttpMethod.Post.ToString(), url, postData, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            request.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true };\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Net/TwitterErrorHandler.cs",
    "content": "﻿using System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LitJson;\n\nnamespace LinqToTwitter.Net\n{\n    class TwitterErrorHandler\n    {\n        public static async Task ThrowIfErrorAsync(HttpResponseMessage msg)\n        {\n            const int TooManyRequests = 429;\n\n            // TODO: research proper handling of 304\n\n            if ((int)msg.StatusCode < 400) return;\n\n            switch (msg.StatusCode)\n            {\n                case HttpStatusCode.Unauthorized:\n                    await HandleUnauthorizedAsync(msg).ConfigureAwait(false);\n                    break;\n                default:\n                    switch ((int)msg.StatusCode)\n\t                {\n                        case TooManyRequests:\n                            await HandleTooManyRequestsAsync(msg).ConfigureAwait(false);\n                            break;\n\t\t                default:\n                            await HandleGenericErrorAsync(msg).ConfigureAwait(false);\n                            break;\n\t                }\n                    break;\n            } \n        }\n  \n        internal static async Task HandleGenericErrorAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            BuildAndThrowTwitterQueryException(responseStr, msg);\n        }\n \n        internal static async Task HandleTooManyRequestsAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.SeeOther,\n                ReasonPhrase = msg.ReasonPhrase + \" (HTTP 429 - Too Many Requests)\"\n            };\n        }\n \n        internal static void BuildAndThrowTwitterQueryException(string responseStr, HttpResponseMessage msg)\n        {\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            throw new TwitterQueryException(error.Message)\n            {\n                ErrorCode = error.Code,\n                StatusCode = msg.StatusCode,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n  \n        internal async static Task HandleUnauthorizedAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Message + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                ErrorCode = error.Code,\n                StatusCode = HttpStatusCode.Unauthorized,\n                ReasonPhrase = msg.ReasonPhrase\n            };\n        }\n\n        internal static TwitterErrorDetails ParseTwitterErrorMessage(string responseStr)\n        {\n            if (responseStr.StartsWith(\"{\"))\n            {\n                JsonData responseJson = JsonMapper.ToObject(responseStr);\n\n                var errors = responseJson.GetValue<JsonData>(\"errors\");\n\n                if (errors != null)\n                {\n                    if (errors.GetJsonType() == JsonType.String)\n                        return new TwitterErrorDetails\n                        {\n                            Message = responseJson.GetValue<string>(\"errors\"),\n                            Code = -1\n                        };\n\n                    if (errors.Count > 0)\n                    {\n                        var error = errors[0];\n                        return new TwitterErrorDetails\n                        {\n                            Message = error.GetValue<string>(\"message\"),\n                            Code = error.GetValue<int>(\"code\")\n                        };\n                    }\n                }\n            }\n\n            return new TwitterErrorDetails { Message = responseStr };\n        }\n\n        internal class TwitterErrorDetails\n        {\n            public int Code { get; set; }\n            public string Message { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Net/TwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LinqToTwitter.Shared.Common;\nusing LitJson;\nusing Newtonsoft.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Logic that performs actual communication with Twitter\n    /// </summary>\n    internal partial class TwitterExecute : ITwitterExecute, IDisposable\n    {\n        internal const int DefaultReadWriteTimeout = 300000;\n        internal const int DefaultTimeout = 100000;\n\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        public IAuthorizer Authorizer { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        public int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        public int Timeout { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public Uri LastUrl { get; private set; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        public IDictionary<string, string> ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string UserAgent\n        {\n            get\n            {\n                return Authorizer.UserAgent;\n            }\n            set\n            {\n                Authorizer.UserAgent =\n                    string.IsNullOrWhiteSpace(value) ?\n                        Authorizer.UserAgent :\n                        value + \", \" + Authorizer.UserAgent;\n            }\n        }\n\n        /// <summary>\n        /// Assign your TextWriter instance to receive LINQ to Twitter output\n        /// </summary>\n        public static TextWriter Log { get; set; }\n\n        readonly object streamingCallbackLock = new object();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Func<StreamContent, Task> StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// HttpClient instance being used in a streaming operation\n        /// </summary>\n        internal HttpClient StreamingClient { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        public bool IsStreamClosed { get; internal set; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        public CancellationToken CancellationToken { get; set; }\n\n        readonly object asyncCallbackLock = new object();\n\n        /// <summary>\n        /// Supports unit testing\n        /// </summary>\n        public TwitterExecute(IAuthorizer authorizer)\n        {\n            Authorizer = authorizer ?? throw new ArgumentNullException(\"authorizedClient\");\n\n            Authorizer.UserAgent = Authorizer.UserAgent ?? L2TKeys.DefaultUserAgent;\n        }\n\n        /// <summary>\n        /// Used in queries to read information from Twitter API endpoints.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Respose from Twitter</returns>\n        public async Task<string> QueryTwitterAsync<T>(Request request, IRequestProcessor<T> reqProc)\n        {\n            WriteLog(request.FullUrl, \"QueryTwitterAsync\");\n\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            var handler = new GetMessageHandler(this, parms, request.FullUrl);\n\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                var msg = await client.SendAsync(req, CancellationToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n  \n        internal void SetAuthorizationHeader(string method, string url, IDictionary<string, string> parms, HttpRequestMessage req)\n        {\n            var authStringParms = parms.ToDictionary(parm => parm.Key, elm => elm.Value);\n            authStringParms.Add(\"oauth_consumer_key\", Authorizer.CredentialStore.ConsumerKey);\n            authStringParms.Add(\"oauth_token\", Authorizer.CredentialStore.OAuthToken);\n\n            string authorizationString = Authorizer.GetAuthorizationString(method, url, authStringParms);\n\n            req.Headers.Add(\"Authorization\", authorizationString);\n        }\n\n        /// <summary>\n        /// Performs a query on the Twitter Stream.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters.</param>\n        /// <returns>\n        /// Caller expects an JSON formatted string response, but\n        /// real response(s) with streams is fed to the callback.\n        /// </returns>\n        public async Task<string> QueryTwitterStreamAsync(Request request)\n        {\n            WriteLog(request.FullUrl, \"QueryTwitterStreamAsync\");\n\n            var handler = new HttpClientHandler();\n\n            using (StreamingClient = new HttpClient(handler))\n            {\n                StreamingClient.Timeout = TimeSpan.FromMilliseconds(System.Threading.Timeout.Infinite);\n\n                var httpRequest = ConfigureRequest(request);\n\n                var response = await StreamingClient.SendAsync(\n                    httpRequest, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(response).ConfigureAwait(false);\n\n                Stream stream = await CreateStream(response).ConfigureAwait(false);\n\n                const int CarriageReturn = 0x0D;\n                const int LineFeed = 0x0A;\n\n                var memStr = new MemoryStream();\n                byte[] readByte;\n\n                while (stream.CanRead && !IsStreamClosed)\n                {\n                    readByte = new byte[1];\n                    await stream.ReadAsync(readByte, 0, 1, CancellationToken).ConfigureAwait(false);\n                    byte nextByte = readByte.SingleOrDefault();\n\n                    CancellationToken.ThrowIfCancellationRequested();\n\n                    if (IsStreamClosed) break;\n\n                    if (nextByte == 0xff) break;\n\n                    if (nextByte != CarriageReturn && nextByte != LineFeed)\n                        memStr.WriteByte(nextByte);\n\n                    if (nextByte == LineFeed)\n                    {\n                        int byteCount = (int)memStr.Length;\n                        byte[] tweetBytes = new byte[byteCount];\n\n                        memStr.Position = 0;\n                        await memStr.ReadAsync(tweetBytes, 0, byteCount, CancellationToken).ConfigureAwait(false);\n\n                        string tweet = Encoding.UTF8.GetString(tweetBytes, 0, byteCount);\n                        var strmContent = new StreamContent(this, tweet);\n\n                        await StreamingCallbackAsync(strmContent).ConfigureAwait(false);\n\n                        memStr.Dispose();\n                        memStr = new MemoryStream();\n                    }\n                }\n            }\n\n            IsStreamClosed = false;\n\n            return \"{}\";\n        }\n \n        HttpRequestMessage ConfigureRequest(Request request)\n        {\n            var httpRequest = new HttpRequestMessage(HttpMethod.Post, request.Endpoint);\n\n            var parameters =\n                string.Join(\"&\",\n                    (from parm in request.RequestParameters\n                     select parm.Name + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());                            \n            var content = new StringContent(parameters, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            httpRequest.Content = content;\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            SetAuthorizationHeader(HttpMethod.Post.ToString(), request.FullUrl, parms, httpRequest);\n            httpRequest.Headers.Add(\"User-Agent\", UserAgent);\n            httpRequest.Headers.ExpectContinue = false;\n\n            return httpRequest;\n        }\n \n        async Task<Stream> CreateStream(HttpResponseMessage response)\n        {\n            return await response.Content.ReadAsStreamAsync().ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        public void CloseStream()\n        {\n            IsStreamClosed = true;\n\n            if (StreamingClient != null)\n                StreamingClient.CancelPendingRequests();\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostImageAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostImageAsync));\n\n            var multiPartContent = new MultipartFormDataContent();\n            var byteArrayContent = new ByteArrayContent(data);\n            byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n            multiPartContent.Add(byteArrayContent, name, fileName);\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    cleanPostData.Add(pair.Key, pair.Value);\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n                }\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Cancellation token</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            WriteLog(url, \"PostMediaAsync\");\n\n            ulong mediaID = await InitAsync(url, data, postData, contentType, mediaCategory, shared, cancelToken).ConfigureAwait(false);\n\n            await AppendChunksAsync(url, mediaID, data, name, fileName, contentType, cancelToken).ConfigureAwait(false);\n\n            return await FinalizeAsync(url, mediaID, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<ulong> InitAsync(string url, byte[] data, IDictionary<string, string> postData, string contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            var multiPartContent = new MultipartFormDataContent\n            {\n                { new StringContent(\"INIT\"), \"command\" },\n                { new StringContent(contentType), \"media_type\" }\n            };\n            if (!string.IsNullOrWhiteSpace(mediaCategory))\n                multiPartContent.Add(new StringContent(mediaCategory), \"media_category\");\n            if (shared)\n                multiPartContent.Add(new StringContent(\"true\"), \"shared\");\n            multiPartContent.Add(new StringContent(data.Length.ToString()), \"total_bytes\");\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                string response = await HandleResponseAsync(msg).ConfigureAwait(false);\n\n                var media = JsonMapper.ToObject(response);\n                var mediaID = media.GetValue<ulong>(\"media_id\");\n                return mediaID;\n            }\n        }\n\n        async Task AppendChunksAsync(string url, ulong mediaID, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            const int ChunkSize = 500000;\n\n            for (\n                int segmentIndex = 0, skip = 0;\n                skip < data.Length;\n                segmentIndex++, skip = segmentIndex * ChunkSize)\n            {\n                byte[] chunk = data.Skip(skip).Take(ChunkSize).ToArray();\n\n                var multiPartContent = new MultipartFormDataContent();\n\n                var byteArrayContent = new ByteArrayContent(chunk);\n                byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n                multiPartContent.Add(byteArrayContent, name, fileName);\n\n                multiPartContent.Add(new StringContent(\"APPEND\"), \"command\");\n                multiPartContent.Add(new StringContent(mediaID.ToString()), \"media_id\");\n                multiPartContent.Add(new StringContent(segmentIndex.ToString()), \"segment_index\");\n\n                var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n                using (var client = new HttpClient(handler))\n                {\n                    if (Timeout != 0)\n                        client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                    HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                    await HandleResponseAsync(msg).ConfigureAwait(false);\n                }\n            }\n        }\n\n        async Task<string> FinalizeAsync(string url, ulong mediaID, CancellationToken cancelToken)\n        {\n            var multiPartContent = new MultipartFormDataContent\n            {\n                { new StringContent(\"FINALIZE\"), \"command\" },\n                { new StringContent(mediaID.ToString()), \"media_id\" }\n            };\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// Performs HTTP POST, with JSON payload, to Twitter.\n        /// </summary>\n        /// <param name=\"method\">Post or Put</param>\n        /// <param name=\"url\">URL of request.</param>\n        /// <param name=\"postData\">URL parameters to post.</param>\n        /// <param name=\"postObj\">Serializable payload object.</param>\n        /// <param name=\"getResult\">Callback for handling async Json response - null if synchronous.</param>\n        /// <returns>JSON Response from Twitter - empty string if async.</returns>\n        public async Task<string> SendJsonToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, T postObj, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostFormUrlEncodedToTwitterAsync));\n\n            var postJson = JsonConvert.SerializeObject(postObj, new DefaultJsonSerializer());\n            var content = new StringContent(postJson, Encoding.UTF8, \"application/json\");\n\n            var cleanPostData = new Dictionary<string, string>();\n            foreach (var pair in postData)\n                if (pair.Value != null)\n                    cleanPostData.Add(pair.Key, pair.Value);\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n\n            using (var client = new HttpClient(handler))\n            {\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg =\n                    method == HttpMethod.Post.ToString() ?\n                        await client.PostAsync(url, content).ConfigureAwait(false) :\n                        await client.PutAsync(url, content).ConfigureAwait(false);\n\n                return await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        public async Task<string> PostFormUrlEncodedToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostFormUrlEncodedToTwitterAsync));\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            var dataString = new StringBuilder();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    dataString.AppendFormat(\"{0}={1}&\", pair.Key, Uri.EscapeUriString(pair.Value));\n                    cleanPostData.Add(pair.Key, pair.Value);\n                }\n            }\n\n            var content = new StringContent(dataString.ToString().TrimEnd('&'), Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            HttpResponseMessage msg;\n\n            if (method == HttpMethod.Delete.ToString())\n                msg = await client.DeleteAsync(url).ConfigureAwait(false);\n            else if (method == HttpMethod.Put.ToString())\n                msg = await client.PutAsync(url, content).ConfigureAwait(false);\n            else\n                msg = await client.PostAsync(url, content).ConfigureAwait(false);\n\n            return await HandleResponseAsync(msg).ConfigureAwait(false);\n        }\n  \n        async Task<string> HandleResponseAsync(HttpResponseMessage msg)\n        {\n            LastUrl = msg.RequestMessage.RequestUri;\n\n            ResponseHeaders =\n                (from header in msg.Headers\n                 select new\n                 {\n                     HeaderKey = header.Key,\n                     HeaderValue = string.Join(\", \", header.Value)\n                 })\n                .ToDictionary(\n                    pair => pair.HeaderKey,\n                    pair => pair.HeaderValue);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        void WriteLog(string content, string currentMethod)\n        {\n            if (Log != null)\n            {\n                Log.WriteLine(\"--Log Starts Here--\");\n                Log.WriteLine(\"Query:\" + content);\n                Log.WriteLine(\"Method:\" + currentMethod);\n                Log.WriteLine(\"--Log Ends Here--\");\n                Log.Flush();\n            }\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                StreamingCallbackAsync = null;\n\n                if (Log != null)\n                {\n                    Log.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Net/Url.cs",
    "content": "﻿using System;\nusing System.Text;\n\nnamespace LinqToTwitter.Net\n{\n    public class Url\n    {\n        /// <summary>\n        /// Implements Percent Encoding according to RFC 3986\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>Encoded string</returns>\n        public static string PercentEncode(string value, bool isParam = true)\n        {\n            const string IsParamReservedChars = @\"`!@#$^&*+=,:;'?/|\\[] \";\n            const string NoParamReservedChars = @\"`!@#$^&*()+=,:;'?/|\\[] \";\n\n            var result = new StringBuilder();\n\n            if (string.IsNullOrWhiteSpace(value))\n                return string.Empty;\n\n            var escapedValue = isParam ? Uri.EscapeUriString(value) : Uri.EscapeDataString(value);\n            var reservedChars = isParam ? IsParamReservedChars : NoParamReservedChars;\n\n            // Windows Phone doesn't escape all the ReservedChars properly, so we have to do it manually.\n            foreach (char symbol in escapedValue)\n            {\n                if (reservedChars.IndexOf(symbol) != -1)\n                {\n                    result.Append('%' + String.Format(\"{0:X2}\", (int)symbol).ToUpper());\n                }\n                else\n                {\n                    result.Append(symbol);\n                }\n            }\n\n            return result.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Security/ApplicationOnlyAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LitJson;\n\nnamespace LinqToTwitter\n{\n    public class ApplicationOnlyAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public string BasicToken { get; set; }\n        public string BearerToken { get; set; }\n        public string OAuth2Token { get; set; }\n        public string OAuth2InvalidateToken { get; set; }\n\n        public ApplicationOnlyAuthorizer()\n        {\n            OAuth2Token = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateToken = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public async Task AuthorizeAsync()\n        {\n            EncodeCredentials();\n            await GetBearerTokenAsync().ConfigureAwait(false);\n        }\n\n        public async Task InvalidateAsync()\n        {\n            EncodeCredentials();\n\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2InvalidateToken);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"access_token=\" + BearerToken, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n                string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n  \n        async Task GetBearerTokenAsync()\n        {\n            var req = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, OAuth2Token);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"grant_type=client_credentials\", Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n\n            using (var client = new HttpClient(handler))\n            {\n                var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n                await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n                string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n                var responseJson = JsonMapper.ToObject(response);\n                BearerToken = responseJson.GetValue<string>(\"access_token\"); \n            }\n        }\n\n        internal void EncodeCredentials()\n        {\n            string encodedConsumerKey = Url.PercentEncode(CredentialStore.ConsumerKey);\n            string encodedConsumerSecret = Url.PercentEncode(CredentialStore.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n        public override string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            return \"Bearer \" + BearerToken;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Security/AuthorizerBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Security;\nusing LinqToTwitter.Net;\nusing System.Text;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    public class AuthorizerBase\n    {\n        /// <summary>\n        /// URL for OAuth Request Tokens\n        /// </summary>\n        public string OAuthRequestTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth authorization\n        /// </summary>\n        public string OAuthAuthorizeUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth Access Tokens\n        /// </summary>\n        public string OAuthAccessTokenUrl { get; set; }\n\n        /// <summary>\n        /// Get/Set Credentials\n        /// </summary>\n        public ICredentialStore CredentialStore { get; set; }\n\n        /// <summary>\n        /// Force the user to enter their name/password when authorizing\n        /// </summary>\n        public bool ForceLogin { get; set; }\n\n        /// <summary>\n        /// Overrides read/write settings for application registered with Twitter\n        /// </summary>\n        public AuthAccessType AccessType { get; set; }\n\n        /// <summary>\n        /// Optional name to prefill when user visits the Twitter authorization screen\n        /// </summary>\n        public string PreFillScreenName { get; set; }\n\n        /// <summary>\n        /// User-Agent header string sent to Twitter to represent your application. Defaults to LINQ to Twitter.\n        /// </summary>\n        public string UserAgent { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app.\n        /// </summary>\n        public string Callback { get; set; }\n\n        public IWebProxy Proxy { get; set; }\n\n        public bool SupportsCompression { get; set; }\n\n        protected string ParseVerifierFromResponseUrl(string responseUrl)\n        {\n            string[] keyValPairs = new Uri(responseUrl).Query.TrimStart('?').Split('&');\n\n            string verifier =\n                (from keyValPair in keyValPairs\n                 let pair = keyValPair.Split('=')\n                 let key = pair[0]\n                 let val = pair.Length == 2 ? pair[1] : string.Empty\n                 where key == \"oauth_verifier\"\n                 select val)\n                .SingleOrDefault();\n\n            return verifier;\n        }\n\n        IDictionary<string, string> parameters;\n        public IDictionary<string, string> Parameters\n        {\n            get \n            {\n                if (parameters == null)\n                {\n                    parameters = new Dictionary<string, string>();\n                    parameters.Add(\"oauth_consumer_key\", CredentialStore.ConsumerKey);\n                    parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n                }\n\n                return parameters; \n            }\n        }\n\n        public AuthorizerBase() : this(false, AuthAccessType.NoChange, string.Empty) { }\n\n        public AuthorizerBase(bool forceLogin, AuthAccessType accessType, string prefillScreenName)\n        {\n            ForceLogin = forceLogin;\n            AccessType = accessType;\n            PreFillScreenName = prefillScreenName;\n            SupportsCompression = true;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n\n            OAuthRequestTokenUrl = \"https://api.twitter.com/oauth/request_token\";\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authorize\";\n            OAuthAccessTokenUrl = \"https://api.twitter.com/oauth/access_token\";\n        }\n\n        public async Task GetRequestTokenAsync(string callback)\n        {\n            if (string.IsNullOrWhiteSpace(callback))\n                throw new ArgumentNullException(\"callback\", \"callback is required.\");\n\n            Parameters.Add(\"oauth_callback\", EncodeToProtectMultiByteCharUrls(callback));\n            Parameters.Remove(\"oauth_token\");\n\n            if (AccessType != AuthAccessType.NoChange)\n                Parameters.Add(\"x_auth_access_type\", AccessType.ToString().ToLower());\n\n            string response = await HttpGetAsync(OAuthRequestTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to request token response from Twitter.\");\n\n            UpdateCredentialsFromRequestTokenResponse(response);\n        }\n  \n        string EncodeToProtectMultiByteCharUrls(string callback)\n        {\n            return callback == \"oob\" ? \"oob\" : new Uri(callback).AbsoluteUri;\n        }\n\n        public string PrepareAuthorizeUrl(bool forceLogin)\n        {\n            if (CredentialStore.OAuthToken == null)\n                throw new InvalidOperationException(\"OAuthToken not set. Call GetRequestTokenAsync first and verify that OAuthToken is set.\");\n\n            string forceLoginParamString = forceLogin ? \"&force_login=true\" : \"\";\n\n            string preFillScreenNameParamString = \n                !string.IsNullOrWhiteSpace(PreFillScreenName) ? \"&screen_name=\" + PreFillScreenName : \"\";\n\n            return string.Format(\n                \"{0}?oauth_token={1}{2}{3}\", \n                OAuthAuthorizeUrl, CredentialStore.OAuthToken, \n                forceLoginParamString, preFillScreenNameParamString);\n        }\n\n        public async Task GetAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpGetAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n            \n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        public async Task PostAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"x_auth_mode\") && !accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required, unless using xAuth.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpPostAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n\n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        void UpdateCredentialsFromRequestTokenResponse(string response)\n        {\n            CredentialStore.OAuthToken =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 where pair[0] == \"oauth_token\"\n                 select pair[1])\n                .SingleOrDefault();\n\n            Parameters.Add(\"oauth_token\", CredentialStore.OAuthToken);\n        }\n\n        void UpdateCredentialsWithAccessTokenResponse(string response)\n        {\n            var responseParams =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 select new\n                 {\n                     Key = pair[0],\n                     Value = pair[1]\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            if (responseParams[\"oauth_token\"] != null)\n                CredentialStore.OAuthToken = responseParams[\"oauth_token\"];\n\n            if (responseParams[\"oauth_token_secret\"] != null)\n                CredentialStore.OAuthTokenSecret = responseParams[\"oauth_token_secret\"];\n\n            if (responseParams[\"screen_name\"] != null)\n                CredentialStore.ScreenName = responseParams[\"screen_name\"];\n\n            if (responseParams[\"user_id\"] != null)\n            {\n                ulong userID = 0;\n                ulong.TryParse(responseParams[\"user_id\"], out userID);\n                CredentialStore.UserID = userID;\n            }\n        }\n\n        internal async Task<string> HttpGetAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var req = new HttpRequestMessage(HttpMethod.Get, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Get.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var handler = new HttpClientHandler();\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        internal async Task<string> HttpPostAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var postData =\n                (from keyValPair in parameters\n                 where !keyValPair.Key.StartsWith(\"oauth\")\n                 select keyValPair)\n                .ToDictionary(pair => pair.Key, pair => pair.Value);\n\n            var req = new HttpRequestMessage(HttpMethod.Post, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Post.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var paramString =\n                string.Join(\"&\",\n                    (from parm in postData\n                     select parm.Key + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());\n            var content = new StringContent(paramString, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            req.Content = content;\n\n            var handler = new HttpClientHandler();\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n \n        public virtual string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            string consumerSecret = CredentialStore.ConsumerSecret ?? \"\";\n            string oAuthTokenSecret = CredentialStore.OAuthTokenSecret ?? \"\";\n            string authorizationString =\n                new OAuth().GetAuthorizationString(\n                    method, oauthUrl, parameters, consumerSecret, oAuthTokenSecret);\n            return authorizationString;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Shared.xamarin/Security/IAuthorizer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public interface IAuthorizer\n    {\n        Task AuthorizeAsync();\n\n        string UserAgent { get; set; }\n\n        ICredentialStore CredentialStore { get; set; }\n\n        IWebProxy Proxy { get; set; }\n\n        bool SupportsCompression { get; set; }\n\n        string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/AccountActivityTests/AccountActivityCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class AccountActivityCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public AccountActivityCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void AccountActivityRequestProcessor_Works_With_Actions()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>();\n\n            Assert.IsInstanceOfType(accActReqProc, typeof(IRequestProcessorWithAction<AccountActivity>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(AccountActivityResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<AccountActivity>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<AccountActivity>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithWebhookParameter_PopulatesInputParametersInResponse()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithWebhookID_ReturnsCreatedAccountActivity()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            SubscriptionValue subsVal = accAct.SubscriptionValue;\n            Assert.IsNotNull(subsVal);\n            Assert.IsTrue(subsVal.IsSubscribed);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithValidParameters_LeavesNullRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNull(ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1/subscriptions.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivityValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithZeroWebhookID_Throws()\n        {\n            const int WebhookID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddAccountActivitySubscriptionAsync(WebhookID));\n\n            Assert.AreEqual(\"webhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithUrlParameter_PopulatesInputParametersInResponse()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivityWebhookAsync(Url);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(Url, accAct.Url);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithUrlParameter_ReturnsCreatedAccountActivity()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivityWebhookAsync(Url);\n\n            Assert.IsNotNull(accAct);\n            WebhooksValue accActVal = accAct.WebhooksValue;\n            Assert.IsNotNull(accActVal);\n            Webhook[] webhooks = accActVal.Webhooks;\n            Assert.IsNotNull(webhooks);\n            Assert.AreEqual(1, webhooks.Length);\n            Webhook webhook = webhooks[0];\n            Assert.IsNotNull(webhook);\n            Assert.AreEqual(\"921246280768151552\", webhook.ID);\n            Assert.AreEqual(\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\", webhook.Url);\n            Assert.IsTrue(webhook.Valid);\n            Assert.AreEqual(\"2017-10-20 05:26:44 +0000\", webhook.CreatedTimestamp);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivityWebhookAsync(Url);\n\n            Assert.AreEqual(AccountActivityResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithValidParameters_ConstructsUrl()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivityWebhookAsync(Url);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<AccountActivity>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithNullUrl_Throws()\n        {\n            const string Url = null;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddAccountActivityWebhookAsync(Url));\n\n            Assert.AreEqual(\"url\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithEmptyUrl_Throws()\n        {\n            const string Url = \"\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddAccountActivityWebhookAsync(Url));\n\n            Assert.AreEqual(\"url\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithWebhookParameter_PopulatesInputParametersInResponse()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithWebhookID_ReturnsCreatedAccountActivity()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithValidParameters_SetsNullRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            Assert.IsNull(ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivityValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithZeroWebhookID_Throws()\n        {\n            const int WebhookID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.SendAccountActivityCrcAsync(WebhookID));\n\n            Assert.AreEqual(\"webhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithWebhookParameter_PopulatesInputParametersInResponse()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithWebhookID_ReturnsCreatedAccountActivity()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithValidParameters_SetsNullRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNull(ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1/subscriptions.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivityValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithZeroWebhookID_Throws()\n        {\n            const int WebhookID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID));\n\n            Assert.AreEqual(\"webhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivityWebhookAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivityWebhookAsync(WebhookID);\n\n            Assert.AreEqual(AccountActivityResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivityWebhookAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivityWebhookAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivity>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        const string AccountActivityResponse = @\"{\n\t\"\"id\"\": \"\"921246280768151552\"\",\n\t\"\"url\"\": \"\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\"\",\n\t\"\"valid\"\": true,\n\t\"\"created_timestamp\"\": \"\"2017-10-20 05:26:44 +0000\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/AccountActivityTests/AccountActivityRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Newtonsoft.Json.Linq;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class AccountActivityRequestProcessorTests\n    {\n        public AccountActivityRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithSubscriptionsType_ConstructsUrl()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/account_activity/webhooks/1/subscriptions.json\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountActivityType.Subscriptions).ToString(CultureInfo.InvariantCulture) },\n                        { \"WebhookID\", \"1\" }\n                };\n\n            Request req = accActReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithWebhooksType_ConstructsUrl()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/account_activity/webhooks.json\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)AccountActivityType.Webhooks).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = accActReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForSubscriptionsWithoutWebhookID_Throws()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountActivityType.Subscriptions).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"WebhookID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => accActReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"WebhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForWebhooks_HandlesSingleResult()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            { \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Webhooks\n            };\n\n            List<AccountActivity> accActs = accActReqProc.ProcessResults(WebhooksResponse);\n\n            Assert.IsNotNull(accActs?.SingleOrDefault());\n\n            AccountActivity accAct = accActs.First();\n\n            Assert.IsNotNull(accAct);\n            WebhooksValue webhooksVal = accAct.WebhooksValue;\n            Assert.IsNotNull(webhooksVal);\n            Webhook[] webhooks = webhooksVal.Webhooks;\n            Assert.IsNotNull(webhooks);\n            Assert.AreEqual(1, webhooks.Length);\n            Webhook webhook = webhooks.First();\n            Assert.IsNotNull(webhook);\n            Assert.AreEqual(\"920835776169910272\", webhook.ID);\n            Assert.AreEqual(\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\", webhook.Url);\n            Assert.IsTrue(webhook.Valid);\n            Assert.AreEqual(\"2017-10-19 02:15:32 +0000\", webhook.CreatedTimestamp);\n        }\n        \n        [TestMethod]\n        public void ProcessResults_ForSubscriptions_HandlesResult()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Subscriptions,\n                WebhookID = 1\n            };\n\n            List<AccountActivity> accActs = accActReqProc.ProcessResults(\"\");\n\n            AccountActivity accAct = accActs?.SingleOrDefault();\n            Assert.IsNotNull(accAct);\n            SubscriptionValue subsVal = accAct.SubscriptionValue;\n            Assert.IsNotNull(subsVal);\n            Assert.IsTrue(subsVal.IsSubscribed);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithWebhooksQuery_ReplacesInputParams()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Webhooks\n            };\n\n            List<AccountActivity> accActList = accActReqProc.ProcessResults(WebhooksResponse);\n\n            AccountActivity accAct = accActList.First();\n\n            Assert.AreEqual(AccountActivityType.Webhooks, accAct.Type);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithSubscriptionsQuery_ReplacesInputParams()\n        {\n            const ulong WebhookID = 4;\n\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Subscriptions,\n                WebhookID = WebhookID\n            };\n\n            List<AccountActivity> accActs = accActReqProc.ProcessResults(\"\");\n\n            AccountActivity accAct = accActs.First();\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            Expression<Func<AccountActivity, bool>> expression =\n                dm =>\n                    dm.Type == AccountActivityType.Subscriptions &&\n                    dm.WebhookID == 1;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = accActReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)AccountActivityType.Subscriptions).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"WebhookID\", \"1\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithMissingType_Throws()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => accActReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParamDictionary_Throws()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => accActReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        const string WebhooksResponse = @\"[{\n\t\"\"id\"\": \"\"920835776169910272\"\",\n\t\"\"url\"\": \"\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\"\",\n\t\"\"valid\"\": true,\n\t\"\"created_timestamp\"\": \"\"2017-10-19 02:15:32 +0000\"\"\n}]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/AccountTests/AccountCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class AccountCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public AccountCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<Account>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostImageAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.mayosoftware.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountProfileAsync(Name, Url, Location, Description, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/update_profile.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ExpectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_WithRawResult_Succeeds()\n        {\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountProfileAsync(Name, Url, Location, Description, true, SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(null, null, null, null, true, false));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Name_Over_20_Chars()\n        {\n            const string ExpectedParamName = \"name\";\n            string name = new string(Enumerable.Repeat('x', 51).ToArray());\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(name, Url, Location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfile_Throws_On_Url_Over_100_Chars()\n        {\n            const string ExpectedParamName = \"url\";\n            const string Name = \"Joe\";\n            var url = new string(Enumerable.Repeat('x', 101).ToArray());\n            const string Location = \"Denver, CO\";\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, url, Location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Location_Over_30_Chars()\n        {\n            const string ExpectedParamName = \"location\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            var location = new string(Enumerable.Repeat('x', 31).ToArray());\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, Url, location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Description_Over_160_Chars()\n        {\n            const string ExpectedParamName = \"description\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"Denver, CO\";\n            var description = new string(Enumerable.Repeat('x', 161).ToArray());\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, Url, Location, description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountImageAsync(new byte[] { 1 }, \"myFile.jpg\", \"jpg\", SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostImageAsync(\n                    \"https://api.twitter.com/1.1/account/update_profile_image.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ExpectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_WithRawResult_Succeeds()\n        {\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountImageAsync(new byte[] { 1 }, \"myFile.jpg\", \"jpg\", SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Throws_On_Empty_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountImageAsync(new byte[] { }, \"myImage.jpg\", \"jpg\", SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Throws_On_Null_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountImageAsync(null, \"myImage.jpg\", \"jpg\", SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"time_zone\", \"MST\" },\n                { \"lang\", \"en\" },\n                { \"trend_location_woeid\", \"1\" },\n                { \"sleep_time_enabled\", \"true\" },\n                { \"start_sleep_time\", \"20\" },\n                { \"end_sleep_time\", \"6\" },\n            };\n\n            Account acct = await ctx.UpdateAccountSettingsAsync(1, true, 20, 6, \"MST\", \"en\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Account>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/settings.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(acct);\n            Settings settings = acct.Settings;\n            Assert.IsNotNull(settings);\n            Assert.AreEqual(\"en\", settings.Language);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_WithRawResult_Succeeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n\n            await ctx.UpdateAccountSettingsAsync(1, true, 20, 6, \"MST\", \"en\");\n\n            Assert.AreEqual(SettingsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_Throws_On_No_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountSettingsAsync(null, null, null, null, null, null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedProfileBannerUrl = \"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\";\n            byte[] banner = new byte[]{ 1, 2, 3 };\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateProfileBannerAsync(banner);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/update_profile_banner.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(actual);\n            Assert.IsNotNull(actual.ProfileBannerUrl);\n            Assert.AreEqual(ExpectedProfileBannerUrl, actual.ProfileBannerUrl);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_WithRawResult_Succeeds()\n        {\n            byte[] banner = new byte[] { 1, 2, 3 };\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateProfileBannerAsync(banner);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Null_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = null;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Empty_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = new byte[0];\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RemoveProfileBannerAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.RemoveProfileBannerAsync();\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/remove_profile_banner.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(actual);\n        }\n\n        [TestMethod]\n        public async Task RemoveProfileBannerAsync_WithRawResult_Succeeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.RemoveProfileBannerAsync();\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string SettingsResponse = @\"{\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"protected\"\":false,\n   \"\"geo_enabled\"\":false,\n   \"\"time_zone\"\":{\n      \"\"name\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"tzinfo_name\"\":\"\"America\\/Denver\"\"\n   },\n   \"\"sleep_time\"\":{\n      \"\"enabled\"\":true,\n      \"\"start_time\"\":20,\n      \"\"end_time\"\":8\n   },\n   \"\"show_all_inline_media\"\":true,\n   \"\"discoverable_by_email\"\":true,\n   \"\"trend_location\"\":[\n      {\n         \"\"woeid\"\":23424977,\n         \"\"name\"\":\"\"United States\"\",\n         \"\"country\"\":\"\"United States\"\",\n         \"\"countryCode\"\":\"\"US\"\",\n         \"\"placeType\"\":{\n            \"\"name\"\":\"\"Country\"\",\n            \"\"code\"\":12\n         },\n         \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424977\"\",\n         \"\"parentid\"\":1\n      }\n   ],\n   \"\"language\"\":\"\"en\"\",\n   \"\"always_use_https\"\":true\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/AccountTests/AccountRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class AccountRequestProcessorTests\n    {\n        public AccountRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_VerifyCredentials()\n        {\n            var target = new AccountRequestProcessor<Account> { Type = AccountType.VerifyCredentials };\n\n            List<Account> actual = target.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            var acct = actual.Cast<Account>().ToList().FirstOrDefault();\n            Assert.IsNotNull(acct);\n            Assert.AreEqual(\"Joe Mayo\", acct.User.Name);\n        }\n\n        [TestMethod]\n        public void HandleSettingsResponse_Converts_Settings_To_Account()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>();\n\n            Account acct = acctReqProc.HandleSettingsResponse(TestSettingsResponse);\n\n            Assert.IsNotNull(acct);\n            Assert.IsNotNull(acct.Settings);\n            var settings = acct.Settings;\n            Assert.IsNotNull(settings.TimeZone);\n            var timeZone = settings.TimeZone;\n            Assert.AreEqual(\"Mountain Time (US & Canada)\", timeZone.Name);\n            Assert.AreEqual(-21600, timeZone.UtcOffset);\n            Assert.AreEqual(\"America/Denver\", timeZone.TzInfoName);\n            Assert.AreEqual(\"Mayoster\", settings.ScreenName);\n            Assert.AreEqual(true, settings.AlwaysUseHttps);\n            Assert.AreEqual(true, settings.UseCookiePersonalization);\n            Assert.IsNotNull(settings.SleepTime);\n            var sleepTime = settings.SleepTime;\n            Assert.AreEqual(true, sleepTime.Enabled);\n            Assert.AreEqual(20, sleepTime.StartHour);\n            Assert.AreEqual(0, sleepTime.EndHour);\n            Assert.AreEqual(true, settings.GeoEnabled);\n            Assert.AreEqual(\"en\", settings.Language);\n            Assert.AreEqual(true, settings.DiscoverableByEmail);\n            Assert.AreEqual(true, settings.DiscoverableByMobilePhone);\n            Assert.AreEqual(true, settings.DisplaySensitiveMedia);\n            Assert.AreEqual(\"all\", settings.AllowContributorRequest);\n            Assert.AreEqual(\"following\", settings.AllowDmsFrom);\n            Assert.AreEqual(\"following\", settings.AllowDmGroupsFrom);\n            Assert.IsNotNull(settings.TrendLocation);\n            var trendLocation = settings.TrendLocation;\n            Assert.AreEqual(\"Las Vegas\", trendLocation.Name);\n            Assert.AreEqual(\"US\", trendLocation.CountryCode);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/2436704\", trendLocation.Url);\n            Assert.AreEqual(2436704, trendLocation.WoeID);\n            Assert.AreEqual(\"Town\", trendLocation.PlaceTypeName);\n            Assert.AreEqual(7, trendLocation.PlaceTypeNameCode);\n            Assert.AreEqual(\"23424977\", trendLocation.ParentID);\n            Assert.AreEqual(\"United States\", trendLocation.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var accts = reqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, accts.Count);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new AccountRequestProcessor<Account>();\n            Expression<Func<Account, bool>> expression = \n                acct => \n                    acct.Type == AccountType.Settings &&\n                    acct.SkipStatus == true &&\n                    acct.IncludeEntities == true &&\n                    acct.IncludeEmail == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEmail\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_VerifyCredentials_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/verify_credentials.json?skip_status=true&include_entities=false&include_email=true\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.VerifyCredentials).ToString(CultureInfo.InvariantCulture) },\n                        { \"SkipStatus\", true.ToString() },\n                        { \"IncludeEntities\", false.ToString() },\n                        { \"IncludeEmail\", true.ToString() }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Settings_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/settings.json\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_Null_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>\n            {\n                Type = AccountType.VerifyCredentials,\n                SkipStatus = true,\n                IncludeEntities = true\n            };\n\n            var accounts = acctReqProc.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            Assert.IsNotNull(accounts);\n            Assert.IsNotNull(accounts.SingleOrDefault());\n            var account = accounts.Single();\n            Assert.AreEqual(AccountType.VerifyCredentials, account.Type);\n            Assert.IsTrue(account.SkipStatus);\n            Assert.IsTrue(account.IncludeEntities);\n        }\n\n        const string TestVerifyCredentialsQueryResponse = @\"{\n   \"\"statuses_count\"\":1624,\n   \"\"favourites_count\"\":65,\n   \"\"protected\"\":false,\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a2.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\",\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"default_profile\"\":false,\n   \"\"listed_count\"\":101,\n   \"\"following\"\":false,\n   \"\"profile_background_tile\"\":false,\n   \"\"utc_offset\"\":-25200,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; MVP; interested in C#, MVC, and Language Integrated Query (LINQ)\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"contributors_enabled\"\":false,\n   \"\"verified\"\":false,\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"followers_count\"\":875,\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":2,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"id_str\"\":\"\"115131137906589696\"\",\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":115131137906589696,\n      \"\"created_at\"\":\"\"Sat Sep 17 18:32:56 +0000 2011\"\",\n      \"\"possibly_sensitive\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Visual Studio 11 Developer Preview: http:\\/\\/t.co\\/fISuavMD\"\"\n   },\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"geo_enabled\"\":true,\n   \"\"profile_use_background_image\"\":true,\n   \"\"friends_count\"\":161,\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"is_translator\"\":false,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"id\"\":15411837,\n   \"\"follow_request_sent\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a1.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\"\n}\";\n\n        const string TestSettingsResponse = @\"{\n\t\"\"time_zone\"\": {\n\t\t\"\"name\"\": \"\"Mountain Time (US & Canada)\"\",\n\t\t\"\"utc_offset\"\": -21600,\n\t\t\"\"tzinfo_name\"\": \"\"America\\/Denver\"\"\n\t},\n\t\"\"protected\"\": true,\n\t\"\"screen_name\"\": \"\"Mayoster\"\",\n\t\"\"always_use_https\"\": true,\n\t\"\"use_cookie_personalization\"\": true,\n\t\"\"sleep_time\"\": {\n\t\t\"\"enabled\"\": true,\n\t\t\"\"end_time\"\": 0,\n\t\t\"\"start_time\"\": 20\n\t},\n\t\"\"geo_enabled\"\": true,\n\t\"\"language\"\": \"\"en\"\",\n\t\"\"discoverable_by_email\"\": true,\n\t\"\"discoverable_by_mobile_phone\"\": true,\n\t\"\"display_sensitive_media\"\": true,\n\t\"\"allow_contributor_request\"\": \"\"all\"\",\n\t\"\"allow_dms_from\"\": \"\"following\"\",\n\t\"\"allow_dm_groups_from\"\": \"\"following\"\",\n\t\"\"trend_location\"\": [{\n\t\t\"\"name\"\": \"\"Las Vegas\"\",\n\t\t\"\"countryCode\"\": \"\"US\"\",\n\t\t\"\"url\"\": \"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/2436704\"\",\n\t\t\"\"woeid\"\": 2436704,\n\t\t\"\"placeType\"\": {\n\t\t\t\"\"name\"\": \"\"Town\"\",\n\t\t\t\"\"code\"\": 7\n\t\t},\n\t\t\"\"parentid\"\": 23424977,\n\t\t\"\"country\"\": \"\"United States\"\"\n\t}]\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <appSettings>\n    <!-- Set culture to test localization settings, all ClassInitialize in\n         tests should set CurrentCulture and CurrentUICulture with this value\n    <add key=\"culture\" value=\"nn-NO\"/>\n    -->\n\n    <add key=\"culture\" value=\"\" />\n  </appSettings>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Net.Http.Primitives\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.29.0\" newVersion=\"4.2.29.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ValueTuple\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.6.0\" newVersion=\"4.0.6.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\" /></startup></configuration>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/BlocksTests/BlocksCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.BlocksTests\n{\n    [TestClass]\n    public class BlocksCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public BlocksCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BlocksRequestProcessor_Works_With_Actions()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(blocksReqProc, typeof(IRequestProcessorWithAction<User>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(BlocksUserJson);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<User>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_Handles_Response()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            User actual = await ctx.CreateBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(\"LINQ to Tweeter Test\", actual.Name);\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(BlocksUserJson, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_Builds_Url()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateBlockAsync(Id, null, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/blocks/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateBlockAsync_Throws_On_Null_UserID_And_ScreenName()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateBlockAsync(0, null, true));\n\n            Assert.AreEqual(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_Handles_Response()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            User actual = await ctx.DestroyBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(\"LINQ to Tweeter Test\", actual.Name);\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyBlockAsync(Id, null, SkipStatus);\n\n            Assert.AreEqual(BlocksUserJson, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_Builds_Url()\n        {\n            const ulong Id = 1;\n            const bool SkipStatus = true;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyBlockAsync(Id, null, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/blocks/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DestroyBlockAsync_Throws_On_No_ID_Or_ScreenName()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyBlockAsync(0, null, true));\n\n            Assert.AreEqual(\"UserIDOrScreenName\", ex.ParamName);\n        }\n\n        const string BlocksUserJson = @\"{\n   \"\"id\"\":16761255,\n   \"\"listed_count\"\":2,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":0,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"followers_count\"\":22,\n   \"\"is_translator\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"follow_request_sent\"\":false,\n   \"\"statuses_count\"\":100,\n   \"\"utc_offset\"\":-25200,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"favourites_count\"\":2,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"verified\"\":false,\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"default_profile\"\":false,\n   \"\"following\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"notifications\"\":false,\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"coordinates\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"place\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":176445993091481604,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/BlocksTests/BlocksRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.BlocksTests\n{\n    [TestClass]\n    public class BlocksRequestProcessorTests\n    {\n        public BlocksRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IDs()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.Ids\n            };\n\n            IList<Blocks> blocksResponse = blockReqProc.ProcessResults(BlockedIDsJson);\n\n            Assert.IsNotNull(blocksResponse);\n            Blocks blocks = blocksResponse.First();\n            List<string> ids = blocks.IDs;\n            Assert.AreEqual(5, ids.Count());\n            Assert.AreEqual(\"35080286\", ids.First());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_BlockedUsers()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List\n            };\n\n            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            var actualQuery = actual as IList<Blocks>;\n            Assert.IsNotNull(actualQuery);\n            Assert.AreEqual(actualQuery[0].Users.Count, 3);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var blocks = blocksReqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(1, blocks.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List,\n                ScreenName = \"somename\",\n                Page = 1,\n                PerPage = 10,\n                IncludeEntities = true,\n                SkipStatus = true,\n                Cursor = \"789\"\n            };\n\n            var blocks = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            Assert.IsNotNull(blocks);\n            Assert.IsNotNull(blocks.SingleOrDefault());\n            var block = blocks.Single();\n            Assert.AreEqual(BlockingType.List, block.Type);\n            Assert.AreEqual(\"somename\", block.ScreenName);\n            Assert.AreEqual(1, block.Page);\n            Assert.AreEqual(10, block.PerPage);\n            Assert.IsTrue(block.IncludeEntities);\n            Assert.IsTrue(block.SkipStatus);\n            Assert.AreEqual(\"789\", block.Cursor);\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks>();\n            Expression<Func<Blocks, bool>> expression =\n                block =>\n                    block.Type == BlockingType.List &&\n                    block.UserID == 123ul &&\n                    block.ScreenName == \"JoeMayo\" &&\n                    block.Page == 1 &&\n                    block.PerPage == 10 &&\n                    block.IncludeEntities == true &&\n                    block.SkipStatus == true &&\n                    block.Cursor == \"789\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = blocksReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PerPage\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_List_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/list.json?page=2&per_page=10&include_entities=true&skip_status=true&cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture) },\n                    { \"Page\", \"2\" },\n                    { \"PerPage\", \"10\" },\n                    { \"SkipStatus\", true.ToString() },\n                    { \"Cursor\", \"789\" },\n                    { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_BlockingIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/ids.json?cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.Ids).ToString(CultureInfo.InvariantCulture) },\n                    { \"Cursor\", \"789\" }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Parameter()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n\n        const string BlockedUsersJson = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":35080286,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":0,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":null,\n         \"\"name\"\":\"\"Nunya Business\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Fri Apr 24 23:44:07 +0000 2009\"\",\n         \"\"time_zone\"\":null,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"35080286\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"followers_count\"\":1,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"somename\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Apr 24 23:44:34 +0000 2009\"\",\n            \"\"id_str\"\":\"\"1608673165\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"whatever\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":1608673165,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":0\n      },\n      {\n         \"\"id\"\":132447355,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":1,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":14400,\n         \"\"name\"\":\"\"abcdefg\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Tue Apr 13 07:49:37 +0000 2010\"\",\n         \"\"time_zone\"\":\"\"Baku\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"132447355\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"followers_count\"\":33,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"abcdefg\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":17,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Tue Apr 13 08:09:41 +0000 2010\"\",\n            \"\"id_str\"\":\"\"12093232220\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"hi\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":12093232220,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":6\n      },\n      {\n         \"\"id\"\":22785157,\n         \"\"location\"\":\"\"Orange County, CA\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"profile_background_color\"\":\"\"B2DFDA\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"name\"\":\"\"Patrick Kerr\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"statuses_count\"\":9823,\n         \"\"profile_link_color\"\":\"\"93A644\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":null,\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        31\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\"\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Wed Mar 04 15:15:54 +0000 2009\"\",\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"22785157\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"followers_count\"\":1149,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"eeeeee\"\",\n         \"\"listed_count\"\":11,\n         \"\"screen_name\"\":\"\"patrickkerr\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Dec 28 15:00:13 +0000 2012\"\",\n            \"\"id_str\"\":\"\"284675125813575680\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":\"\"lnkd.in\\/_n9Mq5\"\",\n                     \"\"expanded_url\"\":\"\"http:\\/\\/lnkd.in\\/_n9Mq5\"\",\n                     \"\"indices\"\":[\n                        66,\n                        86\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/t.co\\/Fil30ira\"\"\n                  }\n               ],\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"Lincoln Property Makes Second SoCal Office Acquisition in a Month http:\\/\\/t.co\\/Fil30ira\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.linkedin.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ELinkedIn\\u003C\\/a\\u003E\"\",\n            \"\"id\"\":284675125813575680,\n            \"\"possibly_sensitive\"\":false,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":\"\"Patrick Kerr at Kerr Organization, develops & invests in commercial real estate #realestate #properties #buildings #multifamily #investments #homes\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"ffffff\"\",\n         \"\"friends_count\"\":155\n      }\n   ],\n   \"\"next_cursor\"\":0,\n   \"\"previous_cursor\"\":0,\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n\n        const string BlockedIDsJson = @\"{\n   \"\"previous_cursor\"\":0,\n   \"\"ids\"\":[\n      35080286,\n      132447355,\n      22785157,\n      238429025,\n      256075978\n   ],\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\",\n   \"\"next_cursor\"\":0\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/Common/DebuggerWriter.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    /// <summary>\n    /// Implements a <see cref=\"TextWriter\"/> for writing information to the debugger log.\n    /// </summary>\n    /// <seealso cref=\"Debugger.Log\"/>\n    /// <remarks>This code is created by Kris Vandermotten</remarks>\n    /// /// <remarks>For more information check this link: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11 </remarks>\n    public class DebuggerWriter : TextWriter\n    {\n        private bool isOpen;\n        private static UnicodeEncoding encoding;\n        private readonly int level;\n        private readonly string category;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class.\n        /// </summary>\n        public DebuggerWriter()\n#if NETCORE\n            : this(0, string.Empty)\n#else\n            : this(0, Debugger.DefaultCategory)\n#endif\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level and category.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        public DebuggerWriter(int level, string category)\n            : this(level, category, CultureInfo.CurrentCulture)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level, category and format provider.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        /// <param name=\"formatProvider\">An <see cref=\"IFormatProvider\"/> object that controls formatting.</param>\n        public DebuggerWriter(int level, string category, IFormatProvider formatProvider)\n            : base(formatProvider)\n        {\n            this.level = level;\n            this.category = category;\n            this.isOpen = true;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            isOpen = false;\n            base.Dispose(disposing);\n        }\n\n        public override void Write(char value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n#if !NETCORE\n            Debugger.Log(level, category, value.ToString());\n#endif\n        }\n\n        public override void Write(string value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (value != null)\n            {\n#if !NETCORE\n                Debugger.Log(level, category, value);\n#endif\n            }\n        }\n\n        public override void Write(char[] buffer, int index, int count)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (buffer == null || index < 0 || count < 0 || buffer.Length - index < count)\n            {\n                base.Write(buffer, index, count); // delegate throw exception to base class\n            }\n#if !NETCORE\n            Debugger.Log(level, category, new string(buffer, index, count));\n#endif\n        }\n\n        public override Encoding Encoding\n        {\n            get\n            {\n                if (encoding == null)\n                {\n                    encoding = new UnicodeEncoding(false, false);\n                }\n                return encoding;\n            }\n        }\n\n        public int Level\n        {\n            get { return level; }\n        }\n\n        public string Category\n        {\n            get { return category; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/Common/EntitiesTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    [TestClass]\n    public class EntitiesTests\n    {\n        [TestMethod]\n        public void InstantiateEntities_WithNull_SuccessfullyCreatesEmptyCollectionProperties()\n        {\n            var emptyEntities = new Entities(null);\n\n            Assert.IsNotNull(emptyEntities);\n            Assert.IsNotNull(emptyEntities.HashTagEntities);\n            Assert.IsFalse(emptyEntities.HashTagEntities.Any());\n            Assert.IsNotNull(emptyEntities.MediaEntities);\n            Assert.IsFalse(emptyEntities.MediaEntities.Any());\n            Assert.IsNotNull(emptyEntities.SymbolEntities);\n            Assert.IsFalse(emptyEntities.SymbolEntities.Any());\n            Assert.IsNotNull(emptyEntities.UrlEntities);\n            Assert.IsFalse(emptyEntities.UrlEntities.Any());\n            Assert.IsNotNull(emptyEntities.UserMentionEntities);\n            Assert.IsFalse(emptyEntities.UserMentionEntities.Any());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/Common/L2TAssert.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    class L2TAssert\n    {\n        public static async Task<T> Throws<T>(Func<Task> task) \n            where T : Exception\n        {\n            try\n            {\n                await task();\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(T));\n                return (T)ex;\n            }\n\n            if (typeof(T).Equals(new Exception().GetType()))\n                Assert.Fail(\"Expected exception but no exception was thrown.\");\n            else\n                Assert.Fail(\n                    string.Format(\n                        \"Expected exception of type {0} but no exception was thrown.\", \n                        typeof(T)));\n\n            return null;\n        }\n\n        public static T Throws<T>(Action task)\n            where T : Exception\n        {\n            try\n            {\n                task();\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(T));\n                return (T)ex;\n            }\n\n            if (typeof(T).Equals(new Exception().GetType()))\n                Assert.Fail(\"Expected exception but no exception was thrown.\");\n            else\n                Assert.Fail(\n                    string.Format(\n                        \"Expected exception of type {0} but no exception was thrown.\",\n                        typeof(T)));\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/Common/TestCulture.cs",
    "content": "﻿#if !NETCORE\nusing System.Configuration;\n#endif\nusing System.Globalization;\nusing System.Threading;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    public class TestCulture\n    {\n        public static void SetCulture()\n        {\n#if NETCORE\n            string culture = string.Empty;\n            var cultureInfo = new CultureInfo(culture);\n            CultureInfo.CurrentCulture = cultureInfo;\n#else\n            string culture = ConfigurationManager.AppSettings[\"culture\"];\n            var cultureInfo = new CultureInfo(culture);\n            Thread.CurrentThread.CurrentCulture = cultureInfo;\n            Thread.CurrentThread.CurrentUICulture = cultureInfo;\n#endif\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/Common/TwitterExtensionsTests.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitterPcl.Tests.Common\n{\n    public class TwitterExtensionsTests\n    {\n        public TwitterExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/DirectMessageEventsTests/DirectMessageEventsCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class DirectMessageEventsCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public DirectMessageEventsCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void DirectMessageRequestProcessor_Works_With_Actions()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>();\n\n            Assert.IsInstanceOfType(dmReqProc, typeof(IRequestProcessorWithAction<DirectMessageEvents>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(DirectMessageEventsResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<DirectMessageEventsValue>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithRecipientID_ReturnsCreatedDM()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            DirectMessageEvents dmEvt = await ctx.NewDirectMessageEventAsync(RecipientID, Text);\n\n            Assert.IsNotNull(dmEvt);\n            DirectMessageEventsValue dmVal = dmEvt.Value;\n            Assert.IsNotNull(dmVal);\n            DMEvent evt = dmVal.DMEvent;\n            Assert.IsNotNull(evt);\n            Assert.AreEqual(\"message_create\", evt.Type);\n            Assert.AreEqual(\"917929712638246916\", evt.ID);\n            Assert.AreEqual(\"1507686472459\", evt.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 10, 11, 01, 47, 52, 459), evt.CreatedAt);\n            DirectMessageCreate mc = evt.MessageCreate;\n            Assert.IsNotNull(mc);\n            Assert.AreEqual(\"15411837\", mc.SenderID);\n            DirectMessageTarget tgt = mc.Target;\n            Assert.IsNotNull(tgt);\n            Assert.AreEqual(\"16761255\", tgt.RecipientID);\n            DirectMessageData md = mc.MessageData;\n            Assert.IsNotNull(md);\n            Assert.AreEqual(\n                \"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https://t.co/ikGq2AnAir and https://t.co/nLvwwjz40q on 10/10/2017 6:47:46 PM!'\", \n                md.Text);\n            Entities ent = md.Entities;\n            Assert.IsNotNull(ent);\n            List<HashTagEntity> hashtags = ent.HashTagEntities;\n            Assert.IsNotNull(hashtags);\n            Assert.AreEqual(2, hashtags.Count);\n            HashTagEntity ht1 = hashtags[0];\n            Assert.IsNotNull(ht1);\n            Assert.AreEqual(\"TwitterAPI\", ht1.Text);\n            int[] ht1i = ht1.Indices;\n            Assert.IsNotNull(ht1i);\n            Assert.AreEqual(58, ht1i[0]);\n            Assert.AreEqual(69, ht1i[1]);\n            HashTagEntity ht2 = hashtags[1];\n            Assert.IsNotNull(ht2);\n            Assert.AreEqual(\"chatbot\", ht2.Text);\n            int[] ht2i = ht2.Indices;\n            Assert.IsNotNull(ht2i);\n            Assert.AreEqual(70, ht2i[0]);\n            Assert.AreEqual(78, ht2i[1]);\n            List<SymbolEntity> syms = ent.SymbolEntities;\n            Assert.IsNotNull(syms);\n            Assert.AreEqual(2, syms.Count);\n            SymbolEntity sym1 = syms[0];\n            Assert.IsNotNull(sym1);\n            Assert.AreEqual(\"MSFT\", sym1.Text);\n            int[] sym1i = sym1.Indices;\n            Assert.IsNotNull(sym1i);\n            Assert.AreEqual(35, sym1i[0]);\n            Assert.AreEqual(40, sym1i[1]);\n            SymbolEntity sym2 = syms[1];\n            Assert.IsNotNull(sym2);\n            Assert.AreEqual(\"TSLA\", sym2.Text);\n            int[] sym2i = sym2.Indices;\n            Assert.IsNotNull(sym2i);\n            Assert.AreEqual(47, sym2i[0]);\n            Assert.AreEqual(52, sym2i[1]);\n            List<UserMentionEntity> usrs = ent.UserMentionEntities;\n            Assert.IsNotNull(usrs);\n            Assert.AreEqual(2, usrs.Count);\n            UserMentionEntity um1 = usrs[0];\n            Assert.IsNotNull(um1);\n            Assert.AreEqual(\"JoeMayo\", um1.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", um1.Name);\n            Assert.AreEqual(15411837ul, um1.Id);\n            Assert.AreEqual(\"15411837\", um1.IdStr);\n            int[] um1i = um1.Indices;\n            Assert.IsNotNull(um1i);\n            Assert.AreEqual(2, um1i.Length);\n            Assert.AreEqual(8, um1i[0]);\n            Assert.AreEqual(16, um1i[1]);\n            UserMentionEntity um2 = usrs[1];\n            Assert.IsNotNull(um2);\n            Assert.AreEqual(\"Linq2Twitr\", um2.ScreenName);\n            Assert.AreEqual(\"LINQ to Twitr\", um2.Name);\n            Assert.AreEqual(16761255ul, um2.Id);\n            Assert.AreEqual(\"16761255\", um2.IdStr);\n            int[] um2i = um2.Indices;\n            Assert.IsNotNull(um2i);\n            Assert.AreEqual(2, um2i.Length);\n            Assert.AreEqual(20, um2i[0]);\n            Assert.AreEqual(31, um2i[1]);\n            List<UrlEntity> urls = ent.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(2, urls.Count);\n            UrlEntity url1 = urls[0];\n            Assert.IsNotNull(url1);\n            Assert.AreEqual(\"https://t.co/ikGq2AnAir\", url1.Url);\n            Assert.AreEqual(\"http://bit.ly/2xSJWJk\", url1.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/2xSJWJk\", url1.DisplayUrl);\n            int[] url1i = url1.Indices;\n            Assert.IsNotNull(url1i);\n            Assert.AreEqual(2, url1i.Length);\n            Assert.AreEqual(82, url1i[0]);\n            Assert.AreEqual(105, url1i[1]);\n            UrlEntity url2 = urls[1];\n            Assert.IsNotNull(url2);\n            Assert.AreEqual(\"https://t.co/nLvwwjz40q\", url2.Url);\n            Assert.AreEqual(\"http://amzn.to/2gD09X6\", url2.ExpandedUrl);\n            Assert.AreEqual(\"amzn.to/2gD09X6\", url2.DisplayUrl);\n            int[] url2i = url2.Indices;\n            Assert.IsNotNull(url2i);\n            Assert.AreEqual(2, url2i.Length);\n            Assert.AreEqual(110, url2i[0]);\n            Assert.AreEqual(133, url2i[1]);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.NewDirectMessageEventAsync(RecipientID, Text);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.NewDirectMessageEventAsync(RecipientID, Text);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<DirectMessageEventsValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithZeroRecipientID_Throws()\n        {\n            const int RecipientID = 0;\n            const string Text = \"Test Text\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageEventAsync(RecipientID, Text));\n\n            Assert.AreEqual(\"recipientID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithNullText_Throws()\n        {\n            const int RecipientID = 1;\n            const string Text = null;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageEventAsync(RecipientID, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithEmptyText_Throws()\n        {\n            const int RecipientID = 1;\n            const string Text = \"\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageEventAsync(RecipientID, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteDirectMessageEventsAsync_WithValidParameters_HasAnEmptyRawResult()\n        {\n            const ulong DirectMessageID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteDirectMessageEventAsync(DirectMessageID);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteDirectMessageEventsAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong DirectMessageID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteDirectMessageEventAsync(DirectMessageID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/destroy.json?id=1\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteDirectMessageEventsAsync_WithZeroDirectMessageID_Throws()\n        {\n            const int DirectMessageID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteDirectMessageEventAsync(DirectMessageID));\n\n            Assert.AreEqual(\"directMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RequestQuickReplyOptionsAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"What is your choice?\";\n            List<QuickReplyOption> options = BuildOptions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestQuickReplyOptionsAsync(RecipientID, Text, options);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task RequestQuickReplyOptionsAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"What is your choice?\";\n            List<QuickReplyOption> options = BuildOptions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestQuickReplyOptionsAsync(RecipientID, Text, options);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<DirectMessageEventsValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        static List<QuickReplyOption> BuildOptions()\n        {\n            return new List<QuickReplyOption>\n            {\n                new QuickReplyOption\n                {\n                    Label = \"Option 1\",\n                    Description = \"Description for the first option.\",\n                    Metadata = \"abc001\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 2\",\n                    Description = \"Description for the second option.\",\n                    Metadata = \"abc002\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 3\",\n                    Description = \"Description for the third option.\",\n                    Metadata = \"abc003\"\n                },\n            };\n        }\n\n        [TestMethod]\n        public async Task RequestButtonChoiceAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Where would you like to go?\";\n            List<CallToAction> ctas = BuildCallToActions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestButtonChoiceAsync(RecipientID, Text, ctas);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task RequestButtonChoiceAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Where would you like to go?\";\n            List<CallToAction> ctas = BuildCallToActions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestButtonChoiceAsync(RecipientID, Text, ctas);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<DirectMessageEventsValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        static List<CallToAction> BuildCallToActions()\n        {\n            return new List<CallToAction>\n            {\n                new CallToAction\n                {\n                    Label = \"Visit LINQ to Twitter Website\",\n                    Url = \"https://github.com/JoeMayo/LinqToTwitter\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @JoeMayo on Twitter\",\n                    Url = \"https://twitter.com/JoeMayo\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @Linq2Twitr on Twitter\",\n                    Url = \"https://twitter.com/Linq2Twitr\",\n                    Type = \"web_url\"\n                }\n            };\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithValidParameters_HasAnEmptyRawResult()\n        {\n            const ulong LastReadEventID = 1;\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.MarkReadAsync(LastReadEventID, RecipientID);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong LastReadEventID = 1;\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.MarkReadAsync(LastReadEventID, RecipientID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/direct_messages/mark_read.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithZeroLastReadEventID_Throws()\n        {\n            const ulong LastReadEventID = 0;\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.MarkReadAsync(LastReadEventID, RecipientID));\n\n            Assert.AreEqual(\"lastReadEventID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithZeroRecipientID_Throws()\n        {\n            const ulong LastReadEventID = 1;\n            const ulong RecipientID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.MarkReadAsync(LastReadEventID, RecipientID));\n\n            Assert.AreEqual(\"recipientID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task IndicateTypingAsync_WithValidParameters_HasAnEmptyRawResult()\n        {\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.IndicateTypingAsync(RecipientID);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task IndicateTypingAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.IndicateTypingAsync(RecipientID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/direct_messages/indicate_typing.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task IndicateTypingAsync_WithZeroRecipientID_Throws()\n        {\n            const ulong RecipientID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.IndicateTypingAsync(RecipientID));\n\n            Assert.AreEqual(\"recipientID\", ex.ParamName);\n        }\n\n        #region Response Messages\n\n        const string DirectMessageEventsResponse = @\"{\n\t\"\"event\"\": {\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"917929712638246916\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507686472459\"\",\n\t\t\"\"message_create\"\": {\n            \"\"target\"\": {\n                \"\"recipient_id\"\": \"\"16761255\"\"\n\n            },\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"message_data\"\": {\n                \"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/10\\/2017 6:47:46 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n                    \"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n\n                    },\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n    }],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/DirectMessageEventsTests/DirectMessageEventsRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Newtonsoft.Json.Linq;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class DirectMessageEventsRequestProcessorTests\n    {\n        public DirectMessageEventsRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithShowType_ConstructsUrl()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/events/show.json?id=1\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageEventsType.Show).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"1\" }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithListType_ConstructsUrl()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/events/list.json?count=2&cursor=ABC123\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageEventsType.List).ToString(CultureInfo.InvariantCulture) },\n                        { \"Count\", \"2\" },\n                        { \"Cursor\", \"ABC123\" }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForShowWithoutID_Throws()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageEventsType.Show).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithEmptyResults_ReturnsEmptyCollection()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(dms.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForShow_HandlesSingleResult()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> \n            { \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.Show\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            Assert.IsNotNull(dms?.SingleOrDefault());\n\n            DirectMessageEvents dmEvt = dms.First();\n\n            Assert.IsNotNull(dmEvt);\n            DirectMessageEventsValue dmVal = dmEvt.Value;\n            Assert.IsNotNull(dmVal);\n            DMEvent evt = dmVal.DMEvent;\n            Assert.IsNotNull(evt);\n            Assert.AreEqual(\"message_create\", evt.Type);\n            Assert.AreEqual(\"917929712638246916\", evt.ID);\n            Assert.AreEqual(\"1507686472459\", evt.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 10, 11, 01, 47, 52, 459), evt.CreatedAt);\n            DirectMessageCreate mc = evt.MessageCreate;\n            Assert.IsNotNull(mc);\n            Assert.AreEqual(\"15411837\", mc.SenderID);\n            Assert.AreEqual(\"472356\", mc.SourceAppID);\n            DirectMessageTarget tgt = mc.Target;\n            Assert.IsNotNull(tgt);\n            Assert.AreEqual(\"16761255\", tgt.RecipientID);\n            DirectMessageData md = mc.MessageData;\n            Assert.IsNotNull(md);\n            Assert.AreEqual(\n                \"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https://t.co/ikGq2AnAir and https://t.co/nLvwwjz40q on 10/10/2017 6:47:46 PM!'\",\n                md.Text);\n            Entities ent = md.Entities;\n            Assert.IsNotNull(ent);\n            List<HashTagEntity> hashtags = ent.HashTagEntities;\n            Assert.IsNotNull(hashtags);\n            Assert.AreEqual(2, hashtags.Count);\n            HashTagEntity ht1 = hashtags[0];\n            Assert.IsNotNull(ht1);\n            Assert.AreEqual(\"TwitterAPI\", ht1.Text);\n            int[] ht1i = ht1.Indices;\n            Assert.IsNotNull(ht1i);\n            Assert.AreEqual(58, ht1i[0]);\n            Assert.AreEqual(69, ht1i[1]);\n            HashTagEntity ht2 = hashtags[1];\n            Assert.IsNotNull(ht2);\n            Assert.AreEqual(\"chatbot\", ht2.Text);\n            int[] ht2i = ht2.Indices;\n            Assert.IsNotNull(ht2i);\n            Assert.AreEqual(70, ht2i[0]);\n            Assert.AreEqual(78, ht2i[1]);\n            List<SymbolEntity> syms = ent.SymbolEntities;\n            Assert.IsNotNull(syms);\n            Assert.AreEqual(2, syms.Count);\n            SymbolEntity sym1 = syms[0];\n            Assert.IsNotNull(sym1);\n            Assert.AreEqual(\"MSFT\", sym1.Text);\n            int[] sym1i = sym1.Indices;\n            Assert.IsNotNull(sym1i);\n            Assert.AreEqual(35, sym1i[0]);\n            Assert.AreEqual(40, sym1i[1]);\n            SymbolEntity sym2 = syms[1];\n            Assert.IsNotNull(sym2);\n            Assert.AreEqual(\"TSLA\", sym2.Text);\n            int[] sym2i = sym2.Indices;\n            Assert.IsNotNull(sym2i);\n            Assert.AreEqual(47, sym2i[0]);\n            Assert.AreEqual(52, sym2i[1]);\n            List<UserMentionEntity> usrs = ent.UserMentionEntities;\n            Assert.IsNotNull(usrs);\n            Assert.AreEqual(2, usrs.Count);\n            UserMentionEntity um1 = usrs[0];\n            Assert.IsNotNull(um1);\n            Assert.AreEqual(\"JoeMayo\", um1.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", um1.Name);\n            Assert.AreEqual(15411837ul, um1.Id);\n            Assert.AreEqual(\"15411837\", um1.IdStr);\n            int[] um1i = um1.Indices;\n            Assert.IsNotNull(um1i);\n            Assert.AreEqual(2, um1i.Length);\n            Assert.AreEqual(8, um1i[0]);\n            Assert.AreEqual(16, um1i[1]);\n            UserMentionEntity um2 = usrs[1];\n            Assert.IsNotNull(um2);\n            Assert.AreEqual(\"Linq2Twitr\", um2.ScreenName);\n            Assert.AreEqual(\"LINQ to Twitr\", um2.Name);\n            Assert.AreEqual(16761255ul, um2.Id);\n            Assert.AreEqual(\"16761255\", um2.IdStr);\n            int[] um2i = um2.Indices;\n            Assert.IsNotNull(um2i);\n            Assert.AreEqual(2, um2i.Length);\n            Assert.AreEqual(20, um2i[0]);\n            Assert.AreEqual(31, um2i[1]);\n            List<UrlEntity> urls = ent.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(2, urls.Count);\n            UrlEntity url1 = urls[0];\n            Assert.IsNotNull(url1);\n            Assert.AreEqual(\"https://t.co/ikGq2AnAir\", url1.Url);\n            Assert.AreEqual(\"http://bit.ly/2xSJWJk\", url1.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/2xSJWJk\", url1.DisplayUrl);\n            int[] url1i = url1.Indices;\n            Assert.IsNotNull(url1i);\n            Assert.AreEqual(2, url1i.Length);\n            Assert.AreEqual(82, url1i[0]);\n            Assert.AreEqual(105, url1i[1]);\n            UrlEntity url2 = urls[1];\n            Assert.IsNotNull(url2);\n            Assert.AreEqual(\"https://t.co/nLvwwjz40q\", url2.Url);\n            Assert.AreEqual(\"http://amzn.to/2gD09X6\", url2.ExpandedUrl);\n            Assert.AreEqual(\"amzn.to/2gD09X6\", url2.DisplayUrl);\n            int[] url2i = url2.Indices;\n            Assert.IsNotNull(url2i);\n            Assert.AreEqual(2, url2i.Length);\n            Assert.AreEqual(110, url2i[0]);\n            Assert.AreEqual(133, url2i[1]);\n            JObject app = dmVal.Apps;\n            JObject appDetail = app.Value<JObject>(\"472356\");\n            Assert.AreEqual(\"472356\", appDetail.Value<string>(\"id\"));\n            Assert.AreEqual(\"LINQ to Tweeter\", appDetail.Value<string>(\"name\"));\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", appDetail.Value<string>(\"url\"));\n        }\n        \n        [TestMethod]\n        public void ProcessResults_ForList_HandlesMultipleResults()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.List\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQueryMultipleResponses);\n\n            Assert.IsNotNull(dms?.SingleOrDefault());\n\n            DirectMessageEvents dmEvt = dms.First();\n\n            Assert.IsNotNull(dmEvt);\n            DirectMessageEventsValue dmVal = dmEvt.Value;\n            Assert.IsNotNull(dmVal);\n            List<DMEvent> evts = dmVal.DMEvents;\n            Assert.IsNotNull(evts);\n            Assert.AreEqual(2, evts.Count);\n            Assert.AreEqual(\"OTE3ODE0NTUzMzExOTMyNDIy\", dmVal.NextCursor);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithShowQuery_ReplacesInputParams()\n        {\n            const ulong ID = 5;\n\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.Show,\n                ID = ID\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            DirectMessageEvents dm = dms.First();\n\n            Assert.AreEqual(ID, dm.ID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithListQuery_ReplacesInputParams()\n        {\n            const int Count = 4;\n            const string Cursor = \"ABC123\";\n\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.List,\n                Count = Count,\n                Cursor = Cursor\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQueryMultipleResponses);\n\n            DirectMessageEvents dm = dms.First();\n\n            Assert.AreEqual(Count, dm.Count);\n            Assert.AreEqual(Cursor, dm.Cursor);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>();\n            Expression<Func<DirectMessageEvents, bool>> expression =\n                dm =>\n                    dm.Type == DirectMessageEventsType.Show &&\n                    dm.Count == 1 &&\n                    dm.Cursor == \"ABC123\" &&\n                    dm.ID == 456;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = dmReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)DirectMessageEventsType.Show).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"ABC123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithMissingType_Throws()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParamDictionary_Throws()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        const string TestQuerySingleResponse = @\"{\n\t\"\"event\"\": {\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"917929712638246916\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507686472459\"\",\n\t\t\"\"message_create\"\": {\n            \"\"target\"\": {\n                \"\"recipient_id\"\": \"\"16761255\"\"\n\n            },\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\t\"\"message_data\"\": {\n                \"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/10\\/2017 6:47:46 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n                    \"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n\n                    },\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n    }],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        public const string TestQueryMultipleResponses = @\"{\n\t\"\"events\"\": [{\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"918326071484805124\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507780971772\"\",\n\t\t\"\"message_create\"\": {\n\t\t\t\"\"target\"\": {\n\t\t\t\t\"\"recipient_id\"\": \"\"16761255\"\"\n\t\t\t},\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\t\"\"message_data\"\": {\n\t\t\t\t\"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/11\\/2017 9:02:49 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n    },\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n}],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"918309059970842629\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507776915911\"\",\n\t\t\"\"message_create\"\": {\n\t\t\t\"\"target\"\": {\n\t\t\t\t\"\"recipient_id\"\": \"\"16761255\"\"\n\t\t\t},\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\t\"\"message_data\"\": {\n\t\t\t\t\"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/11\\/2017 7:55:13 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}],\n\t\"\"apps\"\": {\n\t\t\"\"268278\"\": {\n\t\t\t\"\"id\"\": \"\"268278\"\",\n\t\t\t\"\"name\"\": \"\"Twitter Web Client\"\",\n\t\t\t\"\"url\"\": \"\"http:\\/\\/twitter.com\"\"\n\t\t},\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t},\n\t\"\"next_cursor\"\": \"\"OTE3ODE0NTUzMzExOTMyNDIy\"\"\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/FavoritesTests/FavoritesCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesCommandsTests\n    {\n        public FavoritesCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void CreateFavoritesRequestProcessor_Works_With_Actions()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            Assert.IsInstanceOfType(favReqProc, typeof(IRequestProcessorWithAction<Favorites>));\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_WithValidID_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            Status actual = await ctx.CreateFavoriteAsync(Id);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1ul;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateFavoriteAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_Throws_On_Zero_ID()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateFavoriteAsync(0));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_WithValidID_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            Status actual = await ctx.DestroyFavoriteAsync(Id, true);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1ul;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyFavoriteAsync(Id, true);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_Throws_On_Zero_ID()\n        {\n            const ulong ID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFavoriteAsync(ID, true));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/FavoritesTests/FavoritesCtorTests.cs",
    "content": "﻿using System;\n\nusing LinqToTwitter;\n\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesCtorTests\n    {\n        public FavoritesCtorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Favorites_Ctor_Parses_JsonData()\n        {\n            var favJson = JsonMapper.ToObject(TwitterResponse);\n\n            var favorite = new Favorites(favJson);\n\n            Assert.AreEqual(1234ul, favorite.InReplyToStatusID);\n            Assert.AreEqual(new DateTimeOffset(2012, 4, 5, 16, 44, 8, new TimeSpan(0)).DateTime, favorite.CreatedAt);\n            Assert.IsFalse(favorite.Truncated);\n            Assert.AreEqual(false, favorite.Retweeted);\n            Assert.IsNotNull(favorite.User);\n        }\n\n        const string TwitterResponse = @\"\n   {\n      \"\"in_reply_to_status_id_str\"\":\"\"1234\"\",\n      \"\"in_reply_to_status_id\"\":1234,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":\"\"5678\"\",\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      }\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/FavoritesTests/FavoritesRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesRequestProcessorTests\n    {\n        public FavoritesRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            List<Favorites> favorites = favReqProc.ProcessResults(TwitterResponse);\n\n            Assert.AreEqual(2, favorites.Count());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var favorites = reqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(favorites.Any());\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Favorites, bool>> expression =\n                fav =>\n                    fav.Type == FavoritesType.Favorites &&\n                    fav.UserID == 123ul &&\n                    fav.ScreenName == \"JoeMayo\" &&\n                    fav.Count == 100 &&\n                    fav.SinceID == 456 &&\n                    fav.MaxID == 789 &&\n                    fav.IncludeEntities == true &&\n                    fav.TweetMode == TweetMode.Extended;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = favReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.Type), ((int)FavoritesType.Favorites).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.UserID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.ScreenName), \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.Count), \"100\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.SinceID), \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.MaxID), \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.IncludeEntities), \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.TweetMode), ((int)TweetMode.Extended).ToString(CultureInfo.InvariantCulture))));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Favorites_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/favorites/list.json?user_id=123&screen_name=JoeMayo&count=100&since_id=456&max_id=789&include_entities=true&tweet_mode=extended\";\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Favorites.Type), FavoritesType.Favorites.ToString() },\n                    { nameof(Favorites.UserID), \"123\" },\n                    { nameof(Favorites.ScreenName), \"JoeMayo\" },\n                    { nameof(Favorites.Count), \"100\" },\n                    { nameof(Favorites.SinceID), \"456\" },\n                    { nameof(Favorites.MaxID), \"789\" },\n                    { nameof(Favorites.IncludeEntities), true.ToString() },\n                    { nameof(Favorites.TweetMode), ((int)TweetMode.Extended).ToString() }\n                };\n\n            Request req = favReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/favorites/list.json?user_id=123&screen_name=JoeMayo&count=100&since_id=456&max_id=789&include_entities=true&tweet_mode=extended\";\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Favorites.Type), FavoritesType.Favorites.ToString() },\n                    { nameof(Favorites.UserID), \"123\" },\n                    { nameof(Favorites.ScreenName), \"JoeMayo\" },\n                    { nameof(Favorites.Count), \"100\" },\n                    { nameof(Favorites.SinceID), \"456\" },\n                    { nameof(Favorites.MaxID), \"789\" },\n                    { nameof(Favorites.IncludeEntities), true.ToString() },\n                    { nameof(Favorites.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n                };\n\n            Request req = favReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Param()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => favReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Params_Dictionary()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => favReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"parameters\", ex.ParamName);\n        }\n\n        const string TwitterResponse = @\"[\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":41,\n      \"\"favorited\"\":true,\n      \"\"id\"\":187943716558864384,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Windows Internals 6th Edition Part 1 (on Win7\\/Server 2008R2) is now available for purchase! http:\\/\\/t.co\\/F8vE1LnC\"\"\n   },\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Mar 22 15:34:00 +0000 2012\"\",\n      \"\"id_str\"\":\"\"182852636905701377\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"id\"\":14457688,\n         \"\"statuses_count\"\":8803,\n         \"\"profile_sidebar_fill_color\"\":\"\"e9e9dc\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_background_color\"\":\"\"1574a4\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Andrew Brust\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"1574a4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/bit.ly\\/bigondata\"\",\n         \"\"created_at\"\":\"\"Mon Apr 21 02:57:59 +0000 2008\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Founder\\/CEO, Blue Badge Insights; ZDNet Big Data blogger; RedDevNews.com columnist; co-author Programming Microsoft SQL Server 2012; Microsoft tech influencer.\"\",\n         \"\"id_str\"\":\"\"14457688\"\",\n         \"\"profile_text_color\"\":\"\"5e6466\"\",\n         \"\"time_zone\"\":\"\"Eastern Time (US & Canada)\"\",\n         \"\"following\"\":true,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"1c4273\"\",\n         \"\"location\"\":\"\"New York, NY\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":111,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":720,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"followers_count\"\":1743,\n         \"\"screen_name\"\":\"\"andrewbrust\"\",\n         \"\"profile_background_tile\"\":false\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":true,\n      \"\"id\"\":182852636905701377,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Check out my #ZDNet blog post - Big Data\\u2019s Ground Floor Consulting Opportunity - http:\\/\\/t.co\\/PxDMPRJT\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/FriendshipTests/FriendshipCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.FriendshipTests\n{\n    [TestClass]\n    class FriendshipCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public FriendshipCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<TEntity>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void FriendshipRequestProcessor_Works_With_Actions()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsInstanceOfType(freindReqProc, typeof(IRequestProcessorWithAction<Friendship>));\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_WithValidInput_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = await ctx.CreateFriendshipAsync(ScreenName, Follow);\n\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_RawResult_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            await ctx.CreateFriendshipAsync(ScreenName, Follow);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_Throws_On_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateFriendshipAsync(UserID, Follow));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_WithValidScreenName_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = await ctx.DestroyFriendshipAsync(ScreenName);\n\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            await ctx.DestroyFriendshipAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Empty_ScreenName()\n        {\n            string screenName = string.Empty;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(screenName));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Null_ScreenName()\n        {\n            string screenName = null;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(screenName));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(UserID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Calls_Execute()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            await ctx.UpdateFriendshipSettingsAsync(\"Linq2Tweeter\", true, true);\n\n            execMock.Verify(exec => exec.PostFormUrlEncodedToTwitterAsync<Friendship>(\n                It.IsAny<string>(),\n                \"https://api.twitter.com/1.1/friendships/update.json\",\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            await ctx.UpdateFriendshipSettingsAsync(\"Linq2Tweeter\", true, true);\n\n            Assert.AreEqual(RelationshipResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Null_ScreenName()\n        {\n            string screenName = null;\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(screenName, true, true));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Empty_ScreenName()\n        {\n            const string ScreenName = \"\";\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(ScreenName, true, true));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(UserID, true, true));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":15411837,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"followers_count\"\":1101,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"listed_count\"\":113,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":true,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"statuses_count\"\":1907,\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"friends_count\"\":210,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"favourites_count\"\":44,\n   \"\"status\"\":{\n      \"\"retweeted\"\":true,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"possibly_sensitive_editable\"\":true,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":3,\n      \"\"id_str\"\":\"\"196991337554378752\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Apr 30 15:56:09 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196991337554378752,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Funny - http:\\/\\/t.co\\/yZW2Sbmi :)\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false\n      }\n   }\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/FriendshipTests/FriendshipRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.FriendshipTests\n{\n    [TestClass]\n    public class FriendshipRequestProcessorTests\n    {\n        public FriendshipRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void FriendshipRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsInstanceOfType(freindReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Translates_Relationships_From_LookupQuery()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Lookup };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var relations = friends.Single().Relationships;\n            Assert.IsNotNull(relations);\n            Assert.IsNotNull(relations.SingleOrDefault());\n            var connections = relations.Single().Connections;\n            Assert.IsNotNull(connections);\n            Assert.IsNotNull(connections.SingleOrDefault());\n            var connection = connections.First();\n            Assert.IsNotNull(connection);\n            Assert.AreEqual(\"following\", connection);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Show };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(RelationshipResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var tgtRel = friend.TargetRelationship;\n            Assert.IsNotNull(tgtRel);\n            Assert.AreEqual(\"JoeMayo\", tgtRel.ScreenName);\n            Assert.IsTrue(tgtRel.FollowedBy);\n            Assert.AreEqual(15411837ul, tgtRel.ID);\n            Assert.IsFalse(tgtRel.Following);\n            var srcRel = friend.SourceRelationship;\n            Assert.IsNotNull(srcRel);\n            Assert.AreEqual(\"Linq2Tweeter\", srcRel.ScreenName);\n            Assert.IsTrue(srcRel.RetweetsWanted);\n            Assert.IsFalse(srcRel.AllReplies);\n            Assert.IsFalse(srcRel.MarkedSpam);\n            Assert.IsFalse(srcRel.FollowedBy);\n            Assert.AreEqual(16761255ul, srcRel.ID);\n            Assert.IsFalse((bool)srcRel.Blocking);\n            Assert.IsTrue((bool)srcRel.NotificationsEnabled);\n            Assert.IsTrue(srcRel.Following);\n            Assert.IsFalse(srcRel.CanDm);\n            Assert.IsTrue(srcRel.Muting);\n        }\n\n        void TestParsingIds(FriendshipType friendType)\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = friendType };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(IdsResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var cursor = friend.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n            var idList = friend.IDInfo;\n            Assert.IsNotNull(idList);\n            var idsCursor = idList.CursorMovement;\n            Assert.IsNotNull(idsCursor);\n            Assert.AreEqual(2, idsCursor.Previous);\n            Assert.AreEqual(1, idsCursor.Next);\n            var ids = idList.IDs;\n            Assert.IsNotNull(ids);\n            Assert.IsTrue(ids.Any());\n            var id = ids.First();\n            Assert.AreEqual(5676142ul, id);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Incoming_Response()\n        {\n            TestParsingIds(FriendshipType.Incoming);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Outgoing_Response()\n        {\n            TestParsingIds(FriendshipType.Outgoing);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_NoRetweetIDs_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.NoRetweetIDs };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(NoRetweetIDsResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var idList = friend.IDInfo;\n            Assert.IsNotNull(idList);\n            var ids = idList.IDs;\n            Assert.IsNotNull(ids);\n            Assert.IsTrue(ids.Any());\n            var id = ids.First();\n            Assert.AreEqual(15411837ul, id);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<Friendship> friendships = reqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(friendships.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_FriendsListOrFollowersList_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.FriendsList };\n\n            List<Friendship> friendshipList = friendReqProc.ProcessResults(FriendsFollowersResponse);\n\n            Assert.IsNotNull(friendshipList);\n            Assert.IsNotNull(friendshipList.SingleOrDefault());\n            var friendship = friendshipList.Single();\n            Assert.IsNotNull(friendship);\n            var users = friendship.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            var user = users.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"93604443\", user.UserIDResponse);\n         }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Params()\n        {\n            const ulong SrcUsrID = 1;\n            const string SrcScrNm = \"JoeMayo\";\n            const ulong TgtUsrID = 2;\n            const string TgtScrNm = \"MayMayo\";\n            const long Cursor = 123;\n            const int Count = 20;\n            const string ScrNm = \"JoeMayo,MayMayo\";\n            const string UsrID = \"1,2\";\n            const bool SkipStatus = true;\n            const bool IncludeUserEntities = true;\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> \n            { \n                Type = FriendshipType.Lookup,\n                SourceUserID = SrcUsrID,\n                SourceScreenName = SrcScrNm,\n                TargetUserID = TgtUsrID,\n                TargetScreenName = TgtScrNm,\n                Count = Count,\n                Cursor = Cursor,\n                ScreenName = ScrNm,\n                UserID = UsrID,\n                SkipStatus = SkipStatus,\n                IncludeUserEntities = IncludeUserEntities\n            };\n\n            List<Friendship> friendships = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.IsNotNull(friendships);\n            Assert.IsTrue(friendships.Any());\n            var friendship = friendships.First();\n            Assert.IsNotNull(friendship);\n            Assert.AreEqual(FriendshipType.Lookup, friendship.Type);\n            Assert.AreEqual(SrcUsrID, friendship.SourceUserID);\n            Assert.AreEqual(SrcScrNm, friendship.SourceScreenName);\n            Assert.AreEqual(TgtUsrID, friendship.TargetUserID);\n            Assert.AreEqual(TgtScrNm, friendship.TargetScreenName);\n            Assert.AreEqual(Count, friendship.Count);\n            Assert.AreEqual(Cursor, friendship.Cursor);\n            Assert.AreEqual(ScrNm, friendship.ScreenName);\n            Assert.AreEqual(UsrID, friendship.UserID);\n            Assert.AreEqual(SkipStatus, friendship.SkipStatus);\n            Assert.AreEqual(IncludeUserEntities, friendship.IncludeUserEntities);\n        }\n\n        [TestMethod]\n        public void ProcessActionResult_Translates_Relationships_From_UpdateSettings()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Friendship friend = friendReqProc.ProcessActionResult(RelationshipResponse, FriendshipAction.Update);\n\n            var srcRel = friend.SourceRelationship;\n            Assert.AreEqual(true, srcRel.RetweetsWanted);\n            Assert.AreEqual(true, srcRel.NotificationsEnabled);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Friendship, bool>> expression =\n                friend =>\n                         friend.Type == FriendshipType.Show &&\n                         friend.SourceUserID == 1 &&\n                         friend.SourceScreenName == \"Name\" &&\n                         friend.TargetUserID == 2 &&\n                         friend.TargetScreenName == \"Name\" &&\n                         friend.Cursor == -1 &&\n                         friend.ScreenName == \"twitter,joemayo\" &&\n                         friend.UserID == \"123,456\" &&\n                         friend.SkipStatus == true &&\n                         friend.IncludeUserEntities == true &&\n                         friend.Count == 7;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = friendReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)FriendshipType.Show).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceUserID\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceScreenName\", \"Name\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetUserID\", \"2\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetScreenName\", \"Name\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"-1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"twitter,joemayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123,456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"7\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"SourceUserID\", \"123\" },\n                    { \"SourceScreenName\", \"JoeMayo\" },\n                    { \"TargetUserID\", \"456\" },\n                    { \"TargetScreenName\", \"LinqToTweeter\" }\n                };\n            string expected = \"https://api.twitter.com/1.1/friendships/show.json?source_id=123&source_screen_name=JoeMayo&target_id=456&target_screen_name=LinqToTweeter\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_Without_Source_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"friendReqProcUserID\", \"456\" },\n                    { \"friendReqProcScreenName\", \"LinqToTweeter\" }\n                };\n\n            L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_Without_FriendsReqProcUrl()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Show.ToString() },\n                { \"SourceUserID\", \"123\" },\n                { \"SourceScreenName\", \"JoeMayo\" },\n            };\n\n            L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_No_Retweet_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.NoRetweetIDs.ToString() }\n            };\n            string expected = \"http://api.twitter.com/1.1/friendships/no_retweets/ids.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Missing_Type()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters = null;\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Incoming_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Incoming.ToString() }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/incoming.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_With_Cursor_Param_Constructs_Incoming_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Incoming.ToString() },\n                { \"Cursor\", \"-1\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/incoming.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Outgoing_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Outgoing.ToString() }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/outgoing.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_With_Cursor_Param_Constructs_Outgoing_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Outgoing.ToString() },\n                { \"Cursor\", \"-1\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/outgoing.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Returns_Url_For_ScreenName()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                { \"ScreenName\", \"twitter,joemayo\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/lookup.json?screen_name=twitter%2Cjoemayo\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Returns_Url_For_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                { \"UserID\", \"123,456\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/lookup.json?user_id=123%2C456\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                //{ \"ScreenName\", \"twitter,joemayo\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FriendsList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/list.json?user_id=1&screen_name=abc&count=20&cursor=234&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"234\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildFriendListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                //{ \"UserID\", \"1\" },\n                //{ \"ScreenName\", \"abc\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FollowersList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/list.json?user_id=1&screen_name=abc&count=20&cursor=234&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FollowersList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"234\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildFollowerListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                //{ \"UserID\", \"1\" },\n                //{ \"ScreenName\", \"abc\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FollowerIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FollowerIDs).ToString() },\n                        { \"UserID\", \"123\" },\n                        { \"ScreenName\", \"456\" },\n                        { \"Cursor\", \"1\" },\n                        { \"Count\", \"1\" }\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FriendIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FriendIDs).ToString() },\n                        { \"UserID\", \"123\" },\n                        { \"ScreenName\", \"456\" },\n                        { \"Cursor\", \"1\" },\n                        { \"Count\", \"1\" }\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Defaults_Cursor_When_Not_Specified()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?screen_name=JoeMayo&cursor=-1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FriendIDs).ToString() },\n                        { \"ScreenName\", \"JoeMayo\" },\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        const string LookupResponse = @\"[\n   {\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"connections\"\":[\n         \"\"following\"\"\n      ],\n      \"\"id\"\":15411837\n   }\n]\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false,\n         \"\"muting\"\": true\n      }\n   }\n}\";\n\n        const string IdsResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"ids\"\":[\n      5676142\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":1\n}\";\n\n        const string NoRetweetIDsResponse = @\"[\n15411837,\n241594327\n]\";\n\n        const string FriendsFollowersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":93604443,\n         \"\"id_str\"\":\"\"93604443\"\",\n         \"\"name\"\":\"\"Geert van Horrik\"\",\n         \"\"screen_name\"\":\"\"GeertvanHorrik\"\",\n         \"\"location\"\":\"\"Heeze, The Netherlands\"\",\n         \"\"description\"\":\"\"Software Developer and creator of the Catel MVVM framework (see http:\\/\\/catel.codeplex.com)\"\",\n         \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        27\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":212,\n         \"\"friends_count\"\":97,\n         \"\"listed_count\"\":12,\n         \"\"created_at\"\":\"\"Mon Nov 30 10:32:19 +0000 2009\"\",\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":3600,\n         \"\"time_zone\"\":\"\"Amsterdam\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":4431,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 11:10:16 +0000 2012\"\",\n            \"\"id\"\":280993376646598658,\n            \"\"id_str\"\":\"\"280993376646598658\"\",\n            \"\"text\"\":\"\"@FransBouma Dank, ik zocht op changes maar moest queue hebben, kan ik weer verder :-)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":280993183754768384,\n            \"\"in_reply_to_status_id_str\"\":\"\"280993183754768384\"\",\n            \"\"in_reply_to_user_id\"\":67035608,\n            \"\"in_reply_to_user_id_str\"\":\"\"67035608\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"FransBouma\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"FransBouma\"\",\n                     \"\"name\"\":\"\"Frans Bouma\"\",\n                     \"\"id\"\":67035608,\n                     \"\"id_str\"\":\"\"67035608\"\",\n                     \"\"indices\"\":[\n                        0,\n                        11\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":389487039,\n         \"\"id_str\"\":\"\"389487039\"\",\n         \"\"name\"\":\"\"Elizabeth Hulett\"\",\n         \"\"screen_name\"\":\"\"EHulett\"\",\n         \"\"location\"\":\"\"Defuniak Springs\"\",\n         \"\"description\"\":\"\"\"\",\n         \"\"url\"\":null,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":4,\n         \"\"friends_count\"\":10,\n         \"\"listed_count\"\":0,\n         \"\"created_at\"\":\"\"Wed Oct 12 14:16:54 +0000 2011\"\",\n         \"\"favourites_count\"\":1,\n         \"\"utc_offset\"\":null,\n         \"\"time_zone\"\":null,\n         \"\"geo_enabled\"\":false,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":3,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Mon Dec 17 19:47:23 +0000 2012\"\",\n            \"\"id\"\":280761124901765120,\n            \"\"id_str\"\":\"\"280761124901765120\"\",\n            \"\"text\"\":\"\"Can't believe Amanda is 28weeks today.... Lily Rose will be here soon :)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/#!\\/download\\/ipad\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for iPad\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":608455311,\n         \"\"id_str\"\":\"\"608455311\"\",\n         \"\"name\"\":\"\"\\/\\/ mellodev\"\",\n         \"\"screen_name\"\":\"\"mellodev\"\",\n         \"\"location\"\":\"\"Las Vegas, NV\"\",\n         \"\"description\"\":\"\".Net aficionado and Software craftsman. C#, Asp.Net, TSQL, Quartz.Net, WebForms, MVC + WP7. I build Social Office Suite (@SOS) and tweet about #DevLife\"\",\n         \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        46\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":355,\n         \"\"friends_count\"\":1373,\n         \"\"listed_count\"\":20,\n         \"\"created_at\"\":\"\"Thu Jun 14 18:32:56 +0000 2012\"\",\n         \"\"favourites_count\"\":109,\n         \"\"utc_offset\"\":-28800,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":1272,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 21:05:14 +0000 2012\"\",\n            \"\"id\"\":281143104046768129,\n            \"\"id_str\"\":\"\"281143104046768129\"\",\n            \"\"text\"\":\"\"@adamralph Nice background btw! Can't wait to go riding this year!\"\",\n            \"\"source\"\":\"\"web\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":281141527877652480,\n            \"\"in_reply_to_status_id_str\"\":\"\"281141527877652480\"\",\n            \"\"in_reply_to_user_id\"\":5966642,\n            \"\"in_reply_to_user_id_str\"\":\"\"5966642\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"adamralph\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"adamralph\"\",\n                     \"\"name\"\":\"\"Adam Ralph\"\",\n                     \"\"id\"\":5966642,\n                     \"\"id_str\"\":\"\"5966642\"\",\n                     \"\"indices\"\":[\n                        0,\n                        10\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"191134\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/608455311\\/1348679711\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"previous_cursor\"\":0,\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/GeoTests/CoordinateTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class CoordinateTests\n    {\n        public CoordinateTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Coordinate_Ctor_Parses_JsonData()\n        {\n            var coordJson = JsonMapper.ToObject(CoordinateJson);\n\n            var coord = new Coordinate(coordJson);\n\n            Assert.AreEqual(-122.51368188, coord.Longitude);\n            Assert.AreEqual(37.70813196, coord.Latitude);\n        }\n\n        [TestMethod]\n        public void Coordinate_Ctor_Returns_Null_JsonData()\n        {\n            var coord = new Coordinate(null);\n\n            Assert.AreEqual(0, coord.Longitude);\n            Assert.AreEqual(0, coord.Latitude);\n        }\n\n        const string CoordinateJson = @\"[\n                              -122.51368188,\n                              37.70813196\n                           ]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/GeoTests/GeoRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class GeoRequestProcessorTests\n    {\n        public GeoRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n            Expression<Func<Geo, bool>> expression =\n                geo =>\n                    geo.Type == GeoType.Reverse &&\n                    geo.Accuracy == \"10\" &&\n                    geo.Granularity == \"city\" &&\n                    geo.Latitude == 37.78215 &&\n                    geo.Longitude == -122.40060 &&\n                    geo.MaxResults == 10 &&\n                    geo.ID == \"456\" &&\n                    geo.IP == \"168.143.171.180\" &&\n                    geo.Query == \"place\" &&\n                    geo.ContainedWithin == \"abc\" &&\n                    geo.Attribute == \"street_address=123\" &&\n                    geo.PlaceName == \"placeName\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = geoReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)GeoType.Reverse).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Accuracy\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Granularity\", \"city\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", (37.78215).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", (-122.4006).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxResults\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IP\", \"168.143.171.180\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"place\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ContainedWithin\", \"abc\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Attribute\", \"street_address=123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PlaceName\", \"placeName\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Reverse_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/reverse_geocode.json?lat=37.78215&long=-122.4006&accuracy=city&granularity=10&max_results=10\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrlReverseL_WithoutLatLongIPOrQuery_ExpectException()\n        {\n            const string ExpectedLatLongParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedLatLongParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_ID_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/id/7695dd2ec2f86f2b.json\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n                 {\"ID\", \"7695dd2ec2f86f2b\"},\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ID_Without_ID_Throws()\n        {\n            const string ExpectedIDParamName = \"ID\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedIDParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?lat=37.78215&long=-122.4006&query=Twitter%20HQ&ip=168.143.171.180&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrlForSearch_WithQueryButNotLatLongAndIP_ExpectSuccess()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?query=Twitter%20HQ&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 //{\"Latitude\", (37.78215).ToString()},\n                 //{\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 //{\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Search_With_Attribute_Missing_Equals_Symbol_Throws()\n        {\n            const string ExpectedAttributeParam = \"Attribute\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Attribute\", \"street_address\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedAttributeParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Similar_Places_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/similar_places.json?lat=37.78215&long=-122.4006&name=placeName&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_For_Similar_Places_Requires_Lat_And_Long()\n        {\n            const string ExpectedParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 //{\"Latitude\", \"37.78215\"},\n                 //{\"Longitude\", \"-122.40060\"},\n                 {\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_For_Similar_Places_Requires_PlaceName()\n        {\n            const string ExpectedParamName = \"PlaceName\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.SimilarPlaces).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 //{\"PlaceName\", \"placeName\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void GeoRequestProcessor_Processes_Json_Format_Responses()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            Assert.IsInstanceOfType(geoReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_ReverseGeoCode_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            List<Geo> geo = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlacesCount, geo.Single().Places.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_ID_Response()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResultsForID_WithNullGeometry_ExpectSucces()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponseWithNullGeometry);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Search_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            const string ExpectedPlaceFullName = \"SoMa, San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.Search };\n\n            List<Geo> geo = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlacesCount, geo.Single().Places.Count);\n            Assert.AreEqual(ExpectedPlaceFullName, geo.Single().Places.First().FullName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Simlar_Places_Response()\n        {\n            const int ExpectedPlacesCount = 4;\n            const string ExpectedPlaceFullName = \"SoMa, San Francisco\";\n            const string ExpectedToken = \"15f3c6f2b94ba19faee70d9d61aaebee\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.SimilarPlaces };\n\n            List<Geo> geoResponse = geoReqProc.ProcessResults(MultiPlaceResponse);\n\n            Assert.IsNotNull(geoResponse);\n            Assert.IsNotNull(geoResponse.SingleOrDefault());\n            var geo = geoResponse.Single();\n            Assert.AreEqual(ExpectedToken, geo.Token);\n            var places = geo.Places;\n            Assert.IsNotNull(places);\n            Assert.AreEqual(ExpectedPlacesCount, places.Count);\n            Assert.AreEqual(ExpectedPlaceFullName, places.First().FullName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var geo = geoReqProc.ProcessResults(string.Empty);\n\n            Assert.IsNotNull(geo);\n            Assert.IsFalse(geo.Any());\n        }\n\n        const string MultiPlaceResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"token\"\":\"\"15f3c6f2b94ba19faee70d9d61aaebee\"\",\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n\n        const string IDResponse = @\"{\n   \"\"country\"\":\"\"United States\"\",\n   \"\"place_type\"\":\"\"city\"\",\n   \"\"name\"\":\"\"San Francisco\"\",\n   \"\"geometry\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.46628284,\n               37.70813196\n            ],\n            [\n               -122.47088292,\n               37.70823204\n            ],\n            [\n               -122.48518284,\n               37.71123201\n            ],\n            [\n               -122.48948304,\n               37.712232\n            ],\n            [\n               -122.497983,\n               37.71713196\n            ],\n            [\n               -122.49978012,\n               37.71960696\n            ],\n            [\n               -122.50198296,\n               37.723131\n            ],\n            [\n               -122.50787796,\n               37.73529\n            ],\n            [\n               -122.51368188,\n               37.77856803\n            ],\n            [\n               -122.51305692,\n               37.78252398\n            ],\n            [\n               -122.47808292,\n               37.81082799\n            ],\n            [\n               -122.47738308,\n               37.81102797\n            ],\n            [\n               -122.37322716,\n               37.83245301\n            ],\n            [\n               -122.36652288,\n               37.83081303\n            ],\n            [\n               -122.365395,\n               37.82917296\n            ],\n            [\n               -122.36177592,\n               37.82153403\n            ],\n            [\n               -122.35845384,\n               37.81450503\n            ],\n            [\n               -122.377842,\n               37.72782\n            ],\n            [\n               -122.38322616,\n               37.70940303\n            ],\n            [\n               -122.39378208,\n               37.70823096\n            ],\n            [\n               -122.43398184,\n               37.70813196\n            ],\n            [\n               -122.46628284,\n               37.70813196\n            ]\n         ]\n      ]\n   },\n   \"\"bounding_box\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.51368188,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.83245301\n            ],\n            [\n               -122.51368188,\n               37.83245301\n            ]\n         ]\n      ]\n   },\n   \"\"attributes\"\":{\n      \"\"189390:id\"\":\"\"san-francisco-ca\"\",\n      \"\"162772:pop100\"\":\"\"776733\"\",\n      \"\"162772:place_id\"\":\"\"0667000\"\"\n   },\n   \"\"full_name\"\":\"\"San Francisco, CA\"\",\n   \"\"polylines\"\":[\n      \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n   ],\n   \"\"country_code\"\":\"\"US\"\",\n   \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n   \"\"id\"\":\"\"5a110d312052166f\"\",\n   \"\"contained_within\"\":[\n      {\n         \"\"country\"\":\"\"United States\"\",\n         \"\"place_type\"\":\"\"admin\"\",\n         \"\"name\"\":\"\"California\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -124.482003,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     42.009517\n                  ],\n                  [\n                     -124.482003,\n                     42.009517\n                  ]\n               ]\n            ]\n         },\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"California, US\"\",\n         \"\"country_code\"\":\"\"US\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n         \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n      }\n   ]\n}\";\n\n        const string IDResponseWithNullGeometry = @\"{\n\t\"\"id\"\": \"\"5a110d312052166f\"\",\n\t\"\"url\"\": \"\"https:\\/\\/api.twitter.com\\/1.1\\/geo\\/id\\/5a110d312052166f.json\"\",\n\t\"\"place_type\"\": \"\"city\"\",\n\t\"\"name\"\": \"\"San Francisco\"\",\n\t\"\"full_name\"\": \"\"San Francisco, CA\"\",\n\t\"\"country_code\"\": \"\"US\"\",\n\t\"\"country\"\": \"\"United States\"\",\n\t\"\"contained_within\"\": [{\n\t\t\"\"id\"\": \"\"fbd6d2f5a4e4a15e\"\",\n\t\t\"\"url\"\": \"\"https:\\/\\/api.twitter.com\\/1.1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n\t\t\"\"place_type\"\": \"\"admin\"\",\n\t\t\"\"name\"\": \"\"California\"\",\n\t\t\"\"full_name\"\": \"\"California, US\"\",\n\t\t\"\"country_code\"\": \"\"US\"\",\n\t\t\"\"country\"\": \"\"United States\"\",\n\t\t\"\"bounding_box\"\": {\n\t\t\t\"\"type\"\": \"\"Polygon\"\",\n\t\t\t\"\"coordinates\"\": [[[-124.482003,\n\t\t\t32.528832],\n\t\t\t[-124.482003,\n\t\t\t42.009519],\n\t\t\t[-114.131212,\n\t\t\t42.009519],\n\t\t\t[-114.131212,\n\t\t\t32.528832],\n\t\t\t[-124.482003,\n\t\t\t32.528832]]]\n\t\t},\n\t\t\"\"attributes\"\": {\n\t\t\t\n\t\t}\n\t}],\n\t\"\"geometry\"\": null,\n\t\"\"polylines\"\": [],\n\t\"\"bounding_box\"\": {\n\t\t\"\"type\"\": \"\"Polygon\"\",\n\t\t\"\"coordinates\"\": [[[-122.514926,\n\t\t37.708075],\n\t\t[-122.514926,\n\t\t37.833238],\n\t\t[-122.357031,\n\t\t37.833238],\n\t\t[-122.357031,\n\t\t37.708075],\n\t\t[-122.514926,\n\t\t37.708075]]]\n\t},\n\t\"\"attributes\"\": {\n\t\t\"\"162772:pop100\"\": \"\"776733\"\",\n\t\t\"\"162772:place_id\"\": \"\"0667000\"\",\n\t\t\"\"189390:id\"\": \"\"san-francisco-ca\"\"\n\t}\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/GeoTests/GeoTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class GeoTests\n    {\n        public GeoTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Geo_Ctor_Parses_JsonData()\n        {\n            var geoJson = JsonMapper.ToObject(ReverseResponse);\n\n            var geo = new Geo(geoJson);\n\n            Assert.IsNotNull(geo.Places);\n            var places = geo.Places;\n            Assert.AreEqual(4, places.Count);\n            Assert.AreEqual(\"neighborhood\", places.First().PlaceType);\n        }\n\n        [TestMethod]\n        public void Geo_Ctor_Returns_On_Null_JsonData()\n        {\n            var geo = new Geo((JsonData)null);\n\n            Assert.IsNull(geo.Places);\n        }\n\n        const string ReverseResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/GeoTests/GeometryTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class GeometryTests\n    {\n        public GeometryTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Geometry_Ctor_Parses_JsonData()\n        {\n            var geometryJson = JsonMapper.ToObject(GeometryJson);\n\n            var geometry = new Geometry(geometryJson);\n\n            Assert.AreEqual(\"Polygon\", geometry.Type);\n            Assert.IsNotNull(geometry.Coordinates);\n            Assert.AreEqual(4, geometry.Coordinates.Count);\n            Coordinate coord = geometry.Coordinates.First();\n            Assert.AreEqual(-122.51368188, coord.Longitude);\n            Assert.AreEqual(37.70813196, coord.Latitude);\n        }\n\n        [TestMethod]\n        public void Geometry_Ctor_Returns_On_Null_JsonData()\n        {\n            var geometry = new Geometry(null);\n\n            Assert.AreEqual(null, geometry.Type);\n        }\n\n        const string GeometryJson = @\"{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  }\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/GeoTests/PlaceTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.GeoTests\n{\n    [TestClass]\n    public class PlaceTests\n    {\n        public PlaceTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Place_Ctor_Parses_JsonData()\n        {\n            const string ExpectedPolyLine = \"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\";\n            var placeJson = JsonMapper.ToObject(PlaceJson);\n\n            var place = new Place(placeJson);\n\n            Assert.IsNotNull(place.ContainedWithin);\n            Assert.AreEqual(\"United States\", place.ContainedWithin.Country);\n\n            Assert.AreEqual(\"neighborhood\", place.PlaceType);\n            Assert.AreEqual(\"United States\", place.Country);\n            Assert.AreEqual(\"SoMa\", place.Name);\n            Assert.AreEqual(\"SoMa, San Francisco\", place.FullName);\n\n            Assert.IsNotNull(place.Attributes);\n            var attrDict = place.Attributes;\n            Assert.AreEqual(3, attrDict.Count);\n            Assert.AreEqual(attrDict[\"street_address\"], \"795 Folsom St\");\n            Assert.AreEqual(attrDict[\"623:id\"], \"210176\");\n            Assert.AreEqual(attrDict[\"twitter\"], \"JoeMayo\");\n\n            Assert.IsNotNull(place.BoundingBox);\n            Assert.AreEqual(\"Polygon\", place.BoundingBox.Type);\n\n            Assert.AreEqual(\"US\", place.CountryCode);\n            Assert.AreEqual(\"http://api.twitter.com/1/geo/id/2b6ff8c22edd9576.json\", place.Url);\n            Assert.AreEqual(\"2b6ff8c22edd9576\", place.ID);\n\n            Assert.IsNotNull(place.PolyLines);\n            Assert.IsNotNull(place.PolyLines.SingleOrDefault());\n            Assert.AreEqual(ExpectedPolyLine, place.PolyLines.First());\n        }\n\n        [TestMethod]\n        public void Place_Ctor_Returns_On_Null_JsonData()\n        {\n            var place = new Place(null);\n\n            Assert.IsNull(place.Country);\n        }\n\n        const string PlaceJson = @\"{\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"polylines\"\":[\n               \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n            ],\n            \"\"attributes\"\":{\n               \"\"street_address\"\": \"\"795 Folsom St\"\",\n                \"\"623:id\"\": \"\"210176\"\",\n                \"\"twitter\"\": \"\"JoeMayo\"\"\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/HelpTests/HelpRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.HelpTests\n{\n    [TestClass]\n    public class HelpRequestProcessorTests\n    {\n        public HelpRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n            Expression<Func<Help, bool>> expression =\n                help =>\n                    help.Type == HelpType.RateLimits &&\n                    help.Resources == \"search\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = helpReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)HelpType.RateLimits).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Resources\", \"search\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_Configuration_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/configuration.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Configuration).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_Languages_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/languages.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Languages).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search,users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Removes_Parameter_Spaces_In_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search, users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_No_Type()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"Type\", ((int) HelpType.Languages).ToString()}\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => helpReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void HelpRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n\n            Assert.IsInstanceOfType(helpReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Configuration_Results()\n        {\n            const int ExpectedCharsRsvpPerMedia = 21;\n            const int ExpectedPhotoSizesCount = 4;\n            const string ExpectedPhotoSizeType = \"thumb\";\n            const int ExpectedPhotoSizeHeight = 150;\n            const int ExpectedPhotoSizeWidth = 150;\n            const string ExpectedPhotoSizeResize = \"crop\";\n            const int ExpectedShortUrlLength = 20;\n            const int ExpectedPhotoSizeLimit = 3145728;\n            const int ExpectedNonUsernamePathsCount = 82;\n            const string ExpectedNonUsernamePathsFirstItem = \"about\";\n            const int ExpectedMaxMediaPerUpload = 1;\n            const int ExpectedShortUrlLengthHttps = 21;\n            var helpReqProc = new HelpRequestProcessor<Help> \n            {\n                Type = HelpType.Configuration,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpConfigurationResponse);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.Configuration, help.Type);\n            Assert.IsNotNull(help.Configuration);\n            Configuration config = help.Configuration;\n            Assert.AreEqual(ExpectedCharsRsvpPerMedia, config.CharactersReservedPerMedia);\n            List<PhotoSize> photoSizes = config.PhotoSizes;\n            Assert.IsNotNull(photoSizes);\n            Assert.AreEqual(ExpectedPhotoSizesCount, photoSizes.Count);\n            PhotoSize photoSize = photoSizes.First();\n            Assert.AreEqual(ExpectedPhotoSizeType, photoSize.Type);\n            Assert.AreEqual(ExpectedPhotoSizeHeight, photoSize.Height);\n            Assert.AreEqual(ExpectedPhotoSizeWidth, photoSize.Width);\n            Assert.AreEqual(ExpectedPhotoSizeResize, photoSize.Resize);\n            Assert.AreEqual(ExpectedShortUrlLength, config.ShortUrlLength);\n            Assert.AreEqual(ExpectedPhotoSizeLimit, config.PhotoSizeLimit);\n            List<string> nonUsernamePaths = config.NonUserNamePaths;\n            Assert.IsNotNull(nonUsernamePaths);\n            Assert.AreEqual(ExpectedNonUsernamePathsCount, nonUsernamePaths.Count);\n            Assert.AreEqual(ExpectedNonUsernamePathsFirstItem, nonUsernamePaths.First());\n            Assert.AreEqual(ExpectedMaxMediaPerUpload, config.MaxMediaPerUpload);\n            Assert.AreEqual(ExpectedShortUrlLengthHttps, config.ShortUrlLengthHttps);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Languages_Results()\n        {\n            const int ExpectedLanguagesCount = 28;\n            const string ExpectedLanguageName = \"Hungarian\";\n            const string ExpectedLanguageStatus = \"production\";\n            const string ExpectedLanguageCode = \"hu\";\n            var helpReqProc = new HelpRequestProcessor<Help> \n            {\n                Type = HelpType.Languages,\n                BaseUrl = \"https://api.twitter.com/1.1/\" \n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpLanguagesXml);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.Languages, help.Type);\n            List<Language> languages = help.Languages;\n            Assert.IsNotNull(languages);\n            Assert.AreEqual(ExpectedLanguagesCount, languages.Count);\n            Language language = languages.First();\n            Assert.AreEqual(ExpectedLanguageName, language.Name);\n            Assert.AreEqual(ExpectedLanguageStatus, language.Status);\n            Assert.AreEqual(ExpectedLanguageCode, language.Code);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_RateLimits_Results()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>\n            {\n                Type = HelpType.RateLimits,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(RateLimitsResponse);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.RateLimits, help.Type);\n            Assert.AreEqual(\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\", help.RateLimitAccountContext);\n            Assert.IsNotNull(help.RateLimits);\n            Assert.IsTrue(help.RateLimits.Any());\n            Dictionary<string, List<RateLimits>> rateLimits = help.RateLimits;\n            Assert.IsTrue(rateLimits.ContainsKey(\"lists\"));\n            List<RateLimits> limitsList = rateLimits[\"lists\"];\n            Assert.IsNotNull(limitsList);\n            Assert.IsTrue(limitsList.Any());\n            RateLimits limits = limitsList.First();\n            Assert.IsNotNull(limits);\n            Assert.AreEqual(\"/lists/subscriptions\", limits.Resource);\n            Assert.AreEqual(15, limits.Limit);\n            Assert.AreEqual(15, limits.Remaining);\n            Assert.AreEqual(1348087186ul, limits.Reset);\n        }\n\n        const string HelpConfigurationResponse = @\"{\n   \"\"characters_reserved_per_media\"\":21,\n   \"\"photo_sizes\"\":{\n      \"\"thumb\"\":{\n         \"\"h\"\":150,\n         \"\"w\"\":150,\n         \"\"resize\"\":\"\"crop\"\"\n      },\n      \"\"small\"\":{\n         \"\"h\"\":480,\n         \"\"w\"\":340,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"large\"\":{\n         \"\"h\"\":2048,\n         \"\"w\"\":1024,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"medium\"\":{\n         \"\"h\"\":1200,\n         \"\"w\"\":600,\n         \"\"resize\"\":\"\"fit\"\"\n      }\n   },\n   \"\"short_url_length\"\":20,\n   \"\"photo_size_limit\"\":3145728,\n   \"\"non_username_paths\"\":[\n      \"\"about\"\",\n      \"\"account\"\",\n      \"\"accounts\"\",\n      \"\"activity\"\",\n      \"\"all\"\",\n      \"\"announcements\"\",\n      \"\"anywhere\"\",\n      \"\"api_rules\"\",\n      \"\"api_terms\"\",\n      \"\"apirules\"\",\n      \"\"apps\"\",\n      \"\"auth\"\",\n      \"\"badges\"\",\n      \"\"blog\"\",\n      \"\"business\"\",\n      \"\"buttons\"\",\n      \"\"contacts\"\",\n      \"\"devices\"\",\n      \"\"direct_messages\"\",\n      \"\"download\"\",\n      \"\"downloads\"\",\n      \"\"edit_announcements\"\",\n      \"\"faq\"\",\n      \"\"favorites\"\",\n      \"\"find_sources\"\",\n      \"\"find_users\"\",\n      \"\"followers\"\",\n      \"\"following\"\",\n      \"\"friend_request\"\",\n      \"\"friendrequest\"\",\n      \"\"friends\"\",\n      \"\"goodies\"\",\n      \"\"help\"\",\n      \"\"home\"\",\n      \"\"im_account\"\",\n      \"\"inbox\"\",\n      \"\"invitations\"\",\n      \"\"invite\"\",\n      \"\"jobs\"\",\n      \"\"list\"\",\n      \"\"login\"\",\n      \"\"logout\"\",\n      \"\"me\"\",\n      \"\"mentions\"\",\n      \"\"messages\"\",\n      \"\"mockview\"\",\n      \"\"newtwitter\"\",\n      \"\"notifications\"\",\n      \"\"nudge\"\",\n      \"\"oauth\"\",\n      \"\"phoenix_search\"\",\n      \"\"positions\"\",\n      \"\"privacy\"\",\n      \"\"public_timeline\"\",\n      \"\"related_tweets\"\",\n      \"\"replies\"\",\n      \"\"retweeted_of_mine\"\",\n      \"\"retweets\"\",\n      \"\"retweets_by_others\"\",\n      \"\"rules\"\",\n      \"\"saved_searches\"\",\n      \"\"search\"\",\n      \"\"sent\"\",\n      \"\"settings\"\",\n      \"\"share\"\",\n      \"\"signup\"\",\n      \"\"signin\"\",\n      \"\"similar_to\"\",\n      \"\"statistics\"\",\n      \"\"terms\"\",\n      \"\"tos\"\",\n      \"\"translate\"\",\n      \"\"trends\"\",\n      \"\"tweetbutton\"\",\n      \"\"twttr\"\",\n      \"\"update_discoverability\"\",\n      \"\"users\"\",\n      \"\"welcome\"\",\n      \"\"who_to_follow\"\",\n      \"\"widgets\"\",\n      \"\"zendesk_auth\"\",\n      \"\"media_signup\"\"\n   ],\n   \"\"max_media_per_upload\"\":1,\n   \"\"short_url_length_https\"\":21\n}\";\n\n        const string HelpLanguagesXml = @\"[\n   {\n      \"\"name\"\":\"\"Hungarian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hu\"\"\n   },\n   {\n      \"\"name\"\":\"\"Finnish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fi\"\"\n   },\n   {\n      \"\"name\"\":\"\"Swedish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"sv\"\"\n   },\n   {\n      \"\"name\"\":\"\"Norwegian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"no\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hebrew\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"he\"\"\n   },\n   {\n      \"\"name\"\":\"\"Korean\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ko\"\"\n   },\n   {\n      \"\"name\"\":\"\"Portuguese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pt\"\"\n   },\n   {\n      \"\"name\"\":\"\"French\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fr\"\"\n   },\n   {\n      \"\"name\"\":\"\"German\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"de\"\"\n   },\n   {\n      \"\"name\"\":\"\"Arabic\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ar\"\"\n   },\n   {\n      \"\"name\"\":\"\"Russian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ru\"\"\n   },\n   {\n      \"\"name\"\":\"\"Dutch\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"nl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Indonesian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"id\"\"\n   },\n   {\n      \"\"name\"\":\"\"Traditional Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-tw\"\"\n   },\n   {\n      \"\"name\"\":\"\"Italian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"it\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hindi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hi\"\"\n   },\n   {\n      \"\"name\"\":\"\"English\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"en\"\"\n   },\n   {\n      \"\"name\"\":\"\"Filipino\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fil\"\"\n   },\n   {\n      \"\"name\"\":\"\"Japanese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ja\"\"\n   },\n   {\n      \"\"name\"\":\"\"Thai\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"th\"\"\n   },\n   {\n      \"\"name\"\":\"\"Urdu\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ur\"\"\n   },\n   {\n      \"\"name\"\":\"\"Polish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Simplified Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-cn\"\"\n   },\n   {\n      \"\"name\"\":\"\"Turkish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"tr\"\"\n   },\n   {\n      \"\"name\"\":\"\"Farsi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Danish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"da\"\"\n   },\n   {\n      \"\"name\"\":\"\"Malay\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"msa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Spanish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"es\"\"\n   }\n]\";\n\n        const string RateLimitsResponse = @\"{\n   \"\"rate_limit_context\"\":{\n      \"\"access_token\"\":\"\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\"\"\n   },\n   \"\"resources\"\":{\n      \"\"lists\"\":{\n         \"\"/lists/subscriptions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/memberships\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/statuses\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friendships\"\":{\n         \"\"/friendships/incoming\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/lookup\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/outgoing\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"blocks\"\":{\n         \"\"/blocks/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/blocks/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"geo\"\":{\n         \"\"/geo/id/:place_id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/reverse_geocode\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/search\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/similar_places\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"users\"\":{\n         \"\"/users/suggestions/:slug/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/search\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/show\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributees\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributors\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/lookup\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions/:slug\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"followers\"\":{\n         \"\"/followers/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"statuses\"\":{\n         \"\"/statuses/home_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/mentions_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/show/:id\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/retweets/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/user_timeline\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/oembed\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"help\"\":{\n         \"\"/help/privacy\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/tos\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/configuration\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/languages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friends\"\":{\n         \"\"/friends/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"direct_messages\"\":{\n         \"\"/direct_messages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/sent\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"account\"\":{\n         \"\"/account/verify_credentials\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/account/settings\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"favorites\"\":{\n         \"\"/favorites/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"saved_searches\"\":{\n         \"\"/saved_searches/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/saved_searches/show/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"search\"\":{\n         \"\"/search/tweets\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"trends\"\":{\n         \"\"/trends/available\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/closest\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/place\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/LinqToTwitter.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.Tests</RootNamespace>\n    <AssemblyName>LinqToTwitter.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n    <AssemblyOriginatorKeyFile>..\\LinqToTwitter.Tests\\LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise />\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"AccountActivityTests\\AccountActivityCommandsTests.cs\" />\n    <Compile Include=\"AccountActivityTests\\AccountActivityRequestProcessorTests.cs\" />\n    <Compile Include=\"AccountTests\\AccountCommandsTests.cs\" />\n    <Compile Include=\"AccountTests\\AccountRequestProcessorTests.cs\" />\n    <Compile Include=\"BlocksTests\\BlocksCommandsTests.cs\" />\n    <Compile Include=\"BlocksTests\\BlocksRequestProcessorTests.cs\" />\n    <Compile Include=\"Common\\DebuggerWriter.cs\" />\n    <Compile Include=\"Common\\EntitiesTests.cs\" />\n    <Compile Include=\"Common\\L2TAssert.cs\" />\n    <Compile Include=\"Common\\TestCulture.cs\" />\n    <Compile Include=\"Common\\TwitterExtensionsTests.cs\" />\n    <Compile Include=\"DirectMessageEventsTests\\DirectMessageEventsCommandsTests.cs\" />\n    <Compile Include=\"DirectMessageEventsTests\\DirectMessageEventsRequestProcessorTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesCommandsTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesCtorTests.cs\" />\n    <Compile Include=\"FavoritesTests\\FavoritesRequestProcessorTests.cs\" />\n    <Compile Include=\"FriendshipTests\\FriendshipCommandsTests.cs\" />\n    <Compile Include=\"FriendshipTests\\FriendshipRequestProcessorTests.cs\" />\n    <Compile Include=\"GeoTests\\CoordinateTests.cs\" />\n    <Compile Include=\"GeoTests\\GeometryTests.cs\" />\n    <Compile Include=\"GeoTests\\GeoRequestProcessorTests.cs\" />\n    <Compile Include=\"GeoTests\\GeoTests.cs\" />\n    <Compile Include=\"GeoTests\\PlaceTests.cs\" />\n    <Compile Include=\"HelpTests\\HelpRequestProcessorTests.cs\" />\n    <Compile Include=\"LinqToTwitterTests\\TwitterErrorHandlerTests.cs\" />\n    <Compile Include=\"ListTests\\ListCommandsTests.cs\" />\n    <Compile Include=\"ListTests\\ListRequestProcessorTests.cs\" />\n    <Compile Include=\"MediaTests\\MediaCommandsTests.cs\" />\n    <Compile Include=\"MediaTests\\MediaRequestProcessorTests.cs\" />\n    <Compile Include=\"MuteTests\\MuteCommandsTests.cs\" />\n    <Compile Include=\"MuteTests\\MuteRequestProcessorTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RawTests\\RawCommandsTests.cs\" />\n    <Compile Include=\"RawTests\\RawRequestProcessorTests.cs\" />\n    <Compile Include=\"SavedSearchTests\\SavedSearchCommandsTests.cs\" />\n    <Compile Include=\"SavedSearchTests\\SavedSearchRequestProcessorTests.cs\" />\n    <Compile Include=\"SearchTests\\SearchRequestProcessorTests.cs\" />\n    <Compile Include=\"SecurityTests\\HmacTests.cs\" />\n    <Compile Include=\"SecurityTests\\OAuthTests.cs\" />\n    <Compile Include=\"SecurityTests\\Sha1Tests.cs\" />\n    <Compile Include=\"StatusTests\\StatusCommandsTests.cs\" />\n    <Compile Include=\"StatusTests\\StatusRequestProcessorTests.cs\" />\n    <Compile Include=\"TrendsTests\\TrendRequestProcessorTests.cs\" />\n    <Compile Include=\"UserTests\\UserCommandsTests.cs\" />\n    <Compile Include=\"UserTests\\UserRequestProcessorTests.cs\" />\n    <Compile Include=\"WelcomeMessageTests\\WelcomeMessageRequestProcessorTests.cs\" />\n    <Compile Include=\"WelcomeMessageTests\\WelcomeMessageCommandsTests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n    <None Include=\"LinqToTwitter.snk\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Net.Http.WebRequest\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter.net\\LinqToTwitter.net.csproj\">\n      <Project>{8bea10cb-ff91-4d13-868d-2210ec2f8294}</Project>\n      <Name>LinqToTwitter.net</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Bcl.Build\">\n      <Version>1.0.21</Version>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.Bcl.Compression\">\n      <Version>3.9.85</Version>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.Net.Http\">\n      <Version>2.2.29</Version>\n    </PackageReference>\n    <PackageReference Include=\"Moq\">\n      <Version>4.14.0</Version>\n    </PackageReference>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>13.0.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Runtime.CompilerServices.Unsafe\">\n      <Version>4.7.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Threading.Tasks.Extensions\">\n      <Version>4.5.4</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.ValueTuple\">\n      <Version>4.5.0</Version>\n    </PackageReference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/LinqToTwitterTests/TwitterErrorHandlerTests.cs",
    "content": "﻿using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing LinqToTwitter.Net;\n\nnamespace LinqToTwitterPcl.Tests.LinqToTwitterTests\n{\n    [TestClass]\n    public class TwitterErrorHandlerTests\n    {\n        [TestMethod]\n        public void ParseTwitterErrorMessage_Handles_String_Types()\n        {\n            string stringError = \"{\\\"errors\\\":\\\"sharing is not permissible for this status (Share validations failed)\\\"}\";\n\n            TwitterErrorHandler.TwitterErrorDetails details = \n                TwitterErrorHandler.ParseTwitterErrorMessage(stringError);\n\n            Assert.IsNotNull(details);\n            Assert.AreEqual(\n                \"sharing is not permissible for this status (Share validations failed)\",\n                details.Message);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/ListTests/ListCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.ListTests\n{\n    [TestClass]\n    public class ListCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public ListCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(TestStatusQueryResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => \n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void ListRequestProcessor_Handles_Actions()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            Assert.IsInstanceOfType(listReqProc, typeof(IRequestProcessorWithAction<List>));\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_Requires_ListName()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateListAsync(null, \"public\", \"desc\"));\n\n            Assert.AreEqual(\"listName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"name\", \"test\" },\n                { \"mode\", \"public\" },\n                { \"description\", \"desc\" }\n            };\n\n            await ctx.CreateListAsync(\"test\", \"public\", \"desc\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.CreateListAsync(\"test\", \"public\", \"desc\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateListAsync(0, null, null, 0, null, null, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateListAsync(123, \"test\", null, 0, null, null, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n                { \"mode\", \"public\" },\n                { \"description\", \"desc\" },\n                { \"name\", \"Test List\" }\n            };\n\n            await ctx.UpdateListAsync(123, \"test\", \"Test List\", 456, \"JoeMayo\", \"public\", \"desc\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/update.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.UpdateListAsync(123, \"test\", \"Test List\", 456, \"JoeMayo\", \"public\", \"desc\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteListAsync(0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteListAsync(123, \"test\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Works_With_Slug_And_OwnerID()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteListAsync(0, \"test\", 456, null);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Works_With_ListID_Only()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteListAsync(123, null, 0, null);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.DeleteListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/destroy.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Requires_UserID_Or_ScreenName()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(null, 0, null, 0, null));\n\n            Assert.AreEqual(\"UserIdOrScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(\"JoeMayo\", 0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(\"JoeMayo\", 0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.AddMemberToListAsync(\"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/members/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.AddMemberToListAsync(\"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, null, 0, null, new List<string> { \"SomeName\" }));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 0, null, new List<string> { \"SomeOne\" }));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ScreenNames()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, (List<string>)null));\n\n            Assert.AreEqual(\"screenNames\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ScreenNames_With_Values()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, new List<string>()));\n\n            Assert.AreEqual(\"screenNames\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Requires_ScreenNames_Count_LessThanOrEqualTo_100()\n        {\n            InitializeTwitterContext();\n            var screenNames = Enumerable.Range(1, 101).Select(item => item.ToString(CultureInfo.InvariantCulture)).ToList();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, screenNames));\n\n            Assert.AreEqual(\"screenNames\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_ScreenNames_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"screen_name\", \"JoeMayo,Linq2Tweeter,SomeOneElse\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n            };\n            var screenNames = new List<string> { \"JoeMayo\", \"Linq2Tweeter\", \"SomeOneElse\" };\n\n            await ctx.AddMemberRangeToListAsync(123, \"test\", 456, \"JoeMayo\", screenNames);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/members/create_all.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n            var screenNames = new List<string> { \"JoeMayo\", \"Linq2Tweeter\", \"SomeOneElse\" };\n\n            await ctx.AddMemberRangeToListAsync(123, \"test\", 456, \"JoeMayo\", screenNames);\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Requires_UserIDs()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, (List<ulong>)null));\n\n            Assert.AreEqual(\"userIDs\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Requires_UserIDs_With_Values()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, new List<ulong>()));\n\n            Assert.AreEqual(\"userIDs\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Requires_UserIDs_Count_LessThanOrEqualTo_100()\n        {\n            InitializeTwitterContext();\n            var userIDs = Enumerable.Range(1, 101).Select(item => (ulong)item).ToList();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberRangeToListAsync(0, \"test\", 123, null, userIDs));\n\n            Assert.AreEqual(\"userIDs\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberRangeToListAsync_For_UserIDs_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"123,234,345\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" },\n            };\n            var userIDs = new List<ulong> { 123ul, 234ul, 345ul };\n\n            await ctx.AddMemberRangeToListAsync(123, \"test\", 456, \"JoeMayo\", userIDs);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/members/create_all.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Requires_UserID_Or_ScreenName()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(0, null, 0, null, 0, null));\n\n            Assert.AreEqual(\"UserIdOrScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(0, \"JoeMayo\", 0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(0, \"JoeMayo\", 0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"789\" },\n                { \"screen_name\", \"JoeMayo\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.DeleteMemberFromListAsync(789, \"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/members/destroy.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.DeleteMemberFromListAsync(789, \"JoeMayo\", 123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.SubscribeToListAsync(0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.SubscribeToListAsync(0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.SubscribeToListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/subscribers/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task SubscribeToListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.SubscribeToListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_Requires_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnsubscribeFromListAsync(0, null, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnsubscribeFromListAsync(0, \"linq\", 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"owner_id\", \"456\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.UnsubscribeFromListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/subscribers/destroy.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UnsubscribeFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n\n            await ctx.UnsubscribeFromListAsync(123, \"test\", 456, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 456 };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"list_id\", \"123\" },\n                { \"slug\", \"test\" },\n                { \"user_id\", \"456\" },\n                { \"owner_id\", \"789\" },\n                { \"owner_screen_name\", \"JoeMayo\" }\n            };\n\n            await ctx.DeleteMemberRangeFromListAsync(123, \"test\", userIDs, 789, \"JoeMayo\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/lists/members/destroy_all.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 456 };\n\n            await ctx.DeleteMemberRangeFromListAsync(123, \"test\", userIDs, 789, \"JoeMayo\");\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_Requires_Either_ListID_Or_Slug()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberRangeFromListAsync(0, null, userIDs, 0, null));\n\n            Assert.AreEqual(\"ListIdOrSlug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyAllFromListAsync_Requires_OwnerID_Or_OwnerScreenName_If_Using_Slug()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberRangeFromListAsync(0, \"slug\", userIDs, 0, null));\n\n            Assert.AreEqual(\"OwnerIdOrOwnerScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberRangeFromListAsync_Accepts_Missing_OwnerID_And_OwnerScreenName_If_Using_ListID()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            await ctx.DeleteMemberRangeFromListAsync(1, \"slug\", userIDs, 0, null);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberRangeFromListAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext();\n            var userIDs = new List<ulong> { 1, 2, 3 };\n\n            await ctx.DeleteMemberRangeFromListAsync(1, \"slug\", userIDs, 0, null);\n\n            Assert.AreEqual(TestStatusQueryResponse, ctx.RawResult);\n        }\n\n        const string TestStatusQueryResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/ListTests/ListRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.ListTests\n{\n    [TestClass]\n    public class ListRequestProcessorTests\n    {\n        public ListRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_All_Available_Parameters()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n            Expression<Func<List, bool>> expression =\n                list =>\n                    list.Type == ListType.Members &&\n                    list.UserID == 456ul &&\n                    list.ScreenName == \"JoeMayo\" &&\n                    list.ListID == 456ul &&\n                    list.Slug == \"test\" &&\n                    list.OwnerID == 789ul &&\n                    list.OwnerScreenName == \"JoeMayo\" &&\n                    list.Cursor == 123 &&\n                    list.MaxID == 789 &&\n                    list.Page == 1 &&\n                    list.Count == 10 &&\n                    list.SinceID == 123 &&\n                    list.FilterToOwnedLists == true &&\n                    list.TrimUser == true &&\n                    list.IncludeEntities == true &&\n                    list.IncludeRetweets == true &&\n                    list.SkipStatus == true &&\n                    list.Reverse == true;\n\n            var queryParams = listReqProc.GetParameters(expression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)ListType.Members).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ListID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Slug\", \"test\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OwnerID\", \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"OwnerScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxID\", \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"FilterToOwnedLists\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Reverse\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Works_With_Json_Format_Data()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            Assert.IsInstanceOfType(listReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_Lists_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/list.json?screen_name=JoeMayo\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ListType.List).ToString() },\n                    { \"ScreenName\", \"JoeMayo\" }\n                };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            const string ExpectedParam = \"Type\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"ScreenName\", \"JoeMayo\" }\n                };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)ListType.List).ToString() },\n                };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Param_List()\n        {\n            const string ExpectedParamName = \"Type\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildListUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.List).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildListsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/list.json?user_id=123&screen_name=JoeMayo&cursor=456&reverse=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.List).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"Reverse\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembershipsUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Memberships).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembershipsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/memberships.json?user_id=123&screen_name=JoeMayo&cursor=456&filter_to_owned_lists=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Memberships).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"FilterToOwnedLists\", \"true\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembershipsUrl_Does_Not_Add_False_Filter_To_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/memberships.json?user_id=123&screen_name=JoeMayo&cursor=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Memberships).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Cursor\", \"456\" },\n                { \"FilterToOwnedLists\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildSubscriptionsUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"Type\", ((int) ListType.Subscriptions).ToString()},\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildSubscriptionsUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscriptions.json?user_id=123&screen_name=JoeMayo&count=10&cursor=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscriptions).ToString() },\n                { \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Count\", \"10\" },\n                { \"Cursor\", \"456\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpecteParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpecteParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                { \"ListID\", null },\n                { \"Slug\", \"\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildShowUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/show.json?slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Show).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/statuses.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&since_id=789&max_id=234&count=25&per_page=25&page=3&trim_user=true&include_entities=true&include_rts=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" },\n                { \"SinceID\", \"789\" },\n                { \"MaxID\", \"234\" },\n                { \"Count\", \"25\" },\n                { \"Page\", \"3\" },\n                { \"TrimUser\", \"true\" },\n                { \"IncludeEntities\", \"true\" },\n                { \"IncludeRetweets\", \"true\" },\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildStatusesUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/statuses.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&since_id=789&max_id=234&count=25&per_page=25&page=3&trim_user=false&include_entities=false&include_rts=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Statuses).ToString() },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"ListID\", \"456\" },\n                { \"SinceID\", \"789\" },\n                { \"MaxID\", \"234\" },\n                { \"Count\", \"25\" },\n                { \"Page\", \"3\" },\n                { \"TrimUser\", \"false\" },\n                { \"IncludeEntities\", \"false\" },\n                { \"IncludeRetweets\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildMembersUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Members).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString()},\n                { \"Slug\", \"test\" },\n                {\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Returns_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsMemberUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/members/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsMember).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Requires_Non_Null_And_Not_Empty_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                { \"ListID\", \"\" },\n                { \"Slug\", null }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString()},\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_SubscribersUrl()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildSubscribersUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers.json?owner_id=123&owner_screen_name=JoeMayo&slug=test&list_id=456&cursor=789&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Subscribers).ToString() },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"Cursor\", \"789\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscribedUrl_Requires_ListID_Or_Slug()\n        {\n            const string ExpectedParamName = \"ListIdOrSlug\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                //{ \"Slug\", \"test\" }\n                //{\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscriberUrl_Requires_OwnerID_Or_OwnerScreenName_If_Slug_Used()\n        {\n            const string ExpectedParamName = \"OwnerIdOrOwnerScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString()},\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" }\n                //{\"UserID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscriberUrl_Requires_UserID_Or_ScreenName()\n        {\n            const string ExpectedParamName = \"UserIdOrScreenName\";\n            var listReqProc = new ListRequestProcessor<List> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString()},\n                { \"Slug\", \"test\" },\n                {\"OwnerID\", \"123\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => listReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_IsSubscribedUrl()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=true&skip_status=true\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildIsSubscriberUrl_Includes_False_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/subscribers/show.json?user_id=789&screen_name=JoeMayo&slug=test&owner_id=123&owner_screen_name=JoeMayo&list_id=456&include_entities=false\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.IsSubscriber).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Slug\", \"test\" },\n                { \"OwnerID\", \"123\" },\n                { \"OwnerScreenName\", \"JoeMayo\" },\n                { \"ListID\", \"456\" },\n                { \"IncludeEntities\", \"false\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Ownerships_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/lists/ownerships.json?user_id=789&screen_name=JoeMayo&count=10&cursor=1\";\n            var listReqProc = new ListRequestProcessor<List>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int) ListType.Ownerships).ToString() },\n                { \"UserID\", \"789\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"Count\", \"10\" },\n                { \"Cursor\", \"1\" }\n            };\n\n            Request req = listReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        void TestMultipleListsResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(MultipleListsResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.AreEqual(4, lists.Count());\n            var list = lists.First();\n            Assert.AreEqual(\"test\", list.Name);\n            Assert.AreEqual(\"@Linq2Tweeter/test\", list.FullName);\n            Assert.AreEqual(1, list.MemberCount);\n            Assert.AreEqual(\"This is a test2\", list.Description);\n            Assert.AreEqual(\"public\", list.Mode);\n            Assert.AreEqual(\"/Linq2Tweeter/test\", list.Uri);\n            var users = list.Users;\n            Assert.IsNotNull(users);\n            Assert.IsNotNull(users.SingleOrDefault());\n            Assert.AreEqual(\"LINQ to Tweeter\", users.First().Name);\n            Assert.AreEqual(44758373ul, list.ListIDResponse);\n            Assert.AreEqual(0, list.SubscriberCount);\n            Assert.AreEqual(new DateTime(2011, 5, 8, 2, 0, 33), list.CreatedAt);\n            Assert.AreEqual(false, list.Following);\n            Assert.AreEqual(\"test\", list.SlugResponse);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Lists_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.List };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Subscriptions_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Subscriptions };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Memberships_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Memberships };\n\n            TestMultipleListsResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Show_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Show };\n\n            var listsResponse = listProc.ProcessResults(SingleListResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var list = lists.Single();\n            Assert.AreEqual(\"DotNetTwittterDevs\", list.Name);\n            var users = list.Users;\n            Assert.IsNotNull(users);\n            Assert.IsNotNull(users.SingleOrDefault());\n            Assert.AreEqual(\"Joe Mayo\", users.Single().Name);\n        }\n  \n        void TestMultipleUsersResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(MultipleUsersResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var list = lists.Single();\n            var statuses = list.Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.IsFalse(statuses.Any());\n            var users = list.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            Assert.AreEqual(\"LINQ to Tweeter Test\", users.First().Name);\n            var cursor = list.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(1352721896474871923, cursor.Next);\n            Assert.AreEqual(7, cursor.Previous);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Subscribers_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Subscribers };\n\n            TestMultipleUsersResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Members_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Members };\n\n            TestMultipleUsersResponse(listProc);\n        }\n  \n        void TestSingleUserResponse(ListRequestProcessor<List> listProc)\n        {\n            var listsResponse = listProc.ProcessResults(SingleUserResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var users = lists.Single().Users;\n            Assert.IsNotNull(users);\n            Assert.IsNotNull(users.SingleOrDefault());\n            Assert.AreEqual(\"LINQ to Tweeter Test\", users.Single().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IsMember_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.IsMember };\n\n            TestSingleUserResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IsSubscribed_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.IsSubscriber };\n\n            TestSingleUserResponse(listProc);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Statuses_Response()\n        {\n            var listProc = new ListRequestProcessor<List> { Type = ListType.Statuses };\n\n            var listsResponse = listProc.ProcessResults(ListStatusesResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists.SingleOrDefault());\n            var statuses = lists.Single().Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(4, statuses.Count);\n            Assert.IsTrue(statuses.First().Text.StartsWith(\"so using this approach\"));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var listReqProc = new ListRequestProcessor<List>();\n\n            var results = listReqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, results.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var listProc = new ListRequestProcessor<List> \n            { \n                Type = ListType.Show,\n                UserID = 123ul,\n                ScreenName = \"JoeMayo\",\n                Cursor = 456L,\n                ListID = 789ul,\n                Slug = \"MyList\",\n                OwnerID = 123ul,\n                OwnerScreenName = \"JoeMayo\",\n                MaxID = 150,\n                Count = 50,\n                Page = 1,\n                SinceID = 25,\n                TrimUser = true,\n                IncludeEntities = true,\n                IncludeRetweets = true,\n                FilterToOwnedLists = true,\n                SkipStatus = true,\n                Reverse = true\n            };\n\n            var listsResponse = listProc.ProcessResults(SingleListResponse);\n\n            var lists = listsResponse as IList<List>;\n            Assert.IsNotNull(lists);\n            Assert.IsNotNull(lists);\n            var list = lists.Single();\n            Assert.AreEqual(ListType.Show, list.Type);\n            Assert.AreEqual(123ul, list.UserID);\n            Assert.AreEqual(\"JoeMayo\", list.ScreenName);\n            Assert.AreEqual(456L, list.Cursor);\n            Assert.AreEqual(789ul, list.ListID);\n            Assert.AreEqual(\"MyList\", list.Slug);\n            Assert.AreEqual(123ul, list.OwnerID);\n            Assert.AreEqual(\"JoeMayo\", list.OwnerScreenName);\n            Assert.AreEqual(150ul, list.MaxID);\n            Assert.AreEqual(50, list.Count);\n            Assert.AreEqual(1, list.Page);\n            Assert.AreEqual(25ul, list.SinceID);\n            Assert.IsTrue(list.TrimUser);\n            Assert.IsTrue(list.IncludeEntities);\n            Assert.IsTrue(list.IncludeRetweets);\n            Assert.IsTrue(list.FilterToOwnedLists);\n            Assert.IsTrue(list.SkipStatus);\n            Assert.IsTrue(list.Reverse);\n        }\n\n        const string SingleListResponse = @\"{\n   \"\"name\"\":\"\"DotNetTwittterDevs\"\",\n   \"\"full_name\"\":\"\"@JoeMayo\\/dotnettwittterdevs\"\",\n   \"\"member_count\"\":269,\n   \"\"description\"\":\"\".NET Developers who use the Twitter API\"\",\n   \"\"mode\"\":\"\"public\"\",\n   \"\"uri\"\":\"\"\\/JoeMayo\\/dotnettwittterdevs\"\",\n   \"\"user\"\":{\n      \"\"id\"\":15411837,\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n      \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n      \"\"followers_count\"\":1099,\n      \"\"default_profile\"\":false,\n      \"\"profile_background_color\"\":\"\"0099B9\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"location\"\":\"\"Denver, CO\"\",\n      \"\"profile_link_color\"\":\"\"0099B9\"\",\n      \"\"listed_count\"\":111,\n      \"\"verified\"\":false,\n      \"\"protected\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"is_translator\"\":false,\n      \"\"following\"\":false,\n      \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n      \"\"profile_text_color\"\":\"\"3C3940\"\",\n      \"\"statuses_count\"\":1905,\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n      \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n      \"\"friends_count\"\":210,\n      \"\"default_profile_image\"\":false,\n      \"\"contributors_enabled\"\":false,\n      \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"geo_enabled\"\":true,\n      \"\"favourites_count\"\":41,\n      \"\"profile_background_tile\"\":false,\n      \"\"notifications\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n      \"\"follow_request_sent\"\":false\n   },\n   \"\"id_str\"\":\"\"4557337\"\",\n   \"\"subscriber_count\"\":34,\n   \"\"created_at\"\":\"\"Sat Dec 12 22:55:43 +0000 2009\"\",\n   \"\"following\"\":false,\n   \"\"slug\"\":\"\"dotnettwittterdevs\"\",\n   \"\"id\"\":4557337\n}\";\n\n        const string MultipleListsResponse = @\"[\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/test\"\",\n      \"\"name\"\":\"\"test\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/test\"\",\n      \"\"description\"\":\"\"This is a test2\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"44758373\"\",\n      \"\"member_count\"\":1,\n      \"\"created_at\"\":\"\"Sun May 08 02:00:33 +0000 2011\"\",\n      \"\"id\"\":44758373,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"test\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/privatelist-4\"\",\n      \"\"name\"\":\"\"Privatelist\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/privatelist-4\"\",\n      \"\"description\"\":\"\"This is a private list for testing.\"\",\n      \"\"mode\"\":\"\"private\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897042\"\",\n      \"\"member_count\"\":0,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:42:12 +0000 2009\"\",\n      \"\"id\"\":3897042,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"privatelist-4\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/mvc-4\"\",\n      \"\"name\"\":\"\"MVC\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/mvc-4\"\",\n      \"\"description\"\":\"\"Developers Interested in ASP.NET MVC\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897016\"\",\n      \"\"member_count\"\":0,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:41:12 +0000 2009\"\",\n      \"\"id\"\":3897016,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"mvc-4\"\"\n   },\n   {\n      \"\"uri\"\":\"\"\\/Linq2Tweeter\\/linq\"\",\n      \"\"name\"\":\"\"LINQ\"\",\n      \"\"full_name\"\":\"\"@Linq2Tweeter\\/linq\"\",\n      \"\"description\"\":\"\"People who specialize in LINQ\"\",\n      \"\"mode\"\":\"\"public\"\",\n      \"\"user\"\":{\n         \"\"id\"\":16761255,\n         \"\"statuses_count\"\":109,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0000FF\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"is_translator\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"name\"\":\"\"LINQ to Tweeter\"\",\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"protected\"\":false,\n         \"\"listed_count\"\":3,\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87BC44\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"description\"\":\"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/653833321\\/200xColor_2.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"following\"\":false,\n         \"\"followers_count\"\":26,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"E0FF92\"\",\n         \"\"friends_count\"\":6,\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"favourites_count\"\":2,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2587708056\\/200xColor_2_normal.png\"\",\n         \"\"verified\"\":false,\n         \"\"profile_background_color\"\":\"\"9AE4E8\"\"\n      },\n      \"\"following\"\":false,\n      \"\"id_str\"\":\"\"3897006\"\",\n      \"\"member_count\"\":3,\n      \"\"created_at\"\":\"\"Fri Nov 27 01:40:48 +0000 2009\"\",\n      \"\"id\"\":3897006,\n      \"\"subscriber_count\"\":0,\n      \"\"slug\"\":\"\"linq\"\"\n   }\n]\";\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":16761255,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"followers_count\"\":22,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"listed_count\"\":3,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":false,\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"statuses_count\"\":100,\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":1,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"favourites_count\"\":2,\n   \"\"status\"\":{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"annotations\"\":null,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":176445993091481604,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":16761255,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n         \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n         \"\"followers_count\"\":22,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"location\"\":\"\"Anywhere In The World\"\",\n         \"\"profile_link_color\"\":\"\"0000ff\"\",\n         \"\"listed_count\"\":3,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"statuses_count\"\":100,\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n         \"\"friends_count\"\":1,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"status\"\":{\n            \"\"annotations\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"176445993091481604\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n            \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":176445993091481604,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      {\n         \"\"id\"\":313139213,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1405826247\\/twitter_icon_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/wefollow.com\\/harithamtech\"\",\n         \"\"created_at\"\":\"\"Wed Jun 08 06:12:33 +0000 2011\"\",\n         \"\"followers_count\"\":1146,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"106100\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":19800,\n         \"\"name\"\":\"\"HarithamTechnologies\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/276751844\\/twitter_bg.jpg\"\",\n         \"\"location\"\":\"\"Coimbatore\"\",\n         \"\"profile_link_color\"\":\"\"000000\"\",\n         \"\"listed_count\"\":1,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Enterprise Application Development | Mobile Apps | SEO | Social Media Marketing | Software Testing | Business Consultancy Services\"\",\n         \"\"profile_text_color\"\":\"\"2b2b2b\"\",\n         \"\"statuses_count\"\":1751,\n         \"\"screen_name\"\":\"\"harithamtech\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1405826247\\/twitter_icon_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Chennai\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/276751844\\/twitter_bg.jpg\"\",\n         \"\"friends_count\"\":1903,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"488f3f\"\",\n         \"\"id_str\"\":\"\"313139213\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":10,\n         \"\"status\"\":{\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"possibly_sensitive\"\":false,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"196237455870017538\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.twimbow.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETwimbow\\u003C\\/a\\u003E\"\",\n            \"\"created_at\"\":\"\"Sat Apr 28 14:00:30 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":196237455870017538,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"Global Partners of Haritham Technologies ensures a Win-Win situation #enterprise #marketing #harithamtech #in. http:\\/\\/t.co\\/EdUCAXhY\"\"\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"eeffd9\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      {\n         \"\"id\"\":266862319,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1620398936\\/untitled_normal.JPG\"\",\n         \"\"url\"\":null,\n         \"\"created_at\"\":\"\"Tue Mar 15 23:21:41 +0000 2011\"\",\n         \"\"followers_count\"\":15,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"181b1c\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":7200,\n         \"\"name\"\":\"\"talat taher\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme14\\/bg.gif\"\",\n         \"\"location\"\":\"\"DOHA,QATAR\"\",\n         \"\"profile_link_color\"\":\"\"009999\"\",\n         \"\"listed_count\"\":1,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"I'm a Muslim, Software Engineer at ASIS -Qatar\"\",\n         \"\"profile_text_color\"\":\"\"fffaff\"\",\n         \"\"statuses_count\"\":38,\n         \"\"screen_name\"\":\"\"TalatTaher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1620398936\\/untitled_normal.JPG\"\",\n         \"\"time_zone\"\":\"\"Cairo\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme14\\/bg.gif\"\",\n         \"\"friends_count\"\":44,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"3d3b3d\"\",\n         \"\"id_str\"\":\"\"266862319\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":12,\n         \"\"status\"\":{\n            \"\"retweeted\"\":false,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"id_str\"\":\"\"194760674243645440\"\",\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"favorited\"\":false,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"created_at\"\":\"\"Tue Apr 24 12:12:17 +0000 2012\"\",\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"truncated\"\":false,\n            \"\"id\"\":194760674243645440,\n            \"\"geo\"\":null,\n            \"\"text\"\":\"\"\\u0641\\u0643\\u0631\\u0648\\u0646\\u0649 \\u0627\\u0632\\u0627\\u0649 ....\\u0647\\u0648 \\u0627\\u0646\\u0627 \\u0646\\u0633\\u064a\\u062a\\u0643\\u061f\\u061f\\u061f\"\"\n         },\n         \"\"profile_background_tile\"\":true,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"1a181a\"\",\n         \"\"follow_request_sent\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":1352721896474871923,\n   \"\"previous_cursor\"\":7,\n   \"\"next_cursor_str\"\":\"\"1352721896474871923\"\",\n   \"\"previous_cursor_str\"\":\"\"7\"\"\n}\";\n\n        const string ListStatusesResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":14855950,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1151413227\\/MePimping_normal.png\"\",\n         \"\"url\"\":\"\"http:\\/\\/weblogs.sqlteam.com\\/mladenp\\/\"\",\n         \"\"created_at\"\":\"\"Wed May 21 12:55:05 +0000 2008\"\",\n         \"\"followers_count\"\":2083,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0060A5\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Mladen Prajdic\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/4781051\\/twitterPic.png\"\",\n         \"\"location\"\":\"\"Ljubljana, Slovenia\"\",\n         \"\"profile_link_color\"\":\"\"FF9000\"\",\n         \"\"listed_count\"\":195,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"SQL Server MVP and C# developer. Creator of SSMS Tools Pack add-in for SSMS.\"\",\n         \"\"profile_text_color\"\":\"\"000000\"\",\n         \"\"statuses_count\"\":39733,\n         \"\"screen_name\"\":\"\"MladenPrajdic\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1151413227\\/MePimping_normal.png\"\",\n         \"\"time_zone\"\":\"\"Ljubljana\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/4781051\\/twitterPic.png\"\",\n         \"\"friends_count\"\":1002,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"id_str\"\":\"\"14855950\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":32,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"profile_sidebar_fill_color\"\":\"\"0060A5\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286812220690433\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:16:37 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286812220690433,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"so using this approach i don't even need to sign my assemblies. well that lessens the complexity a bit. yay!\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":95212023,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/571849590\\/minha_foto_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.globalcode.com.br\"\",\n         \"\"created_at\"\":\"\"Mon Dec 07 14:40:21 +0000 2009\"\",\n         \"\"followers_count\"\":2208,\n         \"\"default_profile\"\":true,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"lang\"\":\"\"pt\"\",\n         \"\"utc_offset\"\":-10800,\n         \"\"name\"\":\"\"Vinicius\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"location\"\":\"\"Ubatuba - SP\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":98,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Programar, educar, criar os filhos, cozinhar, surfar, velejar e claro, beber. Simples n\\u00e3o? Ah, aqui eu sou eu, n\\u00e3o globalcode ok?\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":8628,\n         \"\"screen_name\"\":\"\"vsenger\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/571849590\\/minha_foto_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Greenland\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"friends_count\"\":369,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"95212023\"\",\n         \"\"geo_enabled\"\":false,\n         \"\"favourites_count\"\":41,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286622063525889\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:52 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286622063525889,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Tudo bem n\\u00e3o ter anvisa aqui no aeroporto, mas ent\\u00e3o coloca um bom rod\\u00edzio de carnes vai...\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n         \"\"type\"\":\"\"Point\"\",\n         \"\"coordinates\"\":[\n            -41.9644758,\n            -18.8669036\n         ]\n      },\n      \"\"place\"\":{\n         \"\"name\"\":\"\"Governador Valadares\"\",\n         \"\"country\"\":\"\"Brasil\"\",\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"Governador Valadares, Minas Gerais\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2fdc3603bc0c1d1d.json\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -42.339393,\n                     -19.039766\n                  ],\n                  [\n                     -41.539846,\n                     -19.039766\n                  ],\n                  [\n                     -41.539846,\n                     -18.5511242\n                  ],\n                  [\n                     -42.339393,\n                     -18.5511242\n                  ]\n               ]\n            ]\n         },\n         \"\"country_code\"\":\"\"BR\"\",\n         \"\"id\"\":\"\"2fdc3603bc0c1d1d\"\",\n         \"\"place_type\"\":\"\"city\"\"\n      },\n      \"\"user\"\":{\n         \"\"id\"\":86172114,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2172389365\\/gg4QUwKC_normal\"\",\n         \"\"url\"\":\"\"http:\\/\\/janynnegomes.com\"\",\n         \"\"created_at\"\":\"\"Thu Oct 29 21:56:49 +0000 2009\"\",\n         \"\"followers_count\"\":1741,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"642D8B\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-10800,\n         \"\"name\"\":\"\"Janny Gomes\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme10\\/bg.gif\"\",\n         \"\"location\"\":\"\"Minas Gerais, Brasil\"\",\n         \"\"profile_link_color\"\":\"\"FF0000\"\",\n         \"\"listed_count\"\":105,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Android & .NET Developer. My programmer daily is http:\\/\\/facebook.com\\/DiarioDeUmaProgramadorA\"\",\n         \"\"profile_text_color\"\":\"\"3D1957\"\",\n         \"\"statuses_count\"\":17504,\n         \"\"screen_name\"\":\"\"devnetgomez\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2172389365\\/gg4QUwKC_normal\"\",\n         \"\"time_zone\"\":\"\"Greenland\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme10\\/bg.gif\"\",\n         \"\"friends_count\"\":1208,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"65B0DA\"\",\n         \"\"id_str\"\":\"\"86172114\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":88,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"7AC3EE\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196284867770716160\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/twitter.com\\/download\\/android\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETwitter for Android\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:08:53 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196284867770716160,\n      \"\"geo\"\":{\n         \"\"type\"\":\"\"Point\"\",\n         \"\"coordinates\"\":[\n            -18.8669036,\n            -41.9644758\n         ]\n      },\n      \"\"text\"\":\"\"A id\\u00e9ia \\u00e9 que eu aguente segurar at\\u00e9 l\\u00e1, mas t\\u00e1 dificil \\\"\"@BrayanCordeiro: @devnetgomez MENTIRA que ele vai nascer no mesmo dia que eu?! &lt;3\\\"\"\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/MediaTests/MediaCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class MediaCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public MediaCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        async Task<TwitterContext> InitializeTwitterContext()\n        {\n            await Task.Delay(1);\n            authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsMedia = new TaskCompletionSource<string>();\n            tcsMedia.SetResult(MediaResponse);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsMedia.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<MediaMetadata>(),\n                It.IsAny<CancellationToken>()))\n                .Returns(tcsMedia.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task UploadMediaAsync_WithBinaryImage_ReturnsMedia()\n        {\n            const ulong ExpectedMediaID = 521449660083609601ul;\n            string mediaType = \"image/jpg\";\n            var image = new byte[] { 1, 2, 3 };\n            var additionalOwners = new List<ulong> { 1, 2 };\n            string mediaCategory = \"tweet_image\";\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            Media actual = await ctx.UploadMediaAsync(image, mediaType, additionalOwners, mediaCategory);\n\n            Assert.AreEqual(ExpectedMediaID, actual.MediaID);\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithValidParameters_Succeeds()\n        {\n            ulong mediaID = 521449660083609601ul;\n            string altText = \"Sample media description\";\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await ctx.CreateMediaMetadataAsync(mediaID, altText);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://upload.twitter.com/1.1/media/metadata/create.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<MediaMetadata>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithZeroMediaID_Throws()\n        {\n            ulong mediaID = 0;\n            string altText = \"Sample media description\";\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.CreateMediaMetadataAsync(mediaID, altText));\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithEmptyAltText_Throws()\n        {\n            ulong mediaID = 521449660083609601ul;\n            string altText = \"\";\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.CreateMediaMetadataAsync(mediaID, altText));\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithNullAltText_Throws()\n        {\n            ulong mediaID = 521449660083609601ul;\n            string altText = null;\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.CreateMediaMetadataAsync(mediaID, altText));\n        }\n\n        const string MediaResponse = @\"{\n\t\"\"media_id\"\": 521449660083609601,\n\t\"\"media_id_string\"\": \"\"521449660083609601\"\",\n\t\"\"size\"\": 6955,\n\t\"\"image\"\": {\n\t\t\"\"w\"\": 100,\n\t\t\"\"h\"\": 100,\n\t\t\"\"image_type\"\": \"\"image\\/png\"\"\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/MediaTests/MediaRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class MediaRequestProcessorTests\n    {\n        public const string BaseUrlAndVersion = \"https://upload.twitter.com/1.1/\";\n\n        public MediaRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new MediaRequestProcessor<Media>();\n\n            Expression<Func<Media, bool>> expression =\n            media =>\n                media.Type == MediaType.Status &&\n                media.Command == Media.StatusCommand &&\n                media.MediaID == 123;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Media.Type), ((int)MediaType.Status).ToString())));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(Media.Command), Media.StatusCommand)));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(Media.MediaID), 123.ToString())));\n        }\n        \n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var mediaReqProc = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n            var parameters = new Dictionary<string, string> { };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => mediaReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Media.Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameter()\n        {\n            var target = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(null));\n\n            Assert.AreEqual(nameof(Media.Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusUrl_MissingRequiredMediaID_Throws()\n        {\n            var target = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Media.Type), ((int)MediaType.Status).ToString() },\n                { nameof(Media.Command), Media.StatusCommand },\n                //{ nameof(Media.MediaID), 123.ToString() }\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Media.MediaID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Status_Url()\n        {\n            const string ExpectedUrl = BaseUrlAndVersion + \"media/upload.json?command=STATUS&media_id=123\";\n            var reqProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Media.Type), ((int)MediaType.Status).ToString() },\n                { nameof(Media.Command), Media.StatusCommand },\n                { nameof(Media.MediaID), 123.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildStatusUrl_WithoutOptionalCommand_HasDefault()\n        {\n            const string ExpectedUrl = BaseUrlAndVersion + \"media/upload.json?command=STATUS&media_id=123\";\n            var reqProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Media.Type), ((int)MediaType.Status).ToString() },\n                //{ nameof(Media.Command), Media.StatusCommand },\n                { nameof(Media.MediaID), 123.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void MediaRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var statProc = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n\n            Assert.IsInstanceOfType(statProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithInProgressResponse_IsProcessed()\n        {\n            var statProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion,\n                MediaID = 772492064386912256ul\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusInProgressResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(772492064386912256ul, media.MediaID);\n            Assert.IsNotNull(media.ProcessingInfo);\n            MediaProcessingInfo info = media.ProcessingInfo;\n            Assert.AreEqual(MediaProcessingInfo.InProgress, info.State);\n            Assert.AreEqual(5, info.CheckAfterSeconds);\n            Assert.AreEqual(5, info.ProgressPercent);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithFailedResponse_IsProcessed()\n        {\n            var statProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion,\n                MediaID = 773000650376548356ul\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusFailedResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(773000650376548356ul, media.MediaID);\n            Assert.AreEqual(28276017, media.Size);\n            Assert.IsNotNull(media.ProcessingInfo);\n            MediaProcessingInfo info = media.ProcessingInfo;\n            Assert.AreEqual(MediaProcessingInfo.Failed, info.State);\n            Assert.AreEqual(100, info.ProgressPercent);\n            Assert.IsNotNull(info.Error);\n            MediaError error = info.Error;\n            Assert.AreEqual(3, error.Code);\n            Assert.AreEqual(\"UnsupportedMedia\", error.Name);\n            Assert.AreEqual(\"Duration 10.minutes+22.seconds+628.milliseconds exceeds max duration of 2.minutes+20.seconds\", error.Message);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithSucceededResponse_IsProcessed()\n        {\n            var statProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion,\n                MediaID = 773017325037580289ul\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusSucceededResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(773017325037580289ul, media.MediaID);\n            Assert.AreEqual(7319206, media.Size);\n            Assert.AreEqual(86395, media.ExpiresAfterSeconds);\n            Assert.AreEqual(\"video/mp4\", media.VideoType);\n            Assert.IsNotNull(media.ProcessingInfo);\n            MediaProcessingInfo info = media.ProcessingInfo;\n            Assert.AreEqual(MediaProcessingInfo.Succeeded, info.State);\n            Assert.AreEqual(100, info.ProgressPercent);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var statProc = new MediaRequestProcessor<Media>() { BaseUrl = BaseUrlAndVersion };\n\n            List<Media> stats = statProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, stats.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var statProc = new MediaRequestProcessor<Media>() \n            { \n                BaseUrl = BaseUrlAndVersion,\n                Type = MediaType.Status,\n                Command = \"STATUS\",\n                MediaID = 123,\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusInProgressResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(MediaType.Status, media.Type);\n            Assert.AreEqual(\"STATUS\", media.Command);\n            Assert.AreEqual(123ul, media.MediaID);\n        }\n\n        const string MediaStatusInProgressResponse = @\"{\n\t\"\"media_id\"\": 772492064386912256,\n\t\"\"media_id_string\"\": \"\"772492064386912256\"\",\n\t\"\"processing_info\"\": {\n\t\t\"\"state\"\": \"\"in_progress\"\",\n\t\t\"\"check_after_secs\"\": 5,\n\t\t\"\"progress_percent\"\": 5\n\t}\n}\";\n\n        const string MediaStatusFailedResponse = @\"{\n\t\"\"media_id\"\": 773000650376548356,\n\t\"\"media_id_string\"\": \"\"773000650376548356\"\",\n\t\"\"size\"\": 28276017,\n\t\"\"processing_info\"\": {\n\t\t\"\"state\"\": \"\"failed\"\",\n\t\t\"\"progress_percent\"\": 100,\n\t\t\"\"error\"\": {\n\t\t\t\"\"code\"\": 3,\n\t\t\t\"\"name\"\": \"\"UnsupportedMedia\"\",\n\t\t\t\"\"message\"\": \"\"Duration 10.minutes+22.seconds+628.milliseconds exceeds max duration of 2.minutes+20.seconds\"\"\n\t\t}\n\t}\n}\";\n\n        const string MediaStatusSucceededResponse = @\"{\n\t\"\"media_id\"\": 773017325037580289,\n\t\"\"media_id_string\"\": \"\"773017325037580289\"\",\n\t\"\"size\"\": 7319206,\n\t\"\"expires_after_secs\"\": 86395,\n\t\"\"video\"\": {\n\t\t\"\"video_type\"\": \"\"video\\/mp4\"\"\n\t},\n\t\"\"processing_info\"\": {\n\t\t\"\"state\"\": \"\"succeeded\"\",\n\t\t\"\"progress_percent\"\": 100\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/MuteTests/MuteCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.MuteTests\n{\n    [TestClass]\n    public class MuteCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public MuteCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.MuteAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/mutes/users/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            const ulong UserID = 1;\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.MuteAsync(UserID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/mutes/users/create.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.MuteAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_ScreenName_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"screenName\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.MuteAsync(null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_UserID_Throws_On_Zero_Input()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.MuteAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UnMuteAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/mutes/users/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            const ulong UserID = 1;\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UnMuteAsync(UserID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/mutes/users/destroy.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UnMuteAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_ScreenName_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"screenName\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UnMuteAsync(null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_UserID_Throws_On_Zero_Input()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnMuteAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/MuteTests/MuteRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.MuteTests\n{\n    [TestClass]\n    public class MuteRequestProcessorTests\n    {\n        public MuteRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new MuteRequestProcessor<Mute>();\n            Expression<Func<Mute, bool>> expression =\n                mute =>\n                    mute.Type == MuteType.List &&\n                    mute.Cursor == 123L &&\n                    mute.SkipStatus == true &&\n                    mute.IncludeEntities == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)MuteType.List).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_IDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/mutes/users/ids.json?cursor=123\";\n            var reqProc = new MuteRequestProcessor<Mute> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)MuteType.IDs).ToString(CultureInfo.InvariantCulture) },\n                        { \"Cursor\", \"123\" }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_List_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/mutes/users/list.json?cursor=123&include_entities=false&skip_status=true\";\n            var reqProc = new MuteRequestProcessor<Mute> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)MuteType.List).ToString(CultureInfo.InvariantCulture) },\n                        { \"Cursor\", \"123\" },\n                        { \"IncludeEntities\", false.ToString() },\n                        { \"SkipStatus\", true.ToString() }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_IDs_Response()\n        {\n            var reqProc = new MuteRequestProcessor<Mute> { Type = MuteType.IDs };\n\n            List<Mute> mutes = reqProc.ProcessResults(IdsResponse);\n\n            Assert.IsNotNull(mutes);\n            Assert.IsNotNull(mutes.SingleOrDefault());\n            var mute = mutes.Single();\n            Assert.IsNotNull(mute);\n            var idList = mute.IDList;\n            Assert.IsNotNull(idList);\n            Assert.IsTrue(idList.Any());\n            var id = idList.First();\n            Assert.AreEqual(5676142ul, id);\n            var users = mute.Users;\n            Assert.IsNotNull(users);\n            Assert.IsFalse(users.Any());\n            var cursor = mute.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_UsersList_Response()\n        {\n            var reqProc = new MuteRequestProcessor<Mute> { Type = MuteType.List };\n\n            List<Mute> muteList = reqProc.ProcessResults(UsersResponse);\n\n            Assert.IsNotNull(muteList);\n            Assert.IsNotNull(muteList.SingleOrDefault());\n            var mute = muteList.Single();\n            Assert.IsNotNull(mute);\n            var users = mute.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            var user = users.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"93604443\", user.UserIDResponse);\n            var ids = mute.IDList;\n            Assert.IsNotNull(ids);\n            Assert.IsFalse(ids.Any());\n            var cursor = mute.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n        }\n\n        const string IdsResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"ids\"\":[\n      5676142\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":1\n}\";\n\n        const string UsersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":93604443,\n         \"\"id_str\"\":\"\"93604443\"\",\n         \"\"name\"\":\"\"Geert van Horrik\"\",\n         \"\"screen_name\"\":\"\"GeertvanHorrik\"\",\n         \"\"location\"\":\"\"Heeze, The Netherlands\"\",\n         \"\"description\"\":\"\"Software Developer and creator of the Catel MVVM framework (see http:\\/\\/catel.codeplex.com)\"\",\n         \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        27\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":212,\n         \"\"friends_count\"\":97,\n         \"\"listed_count\"\":12,\n         \"\"created_at\"\":\"\"Mon Nov 30 10:32:19 +0000 2009\"\",\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":3600,\n         \"\"time_zone\"\":\"\"Amsterdam\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":4431,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 11:10:16 +0000 2012\"\",\n            \"\"id\"\":280993376646598658,\n            \"\"id_str\"\":\"\"280993376646598658\"\",\n            \"\"text\"\":\"\"@FransBouma Dank, ik zocht op changes maar moest queue hebben, kan ik weer verder :-)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":280993183754768384,\n            \"\"in_reply_to_status_id_str\"\":\"\"280993183754768384\"\",\n            \"\"in_reply_to_user_id\"\":67035608,\n            \"\"in_reply_to_user_id_str\"\":\"\"67035608\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"FransBouma\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"FransBouma\"\",\n                     \"\"name\"\":\"\"Frans Bouma\"\",\n                     \"\"id\"\":67035608,\n                     \"\"id_str\"\":\"\"67035608\"\",\n                     \"\"indices\"\":[\n                        0,\n                        11\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":389487039,\n         \"\"id_str\"\":\"\"389487039\"\",\n         \"\"name\"\":\"\"Elizabeth Hulett\"\",\n         \"\"screen_name\"\":\"\"EHulett\"\",\n         \"\"location\"\":\"\"Defuniak Springs\"\",\n         \"\"description\"\":\"\"\"\",\n         \"\"url\"\":null,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":4,\n         \"\"friends_count\"\":10,\n         \"\"listed_count\"\":0,\n         \"\"created_at\"\":\"\"Wed Oct 12 14:16:54 +0000 2011\"\",\n         \"\"favourites_count\"\":1,\n         \"\"utc_offset\"\":null,\n         \"\"time_zone\"\":null,\n         \"\"geo_enabled\"\":false,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":3,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Mon Dec 17 19:47:23 +0000 2012\"\",\n            \"\"id\"\":280761124901765120,\n            \"\"id_str\"\":\"\"280761124901765120\"\",\n            \"\"text\"\":\"\"Can't believe Amanda is 28weeks today.... Lily Rose will be here soon :)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/#!\\/download\\/ipad\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for iPad\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":608455311,\n         \"\"id_str\"\":\"\"608455311\"\",\n         \"\"name\"\":\"\"\\/\\/ mellodev\"\",\n         \"\"screen_name\"\":\"\"mellodev\"\",\n         \"\"location\"\":\"\"Las Vegas, NV\"\",\n         \"\"description\"\":\"\".Net aficionado and Software craftsman. C#, Asp.Net, TSQL, Quartz.Net, WebForms, MVC + WP7. I build Social Office Suite (@SOS) and tweet about #DevLife\"\",\n         \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        46\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":355,\n         \"\"friends_count\"\":1373,\n         \"\"listed_count\"\":20,\n         \"\"created_at\"\":\"\"Thu Jun 14 18:32:56 +0000 2012\"\",\n         \"\"favourites_count\"\":109,\n         \"\"utc_offset\"\":-28800,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":1272,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 21:05:14 +0000 2012\"\",\n            \"\"id\"\":281143104046768129,\n            \"\"id_str\"\":\"\"281143104046768129\"\",\n            \"\"text\"\":\"\"@adamralph Nice background btw! Can't wait to go riding this year!\"\",\n            \"\"source\"\":\"\"web\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":281141527877652480,\n            \"\"in_reply_to_status_id_str\"\":\"\"281141527877652480\"\",\n            \"\"in_reply_to_user_id\"\":5966642,\n            \"\"in_reply_to_user_id_str\"\":\"\"5966642\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"adamralph\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"adamralph\"\",\n                     \"\"name\"\":\"\"Adam Ralph\"\",\n                     \"\"id\"\":5966642,\n                     \"\"id_str\"\":\"\"5966642\"\",\n                     \"\"indices\"\":[\n                        0,\n                        10\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"191134\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/608455311\\/1348679711\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":1,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"previous_cursor\"\":2,\n   \"\"previous_cursor_str\"\":\"\"2\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿#if !NETCORE\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitterPcl.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"LinqToTwitterPcl.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"d1517f7c-d2db-4eab-997f-c05f895eee4f\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n#endif\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/RawTests/RawCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.RawTests\n{\n    [TestClass]\n    public class RawCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public RawCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(EmptyRawResponse);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void RawRequestProcessor_Works_With_Actions()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            Assert.IsInstanceOfType(rawReqProc, typeof(IRequestProcessorWithAction<Raw>));\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawAsync_Invokes_Executor_Execute()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/statuses/update.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawAsync_WithRawResultProperty_Succeeds()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            Assert.AreEqual(EmptyRawResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_Returns_Raw_Result()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n            const string ExpectedResult = \"<status>xxx</status>\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(ExpectedResult);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<Raw>(HttpMethod.Post.ToString(), FullUrl, parameters, It.IsAny<CancellationToken>())).Returns(tcsResponse.Task);\n\n            string actualResult = await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            Assert.AreEqual(ExpectedResult, actualResult);\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_Resolves_Too_Many_Url_Slashes()\n        {\n            const string QueryStringWithBeginningSlash = \"/statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryStringWithBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    HttpMethod.Post.ToString(),\n                    FullUrl,\n                    parameters,\n                    It.IsAny<CancellationToken>()), Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_Resolves_Too_Few_Url_Slashes()\n        {\n            const string QueryStringWithoutBeginningSlash = \"statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryStringWithoutBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    HttpMethod.Post.ToString(),\n                    FullUrl,\n                    parameters,\n                    It.IsAny<CancellationToken>()), Times.Once());\n        }\n\n        const string EmptyRawResponse = \"{}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/RawTests/RawRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.RawTests\n{\n    [TestClass]\n    public class RawRequestProcessorTests\n    {\n        public RawRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n            Expression<Func<Raw, bool>> expression =\n                raw =>\n                    raw.QueryString == \"/statuses/public_timeline.json\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = rawReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"QueryString\", \"/statuses/public_timeline.json\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Full_Url()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"QueryString\", \"statuses/public_timeline.json\"},\n             };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_NonNull_QueryString()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"QueryString\", \"statuses/public_timeline.json\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"QueryString\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_NonBlank_QueryString()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", \" \"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"QueryString\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Resolves_Extra_Slash_Between_BaseUrl_And_QueryString()\n        {\n            string baseUrlWithTrailingSlash = \"https://api.twitter.com/1.1/\";\n            string queryStringWithPrecedingSlash = \"/statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", queryStringWithPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Resolves_No_Slash_Between_BaseUrl_And_QueryString()\n        {\n            string baseUrlWithoutTrailingSlash = \"https://api.twitter.com/1.1\";\n            string queryStringWithoutPrecedingSlash = \"statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithoutTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {\"QueryString\", queryStringWithoutPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessIDResultsTest()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            List<Raw> result = rawReqProc.ProcessResults(QueryResponse);\n\n            Assert.AreEqual(QueryResponse, result.First().Response);\n        }\n\n        const string QueryResponse = @\"<statuses type=\"\"array\"\">\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906745</id>\n    <text>ah,vou lá comer</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>77880019</id>\n      <name>caah </name>\n      <screen_name>caahbuss</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/440024240/d_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>48</followers_count>\n      <profile_background_color>131516</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>009999</profile_link_color>\n      <profile_sidebar_fill_color>efefef</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>eeeeee</profile_sidebar_border_color>\n      <friends_count>47</friends_count>\n      <created_at>Mon Sep 28 00:47:48 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme14/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>211</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906740</id>\n    <text>É só ir no site e participar... http://tinyurl.com/ygvepg5</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>76732695</id>\n      <name>Embarque Imediato</name>\n      <screen_name>EmbarqueNoFilme</screen_name>\n      <location></location>\n      <description>Twitter oficial do filme Embarque Imediato autorizado pela Europa Filmes.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/473272502/poster_embarque_imediato_rostoatores_2_normal.jpg</profile_image_url>\n      <url>http://embarqueimediatoofilme.blogspot.com/</url>\n      <protected>false</protected>\n      <followers_count>401</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>381</friends_count>\n      <created_at>Wed Sep 23 19:33:49 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-14400</utc_offset>\n      <time_zone>Santiago</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/45672389/twitter08.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>224</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906722</id>\n    <text>Se pá, ir em aniversário rico, onde deve haver muitas etiquetas, e eu odeio, pois gosto de aniversário de pobre onde é churras de havaiana</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>55657026</id>\n      <name>bee</name>\n      <screen_name>beemk</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/463563734/Imagem_004_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>76</followers_count>\n      <profile_background_color>1A1B1F</profile_background_color>\n      <profile_text_color>666666</profile_text_color>\n      <profile_link_color>2FC2EF</profile_link_color>\n      <profile_sidebar_fill_color>252429</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>181A1E</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Jul 10 20:34:52 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme9/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>819</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906718</id>\n    <text>@BruBloinski é... digamos que de tradicional só os mesmos shows horríveis de sempre. só.</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118865157</in_reply_to_status_id>\n    <in_reply_to_user_id>60946427</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>BruBloinski</in_reply_to_screen_name>\n    <user>\n      <id>16219715</id>\n      <name>wickybr</name>\n      <screen_name>wickybr</screen_name>\n      <location></location>\n      <description>25 anos, publicidade, cerveja Original. Blogueiro, curioso, as vezes nervoso, nem sempre calmo. Leitor, afinador e desajeitador.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/287234140/fbranco_copy_normal.jpg</profile_image_url>\n      <url>http://www.wickybr.blogspot.com</url>\n      <protected>false</protected>\n      <followers_count>41</followers_count>\n      <profile_background_color>642D8B</profile_background_color>\n      <profile_text_color>3D1957</profile_text_color>\n      <profile_link_color>FF0000</profile_link_color>\n      <profile_sidebar_fill_color>7AC3EE</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>65B0DA</profile_sidebar_border_color>\n      <friends_count>59</friends_count>\n      <created_at>Wed Sep 10 11:58:16 +0000 2008</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/28744035/base-back-twitter2.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>586</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906715</id>\n    <text>Завтра \"\"Саломея\"\" Виктюка ^^</text>\n    <source>&lt;a href=\"\"http://www.tweetdeck.com/\"\" rel=\"\"nofollow\"\"&gt;TweetDeck&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>45792079</id>\n      <name>Нестерова Валерия</name>\n      <screen_name>Valeriya22</screen_name>\n      <location>Russia, Kazan</location>\n      <description>Sunshine Cowboy</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/511281997/IMG_6486-_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>30</followers_count>\n      <profile_background_color>9AE4E8</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n      <friends_count>31</friends_count>\n      <created_at>Tue Jun 09 07:59:17 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/17289836/22334353_lll01.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>241</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906713</id>\n    <text>Diferente C S!</text>\n    <source>&lt;a href=\"\"http://www.myspace.com/sync\"\" rel=\"\"nofollow\"\"&gt;MySpace&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>83531026</id>\n      <name>Abraham</name>\n      <screen_name>yosoeelabraham</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/479193636/bleach_chad0005_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>0</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>0</friends_count>\n      <created_at>Mon Oct 19 05:38:34 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906712</id>\n    <text>@REL407 you sound like a Disney original! I was scared for the entire summer!!!! Smdh</text>\n    <source>&lt;a href=\"\"http://ubertwitter.com\"\" rel=\"\"nofollow\"\"&gt;UberTwitter&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118659350</in_reply_to_status_id>\n    <in_reply_to_user_id>33132386</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>REL407</in_reply_to_screen_name>\n    <user>\n      <id>91234221</id>\n      <name>Calesha Thompson</name>\n      <screen_name>missKILLAmouse</screen_name>\n      <location>ÜT: 39.739345,-104.97695</location>\n      <description>La plus belle. KILLA. Never change</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/544207431/135152_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>13</followers_count>\n      <profile_background_color>030303</profile_background_color>\n      <profile_text_color>8c878c</profile_text_color>\n      <profile_link_color>e30417</profile_link_color>\n      <profile_sidebar_fill_color>393f42</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>050505</profile_sidebar_border_color>\n      <friends_count>18</friends_count>\n      <created_at>Fri Nov 20 00:53:08 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Eastern Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/56030928/killainstincts.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>108</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906709</id>\n    <text>45 I use http://x2t.com/6145 to get 100 followers a day. It work great</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>50541031</id>\n      <name>oaiden;</name>\n      <screen_name>helloaiden17</screen_name>\n      <location>Philadelphia</location>\n      <description>by the looks of my twitter picture, you can call me Lindsey Lohan.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/533420177/151033_normal.jpg</profile_image_url>\n      <url>http://www.myspace.com/omgaiden</url>\n      <protected>false</protected>\n      <followers_count>92</followers_count>\n      <profile_background_color>fa3483</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>fa3483</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>202</friends_count>\n      <created_at>Thu Jun 25 03:45:43 +0000 2009</created_at>\n      <favourites_count>4</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/54654224/1111111111.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>706</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906708</id>\n    <text>Police parked outside my house #ilovemyneighbourhood</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>23310378</id>\n      <name>Natalie Dye</name>\n      <screen_name>natalie_xo</screen_name>\n      <location>Yorkshire, its a state of mind</location>\n      <description>Listen to the sound of the world then watch it turn.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/525311356/Snapshot_20091026_10_normal.jpg</profile_image_url>\n      <url>http://www.facebook.com/natalie0x</url>\n      <protected>false</protected>\n      <followers_count>102</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>4597d6</profile_link_color>\n      <profile_sidebar_fill_color>2b3575</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>93</friends_count>\n      <created_at>Sun Mar 08 14:05:12 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/55410721/Desktop_Background.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>1794</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906705</id>\n    <text>@robertabachert ta eu vo tenta adiantar algumas coisas mais eu preciso das fotos</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118781972</in_reply_to_status_id>\n    <in_reply_to_user_id>61624985</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>robertabachert</in_reply_to_screen_name>\n    <user>\n      <id>61279770</id>\n      <name>Patrícia Ferrari</name>\n      <screen_name>PatyFerrariC</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/534284147/patttttttty_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>35</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>050505</profile_text_color>\n      <profile_link_color>4978d6</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>090a0a</profile_sidebar_border_color>\n      <friends_count>51</friends_count>\n      <created_at>Wed Jul 29 19:53:07 +0000 2009</created_at>\n      <favourites_count>6</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/26221650/16587349.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>518</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906704</id>\n    <text>RT @ALuizCosta: Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <retweeted_status>\n      <created_at>Fri Nov 27 12:31:15 +0000 2009</created_at>\n      <id>6110610973</id>\n      <text>Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n      <source>web</source>\n      <truncated>false</truncated>\n      <in_reply_to_status_id></in_reply_to_status_id>\n      <in_reply_to_user_id></in_reply_to_user_id>\n      <favorited>false</favorited>\n      <in_reply_to_screen_name></in_reply_to_screen_name>\n      <user>\n        <id>67778641</id>\n        <name>AntonioLuiz MCCosta</name>\n        <screen_name>ALuizCosta</screen_name>\n        <location>São Paulo, Brasil</location>\n        <description>Antonio Luiz escreve na revista CartaCapital e gosta de ciência, filosofia e literatura, principalmente fantasia e ficção científica</description>\n        <profile_image_url>http://a3.twimg.com/profile_images/375056565/AntonioLuiz_normal.jpg</profile_image_url>\n        <url>http://www.scribd.com/people/documents/3817321-antonio-luiz-monteiro-coelho-da-costa</url>\n        <protected>false</protected>\n        <followers_count>460</followers_count>\n        <profile_background_color>9AE4E8</profile_background_color>\n        <profile_text_color>333333</profile_text_color>\n        <profile_link_color>b30000</profile_link_color>\n        <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n        <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n        <friends_count>44</friends_count>\n        <created_at>Sat Aug 22 01:31:02 +0000 2009</created_at>\n        <favourites_count>0</favourites_count>\n        <utc_offset>-10800</utc_offset>\n        <time_zone>Brasilia</time_zone>\n        <profile_background_image_url>http://a1.twimg.com/profile_background_images/31703608/celebraohf2.jpg</profile_background_image_url>\n        <profile_background_tile>true</profile_background_tile>\n        <statuses_count>1427</statuses_count>\n        <notifications>false</notifications>\n        <geo_enabled>false</geo_enabled>\n        <verified>false</verified>\n        <following>false</following>\n      </user>\n      <geo />\n    </retweeted_status>\n    <user>\n      <id>77265167</id>\n      <name>SL da Silva</name>\n      <screen_name>sergio_virtual</screen_name>\n      <location></location>\n      <description>Um brasileiro no mundo do Twitter!</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/460588539/DSC00180_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>20</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Sep 25 17:31:11 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>514</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906701</id>\n    <text>@No1SassyGrl anywhere! I have to take vacay bc I have too many hours accrued at work and I want to travel!</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6113853732</in_reply_to_status_id>\n    <in_reply_to_user_id>14408045</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>No1SassyGrl</in_reply_to_screen_name>\n    <user>\n      <id>9408302</id>\n      <name>Ian Mone</name>\n      <screen_name>x5455</screen_name>\n      <location>Puerto Rico</location>\n      <description>Intelligent, laid back, addicted to videogames, X-Men and TV. Hopelessly romantic and hoping for a nice boy to spend time with</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/84361594/icon_twitter_normal.jpg</profile_image_url>\n      <url>http://x5455.livejournal.com</url>\n      <protected>false</protected>\n      <followers_count>75</followers_count>\n      <profile_background_color>8B542B</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>9D582E</profile_link_color>\n      <profile_sidebar_fill_color>EADEAA</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>D9B17E</profile_sidebar_border_color>\n      <friends_count>38</friends_count>\n      <created_at>Fri Oct 12 18:26:24 +0000 2007</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme8/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1194</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906696</id>\n    <text>@nickjonas amor! te hiciste el twitter! jaja el otro día me lo habías dicho XD ahora unite al @teamfasofachero</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>56783491</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>nickjonas</in_reply_to_screen_name>\n    <user>\n      <id>37250104</id>\n      <name>Milagros C.</name>\n      <screen_name>militaaa</screen_name>\n      <location>Buenos Aires, Argentina</location>\n      <description>This is my crazy world... I'm just being milita. I hope you like my antics and madness, because that's me :)  </description>\n      <profile_image_url>http://a3.twimg.com/profile_images/532032207/P1050370_-_copia_normal.JPG</profile_image_url>\n      <url>http://www.facebook.com/profile.php?id=1010395037&amp;ref=name</url>\n      <protected>false</protected>\n      <followers_count>204</followers_count>\n      <profile_background_color>050505</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>746278</profile_link_color>\n      <profile_sidebar_fill_color>ff088c</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>d1bcbc</profile_sidebar_border_color>\n      <friends_count>300</friends_count>\n      <created_at>Sat May 02 18:17:02 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Buenos Aires</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/54044533/Teen_Vogue_Collage_by_bob55_JOE.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>6718</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906693</id>\n    <text>@MrPeterAndre its really good of u to set the record straight on that coz every1 believes everything they read abwt katie n its not fair!x</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6106899259</in_reply_to_status_id>\n    <in_reply_to_user_id>24086418</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>MrPeterAndre</in_reply_to_screen_name>\n    <user>\n      <id>54843229</id>\n      <name>ashleigh berry</name>\n      <screen_name>missashleigh19</screen_name>\n      <location>bradford</location>\n      <description>waaasssssup :) mobile beauty therapist from bradford, probably should say leeds but that would be lying haha follow me :)</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/503338157/halloween_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>7</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>362720</profile_text_color>\n      <profile_link_color>B40B43</profile_link_color>\n      <profile_sidebar_fill_color>E5507E</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>CC3366</profile_sidebar_border_color>\n      <friends_count>16</friends_count>\n      <created_at>Wed Jul 08 08:56:21 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme11/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>49</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906692</id>\n    <text>RT @ArmsLikeYours Chain Reaction with a Skylit Drive Next Friday!!!</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>18696988</id>\n      <name>Faith Sugarhigh</name>\n      <screen_name>Miss_Sugarhigh</screen_name>\n      <location>Texas</location>\n      <description>I'm a ProMoTeR/Booking Agent. I love helping bands/artists/Concerts &amp; events that inspire/change the scene. I support Skate4Cancer.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/367961955/pink_pink_003_normal.JPG</profile_image_url>\n      <url>http://www.myspace.com/miss_sugarhigh</url>\n      <protected>false</protected>\n      <followers_count>1172</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>373799</profile_link_color>\n      <profile_sidebar_fill_color>ff3892</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>822</friends_count>\n      <created_at>Tue Jan 06 21:42:00 +0000 2009</created_at>\n      <favourites_count>3</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/30568555/btf_witness_cover400x400.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>11612</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906683</id>\n    <text>64 Heyy I just got alot of followers using http://ohurl.com/0G .</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>61754026</id>\n      <name>Samien</name>\n      <screen_name>Samien501</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://s.twimg.com/a/1259091217/images/default_profile_5_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>382</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>1071</friends_count>\n      <created_at>Fri Jul 31 11:52:27 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>208</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906674</id>\n    <text>@JohnCarnell Thanks for the blog post, looking forward to getting you a proper write up. Have yourself a good evening : )</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>39247092</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>JohnCarnell</in_reply_to_screen_name>\n    <user>\n      <id>29426018</id>\n      <name>David Wood</name>\n      <screen_name>BigDaveSB</screen_name>\n      <location>Gloucester</location>\n      <description>I’m a serial fundraising; capoeira playing; science loving; hat wearing; skeptically enquiring geek</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/359441931/twitterProfilePhoto_normal.jpg</profile_image_url>\n      <url>http://justgiving.com/melonandbigdave</url>\n      <protected>false</protected>\n      <followers_count>177</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>161</friends_count>\n      <created_at>Tue Apr 07 11:02:36 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1335</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906673</id>\n    <text>I think it's possible my characters laugh and smile too much. Not that I need to be thinking about such things since I just need to write!</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>14297876</id>\n      <name>Misty Baird</name>\n      <screen_name>Langwidere</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/66698519/Photo_80_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>47</followers_count>\n      <profile_background_color>0099B9</profile_background_color>\n      <profile_text_color>3C3940</profile_text_color>\n      <profile_link_color>0099B9</profile_link_color>\n      <profile_sidebar_fill_color>95E8EC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>5ED4DC</profile_sidebar_border_color>\n      <friends_count>56</friends_count>\n      <created_at>Thu Apr 03 23:38:48 +0000 2008</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-25200</utc_offset>\n      <time_zone>Mountain Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme4/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1907</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906670</id>\n    <text>@bpradolovers eu nem ligo pra essas coisas de responder e pa.. pra MIM eles sao os msm desde SEMPRE e vo continuar amando eles me*</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118810923</in_reply_to_status_id>\n    <in_reply_to_user_id>74561853</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>bpradolovers</in_reply_to_screen_name>\n    <user>\n      <id>48044595</id>\n      <name>Marie Rochebois !</name>\n      <screen_name>marie_vr</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/541774726/Picture_066_normal.jpg</profile_image_url>\n      <url>http://www.orkut.com.br/Main#Profile?uid=8665293908869110209&amp;rl=t</url>\n      <protected>false</protected>\n      <followers_count>239</followers_count>\n      <profile_background_color>eb1717</profile_background_color>\n      <profile_text_color>1f1f1d</profile_text_color>\n      <profile_link_color>f01fe9</profile_link_color>\n      <profile_sidebar_fill_color>8838bd</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>fc0ad8</profile_sidebar_border_color>\n      <friends_count>160</friends_count>\n      <created_at>Wed Jun 17 17:44:04 +0000 2009</created_at>\n      <favourites_count>85</favourites_count>\n      <utc_offset>-32400</utc_offset>\n      <time_zone>Alaska</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/53871388/caveira-de-diamantes_-amor_dios.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>7664</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906667</id>\n    <text>Follow my nigga, my Lil brother @KENNETHVP he keep big shit going on in the M</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>30511463</id>\n      <name>Dj Hollywood Oompa </name>\n      <screen_name>HollywoodOompa</screen_name>\n      <location></location>\n      <description>i am a cool ass person. i am a DJ and i am an entertainer. i dont keep drama around me, and i am a hard worker hell im working now </description>\n      <profile_image_url>http://a1.twimg.com/profile_images/540923604/16644_568873017318_56703609_33197738_592021_n_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>278</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>81</friends_count>\n      <created_at>Sat Apr 11 19:55:17 +0000 2009</created_at>\n      <favourites_count>2</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/55606030/mix.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>457</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n</statuses>\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/SavedSearchTests/SavedSearchCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.SavedSearchTests\n{\n    [TestClass]\n    public class SavedSearchCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public SavedSearchCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitializeTwitterContextMock()\n        {\n            authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void SavedSearchRequestProcessor_Handles_Actions()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsInstanceOfType(searchReqProc, typeof(IRequestProcessorWithAction<SavedSearch>));\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_Throws_On_Missing_Query()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateSavedSearchAsync(null));\n\n            Assert.AreEqual(\"query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_Invokes_Executor_Execute()\n        {\n            const string Query = \"#LinqToTwitter\";\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"query\", Query }\n            };\n\n            SavedSearch search = await ctx.CreateSavedSearchAsync(\"#LinqToTwitter\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/saved_searches/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(search);\n            Assert.AreEqual(Query, search.Name);\n            Assert.AreEqual(Query, search.Query);\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_WithRawResult_Succeeds()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            await ctx.CreateSavedSearchAsync(\"#LinqToTwitter\");\n\n            Assert.AreEqual(SavedSearchResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearch_Throws_On_Invalid_ID()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroySavedSearchAsync(0));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearchAsync_Invokes_Executor_Execute()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var parameters = new Dictionary<string, string>();\n\n            SavedSearch search = await ctx.DestroySavedSearchAsync(123);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/saved_searches/destroy/123.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(123ul, search.ID);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearchAsync_WithRawResult_Succeeds()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            await ctx.DestroySavedSearchAsync(123);\n\n            Assert.AreEqual(SavedSearchResponse, ctx.RawResult);\n        }\n\n        const string SavedSearchResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/SavedSearchTests/SavedSearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SavedSearchTests\n{\n    [TestClass]\n    public class SavedSearchRequestProcessorTests\n    {\n        public SavedSearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void SavedSearchRequestProcessor_Works_On_Json_Format_Data()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsInstanceOfType(searchReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Searches_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Searches };\n\n            var searches = searchReqProc.ProcessResults(SearchesResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.AreEqual(2, searches.Count);\n            var search = searches.First();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Query);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(0, search.Position);\n            Assert.AreEqual(3275867ul, search.IDResponse);\n            Assert.AreEqual(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Show };\n\n            var searches = searchReqProc.ProcessResults(ShowResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.IsNotNull(searches.SingleOrDefault());\n            var search = searches.Single();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Query);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(0, search.Position);\n            Assert.AreEqual(3275867ul, search.IDResponse);\n            Assert.AreEqual(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            var searches = reqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, searches.Count);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<SavedSearch, bool>> expression =\n                search =>\n                    search.Type == SavedSearchType.Show &&\n                    search.ID == 123;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = searchReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SavedSearchType.Show).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"123\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Missing_ID()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/show/123.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() },\n                { \"ID\", \"123\" }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_SavedSearches_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/list.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Searches.ToString() }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n\n        const string SearchesResponse = @\"[\n   {\n      \"\"query\"\":\"\"#LinqToTwitter\"\",\n      \"\"name\"\":\"\"#LinqToTwitter\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"3275867\"\",\n      \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n      \"\"id\"\":3275867\n   },\n   {\n      \"\"query\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"name\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"101035995\"\",\n      \"\"created_at\"\":\"\"Sun Apr 29 04:09:00 +0000 2012\"\",\n      \"\"id\"\":101035995\n   }\n]\";\n\n        const string ShowResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/SearchTests/SearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SearchTests\n{\n    [TestClass]\n    public class SearchRequestProcessorTests\n    {\n        public SearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new SearchRequestProcessor<Search>();\n            Expression<Func<Search, bool>> expression =\n                search =>\n                    search.Type == SearchType.Search &&\n                    search.GeoCode == \"40.757929,-73.985506,25km\" &&\n                    search.SearchLanguage == \"en\" &&\n                    search.Count == 10 &&\n                    search.Query == \"LINQ to Twitter\" &&\n                    search.SinceID == 123 &&\n                    search.MaxID == 200 &&\n                    search.ResultType == ResultType.Popular &&\n                    search.IncludeEntities == true &&\n                    search.TweetMode == TweetMode.Extended;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SearchType.Search).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"GeoCode\", \"40.757929,-73.985506,25km\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SearchLanguage\", \"en\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"LINQ to Twitter\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"MaxID\", \"200\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ResultType\", ((int)ResultType.Popular).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Search.TweetMode), ((int) TweetMode.Extended).ToString(CultureInfo.InvariantCulture))));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&geocode=40.757929%2C-73.985506%2C25km&lang=en&count=10&until=2011-07-04&since_id=1&result_type=popular&include_entities=false&tweet_mode=extended\";\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"GeoCode\", \"40.757929,-73.985506,25km\" },\n                    { \"SearchLanguage\", \"en\" },\n                    { \"Count\", \"10\" },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"SinceID\", \"1\" },\n                    { \"Until\", new DateTime(2011, 7, 4).ToString() },\n                    { \"ResultType\", ResultType.Popular.ToString() },\n                    { \"IncludeEntities\", false.ToString() },\n                    { nameof(Search.TweetMode), ((int)TweetMode.Extended).ToString() }\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&geocode=40.757929%2C-73.985506%2C25km&lang=en&count=10&until=2011-07-04&since_id=1&result_type=popular&include_entities=false&tweet_mode=extended\";\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"GeoCode\", \"40.757929,-73.985506,25km\" },\n                    { \"SearchLanguage\", \"en\" },\n                    { \"Count\", \"10\" },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"SinceID\", \"1\" },\n                    { \"Until\", new DateTime(2011, 7, 4).ToString() },\n                    { \"ResultType\", ResultType.Popular.ToString() },\n                    { \"IncludeEntities\", false.ToString() },\n                    { nameof(Search.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Parameters_Null()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                searchReqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_Encodes_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            string expected = searchReqProc.BaseUrl + \"search/tweets.json?q=Contains%20Space\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"Contains Space\" }\n                };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentNullException>(() =>\n                    searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Adds_True_IncludeEntities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&include_entities=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"LINQ to Twitter\"},\n                    { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = searchProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Creates_List_Of_Status()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results.First().Statuses);\n            Assert.IsTrue(results.First().Statuses.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_CreatedAt()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(\n                new DateTimeOffset(2012, 9, 6, 0, 10, 12, new TimeSpan(0, 0, 0)), \n                results.First().Statuses.First().CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Instantiates_Entities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results.First().Statuses.First().Entities);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Urls()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UrlEntity> urls = results.First().Statuses.First().Entities.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(1, urls.Count);\n            UrlEntity firstUrl = urls.First();\n            Assert.AreEqual(\"http://t.co/Cc85Yzpj\", firstUrl.Url);\n            Assert.AreEqual(\"http://bit.ly/PSOVso\", firstUrl.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/PSOVso\", firstUrl.DisplayUrl);\n            Assert.AreEqual(68, firstUrl.Start);\n            Assert.AreEqual(88, firstUrl.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Hashtags()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<HashTagEntity> hashes = results.First().Statuses[0].Entities.HashTagEntities;\n            Assert.IsNotNull(hashes);\n            Assert.AreEqual(3, hashes.Count);\n            HashTagEntity firstHash = hashes.First();\n            Assert.AreEqual(\"twitterapi\", firstHash.Text);\n            Assert.AreEqual(89, firstHash.Start);\n            Assert.AreEqual(100, firstHash.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Users()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UserMentionEntity> users = results.First().Statuses[0].Entities.UserMentionEntities;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            UserMentionEntity firstUser = users.First();\n            Assert.AreEqual(\"JoeMayo\", firstUser.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", firstUser.Name);\n            Assert.AreEqual(15411837ul, firstUser.Id);\n            Assert.AreEqual(3, firstUser.Start);\n            Assert.AreEqual(11, firstUser.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Media()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<MediaEntity> media = results.First().Statuses[0].Entities.MediaEntities;\n            Assert.IsNotNull(media);\n            Assert.AreEqual(1, media.Count);\n            MediaEntity firstMedia = media.First();\n            Assert.AreEqual(155683816676134913ul, firstMedia.ID);\n            Assert.AreEqual(\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrl);\n            Assert.AreEqual(\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrlHttps);\n            Assert.AreEqual(\"http://t.co/36MZIOyW\", firstMedia.Url);\n            Assert.AreEqual(\"pic.twitter.com/36MZIOyW\", firstMedia.DisplayUrl);\n            Assert.AreEqual(\"http://twitter.com/rschu/status/155683816671940609/photo/1\", firstMedia.ExpandedUrl);\n            Assert.AreEqual(\"photo\", firstMedia.Type);\n            Assert.IsNotNull(firstMedia.Sizes);\n            Assert.AreEqual(5, firstMedia.Sizes.Count);\n            PhotoSize firstSize = firstMedia.Sizes.First();\n            Assert.AreEqual(\"orig\", firstSize.Type);\n            Assert.AreEqual(1161, firstSize.Width);\n            Assert.AreEqual(925, firstSize.Height);\n            Assert.AreEqual(\"fit\", firstSize.Resize);\n            Assert.AreEqual(59, firstMedia.Start);\n            Assert.AreEqual(79, firstMedia.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Symbols()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<SymbolEntity> symbols = results.First().Statuses[0].Entities.SymbolEntities;\n            Assert.IsNotNull(symbols);\n            Assert.AreEqual(2, symbols.Count);\n            SymbolEntity symbol = symbols.First();\n            Assert.AreEqual(\"PEP\", symbol.Text);\n            Assert.AreEqual(114, symbol.Start);\n            Assert.AreEqual(118, symbol.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Search_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results);\n            Assert.IsNotNull(results.SingleOrDefault());\n            Search search = results.Single();\n            Assert.IsNotNull(search);\n            SearchMetaData metaData = search.SearchMetaData;\n            Assert.IsNotNull(metaData);\n            Assert.AreEqual(0.046m, metaData.CompletedIn);\n            Assert.AreEqual(281604225014824960ul, metaData.MaxID);\n            Assert.AreEqual(5ul, metaData.SinceID);\n            Assert.AreEqual(10, metaData.Count);\n            Assert.AreEqual(\"Twitter\", metaData.Query);\n            Assert.AreEqual(\n                \"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\",\n                metaData.NextResults);\n            Assert.AreEqual(\n                \"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\", \n                metaData.RefreshUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Status_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results);\n            Assert.IsNotNull(results.SingleOrDefault());\n            Search search = results.Single();\n            Assert.IsNotNull(search);\n            List<Status> statuses = search.Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.IsTrue(statuses.Any());\n            Status status = search.Statuses.First();\n            Assert.IsNotNull(status);\n            StatusMetaData metaData = status.MetaData;\n            Assert.IsNotNull(metaData);\n            Assert.AreEqual(\"recent\", metaData.ResultType);\n            Assert.AreEqual(\"en\", metaData.IsoLanguageCode);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Source()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(@\"<a href=\"\"http://www.csharp-station.com/\"\" rel=\"\"nofollow\"\">C# Station</a>\", results.First().Statuses.First().Source);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Text()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http://t.co/Cc85Yzpj #twitterapi #linq #linq2twitter\", results.First().Statuses.First().Text);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> searches = searchProc.ProcessResults(EmptyResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.IsNotNull(searches.SingleOrDefault());\n            Search search = searches.Single();\n            Assert.IsNotNull(search);\n            List<Status> results = search.Statuses;\n            Assert.IsNotNull(results);\n            Assert.IsFalse(results.Any());\n        }\n\n        const string SearchJson = @\"{\n   \"\"statuses\"\":[\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Sep 06 00:10:12 +0000 2012\"\",\n         \"\"id\"\":243501315039322112,\n         \"\"id_str\"\":\"\"243501315039322112\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eC# Station\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ],\n            \"\"symbols\"\": [\n                {\n                    \"\"text\"\": \"\"PEP\"\",\n                    \"\"indices\"\": [\n                        114,\n                        118\n                    ]\n                    },\n                    {\n                    \"\"text\"\": \"\"COKE\"\",\n                    \"\"indices\"\": [\n                        128,\n                        133\n                    ]\n                }\n            ],\n            \"\"media\"\":[\n               {\n                  \"\"id\"\":155683816676134913,\n                  \"\"id_str\"\":\"\"155683816676134913\"\",\n                  \"\"indices\"\":[\n                     59,\n                     79\n                  ],\n                  \"\"media_url\"\":\"\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"media_url_https\"\":\"\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"url\"\":\"\"http://t.co/36MZIOyW\"\",\n                  \"\"display_url\"\":\"\"pic.twitter.com/36MZIOyW\"\",\n                  \"\"expanded_url\"\":\"\"http://twitter.com/rschu/status/155683816671940609/photo/1\"\",\n                  \"\"type\"\":\"\"photo\"\",\n                  \"\"sizes\"\":{\n                     \"\"orig\"\":{\n                        \"\"w\"\":1161,\n                        \"\"h\"\":925,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"thumb\"\":{\n                        \"\"w\"\":150,\n                        \"\"h\"\":150,\n                        \"\"resize\"\":\"\"crop\"\"\n                     },\n                     \"\"large\"\":{\n                        \"\"w\"\":1024,\n                        \"\"h\"\":816,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"small\"\":{\n                        \"\"w\"\":340,\n                        \"\"h\"\":271,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"medium\"\":{\n                        \"\"w\"\":600,\n                        \"\"h\"\":478,\n                        \"\"resize\"\":\"\"fit\"\"\n                     }\n                  }\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:08:16 +0000 2012\"\",\n         \"\"id\"\":243123342771625985,\n         \"\"id_str\"\":\"\"243123342771625985\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:08:13\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:51 +0000 2012\"\",\n         \"\"id\"\":243121726920224769,\n         \"\"id_str\"\":\"\"243121726920224769\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:47\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:40 +0000 2012\"\",\n         \"\"id\"\":243121682787741696,\n         \"\"id_str\"\":\"\"243121682787741696\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:39\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 06:34:40 +0000 2012\"\",\n         \"\"id\"\":242873292950757376,\n         \"\"id_str\"\":\"\"242873292950757376\"\",\n         \"\"text\"\":\"\"Check out Working with Timelines with LINQ to Twitter written by @JoeMayo http:\\/\\/t.co\\/wTSodeyq\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/tweetbutton\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTweet Button\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/wTSodeyq\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/wblo.gs\\/dB3\"\",\n                  \"\"display_url\"\":\"\"wblo.gs\\/dB3\"\",\n                  \"\"indices\"\":[\n                     74,\n                     94\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     65,\n                     73\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 06:18:02 +0000 2012\"\",\n         \"\"id\"\":242506723078836224,\n         \"\"id_str\"\":\"\"242506723078836224\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 04:12:43 +0000 2012\"\",\n         \"\"id\"\":242475182780973056,\n         \"\"id_str\"\":\"\"242475182780973056\"\",\n         \"\"text\"\":\"\"Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":2,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     76,\n                     87\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     88,\n                     93\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     94,\n                     107\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     55,\n                     75\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Fri Aug 31 20:02:43 +0000 2012\"\",\n         \"\"id\"\":241627095502041088,\n         \"\"id_str\"\":\"\"241627095502041088\"\",\n         \"\"text\"\":\"\"@ChevonChr Here's an example what i use LINQ on to extract the user values http:\\/\\/t.co\\/UL222Y5Q\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":241623155712610306,\n         \"\"in_reply_to_status_id_str\"\":\"\"241623155712610306\"\",\n         \"\"in_reply_to_user_id\"\":128105076,\n         \"\"in_reply_to_user_id_str\"\":\"\"128105076\"\",\n         \"\"in_reply_to_screen_name\"\":\"\"ChevonChr\"\",\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/UL222Y5Q\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/j.mp\\/ODpb3E\"\",\n                  \"\"display_url\"\":\"\"j.mp\\/ODpb3E\"\",\n                  \"\"indices\"\":[\n                     75,\n                     95\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"ChevonChr\"\",\n                  \"\"name\"\":\"\"Chevon Christie\"\",\n                  \"\"id\"\":128105076,\n                  \"\"id_str\"\":\"\"128105076\"\",\n                  \"\"indices\"\":[\n                     0,\n                     10\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 22:48:05 +0000 2012\"\",\n         \"\"id\"\":241306323923390464,\n         \"\"id_str\"\":\"\"241306323923390464\"\",\n         \"\"text\"\":\"\"Cool, I'm about to reach 100 followers! See the rest of my stats at Twitter Counter: http:\\/\\/t.co\\/QH864mhf\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twittercounter.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eThe Visitor Widget\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/QH864mhf\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/twtr.to\\/lINq\"\",\n                  \"\"display_url\"\":\"\"twtr.to\\/lINq\"\",\n                  \"\"indices\"\":[\n                     85,\n                     105\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"es\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 00:00:51 +0000 2012\"\",\n         \"\"id\"\":240962249802530816,\n         \"\"id_str\"\":\"\"240962249802530816\"\",\n         \"\"text\"\":\"\"TWITTER to LINQ parece tan sencillo... No s\\u00e9 porqu\\u00e9 me trae tantos problemas :S\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/blackberry.com\\/twitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for BlackBerry\\u00ae\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      }\n   ],\n   \"\"search_metadata\"\":{\n       \"\"completed_in\"\":0.046,\n       \"\"max_id\"\":281604225014824960,\n       \"\"max_id_str\"\":\"\"281604225014824960\"\",\n       \"\"next_results\"\":\"\"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"query\"\":\"\"Twitter\"\",\n       \"\"refresh_url\"\":\"\"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"count\"\":10,\n       \"\"since_id\"\":5,\n       \"\"since_id_str\"\":\"\"5\"\"\n   }\n}\";\n\n        const string EmptyResponse = @\"{\n   \"\"statuses\"\":[\n   ],\n   \"\"search_metadata\"\":{\n      \"\"completed_in\"\":0.038,\n      \"\"max_id\"\":243501315039322112,\n      \"\"max_id_str\"\":\"\"243501315039322112\"\",\n      \"\"page\"\":1,\n      \"\"query\"\":\"\"LINQ+To+Twitter\"\",\n      \"\"refresh_url\"\":\"\"?since_id=243501315039322112&q=LINQ%20To%20Twitter&include_entities=1\"\",\n      \"\"results_per_page\"\":15,\n      \"\"since_id\"\":0,\n      \"\"since_id_str\"\":\"\"0\"\"\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/SecurityTests/HmacTests.cs",
    "content": "﻿using System;\nusing System.Text;\nusing LinqToTwitter.Security;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SecurityTests\n{\n    /// <summary>\n    /// Tests from RFC 2202\n    /// </summary>\n    [TestClass]\n    public class HmacTests\n    {\n        [TestMethod]\n        public void TestMethod1()\n        {\n            byte[] expectedHash = { 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1, 0x46, 0xbe, 0x00 };\n            byte[] key = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };\n            byte[] msg = Encoding.UTF8.GetBytes(\"Hi There\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod2()\n        {\n            byte[] expectedHash = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 };\n            byte[] key = Encoding.UTF8.GetBytes(\"Jefe\");\n            byte[] msg = Encoding.UTF8.GetBytes(\"what do ya want for nothing?\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod3()\n        {\n            const int Size = 50;\n            byte[] expectedHash = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 };\n            byte[] key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };\n            byte[] msg = new byte[Size];\n            for (int i = 0; i < Size; i++) msg[i] = (byte)0xdd;\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod4()\n        {\n            const int Size = 50;\n            byte[] expectedHash = { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84, 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda };\n            byte[] key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 };\n            byte[] msg = new byte[Size];\n            for (int i = 0; i < Size; i++) msg[i] = (byte)0xcd;\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod5()\n        {\n            byte[] expectedHash = { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2, 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 };\n            byte[] key = { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c };\n            byte[] msg = Encoding.UTF8.GetBytes(\"Test With Truncation\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod6()\n        {\n            const int Size = 80;\n            byte[] expectedHash = { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 };\n            byte[] key = new byte[Size];\n            for (int i = 0; i < Size; i++) key[i] = (byte)0xaa;\n            byte[] msg = Encoding.UTF8.GetBytes(\"Test Using Larger Than Block-Size Key - Hash Key First\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n\n        [TestMethod]\n        public void TestMethod7()\n        {\n            const int Size = 80;\n            byte[] expectedHash = { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91 };\n            byte[] key = new byte[Size];\n            for (int i = 0; i < Size; i++) key[i] = (byte)0xaa;\n            byte[] msg = Encoding.UTF8.GetBytes(\"Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data\");\n\n            byte[] hash = new Hmac(new Sha1()).Sign(key, msg);\n\n            Assert.IsNotNull(hash);\n            for (int i = 0; i < expectedHash.Length; i++)\n                Assert.AreEqual(expectedHash[i], hash[i]);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/SecurityTests/OAuthTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Security;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SecurityTests\n{\n    [TestClass]\n    public class OAuthTests\n    {\n        const string Method = \"POST\";\n        const string Url = \"https://api.twitter.com/1/statuses/update.json\";\n        const string StatusKey = \"status\";\n        const string EntitiesKey = \"include_entities\";\n        const string ConsumerSecret = \"kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw\";\n        const string OAuthTokenSecret = \"LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE\";\n\n        IDictionary<string, string> parameters;\n        OAuth oAuth;\n\n        [TestInitialize]\n        public void InitTests()\n        {\n            oAuth = new OAuth();\n\n            // No security vulnerability - credentials are from Twitter's Creating a signature documentation: https://dev.twitter.com/docs/auth/creating-signature\n            parameters =\n                new Dictionary<string, string>\n                {\n                    {StatusKey, \"Hello Ladies + Gentlemen, a signed OAuth request!\"},\n                    {EntitiesKey, \"true\"},\n                    {\"oauth_consumer_key\", \"xvz1evFS4wEEPTGEFPHBog\" },\n                    {\"oauth_nonce\", \"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\" },\n                    {\"oauth_signature_method\", \"HMAC-SHA1\" },\n                    {\"oauth_timestamp\", \"1318622958\" },\n                    {\"oauth_token\", \"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\" }, \n                    {\"oauth_version\", \"1.0\" }\n                };\n        }\n\n        [TestMethod]\n        public void GetAuthorizationStringReturnsValidString()\n        {\n            const string ExpectedAuthorizationString = \"OAuth oauth_consumer_key=\\\"xvz1evFS4wEEPTGEFPHBog\\\", oauth_nonce=\\\"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\\\", oauth_signature=\\\"tnnArxj06cWHq44gCs1OSKk%2FjLY%3D\\\", oauth_signature_method=\\\"HMAC-SHA1\\\", oauth_timestamp=\\\"1318622958\\\", oauth_token=\\\"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\\\", oauth_version=\\\"1.0\\\"\";\n\n            string authString = oAuth.GetAuthorizationString(Method, Url, parameters, ConsumerSecret, OAuthTokenSecret);\n\n            Assert.AreEqual(ExpectedAuthorizationString, authString);\n        }\n\n        [TestMethod]\n        public void GetAuthorizationStringAddsMissingParameters()\n        {\n            parameters =\n                new Dictionary<string, string>\n                {\n                    {StatusKey, \"Hello Ladies + Gentlemen, a signed OAuth request!\"},\n                    {EntitiesKey, \"true\"},\n                    {\"oauth_consumer_key\", \"xvz1evFS4wEEPTGEFPHBog\" },\n                    {\"oauth_token\", \"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\" }, \n                };\n\n            oAuth.GetAuthorizationString(Method, Url, parameters, ConsumerSecret, OAuthTokenSecret);\n\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_nonce\"));\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_timestamp\"));\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_signature_method\"));\n            Assert.IsTrue(parameters.ContainsKey(\"oauth_version\"));\n        }\n\n        [TestMethod]\n        public void BuildEncodedSortedStringTransformsParametersIntoEncodedSortedString()\n        {\n            const string ExpectedString = \"include_entities=true&oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog&oauth_nonce=kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1318622958&oauth_token=370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb&oauth_version=1.0&status=Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21\";\n            \n            string encodedSortedResponse = oAuth.BuildEncodedSortedString(parameters);\n\n            Assert.AreEqual(ExpectedString, encodedSortedResponse);\n        }\n\n        [TestMethod]\n        public void CreateSignatureBaseStringReturnsProperString()\n        {\n            const string EncodedStringParameters = \"include_entities=true&oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog&oauth_nonce=kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1318622958&oauth_token=370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb&oauth_version=1.0&status=Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21\";\n            const string ExpectedSignatureBaseString = \"POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521\";\n\n            string signatureBaseString = oAuth.BuildSignatureBaseString(Method, Url, EncodedStringParameters);\n\n            Assert.AreEqual(ExpectedSignatureBaseString, signatureBaseString);\n        }\n\n        [TestMethod]\n        public void CreateSigningKeyReturnsProcessedConsumerSecretAndOAuthTokenSecret()\n        {\n            const string ExpectedSigningKey = \"kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE\";\n\n            string signingKey = oAuth.BuildSigningKey(ConsumerSecret, OAuthTokenSecret);\n\n            Assert.AreEqual(ExpectedSigningKey, signingKey);\n        }\n\n        [TestMethod]\n        public void CalculateSignatureReturnsSignatureString()\n        {\n            const string ExpectedSignature = \"tnnArxj06cWHq44gCs1OSKk/jLY=\";\n            const string SignatureBaseString = \"POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521\";\n            const string SigningKey = \"kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE\";\n\n            string signature = oAuth.CalculateSignature(SigningKey, SignatureBaseString);\n\n            Assert.AreEqual(ExpectedSignature, signature);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/SecurityTests/Sha1Tests.cs",
    "content": "﻿using System;\nusing System.Text;\nusing LinqToTwitter.Security;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.SecurityTests\n{\n    /// <summary>\n    /// Tests from RFC 3174 + more\n    /// </summary>\n    [TestClass]\n    public class Sha1Tests\n    {\n        [TestMethod]\n        public void AbcHashesCorrectly()\n        {\n            byte[] expectedResults = { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"abc\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n\n        [TestMethod]\n        public void AlternatingLettersHashesCorrectly()\n        {\n            byte[] expectedResults = { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n\n        [TestMethod]\n        public void LettarAHashesCorrectly()\n        {\n            byte[] expectedResults = { 0x86, 0xF7, 0xE4, 0x37, 0xFA, 0xA5, 0xA7, 0xFC, 0xE1, 0x5D, 0x1D, 0xDC, 0xB9, 0xEA, 0xEA, 0xEA, 0x37, 0x76, 0x67, 0xB8 };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"a\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n\n        [TestMethod]\n        public void OctalSequenceHashesCorrectly()\n        {\n            byte[] expectedResults = { 0xE0, 0xC0, 0x94, 0xE8, 0x67, 0xEF, 0x46, 0xC3, 0x50, 0xEF, 0x54, 0xA7, 0xF5, 0x9D, 0xD6, 0x0B, 0xED, 0x92, 0xAE, 0x83 };\n\n            byte[] hashBytes = new Sha1().Compute(Encoding.UTF8.GetBytes(\"0123456701234567012345670123456701234567012345670123456701234567\"));\n\n            Assert.IsNotNull(hashBytes);\n            for (int i = 0; i < expectedResults.Length; i++)\n                Assert.AreEqual(expectedResults[i], hashBytes[i]);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/StatusTests/StatusCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusCommandsTests\n    {\n        public StatusCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        async Task<TwitterContext> InitializeTwitterContextAsync()\n        {\n            await Task.Delay(1);\n            var authMock = new Mock<IAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void StatusRequestProcessor_Handles_Actions()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status>();\n\n            Assert.IsInstanceOfType(statusReqProc, typeof(IRequestProcessorWithAction<Status>));\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_Sets_StatusIDAsync()\n        {\n            const string Status = \"Hello\";\n            const ulong InReplyToStatusID = 1;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = await InitializeTwitterContextAsync();\n\n            Status responseTweet = await ctx.ReplyAsync(InReplyToStatusID, Status);\n\n            Assert.AreEqual(ExpectedStatusID, responseTweet.StatusID);\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_WithRawResult_SucceedsAsync()\n        {\n            const string Status = \"Hello\";\n            const ulong InReplyToStatusID = 1;\n            var ctx = await InitializeTwitterContextAsync();\n\n            await ctx.ReplyAsync(InReplyToStatusID, Status);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_Sets_AutoPopulateReplyMetadataAndExcludeReplyUserIdsAsync()\n        {\n            const string Status = \"Hello\";\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            const ulong InReplyToStatusID = 1;\n            var excludedIDs = new List<ulong> { 2ul, 3ul, 4ul };\n            const string AttachmentUrl = \"http://t.co/abc123\";\n            var ctx = await InitializeTwitterContextAsync();\n\n            Status actual = await ctx.ReplyAsync(InReplyToStatusID, Status, autoPopulateReplyMetadata: true, excludeReplyUserIds: excludedIDs, attachmentUrl: AttachmentUrl, TweetMode.Compat);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_Throws_On_Null_TweetAsync()\n        {\n            var ctx = await InitializeTwitterContextAsync();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.TweetAsync(null));\n\n            Assert.AreEqual(\"status\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void TweetAsync_Throws_On_Bad_Tweet()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            var ctx = new Mock<TwitterContext>(execMock.Object);\n            ctx.Setup(mock => mock.TweetAsync(null, TweetMode.Extended))\n                .ThrowsAsync(new ArgumentException());\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_Sets_StatusIDAsync()\n        {\n            const string Status = \"Hello\";\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = await InitializeTwitterContextAsync();\n\n            Status actual = await ctx.TweetAsync(Status);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_Sets_StatusIDAndAttachmentUrlAsync()\n        {\n            const string Status = \"Hello\";\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            const string AttachmentUrl = \"http://t.co/abc123\";\n            var ctx = await InitializeTwitterContextAsync();\n\n            Status actual = await ctx.TweetAsync(Status, AttachmentUrl);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_WithMediaIds_ReturnsStatusAsync()\n        {\n            const string Status = \"Hello\";\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var mediaIds = new List<ulong> { 1, 2, 3 };\n            var ctx = await InitializeTwitterContextAsync();\n\n            Status actual = await ctx.TweetAsync(Status, mediaIds);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_WithRawResult_SucceedsAsync()\n        {\n            const ulong Id = 184835136037191681ul;\n            var ctx = await InitializeTwitterContextAsync();\n\n            await ctx.DeleteTweetAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_Sets_IDAsync()\n        {\n            const ulong Id = 184835136037191681ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = await InitializeTwitterContextAsync();\n\n            Status actual = await ctx.DeleteTweetAsync(Id);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_WithRawResults_SucceedsAsync()\n        {\n            const ulong Id = 184835136037191681ul;\n            var ctx = await InitializeTwitterContextAsync();\n\n            await ctx.DeleteTweetAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_Throws_On_Zero_IDAsync()\n        {\n            const ulong ID = 0;\n            var ctx = await InitializeTwitterContextAsync();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteTweetAsync(ID));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/StatusTests/StatusRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing LitJson;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusRequestProcessorTests\n    {\n        public StatusRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            Expression<Func<Status, bool>> expression =\n            status =>\n                status.Type == StatusType.Home &&\n                status.ID == 10 &&\n                status.UserID == 10 &&\n                status.ScreenName == \"JoeMayo\" &&\n                status.SinceID == 123 &&\n                status.MaxID == 456 &&\n                status.Count == 50 &&\n                status.Cursor == 789 &&\n                status.IncludeRetweets == true &&\n                status.ExcludeReplies == true &&\n                status.IncludeEntities == true &&\n                status.IncludeUserEntities == true &&\n                status.TrimUser == true &&\n                status.IncludeContributorDetails == true &&\n                status.IncludeMyRetweet == true &&\n                status.IncludeAltText == true &&\n                status.OEmbedUrl == \"http://myurl.com\" &&\n                status.OEmbedAlign == EmbeddedStatusAlignment.Center &&\n                status.OEmbedHideMedia == true &&\n                status.OEmbedHideThread == true &&\n                status.OEmbedLanguage == \"en\" &&\n                status.OEmbedMaxWidth == 300 &&\n                status.OEmbedOmitScript == true &&\n                status.OEmbedRelated == \"JoeMayo\" &&\n                status.TweetIDs == \"1,2,3\" &&\n                status.Map == true &&\n                status.TweetMode == TweetMode.Extended;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int) StatusType.Home).ToString())));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ID\", \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"MaxID\", \"456\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Count\", \"50\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"ExcludeReplies\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeContributorDetails\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeMyRetweet\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(Status.IncludeAltText), \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedUrl\", \"http://myurl.com\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedAlign\", ((int) EmbeddedStatusAlignment.Center).ToString())));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideMedia\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideThread\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedLanguage\", \"en\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedMaxWidth\", \"300\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedOmitScript\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TweetIDs\", \"1,2,3\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Map\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TweetMode\", ((int) TweetMode.Extended).ToString())));\n        }\n\n        // TODO: I believe this was deprecated a long time ago.\n        [TestMethod]\n        public void BuildUrl_Constructs_Conversations_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/conversation/show.json?id=123&tweet_mode=extended\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Conversation).ToString() },\n                { \"ID\", \"123\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode_Conversations()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/conversation/show.json?id=123&tweet_mode=extended\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Conversation).ToString() },\n                { \"ID\", \"123\" },\n                { nameof(Status.TweetMode), TweetMode.Extended.ToString().ToLower() }  // \"extended\" string, not \"1\"\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Conversations_Throws_On_Missing_ID()\n        {\n            const string ExpectedParam = \"ID\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Conversation).ToString() },\n                //{ \"ID\", \"123\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => statProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Mentions_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/mentions_timeline.json?since_id=123&max_id=145&count=50&tweet_mode=extended\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Mentions).ToString() },\n                { \"SinceID\", \"123\" },\n                { \"MaxID\", \"145\" },\n                { \"Count\", \"50\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/show.json?id=945932078&include_my_retweet=true&include_entities=true&trim_user=true&tweet_mode=extended&include_ext_alt_text=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Show,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Status.Type), ((int)StatusType.Show).ToString() },\n                { nameof(Status.ID), \"945932078\" },\n                { nameof(Status.TrimUser), true.ToString() },\n                { nameof(Status.IncludeMyRetweet), true.ToString() },\n                { nameof(Status.IncludeEntities), true.ToString() },\n                { nameof(Status.IncludeAltText), true.ToString() },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_User_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&user_id=15411837&screen_name=JoeMayo&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Home_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/home_timeline.json?count=5&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Home).ToString() },\n                { \"Count\", \"5\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_IncludeRetweets_On_User_Timeline()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", \"True\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_False_Include_Rts_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", false.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_OEmbed()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/oembed.json?id=1&url=abc&maxwidth=300&hide_media=true&hide_thread=true&omit_script=true&align=left&related=JoeMayo%2CTwitterAPI&lang=en&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Oembed).ToString() },\n                { \"ID\", \"1\" },\n                { \"OEmbedUrl\", \"abc\" },\n                { \"OEmbedMaxWidth\", \"300\" },\n                { \"OEmbedHideMedia\", true.ToString() },\n                { \"OEmbedHideThread\", true.ToString() },\n                { \"OEmbedOmitScript\", true.ToString() },\n                { \"OEmbedAlign\", ((int)EmbeddedStatusAlignment.Left).ToString() },\n                { \"OEmbedRelated\", \"JoeMayo, TwitterAPI\" },\n                { \"OEmbedLanguage\", \"en\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_RetweetsOfMe()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?since_id=2&max_id=3&count=1&include_entities=true&include_user_entities=true&trim_user=true&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"Count\", \"1\" },\n                { \"SinceID\", \"2\" },\n                { \"MaxID\", \"3\" },\n                { \"TrimUser\", true.ToString() },\n                { \"IncludeEntities\", true.ToString() },\n                { \"IncludeUserEntities\", true.ToString() },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_False_IncludeUserEntities_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?include_user_entities=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"IncludeUserEntities\", false.ToString() },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Retweeters_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=5&cursor=7&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                { \"ID\", \"5\" },\n                { \"Cursor\", \"7\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode_Retweeters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=5&cursor=7&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                { \"ID\", \"5\" },\n                { \"Cursor\", \"7\" },\n                { nameof(Status.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/home_timeline.json?count=5&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Home).ToString() },\n                { \"Count\", \"5\" },\n                { nameof(Status.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_RetweetedBy_Throws_On_Missing_ID()\n        {\n            const string ExpectedParam = \"ID\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Retweeters,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                //{ \"ID\", \"123\" },\n                { \"Cursor\", \"25\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => statusReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameter()\n        {\n            var target = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Lookup_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/lookup.json?id=1%2C2%2C3&include_entities=true&map=true&trim_user=true&tweet_mode=extended&include_ext_alt_text=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Status.Type), ((int)StatusType.Lookup).ToString() },\n                { nameof(Status.TweetIDs), \"1,2,3\" },\n                { nameof(Status.IncludeEntities), true.ToString() },\n                { nameof(Status.TrimUser), true.ToString() },\n                { nameof(Status.Map), true.ToString() },\n                { nameof(Status.IncludeAltText), true.ToString() },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode_Lookup()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/lookup.json?id=1%2C2%2C3&include_entities=true&map=true&trim_user=true&tweet_mode=extended&include_ext_alt_text=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Status.Type), ((int)StatusType.Lookup).ToString() },\n                { nameof(Status.TweetIDs), \"1,2,3\" },\n                { nameof(Status.IncludeEntities), true.ToString() },\n                { nameof(Status.TrimUser), true.ToString() },\n                { nameof(Status.Map), true.ToString() },\n                { nameof(Status.IncludeAltText), true.ToString() },\n                { nameof(Status.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Removes_Spaces_In_TweetIDs()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/lookup.json?id=1%2C2%2C3\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Lookup).ToString() },\n                { \"TweetIDs\", \"1, 2, 3\" },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Throws_On_Missing_TweetIDs()\n        {\n            const string ExpectedParameterName = \"TweetIDs\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Lookup,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Lookup).ToString() },\n                //{ \"TweetIDs\", \"1, 2, 3\" },\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(ExpectedParameterName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void StatusRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            Assert.IsInstanceOfType(statProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Multiple_Statuses()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Home, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleStatusResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(3, statuses.Count);\n            var status = statuses.First();\n            Assert.IsNotNull(status);\n            Assert.IsTrue(status.Retweeted);\n            Assert.IsNull(status.InReplyToScreenName);\n            Assert.IsFalse(status.PossiblySensitive);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.IsNotNull(retweetedStatus);\n            Assert.IsNotNull(retweetedStatus.Text);\n            Assert.IsTrue(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            var contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsFalse(contributors.Any());\n            var coords = status.Coordinates;\n            Assert.IsNotNull(coords);\n            Assert.AreEqual(-122.40060, coords.Longitude);\n            Assert.AreEqual(37.78215, coords.Latitude);\n            Assert.IsNotNull(status.Place);\n            Assert.IsNull(status.Place.Name);\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.AreEqual(393, status.RetweetCount);\n            Assert.AreEqual(184835136037191681ul, status.StatusID);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsFalse(status.Favorited);\n            Assert.AreEqual(0ul, status.InReplyToStatusID);\n            Assert.AreEqual(\"web\", status.Source);\n            Assert.AreEqual(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsFalse(status.Truncated);\n            Assert.IsNotNull(status.Text);\n            Assert.IsTrue(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.IsNotNull(status.Annotation);\n            Assert.IsFalse(status.Annotation.Attributes.Any());\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithClassicSingleTweet_ProcessesResponse()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(SingleStatusClassicResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.IsNotNull(status.Annotation);\n            Assert.IsNotNull(status.Annotation.Attributes);\n            Assert.IsFalse(status.Annotation.Attributes.Any());\n            Assert.IsNotNull(status.Annotation.Elements);\n            Assert.IsFalse(status.Annotation.Elements.Any());\n            Assert.AreEqual(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            var contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsFalse(contributors.Any());\n            var coords = status.Coordinates;\n            Assert.IsNotNull(coords);\n            Assert.AreEqual(-122.40060, coords.Longitude);\n            Assert.AreEqual(37.78215, coords.Latitude);\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n            Assert.IsFalse(status.Entities.HashTagEntities.Any());\n            Assert.IsFalse(status.Favorited);\n            Assert.IsNull(status.InReplyToScreenName);\n            Assert.AreEqual(0ul, status.InReplyToStatusID);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsNotNull(status.Place);\n            Assert.IsNull(status.Place.Name);\n            Assert.IsFalse(status.PossiblySensitive);\n            Assert.AreEqual(393, status.RetweetCount);\n            Assert.IsTrue(status.Retweeted);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.IsNotNull(retweetedStatus);\n            Assert.IsNotNull(retweetedStatus.Text);\n            Assert.IsTrue(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            Assert.AreEqual(\"web\", status.Source);\n            Assert.IsTrue(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.AreEqual(184835136037191681ul, status.StatusID);\n            Assert.IsNotNull(status.Text);\n            Assert.IsFalse(status.Truncated);\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.IsNotNull(status.Users);\n            Assert.IsFalse(status.Users.Any());\n            Assert.IsNotNull(status.WithheldInCountries);\n            Assert.IsFalse(status.WithheldInCountries.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithExtendedTweetInCompatibilityMode_ProcessesResponse()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(SingleStatusExtendedInCompatibilityMode);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.IsFalse(status.Annotation.Elements.Any());\n            Assert.AreEqual(new DateTime(2017, 1, 16, 4, 9, 29), status.CreatedAt);\n            Assert.IsFalse(status.Contributors.Any());\n            Assert.AreEqual(0d, status.Coordinates.Latitude);\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n            Assert.IsTrue(status.Entities.HashTagEntities.Any());\n            Assert.IsNotNull(status.Entities.SymbolEntities);\n            Assert.IsFalse(status.Entities.SymbolEntities.Any());\n            Assert.IsNotNull(status.Entities.UserMentionEntities);\n            Assert.IsTrue(status.Entities.UserMentionEntities.Any());\n            Assert.IsNotNull(status.Entities.UrlEntities);\n            Assert.IsTrue(status.Entities.UrlEntities.Any());\n            Assert.IsFalse(status.Favorited);\n            Assert.AreEqual(\"JoeMayo\", status.InReplyToScreenName);\n            Assert.AreEqual(806571633754284032ul, status.InReplyToStatusID);\n            Assert.AreEqual(15411837ul, status.InReplyToUserID);\n            Assert.IsNull(status.Place.Country);\n            Assert.IsFalse(status.PossiblySensitive);\n            Assert.AreEqual(0, status.RetweetCount);\n            Assert.IsFalse(status.Retweeted);\n            Assert.IsNull(status.RetweetedStatus.Text);\n            Assert.AreEqual(\n                @\"<a href=\"\"https://github.com/JoeMayo/LinqToTwitter\"\" rel=\"\"nofollow\"\">LINQ to Tweeter</a>\", \n                status.Source);\n            Assert.IsTrue(status.Text.StartsWith(@\"@JoeMayo @amazonbooks @JoeMayo @linq2twitr\"));\n            Assert.AreEqual(820845403897622528ul, status.StatusID);\n            Assert.IsTrue(status.Truncated);\n            Assert.IsTrue(status.IsQuotedStatus);\n            Assert.AreEqual(815351062295093248ul, status.QuotedStatusID);\n            Status quotedStatus = status.QuotedStatus;\n            Assert.IsNotNull(quotedStatus);\n            Entities extendedEntity = quotedStatus.ExtendedEntities;\n            Assert.IsNotNull(extendedEntity);\n            Assert.IsNotNull(extendedEntity.MediaEntities);\n            Assert.IsTrue(extendedEntity.MediaEntities.Any());\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.IsNotNull(status.Users);\n            Assert.IsFalse(status.Users.Any());\n            Assert.IsFalse(status.WithheldInCountries.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithExtendedTweetInExtendedMode_ProcessesResponse()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(SingleStatusExtendedInExtendedMode);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.IsFalse(status.Annotation.Elements.Any());\n            Assert.AreEqual(new DateTime(2017, 1, 16, 4, 9, 29), status.CreatedAt);\n            Assert.IsFalse(status.Contributors.Any());\n            Assert.AreEqual(0d, status.Coordinates.Latitude);\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n            Assert.IsTrue(status.Entities.HashTagEntities.Any());\n            Assert.IsNotNull(status.Entities.SymbolEntities);\n            Assert.IsFalse(status.Entities.SymbolEntities.Any());\n            Assert.IsNotNull(status.Entities.UserMentionEntities);\n            Assert.IsTrue(status.Entities.UserMentionEntities.Any());\n            Assert.IsNotNull(status.Entities.UrlEntities);\n            Assert.IsTrue(status.Entities.UrlEntities.Any());\n            Assert.IsFalse(status.Favorited);\n            Assert.AreEqual(\"JoeMayo\", status.InReplyToScreenName);\n            Assert.AreEqual(806571633754284032ul, status.InReplyToStatusID);\n            Assert.AreEqual(15411837ul, status.InReplyToUserID);\n            Assert.IsNull(status.Place.Country);\n            Assert.IsFalse(status.PossiblySensitive);\n            Assert.AreEqual(0, status.RetweetCount);\n            Assert.IsFalse(status.Retweeted);\n            Assert.IsNull(status.RetweetedStatus.Text);\n            Assert.AreEqual(\n                @\"<a href=\"\"https://github.com/JoeMayo/LinqToTwitter\"\" rel=\"\"nofollow\"\">LINQ to Tweeter</a>\",\n                status.Source);\n            Assert.IsNull(status.Text);\n            Assert.IsTrue(status.FullText.StartsWith(@\"@JoeMayo @amazonbooks @JoeMayo @linq2twitr\"));\n            Assert.AreEqual(820845403897622528ul, status.StatusID);\n            Assert.IsFalse(status.Truncated);\n            List<int> displayTextRange = status.DisplayTextRange;\n            Assert.IsNotNull(displayTextRange);\n            Assert.IsTrue(displayTextRange.Any());\n            Assert.IsTrue(status.IsQuotedStatus);\n            Assert.AreEqual(815351062295093248ul, status.QuotedStatusID);\n            Status quotedStatus = status.QuotedStatus;\n            Assert.IsNotNull(quotedStatus);\n            Entities extendedEntity = quotedStatus.ExtendedEntities;\n            Assert.IsNotNull(extendedEntity);\n            Assert.IsNotNull(extendedEntity.MediaEntities);\n            Assert.IsTrue(extendedEntity.MediaEntities.Any());\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.IsNotNull(status.Users);\n            Assert.IsFalse(status.Users.Any());\n            Assert.IsFalse(status.WithheldInCountries.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Multiple_Users()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Retweeters, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleUsersResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            var users = status.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(5, users.Count);\n            ulong user = users.First();\n            Assert.AreEqual(34649740ul, user);\n            var cursor = status.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(123L, cursor.Next);\n            Assert.AreEqual(456L, cursor.Previous);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var statProc = new StatusRequestProcessor<Status>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var stats = statProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, stats.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_An_Embedded_Status()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Oembed, BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string ExpectedType = \"rich\";\n            const ulong ExpectedCacheAge = 3153600000;\n            const string ExpectedVersion = \"1.0\";\n            const string ExpectedProviderName = \"Twitter\";\n            const string ExpectedUrl = \"https://twitter.com/JoeMayo/statuses/305050067973312514\";\n            const int ExpectedWidth = 550;\n            const int ExpectedHeight = 0;\n            const string ExpectedHtml = \"some html\";\n            const string ExpectedProviderUrl = \"https://twitter.com\";\n            const string ExpectedAuthorUrl = \"https://twitter.com/JoeMayo\";\n            const string ExpectedAuthorName = \"Joe Mayo\";\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            var embeddedStatus = status.EmbeddedStatus;\n            Assert.IsNotNull(embeddedStatus);\n            Assert.AreEqual(ExpectedType, embeddedStatus.Type);\n            Assert.AreEqual(ExpectedCacheAge, embeddedStatus.CacheAge);\n            Assert.AreEqual(ExpectedVersion, embeddedStatus.Version);\n            Assert.AreEqual(ExpectedProviderName, embeddedStatus.ProviderName);\n            Assert.AreEqual(ExpectedUrl, embeddedStatus.Url);\n            Assert.AreEqual(ExpectedWidth, embeddedStatus.Width);\n            Assert.AreEqual(ExpectedHeight, embeddedStatus.Height);\n            Assert.AreEqual(ExpectedHtml, embeddedStatus.Html);\n            Assert.AreEqual(ExpectedProviderUrl, embeddedStatus.ProviderUrl);\n            Assert.AreEqual(ExpectedAuthorUrl, embeddedStatus.AuthorUrl);\n            Assert.AreEqual(ExpectedAuthorName, embeddedStatus.AuthorName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Show,\n                ID = 123,\n                UserID = 123,\n                ScreenName = \"abc\",\n                SinceID = 1,\n                MaxID = 2,\n                Count = 3,\n                Cursor = 123,\n                IncludeRetweets = true,\n                ExcludeReplies = true,\n                IncludeEntities = true,\n                IncludeUserEntities = true,\n                TrimUser = true,\n                IncludeContributorDetails = true,\n                IncludeMyRetweet = true,\n                IncludeAltText = true,\n                TweetIDs = \"1,2,3\",\n                Map = true,\n                TweetMode = TweetMode.Extended\n            };\n\n            var statuses = statProc.ProcessResults(SingleStatusClassicResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.AreEqual(StatusType.Show, status.Type);\n            Assert.AreEqual(123ul, status.ID);\n            Assert.AreEqual(123ul, status.UserID);\n            Assert.AreEqual(\"abc\", status.ScreenName);\n            Assert.AreEqual(1ul, status.SinceID);\n            Assert.AreEqual(2ul, status.MaxID);\n            Assert.AreEqual(3, status.Count);\n            Assert.AreEqual(123L, status.Cursor);\n            Assert.IsTrue(status.IncludeRetweets);\n            Assert.IsTrue(status.ExcludeReplies);\n            Assert.IsTrue(status.IncludeEntities);\n            Assert.IsTrue(status.IncludeUserEntities);\n            Assert.IsTrue(status.TrimUser);\n            Assert.IsTrue(status.IncludeContributorDetails);\n            Assert.IsTrue(status.IncludeMyRetweet);\n            Assert.IsTrue(status.IncludeAltText);\n            Assert.AreEqual(\"1,2,3\", status.TweetIDs);\n            Assert.IsTrue(status.Map);\n            Assert.AreEqual(status.TweetMode, TweetMode.Extended);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_EmbeddedStatus_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Oembed,\n                ID = 123,\n                OEmbedUrl = \"http://myurl.com\",\n                OEmbedMaxWidth = 300,\n                OEmbedHideMedia = true,\n                OEmbedHideThread = true,\n                OEmbedOmitScript = true,\n                OEmbedAlign = EmbeddedStatusAlignment.Left,\n                OEmbedRelated = \"JoeMayo,TwitterAPI\",\n                OEmbedLanguage = \"en\"\n            };\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.AreEqual(StatusType.Oembed, status.Type);\n            Assert.AreEqual(123ul, status.ID);\n            Assert.AreEqual(\"http://myurl.com\", status.OEmbedUrl);\n            Assert.AreEqual(300, status.OEmbedMaxWidth);\n            Assert.IsTrue(status.OEmbedHideMedia);\n            Assert.IsTrue(status.OEmbedHideThread);\n            Assert.IsTrue(status.OEmbedOmitScript);\n            Assert.AreEqual(EmbeddedStatusAlignment.Left, status.OEmbedAlign);\n            Assert.AreEqual(\"JoeMayo,TwitterAPI\", status.OEmbedRelated);\n            Assert.AreEqual(\"en\", status.OEmbedLanguage);\n        }\n\n\n        [TestMethod]\n        public void StatusConstructor_WithRetweetedJsonString_SetsRetweetedToTrue()\n        {\n            var status = new Status(JsonMapper.ToObject(SingleStatusWithRetweetResponse));\n\n            Assert.IsNotNull(status);\n            Assert.IsTrue(status.Retweeted);\n        }\n\n        [TestMethod]\n        public void StatusConstructor_WithoutRetweetedJsonString_SetsRetweetedToFalse()\n        {\n            var status = new Status(JsonMapper.ToObject(SingleStatusExtendedInExtendedMode));\n\n            Assert.IsNotNull(status);\n            Assert.IsFalse(status.Retweeted);\n        }\n\n        #region Test Data\n        const string SingleStatusClassicResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string SingleStatusExtendedInCompatibilityMode = @\"{\n\t\t\"\"created_at\"\": \"\"Mon Jan 16 04:09:29 +0000 2017\"\",\n\t\t\"\"id\"\": 820845403897622528,\n\t\t\"\"id_str\"\": \"\"820845403897622528\"\",\n\t\t\"\"text\"\": \"\"@JoeMayo @amazonbooks @JoeMayo @linq2twitr 2016: The Year When Chatbots Were Hot  #Linq2Twitter \\u00a3 Sunday, January 1\\u2026 https:\\/\\/t.co\\/iGY1I49TM2\"\",\n\t\t\"\"truncated\"\": true,\n\t\t\"\"entities\"\": {\n\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\"\"text\"\": \"\"Linq2Twitter\"\",\n\t\t\t\t\t\"\"indices\"\": [82, 95]\n    }\n\t\t\t],\n\t\t\t\"\"symbols\"\": [],\n\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [0, 8]\n}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"amazonbooks\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Amazon Books\"\",\n\t\t\t\t\t\"\"id\"\": 14172201,\n\t\t\t\t\t\"\"id_str\"\": \"\"14172201\"\",\n\t\t\t\t\t\"\"indices\"\": [9, 21]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [22, 30]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\"\"indices\"\": [31, 42]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/iGY1I49TM2\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/i\\/web\\/status\\/820845403897622528\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"twitter.com\\/i\\/web\\/status\\/8\\u2026\"\",\n\t\t\t\t\t\"\"indices\"\": [117, 140]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eLINQ to Tweeter\\u003c\\/a\\u003e\"\",\n\t\t\"\"in_reply_to_status_id\"\": 806571633754284032,\n\t\t\"\"in_reply_to_status_id_str\"\": \"\"806571633754284032\"\",\n\t\t\"\"in_reply_to_user_id\"\": 15411837,\n\t\t\"\"in_reply_to_user_id_str\"\": \"\"15411837\"\",\n\t\t\"\"in_reply_to_screen_name\"\": \"\"JoeMayo\"\",\n\t\t\"\"user\"\": {\n\t\t\t\"\"id\"\": 45714308,\n\t\t\t\"\"id_str\"\": \"\"45714308\"\",\n\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\"\"screen_name\"\": \"\"Mayoster\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\"\"description\"\": \"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"indices\"\": [0, 22]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\"\"urls\"\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"\"protected\"\": true,\n\t\t\t\"\"followers_count\"\": 3,\n\t\t\t\"\"friends_count\"\": 16,\n\t\t\t\"\"listed_count\"\": 0,\n\t\t\t\"\"created_at\"\": \"\"Tue Jun 09 00:21:32 +0000 2009\"\",\n\t\t\t\"\"favourites_count\"\": 3,\n\t\t\t\"\"utc_offset\"\": -25200,\n\t\t\t\"\"time_zone\"\": \"\"Mountain Time (US & Canada)\"\",\n\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"statuses_count\"\": 36,\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\"\"is_translator\"\": false,\n\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\"\"profile_background_color\"\": \"\"FFF04D\"\",\n\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/45714308\\/1400306772\"\",\n\t\t\t\"\"profile_link_color\"\": \"\"0000FF\"\",\n\t\t\t\"\"profile_sidebar_border_color\"\": \"\"FFFFFF\"\",\n\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"E0FF92\"\",\n\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\"\"profile_use_background_image\"\": true,\n\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\"\"default_profile\"\": false,\n\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\"\"following\"\": false,\n\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\"\"notifications\"\": false,\n\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t},\n\t\t\"\"geo\"\": null,\n\t\t\"\"coordinates\"\": null,\n\t\t\"\"place\"\": null,\n\t\t\"\"contributors\"\": null,\n\t\t\"\"is_quote_status\"\": true,\n\t\t\"\"quoted_status_id\"\": 815351062295093248,\n\t\t\"\"quoted_status_id_str\"\": \"\"815351062295093248\"\",\n\t\t\"\"quoted_status\"\": {\n\t\t\t\"\"created_at\"\": \"\"Sun Jan 01 00:16:56 +0000 2017\"\",\n\t\t\t\"\"id\"\": 815351062295093248,\n\t\t\t\"\"id_str\"\": \"\"815351062295093248\"\",\n\t\t\t\"\"text\"\": \"\"\\u201c2016: The Year When Chatbots Were Hot\\u201d by @JoeMayo https:\\/\\/t.co\\/olTyx2NR1V https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\"\"truncated\"\": false,\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [43, 51]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/olTyx2NR1V\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"indices\"\": [52, 75]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"extended_entities\"\": {\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"http:\\/\\/bufferapp.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eBuffer\\u003c\\/a\\u003e\"\",\n\t\t\t\"\"in_reply_to_status_id\"\": null,\n\t\t\t\"\"in_reply_to_status_id_str\"\": null,\n\t\t\t\"\"in_reply_to_user_id\"\": null,\n\t\t\t\"\"in_reply_to_user_id_str\"\": null,\n\t\t\t\"\"in_reply_to_screen_name\"\": null,\n\t\t\t\"\"user\"\": {\n\t\t\t\t\"\"id\"\": 1666261482,\n\t\t\t\t\"\"id_str\"\": \"\"1666261482\"\",\n\t\t\t\t\"\"name\"\": \"\"Chatbots Life\"\",\n\t\t\t\t\"\"screen_name\"\": \"\"ChatBotsLife\"\",\n\t\t\t\t\"\"location\"\": \"\"San Francisco, CA\"\",\n\t\t\t\t\"\"description\"\": \"\"Latest on #ChatBots, #AI, & #Tech News. Learn what the #Chatbot Craze is all about! See our #Bot: https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [0, 23]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [98, 121]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"followers_count\"\": 13389,\n\t\t\t\t\"\"friends_count\"\": 39,\n\t\t\t\t\"\"listed_count\"\": 820,\n\t\t\t\t\"\"created_at\"\": \"\"Mon Aug 12 23:50:26 +0000 2013\"\",\n\t\t\t\t\"\"favourites_count\"\": 1932,\n\t\t\t\t\"\"utc_offset\"\": -28800,\n\t\t\t\t\"\"time_zone\"\": \"\"Pacific Time (US & Canada)\"\",\n\t\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"statuses_count\"\": 50133,\n\t\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\t\"\"is_translator\"\": false,\n\t\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\t\"\"profile_background_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/1666261482\\/1475354021\"\",\n\t\t\t\t\"\"profile_link_color\"\": \"\"89C9FA\"\",\n\t\t\t\t\"\"profile_sidebar_border_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_use_background_image\"\": false,\n\t\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\t\"\"default_profile\"\": false,\n\t\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\t\"\"following\"\": false,\n\t\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\t\"\"notifications\"\": false,\n\t\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t\t},\n\t\t\t\"\"geo\"\": null,\n\t\t\t\"\"coordinates\"\": null,\n\t\t\t\"\"place\"\": null,\n\t\t\t\"\"contributors\"\": null,\n\t\t\t\"\"is_quote_status\"\": false,\n\t\t\t\"\"retweet_count\"\": 3,\n\t\t\t\"\"favorite_count\"\": 2,\n\t\t\t\"\"favorited\"\": false,\n\t\t\t\"\"retweeted\"\": false,\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\t\"\"lang\"\": \"\"en\"\"\n\t\t},\n\t\t\"\"retweet_count\"\": 0,\n\t\t\"\"favorite_count\"\": 0,\n\t\t\"\"favorited\"\": false,\n\t\t\"\"retweeted\"\": false,\n\t\t\"\"possibly_sensitive\"\": false,\n\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\"\"lang\"\": \"\"en\"\"\n\t}\";\n\n        const string SingleStatusExtendedInExtendedMode = @\"{\n\t\t\"\"created_at\"\": \"\"Mon Jan 16 04:09:29 +0000 2017\"\",\n\t\t\"\"id\"\": 820845403897622528,\n\t\t\"\"id_str\"\": \"\"820845403897622528\"\",\n\t\t\"\"full_text\"\": \"\"@JoeMayo @amazonbooks @JoeMayo @linq2twitr 2016: The Year When Chatbots Were Hot  #Linq2Twitter \\u00a3 Sunday, January 15, 2017 https:\\/\\/t.co\\/E0k68kBiV9\"\",\n\t\t\"\"truncated\"\": false,\n\t\t\"\"display_text_range\"\": [22, 122],\n\t\t\"\"entities\"\": {\n\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\"\"text\"\": \"\"Linq2Twitter\"\",\n\t\t\t\t\t\"\"indices\"\": [82, 95]\n    }\n\t\t\t],\n\t\t\t\"\"symbols\"\": [],\n\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [0, 8]\n}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"amazonbooks\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Amazon Books\"\",\n\t\t\t\t\t\"\"id\"\": 14172201,\n\t\t\t\t\t\"\"id_str\"\": \"\"14172201\"\",\n\t\t\t\t\t\"\"indices\"\": [9, 21]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [22, 30]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\"\"indices\"\": [31, 42]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/E0k68kBiV9\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"twitter.com\\/ChatBotsLife\\/s\\u2026\"\",\n\t\t\t\t\t\"\"indices\"\": [123, 146]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eLINQ to Tweeter\\u003c\\/a\\u003e\"\",\n\t\t\"\"in_reply_to_status_id\"\": 806571633754284032,\n\t\t\"\"in_reply_to_status_id_str\"\": \"\"806571633754284032\"\",\n\t\t\"\"in_reply_to_user_id\"\": 15411837,\n\t\t\"\"in_reply_to_user_id_str\"\": \"\"15411837\"\",\n\t\t\"\"in_reply_to_screen_name\"\": \"\"JoeMayo\"\",\n\t\t\"\"user\"\": {\n\t\t\t\"\"id\"\": 45714308,\n\t\t\t\"\"id_str\"\": \"\"45714308\"\",\n\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\"\"screen_name\"\": \"\"Mayoster\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\"\"description\"\": \"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"indices\"\": [0, 22]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\"\"urls\"\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"\"protected\"\": true,\n\t\t\t\"\"followers_count\"\": 3,\n\t\t\t\"\"friends_count\"\": 16,\n\t\t\t\"\"listed_count\"\": 0,\n\t\t\t\"\"created_at\"\": \"\"Tue Jun 09 00:21:32 +0000 2009\"\",\n\t\t\t\"\"favourites_count\"\": 3,\n\t\t\t\"\"utc_offset\"\": -25200,\n\t\t\t\"\"time_zone\"\": \"\"Mountain Time (US & Canada)\"\",\n\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"statuses_count\"\": 36,\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\"\"is_translator\"\": false,\n\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\"\"profile_background_color\"\": \"\"FFF04D\"\",\n\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/45714308\\/1400306772\"\",\n\t\t\t\"\"profile_link_color\"\": \"\"0000FF\"\",\n\t\t\t\"\"profile_sidebar_border_color\"\": \"\"FFFFFF\"\",\n\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"E0FF92\"\",\n\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\"\"profile_use_background_image\"\": true,\n\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\"\"default_profile\"\": false,\n\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\"\"following\"\": false,\n\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\"\"notifications\"\": false,\n\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t},\n\t\t\"\"geo\"\": null,\n\t\t\"\"coordinates\"\": null,\n\t\t\"\"place\"\": null,\n\t\t\"\"contributors\"\": null,\n\t\t\"\"is_quote_status\"\": true,\n\t\t\"\"quoted_status_id\"\": 815351062295093248,\n\t\t\"\"quoted_status_id_str\"\": \"\"815351062295093248\"\",\n\t\t\"\"quoted_status\"\": {\n\t\t\t\"\"created_at\"\": \"\"Sun Jan 01 00:16:56 +0000 2017\"\",\n\t\t\t\"\"id\"\": 815351062295093248,\n\t\t\t\"\"id_str\"\": \"\"815351062295093248\"\",\n\t\t\t\"\"full_text\"\": \"\"\\u201c2016: The Year When Chatbots Were Hot\\u201d by @JoeMayo https:\\/\\/t.co\\/olTyx2NR1V https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\"\"truncated\"\": false,\n\t\t\t\"\"display_text_range\"\": [0, 75],\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [43, 51]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/olTyx2NR1V\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"indices\"\": [52, 75]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"extended_entities\"\": {\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"http:\\/\\/bufferapp.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eBuffer\\u003c\\/a\\u003e\"\",\n\t\t\t\"\"in_reply_to_status_id\"\": null,\n\t\t\t\"\"in_reply_to_status_id_str\"\": null,\n\t\t\t\"\"in_reply_to_user_id\"\": null,\n\t\t\t\"\"in_reply_to_user_id_str\"\": null,\n\t\t\t\"\"in_reply_to_screen_name\"\": null,\n\t\t\t\"\"user\"\": {\n\t\t\t\t\"\"id\"\": 1666261482,\n\t\t\t\t\"\"id_str\"\": \"\"1666261482\"\",\n\t\t\t\t\"\"name\"\": \"\"Chatbots Life\"\",\n\t\t\t\t\"\"screen_name\"\": \"\"ChatBotsLife\"\",\n\t\t\t\t\"\"location\"\": \"\"San Francisco, CA\"\",\n\t\t\t\t\"\"description\"\": \"\"Latest on #ChatBots, #AI, & #Tech News. Learn what the #Chatbot Craze is all about! See our #Bot: https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [0, 23]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [98, 121]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"followers_count\"\": 13389,\n\t\t\t\t\"\"friends_count\"\": 39,\n\t\t\t\t\"\"listed_count\"\": 820,\n\t\t\t\t\"\"created_at\"\": \"\"Mon Aug 12 23:50:26 +0000 2013\"\",\n\t\t\t\t\"\"favourites_count\"\": 1932,\n\t\t\t\t\"\"utc_offset\"\": -28800,\n\t\t\t\t\"\"time_zone\"\": \"\"Pacific Time (US & Canada)\"\",\n\t\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"statuses_count\"\": 50133,\n\t\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\t\"\"is_translator\"\": false,\n\t\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\t\"\"profile_background_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/1666261482\\/1475354021\"\",\n\t\t\t\t\"\"profile_link_color\"\": \"\"89C9FA\"\",\n\t\t\t\t\"\"profile_sidebar_border_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_use_background_image\"\": false,\n\t\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\t\"\"default_profile\"\": false,\n\t\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\t\"\"following\"\": false,\n\t\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\t\"\"notifications\"\": false,\n\t\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t\t},\n\t\t\t\"\"geo\"\": null,\n\t\t\t\"\"coordinates\"\": null,\n\t\t\t\"\"place\"\": null,\n\t\t\t\"\"contributors\"\": null,\n\t\t\t\"\"is_quote_status\"\": false,\n\t\t\t\"\"retweet_count\"\": 3,\n\t\t\t\"\"favorite_count\"\": 2,\n\t\t\t\"\"favorited\"\": false,\n\t\t\t\"\"retweeted\"\": false,\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\t\"\"lang\"\": \"\"en\"\"\n\t\t},\n\t\t\"\"retweet_count\"\": 0,\n\t\t\"\"favorite_count\"\": 0,\n\t\t\"\"favorited\"\": false,\n\t\t\"\"retweeted\"\": false,\n\t\t\"\"possibly_sensitive\"\": false,\n\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\"\"lang\"\": \"\"en\"\"\n\t}\";\n\n        const string MultipleStatusResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"184374428111601664\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Mar 26 20:21:03 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184374428111601664,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Speaking at Twin Cities Code Camp: http:\\/\\/t.co\\/3tJz5vPW #tccc12\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":1,\n      \"\"id_str\"\":\"\"183620070084325376\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Sat Mar 24 18:23:30 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":183620070084325376,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Free ebook: Introducing Microsoft SQL Server 2012: http:\\/\\/t.co\\/VZ52WIZf\"\"\n   }\n]\";\n\n        const string SingleStatusWithRetweetResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"ids\"\":[\n      34649740,\n      6411122,\n      106069564,\n      152318142,\n      72197816\n   ],\n   \"\"next_cursor\"\":123,\n   \"\"next_cursor_str\"\":\"\"123\"\",\n   \"\"previous_cursor\"\":456,\n   \"\"previous_cursor_str\"\":\"\"456\"\"\n}\";\n\n        const string OEmbedResponse = @\"{\n   \"\"cache_age\"\":\"\"3153600000\"\",\n   \"\"url\"\":\"\"https://twitter.com/JoeMayo/statuses/305050067973312514\"\",\n   \"\"height\"\":null,\n   \"\"provider_url\"\":\"\"https://twitter.com\"\",\n   \"\"provider_name\"\":\"\"Twitter\"\",\n   \"\"author_name\"\":\"\"Joe Mayo\"\",\n   \"\"version\"\":\"\"1.0\"\",\n   \"\"author_url\"\":\"\"https://twitter.com/JoeMayo\"\",\n   \"\"type\"\":\"\"rich\"\",\n   \"\"html\"\":\"\"some html\"\",\n   \"\"width\"\":550\n}\";\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/TrendsTests/TrendRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.TrendTests\n{\n    [TestClass]\n    public class TrendRequestProcessorTests\n    {\n        public TrendRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Collects_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend>();\n            Expression<Func<Trend, bool>> expression =\n                trend =>\n                    trend.Type == TrendType.Available &&\n                    trend.WoeID == 1 &&\n                    trend.Latitude == 1.2 &&\n                    trend.Longitude == 3.4 &&\n                    trend.Exclude == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = trendReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"WoeID\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", \"1.2\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", \"3.4\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Exclude\", \"True\")));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = TrendType.Place,\n                Exclude = true,\n                Latitude = 1.1,\n                Longitude = 2.2,\n                WoeID = 1\n            };\n\n            List<Trend> trends = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.IsNotNull(trends);\n            Assert.IsTrue(trends.Any());\n            Trend trend = trends.First();\n            Assert.IsNotNull(trend);\n            Assert.IsTrue(trend.Exclude);\n            Assert.AreEqual(1.1, trend.Latitude);\n            Assert.AreEqual(2.2, trend.Longitude);\n            Assert.AreEqual(1, trend.WoeID);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_Available_Trends()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_AvailableTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_ClosestTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/closest.json?lat=37.78215&long=-122.40060\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Closest).ToString(CultureInfo.InvariantCulture) },\n                    { \"Latitude\", \"37.78215\" },\n                    { \"Longitude\", \"-122.40060\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Place_Trends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/place.json?id=1\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                    { \"WoeID\", \"1\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Place_Trends_WithoutWoeID()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"WoeID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_No_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Available()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Available };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            Trend trends = trendList.SingleOrDefault();\n            Assert.IsNotNull(trends);\n            List<Location> locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(2, locations.Count);\n            Location location = locations[0];\n            Assert.AreEqual(\"Country\", location.PlaceTypeName);\n            Assert.AreEqual(12, location.PlaceTypeNameCode);\n            Assert.AreEqual(\"Turkey\", location.Name);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/23424969\", location.Url);\n            Assert.AreEqual(23424969, location.WoeID);\n            Assert.AreEqual(\"TR\", location.CountryCode);\n            Assert.AreEqual(\"1\", location.ParentID);\n            Assert.AreEqual(\"Turkey\", location.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Closest()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Closest };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            Trend trends = trendList.SingleOrDefault();\n            Assert.IsNotNull(trends);\n            List<Location> locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(2, locations.Count);\n            Location location = locations[1];\n            Assert.IsNotNull(location);\n            Assert.AreEqual(\"Town\", location.PlaceTypeName);\n            Assert.AreEqual(7, location.PlaceTypeNameCode);\n            Assert.AreEqual(\"Birmingham\", location.Name);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/2364559\", location.Url);\n            Assert.AreEqual(2364559, location.WoeID);\n            Assert.AreEqual(\"US\", location.CountryCode);\n            Assert.AreEqual(\"23424977\", location.ParentID);\n            Assert.AreEqual(\"United States\", location.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Location()\n        {\n            var trendProc = new TrendRequestProcessor<Trend> { Type = TrendType.Place };\n\n            List<Trend> trendList = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            Trend trends = trendList.FirstOrDefault();\n            Assert.IsNotNull(trends);\n            List<Location> locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(1, locations.Count);\n            Location location = locations[0];\n            Assert.AreEqual(\"Worldwide\", location.Name);\n            Assert.AreEqual(1, location.WoeID);\n            Assert.AreEqual(3700, trends.TweetVolume);\n            Assert.AreEqual(\"%22Julianna%20Margulies%22\", trends.Query);\n            Assert.AreEqual(\"Julianna Margulies\", trends.Name);\n            Assert.IsNull(trends.PromotedContent);\n            Assert.AreEqual(\"http://twitter.com/search/%22Julianna%20Margulies%22\", trends.SearchUrl);\n            Assert.IsNull(trends.Events);\n            Assert.AreEqual(new DateTime(2011, 9, 19, 2, 4, 39), trends.AsOf);\n            Assert.AreEqual(new DateTime(2011, 9, 19, 2, 0, 17), trends.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>();\n\n            List<Trend> trends = trendProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, trends.Count);\n        }\n\n        const string TestTrendQueryResponse = @\"[\n   {\n      \"\"as_of\"\":\"\"2011-09-19T02:04:39Z\"\",\n      \"\"locations\"\":[\n         {\n            \"\"name\"\":\"\"Worldwide\"\",\n            \"\"woeid\"\":1\n         }\n      ],\n      \"\"trends\"\":[\n         {\n            \"\"tweet_volume\"\": 3700,\n            \"\"query\"\":\"\"%22Julianna%20Margulies%22\"\",\n            \"\"name\"\":\"\"Julianna Margulies\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Julianna%20Margulies%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 4200,\n            \"\"query\"\":\"\"%23ThingsThatGetMeUpset\"\",\n            \"\"name\"\":\"\"#ThingsThatGetMeUpset\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ThingsThatGetMeUpset\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3200,\n            \"\"query\"\":\"\"%23ReasonsWeCantBeTogether\"\",\n            \"\"name\"\":\"\"#ReasonsWeCantBeTogether\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ReasonsWeCantBeTogether\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 1200,\n            \"\"query\"\":\"\"%22Peter%20Dinklage%22\"\",\n            \"\"name\"\":\"\"Peter Dinklage\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Peter%20Dinklage%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 500,\n            \"\"query\"\":\"\"%22Connie%20Britton%22\"\",\n            \"\"name\"\":\"\"Connie Britton\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Connie%20Britton%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3100,\n            \"\"query\"\":\"\"%23100BestGogoSongs\"\",\n            \"\"name\"\":\"\"#100BestGogoSongs\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23100BestGogoSongs\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3200,\n            \"\"query\"\":\"\"%22Kyle%20Chandler%22\"\",\n            \"\"name\"\":\"\"Kyle Chandler\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Kyle%20Chandler%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 7700,\n            \"\"query\"\":\"\"%22Tony%20Gonzalez%22\"\",\n            \"\"name\"\":\"\"Tony Gonzalez\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Tony%20Gonzalez%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3700,\n            \"\"query\"\":\"\"%22Drew%20Barrymore%22\"\",\n            \"\"name\"\":\"\"Drew Barrymore\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Drew%20Barrymore%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 2200,\n            \"\"query\"\":\"\"%22Elisabeth%20Moss%22\"\",\n            \"\"name\"\":\"\"Elisabeth Moss\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Elisabeth%20Moss%22\"\",\n            \"\"events\"\":null\n         }\n      ],\n      \"\"created_at\"\":\"\"2011-09-19T02:00:17Z\"\"\n   }\n]\";\n\n        const string TestAvailableOrClosestQueryResponse = @\"[\n   {\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Country\"\",\n         \"\"code\"\":12\n      },\n      \"\"name\"\":\"\"Turkey\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424969\"\",\n      \"\"woeid\"\":23424969,\n      \"\"countryCode\"\":\"\"TR\"\",\n      \"\"parentid\"\":1,\n      \"\"country\"\":\"\"Turkey\"\"\n   },\n   {\n      \"\"name\"\":\"\"Birmingham\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/2364559\"\",\n      \"\"parentid\"\":23424977,\n      \"\"woeid\"\":2364559,\n      \"\"countryCode\"\":\"\"US\"\",\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Town\"\",\n         \"\"code\"\":7\n      },\n      \"\"country\"\":\"\"United States\"\"\n   }\n]\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/UserTests/UserCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Net.Http;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class UserCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public UserCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n  \n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_WithRawResponse_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.ReportSpamAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(1);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_WithBlockUer_InvokesExecutorExecute()\n        {\n            const string PerformBlock = \"perform_block\";\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(1, performBlock: true);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.Is<Dictionary<string, string>>(parms => parms.ContainsKey(PerformBlock) && parms[PerformBlock] == bool.TrueString.ToLower()),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_Throws_On_Null_ScreenName()\n        {\n            const string ExpectedParamName = \"screenName\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.ReportSpamAsync((string)null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_Throws_On_Zero_UserID()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.ReportSpamAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n        \n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/UserTests/UserRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitterPcl.Tests.UserTests\n{\n    [TestClass]\n    public class UserRequestProcessorTests\n    {\n        public UserRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_BannerSize_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/profile_banner.json?user_id=15411837&screen_name=JoeMayo\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_ScreenName_Or_UserID()\n        {\n            const string ExpectedParamName = \"ScreenNameOrUserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"15411837\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonNull_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", null },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonNull_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", null },\n                { \"ScreenName\", null }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"\" },\n                { \"ScreenName\", \"\" }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/show.json?user_id=15411837&screen_name=JoeMayo&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Null_UserID()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"UserID\", null }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"UserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Null_ScreenName()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Show).ToString() },\n                { \"ScreenName\", null }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Categories_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions/technology/members.json\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.CategoryStatus).ToString() },\n                { \"Slug\", \"Technology\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Categores_Throws_On_Missing_Slug()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n            var parameters =\n                new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)UserType.CategoryStatus).ToString() },\n                        //{ \"Slug\", \"Technology\" }\n                    };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Slug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Categories_Constructs_Url_For_Lang_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions.json?lang=it\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Categories).ToString() },\n                { \"Lang\", \"it\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Category_Constructs_Url_For_Slug_And_Lang_Params()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/suggestions/twitter.json?lang=it\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Category).ToString() },\n                { \"Slug\", \"twitter\" },\n                { \"Lang\", \"it\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Category_Thows_On_Missing_Slug()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Category).ToString() },\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Slug\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Constructs_Url_With_ScreenNameList_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?screen_name=JoeMayo%2CLinqToTweeter\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"ScreenNameList\", \"JoeMayo,LinqToTweeter\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Constructs_Url_With_UserIDList_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?user_id=1%2C2\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"UserIdList\", \"1,2\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Constructs_Url_With_TweetMode_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?user_id=1%2C2&tweet_mode=extended\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"UserIdList\", \"1,2\" },\n                { \"TweetMode\", ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Throws_On_Missing_ScreenName()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameListOrUserIdList\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Lookup_Throws_On_Both_UserID_And_ScreenName_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"ScreenName\", \"JoeMayo,LinqToTweeter\" },\n                { \"UserID\", \"1,2\" }\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameListOrUserIdList\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/search.json?q=Joe%20Mayo&page=2&count=10&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n                { \"Query\", \"Joe Mayo\" },\n                { \"Page\", \"2\" },\n                { \"Count\", \"10\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Search_Throws_On_Missing_Query()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Contributees_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributees.json?screen_name=JoeMayo&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributees).ToString() },\n                //{ \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Contributors_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributors.json?user_id=123&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributors).ToString() },\n                { \"UserID\", \"123\" },\n                //{ \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Lookup_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/lookup.json?user_id=1%2C2&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Lookup).ToString() },\n                { \"UserIdList\", \"1,2\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Expression<Func<User, bool>> expression =\n            user =>\n                user.Type == UserType.Show &&\n                user.UserID == 10 &&\n                user.UserIdList == \"1,2\" &&\n                user.ScreenName == \"JoeMayo\" &&\n                user.ScreenNameList == \"JoeMayo,Linq2Tweeter\" &&\n                user.Cursor == 10819235 &&\n                user.Slug == \"twitter\" &&\n                user.Query == \"Joe Mayo\" &&\n                user.Page == 2 &&\n                user.Count == 10 &&\n                user.Lang == \"it\" &&\n                user.IncludeEntities == true &&\n                user.SkipStatus == true &&\n                user.ImageSize == ProfileImageSize.Mini &&\n                user.TweetMode == TweetMode.Extended;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(User.Type), ((int)UserType.Show).ToString())));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.UserID), \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.UserIdList), \"1,2\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(User.ScreenName), \"JoeMayo\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(User.ScreenNameList), \"JoeMayo,Linq2Tweeter\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Cursor), \"10819235\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(User.Slug), \"twitter\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Query), \"Joe Mayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Page), \"2\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Count), \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Lang), \"it\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.IncludeEntities), \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.SkipStatus), \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(User.ImageSize), ((int)ProfileImageSize.Mini).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(User.TweetMode), ((int)TweetMode.Extended).ToString())));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var reqProc = new UserRequestProcessor<User> \n            { \n                Type = UserType.Show, \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                UserID = 123ul,\n                UserIdList = \"1,2\",\n                ScreenName = \"JoeMayo\",\n                ScreenNameList = \"JoeMayo,Linq2Tweeter\",\n                Page = 1,\n                Count = 10,\n                Cursor = 456,\n                Slug = \"myslug\",\n                Query = \"myquery\",\n                Lang = \"en-US\",\n                SkipStatus = true,\n                ImageSize = ProfileImageSize.Bigger,\n                IncludeEntities = true,\n                TweetMode = TweetMode.Extended\n            };\n\n            List<User> users = reqProc.ProcessResults(SingleUserResponse);\n\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            User user = users.First();\n            Assert.AreEqual(123ul, user.UserID);\n            Assert.AreEqual(\"1,2\", user.UserIdList);\n            Assert.AreEqual(\"JoeMayo\", user.ScreenName);\n            Assert.AreEqual(\"JoeMayo,Linq2Tweeter\", user.ScreenNameList);\n            Assert.AreEqual(1, user.Page);\n            Assert.AreEqual(10, user.Count);\n            Assert.AreEqual(456L, user.Cursor);\n            Assert.AreEqual(\"myslug\", user.Slug);\n            Assert.AreEqual(\"myquery\", user.Query);\n            Assert.AreEqual(\"en-US\", user.Lang);\n            Assert.IsTrue(user.SkipStatus);\n            Assert.AreEqual(ProfileImageSize.Bigger, user.ImageSize);\n            Assert.IsTrue(user.IncludeEntities);\n            Assert.AreEqual(TweetMode.Extended, user.TweetMode);\n        }\n\n        [TestMethod]\n        public void UserRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(reqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void UserRequestProcessor_Handles_Actions()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(reqProc, typeof(IRequestProcessorWithAction<User>));\n        }\n\n        void VerifySingleUserResponse(User user)\n        {\n            Assert.IsNotNull(user);\n            Assert.IsNotNull(user.BannerSizes);\n            Assert.IsFalse(user.BannerSizes.Any());\n            Assert.IsNotNull(user.Categories);\n            Assert.IsFalse(user.Categories.Any());\n            Assert.AreEqual(\"6253282\", user.UserIDResponse);\n            Assert.AreEqual(\"twitterapi\", user.ScreenNameResponse);\n            Assert.AreEqual(\"San Francisco, CA\", user.Location);\n            Assert.IsNotNull(user.Description);\n            Assert.IsTrue(user.Description.StartsWith(\"The Real Twitter API.\"));\n            Assert.AreEqual(\"http://dev.twitter.com\", user.Url);\n            Assert.IsFalse(user.Protected);\n            Assert.AreEqual(1009508, user.FollowersCount);\n            Assert.AreEqual(31, user.FriendsCount);\n            Assert.AreEqual(10361, user.ListedCount);\n            Assert.AreEqual(new DateTime(2007, 5, 23, 6, 1, 13), user.CreatedAt);\n            Assert.AreEqual(24, user.FavoritesCount);\n            Assert.AreEqual(-28800, user.UtcOffset);\n            Assert.AreEqual(\"Pacific Time (US & Canada)\", user.TimeZone);\n            Assert.IsTrue(user.GeoEnabled);\n            Assert.IsTrue(user.Verified);\n            Assert.AreEqual(3278, user.StatusesCount);\n            Assert.AreEqual(\"en\", user.LangResponse);\n            Status status = user.Status;\n            Assert.IsNotNull(status);\n            Assert.AreEqual(\"web\", status.Source);\n            List<Contributor> contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsTrue(contributors.Any());\n            Contributor contributor = contributors.First();\n            Assert.IsNotNull(contributor);\n            Assert.IsTrue(user.ContributorsEnabled);\n            Assert.IsFalse(user.IsTranslator);\n            Assert.AreEqual(\"E8F2F7\", user.ProfileBackgroundColor);\n            Assert.AreEqual(\"http://a0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrl);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrlHttps);\n            Assert.IsFalse(user.ProfileBackgroundTile);\n            Assert.AreEqual(\"http://a0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrl);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrlHttps);\n            Assert.AreEqual(\"0094C2\", user.ProfileLinkColor);\n            Assert.AreEqual(\"0094C2\", user.ProfileSidebarBorderColor);\n            Assert.AreEqual(\"A9D9F1\", user.ProfileSidebarFillColor);\n            Assert.AreEqual(\"437792\", user.ProfileTextColor);\n            Assert.IsTrue(user.ProfileUseBackgroundImage);\n            Assert.IsFalse(user.ShowAllInlineMedia);\n            Assert.IsFalse(user.DefaultProfile);\n            Assert.IsFalse(user.DefaultProfileImage);\n            Assert.IsFalse(user.Following);\n            Assert.IsFalse(user.FollowRequestSent);\n            Assert.IsFalse(user.Notifications);\n            Assert.IsNotNull(user.Entities?.Description?.UrlEntities);\n            Assert.IsTrue(user.Entities.Description.UrlEntities.Any());\n            Assert.IsNotNull(user.Entities?.Url?.UrlEntities);\n            Assert.IsTrue(user.Entities.Url.UrlEntities.Any());\n        }\n\n        [TestMethod]\n        public void ProcessActionResult_Parses_SingleUser_Response()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            User user = reqProc.ProcessActionResult(SingleUserResponse, UserAction.SingleUser);\n\n            VerifySingleUserResponse(user);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Show, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<User> users = reqProc.ProcessResults(SingleUserResponse);\n\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            User user = users.First();\n            VerifySingleUserResponse(user);\n        }\n  \n        [TestMethod]\n        public void ProcessResults_Parses_Categories_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Categories, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(CategoriesResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.AreEqual(1, userList.Count);\n            User user = userList.Single();\n            Assert.IsNotNull(user);\n            List<Category> categories = user.Categories;\n            Assert.IsNotNull(categories);\n            Assert.IsTrue(categories.Any());\n            Category category = categories.First();\n            Assert.IsNotNull(category);\n            Assert.AreEqual(106, category.Size);\n            Assert.AreEqual(\"Music\", category.Name);\n            Assert.AreEqual(\"music\", category.Slug);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Category_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.Category, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(CategoryResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.AreEqual(1, userList.Count);\n            User user = userList.Single();\n            Assert.IsNotNull(user);\n            List<Category> categories = user.Categories;\n            Assert.IsNotNull(categories);\n            Assert.IsTrue(categories.Any());\n            Category category = categories.First();\n            Assert.IsNotNull(category);\n            Assert.AreEqual(64, category.Size);\n            Assert.AreEqual(\"Funny\", category.Name);\n            Assert.AreEqual(\"funny\", category.Slug);\n            List<User> users = category.Users;\n            Assert.IsNotNull(users);\n            Assert.IsTrue(users.Any());\n            User catUser = users.First();\n            Assert.IsNotNull(catUser);\n            Assert.AreEqual(\"OMG TestMethods\", catUser.Name);\n        }\n\n        void TestMultipleUserResponse(UserType type)\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = type, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(MultipleUserResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.IsTrue(userList.Any());\n            User user = userList.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"bbccff\", user.ProfileSidebarBorderColor);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_CategoryStatus_Response()\n        {\n            TestMultipleUserResponse(UserType.CategoryStatus);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Lookup_Response()\n        {\n            TestMultipleUserResponse(UserType.Lookup);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Search_Response()\n        {\n            TestMultipleUserResponse(UserType.Search);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Contributee_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributees);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Contributor_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributors);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_BannerSizes_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.BannerSizes, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(BannerSizesResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.IsTrue(userList.Any());\n            Assert.AreEqual(1, userList.Count);\n            User user = userList.Single();\n            Assert.IsNotNull(user);\n            List<BannerSize> bannerSizes = user.BannerSizes;\n            Assert.IsNotNull(bannerSizes);\n            Assert.AreEqual(6, bannerSizes.Count);\n            BannerSize firstSize = bannerSizes.First();\n            Assert.IsNotNull(firstSize);\n            Assert.AreEqual(\"ipad_retina\", firstSize.Label);\n            Assert.AreEqual(1252, firstSize.Width);\n            Assert.AreEqual(626, firstSize.Height);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_banners/16761255/1355801341/ipad_retina\", firstSize.Url);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var userProc = new UserRequestProcessor<User> { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> users = userProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(users.Any());\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n\t\"\"entities\"\": {\n\t\t\"\"url\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t{\n\t\t\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo/LinqTo…\"\",\n\t\t\t\t\t\"\"indices\"\": [\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t23\n\t\t\t\t\t]\n                }\n\t\t\t]\n\t\t},\n\t\t\"\"description\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t{\n\t\t\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo/LinqTo…\"\",\n\t\t\t\t\t\"\"indices\"\": [\n\t\t\t\t\t\t57,\n\t\t\t\t\t\t80\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string CategoriesResponse = @\"[\n   {\n      \"\"size\"\":106,\n      \"\"name\"\":\"\"Music\"\",\n      \"\"slug\"\":\"\"music\"\"\n   },\n   {\n      \"\"size\"\":78,\n      \"\"name\"\":\"\"Sports\"\",\n      \"\"slug\"\":\"\"sports\"\"\n   },\n   {\n      \"\"size\"\":79,\n      \"\"name\"\":\"\"Entertainment\"\",\n      \"\"slug\"\":\"\"entertainment\"\"\n   }\n]\";\n\n        const string CategoryResponse = @\"{\n   \"\"size\"\":64,\n   \"\"name\"\":\"\"Funny\"\",\n   \"\"users\"\":[\n      {\n         \"\"id\"\":77888423,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/omg-TestMethods.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"006da8\"\",\n         \"\"statuses_count\"\":9494,\n         \"\"created_at\"\":\"\"Mon Sep 28 01:28:23 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-21600,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"friends_count\"\":7,\n         \"\"name\"\":\"\"OMG TestMethods\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":false,\n         \"\"profile_text_color\"\":\"\"332d2d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"OMGTestMethods\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"Chicago, Illinois\"\",\n         \"\"verified\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"ffffff\"\",\n         \"\"id_str\"\":\"\"77888423\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Central Time (US & Canada)\"\",\n         \"\"description\"\":\"\"The #1 TestMethod Site. For more TestMethods, follow:\\r\\n @OMGTestMethodsSex @OMGTestMethodsCelebs @OMGTestMethodsAnimals @OMGTestMethodsSports\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"f2f2f2\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"479ec9\"\",\n         \"\"listed_count\"\":32263,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":4042870\n      },\n      {\n         \"\"id\"\":25521487,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.danieltosh.com\\/\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"2FC2EF\"\",\n         \"\"statuses_count\"\":5219,\n         \"\"created_at\"\":\"\"Fri Mar 20 15:32:52 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"friends_count\"\":59,\n         \"\"name\"\":\"\"daniel tosh\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"666666\"\",\n         \"\"favourites_count\"\":6,\n         \"\"screen_name\"\":\"\"danieltosh\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"beach\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"181A1E\"\",\n         \"\"id_str\"\":\"\"25521487\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"description\"\":\"\"not a doctor\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"252429\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"1A1B1F\"\",\n         \"\"listed_count\"\":33001,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":5520666\n      },\n      {\n         \"\"id\"\":36686415,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"url\"\":\"\"http:\\/\\/www.zachgalifianakis.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"c5bbb5\"\",\n         \"\"statuses_count\"\":58,\n         \"\"created_at\"\":\"\"Thu Apr 30 15:19:13 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"friends_count\"\":0,\n         \"\"name\"\":\"\"zach galifianakis\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"e29d9d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"galifianakisz\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"north carolina\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"3b2511\"\",\n         \"\"id_str\"\":\"\"36686415\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Quito\"\",\n         \"\"description\"\":\"\"OFFICIAL ZACH GALIFIANAKIS\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"864711\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_color\"\":\"\"c9bea1\"\",\n         \"\"listed_count\"\":17016,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":1818218\n      }\n   ],\n   \"\"slug\"\":\"\"funny\"\"\n}\";\n\n        const string MultipleUserResponse = @\"[\n   {\n      \"\"id\"\":20536157,\n      \"\"geo_enabled\"\":true,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":true,\n      \"\"url\"\":\"\"http:\\/\\/www.google.com\\/support\\/\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0000cc\"\",\n      \"\"statuses_count\"\":3416,\n      \"\"created_at\"\":\"\"Tue Feb 10 19:14:39 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"friends_count\"\":366,\n      \"\"name\"\":\"\"A Googler\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"000000\"\",\n      \"\"favourites_count\"\":131,\n      \"\"screen_name\"\":\"\"google\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Mountain View, CA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"bbccff\"\",\n      \"\"id_str\"\":\"\"20536157\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"News and updates from Google\"\",\n      \"\"profile_background_tile\"\":false,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"ebeff9\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 14:33:09 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"196970449412960257\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":126,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":196970449412960257,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"There's lots of data online. We're supporting journalists who research and report on it in innovative ways http:\\/\\/t.co\\/iSNFLbh9\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_color\"\":\"\"ffffff\"\",\n      \"\"listed_count\"\":76043,\n      \"\"contributors_enabled\"\":true,\n      \"\"followers_count\"\":4656496\n   },\n   {\n      \"\"id\"\":50393960,\n      \"\"geo_enabled\"\":false,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/www.thegatesnotes.com\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0084B4\"\",\n      \"\"statuses_count\"\":476,\n      \"\"created_at\"\":\"\"Wed Jun 24 18:44:10 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"friends_count\"\":107,\n      \"\"name\"\":\"\"Bill Gates\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"333333\"\",\n      \"\"favourites_count\"\":2,\n      \"\"screen_name\"\":\"\"BillGates\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Seattle, WA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n      \"\"id_str\"\":\"\"50393960\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"Sharing things I'm learning through my foundation work and other interests...\"\",\n      \"\"profile_background_tile\"\":true,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 22:39:58 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"197092962461696000\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":215,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":197092962461696000,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"You asked \\u201chow does your approach compare to 50 yrs of mixed results from NGOs\\u201d? #askbillg: http:\\/\\/t.co\\/LVuNXIDy\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_color\"\":\"\"C0DEED\"\",\n      \"\"listed_count\"\":90298,\n      \"\"contributors_enabled\"\":false,\n      \"\"followers_count\"\":6266743\n   }\n]\";\n\n        const string BannerSizesResponse = @\"{\n   \"\"sizes\"\":{\n      \"\"ipad_retina\"\":{\n         \"\"w\"\":1252,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad_retina\"\",\n         \"\"h\"\":626\n      },\n      \"\"mobile\"\":{\n         \"\"w\"\":320,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile\"\",\n         \"\"h\"\":160\n      },\n      \"\"web\"\":{\n         \"\"w\"\":520,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web\"\",\n         \"\"h\"\":260\n      },\n      \"\"web_retina\"\":{\n         \"\"w\"\":1040,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web_retina\"\",\n         \"\"h\"\":520\n      },\n      \"\"mobile_retina\"\":{\n         \"\"w\"\":640,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile_retina\"\",\n         \"\"h\"\":320\n      },\n      \"\"ipad\"\":{\n         \"\"w\"\":626,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad\"\",\n         \"\"h\"\":313\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/WelcomeMessageTests/WelcomeMessageCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\nusing Newtonsoft.Json.Linq;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class WelcomeMessageCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public WelcomeMessageCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void DirectMessageRequestProcessor_Works_With_Actions()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n\n            Assert.IsInstanceOfType(wmReqProc, typeof(IRequestProcessorWithAction<WelcomeMessage>));\n        }\n\n        TwitterContext InitializeTwitterContext<TMessageType>(string responseJson)\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(responseJson);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<TMessageType>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<WelcomeMessage>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            return new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithNullText_Throws()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = null;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewWelcomeMessageAsync(Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithEmptyText_Throws()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewWelcomeMessageAsync(Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithValidParameters_ConstructsUrl()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<WelcomeMessageValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        //[TestMethod]\n        //public async Task NewWelcomeMessageAsync_WithParameters_PopulatesInputParametersInResponse()\n        //{\n        //    const string Name = \"Test Welcome Message\";\n        //    const string Text = \"Welcome!\";\n        //    var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n        //    WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n        //    Assert.IsNotNull(welcomeMsg);\n        //    Assert.AreEqual(Name, welcomeMsg.Name);\n        //    Assert.AreEqual(Text, welcomeMsg.Text);\n        //}\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithName_ReturnsCreatedWelcomeMessage()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue value = welcomeMsg.Value;\n            Assert.IsNotNull(value);\n            WelcomeMsg msg = value.WelcomeMessage;\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"945484689657102340\", msg.Id);\n            Assert.AreEqual(\"1514256090927\", msg.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 12, 26, 02, 41, 30, 927), msg.CreatedAt);\n            WelcomeMessageData msgData = msg.MessageData;\n            Assert.IsNotNull(msgData);\n            Assert.AreEqual(\"Welcome!\", msgData.Text);\n            Entities entities = msgData.Entities;\n            Assert.IsNotNull(entities);\n            Assert.AreEqual(\"472356\", msg.SourceAppId);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            JObject apps = value.Apps;\n            Assert.IsNotNull(apps);\n            JToken app = apps[msg.SourceAppId];\n            Assert.IsNotNull(app);\n            Assert.AreEqual(\"472356\", app[\"id\"]);\n            Assert.AreEqual(\"LINQ to Tweeter\", app[\"name\"]);\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", app[\"url\"]);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n            Assert.AreEqual(WelcomeMessageResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageRuleAsync_WithMissingMessageID_Throws()\n        {\n            const ulong WelcomeMessageID = 0;\n            const string Name = \"New Name\";\n            const string Text = null;\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text));\n\n            Assert.AreEqual(\"welcomeMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithNullText_Throws()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = null;\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithEmptyText_Throws()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/update.json?id=1\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<WelcomeMsg>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        //[TestMethod]\n        //public async Task UpdateWelcomeMessageAsync_WithParameters_PopulatesInputParametersInResponse()\n        //{\n        //    const ulong WelcomeMessageID = 1;\n        //    const string Name = \"New Name\";\n        //    const string Text = \"Welcome!\";\n        //    var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n        //    WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n        //    Assert.IsNotNull(welcomeMsg);\n        //    Assert.AreEqual(WelcomeMessageID, welcomeMsg.ID);\n        //    Assert.AreEqual(Text, welcomeMsg.Text);\n        //}\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithName_ReturnsCreatedWelcomeMessage()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue value = welcomeMsg.Value;\n            Assert.IsNotNull(value);\n            WelcomeMsg msg = value.WelcomeMessage;\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"945484689657102340\", msg.Id);\n            Assert.AreEqual(\"1514256090927\", msg.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 12, 26, 02, 41, 30, 927), msg.CreatedAt);\n            WelcomeMessageData msgData = msg.MessageData;\n            Assert.IsNotNull(msgData);\n            Assert.AreEqual(\"Welcome!\", msgData.Text);\n            Entities entities = msgData.Entities;\n            Assert.IsNotNull(entities);\n            Assert.AreEqual(\"472356\", msg.SourceAppId);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            JObject apps = value.Apps;\n            Assert.IsNotNull(apps);\n            JToken app = apps[msg.SourceAppId];\n            Assert.IsNotNull(app);\n            Assert.AreEqual(\"472356\", app[\"id\"]);\n            Assert.AreEqual(\"LINQ to Tweeter\", app[\"name\"]);\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", app[\"url\"]);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n            Assert.AreEqual(WelcomeMessageResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageAsync_WithMissingMessageID_Throws()\n        {\n            const ulong WelcomeMessageID = 0;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteWelcomeMessageAsync(WelcomeMessageID));\n\n            Assert.AreEqual(\"welcomeMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WelcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageAsync(WelcomeMessageID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/destroy.json?id=1\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    string.Empty,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageAsync_WithValidParameters_HasEmptyRawResult()\n        {\n            const ulong WelcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageAsync(WelcomeMessageID);\n\n            Assert.AreEqual(string.Empty, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithMissingMessageID_Throws()\n        {\n            const ulong welcomeMessageID = 0;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID));\n\n            Assert.AreEqual(\"welcomeMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong welcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<WelcomeMessageValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithParameters_PopulatesInputParametersInResponse()\n        {\n            const ulong welcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID);\n\n            Assert.IsNotNull(welcomeMsg);\n            Assert.AreEqual(welcomeMessageID, welcomeMsg.ID);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong welcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID);\n\n            Assert.AreEqual(WelcomeMessageRuleResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageRuleAsync_WithMissingMessageID_Throws()\n        {\n            const ulong WelcomeMessageRuleID = 0;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteWelcomeMessageRuleAsync(WelcomeMessageRuleID));\n\n            Assert.AreEqual(\"welcomeMessageRuleID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageRuleAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WelcomeMessageRuleID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageRuleAsync(WelcomeMessageRuleID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/destroy.json?id=1\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    string.Empty,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageRuleAsync_WithValidParameters_HasEmptyRawResult()\n        {\n            const ulong WelcomeMessageRuleID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageRuleAsync(WelcomeMessageRuleID);\n\n            Assert.AreEqual(string.Empty, ctx.RawResult);\n        }\n\n        #region Response Strings\n\n        const string WelcomeMessageResponse = @\"{\n\t\"\"welcome_message\"\": {\n\t\t\"\"id\"\": \"\"945484689657102340\"\",\n\t\t\"\"created_timestamp\"\": \"\"1514256090927\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n            }\n        },\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        const string WelcomeMessageRuleResponse = @\"{\n\t\"\"welcome_message_rule\"\": {\n\t\t\"\"id\"\": \"\"949450720239001600\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515201666303\"\",\n\t\t\"\"welcome_message_id\"\": \"\"949450173926617092\"\"\n\t}\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Tests/WelcomeMessageTests/WelcomeMessageRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitterPcl.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Newtonsoft.Json.Linq;\n\nnamespace LinqToTwitterPcl.Tests.DirectMessageTests\n{\n    [TestClass]\n    public class WelcomeMessageRequestProcessorTests\n    {\n        public WelcomeMessageRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            Expression<Func<WelcomeMessage, bool>> expression =\n                wm =>\n                    wm.Type == WelcomeMessageType.ListMessages &&\n                    wm.Count == 1 &&\n                    wm.Cursor == \"ABC123\" &&\n                    wm.ID == 456;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = wmReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)WelcomeMessageType.ListMessages).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"ABC123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithListMessages_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/list.json?count=2&cursor=ABC123\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ListMessages).ToString(CultureInfo.InvariantCulture) },\n                        { \"Count\", \"2\" },\n                        { \"Cursor\", \"ABC123\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithListRules_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/list.json?count=2&cursor=ABC123\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ListRules).ToString(CultureInfo.InvariantCulture) },\n                        { \"Count\", \"2\" },\n                        { \"Cursor\", \"ABC123\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForShowMessageWithoutID_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowMessage).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => wmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithShowMessage_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/show.json?id=1\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowMessage).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"1\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForShowRuleWithoutID_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowRule).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => wmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithShowRule_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/show.json?id=1\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowRule).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"1\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithEmptyResults_ReturnsEmptyCollection()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(msgs.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForListWelcomeMessages_HandlesMultipleResults()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ListMessages\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQueryMultipleWelcomeMessageResponses);\n\n            WelcomeMessage welcomeMsg = msgs?.First();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            List<WelcomeMsg> msgList = val.WelcomeMessages;\n            WelcomeMsg msg = msgList.FirstOrDefault();\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            WelcomeMessageData data = msg.MessageData;\n            Assert.IsNotNull(data);\n            Assert.AreEqual(\"Welcome!\", data.Text);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForListRules_HandlesMultipleResults()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ListMessages\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQueryMultipleRuleResponses);\n\n            WelcomeMessage welcomeMsg = msgs.FirstOrDefault();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            List<WelcomeMessageRule> rules = val.WelcomeMessageRules;\n            Assert.IsNotNull(rules);\n            WelcomeMessageRule rule = rules.FirstOrDefault();\n            Assert.IsNotNull(rule);\n            Assert.AreEqual(\"949450720239001600\", rule.ID);\n            Assert.AreEqual(\"1515201666303\", rule.CreatedTimestamp);\n            Assert.AreEqual(\"949450173926617092\", rule.WelcomeMessageID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForShowWelcomeMessage_HandlesSingleResult()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> \n            { \n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ShowMessage\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQuerySingleWelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = msgs?.First();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            WelcomeMsg msg = val.WelcomeMessage;\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"950134376347574276\", msg.Id);\n            Assert.AreEqual(\"1515364662621\", msg.CreatedTimestamp);\n            Assert.AreEqual(\"472356\", msg.SourceAppId);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            WelcomeMessageData data = msg.MessageData;\n            Assert.IsNotNull(data);\n            Assert.AreEqual(\"Welcome!\", data.Text);\n            JObject app = val.Apps;\n            JObject appDetail = app.Value<JObject>(\"472356\");\n            Assert.AreEqual(\"472356\", appDetail.Value<string>(\"id\"));\n            Assert.AreEqual(\"LINQ to Tweeter\", appDetail.Value<string>(\"name\"));\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", appDetail.Value<string>(\"url\"));\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForShowWelcomeMessageRule_HandlesSingleResult()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ShowMessage\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQuerySingleWelcomeMessageRuleResponse);\n\n            WelcomeMessage welcomeMsg = msgs.FirstOrDefault();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            WelcomeMessageRule rule = val.WelcomeMessageRule;\n            Assert.IsNotNull(rule);\n            Assert.AreEqual(\"950225380517937152\", rule.ID);\n            Assert.AreEqual(\"1515386359706\", rule.CreatedTimestamp);\n            Assert.AreEqual(\"950134376347574276\", rule.WelcomeMessageID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithShowQuery_ReplacesInputParams()\n        {\n            const ulong ID = 5;\n\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ShowMessage,\n                ID = ID\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQuerySingleWelcomeMessageResponse);\n\n            WelcomeMessage wm = msgs.First();\n\n            Assert.AreEqual(ID, wm.ID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithListQuery_ReplacesInputParams()\n        {\n            const int Count = 4;\n            const string Cursor = \"ABC123\";\n\n            var dmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ListMessages,\n                Count = Count,\n                Cursor = Cursor\n            };\n\n            List<WelcomeMessage> msgs = dmReqProc.ProcessResults(TestQueryMultipleWelcomeMessageResponses);\n\n            WelcomeMessage wm = msgs.First();\n\n            Assert.AreEqual(Count, wm.Count);\n            Assert.AreEqual(Cursor, wm.Cursor);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithMissingType_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => wmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParamDictionary_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => wmReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        #region Response Strings\n\n        public const string TestQuerySingleWelcomeMessageResponse = @\"{\n\t\"\"welcome_message\"\": {\n\t\t\"\"id\"\": \"\"950134376347574276\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515364662621\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n            }\n        },\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        const string TestQuerySingleWelcomeMessageRuleResponse = @\"{\n\t\"\"welcome_message_rule\"\": {\n\t\t\"\"id\"\": \"\"950225380517937152\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515386359706\"\",\n\t\t\"\"welcome_message_id\"\": \"\"950134376347574276\"\"\n\t}\n}\";\n\n        public const string TestQueryMultipleWelcomeMessageResponses = @\"{\n\t\"\"next_cursor\"\": \"\"OTQ5NzczMTIzOTc2NDQ1OTU3\"\",\n\t\"\"welcome_messages\"\": [{\n\t\t\"\"id\"\": \"\"945484689657102340\"\",\n\t\t\"\"created_timestamp\"\": \"\"1514256090927\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n    }\n},\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t{\n\t\t\"\"id\"\": \"\"949450173926617092\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515201536052\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n\t\t\t}\n\t\t},\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t{\n\t\t\"\"id\"\": \"\"949765733034033156\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515276771206\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n\t\t\t}\n\t\t},\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t}],\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        public const string TestQueryMultipleRuleResponses = @\"{\n\t\"\"welcome_message_rules\"\": [{\n\t\t\"\"id\"\": \"\"949450720239001600\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515201666303\"\",\n\t\t\"\"welcome_message_id\"\": \"\"949450173926617092\"\"\n\t}]\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Uwp/LinqToTwitter.Uwp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.Uwp</RootNamespace>\n    <AssemblyName>LinqToTwitter.Uwp</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.16299.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"UniversalAuthorizer.cs\" />\n    <EmbeddedResource Include=\"Properties\\LinqToTwitter.Uwp.rd.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.10</Version>\n    </PackageReference>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>13.0.1</Version>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter.netstandard\\LinqToTwitter.netstandard.csproj\">\n      <Project>{50a782c7-cf5d-456b-8d9c-2f124b594b45}</Project>\n      <Name>LinqToTwitter.netstandard</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Uwp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.Uwp.Authorizers\")]\n[assembly: AssemblyDescription(\"A LINQ Provider for the Twitter API\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LinqToTwitter.Uwp\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"5.1.3.0\")]\n[assembly: AssemblyFileVersion(\"5.1.3.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Uwp/Properties/LinqToTwitter.Uwp.rd.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    This file contains Runtime Directives, specifications about types your application accesses\n    through reflection and other dynamic code patterns. Runtime Directives are used to control the\n    .NET Native optimizer and ensure that it does not remove code accessed by your library. If your\n    library does not do any reflection, then you generally do not need to edit this file. However,\n    if your library reflects over types, especially types passed to it or derived from its types,\n    then you should write Runtime Directives.\n\n    The most common use of reflection in libraries is to discover information about types passed\n    to the library. Runtime Directives have three ways to express requirements on types passed to\n    your library.\n\n    1.  Parameter, GenericParameter, TypeParameter, TypeEnumerableParameter\n        Use these directives to reflect over types passed as a parameter.\n\n    2.  SubTypes\n        Use a SubTypes directive to reflect over types derived from another type.\n\n    3.  AttributeImplies\n        Use an AttributeImplies directive to indicate that your library needs to reflect over\n        types or methods decorated with an attribute.\n\n    For more information on writing Runtime Directives for libraries, please visit\n    https://go.microsoft.com/fwlink/?LinkID=391919\n-->\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Library Name=\"LinqToTwitter.Uwp\">\n\n  \t<!-- add directives for your library here -->\n\n  </Library>\n</Directives>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.Uwp/UniversalAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Windows.Security.Authentication.Web;\n\nnamespace LinqToTwitter\n{\n    public class UniversalAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        const string CallbackPlaceholderRequiredByTwitterOauth = \"http://127.0.0.1\";\n\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            string authCallback = \n                string.IsNullOrWhiteSpace(Callback) ? CallbackPlaceholderRequiredByTwitterOauth : Callback;\n            await GetRequestTokenAsync(authCallback);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n\n            WebAuthenticationResult webAuthenticationResult =\n                await WebAuthenticationBroker.AuthenticateAsync(\n                    WebAuthenticationOptions.None,\n                    new Uri(authUrl),\n                    new Uri(authCallback));\n\n            if (webAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)\n            {\n                string verifier = ParseVerifierFromResponseUrl(webAuthenticationResult.ResponseData);\n                var accessTokenParams = new Dictionary<string, string>();\n                accessTokenParams.Add(\"oauth_verifier\", verifier);\n\n                await GetAccessTokenAsync(accessTokenParams);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.net/LinqToTwitter.net.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{8BEA10CB-FF91-4D13-868D-2210EC2F8294}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.net</RootNamespace>\n    <AssemblyName>LinqToTwitter.net</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <Deterministic>true</Deterministic>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.12.0.3\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Net.Http.4.3.4\\lib\\net46\\System.Net.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive, Version=4.4.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.4.4.1\\lib\\net46\\System.Reactive.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Core.4.4.1\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Interfaces.4.4.1\\lib\\net46\\System.Reactive.Interfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.Linq.4.4.1\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Reactive.PlatformServices.4.4.1\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Runtime.CompilerServices.Unsafe.4.7.1\\lib\\net461\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Algorithms.4.3.1\\lib\\net461\\System.Security.Cryptography.Algorithms.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Encoding.4.3.0\\lib\\net46\\System.Security.Cryptography.Encoding.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.Primitives.4.3.0\\lib\\net46\\System.Security.Cryptography.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Security.Cryptography.X509Certificates.4.3.2\\lib\\net461\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Threading.Tasks.Extensions.4.5.4\\lib\\net461\\System.Threading.Tasks.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.ValueTuple.4.5.0\\lib\\net47\\System.ValueTuple.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Windows\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"WindowsBase\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"LinqToTwitter.snk\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Import Project=\"..\\LinqToTwitter.Shared\\LinqToTwitter.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"..\\LinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.net/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.net\")]\n[assembly: AssemblyDescription(\"A LINQ Provider for the Twitter API\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LinqToTwitter.net\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"8bea10cb-ff91-4d13-868d-2210ec2f8294\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version\n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers\n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"5.1.3.0\")]\n[assembly: AssemblyFileVersion(\"5.1.3.0\")]\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitter.Tests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.net/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.6.0\" newVersion=\"4.0.6.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/></startup></configuration>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.net/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net48\" />\n  <package id=\"System.Net.Http\" version=\"4.3.4\" targetFramework=\"net461\" />\n  <package id=\"System.Reactive\" version=\"4.4.1\" targetFramework=\"net48\" />\n  <package id=\"System.Reactive.Core\" version=\"4.4.1\" targetFramework=\"net48\" />\n  <package id=\"System.Reactive.Interfaces\" version=\"4.4.1\" targetFramework=\"net48\" />\n  <package id=\"System.Reactive.Linq\" version=\"4.4.1\" targetFramework=\"net48\" />\n  <package id=\"System.Reactive.PlatformServices\" version=\"4.4.1\" targetFramework=\"net48\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"4.7.1\" targetFramework=\"net48\" />\n  <package id=\"System.Security.Cryptography.Algorithms\" version=\"4.3.1\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Encoding\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.Primitives\" version=\"4.3.0\" targetFramework=\"net461\" />\n  <package id=\"System.Security.Cryptography.X509Certificates\" version=\"4.3.2\" targetFramework=\"net461\" />\n  <package id=\"System.Threading.Tasks.Extensions\" version=\"4.5.4\" targetFramework=\"net48\" />\n  <package id=\"System.ValueTuple\" version=\"4.5.0\" targetFramework=\"net48\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.netstandard/LinqToTwitter.netstandard.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <Description>A LINQ Provider for the Twitter API</Description>\n    <Authors>Joe Mayo</Authors>\n    <Company>LINQ to Twitter</Company>\n    <AssemblyVersion>5.1.3.0</AssemblyVersion>\n    <FileVersion>5.1.3.0</FileVersion>\n    <Version>5.1.3</Version>\n  </PropertyGroup>\n\n  <Import Project=\"..\\LinqToTwitter.Shared\\LinqToTwitter.Shared.projitems\" Label=\"Shared\" />\n\n  <Import Project=\"..\\LinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems\" Label=\"Shared\" />\n\n  <ItemGroup>\n    <PackageReference Include=\"ConfigureAwaitChecker.Analyzer\" Version=\"4.0.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\n    <PackageReference Include=\"System.Reactive.Core\" Version=\"4.4.1\" />\n    <PackageReference Include=\"System.Reactive.Interfaces\" Version=\"4.4.1\" />\n    <PackageReference Include=\"System.Reactive.Linq\" Version=\"4.4.1\" />\n    <PackageReference Include=\"System.Reactive.PlatformServices\" Version=\"4.4.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.29806.167\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"LinqToTwitter.Shared\", \"LinqToTwitter.Shared\\LinqToTwitter.Shared.shproj\", \"{7B25A4F0-18EA-4819-B67C-EFEA0E14F919}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"LinqToTwitter.Shared.uap\", \"LinqToTwitter.Shared.uap\\LinqToTwitter.Shared.uap.shproj\", \"{0936A109-C6B5-4527-89A9-966E8E6C9E26}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"LinqToTwitter.Shared.net\", \"LinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.shproj\", \"{37396599-8A5A-4AC5-B583-C49EC4E40781}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"LinqToTwitter.Shared.xamarin\", \"LinqToTwitter.Shared.xamarin\\LinqToTwitter.Shared.xamarin.shproj\", \"{4AA86B5F-FBBB-473C-A9F2-FCA5DD7C6C71}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.xamarin\", \"LinqToTwitter.xamarin\\LinqToTwitter.xamarin.csproj\", \"{67F9D3A8-F71E-4428-913F-C37AE82CDB24}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.Tests\", \"LinqToTwitter.Tests\\LinqToTwitter.Tests.csproj\", \"{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.uap10\", \"LinqToTwitter.uap10\\LinqToTwitter.uap10.csproj\", \"{0CDBCFCA-4404-4F6E-976F-1165F1072604}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"LinqToTwitter.Shared.aspnet\", \"LinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.shproj\", \"{4CDADC23-01E2-41EB-BBDA-3C76E2582B50}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter.netstandard\", \"LinqToTwitter.netstandard\\LinqToTwitter.netstandard.csproj\", \"{50A782C7-CF5D-456B-8D9C-2F124B594B45}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.Uwp\", \"LinqToTwitter.Uwp\\LinqToTwitter.Uwp.csproj\", \"{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{05535458-71E8-44E0-8699-5D8899BEA2F4}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.editorconfig = .editorconfig\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.net\", \"LinqToTwitter.net\\LinqToTwitter.net.csproj\", \"{8BEA10CB-FF91-4D13-868D-2210EC2F8294}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter.Core\", \"LinqToTwitter.Core\\LinqToTwitter.Core.csproj\", \"{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter.AspNetCore\", \"LinqToTwitter.AspNetCore\\LinqToTwitter.AspNetCore.csproj\", \"{8F5AE379-EFFF-4898-B882-9173CD483EF4}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter.AspNetStd\", \"LinqToTwitter.AspNetStd\\LinqToTwitter.AspNetStd.csproj\", \"{47F77FBB-88B2-430B-9150-4F358A2AC755}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ConsoleSamples\", \"..\\..\\Samples\\LinqToTwitter5\\net48\\CSharp\\ConsoleSamples\\ConsoleSamples.csproj\", \"{44251BF9-8FC9-4C32-9B83-3CFCF5734384}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LinqToTwitter.AspNet\", \"LinqToTwitter.AspNet\\LinqToTwitter.AspNet.csproj\", \"{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}\"\nEndProject\nGlobal\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\tLinqToTwitter.Shared.uap\\LinqToTwitter.Shared.uap.projitems*{0936a109-c6b5-4527-89a9-966e8e6c9e26}*SharedItemsImports = 13\n\t\tLinqToTwitter.Shared.uap\\LinqToTwitter.Shared.uap.projitems*{0cdbcfca-4404-4f6e-976f-1165f1072604}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared\\LinqToTwitter.Shared.projitems*{0cdbcfca-4404-4f6e-976f-1165f1072604}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems*{1152db10-f205-4f4a-8a95-bdf3dbacefe2}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems*{37396599-8a5a-4ac5-b583-c49ec4e40781}*SharedItemsImports = 13\n\t\tLinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems*{47f77fbb-88b2-430b-9150-4f358a2ac755}*SharedItemsImports = 5\n\t\tLinqToTwitter.Shared.xamarin\\LinqToTwitter.Shared.xamarin.projitems*{4aa86b5f-fbbb-473c-a9f2-fca5dd7c6c71}*SharedItemsImports = 13\n\t\tLinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems*{4cdadc23-01e2-41eb-bbda-3c76e2582b50}*SharedItemsImports = 13\n\t\tLinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems*{50a782c7-cf5d-456b-8d9c-2f124b594b45}*SharedItemsImports = 5\n\t\tLinqToTwitter.Shared\\LinqToTwitter.Shared.projitems*{50a782c7-cf5d-456b-8d9c-2f124b594b45}*SharedItemsImports = 5\n\t\tLinqToTwitter.Shared.xamarin\\LinqToTwitter.Shared.xamarin.projitems*{67f9d3a8-f71e-4428-913f-c37ae82cdb24}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared\\LinqToTwitter.Shared.projitems*{67f9d3a8-f71e-4428-913f-c37ae82cdb24}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared\\LinqToTwitter.Shared.projitems*{7b25a4f0-18ea-4819-b67c-efea0e14f919}*SharedItemsImports = 13\n\t\tLinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems*{8bea10cb-ff91-4d13-868d-2210ec2f8294}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared\\LinqToTwitter.Shared.projitems*{8bea10cb-ff91-4d13-868d-2210ec2f8294}*SharedItemsImports = 4\n\t\tLinqToTwitter.Shared.aspnet\\LinqToTwitter.Shared.aspnet.projitems*{8f5ae379-efff-4898-b882-9173cd483ef4}*SharedItemsImports = 5\n\t\tLinqToTwitter.Shared.net\\LinqToTwitter.Shared.net.projitems*{c3f21f82-b9e5-40c7-8b52-ae81e02ed8b7}*SharedItemsImports = 5\n\t\tLinqToTwitter.Shared\\LinqToTwitter.Shared.projitems*{c3f21f82-b9e5-40c7-8b52-ae81e02ed8b7}*SharedItemsImports = 5\n\tEndGlobalSection\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tAd-Hoc|Any CPU = Ad-Hoc|Any CPU\n\t\tAd-Hoc|ARM = Ad-Hoc|ARM\n\t\tAd-Hoc|iPhone = Ad-Hoc|iPhone\n\t\tAd-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator\n\t\tAd-Hoc|x64 = Ad-Hoc|x64\n\t\tAd-Hoc|x86 = Ad-Hoc|x86\n\t\tAppStore|Any CPU = AppStore|Any CPU\n\t\tAppStore|ARM = AppStore|ARM\n\t\tAppStore|iPhone = AppStore|iPhone\n\t\tAppStore|iPhoneSimulator = AppStore|iPhoneSimulator\n\t\tAppStore|x64 = AppStore|x64\n\t\tAppStore|x86 = AppStore|x86\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|iPhone = Debug|iPhone\n\t\tDebug|iPhoneSimulator = Debug|iPhoneSimulator\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|iPhone = Release|iPhone\n\t\tRelease|iPhoneSimulator = Release|iPhoneSimulator\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|ARM.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|x64.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Ad-Hoc|x86.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|ARM.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|ARM.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|x64.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|x64.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|x86.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.AppStore|x86.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|x64.Build.0 = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{67F9D3A8-F71E-4428-913F-C37AE82CDB24}.Release|x86.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|ARM.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|x64.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Ad-Hoc|x86.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|ARM.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|ARM.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|x64.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|x64.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|x86.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.AppStore|x86.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|x64.Build.0 = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{C909EBD0-9CA3-49FB-8B78-F4EE4426D4F6}.Release|x86.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|ARM.ActiveCfg = Release|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|ARM.Build.0 = Release|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|x64.ActiveCfg = Release|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|x64.Build.0 = Release|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|x86.ActiveCfg = Release|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Ad-Hoc|x86.Build.0 = Release|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|ARM.ActiveCfg = Release|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|ARM.Build.0 = Release|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|x64.ActiveCfg = Release|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|x64.Build.0 = Release|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|x86.ActiveCfg = Release|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.AppStore|x86.Build.0 = Release|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|x64.Build.0 = Debug|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Debug|x86.Build.0 = Debug|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|ARM.Build.0 = Release|ARM\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|x64.ActiveCfg = Release|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|x64.Build.0 = Release|x64\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|x86.ActiveCfg = Release|x86\n\t\t{0CDBCFCA-4404-4F6E-976F-1165F1072604}.Release|x86.Build.0 = Release|x86\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|x64.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Ad-Hoc|x86.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|Any CPU.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|ARM.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|ARM.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|iPhone.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|x64.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|x64.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|x86.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.AppStore|x86.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|x64.Build.0 = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{50A782C7-CF5D-456B-8D9C-2F124B594B45}.Release|x86.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|ARM.ActiveCfg = Release|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|ARM.Build.0 = Release|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|x64.ActiveCfg = Release|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|x64.Build.0 = Release|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|x86.ActiveCfg = Release|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Ad-Hoc|x86.Build.0 = Release|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|ARM.ActiveCfg = Release|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|ARM.Build.0 = Release|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|x64.ActiveCfg = Release|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|x64.Build.0 = Release|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|x86.ActiveCfg = Release|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.AppStore|x86.Build.0 = Release|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|x64.Build.0 = Debug|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Debug|x86.Build.0 = Debug|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|ARM.Build.0 = Release|ARM\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|x64.ActiveCfg = Release|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|x64.Build.0 = Release|x64\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|x86.ActiveCfg = Release|x86\n\t\t{6DB2E62F-2A71-4CC8-AA09-9673A75757A1}.Release|x86.Build.0 = Release|x86\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|ARM.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|x64.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Ad-Hoc|x86.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|ARM.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|x64.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|x64.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|x86.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.AppStore|x86.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|x64.Build.0 = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8BEA10CB-FF91-4D13-868D-2210EC2F8294}.Release|x86.Build.0 = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|x64.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Ad-Hoc|x86.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|ARM.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|iPhone.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|x64.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|x64.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|x86.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.AppStore|x86.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{C3F21F82-B9E5-40C7-8B52-AE81E02ED8B7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|x64.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Ad-Hoc|x86.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|ARM.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|iPhone.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|x64.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|x64.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|x86.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.AppStore|x86.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|x64.Build.0 = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8F5AE379-EFFF-4898-B882-9173CD483EF4}.Release|x86.Build.0 = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|x64.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Ad-Hoc|x86.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|Any CPU.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|ARM.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|ARM.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|iPhone.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|x64.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|x64.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|x86.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.AppStore|x86.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|x64.Build.0 = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{47F77FBB-88B2-430B-9150-4F358A2AC755}.Release|x86.Build.0 = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|x64.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Ad-Hoc|x86.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|Any CPU.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|ARM.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|ARM.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|iPhone.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|x64.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|x64.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|x86.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.AppStore|x86.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|x64.Build.0 = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{44251BF9-8FC9-4C32-9B83-3CFCF5734384}.Release|x86.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|ARM.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|x64.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Ad-Hoc|x86.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|Any CPU.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|ARM.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|ARM.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|iPhone.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|iPhone.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|x64.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|x64.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|x86.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.AppStore|x86.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|iPhone.ActiveCfg = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|iPhone.Build.0 = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|iPhone.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|iPhone.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|x64.Build.0 = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1152DB10-F205-4F4A-8A95-BDF3DBACEFE2}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {474B538D-66A4-4813-AA9D-AD534C8A270F}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.uap10/LinqToTwitter.uap10.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{0CDBCFCA-4404-4F6E-976F-1165F1072604}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.uap10</RootNamespace>\n    <AssemblyName>LinqToTwitter.uap10</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion>10.0.18362.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.18362.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <RuntimeIdentifiers>win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot</RuntimeIdentifiers>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <None Include=\"LinqToTwitter.snk\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Content Include=\"Properties\\LinqToTwitter.uap10.rd.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.10</Version>\n    </PackageReference>\n    <PackageReference Include=\"Newtonsoft.Json\">\n      <Version>13.0.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive\">\n      <Version>4.4.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Core\">\n      <Version>4.4.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Interfaces\">\n      <Version>4.4.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.Linq\">\n      <Version>4.4.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"System.Reactive.PlatformServices\">\n      <Version>4.4.1</Version>\n    </PackageReference>\n  </ItemGroup>\n  <Import Project=\"..\\LinqToTwitter.Shared\\LinqToTwitter.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"..\\LinqToTwitter.Shared.uap\\LinqToTwitter.Shared.uap.projitems\" Label=\"Shared\" />\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.uap10/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.uap10\")]\n[assembly: AssemblyDescription(\"A LINQ provider for the Twitter API\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LinqToTwitter.uap10\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"5.1.3.*\")]\n[assembly: AssemblyFileVersion(\"5.1.3\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.uap10/Properties/LinqToTwitter.uap10.rd.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    This file contains Runtime Directives, specifications about types your application accesses\n    through reflection and other dynamic code patterns. Runtime Directives are used to control the\n    .NET Native optimizer and ensure that it does not remove code accessed by your library. If your\n    library does not do any reflection, then you generally do not need to edit this file. However,\n    if your library reflects over types, especially types passed to it or derived from its types,\n    then you should write Runtime Directives.\n\n    The most common use of reflection in libraries is to discover information about types passed\n    to the library. Runtime Directives have three ways to express requirements on types passed to\n    your library.\n\n    1.  Parameter, GenericParameter, TypeParameter, TypeEnumerableParameter\n        Use these directives to reflect over types passed as a parameter.\n\n    2.  SubTypes\n        Use a SubTypes directive to reflect over types derived from another type.\n\n    3.  AttributeImplies\n        Use an AttributeImplies directive to indicate that your library needs to reflect over\n        types or methods decorated with an attribute.\n\n    For more information on writing Runtime Directives for libraries, please visit\n    http://go.microsoft.com/fwlink/?LinkID=391919\n-->\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Library Name=\"LinqToTwitter.uap10\">\n\n  \t<!-- add directives for your library here -->\n\n  </Library>\n</Directives>\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.xamarin/LinqToTwitter.xamarin.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{67F9D3A8-F71E-4428-913F-C37AE82CDB24}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>LinqToTwitter.xamarin</RootNamespace>\n    <AssemblyName>LinqToTwitter.xamarin</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Profile78</TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.12.0.3\\lib\\portable-net45+win8+wp8+wpa81\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.IO.Compression, Version=3.9.85.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Bcl.Compression.3.9.85\\lib\\portable-net45+win8+wp8+wpa81\\System.IO.Compression.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Extensions, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Extensions.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Net.Http.Primitives, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Net.Http.2.2.29\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Net.Http.Primitives.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Rx-Core.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Core.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Reactive.Interfaces, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Rx-Interfaces.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Interfaces.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Reactive.Linq, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Rx-Linq.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.Linq.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System.Reactive.PlatformServices, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Rx-PlatformServices.2.2.5\\lib\\portable-windows8+net45+wp8\\System.Reactive.PlatformServices.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"LinqToTwitter.snk\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Analyzer Include=\"..\\packages\\ConfigureAwaitChecker.Analyzer.4.0.0\\analyzers\\dotnet\\cs\\ConfigureAwaitChecker.Analyzer.dll\" />\n    <Analyzer Include=\"..\\packages\\ConfigureAwaitChecker.Analyzer.4.0.0\\analyzers\\dotnet\\cs\\ConfigureAwaitChecker.Lib.dll\" />\n  </ItemGroup>\n  <Import Project=\"..\\LinqToTwitter.Shared\\LinqToTwitter.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"..\\LinqToTwitter.Shared.xamarin\\LinqToTwitter.Shared.xamarin.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\Portable\\$(TargetFrameworkVersion)\\Microsoft.Portable.CSharp.targets\" />\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets'))\" />\n  </Target>\n  <Import Project=\"..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets\" Condition=\"Exists('..\\packages\\Microsoft.Bcl.Build.1.0.21\\build\\Microsoft.Bcl.Build.targets')\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.xamarin/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Resources;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"LinqToTwitter.xamarin\")]\n[assembly: AssemblyDescription(\"A LINQ provider for the Twitter API\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"LINQ to Twitter\")]\n[assembly: AssemblyProduct(\"LinqToTwitter.xamarin\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2020\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n[assembly: NeutralResourcesLanguage(\"en\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"5.1.3.0\")]\n[assembly: AssemblyFileVersion(\"5.1.3.0\")]\n"
  },
  {
    "path": "src/LinqToTwitter5/LinqToTwitter.xamarin/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"ConfigureAwaitChecker.Analyzer\" version=\"4.0.0\" targetFramework=\"portable45-net45+win8+wp8\" developmentDependency=\"true\" />\n  <package id=\"Microsoft.Bcl\" version=\"1.1.10\" targetFramework=\"portable45-net45+win8+wp8\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Bcl.Build\" version=\"1.0.21\" targetFramework=\"portable45-net45+win8+wp8\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Bcl.Compression\" version=\"3.9.85\" targetFramework=\"portable45-net45+win8+wp8\" userInstalled=\"true\" />\n  <package id=\"Microsoft.Net.Http\" version=\"2.2.29\" targetFramework=\"portable45-net45+win8+wp8\" userInstalled=\"true\" />\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"portable45-net45+win8+wp8\" />\n  <package id=\"Rx-Core\" version=\"2.2.5\" targetFramework=\"portable45-net45+win8+wp8\" />\n  <package id=\"Rx-Interfaces\" version=\"2.2.5\" targetFramework=\"portable45-net45+win8+wp8\" />\n  <package id=\"Rx-Linq\" version=\"2.2.5\" targetFramework=\"portable45-net45+win8+wp8\" />\n  <package id=\"Rx-Main\" version=\"2.2.5\" targetFramework=\"portable45-net45+win8+wp8\" />\n  <package id=\"Rx-PlatformServices\" version=\"2.2.5\" targetFramework=\"portable45-net45+win8+wp8\" />\n</packages>"
  },
  {
    "path": "src/LinqToTwitter6/.editorconfig",
    "content": "﻿[*.cs]\n\n# CA2208: Instantiate argument exceptions correctly\ndotnet_diagnostic.CA2208.severity = none\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/Account.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for account queries\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Account\n    {\n        /// <summary>\n        /// Type of account query (VerifyCredentials or Settings)\n        /// </summary>\n        public AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Includes the user's email address in response (requires whitelisting,\n        /// see https://dev.twitter.com/rest/reference/get/account/verify_credentials)\n        /// </summary>\n        public bool IncludeEmail { get; set; }\n\n        /// <summary>\n        /// User returned by VerifyCredentials Queries\n        /// </summary>\n        public User? User { get; set; }\n\n        /// <summary>\n        /// Current Totals\n        /// </summary>\n        public Totals? Totals { get; set; }\n\n        /// <summary>\n        /// Account settings, such as trend location, geo enabled, and sleep time\n        /// </summary>\n        public Settings? Settings { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/AccountAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum AccountAction\n    {\n        /// <summary>\n        /// Ends the session of the authenticating user\n        /// </summary>\n        EndSession,\n\n        /// <summary>\n        /// Populates new settings\n        /// </summary>\n        Settings\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/AccountRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// handles query processing for accounts\n    /// </summary>\n    public class AccountRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of account query (VerifyCredentials or Settings)\n        /// </summary>\n        public AccountType Type { get; set; }\n\n        /// <summary>\n        /// Don't include status in response\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Includes the user's email address in response (requires whitelisting,\n        /// see https://dev.twitter.com/rest/reference/get/account/verify_credentials)\n        /// </summary>\n        public bool IncludeEmail { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Account>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\",\n                       \"IncludeEmail\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<AccountType>(parameters[TypeParam]);\n\n            return Type switch\n            {\n                AccountType.VerifyCredentials => BuildVerifyCredentialsUrl(parameters),\n                AccountType.Settings => new Request(BaseUrl + \"account/settings.json\"),\n                _ => throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\"),\n            };\n        }\n  \n        Request BuildVerifyCredentialsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"account/verify_credentials.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SkipStatus\") &&\n                RequestProcessorHelper.FlagTrue(parameters, \"SkipStatus\"))\n            {\n                    SkipStatus = true;\n                    urlParams.Add(new QueryParameter(\"skip_status\", \"true\"));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEmail\"))\n            {\n                IncludeEmail = bool.Parse(parameters[\"IncludeEmail\"]);\n                urlParams.Add(new QueryParameter(\"include_email\", parameters[\"IncludeEmail\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms json into IQueryable of Account\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <returns>List of Account</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            var list = new List<Account>();\n            Account? acct = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                acct = Type switch\n                {\n                    AccountType.Settings => HandleSettingsResponse(responseJson),\n                    AccountType.VerifyCredentials => HandleVerifyCredentialsResponse(responseJson),\n                    _ => throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\"),\n                };\n\n                acct.Type = Type;\n                acct.SkipStatus = SkipStatus;\n                acct.IncludeEntities = IncludeEntities;\n                acct.IncludeEmail = IncludeEmail;\n            }\n\n\n            if (acct != null)\n                list.Add(acct);\n\n            return list.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Used to specify side-effect methods</param>\n        /// <returns>Action response</returns>\n        public virtual T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            Account? acct = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                acct = ((AccountAction)theAction) switch\n                {\n                    AccountAction.Settings => HandleSettingsResponse(responseJson),\n                    _ => throw new InvalidOperationException(\"The default case of ProcessActionResult should never execute because a Type must be specified.\"),\n                };\n            }\n\n            return acct.ItemCast(default(T));\n        }\n\n        public Account HandleSettingsResponse(string responseJson)\n        {\n            var settings = JsonDocument.Parse(responseJson).RootElement;\n            var sleepTime = settings.GetProperty(\"sleep_time\");\n            var timeZone = settings.GetProperty(\"time_zone\");\n            var trendLocationData = settings.GetProperty(\"trend_location\");\n            var trendLocation = trendLocationData.EnumerateArray().FirstOrDefault();\n\n            var acct = new Account\n            {\n                Type = Type,\n                Settings = new Settings\n                {\n                    TrendLocation = new Location(trendLocation),\n                    GeoEnabled = settings.GetBool(\"geo_enabled\"),\n                    SleepTime = new SleepTime(sleepTime),\n                    Language = settings.GetString(\"language\"),\n                    AlwaysUseHttps = settings.GetBool(\"always_use_https\"),\n                    DiscoverableByEmail = settings.GetBool(\"discoverable_by_email\"),\n                    DiscoverableByMobilePhone = settings.GetBool(\"discoverable_by_mobile_phone\"),\n                    TimeZone = new TZInfo(timeZone),\n                    ScreenName = settings.GetString(\"screen_name\"),\n                    UseCookiePersonalization = settings.GetBool(\"use_cookie_personalization\"),\n                    DisplaySensitiveMedia = settings.GetBool(\"display_sensitive_media\"),\n                    AllowContributorRequest = settings.GetString(\"allow_contributor_request\"),\n                    AllowDmsFrom = settings.GetString(\"allow_dms_from\"),\n                    AllowDmGroupsFrom = settings.GetString(\"allow_dm_groups_from\")\n                }\n            };\n\n\n            return acct;\n        }\n\n        Account HandleVerifyCredentialsResponse(string responseJson)\n        {\n            JsonElement user = JsonDocument.Parse(responseJson).RootElement;\n\n            var acct = new Account\n            {\n                Type = Type,\n                User = new User(user)\n            };\n\n            return acct;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/AccountType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// actions for querying accounts\n    /// </summary>\n    public enum AccountType\n    {\n        /// <summary>\n        /// Gets trend, geo, and sleep settings\n        /// </summary>\n        Settings,\n\n        /// <summary>\n        /// Allows you to check user credentails\n        /// </summary>\n        VerifyCredentials\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/DeviceType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of device for account updates\n    /// </summary>\n    public enum DeviceType\n    {\n        /// <summary>\n        /// no device specified\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// use SMS text\n        /// </summary>\n        Sms,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/Settings.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Account Settings\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Settings\n    {\n        /// <summary>\n        /// Location to display trends for\n        /// </summary>\n        public Location? TrendLocation { get; set; }\n\n        /// <summary>\n        /// Is Geo Tracking On?\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Times to not notify (i.e. when you're sleeping)\n        /// </summary>\n        public SleepTime? SleepTime { get; set; }\n\n        /// <summary>\n        /// The user's UI language selection on Twitter\n        /// </summary>\n        public string? Language { get; set; }\n\n        /// <summary>\n        /// Should they always use https protocol\n        /// </summary>\n        public bool AlwaysUseHttps { get; set; }\n\n        /// <summary>\n        /// Can this user be found by email address?\n        /// </summary>\n        public bool DiscoverableByEmail { get; set; }\n\n        /// <summary>\n        /// The user's timezone selection on Twitter\n        /// </summary>\n        public TZInfo? TimeZone { get; set; }\n\n        /// <summary>\n        /// Account screen name\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Use cookie personalization\n        /// </summary>\n        public bool UseCookiePersonalization { get; set; }\n\n        /// <summary>\n        /// Can other users find you on Twitter via your mobile phone\n        /// </summary>\n        public bool DiscoverableByMobilePhone { get; set; }\n\n        /// <summary>\n        /// User can see media marked as sensitive\n        /// </summary>\n        public bool DisplaySensitiveMedia { get; set; }\n\n        /// <summary>\n        /// Allow contributor requests\n        /// </summary>\n        public string? AllowContributorRequest { get; set; }\n\n        /// <summary>\n        /// Who is allowed to send DMs\n        /// </summary>\n        public string? AllowDmsFrom { get; set; }\n\n        /// <summary>\n        /// Who is allowed to send grouped DMs\n        /// </summary>\n        public string? AllowDmGroupsFrom { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/SleepTime.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Times to stop and start sending notifications\n    ///     - Times are null when Enabled is false\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SleepTime\n    {\n        public SleepTime() {}\n        internal SleepTime(JsonElement sleepTime)\n        {\n            StartHour = sleepTime.GetInt(\"start_time\");\n            EndHour = sleepTime.GetInt(\"end_time\");\n            Enabled = sleepTime.GetBool(\"enabled\");\n        }\n\n        /// <summary>\n        /// Stop sending notifications at this time\n        /// </summary>\n        public int? StartHour { get; set; }\n\n        /// <summary>\n        /// Resume sending notifications at this time\n        /// </summary>\n        public int? EndHour { get; set; }\n\n        /// <summary>\n        /// Is sleep times turned on\n        /// </summary>\n        public bool Enabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/TZInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Time zone informtion\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class TZInfo\n    {\n        public TZInfo() {}\n        internal TZInfo(JsonElement timeZone)\n        {\n            Name = timeZone.GetString(\"name\");\n            TzInfoName = timeZone.GetString(\"tzinfo_name\");\n            UtcOffset = timeZone.GetInt(\"utc_offset\");\n        }\n\n        /// <summary>\n        /// Human-readable timezone name\n        /// </summary>\n        /// <example>Pacific Time (US &amp; Canada)</example>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Rails/unix TZINFO name\n        /// </summary>\n        /// <example>America/Los_Angeles</example>\n        public string? TzInfoName { get; set; }\n\n        /// <summary>\n        /// Seconds to subtract from UTC time\n        /// </summary>\n        /// <example>-28800</example>\n        public int? UtcOffset { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/Totals.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Current totals\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Totals\n    {\n        /// <summary>\n        /// Total Updates\n        /// </summary>\n        public int Updates { get; set; }\n\n        /// <summary>\n        /// Total Friends\n        /// </summary>\n        public int Friends { get; set; }\n\n        /// <summary>\n        /// Total Favorites\n        /// </summary>\n        public int Favorites { get; set; }\n\n        /// <summary>\n        /// Total Followers\n        /// </summary>\n        public int Followers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Account/TwitterContextAccountCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        const string NoInputParam = \"NoInput\";\n        const ulong NoMediaID = 0;\n        const byte[] NoImage = null;\n\n        /// <summary>\n        /// sends an image file to Twitter to replace user image\n        /// </summary>\n        /// <remarks>\n        /// You can only run this method with a period of time between executions; \n        /// otherwise you get WebException errors from Twitter\n        /// </remarks>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User?> UpdateAccountImageAsync(byte[] image, string fileName, string imageType, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountImageAsync(image, fileName, imageType, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image file to Twitter to replace user image.\n        /// </summary>\n        /// <param name=\"image\">byte array of image to upload</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"imageType\">type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new image info</returns>\n        public async Task<User?> UpdateAccountImageAsync(byte[] image, string fileName, string imageType, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_image.json\";\n\n            if (image == null || image.Length == 0)\n                throw new ArgumentException(\"image is required.\", \"image\");\n\n            if (string.IsNullOrWhiteSpace(fileName))\n                throw new ArgumentException(\"fileName is required.\", \"fileName\");\n\n            if (string.IsNullOrWhiteSpace(imageType))\n                throw new ArgumentException(\"imageType is required.\", \"imageType\");\n\n            var reqProc = new UserRequestProcessor<User>();\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    };\n\n            string name = \"image\";\n            string imageMimeType = \"image/\" + imageType;\n\n            RawResult = await TwitterExecutor.PostImageAsync(accountUrl, parameters, image, name, fileName, imageMimeType, cancelToken: cancelToken).ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public async Task<User?> UpdateAccountProfileAsync(string name, string url, string location, string description, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateAccountProfileAsync(name, url, location, description, true, skipStatus, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Update account profile info\n        /// </summary>\n        /// <param name=\"name\">User Name</param>\n        /// <param name=\"url\">Web Address</param>\n        /// <param name=\"location\">Geographic Location</param>\n        /// <param name=\"description\">Personal Description</param>\n        /// <param name=\"includeEntities\">Set to false to not include entities. (default: true)</param>\n        /// <param name=\"skipStatus\">Don't include status with response.</param>\n        /// <returns>User with new info</returns>\n        public async Task<User?> UpdateAccountProfileAsync(string name, string url, string location, string description, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile.json\";\n\n            if (string.IsNullOrWhiteSpace(name) &&\n                string.IsNullOrWhiteSpace(url) &&\n                string.IsNullOrWhiteSpace(location) &&\n                string.IsNullOrWhiteSpace(description))\n                throw new ArgumentException(\"At least one of the text fields (name, email, url, location, or description) must be provided as arguments, but none are specified.\", NoInputParam);\n\n            if (!string.IsNullOrWhiteSpace(name) && name.Length > 50)\n                throw new ArgumentException(\"name must be no longer than 50 characters\", \"name\");\n\n            if (!string.IsNullOrWhiteSpace(url) && url.Length > 100)\n                throw new ArgumentException(\"url must be no longer than 100 characters\", \"url\");\n\n            if (!string.IsNullOrWhiteSpace(location) && location.Length > 30)\n                throw new ArgumentException(\"location must be no longer than 30 characters\", \"location\");\n\n            if (!string.IsNullOrWhiteSpace(description) && description.Length > 160)\n                throw new ArgumentException(\"description must be no longer than 160 characters\", \"description\");\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    new Dictionary<string, string?>\n                    {\n                        { \"name\", name },\n                        { \"url\", url },\n                        { \"location\", location },\n                        { \"description\", description },\n                        { \"include_entities\", includeEntities.ToString().ToLower() },\n                        { \"skip_status\", skipStatus.ToString().ToLower() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);\n        }\n\n        /// <summary>\n        /// Updates user's account settings\n        /// </summary>\n        /// <param name=\"trendLocationWeoid\">WEOID for Trend Location the user is interested in.</param>\n        /// <param name=\"sleepTimeEnabled\">Turn on time periods when notifications won't be sent.</param>\n        /// <param name=\"startSleepTime\">Don't send notifications at this time or later this time. (hour from 00 to 23)</param>\n        /// <param name=\"endSleepTime\">Start sending notifications again after this time. (hour from 00 to 23)</param>\n        /// <param name=\"timeZone\">User's time zone.</param>\n        /// <param name=\"lang\">User's language.</param>\n        /// <returns>Account information with Settings property populated.</returns>\n        public async Task<Account?> UpdateAccountSettingsAsync(int? trendLocationWoeid, bool? sleepTimeEnabled, int? startSleepTime, int? endSleepTime, string timeZone, string lang, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/settings.json\";\n\n            if (trendLocationWoeid == null &&\n                sleepTimeEnabled == null &&\n                startSleepTime == null &&\n                endSleepTime == null &&\n                string.IsNullOrWhiteSpace(timeZone) &&\n                string.IsNullOrWhiteSpace(lang))\n                throw new ArgumentException(\"At least one parameter must be provided as arguments, but none are specified.\", NoInputParam);\n\n            var reqProc = new AccountRequestProcessor<Account>();\n            var parameters = new Dictionary<string, string?>\n                    {\n                        { \"time_zone\", timeZone },\n                        { \"lang\", lang }\n                    };\n\n            if (trendLocationWoeid != null)\n                parameters.Add(\"trend_location_woeid\", trendLocationWoeid?.ToString());\n            if (sleepTimeEnabled != null)\n                parameters.Add(\"sleep_time_enabled\", sleepTimeEnabled.ToString()?.ToLower());\n            if (startSleepTime != null)\n                parameters.Add(\"start_sleep_time\", startSleepTime.ToString());\n            if (endSleepTime != null)\n                parameters.Add(\"end_sleep_time\", endSleepTime.ToString());\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Account>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    parameters,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, AccountAction.Settings);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public async Task<User> UpdateProfileBannerAsync(byte[] banner, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UpdateProfileBannerAsync(banner, 1500, 500, 0, 0, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends an image to Twitter to be placed as the user's profile banner.\n        /// </summary>\n        /// <param name=\"banner\">byte[] containing image data.</param>\n        /// <param name=\"width\">Pixel width to clip image.</param>\n        /// <param name=\"height\">Pixel height to clip image.</param>\n        /// <param name=\"offsetLeft\">Pixels to offset start of image from the left.</param>\n        /// <param name=\"offsetTop\">Pixels to offset start of image from the top.</param>\n        /// <returns>\n        /// Account of authenticated user who's profile banner will be updated.\n        /// Url of new banner will appear in ProfileBannerUrl property.\n        /// </returns>\n        public async Task<User> UpdateProfileBannerAsync(byte[] banner, int width, int height, int offsetLeft, int offsetTop, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/update_profile_banner.json\";\n\n            if (banner == null || banner.Length == 0)\n                throw new ArgumentException(\"banner is required.\", \"banner\");\n\n            var parameters = new Dictionary<string, string?>\n            {\n                { \"width\", width.ToString() },\n                { \"height\", height.ToString() },\n                { \"offset_left\", offsetLeft.ToString() },\n                { \"offset_top\", offsetTop.ToString() },\n                { \"banner\", Convert.ToBase64String(banner) }\n            };\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult = \n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(), \n                    accountUrl, \n                    parameters, \n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return new User();\n        }\n\n        /// <summary>\n        /// Removes banner from authenticated user's profile.\n        /// </summary>\n        /// <returns>Empty User instance.</returns>\n        public async Task<User> RemoveProfileBannerAsync(CancellationToken cancelToken = default(CancellationToken))\n        {\n            var accountUrl = BaseUrl + \"account/remove_profile_banner.json\";\n\n            var reqProc = new UserRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    accountUrl,\n                    new Dictionary<string, string?>(),\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return new User();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/AccountActivity/AccountActivity.cs",
    "content": "﻿using System.Text.Json;\nusing System.Text.Json.Serialization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Account Activity support for Twitter chatbot messages.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class AccountActivity\n    {\n        /// <summary>\n        /// Input: ID for a webhook\n        /// </summary>\n        public ulong WebhookID { get; set; }\n\n        /// <summary>\n        /// Input: Url for adding a webhook\n        /// </summary>\n        public string? Url { get; set; }\n\n        /// <summary>\n        /// Input (All Queries): Type of Account Activity\n        /// </summary>\n        public AccountActivityType Type { get; set; }\n\n        /// <summary>\n        /// Output: Indicates whether a user is subscribed. Populated via a subscription command or query.\n        /// </summary>\n        public SubscriptionValue? SubscriptionValue { get; set; }\n\n        /// <summary>\n        /// Output: Webhooks response from Twitter. Populated via a webhook command or query.\n        /// </summary>\n        public WebhooksValue? WebhooksValue { get; set; }\n    }\n\n    public class SubscriptionValue\n    {\n        /// <summary>\n        /// Indicates whether the authorizing user is subscribed to a Webhook.\n        /// </summary>\n        /// <exception cref=\"TwitterQueryException\">\n        /// Throws TwitterQueryException when an AddAccountActivitySubscriptionAsync fails.\n        /// </exception>\n        public bool IsSubscribed { get; set; }\n    }\n\n    public class AccountActivityValue\n    {\n        /// <summary>\n        /// Show and List queries populate this to show which app created the DM.\n        /// You need to use Sytem.Text.Json because the nested object ID is a property matching the app id, \n        /// which is different for every app, precluding the ability to assign a C# property.\n        /// </summary>\n        [JsonPropertyName(\"apps\")]\n        public JsonElement Apps { get; set; }\n\n        [JsonPropertyName(\"next_cursor\")]\n        public string? NextCursor { get; set; }\n    }\n\n    public class WebhooksValue\n    {\n        public Webhook?[]? Webhooks { get; set; }\n    }\n\n    public class Webhook\n    {\n        /// <summary>\n        /// Webhook ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Webhook URL\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; set; }\n\n        /// <summary>\n        /// Did Webhook pass CRC\n        /// </summary>\n        [JsonPropertyName(\"valid\")]\n        public bool Valid { get; set; }\n\n        /// <summary>\n        /// UTC DateTime Webhook was created\n        /// </summary>\n        [JsonPropertyName(\"created_timestamp\")]\n        public string? CreatedTimestamp { get; set; }\n    }\n\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/AccountActivity/AccountActivityRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class AccountActivityRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Account Activity\n        /// </summary>\n        public AccountActivityType Type { get; set; }\n\n        /// <summary>\n        /// ID for a webhook\n        /// </summary>\n        public ulong WebhookID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<AccountActivity>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(WebhookID)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException($\"You must set {nameof(Type)}.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<AccountActivityType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case AccountActivityType.Subscriptions:\n                    return BuildSubscriptionsUrl(parameters);\n                case AccountActivityType.Webhooks:\n                    return BuildWebhooksUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\n                        $\"Didn't recognize '{Type}' for {nameof(Type)} parameter in AccountActivityRequestProcessor.BuildUrl.\");\n            }\n        }\n\n        Request BuildWebhooksUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"account_activity/webhooks.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            return req;\n        }\n\n        Request BuildSubscriptionsUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(WebhookID)))\n                throw new ArgumentNullException(nameof(WebhookID), $\"{nameof(WebhookID)} is required.\");\n\n            WebhookID = ulong.Parse(parameters[nameof(WebhookID)]);\n\n            var req = new Request(BaseUrl + $\"account_activity/webhooks/{WebhookID}/subscriptions.json\");\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<AccountActivity> accActList;\n\n            switch (Type)\n            {\n                case AccountActivityType.Subscriptions:\n                    accActList = HandleSubscriptions(responseJson);\n                    break;\n                case AccountActivityType.Webhooks:\n                    accActList = HandleWebhooks(responseJson);\n                    break;\n                default:\n                    accActList = new List<AccountActivity>();\n                    break;\n            }\n\n            return accActList.OfType<T>().ToList();\n        }\n\n        IEnumerable<AccountActivity> HandleSubscriptions(string accActJson)\n        {\n            return new List<AccountActivity>\n            {\n                new AccountActivity\n                {\n                    Type = Type,\n                    WebhookID = WebhookID,\n                    SubscriptionValue = new SubscriptionValue { IsSubscribed = true }\n                }\n            };\n        }\n        IEnumerable<AccountActivity> HandleWebhooks(string accActJson)\n        {\n            Webhook[]? webhooks = JsonSerializer.Deserialize<Webhook[]>(accActJson);\n\n            return new List<AccountActivity> \n            { \n                new AccountActivity\n                {\n                    Type = Type,\n                    WebhookID = WebhookID,\n                    WebhooksValue = new WebhooksValue\n                    {\n                        Webhooks = webhooks\n                    }\n                }\n            };\n        }\n\n        public T? ProcessActionResult(string? responseJson, Enum theAction)\n        {\n            var accAct = new AccountActivity();\n\n            if ((AccountActivityType)theAction == AccountActivityType.Webhooks)\n                accAct.WebhooksValue =\n                    new WebhooksValue\n                    {\n                        Webhooks =\n                            new Webhook?[]\n                            {\n                                string.IsNullOrWhiteSpace(responseJson) ?\n                                    new Webhook() :\n                                    JsonSerializer.Deserialize<Webhook>(responseJson)\n                            }\n                    };\n            else if ((AccountActivityType)theAction == AccountActivityType.Subscriptions)\n                accAct.SubscriptionValue = new SubscriptionValue { IsSubscribed = true };\n\n            return accAct.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/AccountActivity/AccountActivityType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of account activity query\n    /// </summary>\n    public enum AccountActivityType\n    {\n        /// <summary>\n        /// all subscriptions\n        /// </summary>\n        Subscriptions,\n\n        /// <summary>\n        /// all webhooks\n        /// </summary>\n        Webhooks\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/AccountActivity/TwitterContextAccountActivityCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a user subscription to specified webhook\n        /// </summary>\n        /// <param name=\"webhookID\">ID of webhook user is subscribing to.</param>\n        /// <returns>Account Activity data.</returns>\n        /// <exception cref=\"TwitterQueryException\">\n        /// Throws TwitterQueryException when an AddAccountActivitySubscriptionAsync fails.\n        /// </exception>\n        public async Task<AccountActivity?> AddAccountActivitySubscriptionAsync(ulong webhookID, CancellationToken cancelToken = default)\n        {\n            if (webhookID == default)\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}/subscriptions.json\";\n\n            var accActValue = new AccountActivityValue();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity? accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Subscriptions);\n\n            if (accAct != null)\n                accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Adds a new webhook to account\n        /// </summary>\n        /// <param name=\"url\">Url of webhook.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity?> AddAccountActivityWebhookAsync(string url, CancellationToken cancelToken = default)\n        {\n            if (string.IsNullOrWhiteSpace(url))\n                throw new ArgumentException($\"{nameof(url)} must be set.\", nameof(url));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<AccountActivity>(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string?>\n                    {\n                        { \"url\", url }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity? accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Webhooks);\n\n            if (accAct != null)\n                accAct.Url = url;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Sends a CRC check to a webhook for testing\n        /// </summary>\n        /// <param name=\"webhookID\">ID of webhook to send CRC to.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity?> SendAccountActivityCrcAsync(ulong webhookID, CancellationToken cancelToken = default)\n        {\n            if (webhookID == default)\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}.json\";\n\n            var accActValue = new AccountActivityValue();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity? accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Webhooks);\n\n            if (accAct != null)\n                accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Deletes a user subscription to specified webhook\n        /// </summary>\n        /// <param name=\"webhookID\">ID of webhook user is subscribing to.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity?> DeleteAccountActivitySubscriptionAsync(ulong webhookID, CancellationToken cancelToken = default)\n        {\n            if (webhookID == default)\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}/subscriptions.json\";\n\n            var accActValue = new AccountActivityValue();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity? accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Subscriptions);\n\n            if (accAct != null)\n                accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n\n        /// <summary>\n        /// Deletes a new webhook to account\n        /// </summary>\n        /// <param name=\"webhookID\">Url of webhook.</param>\n        /// <returns>Account Activity data.</returns>\n        public async Task<AccountActivity?> DeleteAccountActivityWebhookAsync(ulong webhookID, CancellationToken cancelToken = default)\n        {\n            if (webhookID == default)\n                throw new ArgumentException($\"{nameof(webhookID)} must be set.\", nameof(webhookID));\n\n            var newUrl = BaseUrl + $\"account_activity/webhooks/{webhookID}.json\";\n\n            var accActValue = new AccountActivity\n            {\n                WebhookID = webhookID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    accActValue,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            AccountActivity? accAct = reqProc.ProcessActionResult(RawResult, AccountActivityType.Webhooks);\n\n            if (accAct != null)\n                accAct.WebhookID = webhookID;\n\n            return accAct;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/BlockingResponse.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class BlockingResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public BlockingResponseData? Data { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/BlockingResponseData.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record BlockingResponseData\n    {\n        [JsonPropertyName(\"blocking\")]\n        public bool Blocking { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/BlockingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum BlockingType\n    {\n        /// <summary>\n        /// Retrieve a list of IDs of users being blocked\n        /// </summary>\n        Ids,\n\n        /// <summary>\n        /// Retrieve list of users (full User objects) being blocked\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Retrieve list of users being blocked\n        /// </summary>\n        Lookup,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/Blocks.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps retrieve information about blocks\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Blocks\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of blocks request to perform (input only)\n        /// </summary>\n        public BlockingType? Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name (input only)\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id (input only)\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve (input only)\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        public int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        public string? Cursor { get; set; }\n\n        //\n        // Output parameters\n        //\n\n        /// <summary>\n        /// Prev/Next cursor to move through ID and User lists.\n        /// </summary>\n        public Cursors? Cursors { get; set; }\n\n        /// <summary>\n        /// Listed Count\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// List of blocked IDs\n        /// </summary>\n        public List<string>? IDs { get; set; }\n\n        /// <summary>\n        /// user being blocked\n        /// </summary>\n        public User? User { get; set; }\n\n        /// <summary>\n        /// Populated for blocking queries, showing all blocked users\n        /// </summary>\n        public List<User>? Users { get; set; }\n\n        /// <summary>\n        /// Twitter response for no block on specified user\n        /// </summary>\n        public TwitterHashResponse? NoBlock { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/BlocksMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record BlocksMeta\n    {\n        [JsonPropertyName(\"result_count\")]\n        public int ResultCount { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/BlocksRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes block queries\n    /// </summary>\n    public class BlocksRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of blocks request to perform\n        /// </summary>\n        public BlockingType? Type { get; set; }\n\n        /// <summary>\n        /// disambiguates when user id is screen name\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// disambiguates when screen name is user id\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// page to retrieve\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of items per page to return (input only)\n        /// </summary>\n        public int PerPage { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Don't include statuses in response (input only)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Identifier for previous or next page to query (input only)\n        /// </summary>\n        public string? Cursor { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Blocks>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"Page\",\n                       \"PerPage\",\n                       \"IncludeEntities\",\n                       \"SkipStatus\",\n                       \"Cursor\"\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<BlockingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case BlockingType.List:\n                    return BuildListUrl(parameters);\n                case BlockingType.Ids:\n                    return BuildBlockingIDsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting blocking ids\n        /// </summary>\n        /// <returns>base url + show segment</returns>\n        Request BuildBlockingIDsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/ids.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of blocked users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"blocks/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"PerPage\"))\n            {\n                PerPage = int.Parse(parameters[\"PerPage\"]);\n                urlParams.Add(new QueryParameter(\"per_page\", parameters[\"PerPage\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = parameters[\"Cursor\"];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <returns>List of Blocks</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            var blocks = new Blocks\n            {\n                Type = Type,\n                UserID = UserID,\n                ScreenName = ScreenName,\n                Page = Page,\n                PerPage = PerPage,\n                IncludeEntities = IncludeEntities,\n                SkipStatus = SkipStatus,\n                Cursor = Cursor\n            };\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                blocks.Users = new List<User>();\n            }\n            else\n            {\n                var blocksJson = JsonDocument.Parse(responseJson).RootElement;\n                blocks.Cursors = new Cursors(blocksJson);\n\n                switch (Type)\n                {\n                    case BlockingType.List:\n                        HandleList(blocks, blocksJson);\n                        break;\n                    case BlockingType.Ids:\n                        HandleBlockingIDs(blocks, blocksJson);\n                        break;\n                    default:\n                        throw new ArgumentException(\"Unhandled BlockingType.\");\n                }\n            }\n\n            return new List<Blocks> { blocks }.OfType<T>().ToList();\n        }\n\n        void HandleList(Blocks blocks, JsonElement blocksJson)\n        {\n            var users = blocksJson.GetProperty(\"users\");\n\n            blocks.Users =\n                (from user in users.EnumerateArray()\n                 select new User(user))\n                .ToList();\n        }\n\n        void HandleBlockingIDs(Blocks blocks, JsonElement blocksJson)\n        {\n            var ids = blocksJson.GetProperty(\"ids\");\n\n            blocks.IDs =\n                (from id in ids.EnumerateArray()\n                 select id.ToString())\n                .ToList();\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement blocksJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var user = new User(blocksJson);\n\n            return user.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/TwitterBlocksQuery.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TwitterBlocksQuery\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of blocks request to perform (input only)\n        /// </summary>\n        public BlockingType? Type { get; set; }\n\n        /// <summary>\n        /// ID of user performing the block\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Blocked user list\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<TwitterUser>? Users { get; init; }\n\n        /// <summary>\n        /// Result metadata\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public BlocksMeta? Meta { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/TwitterBlocksRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes block queries\n    /// </summary>\n    public class TwitterBlocksRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of blocks request to perform\n        /// </summary>\n        public BlockingType? Type { get; set; }\n\n        /// <summary>\n        /// ID of user performing the block\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<TwitterBlocksQuery>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Expansions),\n                       nameof(ID),\n                       nameof(MaxResults),\n                       nameof(PaginationToken),\n                       nameof(TweetFields),\n                       nameof(UserFields)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<BlockingType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case BlockingType.Lookup:\n                    return BuildLookupUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for looking up blocked users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/blocking\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                MaxResults = int.Parse(parameters[nameof(MaxResults)]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString()));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// \n        /// Sets parameter, but doesn't treat as a query parameter.\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters</param>\n        void SetUserID(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(ID)))\n                ID = parameters[nameof(ID)];\n            else\n                throw new ArgumentException($\"{nameof(ID)} is required\", nameof(ID));\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <returns>List of Blocks</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<TwitterBlocksQuery> blocks;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                blocks = new List<TwitterBlocksQuery>();\n            }\n            else\n            {\n                switch (Type)\n                {\n                    case BlockingType.Lookup:\n                        TwitterBlocksQuery blocksResult = JsonDeserialize(responseJson);\n                        blocks = new List<TwitterBlocksQuery> { blocksResult };\n                        break;\n                    default:\n                        throw new ArgumentException(\"Unhandled BlockingType.\");\n                }\n            }\n\n            return blocks.OfType<T>().ToList();\n        }\n\n        TwitterBlocksQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter(),\n                    new TweetReplySettingsConverter()\n                }\n            };\n            TwitterBlocksQuery? blocks = JsonSerializer.Deserialize<TwitterBlocksQuery>(responseJson, options);\n\n            if (blocks?.Meta == null || blocks.Meta.ResultCount == 0)\n                return new TwitterBlocksQuery\n                {\n                    Type = Type,\n                    ID = ID,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    PaginationToken = PaginationToken,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields\n                };\n            else\n                return blocks with\n                {\n                    Type = Type,\n                    ID = ID,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    PaginationToken = PaginationToken,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields\n                };\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement blocksJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var user = new User(blocksJson);\n\n            return user.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Blocks/TwitterContextBlockCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Block a user.\n        /// </summary>\n        /// <param name=\"sourceUserID\">Following user ID</param>\n        /// <param name=\"targetUserID\">Followed user ID</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Indicates whether a user was blocked</returns>\n        public async Task<BlockingResponse?> BlockUserAsync(string sourceUserID, string targetUserID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = sourceUserID ?? throw new ArgumentException($\"{nameof(sourceUserID)} is a required parameter.\", nameof(sourceUserID));\n            _ = targetUserID ?? throw new ArgumentException($\"{nameof(targetUserID)} is a required parameter.\", nameof(targetUserID));\n\n            var url = $\"{BaseUrl2}users/{sourceUserID}/blocking\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TwitterUserTargetID() { TargetUserID = targetUserID.ToString() };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            BlockingResponse? result = JsonSerializer.Deserialize<BlockingResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Unblock a user.\n        /// </summary>\n        /// <param name=\"sourceUserID\">Following user ID</param>\n        /// <param name=\"targetUserID\">Followed user ID</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>User that was unblocked</returns>\n        public async Task<BlockingResponse?> UnblockUserAsync(string sourceUserID, string targetUserID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = sourceUserID ?? throw new ArgumentException($\"{nameof(sourceUserID)} is a required parameter.\", nameof(sourceUserID));\n            _ = targetUserID ?? throw new ArgumentException($\"{nameof(targetUserID)} is a required parameter.\", nameof(targetUserID));\n\n            var url = $\"{BaseUrl2}users/{sourceUserID}/blocking/{targetUserID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TwitterUserTargetID() { TargetUserID = targetUserID.ToString() };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            BlockingResponse? result = JsonSerializer.Deserialize<BlockingResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Bookmarks/BookmarkResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record BookmarkResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public TweetBookmarked? Data { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Bookmarks/BookmarkedTweetID.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class BookmarkedTweetID\n    {\n        [JsonPropertyName(\"tweet_id\")]\n        public string TweetID { get; set; } = string.Empty;\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Bookmarks/TweetBookmarked.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetBookmarked\n    {\n        [JsonPropertyName(\"bookmarked\")]\n        public bool Bookmarked { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Bookmarks/TwitterContextBookmarkCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Bookmarks a tweet\n        /// </summary>\n        /// <param name=\"userID\">ID of user who is bookmarking tweet</param>\n        /// <param name=\"tweetID\">ID of the bookmarked tweet</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <returns>Bookmark status of reply - true if reply is hidden</returns>\n        public async Task<BookmarkResponse?> BookmarkAsync(string userID, string tweetID, CancellationToken cancelToken = default)\n        {\n            _ = userID ?? throw new ArgumentNullException(nameof(userID), $\"{nameof(userID)} is required.\");\n            _ = tweetID ?? throw new ArgumentNullException(nameof(tweetID), $\"{nameof(tweetID)} is required.\");\n\n            string url = $\"{BaseUrl2}users/{userID}/bookmarks\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new BookmarkedTweetID { TweetID = tweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            BookmarkResponse? result = JsonSerializer.Deserialize<BookmarkResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Removes a bookmark on a tweet\n        /// </summary>\n        /// <param name=\"userID\">ID of user who is bookmarking tweet</param>\n        /// <param name=\"tweetID\">ID of the bookmarked tweet</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <returns>Hidden status of reply - false if reply is no longer hidden</returns>\n        public async Task<BookmarkResponse?> RemoveBookmarkAsync(string userID, string tweetID, CancellationToken cancelToken = default)\n        {\n            _ = userID ?? throw new ArgumentNullException(nameof(userID), $\"{nameof(userID)} is required.\");\n            _ = tweetID ?? throw new ArgumentNullException(nameof(tweetID), $\"{nameof(tweetID)} is required.\");\n\n            string url = $\"{BaseUrl2}users/{userID}/bookmarks/{tweetID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new BookmarkedTweetID { TweetID = tweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            BookmarkResponse? result = JsonSerializer.Deserialize<BookmarkResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/BannerSize.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class BannerSize\n    {\n        public string? Label { get; set; }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string? Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Culture.cs",
    "content": "﻿using System.Globalization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Culture\n    {\n        static CultureInfo? usCulture;\n\n        public static CultureInfo US\n        {\n            get\n            {\n                if (usCulture == null)\n                    usCulture = new CultureInfo(\"en-US\");\n\n                return usCulture;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Cursors.cs",
    "content": "﻿using System.Text.Json;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Response from Twitter for previous and next pages\n    /// </summary>\n    /// <remarks>\n    /// To use a cursor, start by setting the cursor to -1\n    /// and then use one of these response cursors to move\n    /// backwards or forwards in paged results.\n    /// </remarks>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Cursors\n    {\n        public Cursors() {}\n        internal Cursors(JsonElement cursors)\n        {\n            Next = cursors.GetLong(\"next_cursor\");\n            Previous = cursors.GetLong(\"previous_cursor\");\n        }\n\n        /// <summary>\n        /// Use this value to retrieve the next page\n        /// </summary>\n        [XmlIgnore]\n        public long Next { get; internal set; }\n\n        /// <summary>\n        /// Use this value to go back to the previous page\n        /// </summary>\n        [XmlIgnore]\n        public long Previous { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/AspectRatio.cs",
    "content": "﻿using System.Linq;\nusing System.Text.Json;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    public class AspectRatio\n    {\n        const int WidthIndex = 0;\n        const int HeightIndex = 1;\n\n        public AspectRatio() { }\n        public AspectRatio(JsonElement aspectRatio)\n        {\n            var aspectRatioArray = aspectRatio.EnumerateArray().ToArray();\n            Width = aspectRatioArray[WidthIndex].GetInt32();\n            Height = aspectRatioArray[HeightIndex].GetInt32();\n        }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/Entities.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    /// <summary>\n    /// Container for mention entities\n    /// </summary>\n    public class Entities\n    {\n        public Entities() { }\n        public Entities(JsonElement entityJson)\n        {\n\n            if (entityJson.IsNull())\n            {\n                HashTagEntities = new List<HashTagEntity>();\n                MediaEntities = new List<MediaEntity>();\n                UrlEntities = new List<UrlEntity>();\n                UserMentionEntities = new List<UserMentionEntity>();\n                SymbolEntities = new List<SymbolEntity>();\n\n                return;\n            }\n\n            entityJson.TryGetProperty(\"hashtags\", out JsonElement hashTagEntities);\n            entityJson.TryGetProperty(\"media\", out JsonElement mediaEntities);\n            entityJson.TryGetProperty(\"urls\", out JsonElement urlEntities);\n            entityJson.TryGetProperty(\"user_mentions\", out JsonElement userMentionEntities);\n            entityJson.TryGetProperty(\"symbols\", out JsonElement symbolEntities);\n\n            if (hashTagEntities.IsNull())\n            {\n                HashTagEntities = new List<HashTagEntity>();\n            }\n            else\n            {\n                var entityAccumulator = new List<HashTagEntity>();\n\n                foreach (var hash in hashTagEntities.EnumerateArray())\n                {\n                    hash.TryGetProperty(\"indices\", out JsonElement indicesValue);\n                    JsonElement[] indices = indicesValue.EnumerateArray().ToArray();\n\n                    entityAccumulator.Add(\n                        new HashTagEntity\n                        {\n                            Text = hash.GetString(\"text\"),\n                            Start = indices.Length > 0 ? indices[0].GetInt32() : 0,\n                            End = indices.Length > 1 ? indices[1].GetInt32() : 0\n                        });\n                }\n\n                HashTagEntities = entityAccumulator;\n            }\n\n            if (mediaEntities.IsNull())\n            {\n                MediaEntities = new List<MediaEntity>();\n            }\n            else\n            {\n                var entityAccumulator = new List<MediaEntity>();\n\n                foreach (var media in mediaEntities.EnumerateArray())\n                {\n                    media.TryGetProperty(\"video_info\", out JsonElement videoInfo);\n                    media.TryGetProperty(\"sizes\", out JsonElement sizes);\n                    media.TryGetProperty(\"indices\", out JsonElement indicesValue);\n                    JsonElement[] indices = indicesValue.EnumerateArray().ToArray();\n\n                    var sizesAccumulator = new List<PhotoSize>();\n\n                    foreach (var photoSize in sizes.EnumerateObject())\n                    {\n                        sizes.TryGetProperty(photoSize.Name, out JsonElement sizesKey);\n                        sizesAccumulator.Add(\n                            new PhotoSize\n                            {\n                                Type = photoSize.Name,\n                                Width = sizesKey.GetInt(\"w\"),\n                                Height = sizesKey.GetInt(\"h\"),\n                                Resize = sizesKey.GetString(\"resize\")\n                            });\n                    }\n\n                    entityAccumulator.Add(\n                        new MediaEntity\n                        {\n                            DisplayUrl = media.GetString(\"display_url\"),\n                            ExpandedUrl = media.GetString(\"expanded_url\"),\n                            ID = media.GetUlong(\"id\"),\n                            AltText = media.GetString(\"ext_alt_text\"),\n                            Indices = new List<int> { indices[0].GetInt32(), indices[1].GetInt32() },\n                            MediaUrl = media.GetString(\"media_url\"),\n                            MediaUrlHttps = media.GetString(\"media_url_https\"),\n                            Sizes = sizesAccumulator,\n                            Type = media.GetString(\"type\"),\n                            Url = media.GetString(\"url\"),\n                            Start = indices[0].GetInt32(),\n                            End = indices[1].GetInt32(),\n                            VideoInfo = new VideoInfo(videoInfo),\n                        });\n                }\n\n                MediaEntities = entityAccumulator;\n            }\n\n            if (urlEntities.IsNull())\n            {\n                UrlEntities = new List<UrlEntity>();\n            }\n            else\n            {\n                var entityAccumulator = new List<UrlEntity>();\n\n                foreach (var url in urlEntities.EnumerateArray())\n                {\n                    url.TryGetProperty(\"indices\", out JsonElement indicesValue);\n                    JsonElement[] indices = indicesValue.EnumerateArray().ToArray();\n\n                    entityAccumulator.Add(\n                        new UrlEntity\n                        {\n                            Url = url.GetString(\"url\"),\n                            DisplayUrl = url.GetString(\"display_url\"),\n                            ExpandedUrl = url.GetString(\"expanded_url\"),\n                            Start = indices[0].GetInt32(),\n                            End = indices[1].GetInt32()\n                        });\n                }\n\n                UrlEntities = entityAccumulator;\n            }\n\n            if (userMentionEntities.IsNull())\n            {\n                UserMentionEntities = new List<UserMentionEntity>();\n            }\n            else\n            {\n                var entityAccumulator = new List<UserMentionEntity>();\n\n                foreach (var user in userMentionEntities.EnumerateArray())\n                {\n                    user.TryGetProperty(\"indices\", out JsonElement indicesValue);\n                    JsonElement[] indices = indicesValue.EnumerateArray().ToArray();\n\n                    entityAccumulator.Add(\n                        new UserMentionEntity\n                        {\n                            ScreenName = user.GetString(\"screen_name\"),\n                            Name = user.GetString(\"name\"),\n                            Id = user.GetUlong(\"id\"),\n                            Start = indices[0].GetInt32(),\n                            End = indices[1].GetInt32()\n                        });\n                }\n\n                UserMentionEntities = entityAccumulator;\n            }\n\n            if (symbolEntities.IsNull())\n            {\n                SymbolEntities = new List<SymbolEntity>();\n            }\n            else\n            {\n                var entityAccumulator = new List<SymbolEntity>();\n\n                foreach (var symbol in symbolEntities.EnumerateArray())\n                {\n                    symbol.TryGetProperty(\"indices\", out JsonElement indicesValue);\n                    JsonElement[] indices = indicesValue.EnumerateArray().ToArray();\n\n                    entityAccumulator.Add(\n                        new SymbolEntity\n                        {\n                            Text = symbol.GetString(\"text\"),\n                            Start = indices[0].GetInt32(),\n                            End = indices[1].GetInt32()\n                        });\n                }\n\n                SymbolEntities = entityAccumulator;\n            }\n        }\n\n        /// <summary>\n        /// Mentions of the user in the tweet\n        /// </summary>\n        [JsonPropertyName(\"user_mentions\")]\n        public List<UserMentionEntity>? UserMentionEntities { get; set; }\n\n        /// <summary>\n        /// Url entities in the tweet\n        /// </summary>\n        [JsonPropertyName(\"urls\")]\n        public List<UrlEntity>? UrlEntities { get; set; }\n\n        /// <summary>\n        /// Hash tag entities in the tweet\n        /// </summary>\n        [JsonPropertyName(\"hashtags\")]\n        public List<HashTagEntity>? HashTagEntities { get; set; }\n\n        /// <summary>\n        /// Media entities in the tweet\n        /// </summary>\n        [JsonPropertyName(\"media\")]\n        public List<MediaEntity>? MediaEntities { get; set; }\n\n        /// <summary>\n        /// Symbol entities in the tweet\n        /// </summary>\n        [JsonPropertyName(\"symbols\")]\n        public List<SymbolEntity>? SymbolEntities { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/EntityBase.cs",
    "content": "namespace LinqToTwitter.Common.Entities\n{\n    /// <summary>\n    /// Base for all entities\n    /// </summary>\n    public abstract class EntityBase\n    {\n        /// <summary>\n        /// Start of the entity in the tweet\n        /// </summary>\n        public int Start { get; set; }\n\n        /// <summary>\n        /// End of the entity in the tweet\n        /// </summary>\n        public int End { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/HashTagEntity.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    /// <summary>\n    /// Hash tag entity\n    /// </summary>\n    /// <example>#linqtotwitter</example>\n    public class HashTagEntity : EntityBase\n    {\n        /// <summary>\n        /// Tag name without the # sign\n        /// </summary>\n        [JsonPropertyName(\"text\")]\n        public string? Text { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where hashtag occurs.\n        /// </summary>\n        [JsonPropertyName(\"indices\")]\n        public int[]? Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/MediaEntity.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    public class MediaEntity : UrlEntity\n    {\n        /// <summary>\n        /// ID of the media\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// URL where media is located\n        /// </summary>\n        public string? MediaUrl { get; set; }\n\n        /// <summary>\n        /// Populated with media alt text, if available.\n        /// </summary>\n        public string? AltText { get; set; }\n\n        /// <summary>\n        /// SSL version of media URL\n        /// </summary>\n        public string? MediaUrlHttps { get; set; }\n\n        /// <summary>\n        /// Supported media sizes\n        /// </summary>\n        public List<PhotoSize>? Sizes { get; set; }\n\n        /// <summary>\n        /// Type of media\n        /// </summary>\n        public string? Type { get; set; }\n\n        /// <summary>\n        /// Character positions of extracted media\n        /// </summary>\n        public new List<int>? Indices { get; set; }\n\n        public VideoInfo? VideoInfo { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/SymbolEntity.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    /// <summary>\n    /// Twitter symbol entity in the tweet\n    /// </summary>\n    /// <example>@linkedin</example>\n    public class SymbolEntity : EntityBase\n    {\n        /// <summary>\n        /// Symbol\n        /// </summary>\n        [JsonPropertyName(\"text\")]\n        public string? Text { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where symbol occurs.\n        /// </summary>\n        [JsonPropertyName(\"indices\")]\n        public int[]? Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/UrlEntity.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    /// <summary>\n    /// Url mention in the tweet\n    /// </summary>\n    /// <example>http://bit.ly/129Ad</example>\n    public class UrlEntity : EntityBase\n    {\n        /// <summary>\n        /// Absolute Url in the tweet\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; set; }\n\n        /// <summary>\n        /// t.co shortened URL\n        /// </summary>\n        [JsonPropertyName(\"display_url\")]\n        public string? DisplayUrl { get; set; }\n\n        /// <summary>\n        /// t.co expanded URL\n        /// </summary>\n        [JsonPropertyName(\"expanded_url\")]\n        public string? ExpandedUrl { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where URL occurs.\n        /// </summary>\n        [JsonPropertyName(\"indices\")]\n        public int[]? Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/UserMentionEntity.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    /// <summary>\n    /// Twitter user mention entity in the tweet\n    /// </summary>\n    /// <example>@JoeMayo</example>\n    public class UserMentionEntity : EntityBase\n    {\n        /// <summary>\n        /// Twitter user Id\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public ulong Id { get; set; }\n\n        /// <summary>\n        /// Screen name of the Twitter User\n        /// </summary>\n        [JsonPropertyName(\"screen_name\")]\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Name of the Twitter User\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// String version of the ID\n        /// </summary>\n        [JsonPropertyName(\"id_str\")]\n        public string? IdStr { get; set; }\n\n        /// <summary>\n        /// Locations for begin/end index of where user mention occurs.\n        /// </summary>\n        [JsonPropertyName(\"indices\")]\n        public int[]? Indices { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/Variant.cs",
    "content": "﻿using System.Text.Json;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    public class Variant\n    {\n        public Variant() { }\n        public Variant(JsonElement variant)\n        {\n            BitRate = variant.GetInt(\"bitrate\");\n            ContentType = variant.GetString(\"content_type\");\n            Url = variant.GetString(\"url\");\n        }\n\n        public int BitRate { get; set; }\n\n        public string? ContentType { get; set; }\n\n        public string? Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/Entities/VideoInfo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\n\nnamespace LinqToTwitter.Common.Entities\n{\n    public class VideoInfo\n    {\n        public VideoInfo() { }\n        public VideoInfo(JsonElement videoInfo)\n        {\n            if (videoInfo.IsNull())\n                return;\n\n            videoInfo.TryGetProperty(\"aspect_ratio\", out JsonElement aspectRatio);\n            AspectRatio = new AspectRatio(aspectRatio);\n            Duration = videoInfo.GetInt(\"duration_millis\");\n\n            if (videoInfo.TryGetProperty(\"variants\", out JsonElement variants))\n                Variants =\n                    (from variant in variants.EnumerateArray()\n                     select new Variant(variant))\n                    .ToList();\n        }\n\n        /// <summary>\n        /// Width and Height\n        /// </summary>\n        public AspectRatio? AspectRatio { get; set; }\n\n        /// <summary>\n        /// Duration in milliseconds\n        /// </summary>\n        public int Duration { get; set; }\n\n        /// <summary>\n        /// Available encodings/data streams\n        /// </summary>\n        public List<Variant>? Variants { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/ExpansionField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"Tweet\"/> and <see cref=\"TwitterUser\"/> objects\n    /// </summary>\n    public class ExpansionField\n    {\n        /// <summary>\n        /// All expandable fields on <see cref=\"Tweet\"/>\n        /// </summary>\n        public const string AllTweetFields = \n            \"attachments.poll_ids,attachments.media_keys,author_id,\" +\n            \"entities.mentions.username,geo.place_id,in_reply_to_user_id,\" +\n            \"referenced_tweets.id,referenced_tweets.id.author_id\";\n\n        /// <summary>\n        /// All expandable fields on <see cref=\"TwitterUser\"/>\n        /// </summary>\n        public const string AllUserFields = \"pinned_tweet_id\";\n\n        /// <summary>\n        /// All expandable fields on <see cref=\"Space\"/>\n        /// </summary>\n        public const string AllSpaceFields = \"creator_id,host_ids,invited_user_ids,speaker_ids\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - author_id\n        /// </summary>\n        public const string AuthorID = \"author_id\";\n\n        /// <summary>\n        /// ID of person who created a <see cref=\"Space\"/>\n        /// </summary>\n        public const string CreatorID = \"creator_id\";\n\n        /// <summary>\n        /// ID of people hosting a <see cref=\"Space\"/>\n        /// </summary>\n        public const string HostIds = \"host_ids\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - in_reply_to_user_id\n        /// </summary>\n        public const string InReplyToUserID = \"in_reply_to_user_id\";\n\n        /// <summary>\n        /// IDs of users who were invited to a <see cref=\"Space\"/>\n        /// </summary>\n        public const string InvitedUserIds = \"invited_user_ids\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - attachments.media_keys\n        /// </summary>\n        public const string MediaKeys = \"attachments.media_keys\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - entities.mentions.username\n        /// </summary>\n        public const string MentionsUsername = \"entities.mentions.username\";\n\n        /// <summary>\n        /// <see cref=\"List\"/> owner ID\n        /// </summary>\n        public const string OwnerID = \"owner_id\";\n\n        /// <summary>\n        /// <see cref=\"TwitterUser\"/> - pinned_tweet_id\n        /// </summary>\n        public const string PinnedTweetID = \"pinned_tweet_id\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - geo.place_id\n        /// </summary>\n        public const string PlaceID = \"geo.place_id\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - attachments.poll_ids\n        /// </summary>\n        public const string PollIds = \"attachments.poll_ids\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - referenced_tweets.id\n        /// </summary>\n        public const string ReferencedTweetID = \"referenced_tweets.id\";\n\n        /// <summary>\n        /// <see cref=\"Tweet\"/> - referenced_tweets.id.author_id\n        /// </summary>\n        public const string ReferencedTweetAuthorID = \"referenced_tweets.id.author_id\";\n\n        /// <summary>\n        /// IDs of people who are speakers at a <see cref=\"Space\"/>\n        /// </summary>\n        public const string SpeakerIds = \"speaker_ids\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/ListField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    public class ListField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \"created_at,description,follower_count,member_count,owner_id,private\";\n\n        /// <summary>\n        /// created_at\n        /// </summary>\n        public const string CreatedAt = \"created_at\";\n\n        /// <summary>\n        /// description\n        /// </summary>\n        public const string Description = \"description\";\n\n        /// <summary>\n        /// follower_count\n        /// </summary>\n        public const string FollowerCount = \"follower_count\";\n\n        /// <summary>\n        /// member_count\n        /// </summary>\n        public const string MemberCount = \"member_count\";\n\n        /// <summary>\n        /// owner_id\n        /// </summary>\n        public const string OwnerID = \"owner_id\";\n\n        /// <summary>\n        /// private\n        /// </summary>\n        public const string Private = \"private\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/ListFields.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Common.FieldEnums\n{\n    public class ListFields\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \"created_at,description,follower_count,member_count,owner_id,private\";\n\n        /// <summary>\n        /// created_at\n        /// </summary>\n        public const string CreatedAt = \"created_at\";\n\n        /// <summary>\n        /// description\n        /// </summary>\n        public const string Description = \"description\";\n\n        /// <summary>\n        /// follower_count\n        /// </summary>\n        public const string FollowerCount = \"follower_count\";\n\n        /// <summary>\n        /// member_count\n        /// </summary>\n        public const string MemberCount = \"member_count\";\n\n        /// <summary>\n        /// owner_id\n        /// </summary>\n        public const string OwnerID = \"owner_id\";\n\n        /// <summary>\n        /// private\n        /// </summary>\n        public const string Private = \"private\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/MediaField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"Media\"/>\n    /// </summary>\n    public class MediaField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \n            \"alt_text,duration_ms,height,media_key,preview_image_url,\" +\n            \"type,url,width,public_metrics,non_public_metrics,\" +\n            \"organic_metrics,promoted_metrics\";\n\n        /// <summary>\n        /// All expandable fields, except those requiring permissions\n        /// </summary>\n        public const string AllFieldsExceptPermissioned =\n            \"alt_text,duration_ms,height,media_key,preview_image_url,\" +\n            \"type,url,width,public_metrics\";\n\n        /// <summary>\n        /// alt_text\n        /// </summary>\n        public const string AltText = \"alt_text\";\n\n        /// <summary>\n        /// duration_ms\n        /// </summary>\n        public const string Duration = \"duration_ms\";\n\n\n        /// <summary>\n        /// height\n        /// </summary>\n        public const string Height = \"height\";\n\n\n        /// <summary>\n        /// media_key\n        /// </summary>\n        public const string MediaKey = \"media_key\";\n\n\n        /// <summary>\n        /// preview_image_url\n        /// </summary>\n        public const string PreviewImageUrl = \"preview_image_url\";\n\n\n        /// <summary>\n        /// type\n        /// </summary>\n        public const string Type = \"type\";\n\n\n        /// <summary>\n        /// url\n        /// </summary>\n        public const string Url = \"url\";\n\n\n        /// <summary>\n        /// width\n        /// </summary>\n        public const string Width = \"width\";\n\n\n        /// <summary>\n        /// public_metrics\n        /// </summary>\n        public const string PublicMetrics = \"public_metrics\";\n\n\n        /// <summary>\n        /// non_public_metrics\n        /// </summary>\n        public const string NonPublicMetrics = \"non_public_metrics\";\n\n\n        /// <summary>\n        /// organic_metrics\n        /// </summary>\n        public const string OrganicMetrics = \"organic_metrics\";\n\n\n        /// <summary>\n        /// promoted_metrics\n        /// </summary>\n        public const string PromotedMetrics = \"promoted_metrics\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/PlaceField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"TwitterPlace\"/>\n    /// </summary>\n    public class PlaceField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \n            \"contained_within,country,country_code,\" +\n            \"full_name,geo,id,name,place_type\";\n\n        /// <summary>\n        /// contained_within\n        /// </summary>\n        public const string ContainedWithin = \"contained_within\";\n\n        /// <summary>\n        /// country\n        /// </summary>\n        public const string Country = \"country\";\n\n        /// <summary>\n        /// country_code\n        /// </summary>\n        public const string CountryCode = \"country_code\";\n\n        /// <summary>\n        /// full_name\n        /// </summary>\n        public const string FullName = \"full_name\";\n\n        /// <summary>\n        /// geo\n        /// </summary>\n        public const string Geo = \"geo\";\n\n        /// <summary>\n        /// id\n        /// </summary>\n        public const string ID = \"id\";\n\n        /// <summary>\n        /// name\n        /// </summary>\n        public const string Name = \"name\";\n\n        /// <summary>\n        /// place_type\n        /// </summary>\n        public const string PlaceType = \"place_type\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/PollField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"TweetPoll\"/>\n    /// </summary>\n    public class PollField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \n            \"duration_minutes, end_datetime, id, options, voting_status\";\n\n        /// <summary>\n        /// duration_minutes\n        /// </summary>\n        public const string Duration = \"duration_minutes\";\n\n        /// <summary>\n        /// end_datetime\n        /// </summary>\n        public const string EndDateTime = \"end_datetime\";\n\n        /// <summary>\n        /// id\n        /// </summary>\n        public const string ID = \"id\";\n\n        /// <summary>\n        /// options\n        /// </summary>\n        public const string Options = \"options\";\n\n        /// <summary>\n        /// voting_status\n        /// </summary>\n        public const string VotingStatus = \"voting_status\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/SpaceField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"Space\"/>\n    /// </summary>\n    public class SpaceField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields =\n            \"created_at,creator_id,ended_at,host_ids,id,is_ticketed,lang,\" +\n            \"invited_user_ids,participant_count,scheduled_start,speaker_ids,\" +\n            \"started_at,state,subscriber_count,topic_ids,title,updated_at\";\n\n        /// <summary>\n        /// created_at\n        /// </summary>\n        public const string CreatedAt = \"created_at\";\n\n        /// <summary>\n        /// creator_id\n        /// </summary>\n        public const string CreatorID = \"creator_id\";\n\n        /// <summary>\n        /// ended_at\n        /// </summary>\n        public const string EndedAt = \"ended_at\";\n\n        /// <summary>\n        /// host_ids\n        /// </summary>\n        public const string HostIds = \"host_ids\";\n\n        /// <summary>\n        /// id\n        /// </summary>\n        public const string ID = \"id\";\n\n        /// <summary>\n        /// invited_user_ids\n        /// </summary>\n        public const string InvitedUserIds = \"invited_user_ids\";\n\n        /// <summary>\n        /// is_ticketed\n        /// </summary>\n        public const string IsTicketed = \"is_ticketed\";\n\n        /// <summary>\n        /// lang\n        /// </summary>\n        public const string Lang = \"lang\";\n\n        /// <summary>\n        /// participant_count\n        /// </summary>\n        public const string ParticipantCount = \"participant_count\";\n\n        /// <summary>\n        /// scheduled_start\n        /// </summary>\n        public const string ScheduledStart = \"scheduled_start\";\n\n        /// <summary>\n        /// speaker_ids\n        /// </summary>\n        public const string SpeakerIds = \"speaker_ids\";\n\n        /// <summary>\n        /// started_at\n        /// </summary>\n        public const string StartedAt = \"started_at\";\n\n        /// <summary>\n        /// state\n        /// </summary>\n        public const string State = \"state\";\n\n        /// <summary>\n        /// subscriber_count\n        /// </summary>\n        public const string SubscriberCount = \"subscriber_count\";\n\n        /// <summary>\n        /// title\n        /// </summary>\n        public const string Title = \"title\";\n\n        /// <summary>\n        /// topic_ids\n        /// </summary>\n        public const string TopicIds = \"topic_ids\";\n\n        /// <summary>\n        /// updated_at\n        /// </summary>\n        public const string UpdatedAt = \"updated_at\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/TopicField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"SpacesQuery\"/>\n    /// </summary>\n    public class TopicField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \"description,id,name\";\n\n        /// <summary>\n        /// description\n        /// </summary>\n        public const string Description = \"description\";\n\n        /// <summary>\n        /// id\n        /// </summary>\n        public const string ID = \"id\";\n\n        /// <summary>\n        /// name\n        /// </summary>\n        public const string Name = \"name\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/TweetField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"Tweet\"/>\n    /// </summary>\n    public class TweetField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \n            \"attachments,author_id,context_annotations,conversation_id,\" +\n            \"created_at,entities,geo,id,in_reply_to_user_id,lang,non_public_metrics,\" +\n            \"public_metrics,organic_metrics,promoted_metrics,possibly_sensitive,\" +\n            \"referenced_tweets,source,text,withheld,reply_settings\";\n\n        /// <summary>\n        /// All expandable fields, except those requiring permissions\n        /// </summary>\n        public const string AllFieldsExceptPermissioned =\n            \"attachments,author_id,context_annotations,conversation_id,\" +\n            \"created_at,entities,geo,id,in_reply_to_user_id,lang,public_metrics,\" +\n            \"possibly_sensitive,referenced_tweets,source,text,withheld,reply_settings\";\n\n        /// <summary>\n        /// attachments\n        /// </summary>\n        public const string Attachments = \"attachments\";\n\n        /// <summary>\n        /// author_id\n        /// </summary>\n        public const string AuthorID = \"author_id\";\n\n        /// <summary>\n        /// context_annotations\n        /// </summary>\n        public const string ContextAnnotations = \"context_annotations\";\n\n        /// <summary>\n        /// conversation_id\n        /// </summary>\n        public const string ConversationID = \"conversation_id\";\n\n        /// <summary>\n        /// created_at\n        /// </summary>\n        public const string CreatedAt = \"created_at\";\n\n        /// <summary>\n        /// entities\n        /// </summary>\n        public const string Entities = \"entities\";\n\n        /// <summary>\n        /// geo\n        /// </summary>\n        public const string Geo = \"geo\";\n\n        /// <summary>\n        /// id\n        /// </summary>\n        public const string ID = \"id\";\n\n        /// <summary>\n        /// in_reply_to_user_id\n        /// </summary>\n        public const string InReplyToUserID = \"in_reply_to_user_id\";\n\n        /// <summary>\n        /// lang\n        /// </summary>\n        public const string Language = \"lang\";\n\n        /// <summary>\n        /// non_public_metrics\n        /// </summary>\n        public const string NonPublicMetrics = \"non_public_metrics\";\n\n        /// <summary>\n        /// public_metrics\n        /// </summary>\n        public const string PublicMetrics = \"public_metrics\";\n\n        /// <summary>\n        /// organic_metrics\n        /// </summary>\n        public const string OrganicMetrics = \"organic_metrics\";\n\n        /// <summary>\n        /// promoted_metrics\n        /// </summary>\n        public const string PromotedMetrics = \"promoted_metrics\";\n\n        /// <summary>\n        /// possibly_sensitive\n        /// </summary>\n        public const string PossiblySensitive = \"possibly_sensitive\";\n\n        /// <summary>\n        /// referenced_tweets\n        /// </summary>\n        public const string ReferencedTweets = \"referenced_tweets\";\n\n        /// <summary>\n        /// who can reply to a tweet\n        /// </summary>\n        public const string ReplySettings = \"reply_settings\";\n\n        /// <summary>\n        /// source\n        /// </summary>\n        public const string Source = \"source\";\n\n        /// <summary>\n        /// text\n        /// </summary>\n        public const string Text = \"text\";\n\n        /// <summary>\n        /// withheld\n        /// </summary>\n        public const string Withheld = \"withheld\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/FieldEnums/UserField.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Fields that can be expanded on <see cref=\"TwitterUser\"/>\n    /// </summary>\n    public class UserField\n    {\n        /// <summary>\n        /// All expandable fields\n        /// </summary>\n        public const string AllFields = \n            \"created_at,description,entities,id,location,\" +\n            \"name,pinned_tweet_id,profile_image_url,protected,\" +\n            \"public_metrics,url,username,verified,withheld\";\n\n        /// <summary>\n        /// created_at\n        /// </summary>\n        public const string CreatedAt = \"created_at\";\n\n        /// <summary>\n        /// description\n        /// </summary>\n        public const string Description = \"description\";\n\n        /// <summary>\n        /// entities\n        /// </summary>\n        public const string Entities = \"entities\";\n\n        /// <summary>\n        /// id\n        /// </summary>\n        public const string ID = \"id\";\n\n        /// <summary>\n        /// location\n        /// </summary>\n        public const string Location = \"location\";\n\n        /// <summary>\n        /// name\n        /// </summary>\n        public const string Name = \"name\";\n\n        /// <summary>\n        /// pinned_tweet_id\n        /// </summary>\n        public const string PinnedTweetID = \"pinned_tweet_id\";\n\n        /// <summary>\n        /// profile_image_url\n        /// </summary>\n        public const string ProfileImageUrl = \"profile_image_url\";\n\n        /// <summary>\n        /// protected\n        /// </summary>\n        public const string Protected = \"protected\";\n\n        /// <summary>\n        /// public_metrics\n        /// </summary>\n        public const string PublicMetrics = \"public_metrics\";\n\n        /// <summary>\n        /// url\n        /// </summary>\n        public const string Url = \"url\";\n\n        /// <summary>\n        /// username\n        /// </summary>\n        public const string UserName = \"username\";\n\n        /// <summary>\n        /// verified\n        /// </summary>\n        public const string Verified = \"verified\";\n\n        /// <summary>\n        /// withheld\n        /// </summary>\n        public const string Withheld = \"withheld\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/IDList.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// For working with lists of IDs\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class IDList\n    {\n        public IDList() { }\n        public IDList(JsonElement idJson)\n        {\n            if (idJson.TryGetProperty(\"ids\", out JsonElement ids))\n            {\n                CursorMovement = new Cursors(idJson);\n                IDs =\n                    (from id in ids.EnumerateArray()\n                     select id.GetUInt64())\n                    .ToList();\n            }\n        }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors? CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of IDs returned\n        /// </summary>\n        public List<ulong>? IDs { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/InvalidQueryException.cs",
    "content": "﻿/*****************************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Modified By: Joe Mayo, 5/2/09 -\n *****************************************************************/\nusing System;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// custom exception for handling bad queries\n    /// </summary>\n    public class InvalidQueryException : Exception\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public InvalidQueryException()\n            : this(\"Invalid query: reason not specified.\") { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public InvalidQueryException(string message)\n            : base (message, null) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public InvalidQueryException(string message, Exception inner)\n            : base(message, inner) { }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/L2TKeys.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// This is for constants that are used accross different classes and projects.\n    /// </summary>\n    public class L2TKeys\n    {\n        //\n        // HTTP Headers\n        //\n\n        public const string DefaultUserAgent = \"LINQ-To-Twitter/6.0\";\n\n        //\n        // Error handling\n        //\n\n        public const string FaqHelpUrl = \"https://github.com/JoeMayo/LinqToTwitter/wiki/LINQ-to-Twitter-FAQ\";\n\n        //\n        // Format Specifiers\n        //\n        public const string ISO8601 = \"yyyy-MM-ddTHH\\\\:mm\\\\:ssZ\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/PhotoSize.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class PhotoSize\n    {\n        /// <summary>\n        /// Type of photo (i.e. Large, Small, etc.)\n        /// </summary>\n        public string? Type { get; set; }\n\n        /// <summary>\n        /// Photo Width\n        /// </summary>\n        public int Width { get; set; }\n\n        /// <summary>\n        /// Photo Height\n        /// </summary>\n        public int Height { get; set; }\n\n        /// <summary>\n        /// Resize Behavior (i.e. crop, fit, ...)\n        /// </summary>\n        public string? Resize { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TweetMode.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    public enum TweetMode\n    {\n        /// <summary>\n        /// Traditional compatibility mode (default)\n        /// </summary>\n        Compat,\n\n        /// <summary>\n        /// New extended mode allows more characters in tweets with Mentions and URL suffix not counted.\n        /// </summary>\n        Extended\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterError.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Errors returned from a Twitter Queries.\n    /// </summary>\n    /// <remarks>\n    /// Meaning of each property depends on type of query. Some will be null.\n    /// </remarks>\n    public record TwitterError\n    {\n        [JsonPropertyName(\"resource_type\")]\n        public string? ResourceType { get; init; }\n\n        [JsonPropertyName(\"field\")]\n        public string? Field { get; init; }\n\n        [JsonPropertyName(\"title\")]\n        public string? Title { get; init; }\n\n        [JsonPropertyName(\"section\")]\n        public string? Section { get; init; }\n\n        [JsonPropertyName(\"detail\")]\n        public string? Detail { get; init; }\n\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; init; }\n\n        [JsonPropertyName(\"parameter\")]\n        public string? Parameter { get; init; }\n\n        [JsonPropertyName(\"value\")]\n        public string? Value { get; init; }\n    }\n}\n\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterErrorStatus.cs",
    "content": "﻿\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Type of result from processing an \n    /// asynchronous request to Twitter\n    /// </summary>\n    public enum TwitterErrorStatus\n    {\n        /// <summary>\n        /// No error\n        /// </summary>\n        Success,\n\n        /// <summary>\n        /// Error received from Twitter\n        /// </summary>\n        TwitterApiError,\n\n        /// <summary>\n        /// Error detected by LINQ to Twitter\n        /// while processing request\n        /// </summary>\n        RequestProcessingException,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterGeo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    public record TwitterGeo\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; init; }\n\n        [JsonPropertyName(\"bbox\")]\n        public List<float>? BBox { get; init; }\n\n        [JsonPropertyName(\"properties\")]\n        public TwitterProperties? Properties { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterHashResponse.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Response for HTTP errors and end response\n    /// </summary>\n    public class TwitterHashResponse\n    {\n        /// <summary>\n        /// URL action from request\n        /// </summary>\n        public string? Request { get; set; }\n\n        /// <summary>\n        /// Response message\n        /// </summary>\n        public string? Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterInclude.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    public record TwitterInclude\n    {\n        [JsonPropertyName(\"users\")]\n        public List<TwitterUser>? Users { get; init; }\n\n        [JsonPropertyName(\"tweets\")]\n        public List<Tweet>? Tweets { get; init; }\n\n        [JsonPropertyName(\"places\")]\n        public List<TwitterPlace>? Places { get; init; }\n\n        [JsonPropertyName(\"polls\")]\n        public List<TwitterPoll>? Polls { get; init; }\n\n        [JsonPropertyName(\"media\")]\n        public List<TwitterMedia>? Media { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterMedia.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Represents a Media object, such as gif, photo, or video\n    /// </summary>\n    public record TwitterMedia\n    {\n        /// <summary>\n        /// Alt text to display with an image\n        /// </summary>\n        [JsonPropertyName(\"alt_text\")]\n        public string? AltText { get; set; }\n\n        /// <summary>\n        /// Milliseconds duration for videos\n        /// </summary>\n        [JsonPropertyName(\"duration_ms\")]\n        public int DurationMS { get; init; }\n\n        /// <summary>\n        /// Height in pixels\n        [JsonPropertyName(\"height\")]\n        /// </summary>\n        public int Height { get; init; }\n\n        /// <summary>\n        /// Media ID - Matches MediaKey in TweetAttachments\n        /// </summary>\n        [JsonPropertyName(\"media_key\")]\n        public string? MediaKey { get; init; }\n\n        // TODO\n        [JsonPropertyName(\"non_public_metrics\")]\n        public object? NonPublicMetrics { get; init; }\n\n        // TODO\n        [JsonPropertyName(\"organic_metrics\")]\n        public object? OrganicMetrics { get; init; }\n\n        /// <summary>\n        /// URL to animated GIF and video preview image\n        /// </summary>\n        [JsonPropertyName(\"preview_image_url\")]\n        public string? PreviewImageUrl { get; init; }\n\n        // TODO\n        [JsonPropertyName(\"promoted_metrics\")]\n        public object? PromotedMetrics { get; init; }\n\n        // TODO\n        [JsonPropertyName(\"public_metrics\")]\n        public object? PublicMetrics { get; init; }\n\n        /// <summary>\n        /// Type of media - e.g. gif, photo, or video\n        /// </summary>\n        [JsonConverter(typeof(TweetMediaTypeConverter))]\n        [JsonPropertyName(\"type\")]\n        public TweetMediaType Type { get; init; }\n\n        /// <summary>\n        /// URL to photo preview image\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; init; }\n\n        /// <summary>\n        /// Width in pixels\n        /// </summary>\n        [JsonPropertyName(\"width\")]\n        public int Width { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterPlace.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Describes a place, like a city or point of interest\n    /// </summary>\n    public record TwitterPlace\n    {\n        /// <summary>\n        /// IDs of places containing this place\n        /// </summary>\n        [JsonPropertyName(\"contained_within\")]\n        public List<string>? ContainedWithin { get; init; }\n\n        /// <summary>\n        /// Full-length country name\n        /// </summary>\n        [JsonPropertyName(\"country\")]\n        public string? Country { get; init; }\n\n        /// <summary>\n        /// ISO Alpha-2 country code\n        /// </summary>\n        [JsonPropertyName(\"country_code\")]\n        public string? CountryCode { get; init; }\n\n        /// <summary>\n        /// Full name of place\n        /// </summary>\n        [JsonPropertyName(\"full_name\")]\n        public string? FullName { get; init; }\n\n        /// <summary>\n        /// Place details\n        /// </summary>\n        [JsonPropertyName(\"geo\")]\n        public Geo? Geo { get; init; }\n\n        /// <summary>\n        /// Unique ID for this place\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// Short name of place\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; init; }\n\n        /// <summary>\n        /// Type of place - e.g. city or point of interest\n        /// </summary>\n        [JsonPropertyName(\"place_type\")]\n        public string? PlaceType { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterPoll.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    public record TwitterPoll\n    {\n        /// <summary>\n        /// Number of minutes to run poll\n        /// </summary>\n        [JsonPropertyName(\"duration_minutes\")]\n        public int DurationMinutes { get; init; }\n\n        /// <summary>\n        /// When the poll ends\n        /// </summary>\n        [JsonPropertyName(\"end_datetime\")]\n        public DateTime EndDateTime { get; init; }\n\n        /// <summary>\n        /// Poll ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Poll options\n        /// </summary>\n        [JsonPropertyName(\"options\")]\n        public List<TwitterPollOption>? Options { get; init; }\n\n        /// <summary>\n        /// Whether the poll is open or closed\n        /// </summary>\n        [JsonPropertyName(\"voting_status\")]\n        public string? VotingStatus { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterPollOption.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Common\n{\n    public record TwitterPollOption\n    {\n        [JsonPropertyName(\"position\")]\n        public int Position { get; set; }\n\n        [JsonPropertyName(\"label\")]\n        public string? Label { get; set; }\n\n        [JsonPropertyName(\"votes\")]\n        public int Votes { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterProgressEventArgs.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Lets caller know the percentage of completion of operation\n    /// </summary>\n    public class TwitterProgressEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Percentage of completion\n        /// </summary>\n        public int PercentComplete { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterProperties.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    public record TwitterProperties\n    {\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterQueryException.cs",
    "content": "﻿using LinqToTwitter.Net;\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\n\nnamespace LinqToTwitter.Common\n{\n    /// <summary>\n    /// Use for errors returned from HTTP GET and POST to Twitter\n    /// </summary>\n    /// <remarks>\n    /// The properties commented as \"assigned by Twitter\" are error details from the Twitter API itself.\n    /// </remarks>\n    public class TwitterQueryException : InvalidQueryException\n    {\n        /// <summary>\n        /// init exception with general message - \n        /// you should probably use one of the other\n        /// constructors for a more meaninful exception.\n        /// </summary>\n        public TwitterQueryException()\n            : this(\"Twitter returned an error from your query.\") { }\n\n        /// <summary>\n        /// init exception with custom message\n        /// </summary>\n        /// <param name=\"message\">message to display</param>\n        public TwitterQueryException(string message)\n            : base (message) { }\n\n        /// <summary>\n        /// init exception with custom message and chain to originating exception\n        /// </summary>\n        /// <param name=\"message\">custom message</param>\n        /// <param name=\"inner\">originating exception</param>\n        public TwitterQueryException(string message, Exception inner)\n            : base(message, inner) { }\n\n        /// <summary>\n        /// Error title - assigned by Twitter\n        /// </summary>\n        public string? Title { get; set; }\n\n        /// <summary>\n        /// Error details - assigned by Twitter\n        /// </summary>\n        public string? Details { get; set; }\n\n        /// <summary>\n        /// Type of error - assigned by Twitter\n        /// </summary>\n        public string? Type { get; set; }\n\n        /// <summary>\n        /// Specific errors - assigned by Twitter\n        /// </summary>\n        public List<Error>? Errors { get; set; }\n\n        /// <summary>\n        /// Http status code from Twitter response\n        /// </summary>\n        public HttpStatusCode StatusCode { get; set; }\n\n        /// <summary>\n        /// Http status reason from Twitter response\n        /// </summary>\n        public string? ReasonPhrase { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TwitterWithheld.cs",
    "content": "﻿namespace LinqToTwitter.Common\n{\n    public record TwitterWithheld\n    {\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Common/TypeConversionExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter.Common\n{\n    public static class TypeConversionExtensions\n    {\n        public static bool IsNull(this JsonElement json)\n        {\n            return json.ValueKind == JsonValueKind.Undefined || json.ValueKind == JsonValueKind.Null;\n        }\n\n        public static string? GetString(this JsonElement json, string propertyName, string? defaultValue = default)\n        {\n            if (!json.IsNull() && \n                json.TryGetProperty(propertyName, out JsonElement element))\n                return element.GetString() ?? defaultValue;\n\n            return defaultValue;\n        }\n\n        public static int GetInt(this JsonElement json, string propertyName, int defaultValue = default)\n        {\n            if (!json.IsNull() && \n                json.TryGetProperty(propertyName, out JsonElement element) &&\n                !element.IsNull() &&\n                element.TryGetInt32(out int value))\n                return value;\n\n            return defaultValue;\n        }\n\n        public static ulong GetULong(this string val, ulong defaultValue = default)\n        {\n            return string.IsNullOrWhiteSpace(val) ||\n                !ulong.TryParse(val, out ulong result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static ulong GetUlong(this JsonElement json, string propertyName, ulong defaultValue = default)\n        {\n            if (!json.IsNull() && \n                json.TryGetProperty(propertyName, out JsonElement element) &&\n                !element.IsNull() &&\n                element.TryGetUInt64(out ulong value))\n                return value;\n\n            return defaultValue;\n        }\n\n        public static long GetLong(this JsonElement json, string propertyName, long defaultValue = default)\n        {\n            if (!json.IsNull() &&\n                json.TryGetProperty(propertyName, out JsonElement element) &&\n                !element.IsNull() &&\n                element.TryGetInt64(out long value))\n                return value;\n\n            return defaultValue;\n        }\n\n        public static bool GetBool(this JsonElement json, string propertyName, bool defaultValue = default)\n        {\n            if (!json.IsNull() && \n                json.TryGetProperty(propertyName, out JsonElement element) &&\n                !element.IsNull())\n                return element.GetBoolean();\n\n            return defaultValue;\n        }\n\n        public static double GetDouble(this string val, double defaultValue = default)\n        {\n            return string.IsNullOrWhiteSpace(val) ||\n                !double.TryParse(val, out double result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static double GetDouble(this JsonElement json, string propertyName, double defaultValue = default)\n        {\n            if (!json.IsNull() && \n                json.TryGetProperty(propertyName, out JsonElement element) &&\n                !element.IsNull() &&\n                element.TryGetDouble(out double value))\n                return value;\n\n            return defaultValue;\n        }\n\n        public static decimal GetDecimal(this JsonElement json, string propertyName, decimal defaultValue = default)\n        {\n            if (!json.IsNull() &&\n                json.TryGetProperty(propertyName, out JsonElement element) &&\n                !element.IsNull() &&\n                element.TryGetDecimal(out decimal value))\n                return value;\n\n            return defaultValue;\n        }\n\n        static readonly string[] dateFormats =\n        {\n            \"ddd MMM dd HH:mm:ss %zzzz yyyy\",\n            \"yyyy-MM-dd\\\\THH:mm:ss.000\\\\Z\",\n            \"yyyy-MM-dd\\\\THH:mm:ss\\\\Z\",\n            \"yyyy-MM-dd HH:mm:ss\",\n            \"yyyy-MM-dd HH:mm\"\n        };\n\n        public static DateTime GetDate(this string date, DateTime defaultValue)\n        {\n            return string.IsNullOrWhiteSpace(date) ||\n                !DateTime.TryParseExact(date,\n                        dateFormats,\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out DateTime result)\n                    ? defaultValue\n                    : result;\n        }\n\n        public static DateTime GetDate(this JsonElement json, string propertyName, DateTime defaultValue = default)\n        {\n            string? date = json.GetString(propertyName);\n            return date?.GetDate(defaultValue) ?? defaultValue;\n        }\n\n        public static readonly DateTime EpochBase = new DateTime(1970, 1, 1, 0, 0, 0, 0);\n\n        public static DateTime GetEpochDate(this string ticks, DateTime defaultValue)\n        {\n            var epochSeconds = ticks.GetULong(ulong.MaxValue);\n\n            if (epochSeconds == ulong.MaxValue)\n                return defaultValue;\n\n            return EpochBase + TimeSpan.FromSeconds(epochSeconds);\n        }\n\n        public static DateTime GetEpochDateFromTimestamp(this string timestamp)\n        {\n            ulong.TryParse(timestamp, out ulong epochMilliseconds);\n            return EpochBase + +TimeSpan.FromMilliseconds(epochMilliseconds);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceJob.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Compliance Job details\n    /// </summary>\n    public record ComplianceJob\n    {\n        /// <summary>\n        /// Unique ID for job\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Date/time when job was created\n        /// </summary>\n        [JsonPropertyName(\"created_at\")]\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// Name of the job\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// URL where to download job results\n        /// </summary>\n        [JsonPropertyName(\"download_url\")]\n        public string? DownloadUrl { get; set; }\n\n        /// <summary>\n        /// Date/time when results are no longer available\n        /// </summary>\n        [JsonPropertyName(\"download_expires_at\")]\n        public DateTime DownloadExpiresAt { get; set; }\n\n        /// <summary>\n        /// Job status\n        /// </summary>\n        [JsonPropertyName(\"status\")]\n        public string? Status { get; set; }\n\n        /// <summary>\n        /// URL where to upload tweet IDs\n        /// </summary>\n        [JsonPropertyName(\"upload_url\")]\n        public string? UploadUrl { get; set; }\n\n        /// <summary>\n        /// When the job will be reading\n        /// </summary>\n        [JsonPropertyName(\"upload_expires_at\")]\n        public DateTime UploadExpiresAt { get; set; }\n\n        /// <summary>\n        /// Type of job (tweets or users)\n        /// </summary>\n        [JsonPropertyName(\"type\")]\n        public string? JobType { get; set; }\n\n        /// <summary>\n        /// Job can be resumed\n        /// </summary>\n        [JsonPropertyName(\"resumable\")]\n        public bool Resumable { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceJobCreate.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter.Compliance\n{\n    public record ComplianceJobCreate\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n\n        [JsonPropertyName(\"resumable\")]\n        public bool Resumable { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceJobType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public class ComplianceJobType\n    {\n        public const string Tweets = \"tweets\";\n\n        public const string Users = \"users\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceQuery.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ComplianceQuery\n    {\n        //\n        // Query input fields\n        //\n\n        /// <summary>\n        /// type of compliance job query\n        /// </summary>\n        public ComplianceType Type { get; init; }\n\n        /// <summary>\n        /// ID for a single job query\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Type of compliance job to query (tweets or users)\n        /// </summary>\n        public string? JobType { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of job statuses\n        /// </summary>\n        public string? Status { get; init; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Compliance job data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<ComplianceJob>? Jobs { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceQuerySingle.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ComplianceQuerySingle\n    {\n        //\n        // Query input fields\n        //\n\n        /// <summary>\n        /// type of compliance job query\n        /// </summary>\n        public ComplianceType Type { get; init; }\n\n        /// <summary>\n        /// ID for a single job query\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Type of compliance job to query (tweets or users)\n        /// </summary>\n        public string? JobType { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of job statuses\n        /// </summary>\n        public string? Status { get; init; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Compliance job data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public ComplianceJob? Job { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes <see cref=\"ComplianceQuery\"/> queries\n    /// </summary>\n    public class ComplianceRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of compliance job\n        /// </summary>\n        public ComplianceType Type { get; set; }\n\n        /// <summary>\n        /// ID for a single job query\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Type of compliance job to query (tweets or users)\n        /// </summary>\n        public string? JobType { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of job statuses - <see cref=\"ComplianceStatus\"/>\n        /// </summary>\n        public string? Status { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<ComplianceQuery>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(ID),\n                       nameof(JobType),\n                       nameof(Status)\n                   }) ;\n\n            return paramFinder.Parameters;\n        }\n\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Type)))\n                Type = RequestProcessorHelper.ParseEnum<ComplianceType>(parameters[nameof(Type)]);\n            else\n                throw new ArgumentException($\"{nameof(Type)} is required\", nameof(Type));\n\n            switch (Type)\n            {\n                case ComplianceType.MultipleJobs:\n                    return BuildMultipleJobsUrlParameters(parameters);\n                case ComplianceType.SingleJob:\n                    return BuildSingleJobUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters for multiple jobs request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildMultipleJobsUrlParameters(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"compliance/jobs\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(JobType)))\n            {\n                JobType = parameters[nameof(JobType)];\n                urlParams.Add(new QueryParameter(\"type\", JobType));\n            }\n            else\n            {\n                throw new ArgumentException($\"{nameof(JobType)} is required\", nameof(JobType));\n            }\n\n            if (parameters.ContainsKey(nameof(Status)))\n            {\n                Status = parameters[nameof(Status)];\n                urlParams.Add(new QueryParameter(\"status\", Status));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Mentions timeline URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildSingleJobUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(ID)))\n                ID = parameters[nameof(ID)];\n            else\n                throw new ArgumentException($\"{nameof(ID)} is required\", nameof(ID));\n\n            var req = new Request($\"{BaseUrl}compliance/jobs/{ID}\");\n\n            return req;\n        }\n\n\n        public List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<ComplianceQuery> complianceQuery;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                complianceQuery = new List<ComplianceQuery> { new ComplianceQuery() };\n            }\n            else\n            {\n                var result = JsonDeserialize(responseJson);\n                complianceQuery = new List<ComplianceQuery> { result };\n            }\n\n            return complianceQuery.OfType<T>().ToList();\n        }\n\n        ComplianceQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter()\n                }\n            };\n            ComplianceQuery? complianceQuery = null;\n\n            if (Type == ComplianceType.MultipleJobs)\n            {\n                complianceQuery = JsonSerializer.Deserialize<ComplianceQuery>(responseJson, options);\n            }\n            else\n            {\n                ComplianceQuerySingle? singleQuery = JsonSerializer.Deserialize<ComplianceQuerySingle>(responseJson, options);\n                if (singleQuery?.Job is not null)\n                {\n                    complianceQuery = new ComplianceQuery\n                    {\n                        Jobs = new List<ComplianceJob> { singleQuery.Job }\n                    };\n                };\n            }\n\n            if (complianceQuery == null)\n                return new ComplianceQuery\n                {\n                    Type = Type,\n                    ID = ID,\n                    JobType = JobType,\n                    Status = Status\n                };\n            else\n                return complianceQuery with\n                {\n                    Type = Type,\n                    ID = ID,\n                    JobType = JobType,\n                    Status = Status\n                };\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceStatus.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public class ComplianceStatus\n    {\n        public const string Created = \"created\";\n\n        public const string InProgress = \"in_progress\";\n\n        public const string Failed = \"failed\";\n\n        public const string Complete = \"complete\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/ComplianceType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of Compliance query\n    /// </summary>\n    public enum ComplianceType\n    {\n        /// <summary>\n        /// Get list of compliance jobs\n        /// </summary>\n        MultipleJobs,\n\n        /// <summary>\n        /// Get a job, specified by ID\n        /// </summary>\n        SingleJob\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Compliance/TwitterContextComplianceCommands.cs",
    "content": "﻿using LinqToTwitter.Compliance;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Creates a new compliance job\n        /// </summary>\n        /// <param name=\"jobType\">Type of job - e.g. tweets or users</param>\n        /// <param name=\"jobName\">Name of job</param>\n        /// <param name=\"resumable\">Allows resuming uploads</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <returns>New <see cref=\"ComplianceQuery\"/> details</returns>\n        public async Task<ComplianceQuerySingle?> CreateComplianceJobAsync(string jobType, string jobName, bool resumable, CancellationToken cancelToken = default)\n        {\n            string url = $\"{BaseUrl2}compliance/jobs\";\n\n            var postData = new Dictionary<string, string>();\n\n            var postObj = new ComplianceJobCreate\n            {\n                Type = jobType,\n                Name = jobName,\n                Resumable = resumable,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ComplianceQuerySingle? job = JsonSerializer.Deserialize<ComplianceQuerySingle>(RawResult);\n\n            return job;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Counts/CountRange.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record CountRange\n    {\n        [JsonPropertyName(\"end\")]\n        public DateTime End { get; set; }\n\n        [JsonPropertyName(\"start\")]\n        public DateTime Start { get; set; }\n\n        [JsonPropertyName(\"tweet_count\")]\n        public int TweetCount { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Counts/CountType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum CountType\n    {\n        /// <summary>\n        /// Get counts for last seven days\n        /// </summary>\n        Recent,\n\n        /// <summary>\n        /// Get full archive search count\n        /// </summary>\n        All\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Counts/Counts.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json.Serialization;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public record Counts\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of count <see cref=\"CountType\"/>\n        /// </summary>\n        public CountType Type { get; init; }\n\n        /// <summary>\n        /// Date/Time to search to\n        /// </summary>\n        public DateTime EndTime { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields\n        /// </summary>\n        public Granularity Granularity { get; init; }\n\n        /// <summary>\n        /// Provide this, when paging, to get the next page of results\n        /// </summary>\n        public string? NextToken { get; init; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string? Query { get; init; }\n\n        /// <summary>\n        /// Return tweets whose IDs are greater than this\n        /// </summary>\n        public string? SinceID { get; init; }\n\n        /// <summary>\n        /// Date/Time to start search\n        /// </summary>\n        public DateTime StartTime { get; init; }\n\n        /// <summary>\n        /// Return tweets whose ids are less than this\n        /// </summary>\n        public string? UntilID { get; init; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<CountRange>? CountRanges { get; init; }\n\n        /// <summary>\n        /// Count metadata returned from query\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public CountsMeta? Meta { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Counts/CountsMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record CountsMeta\n    {\n        [JsonPropertyName(\"total_tweet_count\")]\n        public int TotalTweetCount { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Counts/CountsRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes search queries\n    /// </summary>\n    public class CountsRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of count\n        /// </summary>\n        public CountType Type { get; set; }\n\n        /// <summary>\n        /// Date/Time to search to\n        /// </summary>\n        public DateTime EndTime { get; set; }\n\n        /// <summary>\n        /// Grouping of Day, Hour, or Minute - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public Granularity Granularity { get; set; }\n\n        /// <summary>\n        /// Provide this, when paging, to get the next page of results\n        /// </summary>\n        public string? NextToken { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Return tweets whose IDs are greater than this\n        /// </summary>\n        public string? SinceID { get; set; }\n\n        /// <summary>\n        /// Date/Time to start search\n        /// </summary>\n        public DateTime StartTime { get; set; }\n\n        /// <summary>\n        /// Return tweets whose ids are less than this\n        /// </summary>\n        public string? UntilID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Counts>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(EndTime),\n                       nameof(Granularity),\n                       nameof(NextToken),\n                       nameof(Query),\n                       nameof(SinceID),\n                       nameof(StartTime),\n                       nameof(UntilID)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Type)))\n                Type = RequestProcessorHelper.ParseEnum<CountType>(parameters[nameof(Type)]);\n            else\n                throw new ArgumentException($\"{nameof(Type)} is required\", nameof(Type));\n\n            string urlSegment = Type switch\n            {\n                CountType.All => \"tweets/counts/all\",\n                CountType.Recent => \"tweets/counts/recent\",\n                _ => throw new ArgumentException($\"Unknown CountType: '{Type}'\")\n            };\n\n            return BuildCountUrlParameters(parameters, urlSegment);\n        }\n\n        /// <summary>\n        /// appends parameters for Count request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildCountUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n\n            if (parameters.ContainsKey(nameof(Query)) && !string.IsNullOrWhiteSpace(parameters[nameof(Query)]))\n            {\n                Query = parameters[nameof(Query)];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n            else\n            {\n                throw new ArgumentNullException(nameof(Query), \"Query filter in where clause is required.\");\n            }\n\n            if (parameters.ContainsKey(nameof(EndTime)))\n            {\n                EndTime = DateTime.Parse(parameters[nameof(EndTime)]);\n                urlParams.Add(new QueryParameter(\"end_time\", EndTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Granularity)))\n            {\n                Granularity = RequestProcessorHelper.ParseEnum<Granularity>(parameters[nameof(Granularity)]);\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(NextToken)))\n            {\n                NextToken = parameters[nameof(NextToken)];\n                urlParams.Add(new QueryParameter(\"next_token\", NextToken));\n            }\n\n            if (parameters.ContainsKey(nameof(SinceID)))\n            {\n                SinceID = parameters[nameof(SinceID)];\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID));\n            }\n\n            if (parameters.ContainsKey(nameof(StartTime)))\n            {\n                StartTime = DateTime.Parse(parameters[nameof(StartTime)]);\n                urlParams.Add(new QueryParameter(\"start_time\", StartTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(UntilID)))\n            {\n                UntilID = parameters[nameof(UntilID)];\n                urlParams.Add(new QueryParameter(\"until_id\", UntilID));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Search\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Counts> counts;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                counts = new List<Counts> { new Counts() };\n            }\n            else\n            {\n                var countsResult = JsonDeserialize(responseJson);\n                counts = new List<Counts> { countsResult };\n            }\n\n            return counts.OfType<T>().ToList();\n        }\n\n        Counts JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter()\n                }\n            };\n            Counts? counts = JsonSerializer.Deserialize<Counts>(responseJson, options);\n\n            if (counts == null)\n                return new Counts()\n                {\n                    Type = Type,\n                    EndTime = EndTime,\n                    Granularity = Granularity,\n                    NextToken = NextToken,\n                    Query = Query,\n                    SinceID = SinceID,\n                    StartTime = StartTime,\n                    UntilID = UntilID,\n                };\n            else\n                return counts with\n                {\n                    Type = Type,\n                    EndTime = EndTime,\n                    Granularity = Granularity,\n                    NextToken = NextToken,\n                    Query = Query,\n                    SinceID = SinceID,\n                    StartTime = StartTime,\n                    UntilID = UntilID,\n                };\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Counts/Granularity.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Frequency of Count query results\n    /// </summary>\n    public enum Granularity\n    {\n        /// <summary>\n        /// Unspecified, defaults to Day\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// Return results for every day of the time frame\n        /// </summary>\n        Day,\n\n        /// <summary>\n        /// Return results for every hour of the time frame\n        /// </summary>\n        Hour,\n\n        /// <summary>\n        /// Return results for every minute of the time frame\n        /// </summary>\n        Minute\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/DirectMessageEvents/DirectMessageEvents.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System;\nusing LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\nusing System.Text.Json;\nusing LinqToTwitter.Common.Entities;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Direct message events support Twitter chatbot messages.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class DirectMessageEvents\n    {\n        /// <summary>\n        /// Input (List Query): Number of items to return for a single page.\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Input (List Query): Supports paging through results on List queries\n        /// </summary>\n        public string? Cursor { get; set; }\n\n        /// <summary>\n        /// Input (Show Query): ID of DM\n        /// </summary>\n        public ulong ID { get; set; }\n\n        ///// <summary>\n        ///// Input (New DM): ID of the user the DM is sent to\n        ///// </summary>\n        //public ulong RecipientID { get; set; }\n\n        ///// <summary>\n        ///// Input (New DM): DM contents\n        ///// </summary>\n        //public string Text { get; set; }\n\n        /// <summary>\n        /// Input (All Queries): Type of Direct Message Events\n        /// </summary>\n        public DirectMessageEventsType? Type { get; set; }\n\n        /// <summary>\n        /// Output: Response from Twitter\n        /// </summary>\n        public DirectMessageEventsValue? Value { get; set; }\n    }\n\n    public class DirectMessageEventsValue\n    {\n        /// <summary>\n        /// Twitter DM event container for a single event. e.g. Show query or NewDirectMessageEventAsync call\n        /// </summary>\n        [JsonPropertyName(\"event\")]\n        public DMEvent? DMEvent { get; set; }\n\n        /// <summary>\n        /// Twitter DM event container for multiple events e.g. List query\n        /// </summary>\n        [JsonPropertyName(\"events\")]\n        public List<DMEvent>? DMEvents { get; set; }\n\n        /// <summary>\n        /// Show and List queries populate this to show which app created the DM.\n        /// You need to use JSON.NET because the nested object ID is a property matching the app id, \n        /// which is different for every app, precluding the ability to assign a C# property.\n        /// </summary>\n        [JsonPropertyName(\"apps\")]\n        public JsonElement Apps { get; set; }\n\n        /// <summary>\n        /// ID for the next page or null if there isn't a next page\n        /// </summary>\n        [JsonPropertyName(\"next_cursor\")]\n        public string? NextCursor { get; set; }\n    }\n\n    public class DMEvent\n    {\n        /// <summary>\n        /// Type of event: message_create for new DMs\n        /// </summary>\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n\n        /// <summary>\n        /// DM ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Milliseconds since 1/1/1970 00:00:00 when event was created\n        /// </summary>\n        [JsonPropertyName(\"created_timestamp\")]\n        public string? CreatedTimestamp { get; set; }\n\n        /// <summary>\n        /// Twitter entity before this DM\n        /// </summary>\n        [JsonPropertyName(\"initiated_via\")]\n        public InitiatedVia? InitiatedVia { get; set; }\n\n        /// <summary>\n        /// Twitter container for message and metadata\n        /// </summary>\n        [JsonPropertyName(\"message_create\")]\n        public DirectMessageCreate? MessageCreate { get; set; }\n\n        DateTime? createdAt;\n        /// <summary>\n        /// Helper property for C# DateTime matching CreatedTimestamp (so you don't have to convert it yourself)\n        /// </summary>\n        [JsonIgnore]\n        public DateTime? CreatedAt\n        {\n            get\n            {\n                if (createdAt == null || createdAt == default(DateTime))\n                    createdAt = CreatedTimestamp?.GetEpochDateFromTimestamp();\n\n                return createdAt;\n            }\n        }\n    }\n\n    public class InitiatedVia\n    {\n        [JsonPropertyName(\"tweet_id\")]\n        public string? TweetId { get; set; }\n        [JsonPropertyName(\"welcome_message_id\")]\n        public string? WelcomeMessageId { get; set; }\n    }\n\n    public class DirectMessageCreate\n    {\n        /// <summary>\n        /// Who the DM is sent to\n        /// </summary>\n        [JsonPropertyName(\"target\")]\n        public DirectMessageTarget? Target { get; set; }\n\n        /// <summary>\n        /// ID of person who sent the DM.\n        /// Populated for DM Show and List queries.\n        /// </summary>\n        [JsonPropertyName(\"sender_id\")]\n        public string? SenderID { get; set; }\n\n        /// <summary>\n        /// ID of the application creating the DM\n        /// </summary>\n        [JsonPropertyName(\"source_app_id\")]\n        public string? SourceAppID { get; set; }\n\n        /// <summary>\n        /// DM Contents\n        /// </summary>\n        [JsonPropertyName(\"message_data\")]\n        public DirectMessageData? MessageData { get; set; }\n    }\n\n    public class DirectMessageTarget\n    {\n        /// <summary>\n        /// ID of person DM is sent to\n        /// </summary>\n        [JsonPropertyName(\"recipient_id\")]\n        public string? RecipientID { get; set; }\n    }\n\n    public class DirectMessageData\n    {\n        /// <summary>\n        /// DM contents\n        /// </summary>\n        [JsonPropertyName(\"text\")]\n        public string? Text { get; set; }\n\n        [JsonPropertyName(\"attachment\")]\n        public Attachment? Attachment { get; set; }\n\n        /// <summary>\n        /// Extracted entities and indices in Text where they occur\n        /// </summary>\n        [JsonPropertyName(\"entities\")]\n        public Entities? Entities { get; set; }\n\n        [JsonPropertyName(\"quick_reply\")]\n        public QuickReply? QuickReply { get; set; }\n\n        [JsonPropertyName(\"ctas\")]\n        public IEnumerable<CallToAction>? CallToActions { get; set; }\n    }\n\n    public class Attachment\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"location\")]\n        public DirectMessageEventLocation? Location { get; set; }\n        [JsonPropertyName(\"media\")]\n        public DirectMessageMedia? Media { get; set; }\n    }\n\n    public class DirectMessageEventLocation\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"shared_coordinate\")]\n        public SharedCoordinate? SharedCoordinate { get; set; }\n        [JsonPropertyName(\"shared_place\")]\n        public SharedPlace? SharedPlace { get; set; }\n    }\n\n    public class SharedCoordinate\n    {\n        [JsonPropertyName(\"coordinates\")]\n        public DirectMessageEventCoordinates? Coordinates { get; set; }\n    }\n\n    public class DirectMessageEventCoordinates\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"coordinates\")]\n        public double[]? Coordinates { get; set; }\n    }\n\n    public class SharedPlace\n    {\n        [JsonPropertyName(\"place\")]\n        public DirectMessageEventPlace? Place { get; set; }\n    }\n\n    public class DirectMessageEventPlace\n    {\n        [JsonPropertyName(\"id\")]\n        public string? Id { get; set; }\n    }\n\n    public class DirectMessageMedia\n    {\n        [JsonPropertyName(\"id\")]\n        public ulong Id { get; set; }\n        [JsonPropertyName(\"id_str\")]\n        public string? IdStr { get; set; }\n        [JsonPropertyName(\"indices\")]\n        public int[]? Indices { get; set; }\n        [JsonPropertyName(\"media_url\")]\n        public string? MediaUrl { get; set; }\n        [JsonPropertyName(\"media_url_https\")]\n        public string? MediaUrlHttps { get; set; }\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; set; }\n        [JsonPropertyName(\"display_url\")]\n        public string? DisplayUrl { get; set; }\n        [JsonPropertyName(\"expanded_url\")]\n        public string? ExpandedUrl { get; set; }\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"sizes\")]\n        public Sizes? Sizes { get; set; }\n    }\n\n    public class Sizes\n    {\n        [JsonPropertyName(\"small\")]\n        public MediaSize? Small { get; set; }\n        [JsonPropertyName(\"medium\")]\n        public MediaSize? Medium { get; set; }\n        [JsonPropertyName(\"large\")]\n        public MediaSize? Large { get; set; }\n        [JsonPropertyName(\"thumb\")]\n        public MediaSize? Thumb { get; set; }\n    }\n\n    public class MediaSize\n    {\n        [JsonPropertyName(\"w\")]\n        public int Width { get; set; }\n        [JsonPropertyName(\"h\")]\n        public int Height { get; set; }\n        [JsonPropertyName(\"resize\")]\n        public string? Resize { get; set; }\n    }\n\n    public class QuickReply\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"options\")]\n        public IEnumerable<QuickReplyOption>? Options { get; set; }\n\n    }\n\n    public class QuickReplyOption\n    {\n        [JsonPropertyName(\"label\")]\n        public string? Label { get; set; }\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; set; }\n        [JsonPropertyName(\"metadata\")]\n        public string? Metadata { get; set; }\n    }\n\n    public class CallToAction\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"label\")]\n        public string? Label { get; set; }\n        [JsonPropertyName(\"tco_url\")]\n        public string? TcoUrl { get; set; }\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/DirectMessageEvents/DirectMessageEventsRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class DirectMessageEventsRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Direct Message Events\n        /// </summary>\n        public DirectMessageEventsType Type { get; set; }\n\n        /// <summary>\n        /// Number of items to return for a single page.\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Supports paging through results on List queries\n        /// </summary>\n        public string? Cursor { get; set; }\n\n        /// <summary>\n        /// ID of DM\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<DirectMessageEvents>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Count),\n                       nameof(ID),\n                       nameof(Cursor)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException($\"You must set {nameof(Type)}.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<DirectMessageEventsType>(parameters[nameof(Type)]);\n\n            return Type switch\n            {\n                DirectMessageEventsType.List => BuildListUrl(parameters),\n                DirectMessageEventsType.Show => BuildShowUrl(parameters),\n                _ => throw new InvalidOperationException(\n                        $\"Didn't recognize '{Type}' for {nameof(Type)} parameter in \" +\n                        $\"DirectMessageEventsRequestProcessor.BuildUrl.\"),\n            };\n        }\n\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(ID)))\n                throw new ArgumentNullException(nameof(ID), $\"{nameof(ID)} is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/events/show.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[nameof(ID)]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct messages\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"direct_messages/events/list.json\");\n            IList <QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(nameof(Count)))\n            {\n                Count = int.Parse(parameters[nameof(Count)]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Cursor)))\n            {\n                Cursor = parameters[nameof(Cursor)];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[nameof(Cursor)]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of DirectMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson))\n                return new List<T>();\n\n            IEnumerable<DirectMessageEvents> dmList = Type switch\n            {\n                DirectMessageEventsType.List or DirectMessageEventsType.Show => HandleDirectMessage(responseJson),\n                _ => new List<DirectMessageEvents>(),\n            };\n\n            return dmList.OfType<T>().ToList();\n        }\n\n        IEnumerable<DirectMessageEvents> HandleDirectMessage(string dmJson)\n        {\n            DirectMessageEventsValue? dmEvent = JsonSerializer.Deserialize<DirectMessageEventsValue>(dmJson);\n\n            return new List<DirectMessageEvents> \n            { \n                new DirectMessageEvents\n                {\n                    Type = Type,\n                    Count = Count,\n                    Cursor = Cursor,\n                    ID = ID,\n                    Value = dmEvent\n                }\n            };\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var dm = new DirectMessageEvents\n            {\n                Value = JsonSerializer.Deserialize<DirectMessageEventsValue>(responseJson ?? \"\")\n            };\n\n            return dm.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/DirectMessageEvents/DirectMessageEventsType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of direct message events query\n    /// </summary>\n    public enum DirectMessageEventsType\n    {\n        /// <summary>\n        /// all direct message events\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// get a single direct message\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/DirectMessageEvents/TwitterContextDirectMessageEventsCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Sends a new direct message that attaches media.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"mediaId\">ID of an uploaded media.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> NewDirectMessageEventAsync(ulong recipientID, string text, ulong mediaId, CancellationToken cancelToken = default)\n        {\n            var attachment = new Attachment\n            {\n                Type = \"media\",\n                Media = new DirectMessageMedia\n                {\n                    Id = mediaId\n                }\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with lat/long location.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"latitude\">Latitude coordinate.</param>\n        /// <param name=\"longitude\">Longitude coordinate.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> NewDirectMessageEventAsync(ulong recipientID, string text, double latitude, double longitude, CancellationToken cancelToken = default)\n        {\n            var attachment = new Attachment\n            {\n                Type = \"location\",\n                Location = new DirectMessageEventLocation\n                {\n                    Type = \"shared_coordinate\",\n                    SharedCoordinate = new SharedCoordinate\n                    {\n                        Coordinates = new DirectMessageEventCoordinates\n                        {\n                            Type = \"Point\",\n                            Coordinates = new double[] { latitude, longitude }\n                        }\n                    }\n                }\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with place ID location.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"placeID\">ID of place (Tip: Use the Geo API if you don't already have a place ID)</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> NewDirectMessageEventAsync(ulong recipientID, string text, string placeID, CancellationToken cancelToken = default)\n        {\n            var attachment = new Attachment\n            {\n                Type = \"location\",\n                Location = new DirectMessageEventLocation\n                {\n                    Type = \"shared_place\",\n                    SharedPlace = new SharedPlace\n                    {\n                        Place = new DirectMessageEventPlace\n                        {\n                            Id = placeID\n                        }\n                    }\n                }\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment, quickReply: null, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message to specified user with just text.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> NewDirectMessageEventAsync(ulong recipientID, string text, CancellationToken cancelToken = default)\n        {\n            return await NewDirectMessageEventAsync(recipientID, text, attachment: null, quickReply: null, callToActions: null, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with options.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"options\">List of options for the user to choose from.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> RequestQuickReplyOptionsAsync(ulong recipientID, string text, IEnumerable<QuickReplyOption> options, CancellationToken cancelToken = default)\n        {\n            var quickReply = new QuickReply\n            {\n                Type = \"options\",\n                Options = options\n            };\n\n            return await NewDirectMessageEventAsync(recipientID, text, attachment: null, quickReply: quickReply, callToActions: null, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message with buttons.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"callToActions\">List of Call to Action, which creates buttons in the message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> RequestButtonChoiceAsync(ulong recipientID, string text, IEnumerable<CallToAction> callToActions, CancellationToken cancelToken = default)\n        {\n            return await NewDirectMessageEventAsync(recipientID, text, attachment: null, quickReply: null, callToActions: callToActions, cancelToken: cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a new direct message to specified user.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send to.</param>\n        /// <param name=\"text\">Direct message contents.</param>\n        /// <param name=\"attachment\">Optional attachment from overloads that support it.</param>\n        /// <param name=\"quickReply\">Quick reply from overloads that support it.</param>\n        /// <param name=\"callToActions\">List of Call to Action, which creates buttons in the message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<DirectMessageEvents?> NewDirectMessageEventAsync(ulong recipientID, string text, Attachment? attachment, QuickReply? quickReply, IEnumerable<CallToAction>? callToActions, CancellationToken cancelToken = default)\n        {\n            if (recipientID == default)\n                throw new ArgumentException($\"{nameof(recipientID)} must be set.\", nameof(recipientID));\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException($\"{nameof(text)} is a required parameter.\", nameof(text));\n\n            var newUrl = BaseUrl + \"direct_messages/events/new.json\";\n\n            var dmEventParams = new DirectMessageEventsValue\n            {\n                DMEvent = new DMEvent\n                {\n                    MessageCreate = new DirectMessageCreate\n                    {\n                        MessageData = new DirectMessageData\n                        {\n                            Text = text,\n                            Attachment = attachment,\n                            QuickReply = quickReply,\n                            CallToActions = callToActions\n                        },\n                        Target = new DirectMessageTarget\n                        {\n                            RecipientID = recipientID.ToString()\n                        }\n                    },\n                    Type = \"message_create\"\n                },\n                Apps = JsonDocument.Parse(\"null\").RootElement\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    dmEventParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>();\n            DirectMessageEvents? dmEvents = reqProc.ProcessActionResult(RawResult, DirectMessageEventsType.Show);\n\n            return dmEvents;\n        }\n\n        /// <summary>\n        /// Deletes a direct message.\n        /// </summary>\n        /// <param name=\"directMessageID\">ID of direct message to delete.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task DeleteDirectMessageEventAsync(ulong directMessageID, CancellationToken cancelToken = default)\n        {\n            if (directMessageID == default)\n                throw new ArgumentException($\"{nameof(directMessageID)} must be set.\", nameof(directMessageID));\n\n            var newUrl = BaseUrl + \"direct_messages/events/destroy.json?id=\" + directMessageID;\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    new Dictionary<string, string?>\n                    {\n                        [\"id\"] = directMessageID.ToString()\n                    },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Marks direct messages as having been read.\n        /// </summary>\n        /// <param name=\"lastReadEventID\">ID of last direct message read.</param>\n        /// <param name=\"recipientID\">ID of user to send typing indicator to.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task MarkReadAsync(ulong lastReadEventID, ulong recipientID, CancellationToken cancelToken = default)\n        {\n            if (lastReadEventID == default)\n                throw new ArgumentException($\"{nameof(lastReadEventID)} must be set.\", nameof(lastReadEventID));\n            if (recipientID == default)\n                throw new ArgumentException($\"{nameof(recipientID)} must be set.\", nameof(recipientID));\n\n            var newUrl = BaseUrl + \"direct_messages/mark_read.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string?>\n                    {\n                        [\"last_read_event_id\"] = lastReadEventID.ToString(),\n                        [\"recipient_id\"] = recipientID.ToString()\n                    },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Sends a typing indicator to a user.\n        /// </summary>\n        /// <param name=\"recipientID\">ID of user to send typing indicator to.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task IndicateTypingAsync(ulong recipientID, CancellationToken cancelToken = default)\n        {\n            if (recipientID == default)\n                throw new ArgumentException($\"{nameof(recipientID)} must be set.\", nameof(recipientID));\n\n            var newUrl = BaseUrl + \"direct_messages/indicate_typing.json\";\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string?>\n                    {\n                        [\"recipient_id\"] = recipientID.ToString()\n                    },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Favorites/Favorites.cs",
    "content": "﻿using System.Text.Json;\nusing System.Xml.Serialization;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter favorites info\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Favorites : Status\n    {\n        public Favorites() { }\n\n        public Favorites(JsonElement favJson) : base(favJson) { }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        [XmlIgnore]\n        public new FavoritesType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (optional)\n        /// </summary>\n        [XmlIgnore]\n        public new bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        [XmlIgnore]\n        public new TweetMode? TweetMode { get; set; }\n\n        //\n        // The following types support XML serialization\n        //\n\n        [XmlIgnore]\n        FavoritesType type;\n        [XmlAttribute(AttributeName = \"Type\")]\n        FavoritesType TypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlIgnore]\n        ulong userID;\n        [XmlAttribute(AttributeName=\"UserID\")]\n        public ulong UserIDXml\n        {\n            get { return userID; }\n            set { userID = value; }\n        }\n\n        [XmlIgnore]\n        string? screenName;\n        [XmlAttribute(AttributeName=\"ScreenName\")]\n        public string? ScreenNameXml\n        {\n            get { return screenName; }\n            set { screenName = value; }\n        }\n\n        [XmlIgnore]\n        int count;\n        [XmlAttribute(AttributeName=\"Count\")]\n        public int CountXml\n        {\n            get { return count; }\n            set { count = value; }\n        }\n\n        [XmlIgnore]\n        ulong sinceID;\n        [XmlAttribute(AttributeName=\"SinceID\")]\n        public ulong SinceIDXml\n        {\n            get { return sinceID; }\n            set { sinceID = value; }\n        }\n\n        [XmlIgnore]\n        ulong maxID;\n        [XmlAttribute(AttributeName=\"MaxID\")]\n        public ulong MaxIDXml\n        {\n            get { return maxID; }\n            set { maxID = value; }\n        }\n        \n        [XmlIgnore]\n        bool includeEntities;\n        [XmlAttribute(AttributeName=\"IncludeEntities\")]\n        public bool IncludeEntitiesXml\n        {\n            get { return includeEntities; }\n            set { includeEntities = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Favorites/FavoritesAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum FavoritesAction\n    {\n        SingleStatus\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Favorites/FavoritesRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Manages request processing for favorites\n    /// </summary>\n    public class FavoritesRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of favorites to query\n        /// </summary>\n        internal FavoritesType Type { get; set; }\n\n        /// <summary>\n        /// User identity to search (optional)\n        /// </summary>\n        internal ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen name of user to search (optional)\n        /// </summary>\n        internal string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Number of items to return in a single request (optional)\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Start search at this ID (optional)\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Don't return results past this ID (optional)\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        internal TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Favorites>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(UserID),\n                       nameof(ScreenName),\n                       nameof(Count),\n                       nameof(SinceID),\n                       nameof(MaxID),\n                       nameof(IncludeEntities),\n                       nameof(TweetMode)\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            const string ParamsParam = \"parameters\";\n\n            if (parameters == null)\n                throw new ArgumentException(\"You must pass a \\\"parameters\\\" Dictionary<string, string> parameter.\", ParamsParam);\n\n            if (!parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<FavoritesType>(parameters[\"Type\"]);\n\n            return BuildFavoritesUrlParameters(parameters);\n        }\n\n        /// <summary>\n        /// appends parameters for Favorites request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildFavoritesUrlParameters(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"favorites/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n\n        /// <summary>\n        /// transforms Twitter response into list of Favorites\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of Favorite</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonElement favoritesJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var statusList =\n                from favJson in favoritesJson.EnumerateArray()\n                select new Favorites(favJson)\n                {\n                    Type = Type,\n                    UserID = UserID,\n                    ScreenName = ScreenName,\n                    Count = Count,\n                    SinceID = SinceID,\n                    MaxID = MaxID,\n                    IncludeEntities = IncludeEntities,\n                    TweetMode = TweetMode\n                };\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement statusJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var status = new Status(statusJson);\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Favorites/FavoritesType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of favorites queries\n    /// </summary>\n    public enum FavoritesType\n    {\n        /// <summary>\n        /// Get favorites list for user\n        /// </summary>\n        Favorites\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Favorites/TwitterContextFavoritesCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        [Obsolete(\"Please use the new v2 `Like` method instead.\")]\n        public async Task<Status?> CreateFavoriteAsync(ulong id)\n        {\n            return await CreateFavoriteAsync(id, true).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Adds a favorite to the logged-in user's profile\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        [Obsolete(\"Please use the new v2 `Like` method instead.\")]\n        public async Task<Status?> CreateFavoriteAsync(ulong id, bool includeEntities, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n\n            var favoritesUrl = BaseUrl + \"favorites/create.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Status>(\n                    HttpMethod.Post.ToString(),\n                    favoritesUrl,\n                    new Dictionary<string, string?>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FavoritesAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <returns>status of favorite</returns>\n        [Obsolete(\"Please use the new v2 `Unlike` method instead.\")]\n        public async Task<Status?> DestroyFavoriteAsync(ulong id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await DestroyFavoriteAsync(id, true, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Deletes a favorite from the logged-in user's profile.\n        /// </summary>\n        /// <param name=\"id\">id of status to add to favorites</param>\n        /// <param name=\"includeEntities\">Response doesn't include entities when false. (default: true)</param>\n        /// <returns>status of favorite</returns>\n        [Obsolete(\"Please use the new v2 `Unlike` method instead.\")]\n        public async Task<Status?> DestroyFavoriteAsync(ulong id, bool includeEntities, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"id is a required parameter.\", \"id\");\n\n            var favoritesUrl = BaseUrl + \"favorites/destroy.json\";\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Status>(\n                    HttpMethod.Post.ToString(),\n                    favoritesUrl,\n                    new Dictionary<string, string?>\n                    {\n                        {\"id\", id.ToString()},\n                        {\"include_entities\", includeEntities.ToString()}\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FavoritesAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Friendship/Friendship.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// parameters for freindship actions\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Friendship\n    {\n        public const ulong UserIDNotIncluded = 0;\n        public const string ScreenNameNotIncluded = null;\n\n        public Friendship() { }\n        public Friendship(JsonElement friendJson)\n        {\n            if (friendJson.IsNull()) return;\n\n            TargetRelationship = new Relationship(friendJson.GetProperty(\"target\"));\n            SourceRelationship = new Relationship(friendJson.GetProperty(\"source\"));\n        }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        public FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user (Show query)\n        /// </summary>\n        public ulong SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user (Show query)\n        /// </summary>\n        public string? SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user (Show query)\n        /// </summary>\n        public ulong TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user (Show query)\n        /// </summary>\n        public string? TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names for Lookup query\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs for Lookup query\n        /// </summary>\n        public string? UserID { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// info on friend\n        /// </summary>\n        public User? Friend { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the source (Show query)\n        /// </summary>\n        public Relationship? SourceRelationship { get; set; }\n\n        /// <summary>\n        /// Relationship details returned from Twitter for the target (Show query)\n        /// </summary>\n        public Relationship? TargetRelationship { get; set; }\n\n        /// <summary>\n        /// List of ids returned by Incoming and Outgoing queries\n        /// </summary>\n        public IDList? IDInfo { get; set; }\n\n        /// <summary>\n        /// List of relationships from Lookup query\n        /// </summary>\n        public List<Relationship>? Relationships { get; set; }\n\n        /// <summary>\n        /// Holds prev/next cursors\n        /// </summary>\n        public Cursors? CursorMovement { get; set; }\n\n        /// <summary>\n        /// List of User that are friends or followers, depending on type of query\n        /// </summary>\n        public List<User>? Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Friendship/FriendshipAction.cs",
    "content": "namespace LinqToTwitter\n{\n    public enum FriendshipAction\n    {\n        Create,\n        Destroy,\n        Update\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Friendship/FriendshipRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Friendship queries\n    /// </summary>\n    public class FriendshipRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of friendship (defaults to Exists)\n        /// </summary>\n        public FriendshipType Type { get; set; }\n\n        /// <summary>\n        /// ID of source user\n        /// </summary>\n        public ulong SourceUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of source user\n        /// </summary>\n        public string? SourceScreenName { get; set; }\n\n        /// <summary>\n        /// ID of target user\n        /// </summary>\n        public ulong TargetUserID { get; set; }\n\n        /// <summary>\n        /// Screen name of target user\n        /// </summary>\n        public string? TargetScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of names for lookup\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs to lookup\n        /// </summary>\n        public string? UserID { get; set; }\n\n        /// <summary>\n        /// Helps in paging results for queries such as incoming and outgoing\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Removes status when set to true (false by default)\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Removes entities when set to false (true by default)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Removes entities on users when set to false (true by default)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Number of ids to return for each request (max: 5000)\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Friendship>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"SourceUserID\",\n                       \"SourceScreenName\",\n                       \"TargetUserID\",\n                       \"TargetScreenName\",\n                       \"Cursor\",\n                       \"ScreenName\",\n                       \"UserID\",\n                       \"SkipStatus\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"Count\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<FriendshipType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case FriendshipType.Incoming:\n                    return BuildFriendshipIncomingUrl(parameters);\n                case FriendshipType.Lookup:\n                    return BuildLookupUrl(parameters);\n                case FriendshipType.Outgoing:\n                    return BuildFriendshipOutgoingUrl(parameters);\n                case FriendshipType.Show:\n                    return BuildFriendshipShowUrl(parameters);\n                case FriendshipType.NoRetweetIDs:\n                    return BuildFriendshipNoRetweetIDsUrl();\n                case FriendshipType.FollowersList:\n                    return BuildFollowersListUrl(parameters);\n                case FriendshipType.FriendsList:\n                    return BuildFriendsListUrl(parameters);\n                case FriendshipType.FollowerIDs:\n                    return BuildFollowerIDsUrl(parameters);\n                case FriendshipType.FriendIDs:\n                    return BuildFriendIDsUrl(parameters);\n                default:\n                    throw new ArgumentException(\"Invalid FriendshipType\", \"Type\");\n            }\n        }\n\n        /// <summary>\n        /// Builds an url that retrieves ids of people who the logged in user doesn't want retweets for\n        /// </summary>\n        /// <returns>no_retweet_id URL</returns>\n        Request BuildFriendshipNoRetweetIDsUrl()\n        {\n            return new Request(BaseUrl + \"friendships/no_retweets/ids.json\");\n        }\n\n        /// <summary>\n        /// builds an url for showing friendship details between two users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildFriendshipShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"SourceUserID\") && !parameters.ContainsKey(\"SourceScreenName\"))\n                throw new ArgumentException(\"You must specify either SourceUserID or SourceScreenName\");\n\n            if (!parameters.ContainsKey(\"TargetUserID\") && !parameters.ContainsKey(\"TargetScreenName\"))\n                throw new ArgumentException(\"You must specify either TargetUserID or TargetScreenName\");\n\n            var req = new Request(BaseUrl + \"friendships/show.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"SourceUserID\"))\n            {\n                SourceUserID = ulong.Parse(parameters[\"SourceUserID\"]);\n                urlParams.Add(new QueryParameter(\"source_id\", parameters[\"SourceUserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"SourceScreenName\"))\n            {\n                SourceScreenName = parameters[\"SourceScreenName\"];\n                urlParams.Add(new QueryParameter(\"source_screen_name\", SourceScreenName));\n            }\n\n            if (parameters.ContainsKey(\"TargetUserID\"))\n            {\n                TargetUserID = ulong.Parse(parameters[\"TargetUserID\"]);\n                urlParams.Add(new QueryParameter(\"target_id\", parameters[\"TargetUserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"TargetScreenName\"))\n            {\n                TargetScreenName = parameters[\"TargetScreenName\"];\n                urlParams.Add(new QueryParameter(\"target_screen_name\", TargetScreenName));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining incoming friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for incoming</returns>\n        Request BuildFriendshipIncomingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/incoming.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining relationship between logged in user and list of other users\n        /// </summary>\n        /// <param name=\"parameters\">Should contain ScreenName</param>\n        /// <returns>Url for lookup</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/lookup.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Build url for determining outgoing friend requests\n        /// </summary>\n        /// <param name=\"parameters\">Can optionally contain Cursor</param>\n        /// <returns>Url for outgoing</returns>\n        Request BuildFriendshipOutgoingUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friendships/outgoing.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowersListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"followers/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID with a comma-separated list of twitter screen names or user IDs, respectively.\");\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n                        \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", SkipStatus.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFriendsListUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"friends/list.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"ScreenName\") && !parameters.ContainsKey(\"UserID\"))\n                throw new ArgumentNullException(\"ScreenNameOrUserID\", \"Requires ScreenName or UserID.\");\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", UserID));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", ScreenName));\n            }\n            \n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        Request BuildFollowerIDsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"followers/ids.json\";\n\n            return BuildIdQueryUrlParameters(parameters, url);\n        }\n\n        Request BuildFriendIDsUrl(Dictionary<string, string> parameters)\n        {\n            var url = \"friends/ids.json\";\n\n            return BuildIdQueryUrlParameters(parameters, url);\n        }\n\n        Request BuildIdQueryUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            if (!parameters.ContainsKey(\"UserID\") && !parameters.ContainsKey(\"ScreenName\"))\n                throw new ArgumentException(\"You must specify either UserID or ScreenName.\");\n\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = parameters[\"UserID\"];\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n            else\n            {\n                Cursor = -1;\n                urlParams.Add(new QueryParameter(\"cursor\", Cursor.ToString()));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            Friendship friendship;\n\n            switch (Type)\n            {\n                case FriendshipType.Show:\n                    friendship = HandleShowResponse(responseJson);\n                    break;\n                case FriendshipType.Incoming:\n                case FriendshipType.Outgoing:\n                case FriendshipType.FollowerIDs:\n                case FriendshipType.FriendIDs:\n                    friendship = HandleIdsResponse(responseJson);\n                    break;\n                case FriendshipType.Lookup:\n                    friendship = HandleLookupResponse(responseJson);\n                    break;\n                case FriendshipType.NoRetweetIDs:\n                    friendship = HandleNoRetweetIDsResponse(responseJson);\n                    break;\n                case FriendshipType.FriendsList:\n                case FriendshipType.FollowersList:\n                    friendship = HandleFriendsListOrFollowersListResponse(responseJson);\n                    break;\n                default:\n                    friendship = new Friendship();\n                    break;\n            }\n\n            friendship.Type = Type;\n            friendship.SourceUserID = SourceUserID;\n            friendship.SourceScreenName = SourceScreenName;\n            friendship.TargetUserID = TargetUserID;\n            friendship.TargetScreenName = TargetScreenName;\n            friendship.Cursor = Cursor;\n            friendship.ScreenName = ScreenName;\n            friendship.UserID = UserID;\n            friendship.SkipStatus = SkipStatus;\n            friendship.IncludeUserEntities = IncludeUserEntities;\n            friendship.Count = Count;\n\n            var friendList = new List<Friendship>\n            {\n                friendship\n            };\n\n            return friendList.OfType<T>().ToList();\n        }\n  \n        Friendship HandleShowResponse(string responseJson)\n        {\n            JsonElement showJson = JsonDocument.Parse(responseJson).RootElement;\n            var friendship = new Friendship(showJson.GetProperty(\"relationship\"));\n            return friendship;\n        }\n  \n        Friendship HandleIdsResponse(string responseJson)\n        {\n            JsonElement idsJson = JsonDocument.Parse(responseJson).RootElement;\n            var friendship = new Friendship\n            {\n                IDInfo = new IDList(idsJson),\n                CursorMovement = new Cursors(idsJson)\n            };\n            return friendship;\n        }\n  \n        Friendship HandleLookupResponse(string responseJson)\n        {\n            JsonElement lookupJson = JsonDocument.Parse(responseJson).RootElement;\n            var friendship = new Friendship\n            {\n                Relationships =\n                    (from relationship in lookupJson.EnumerateArray()\n                     select new Relationship(relationship))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        Friendship HandleNoRetweetIDsResponse(string responseJson)\n        {\n            string idsJson = \"{ \\\"ids\\\":\" + responseJson + \" }\";\n            return HandleIdsResponse(idsJson);\n        }\n\n        Friendship HandleFriendsListOrFollowersListResponse(string responseJson)\n        {\n            JsonElement friendsOrFollowersJson = JsonDocument.Parse(responseJson).RootElement;\n            var users = friendsOrFollowersJson.GetProperty(\"users\");\n\n            var friendship = new Friendship\n            {\n                CursorMovement = new Cursors(friendsOrFollowersJson),\n                Users =\n                    (from user in users.EnumerateArray()\n                     select new User(user))\n                    .ToList()\n            };\n            return friendship;\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement friendJson = JsonDocument.Parse(responseJson).RootElement;\n\n            switch ((FriendshipAction) theAction)\n            {\n                case FriendshipAction.Create:\n                case FriendshipAction.Destroy:\n                    var user = new User(friendJson);\n                    return user.ItemCast(default(T));\n                case FriendshipAction.Update:\n                    var friendship = new Friendship(friendJson.GetProperty(\"relationship\"));\n                    return friendship.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Friendship/FriendshipType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of friendship actions\n    /// </summary>\n    public enum FriendshipType\n    {\n        /// <summary>\n        /// Detailed information on the relationship between two people\n        /// </summary>\n        Show,\n\n        /// <summary>\n        /// Show IDs of all users requesting friendship with logged in user\n        /// </summary>\n        Incoming,\n\n        /// <summary>\n        /// Show IDs of all users logged in user is requesting friendship with\n        /// </summary>\n        Outgoing,\n\n        /// <summary>\n        /// Allows you to examine the relationship of a list of users, ScreenName,\n        /// to the logged in user\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// List of user IDs logged in user doesn't want to receive retweets for\n        /// </summary>\n        NoRetweetIDs,\n\n        /// <summary>\n        /// List of User entities of friends (people the authenticated user follows)\n        /// </summary>\n        FriendsList,\n\n        /// <summary>\n        /// List of User entities of followers (people who follow the authenticated user)\n        /// </summary>\n        FollowersList,\n\n        /// <summary>\n        /// people user is following\n        /// </summary>\n        FriendIDs,\n\n        /// <summary>\n        /// people following user\n        /// </summary>\n        FollowerIDs\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Friendship/Relationship.cs",
    "content": "﻿using System.Linq;\nusing System.Collections.Generic;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Friendship details for either a Source or Target\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Relationship\n    {\n        public Relationship() { }\n        public Relationship(JsonElement relJson)\n        {\n            if (relJson.IsNull()) return;\n\n            ScreenName = relJson.GetString(\"screen_name\");\n            Name = relJson.GetString(\"name\");\n            RetweetsWanted = relJson.GetBool(\"want_retweets\");\n            AllReplies = relJson.GetBool(\"all_replies\");\n            MarkedSpam = relJson.GetBool(\"marked_spam\");\n            ID = relJson.GetUlong(\"id\");\n            Blocking = relJson.GetBool(\"blocking\");\n            NotificationsEnabled = relJson.GetBool(\"notifications_enabled\");\n            CanDm = relJson.GetBool(\"can_dm\");\n            Muting = relJson.GetBool(\"muting\", false);\n\n            if (relJson.TryGetProperty(\"connections\", out JsonElement connections))\n                Connections =\n                    (from connection in connections.EnumerateArray()\n                     select connection.ToString())\n                    .ToList();\n            else\n                Connections = new List<string>();\n\n            FollowedBy = \n                relJson.GetBool(\"followed_by\") ||\n                Connections.Contains(\"followed_by\");\n            Following = \n                relJson.GetBool(\"following\") ||\n                Connections.Contains(\"following\");\n        }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// User's screen name\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// User's name\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Is this user following the other\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// Does the other user follow this one\n        /// </summary>\n        public bool FollowedBy { get; set; }\n\n        /// <summary>\n        /// Is this user blocking the other\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? Blocking { get; set; }\n\n        /// <summary>\n        /// Are this user's notifications enabled\n        /// (null means that Twitter doesn't provide the value for privacy reasons)\n        /// </summary>\n        public bool? NotificationsEnabled { get; set; }\n\n        /// <summary>\n        /// Does the user want to receive retweets from person they follow\n        /// </summary>\n        public bool RetweetsWanted { get; set; }\n\n        /// <summary>\n        /// Shows relationships between the logged in user and \n        /// the person identified by this relationship\n        /// </summary>\n        public List<string>? Connections { get; set; }\n\n        /// <summary>\n        /// Sees all replies\n        /// </summary>\n        public bool AllReplies { get; set; }\n\n        /// <summary>\n        /// Marked as SPAM\n        /// </summary>\n        public bool MarkedSpam { get; set; }\n\n        /// <summary>\n        /// Allowed to send direct messages\n        /// </summary>\n        public bool CanDm { get; set; }\n\n        /// <summary>\n        /// User is muted.\n        /// </summary>\n        public bool Muting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Friendship/TwitterContextFriendshipCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets logged-in user follow another user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User?> CreateFriendshipAsync(ulong userID, bool follow, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID is a required parameter.\", \"userID\");\n\n            string destroyUrl = BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string?>\n                {\n                    { \"user_id\", userID.ToString() }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n                createParams.Add(\"follow\", \"true\");\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    createParams,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Create);\n        }\n\n        /// <summary>\n        /// Lets logged-in user follow another user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to follow</param>\n        /// <param name=\"follow\">Receive notifications for the followed friend</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User?> CreateFriendshipAsync(string screenName, bool follow, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            string destroyUrl = BaseUrl + \"friendships/create.json\";\n\n            var createParams = new Dictionary<string, string?>\n                {\n                    { \"screen_name\", screenName }\n                };\n\n            // If follow exists in the parameter list, Twitter will\n            // always treat it as true, even if the value is false;\n            // Therefore, only add follow if it is true.\n            if (follow)\n                createParams.Add(\"follow\", \"true\");\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    createParams,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Create);\n        }\n\n        /// <summary>\n        /// Lets logged-in user un-follow another user.\n        /// </summary>\n        /// <param name=\"userID\">ID of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User?> DestroyFriendshipAsync(ulong userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"userID is a required parameter.\", \"userID\");\n\n            string destroyUrl = BaseUrl + \"friendships/destroy.json\";\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    new Dictionary<string, string?>\n                    {\n                        { \"user_id\", userID.ToString() }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Destroy);\n        }\n\n        /// <summary>\n        /// Lets logged-in user un-follow another user.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of user to unfollow</param>\n        /// <returns>followed friend user info</returns>\n        public async Task<User?> DestroyFriendshipAsync(string screenName, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"screenName is a required parameter.\", \"screenName\");\n\n            string destroyUrl = BaseUrl + \"friendships/destroy.json\";\n\n            var reqProc = new FriendshipRequestProcessor<User>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    destroyUrl,\n                    new Dictionary<string, string?>\n                    {\n                        { \"screen_name\", screenName }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Destroy);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public async Task<Friendship?> UpdateFriendshipSettingsAsync(string screenName, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentNullException(\"screenName\", \"screenName is a required parameter.\");\n\n            return await UpdateFriendshipSettingsAsync(0, screenName, retweets, device, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        public async Task<Friendship?> UpdateFriendshipSettingsAsync(ulong userID, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (userID == 0)\n                throw new ArgumentNullException(\"userID\", \"userID is a required parameter.\");\n\n            return await UpdateFriendshipSettingsAsync(0, null, retweets, device, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Lets logged-in user set retweets and/or device notifications for a follower.\n        /// </summary>\n        /// <param name=\"userID\">Twitter's ID for user</param>\n        /// <param name=\"screenName\">screen name of user to update</param>\n        /// <param name=\"retweets\">Enable retweets</param>\n        /// <param name=\"device\">Receive notifications</param>\n        /// <returns>updated friend user info</returns>\n        async Task<Friendship?> UpdateFriendshipSettingsAsync(ulong userID, string? screenName, bool retweets, bool device, CancellationToken cancelToken = default(CancellationToken))\n        {\n            var parms = new Dictionary<string, string?>\n            {\n                { \"retweets\", retweets.ToString().ToLower() },\n                { \"device\", device.ToString().ToLower() }\n            };\n\n            if (screenName != null) parms.Add(\"screen_name\", screenName);\n            if (userID > 0) parms.Add(\"user_id\", userID.ToString());\n\n            string updateUrl = BaseUrl + \"friendships/update.json\";\n\n            var reqProc = new FriendshipRequestProcessor<Friendship>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Friendship>(\n                    HttpMethod.Post.ToString(),\n                    updateUrl,\n                    parms,\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, FriendshipAction.Update);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/Coordinate.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical coordinates\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Coordinate\n    {\n        public const int LongitudePos = 0;\n        public const int LatitudePos = 1;\n\n        public Coordinate() { }\n        public Coordinate(JsonElement coord)\n        {\n            if (coord.IsNull())\n            {\n                IsLocationAvailable = false;\n                return;\n            }\n\n            IsLocationAvailable = true;\n\n            JsonElement[] coords = coord.EnumerateArray().ToArray();\n\n            Latitude = coords[LatitudePos].GetDouble();\n            Longitude = coords[LongitudePos].GetDouble();\n        }\n\n        /// <summary>\n        /// Type of Coordinate\n        /// </summary>\n        public string? Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        public bool IsLocationAvailable { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/Geo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geo info for querying and reading results\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Geo\n    {\n        public Geo() { }\n        public Geo(JsonElement geo)\n        {\n            if (geo.IsNull()) return;\n\n            geo.TryGetProperty(\"result\", out JsonElement result);\n\n            if (result.IsNull()) return;\n\n            result.TryGetProperty(\"places\", out JsonElement places);\n\n            if (result.TryGetProperty(\"token\", out JsonElement tokenValue))\n                Token = tokenValue.GetString();\n\n            if (!places.IsNull())\n            {\n                Places =\n                    (from place in places.EnumerateArray()\n                     select new Place(place))\n                    .ToList(); \n            }\n            else\n            {\n                Places = new List<Place>();\n            }\n        }\n\n        /// <summary>\n        /// Type of Geo query (Reverse or ID)\n        /// </summary>\n        public GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        public string? IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        public string? Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        public string? Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        public string? ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        public string? Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        public string? PlaceName { get; set; }\n\n        /// <summary>\n        /// Place token returned from a Similar Places query and used in CreatePlaceAsync\n        /// </summary>\n        public string? Token { get; set; }\n\n        /// <summary>\n        /// Results showing places matching query\n        /// </summary>\n        public List<Place>? Places { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string? ID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/GeoAction.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    enum GeoAction\n    {\n        CreatePlace\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/GeoRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Geo requests\n    /// </summary>\n    public class GeoRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T: class\n    {\n        const string AttributeParam = \"Attribute\";\n        const string IDParam = \"ID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of Geo operation (Reverse or ID)\n        /// </summary>\n        public GeoType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        /// <summary>\n        /// IP address to find nearby places\n        /// </summary>\n        public string? IP { get; set; }\n\n        /// <summary>\n        /// How accurate the results should be.\n        ///     - A number defaults to meters\n        ///     - Default is 0m\n        ///     - Feet is ft (as in 10ft)\n        /// </summary>\n        public string? Accuracy { get; set; }\n\n        /// <summary>\n        /// Size of place (i.e. neighborhood is default or city)\n        /// </summary>\n        public string? Granularity { get; set; }\n\n        /// <summary>\n        /// Number of places to return\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Any text you want to add to help find a place\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Place ID to restrict search to\n        /// </summary>\n        public string? ContainedWithin { get; set; }\n\n        /// <summary>\n        /// Name/value pair separated by \"=\" (i.e. \"street_address=123 4th Street\")\n        /// </summary>\n        public string? Attribute { get; set; }\n\n        /// <summary>\n        /// Name of place in similar places query\n        /// </summary>\n        public string? PlaceName { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Geo>(\n               lambdaExpression.Body,\n               new List<string> { \n                   nameof(Type),\n                   nameof(Latitude),\n                   nameof(Longitude),\n                   nameof(IP),\n                   nameof(Accuracy),\n                   nameof(Granularity),\n                   nameof(MaxResults),\n                   nameof(ID),\n                   nameof(Query),\n                   nameof(ContainedWithin),\n                   nameof(Attribute),\n                   nameof(PlaceName)\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<GeoType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    return BuildIDUrl(parameters);\n                case GeoType.Reverse:\n                    return BuildReverseUrl(parameters);\n                case GeoType.Search:\n                    return BuildSearchUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        void HandleAttributeParams(Dictionary<string, string> parameters, IList<QueryParameter> urlParams)\n        {\n            if (parameters.ContainsKey(AttributeParam))\n            {\n                // TODO: should really be able to search for more than one Attribute\n                Attribute = parameters[AttributeParam] ?? String.Empty;\n                var parts = Attribute.Split('=');\n\n                if (parts.Length < 2)\n                {\n                    throw new ArgumentException(\n                        \"Attribute must be a name/value pair (i.e. street_address=123); actual value: \" + Attribute,\n                        AttributeParam);\n                }\n\n                urlParams.Add(new QueryParameter(\"attribute:\" + parts[0], parts[1]));\n            }\n        }\n\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"IP\") &&\n                !parameters.ContainsKey(\"Query\") &&\n                !(parameters.ContainsKey(\"Latitude\") &&\n                  parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"Either Latitude and Longitude, Query, or IP address is required.\");\n\n            var req = new Request(BaseUrl + \"geo/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", Latitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", Longitude.ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n            \n            if (parameters.ContainsKey(\"IP\"))\n            {\n                IP = parameters[\"IP\"];\n                urlParams.Add(new QueryParameter(\"ip\", IP));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ContainedWithin\"))\n            {\n                ContainedWithin = parameters[\"ContainedWithin\"];\n                urlParams.Add(new QueryParameter(\"contained_within\", ContainedWithin));\n            }\n\n            HandleAttributeParams(parameters, urlParams);\n\n            return req;\n        }\n\n        Request BuildIDUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(IDParam))\n                throw new ArgumentException(\"ID is required for a Geo ID query.\", IDParam);\n\n            ID = parameters[IDParam];\n\n            var url = \"geo/id/\" + ID + \".json\";\n            return new Request(BaseUrl + url);\n        }\n\n        Request BuildReverseUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"Latitude\") || !parameters.ContainsKey(\"Longitude\"))\n            {\n                const string LatLongParam = \"LatLong\";\n                throw new ArgumentException(\"Latitude and Longitude parameters are required.\", LatLongParam);\n            }\n\n            var req = new Request(BaseUrl + \"geo/reverse_geocode.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"lat\", double.Parse(parameters[\"Latitude\"]).ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"], CultureInfo.InvariantCulture);\n                urlParams.Add(new QueryParameter(\"long\", double.Parse(parameters[\"Longitude\"]).ToString(Culture.US)));\n            }\n\n            if (parameters.ContainsKey(\"Accuracy\"))\n            {\n                Accuracy = parameters[\"Accuracy\"];\n                urlParams.Add(new QueryParameter(\"accuracy\", Accuracy));\n            }\n\n            if (parameters.ContainsKey(\"Granularity\"))\n            {\n                Granularity = parameters[\"Granularity\"];\n                urlParams.Add(new QueryParameter(\"granularity\", Granularity));\n            }\n\n            if (parameters.ContainsKey(\"MaxResults\"))\n            {\n                MaxResults = int.Parse(parameters[\"MaxResults\"]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response into List of Geo.\n        /// </summary>\n        /// <param name=\"responseJson\">Json with Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonElement geoJson = JsonDocument.Parse(responseJson).RootElement;\n\n            Geo geo;\n\n            switch (Type)\n            {\n                case GeoType.ID:\n                    geo = new Geo\n                    {\n                        Places = new List<Place> { new Place(geoJson) }\n                    };\n                    break;\n                case GeoType.Reverse:\n                case GeoType.Search:\n                default:\n                    geo = new Geo();\n                    break;\n            }\n\n            geo.Type = Type;\n            geo.Accuracy = Accuracy;\n            geo.Granularity = Granularity;\n            geo.ID = ID;\n            geo.Latitude = Latitude;\n            geo.Longitude = Longitude;\n            geo.IP = IP;\n            geo.MaxResults = MaxResults;\n            geo.Query = Query;\n            geo.ContainedWithin = ContainedWithin;\n            geo.Attribute = Attribute;\n            geo.PlaceName = PlaceName;\n                \n            return new List<Geo> { geo }.OfType<T>().ToList();\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement geoJson = JsonDocument.Parse(responseJson).RootElement;\n\n            switch ((GeoAction)theAction)\n            {\n                case GeoAction.CreatePlace:\n                    var place = new Place(geoJson);\n                    return place.ItemCast(default(T));\n                default:\n                    throw new InvalidOperationException(\"Unknown Action.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/GeoType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// For working with Twitter Geo places\n    /// </summary>\n    public enum GeoType\n    {\n        /// <summary>\n        /// Get a list of valid places (from Twitter) that can be attached to an Update\n        /// </summary>\n        Reverse,\n\n        /// <summary>\n        /// Get more details on a place (found via GeoType.Reverse)\n        /// </summary>\n        ID,\n\n        /// <summary>\n        /// Performs a search, based on various criteria\n        /// </summary>\n        Search,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/Geometry.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical area\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Geometry\n    {\n        public Geometry() {}\n        public Geometry(JsonElement geometry)\n        {\n            if (geometry.IsNull()) return;\n\n            Type = geometry.GetString(\"type\");\n\n            geometry.TryGetProperty(\"coordinates\", out JsonElement coordinates);\n            Coordinates =\n                (from outer in coordinates.EnumerateArray()\n                 from coord in outer.EnumerateArray()\n                 select new Coordinate(coord))\n                .ToList();\n        }\n\n        /// <summary>\n        /// Type of bouding box\n        /// </summary>\n        public string? Type { get; set; }\n\n        /// <summary>\n        /// Coordinates for bounding box\n        /// </summary>\n        public List<Coordinate>? Coordinates { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Geo/Place.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Xml.Serialization;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A general description of a geographical location in Twitter\n    /// </summary>\n    [XmlType(Namespace=\"LinqToTwitter\")]\n    public class Place\n    {\n        public Place() {}\n        public Place(JsonElement place)\n        {\n            if (place.IsNull()) return;\n\n            ID = place.GetString(\"id\");\n            Name = place.GetString(\"name\");\n            Country = place.GetString(\"country\");\n            CountryCode = place.GetString(\"country_code\");\n            FullName = place.GetString(\"full_name\");\n            PlaceType = place.GetString(\"place_type\");\n            Url = place.GetString(\"url\");\n            place.TryGetProperty(\"bounding_box\", out JsonElement boundingBoxValue);\n            BoundingBox = new Geometry(boundingBoxValue);\n            place.TryGetProperty(\"geometry\", out JsonElement geometryValue);\n            Geometry = new Geometry(geometryValue);\n\n            place.TryGetProperty(\"contained_within\", out JsonElement containedWithin);\n            ContainedWithin = \n                !containedWithin.IsNull() && containedWithin.GetArrayLength() > 0 ? \n                    new Place(containedWithin[0]) :\n                    null;\n\n            place.TryGetProperty(\"polylines\", out JsonElement polyLines);\n            PolyLines = \n                polyLines.IsNull() ? \n                    new List<string>() \n                        : \n                    (from line in polyLines.EnumerateArray()\n                     select line.GetString())\n                    .ToList();\n\n            place.TryGetProperty(\"attributes\", out JsonElement attributes);\n            Attributes =\n                attributes\n                    .EnumerateObject()\n                    .ToDictionary(\n                        attr => attr.Name,\n                        attr => attr.Value.GetString() ?? string.Empty);\n        }\n\n        /// <summary>\n        /// Name of place\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Country code abbreviation\n        /// </summary>\n        public string? CountryCode { get; set; }\n\n        /// <summary>\n        /// Place ID\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Name of country\n        /// </summary>\n        public string? Country { get; set; }\n\n        /// <summary>\n        /// Type of place (i.e. neighborhood, city, country, etc.)\n        /// </summary>\n        public string? PlaceType { get; set; }\n\n        /// <summary>\n        /// Url to get more details on place\n        /// </summary>\n        public string? Url { get; set; }\n\n        /// <summary>\n        /// Full name of place\n        /// </summary>\n        public string? FullName { get; set; }\n\n        /// <summary>\n        /// Place related metadata\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string>? Attributes { get; set; }\n\n        /// <summary>\n        /// Geographical outline of place\n        /// </summary>\n        public Geometry? BoundingBox { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public Geometry? Geometry { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<string>? PolyLines { get; set; }\n\n        /// <summary>\n        /// Containing place (i.e. a neighborhood is contained within a city)\n        /// </summary>\n        public Place? ContainedWithin { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Help/Help.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Help\n    {\n        /// <summary>\n        /// Help Type (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        public string? Resources { get; set; }\n\n        /// <summary>\n        /// Will be true if help Test succeeds\n        /// </summary>\n        public bool OK { get; set; }\n\n        /// <summary>\n        /// Terms of service or Privacy\n        /// </summary>\n        public string? Policies { get; set; }\n\n        /// <summary>\n        /// List of languages, codes, and statuses\n        /// </summary>\n        public List<Language>? Languages { get; set; }\n\n        /// <summary>\n        /// Access token for which rate limit applies\n        /// </summary>\n        public string? RateLimitAccountContext { get; set; }\n\n        /// <summary>\n        /// Rate limit statuses\n        /// </summary>\n        public Dictionary<string, List<RateLimits>>? RateLimits { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Help/HelpRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Used for Help queries\n    /// </summary>\n    public class HelpRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of Help request (Test, Configuration, or Languages)\n        /// </summary>\n        public HelpType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of resources for rate limit status request (setting to null returns all)\n        /// </summary>\n        internal string? Resources { get; set; }\n\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Help>(\n               lambdaExpression.Body,\n               new List<string> { \n                   \"Type\",\n                   \"Resources\"\n               })\n               .Parameters;\n        }\n\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<HelpType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case HelpType.Languages:\n                    return new Request(BaseUrl + \"help/languages.json\");\n                case HelpType.RateLimits:\n                    return BuildRateLimitsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildRateLimitsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"application/rate_limit_status.json\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Resources\"))\n            {\n                Resources = parameters[\"Resources\"];\n                urlParams.Add(new QueryParameter(\"resources\", Resources.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// return response from help request\n        /// </summary>\n        /// <param name=\"responseJson\">response from twitter</param>\n        /// <returns>true</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            Help help;\n            JsonElement helpJson = JsonDocument.Parse(responseJson).RootElement;\n\n            switch (Type)\n            {\n                case HelpType.Languages:\n                    help = HandleHelpLanguages(helpJson);\n                    break;\n                case HelpType.RateLimits:\n                    help = HandleHelpRateLimits(helpJson);\n                    break;\n                default:\n                    help = new Help();\n                    break;\n            }\n\n            var helpList = new List<Help> { help };\n\n            return helpList.OfType<T>().ToList();\n        }\n\n        Help HandleHelpLanguages(JsonElement helpJson)\n        {\n            return new Help\n            {\n                Type = HelpType.Languages,\n                Languages =\n                    (from lang in helpJson.EnumerateArray()\n                     select new Language\n                     {\n                         Code = lang.GetString(\"code\"),\n                         Name = lang.GetString(\"name\"),\n                         Status = lang.GetString(\"status\")\n                     })\n                    .ToList()\n            };\n        }\n\n        Help HandleHelpRateLimits(JsonElement helpJson)\n        {\n            if (helpJson.TryGetProperty(\"rate_limit_context\", out JsonElement context) &&\n                helpJson.TryGetProperty(\"resources\", out JsonElement resources))\n                return new Help\n                {\n                    Type = HelpType.RateLimits,\n                    Resources = Resources,\n                    RateLimitAccountContext = context.GetString(\"access_token\"),\n                    RateLimits =\n                        (from key in resources.EnumerateObject()\n                         let category = resources.GetProperty(key.Name)\n                         select new\n                         {\n                             Key = key,\n                             Value =\n                                (from cat in category.EnumerateObject()\n                                 let limit = category.GetProperty(cat.Name)\n                                 select new RateLimits\n                                 {\n                                     Resource = cat.Name,\n                                     Limit = limit.GetInt(\"limit\"),\n                                     Remaining = limit.GetInt(\"remaining\"),\n                                     Reset = limit.GetUlong(\"reset\")\n                                 })\n                                .ToList()\n                         })\n                        .ToDictionary(\n                            key => key.Key.Name,\n                            val => val.Value)\n                };\n            else\n                return new Help();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Help/HelpType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum HelpType\n    {\n        /// <summary>\n        /// Languages supported by Twitter\n        /// </summary>\n        Languages,\n\n        /// <summary>\n        /// Provides Rate Limit Status\n        /// </summary>\n        RateLimits,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Help/Language.cs",
    "content": "﻿using System.Xml.Serialization;\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Language\n    {\n        /// <summary>\n        /// Long description of language name\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Two character major language code\n        /// </summary>\n        public string? Code { get; set; }\n\n        /// <summary>\n        /// Twitter status\n        /// </summary>\n        public string? Status { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Help/RateLimits.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class RateLimits\n    {\n        /// <summary>\n        /// Url Segment representing resource that rate limits apply to\n        /// </summary>\n        public string? Resource { get; set; }\n\n        /// <summary>\n        /// Number of requests left in this time period\n        /// </summary>\n        public int Remaining { get; set; }\n\n        /// <summary>\n        /// Epoch seconds when rate limits reset\n        /// </summary>\n        public ulong Reset { get; set; }\n\n        /// <summary>\n        /// Number of requests allowed\n        /// </summary>\n        public int Limit { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/LikeMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record LikeMeta\n    {\n        [JsonPropertyName(\"result_count\")]\n        public int ResultCount { get; set; }\n\n        [JsonPropertyName(\"next_token\")]\n        public string? NextToken { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/LikeQuery.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record LikeQuery\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of blocks request to perform (input only)\n        /// </summary>\n        public LikeType? Type { get; set; }\n\n        /// <summary>\n        /// ID of user performing the block\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<Tweet>? Tweets { get; init; }\n\n        [JsonPropertyName(\"meta\")]\n        public LikeMeta? Meta { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/LikeRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes block queries\n    /// </summary>\n    public class LikeRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of blocks request to perform\n        /// </summary>\n        public LikeType? Type { get; set; }\n\n        /// <summary>\n        /// ID of user performing the block\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<LikeQuery>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Expansions),\n                       nameof(ID),\n                       nameof(MaxResults),\n                       nameof(MediaFields),\n                       nameof(PaginationToken),\n                       nameof(PlaceFields),\n                       nameof(PollFields),\n                       nameof(TweetFields),\n                       nameof(UserFields)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<LikeType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case LikeType.Lookup:\n                    return BuildLookupUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for looking up blocked users\n        /// </summary>\n        /// <param name=\"parameters\">parameter list</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/liked_tweets\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                MaxResults = int.Parse(parameters[nameof(MaxResults)]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString()));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Used by timeline queries - sets parameter, but doesn't treat as a query parameter.\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters</param>\n        void SetUserID(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(ID)))\n                ID = parameters[nameof(ID)];\n            else\n                throw new ArgumentException($\"{nameof(ID)} is required\", nameof(ID));\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <returns>List of Blocks</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<LikeQuery> likes;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                likes = new List<LikeQuery>();\n            }\n            else\n            {\n                switch (Type)\n                {\n                    case LikeType.Lookup:\n                        LikeQuery likesResult = JsonDeserialize(responseJson);\n                        likes = new List<LikeQuery> { likesResult };\n                        break;\n                    default:\n                        throw new ArgumentException(\"Unhandled LikeType.\");\n                }\n            }\n\n            return likes.OfType<T>().ToList();\n        }\n\n        LikeQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter(),\n                    new TweetReplySettingsConverter()\n                }\n            };\n            LikeQuery? blocks = JsonSerializer.Deserialize<LikeQuery>(responseJson, options);\n\n            if (blocks?.Meta == null || blocks.Meta.ResultCount == 0)\n                return new LikeQuery\n                {\n                    Type = Type,\n                    ID = ID,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    MediaFields = MediaFields,\n                    PaginationToken = PaginationToken,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields\n                };\n            else\n                return blocks with\n                {\n                    Type = Type,\n                    ID = ID,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    MediaFields = MediaFields,\n                    PaginationToken = PaginationToken,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields\n                };\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement blocksJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var user = new User(blocksJson);\n\n            return user.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/LikeType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum LikeType\n    {\n        /// <summary>\n        /// List of tweets a user has liked\n        /// </summary>\n        Lookup\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/LikedResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record LikedResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public TweetLiked? Data { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/LikedTweetID.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class LikedTweetID\n    {\n        [JsonPropertyName(\"tweet_id\")]\n        public string TweetID { get; set; } = string.Empty;\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/TweetLiked.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetLiked\n    {\n        [JsonPropertyName(\"liked\")]\n        public bool Liked { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Like/TwitterContextLikeCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Likes a tweet\n        /// </summary>\n        /// <param name=\"userID\">ID of user who is liking tweet</param>\n        /// <param name=\"tweetID\">ID of the tweet being liked</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <returns>Hidden status of reply - true if reply is hidden</returns>\n        public async Task<LikedResponse?> LikeAsync(string userID, string tweetID, CancellationToken cancelToken = default)\n        {\n            _ = userID ?? throw new ArgumentNullException(nameof(userID), $\"{nameof(userID)} is required.\");\n            _ = tweetID ?? throw new ArgumentNullException(nameof(tweetID), $\"{nameof(tweetID)} is required.\");\n\n            string url = $\"{BaseUrl2}users/{userID}/likes\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new LikedTweetID { TweetID = tweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            LikedResponse? result = JsonSerializer.Deserialize<LikedResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Unlikes a tweet\n        /// </summary>\n        /// <param name=\"userID\">ID of user who is liking tweet</param>\n        /// <param name=\"tweetID\">ID of the tweet being liked</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <returns>Hidden status of reply - false if reply is no longer hidden</returns>\n        public async Task<LikedResponse?> UnlikeAsync(string userID, string tweetID, CancellationToken cancelToken = default)\n        {\n            _ = userID ?? throw new ArgumentNullException(nameof(userID), $\"{nameof(userID)} is required.\");\n            _ = tweetID ?? throw new ArgumentNullException(nameof(tweetID), $\"{nameof(tweetID)} is required.\");\n\n            string url = $\"{BaseUrl2}users/{userID}/likes/{tweetID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new LikedTweetID { TweetID = tweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            LikedResponse? result = JsonSerializer.Deserialize<LikedResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/LinqToTwitter.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<TargetFramework>net6.0</TargetFramework>\n\t\t<Nullable>enable</Nullable>\n\t\t<Description>LINQ to Twitter is a 3rd party LINQ Provider that lets you tweet and query with the Twitter API.</Description>\n\t\t<Version>6.15.0</Version>\n\t\t<Authors>Joe Mayo</Authors>\n\t\t<Company>Joe Mayo</Company>\n\t\t<PackageId>linqtotwitter</PackageId>\n\t\t<Product>LINQ to Twitter</Product>\n\t\t<SignAssembly>true</SignAssembly>\n\t\t<AssemblyOriginatorKeyFile>LinqToTwitter.snk</AssemblyOriginatorKeyFile>\n\t\t<PackageLicenseExpression>MIT</PackageLicenseExpression>\n\t\t<PackageProjectUrl>https://github.com/JoeMayo/LinqToTwitter</PackageProjectUrl>\n\t\t<PackageIcon>200xColor_2.png</PackageIcon>\n\t\t<RepositoryUrl>https://github.com/JoeMayo/LinqToTwitter</RepositoryUrl>\n\t\t<PackageTags>twitter twitterapi twitterdev tweet linq social linqtotwitter linq2twitter</PackageTags>\n\t\t<PackageReleaseNotes>\n- Upgraded to .NET 6 (Thanks Adam Swanson)\n- Updated Issue/General Templates (Thanks Jaap)\n- Updated license to MIT\n- Implements Bookmarks\n- Supports Quote Tweets\n- Includes Reverse Chronological Timelines\n- Adds polls to Tweet Include Responses\n- Supports NewestID and OldestID in TweetMeta\n- Improved error message handling\n- Updated Raw Queries to use Twitter API v2 Base URL\n- Supports ID on TweetEntityMention\n- Fixed PlaceField.CountryCode spelling\n- Added error handling for new JSON format on duplicate tweets\n- Added subscriber_count and other fields to Space queries\n- Implemented Search Sort Order\n\t\t</PackageReleaseNotes>\n\t\t<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>\n\t\t<GeneratePackageOnBuild>false</GeneratePackageOnBuild>\n\t\t<PackageReadmeFile>ReadMe.md</PackageReadmeFile>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<PackageReference Include=\"System.Text.Json\" Version=\"6.0.3\" />\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t  <None Include=\"..\\..\\..\\BuildScripts\\200xColor_2.png\">\n\t    <Pack>True</Pack>\n\t    <PackagePath></PackagePath>\n\t  </None>\n\t  <None Include=\"..\\..\\..\\ReadMe.md\">\n\t    <Pack>True</Pack>\n\t    <PackagePath>\\</PackagePath>\n\t  </None>\n\t  <None Include=\"..\\.editorconfig\" Link=\".editorconfig\" />\n\t</ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/List.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Information for a single Twitter List\n    /// </summary>\n    public class List\n    {\n        /// <summary>\n        /// When created\n        /// </summary>\n        [JsonPropertyName(\"created_at\")]\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// What this list is about\n        /// </summary>\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; set; }\n\n        /// <summary>\n        /// Number of users following this list\n        /// </summary>\n        [JsonPropertyName(\"follower_count\")]\n        public int FollowerCount { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Number of users are members in this list\n        /// </summary>\n        [JsonPropertyName(\"member_count\")]\n        public int MemberCount { get; set; }\n\n        /// <summary>\n        /// List Name\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// ID of user who is the list owner\n        /// </summary>\n        [JsonPropertyName(\"owner_id\")]\n        public string? OwnerID { get; set; }\n\n        /// <summary>\n        /// Can only the owner see this list?\n        /// </summary>\n        [JsonPropertyName(\"private\")]\n        public bool Private { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum ListAction\n    {\n        Create,\n\n        Update,\n\n        Delete,\n\n        AddMember,\n\n        AddMemberRange,\n\n        DeleteMember,\n\n        Subscribe,\n\n        Unsubscribe, \n\n        DestroyAll\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListConverter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Some queries return only one list, rather than an array of lists.\n    /// This ensures we deserialize to a List<<see cref=\"List\"/>> regardless.\n    /// </summary>\n    public class ListConverter : JsonConverter<List<List>>\n    {\n        public override List<List>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\n        {\n            using var jsonDoc = JsonDocument.ParseValue(ref reader);\n            string? input = jsonDoc.RootElement.GetRawText();\n\n            if (reader.TokenType == JsonTokenType.StartArray || \n                reader.TokenType == JsonTokenType.EndArray) // is array of lists\n            {\n                return JsonSerializer.Deserialize<List<List>>(input);\n            }\n            else // is single list\n            {\n                List? list = JsonSerializer.Deserialize<List>(input);\n                return list == null ? null : (new() { list });\n            }\n        }\n\n        public override void Write(Utf8JsonWriter writer, List<List> value, JsonSerializerOptions options)\n        {\n            writer.WriteStringValue(JsonSerializer.Serialize(value));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListCreateOrUpdateRequest.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ListCreateOrUpdateRequest\n    {\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; set; }\n        [JsonPropertyName(\"private\")]\n        public bool Private { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListDeleteRequest.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ListDeleteRequest\n    {\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListFollowOrPinRequest.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ListFollowOrPinRequest\n    {\n        [JsonPropertyName(\"list_id\")]\n        public string? ListID { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListMemberRequest.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ListMemberRequest\n    {\n        [JsonPropertyName(\"user_id\")]\n        public string? UserID { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Metadata for list queries\n    /// </summary>\n    public class ListMeta\n    {\n        /// <summary>\n        /// Number of results returned\n        /// </summary>\n        [JsonPropertyName(\"result_count\")] \n        public int ResultCount { get; set; }\n\n        /// <summary>\n        /// Token for previous page results\n        /// </summary>\n        [JsonPropertyName(\"previous_token\")]\n        public string? PreviousToken { get; set; }\n\n        /// <summary>\n        /// Token for next page events\n        /// </summary>\n        [JsonPropertyName(\"next_token\")]\n        public string? NextToken { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListQuery.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Request and Response for List queries\n    /// </summary>\n    public record ListQuery\n    {\n        //\n        // These are the available input parameters, depending on query type\n        //\n\n        /// <summary>\n        /// type of list to query\n        /// </summary>\n        public ListType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of list fields - <see cref=\"ListFields\"/>\n        /// </summary>\n        public string? ListFields { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        public string? ListID { get; set; }\n\n        /// <summary>\n        /// Max number of results\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Used to get the next page of results\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public string? UserID { get; set; }\n\n        //\n        // Output returned from query\n        //\n\n        /// <summary>\n        /// Lists response\n        /// </summary>\n        [JsonConverter(typeof(ListConverter))]\n        [JsonPropertyName(\"data\")]\n        public List<List>? Lists { get; init; }\n\n        /// <summary>\n        /// Include data, depends on query\n        /// </summary>\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; set; }\n\n        /// <summary>\n        /// Metadata with count and paging details\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public ListMeta? Meta { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class ListRequestProcessor<T> : \n        IRequestProcessor<T>, \n        IRequestProcessorWantsJson\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of list to query\n        /// </summary>\n        public ListType Type { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of list fields - <see cref=\"ListField\"/>\n        /// </summary>\n        public string? ListFields { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        public string? ListID { get; set; }\n\n        /// <summary>\n        /// Max number of results\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Used to get the next page of results\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public string? UserID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<ListQuery>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Expansions),\n                       nameof(ListFields),\n                       nameof(ListID),\n                       nameof(MaxResults),\n                       nameof(PaginationToken),\n                       nameof(UserFields),\n                       nameof(UserID),\n                   })\n                   .Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentNullException(nameof(Type), \"You must set Type.\");\n\n            Type = RequestProcessorHelper.ParseEnum<ListType>(parameters[nameof(Type)]);\n\n            return Type switch\n            {\n                ListType.Lookup => BuildLookupUrl(parameters),\n                ListType.Owned => BuildOwnedUrl(parameters),\n                ListType.Member => BuildMemberUrl(parameters),\n                ListType.Following => BuildFollowUrl(parameters),\n                ListType.Pinned => BuildPinnedUrl(parameters),\n                _ => throw new ArgumentException(\"Invalid ListType\", nameof(Type)),\n            };\n        }\n\n        record ParameterSpec(string ParamName, Action<string> Setter, bool ReplaceWhitespace);\n\n        /// <summary>\n        /// Builds URL to retrieve a specified list.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ListID), val => ListID = val);\n\n            var req = new Request($\"{BaseUrl}lists/{ListID}\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(ListFields)))\n            {\n                ListFields = parameters[nameof(ListFields)];\n                urlParams.Add(new QueryParameter(\"list.fields\", ListFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve a specified list.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildOwnedUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(UserID), val => UserID = val);\n\n            var req = new Request($\"{BaseUrl}users/{UserID}/owned_lists\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(ListFields)))\n            {\n                ListFields = parameters[nameof(ListFields)];\n                urlParams.Add(new QueryParameter(\"list.fields\", ListFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve lists a user is a member of.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildMemberUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(UserID), val => UserID = val);\n\n            var req = new Request($\"{BaseUrl}users/{UserID}/list_memberships\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(ListFields)))\n            {\n                ListFields = parameters[nameof(ListFields)];\n                urlParams.Add(new QueryParameter(\"list.fields\", ListFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve users followed lists.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildFollowUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(UserID), val => UserID = val);\n\n            var req = new Request($\"{BaseUrl}users/{UserID}/followed_lists\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(ListFields)))\n            {\n                ListFields = parameters[nameof(ListFields)];\n                urlParams.Add(new QueryParameter(\"list.fields\", ListFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve user's pinned lists.\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildPinnedUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(UserID), val => UserID = val);\n\n            var req = new Request($\"{BaseUrl}users/{UserID}/pinned_lists\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(ListFields)))\n            {\n                ListFields = parameters[nameof(ListFields)];\n                urlParams.Add(new QueryParameter(\"list.fields\", ListFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List.\n        /// </summary>\n        /// <param name=\"responseJson\">Json Twitter response</param>\n        /// <returns>List of List</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<ListQuery> list;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                list = new List<ListQuery> { new ListQuery() };\n            }\n            else\n            {\n                var result = JsonDeserialize(responseJson);\n                list = new List<ListQuery> { result };\n            }\n\n            return list.OfType<T>().ToList();\n        }\n\n        ListQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter()\n                }\n            };\n            ListQuery? list = JsonSerializer.Deserialize<ListQuery>(responseJson, options);\n\n            if (list == null)\n                return new ListQuery\n                {\n                    Type = Type,\n                    Expansions = Expansions,\n                    ListFields = ListFields,\n                    ListID = ListID,\n                    MaxResults = MaxResults,\n                    PaginationToken = PaginationToken,\n                    UserFields = UserFields,\n                    UserID = UserID,\n                };\n            else\n                return list with\n                {\n                    Type = Type,\n                    Expansions = Expansions,\n                    ListFields = ListFields,\n                    ListID = ListID,\n                    MaxResults = MaxResults,\n                    PaginationToken = PaginationToken,\n                    UserFields = UserFields,\n                    UserID = UserID\n                };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListResponse.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class ListResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public ListResponseData? Data { get; init; }\n\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListResponseData.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record ListResponseData\n    {\n        /// <summary>\n        /// When created\n        /// </summary>\n        [JsonPropertyName(\"created_at\")]\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// What this list is about\n        /// </summary>\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; set; }\n\n        /// <summary>\n        /// Number of users following this list\n        /// </summary>\n        [JsonPropertyName(\"follower_count\")]\n        public int FollowerCount { get; set; }\n\n        /// <summary>\n        /// List ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Number of users are members in this list\n        /// </summary>\n        [JsonPropertyName(\"member_count\")]\n        public int MemberCount { get; set; }\n\n        /// <summary>\n        /// List Name\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// ID of user who is the list owner\n        /// </summary>\n        [JsonPropertyName(\"owner_id\")]\n        public string? OwnerID { get; set; }\n\n        /// <summary>\n        /// Can only the owner see this list?\n        /// </summary>\n        [JsonPropertyName(\"private\")]\n        public bool Private { get; set; }\n\n        //\n        // The following properties are only returned for commands\n        //\n\n        [JsonPropertyName(\"updated\")]\n        public bool Updated { get; set; }\n\n        [JsonPropertyName(\"deleted\")]\n        public bool Deleted { get; set; }\n\n        [JsonPropertyName(\"is_member\")]\n        public bool IsMember { get; set; }\n\n        [JsonPropertyName(\"following\")]\n        public bool Following { get; set; }\n\n        [JsonPropertyName(\"pinned\")]\n        public bool Pinned { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/ListType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Available types of queries for the Twitter Lists API\n    /// </summary>\n    public enum ListType\n    {\n        /// <summary>\n        /// Get list by ID\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// Get lists that a user owns\n        /// </summary>\n        Owned,\n\n        /// <summary>\n        /// Gets lists that a user is a member of\n        /// </summary>\n        Member,\n\n        /// <summary>\n        /// Get lists that user is following\n        /// </summary>\n        Following,\n\n        /// <summary>\n        /// Gets lists that user has pinned\n        /// </summary>\n        Pinned,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/List/TwitterContextListCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        public const string ListIDOrSlugParam = \"ListIdOrSlug\";\n        public const string OwnerIDOrOwnerScreenNameParam = \"OwnerIdOrOwnerScreenName\";\n        public const string UserIDOrScreenNameParam = \"UserIdOrScreenName\";\n\n        /// <summary>\n        /// Creates a new list.\n        /// </summary>\n        /// <param name=\"name\">name of list</param>\n        /// <param name=\"description\">list description</param>\n        /// <param name=\"isPrivate\">true or false</param>\n        /// <returns>List info for new list - <see cref=\"ListResponse\"/></returns>\n        public async Task<ListResponse?> CreateListAsync(string name, string description, bool isPrivate, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = name ?? throw new ArgumentException($\"{nameof(name)} is required.\", nameof(name));\n\n            var url = $\"{BaseUrl2}lists\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListCreateOrUpdateRequest \n            {\n                Name = name,\n                Description = description,\n                Private = isPrivate,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Modifies an existing list.\n        /// </summary>\n        /// <param name=\"id\">ID of list</param>\n        /// <param name=\"name\">name of list</param>\n        /// <param name=\"description\">list description</param>\n        /// <param name=\"isPrivate\">true or false</param>\n        /// <returns><see cref=\"ListResponseData.Updated\"/> true or false</returns>\n        public async Task<ListResponse?> UpdateListAsync(string id, string name, string description, bool isPrivate, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = id ?? throw new ArgumentException($\"{nameof(id)} is required.\", nameof(id));\n\n            var url = $\"{BaseUrl2}lists/{id}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListCreateOrUpdateRequest\n            {\n                Name = name,\n                Description = description,\n                Private = isPrivate,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Deletes an existing list.\n        /// </summary>\n        /// <param name=\"id\">ID of list</param>\n        /// <returns><see cref=\"ListResponseData.Deleted\"/> true or false</returns>\n        public async Task<ListResponse?> DeleteListAsync(string id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = id ?? throw new ArgumentException($\"{nameof(id)} is required.\", nameof(id));\n\n            var url = $\"{BaseUrl2}lists/{id}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListDeleteRequest\n            {\n                ID = id\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Adds a user as a list member.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"userID\">ID of user to add to list.</param>\n        /// <returns><see cref=\"ListResponse.Data\"/> confirms add</returns>\n        public async Task<ListResponse?> AddMemberToListAsync(string listID, string userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = listID ?? throw new ArgumentException($\"{nameof(listID)} is required.\", nameof(listID));\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is required.\", nameof(userID));\n\n            var url = $\"{BaseUrl2}lists/{listID}/members\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListMemberRequest\n            {\n                UserID = userID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Removes a user as a list member.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"userID\">ID of user to remove from list.</param>\n        /// <returns><see cref=\"ListResponse.Data\"/> confirms delete</returns>\n        public async Task<ListResponse?> DeleteMemberFromListAsync(string listID, string userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = listID ?? throw new ArgumentException($\"{nameof(listID)} is required.\", nameof(listID));\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is required.\", nameof(userID));\n\n            var url = $\"{BaseUrl2}lists/{listID}/members/{userID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListMemberRequest\n            {\n                UserID = userID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Adds a user as a list follower.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"userID\">ID of user to follow list.</param>\n        /// <returns><see cref=\"ListResponse.Data\"/> confirms add</returns>\n        public async Task<ListResponse?> AddFollowerToListAsync(string listID, string userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = listID ?? throw new ArgumentException($\"{nameof(listID)} is required.\", nameof(listID));\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is required.\", nameof(userID));\n\n            var url = $\"{BaseUrl2}users/{userID}/followed_lists\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListFollowOrPinRequest\n            {\n                ListID = listID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Removes a user as a list follower.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"userID\">ID of user to unfollow from list.</param>\n        /// <returns><see cref=\"ListResponse.Data\"/> confirms delete</returns>\n        public async Task<ListResponse?> DeleteFollowerFromListAsync(string listID, string userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = listID ?? throw new ArgumentException($\"{nameof(listID)} is required.\", nameof(listID));\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is required.\", nameof(userID));\n\n            var url = $\"{BaseUrl2}users/{userID}/followed_lists/{listID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListFollowOrPinRequest\n            {\n                ListID = listID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Pins a list for a user.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"userID\">ID of user to follow list.</param>\n        /// <returns><see cref=\"ListResponse.Data\"/> confirms add</returns>\n        public async Task<ListResponse?> PinListAsync(string listID, string userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = listID ?? throw new ArgumentException($\"{nameof(listID)} is required.\", nameof(listID));\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is required.\", nameof(userID));\n\n            var url = $\"{BaseUrl2}users/{userID}/pinned_lists\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListFollowOrPinRequest\n            {\n                ListID = listID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Unpins a list for a user.\n        /// </summary>\n        /// <param name=\"listID\">ID of list.</param>\n        /// <param name=\"userID\">ID of user to unfollow from list.</param>\n        /// <returns><see cref=\"ListResponse.Data\"/> confirms delete</returns>\n        public async Task<ListResponse?> UnpinListAsync(string listID, string userID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = listID ?? throw new ArgumentException($\"{nameof(listID)} is required.\", nameof(listID));\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is required.\", nameof(userID));\n\n            var url = $\"{BaseUrl2}users/{userID}/pinned_lists/{listID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new ListFollowOrPinRequest\n            {\n                ListID = listID\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            ListResponse? result = JsonSerializer.Deserialize<ListResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/Media.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Media\n    {\n        public const string StatusCommand = \"STATUS\";\n\n        public Media() { }\n        public Media(JsonElement media)\n        {\n            if (media.IsNull()) return;\n\n            media.TryGetProperty(\"image\", out JsonElement imageValue);\n            Image = new MediaImage(imageValue);\n            MediaID = (media.GetString(\"media_id_string\") ?? \"0\").GetULong();\n            Size = media.GetInt(\"size\");\n            media.TryGetProperty(\"video\", out JsonElement video);\n            VideoType = video.GetString(\"video_type\");\n            ExpiresAfterSeconds = media.GetInt(\"expires_after_secs\");\n            media.TryGetProperty(\"processing_info\", out JsonElement processingInfoValue);\n            ProcessingInfo = new MediaProcessingInfo(processingInfoValue);\n        }\n\n        public MediaType? Type { get; set; }\n\n        public string? Command { get; set; }\n\n        public ulong MediaID { get; set; }\n\n        public MediaImage? Image { get; set; }\n\n        public int Size { get; set; }\n\n        public int ExpiresAfterSeconds { get; set; }\n\n        public string? VideoType { get; set; }\n\n        public MediaProcessingInfo? ProcessingInfo { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/MediaError.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    public class MediaError\n    {\n        public MediaError() { }\n        public MediaError(JsonElement error)\n        {\n            if (error.IsNull()) return;\n\n            Code = error.GetInt(\"code\");\n            Name = error.GetString(\"name\");\n            Message = error.GetString(\"message\");\n        }\n\n        /// <summary>\n        /// Code number from Twitter\n        /// </summary>\n        public int Code { get; set; }\n\n        /// <summary>\n        /// Name of the error\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Description of why the error occurred\n        /// </summary>\n        public string? Message { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/MediaImage.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class MediaImage\n    {\n        public MediaImage(JsonElement image)\n        {\n            if (image.IsNull()) return;\n\n            Width = image.GetInt(\"w\");\n            Height = image.GetInt(\"h\");\n            ImageType = image.GetString(\"image_type\");\n        }\n\n        public int Width { get; set; }\n\n        public int Height { get; set; }\n\n        public string? ImageType { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/MediaMetadata.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class MediaMetadata\n    {\n        [JsonPropertyName(\"media_id\")]\n        public ulong MediaID { get; set; }\n        [JsonPropertyName(\"alt_text\")]\n        public AltText? AltText { get; set; }\n    }\n\n    public class AltText\n    {\n        [JsonPropertyName(\"text\")]\n        public string? Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/MediaProcessingInfo.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    public class MediaProcessingInfo\n    {\n        public const string InProgress = \"in_progress\";\n        public const string Failed = \"failed\";\n        public const string Succeeded = \"succeeded\";\n\n        public MediaProcessingInfo() { }\n        public MediaProcessingInfo(JsonElement info)\n        {\n            if (info.IsNull()) return;\n\n            State = info.GetString(\"state\");\n            CheckAfterSeconds = info.GetInt(\"check_after_secs\");\n            ProgressPercent = info.GetInt(\"progress_percent\");\n            info.TryGetProperty(\"error\", out JsonElement errorValue);\n            Error = new MediaError(errorValue);\n        }\n\n        /// <summary>\n        /// Current status of media upload.\n        /// </summary>\n        public string? State { get; set; }\n\n        /// <summary>\n        /// Recommended number of seconds to delay between status checks.\n        /// </summary>\n        public int CheckAfterSeconds { get; set; }\n\n        /// <summary>\n        /// Percentage done of upload processing.\n        /// </summary>\n        public int ProgressPercent { get; set; }\n\n        /// <summary>\n        /// If the request failed with won't be null.\n        /// </summary>\n        public MediaError? Error { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/MediaRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Status requests\n    /// </summary>\n    public class MediaRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base URL for uploading media\n        /// </summary>\n        public string? UploadUrl { get; set; }\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of media request, i.e. Status\n        /// </summary>\n        public MediaType Type { get; set; }\n\n        /// <summary>\n        /// Media command sent to Twitter. e.g. STATUS for requesting media upload status.\n        /// </summary>\n        public string? Command { get; set; }\n\n        /// <summary>\n        /// ID of uploaded media to work with.\n        /// </summary>\n        public ulong MediaID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Media>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Command),\n                       nameof(MediaID)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">Criteria for url segments and parameters.</param>\n        /// <returns>URL conforming to Twitter API.</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException(\"You must set Type.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<MediaType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case MediaType.Status:\n                    return BuildStatusUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters that are common to both friend and user queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            //var urlParams = req.RequestParameters;\n\n            //if (parameters.ContainsKey(\"ID\"))\n            //{\n            //    ID = ulong.Parse(parameters[\"ID\"]);\n            //    urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"UserID\"))\n            //{\n            //    UserID = ulong.Parse(parameters[\"UserID\"]);\n            //    urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"ScreenName\"))\n            //{\n            //    ScreenName = parameters[\"ScreenName\"];\n            //    urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"SinceID\"))\n            //{\n            //    SinceID = ulong.Parse(parameters[\"SinceID\"]);\n            //    urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"MaxID\"))\n            //{\n            //    MaxID = ulong.Parse(parameters[\"MaxID\"]);\n            //    urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"Count\"))\n            //{\n            //    Count = int.Parse(parameters[\"Count\"]);\n            //    urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeRetweets\"))\n            //{\n            //    IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n            //    urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"ExcludeReplies\"))\n            //{\n            //    ExcludeReplies = bool.Parse(parameters[\"ExcludeReplies\"]);\n            //    urlParams.Add(new QueryParameter(\"exclude_replies\", parameters[\"ExcludeReplies\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeMyRetweet\"))\n            //{\n            //    IncludeMyRetweet = bool.Parse(parameters[\"IncludeMyRetweet\"]);\n            //    urlParams.Add(new QueryParameter(\"include_my_retweet\", parameters[\"IncludeMyRetweet\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeEntities\"))\n            //{\n            //    IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n            //    urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            //{\n            //    IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n            //    urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"TrimUser\"))\n            //{\n            //    TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n            //    urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            //}\n\n            //if (parameters.ContainsKey(\"IncludeContributorDetails\"))\n            //{\n            //    IncludeContributorDetails = bool.Parse(parameters[\"IncludeContributorDetails\"]);\n            //    urlParams.Add(new QueryParameter(\"contributor_details\", parameters[\"IncludeContributorDetails\"].ToLower()));\n            //}\n\n            return req;\n        }\n\n        Request BuildStatusUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(nameof(MediaID)))\n                throw new ArgumentNullException(nameof(MediaID), $\"{nameof(MediaID)} is required\");\n\n            var req = new Request(UploadUrl + \"media/upload.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            string command = \n                !parameters.ContainsKey(nameof(Command)) || string.IsNullOrWhiteSpace(parameters[nameof(Command)]) ? \n                    Media.StatusCommand : parameters[nameof(Command)];\n            urlParams.Add(new QueryParameter(\"command\", command));\n            Command = command;\n\n            MediaID = ulong.Parse(parameters[nameof(MediaID)]);\n            urlParams.Add(new QueryParameter(\"media_id\", parameters[nameof(MediaID)]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of Status\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of Status</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonElement mediaJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var statusList = new List<Media>();\n            switch (Type)\n            {\n                case MediaType.Status:\n                default:\n                    statusList.Add(new Media(mediaJson));\n                    break;\n            }\n\n            foreach (var media in statusList)\n            {\n                media.Type = Type;\n                media.MediaID = MediaID;\n                media.Command = Command;\n            };\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement statusJson = JsonDocument.Parse(responseJson).RootElement;\n\n            Status status =\n                ((StatusAction)theAction) switch\n                {\n                    StatusAction.SingleStatus =>\n                        new Status(statusJson),\n                    StatusAction.MediaUpload =>\n                        new Status\n                        {\n                            Media = new Media(statusJson)\n                        },\n                    _ => new Status()\n                };\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/MediaType.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace LinqToTwitter\n{\n    public enum MediaType\n    {\n        Metadata,\n        Status\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Media/TwitterContextMediaCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Uploads a media (e.g. media) to be attached to a subsequent tweet.\n        /// </summary>\n        /// <param name=\"media\">Media to upload</param>\n        /// <param name=\"mediaType\">Type of media. e.g. image/jpg, image/png, or video/mp4.</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public virtual async Task<Media?> UploadMediaAsync(byte[] media, string mediaType, string mediaCategory, bool shared = false, CancellationToken cancelToken = default(CancellationToken))\n        {\n            return await UploadMediaAsync(media, mediaType, null, mediaCategory, shared, cancelToken).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Uploads a media (e.g. media) to be attached to a subsequent tweet.\n        /// </summary>\n        /// <param name=\"media\">Media to upload</param>\n        /// <param name=\"mediaType\">Type of media. e.g. image/jpg, image/png, or video/mp4.</param>\n        /// <param name=\"additionalOwners\">User IDs of accounts that can used the returned media IDs</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public virtual async Task<Media?> UploadMediaAsync(byte[] media, string? mediaType, IEnumerable<ulong>? additionalOwners, string mediaCategory, bool shared = false, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (media == null || media.Length == 0)\n                throw new ArgumentNullException(\"image\", \"You must provide a byte[] of image data.\");\n\n            string updateUrl = UploadUrl + \"media/upload.json\";\n            string name = \"media\";\n            string randomUnusedFileName = new Random().Next(100, 999).ToString();\n\n            var parameters = new Dictionary<string, string>();\n\n            if (additionalOwners != null && additionalOwners.Any())\n                parameters.Add(\"additional_owners\", string.Join(\",\", additionalOwners));\n\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            RawResult =\n                await TwitterExecutor.PostMediaAsync(\n                    updateUrl,\n                    parameters,\n                    media,\n                    name,\n                    randomUnusedFileName,\n                    mediaType,\n                    mediaCategory,\n                    shared,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            Status? status = reqProc.ProcessActionResult(RawResult, StatusAction.MediaUpload);\n            return status?.Media;\n        }\n\n        /// <summary>\n        /// Adds alt text to media to support accessibility. Upload the media and call this to attach alt text.\n        /// </summary>\n        /// <param name=\"mediaID\">ID of media.</param>\n        /// <param name=\"altText\">Media description.</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns>Status containing new reply</returns>\n        public virtual async Task CreateMediaMetadataAsync(ulong mediaID, string altText, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (mediaID == 0)\n                throw new ArgumentNullException(nameof(mediaID), $\"Invalid {nameof(mediaID)} parameter: {mediaID}\");\n\n            if (string.IsNullOrWhiteSpace(altText))\n                throw new ArgumentNullException(nameof(altText), $\"The {nameof(altText)} parameter is empty or null and must have a value.\");\n\n            string updateUrl = UploadUrl + \"media/metadata/create.json\";\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    updateUrl,\n                    new Dictionary<string, string>(),\n                    new MediaMetadata { MediaID = mediaID, AltText = new AltText { Text = altText } },\n                    cancelToken)\n                   .ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/Mute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public record Mute\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// Type of mute query to perform.\n        /// </summary>\n        public MuteType Type { get; set; }\n\n        /// <summary>\n        /// ID of user to get mutes for\n        /// </summary>\n        public string? ID { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// List of User that are muted, populated by List query\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<TwitterUser>? Users { get; set; }\n\n        /// <summary>\n        /// Results metadata\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public MuteMeta? Meta { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/MuteMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class MuteMeta\n    {\n        [JsonPropertyName(\"result_count\")]\n        public int ResultCount { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/MuteRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Mute requests.\n    /// </summary>\n    public class MuteRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of mutes request (Muted)\n        /// </summary>\n        public MuteType Type { get; set; }\n\n        /// <summary>\n        /// ID of user to get mutes for\n        /// </summary>\n        public string? ID { get; set; }\n\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Mute>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(ID)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<MuteType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case MuteType.Muted:\n                    return BuildMutedUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        Request BuildMutedUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/muting\");\n            var urlParams = req.RequestParameters;\n\n            return req;\n        }\n\n        /// <summary>\n        /// Sets parameter, but doesn't treat as a query parameter.\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters</param>\n        void SetUserID(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(ID)))\n                ID = parameters[nameof(ID)];\n            else\n                throw new ArgumentException($\"{nameof(ID)} is required\", nameof(ID));\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            List<Mute>? muteList;\n\n            switch (Type)\n            {\n                case MuteType.Muted:\n                    muteList = new List<Mute> { JsonDeserialize(responseJson) };\n                    break;\n                default:\n                    muteList = new List<Mute>();\n                    break;\n            }\n\n            return muteList.OfType<T>().ToList();\n        }\n\n        Mute JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter()\n                }\n            };\n            Mute? mute = JsonSerializer.Deserialize<Mute>(responseJson, options);\n\n            if (mute?.Meta == null || mute.Meta.ResultCount == 0)\n                return new Mute\n                {\n                    Type = Type,\n                    ID = ID,\n                };\n            else\n                return mute with\n                {\n                    Type = Type,\n                    ID = ID\n                };\n        }\n\n        List<User> HandleSingleUserResponse(JsonElement userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement userJson = JsonDocument.Parse(responseJson).RootElement;\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/MuteResponse.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class MuteResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public MuteResponseData? Data { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/MuteResponseData.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record MuteResponseData\n    {\n        [JsonPropertyName(\"muting\")]\n        public bool Muting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/MuteType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum MuteType\n    {\n        /// <summary>\n        /// Accounts that have been muted.\n        /// </summary>\n        Muted,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Mute/TwitterContextMuteCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Mutes a user.\n        /// </summary>\n        /// <param name=\"sourceUserID\">Following user ID</param>\n        /// <param name=\"targetUserID\">Followed user ID</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Indicates if the user was muted.</returns>\n        public async Task<MuteResponse?> MuteAsync(string sourceUserID, string targetUserID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = sourceUserID ?? throw new ArgumentNullException(nameof(sourceUserID), $\"{nameof(sourceUserID)} is a required parameter.\");\n            _ = targetUserID ?? throw new ArgumentNullException(nameof(targetUserID), $\"{nameof(targetUserID)} is a required parameter.\");\n\n            var url = $\"{BaseUrl2}users/{sourceUserID}/muting\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TwitterUserTargetID() { TargetUserID = targetUserID.ToString() };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            MuteResponse? result = JsonSerializer.Deserialize<MuteResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Unmutes a user.\n        /// </summary>\n        /// <param name=\"sourceUserID\">Following user ID</param>\n        /// <param name=\"targetUserID\">Followed user ID</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Indicates if the user is no longer muted.</returns>\n        public async Task<MuteResponse?> UnMuteAsync(string sourceUserID, string targetUserID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            _ = sourceUserID ?? throw new ArgumentNullException(nameof(sourceUserID), $\"{nameof(sourceUserID)} is a required parameter.\");\n            _ = targetUserID ?? throw new ArgumentNullException(nameof(targetUserID), $\"{nameof(targetUserID)} is a required parameter.\");\n\n            var url = $\"{BaseUrl2}users/{sourceUserID}/muting/{targetUserID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TwitterUserTargetID() { TargetUserID = targetUserID.ToString() };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            MuteResponse? result = JsonSerializer.Deserialize<MuteResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Net/GetMessageHandler.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class GetMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> parameters;\n        readonly string url;\n        readonly bool authorizerSupportsCompression;\n\n        public GetMessageHandler(TwitterExecute exe, IDictionary<string, string> parameters, string url, bool authorizerSupportsCompression)\n        {\n            this.exe = exe;\n            this.parameters = parameters;\n            this.url = url;\n            this.authorizerSupportsCompression = authorizerSupportsCompression;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(HttpMethod.Get.ToString(), url, parameters, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            if (SupportsAutomaticDecompression && authorizerSupportsCompression)\n                AutomaticDecompression = DecompressionMethods.GZip;\n            if (exe.Authorizer?.Proxy != null && SupportsProxy)\n                Proxy = exe.Authorizer.Proxy;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Net/PostMessageHandler.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Net\n{\n    class PostMessageHandler : HttpClientHandler\n    {\n        readonly TwitterExecute exe;\n        readonly IDictionary<string, string> postData;\n        readonly string url;\n\n        public PostMessageHandler(TwitterExecute exe, IDictionary<string, string> postData, string url)\n        {\n            this.exe = exe;\n            this.postData = postData;\n            this.url = url;\n        }\n\n        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\n        {\n            exe.SetAuthorizationHeader(request.Method.ToString(), url, postData, request);\n            request.Headers.Add(\"User-Agent\", exe.UserAgent);\n            request.Headers.ExpectContinue = false;\n            request.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true };\n\n            if (SupportsAutomaticDecompression)\n                AutomaticDecompression = DecompressionMethods.GZip;\n            if (exe.Authorizer?.Proxy != null && SupportsProxy)\n                Proxy = exe.Authorizer.Proxy;\n\n            //if (exe.ReadWriteTimeout != 0)\n            //    ReadWriteTimeout = exe.ReadWriteTimeout;\n\n            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Net/TwitterErrorDetails.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace LinqToTwitter.Net\n{\n    public class TwitterErrorDetails\n    {\n        public List<Error>? Errors { get; set; }\n        public string? Title { get; set; }\n        public string? Detail { get; set; }\n        public string? Type { get; set; }\n        public int Status { get; set; }\n    }\n\n\n    public class Error\n    {\n        public Dictionary<string, string[]>? Parameters { get; set; }\n        public string? Message { get; set; }\n        public string? Request { get; set; }\n        public int Code { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Net/TwitterErrorHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing System.Xml.Linq;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter.Net\n{\n    public class TwitterErrorHandler\n    {\n        const int TwitterApiV1 = 1;\n        const int TwitterApiV2 = 2;\n\n        public static async Task ThrowIfErrorAsync(HttpResponseMessage msg)\n        {\n            const int TooManyRequests = 429;\n\n            if ((int)msg.StatusCode < 400) return;\n\n            switch (msg.StatusCode)\n            {\n                case HttpStatusCode.Unauthorized:\n                    await HandleUnauthorizedAsync(msg).ConfigureAwait(false);\n                    break;\n                default:\n                    switch ((int)msg.StatusCode)\n                    {\n                        case TooManyRequests:\n                            await HandleTooManyRequestsAsync(msg).ConfigureAwait(false);\n                            break;\n                        default:\n                            await HandleGenericErrorAsync(msg).ConfigureAwait(false);\n                            break;\n                    }\n                    break;\n            }\n        }\n\n        internal static async Task HandleGenericErrorAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            BuildAndThrowTwitterQueryException(responseStr, msg);\n        }\n\n        internal static async Task HandleTooManyRequestsAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Detail + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                StatusCode = HttpStatusCode.TooManyRequests,\n                ReasonPhrase = msg.ReasonPhrase + \" (HTTP 429 - Too Many Requests)\",\n                Title = error.Title,\n                Details = error.Detail,\n                Type = error.Type,\n                Errors = error.Errors\n            };\n        }\n\n        internal static void BuildAndThrowTwitterQueryException(string responseStr, HttpResponseMessage msg)\n        {\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string title = error?.Title ?? string.Empty;\n\n            throw new TwitterQueryException(title)\n            {\n                StatusCode = msg.StatusCode,\n                ReasonPhrase = msg.ReasonPhrase,\n                Title = title,\n                Details = error?.Detail ?? string.Empty,\n                Type = error?.Type ?? string.Empty,\n                Errors = error?.Errors ?? new List<Error>()\n            };\n        }\n\n        internal async static Task HandleUnauthorizedAsync(HttpResponseMessage msg)\n        {\n            string responseStr = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            TwitterErrorDetails error = ParseTwitterErrorMessage(responseStr);\n\n            string message = error.Detail + \" - Please visit the LINQ to Twitter FAQ (at the HelpLink) for help on resolving this error.\";\n\n            throw new TwitterQueryException(message)\n            {\n                HelpLink = L2TKeys.FaqHelpUrl,\n                StatusCode = HttpStatusCode.Unauthorized,\n                ReasonPhrase = msg.ReasonPhrase,\n                Title = error.Title,\n                Details = error.Detail,\n                Type = error.Type,\n                Errors = error.Errors\n            };\n        }\n\n        public static TwitterErrorDetails ParseTwitterErrorMessage(string responseStr)\n        {\n            try\n            {\n                bool isXml = responseStr.StartsWith(\"<?xml\") || responseStr.StartsWith(\"<!DOCTYPE\");\n\n                if (isXml)\n                {\n                    XElement responseElement = XElement.Parse(responseStr);\n\n                    XElement? errorElement =\n                        responseElement\n                            ?.Descendants(\"error\")\n                            ?.SingleOrDefault();\n\n                    if (errorElement == null)\n                        return new TwitterErrorDetails\n                        {\n                            Detail = responseStr,\n                            Title = \"Unable to Parse Response - please examine Detail property\",\n                            Type = \"XML Formatted Error\"\n                        };\n                    else\n                        return new TwitterErrorDetails\n                        {\n                            Detail = responseStr,\n                            Errors = new()\n                            {\n                                new()\n                                {\n                                    Code = int.TryParse(errorElement.Attribute(\"code\")?.Value, out int code) ? code : 0,\n                                    Message = errorElement.Value\n                                }\n                            }\n                        };\n                }\n\n                var responseJson = JsonDocument.Parse(responseStr);\n                var root = responseJson.RootElement;\n\n                int apiVersion = GetTwitterApiVersion(root);\n\n                if (apiVersion == TwitterApiV2) // version 2\n                {\n                    List<Error>? errors = null;\n                    if (root.TryGetProperty(\"errors\", out JsonElement errorElement))\n                    {\n                        errors =\n                            (from error in errorElement.EnumerateArray()\n                             select new Error\n                             {\n                                 Message = error.GetString(\"message\"),\n                                 Parameters = GetErrorParameters(error)\n                             })\n                            .ToList();\n\n                        return new TwitterErrorDetails\n                        {\n                            Title = root.GetString(\"title\"),\n                            Detail = root.GetString(\"detail\"),\n                            Type = root.GetString(\"type\"),\n                            Errors = errors\n                        };\n                    }\n                    else if(root.TryGetProperty(\"error\", out JsonElement errorMessage))\n                    {\n                        root.TryGetProperty(\"error_description\", out JsonElement errorDescription);\n\n                        return new TwitterErrorDetails\n                        {\n                            Title = errorMessage.GetString(),\n                            Detail = errorDescription.GetString(),\n                            Type = \"OAuth2\",\n                            Errors = new()\n                            {\n                                new Error\n                                {\n                                    Code = 0,\n                                    Message = errorDescription.GetString(),\n                                    Request = errorMessage.GetString()\n                                }\n                            }\n                        };\n                    }\n                    else if (root.TryGetProperty(\"detail\", out JsonElement detail))\n                    {\n                        root.TryGetProperty(\"title\", out JsonElement title);\n                        root.TryGetProperty(\"type\", out JsonElement type);\n                        root.TryGetProperty(\"status\", out JsonElement status);\n\n                        return new TwitterErrorDetails\n                        {\n                            Detail = detail.GetString(),\n                            Errors = new()\n                            {\n                                new Error\n                                {\n                                    Code = status.GetInt32(),\n                                    Message = title.GetString(),\n                                    Request = detail.GetString(),\n                                }\n                            },\n                            Status = status.GetInt32(),\n                            Title = title.GetString(),\n                            Type = type.GetString()\n                        };\n                    }\n                    else\n                    {\n                        return new TwitterErrorDetails\n                        {\n                            Title = \"Unknown Error\",\n                            Detail = root.GetString(),\n                            Type = \"Unknown\",\n                            Errors = errors\n                        };\n                    }\n                }\n                else // version 1\n                {\n                    if (root.TryGetProperty(\"request\", out JsonElement discard))\n                    {\n                        return new TwitterErrorDetails\n                        {\n                            Errors = new List<Error>\n                            {\n                                new Error\n                                {\n                                    Request = root.GetString(\"request\"),\n                                    Message = root.GetString(\"error\")\n                                }\n                            }\n                        };\n                    }\n                    else\n                    {\n                        return new TwitterErrorDetails\n                        {\n                            Errors =\n                                (from error in root.GetProperty(\"errors\").EnumerateArray()\n                                 select new Error\n                                 {\n                                     Message = error.GetString(\"message\"),\n                                     Code = error.GetInt(\"code\")\n                                 })\n                                .ToList()\n                        };\n                    }\n\n                }\n            }\n            catch (Exception)\n            {\n                return new TwitterErrorDetails \n                { \n                    Title = \n                        \"Unhandled Error - LINQ to Twitter wasn't able to parse Twitter error message. \" +\n                        \"Please copy this message, with the Detail property contents and the query you \" +\n                        \"were using (how to reproduce) to Joe Mayo at https://github.com/JoeMayo/LinqToTwitter/issues.\",\n                    Detail = responseStr \n                };\n            }\n\n        }\n\n        static Dictionary<string, string[]> GetErrorParameters(JsonElement error)\n        {\n            if (error.TryGetProperty(\"parameters\", out JsonElement paramElement))\n                return\n                   (from parm in paramElement.EnumerateObject()\n                    let vals =\n                      (from val in parm.Value.EnumerateArray()\n                       select val.GetString())\n                      .ToArray()\n                    select new { parm.Name, vals })\n                   .ToDictionary(\n                        key => key.Name,\n                        val => val.vals);\n            else\n                return new();\n        }\n\n        static int GetTwitterApiVersion(JsonElement root)\n        {\n            bool hasError = root.TryGetProperty(\"error\", out _);\n            bool hasErrorDescription = root.TryGetProperty(\"error_description\", out _);\n            bool hasTitle = root.TryGetProperty(\"title\", out _);\n            bool hasType = root.TryGetProperty(\"type\", out _);\n\n            return \n                (hasTitle && hasType) || (hasError && hasErrorDescription) ? TwitterApiV2 : TwitterApiV1;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Net/Url.cs",
    "content": "﻿using System;\nusing System.Text;\n\nnamespace LinqToTwitter.Net\n{\n    public class Url\n    {\n        /// <summary>\n        /// Implements Percent Encoding according to RFC 3986\n        /// </summary>\n        /// <param name=\"value\">string to be encoded</param>\n        /// <returns>Encoded string</returns>\n        public static string PercentEncode(string? value, bool isParam = true)\n        {\n            const string IsParamReservedChars = @\"`!@#$^&*+=,:;'?/|\\[] \";\n            const string NoParamReservedChars = @\"`!@#$^&*()+=,:;'?/|\\[] \";\n\n            var result = new StringBuilder();\n\n            if (string.IsNullOrWhiteSpace(value))\n                return string.Empty;\n\n            var escapedValue = EncodeDataString(value);\n\n            var reservedChars = isParam ? IsParamReservedChars : NoParamReservedChars;\n\n            // Windows Phone doesn't escape all the ReservedChars properly, so we have to do it manually.\n            foreach (char symbol in escapedValue)\n            {\n                if (reservedChars.IndexOf(symbol) != -1)\n                    result.Append('%' + string.Format(\"{0:X2}\", (int)symbol).ToUpper());\n                else\n                    result.Append(symbol);\n            }\n\n            return result.ToString();\n        }\n\n        /// <summary>\n        /// URL-encode a string of any length.\n        /// </summary>\n        static string EncodeDataString(string data)\n        {\n            // the max length in .NET 4.5+ is 65520\n            const int maxLength = 65519;\n\n            if (data.Length <= maxLength)\n            {\n                return Uri.EscapeDataString(data);\n            }\n\n            var totalChunks = data.Length / maxLength;\n\n            var builder = new StringBuilder();\n            for (var i = 0; i <= totalChunks; i++)\n            {\n                string? chunk = i < totalChunks ? data[(maxLength * i)..maxLength] : data[(maxLength * i)..];\n\n                // Uri.EscapeDataString is sufficient for percent-encoding. no need for Uri.EscapeUriString.\n                // https://stackoverflow.com/questions/4396598/whats-the-difference-between-escapeuristring-and-escapedatastring/#34189188\n                builder.Append(Uri.EscapeDataString(chunk));\n            }\n            return builder.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/ApplicationOnlyAuthorizer.cs",
    "content": "﻿using LinqToTwitter.Net;\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class ApplicationOnlyAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public string? BasicToken { get; set; }\n        public string? BearerToken { get; set; }\n        public string OAuth2TokenUrl { get; set; }\n        public string OAuth2InvalidateTokenUrl { get; set; }\n\n        public ApplicationOnlyAuthorizer()\n        {\n            OAuth2TokenUrl = \"https://api.twitter.com/oauth2/token\";\n            OAuth2InvalidateTokenUrl = \"https://api.twitter.com/oauth2/invalidate_token\";\n        }\n\n        public async Task AuthorizeAsync()\n        {\n            EncodeCredentials();\n            await GetBearerTokenAsync().ConfigureAwait(false);\n        }\n\n        public async Task InvalidateAsync()\n        {\n            EncodeCredentials();\n\n            var req = new HttpRequestMessage(HttpMethod.Post, OAuth2InvalidateTokenUrl);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"access_token=\" + BearerToken, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var client = new HttpClient(handler);\n\n            var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            var responseJson = JsonDocument.Parse(response);\n            BearerToken = responseJson.RootElement.GetProperty(\"access_token\").GetString();\n        }\n  \n        async Task GetBearerTokenAsync()\n        {\n            var req = new HttpRequestMessage(HttpMethod.Post, OAuth2TokenUrl);\n            req.Headers.Add(\"Authorization\", \"Basic \" + BasicToken);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n            req.Content = new StringContent(\"grant_type=client_credentials\", Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var client = new HttpClient(handler);\n\n            var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            string response = await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n\n            var responseJson = JsonDocument.Parse(response);\n            BearerToken = responseJson.RootElement.GetProperty(\"access_token\").GetString();\n        }\n\n        internal void EncodeCredentials()\n        {\n            if (CredentialStore == null)\n                throw new ArgumentException($\"{nameof(CredentialStore)} is required\", nameof(CredentialStore));\n            if (CredentialStore.ConsumerKey == null)\n                throw new ArgumentException($\"{nameof(CredentialStore.ConsumerKey)} is required\", nameof(CredentialStore.ConsumerKey));\n            if (CredentialStore.ConsumerSecret == null)\n                throw new ArgumentException($\"{nameof(CredentialStore.ConsumerSecret)} is required\", nameof(CredentialStore.ConsumerSecret));\n\n            string encodedConsumerKey = Url.PercentEncode(CredentialStore.ConsumerKey);\n            string encodedConsumerSecret = Url.PercentEncode(CredentialStore.ConsumerSecret);\n\n            string concatenatedCredentials = encodedConsumerKey + \":\" + encodedConsumerSecret;\n\n            byte[] credBytes = Encoding.UTF8.GetBytes(concatenatedCredentials);\n\n            string base64Credentials = Convert.ToBase64String(credBytes);\n\n            BasicToken = base64Credentials;\n        }\n\n        public override string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            return \"Bearer \" + BearerToken;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/AuthAccessType.cs",
    "content": "﻿namespace LinqToTwitter.OAuth\n{\n    /// <summary>\n    /// Restricts access type\n    /// </summary>\n    public enum AuthAccessType\n    {\n        /// <summary>\n        /// Default - use account settings access\n        /// </summary>\n        NoChange,\n\n        /// <summary>\n        /// Restrict to read-only\n        /// </summary>\n        Read,\n\n        /// <summary>\n        /// Read/write access\n        /// </summary>\n        Write\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/AuthorizerBase.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class AuthorizerBase\n    {\n        /// <summary>\n        /// URL for OAuth Request Tokens\n        /// </summary>\n        public string OAuthRequestTokenUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth authorization\n        /// </summary>\n        public string? OAuthAuthorizeUrl { get; set; }\n\n        /// <summary>\n        /// URL for OAuth Access Tokens\n        /// </summary>\n        public string OAuthAccessTokenUrl { get; set; }\n\n        /// <summary>\n        /// Get/Set Credentials\n        /// </summary>\n        public ICredentialStore? CredentialStore { get; set; }\n\n        /// <summary>\n        /// Force the user to enter their name/password when authorizing\n        /// </summary>\n        public bool ForceLogin { get; set; }\n\n        /// <summary>\n        /// Overrides read/write settings for application registered with Twitter\n        /// </summary>\n        public AuthAccessType AccessType { get; set; }\n\n        /// <summary>\n        /// Optional name to prefill when user visits the Twitter authorization screen\n        /// </summary>\n        public string? PreFillScreenName { get; set; }\n\n        /// <summary>\n        /// User-Agent header string sent to Twitter to represent your application. Defaults to LINQ to Twitter.\n        /// </summary>\n        public string? UserAgent { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app.\n        /// </summary>\n        public string? Callback { get; set; }\n\n        public IWebProxy? Proxy { get; set; }\n\n        public bool SupportsCompression { get; set; }\n\n        protected static string? ParseVerifierFromResponseUrl(string responseUrl)\n        {\n            string[] keyValPairs = new Uri(responseUrl).Query.TrimStart('?').Split('&');\n\n            string? verifier =\n                (from keyValPair in keyValPairs\n                 let pair = keyValPair.Split('=')\n                 let key = pair[0]\n                 let val = pair.Length == 2 ? pair[1] : string.Empty\n                 where key == \"oauth_verifier\"\n                 select val)\n                .SingleOrDefault();\n\n            return verifier;\n        }\n\n        IDictionary<string, string>? parameters;\n        public IDictionary<string, string> Parameters\n        {\n            get \n            {\n                if (parameters == null)\n                    parameters = new Dictionary<string, string>\n                    {\n                        { \"oauth_consumer_key\", CredentialStore?.ConsumerKey ?? string.Empty },\n                        { \"oauth_token\", CredentialStore?.OAuthToken ?? string.Empty }\n                    };\n\n                return parameters; \n            }\n        }\n\n        public AuthorizerBase() : this(false, AuthAccessType.NoChange, string.Empty) { }\n\n        public AuthorizerBase(bool forceLogin, AuthAccessType accessType, string prefillScreenName)\n        {\n            ForceLogin = forceLogin;\n            AccessType = accessType;\n            PreFillScreenName = prefillScreenName;\n            SupportsCompression = true;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n\n            OAuthRequestTokenUrl = \"https://api.twitter.com/oauth/request_token\";\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authorize\";\n            OAuthAccessTokenUrl = \"https://api.twitter.com/oauth/access_token\";\n        }\n\n        public async Task GetRequestTokenAsync(string callback)\n        {\n            if (string.IsNullOrWhiteSpace(callback))\n                throw new ArgumentNullException(nameof(callback), \"callback is required.\");\n\n            Parameters.Add(\"oauth_callback\", EncodeToProtectMultiByteCharUrls(callback));\n            Parameters.Remove(\"oauth_token\");\n\n            if (AccessType != AuthAccessType.NoChange)\n                Parameters.Add(\"x_auth_access_type\", AccessType.ToString().ToLower());\n\n            string response = await HttpGetAsync(OAuthRequestTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to request token response from Twitter.\");\n\n            UpdateCredentialsFromRequestTokenResponse(response);\n        }\n\n        static string EncodeToProtectMultiByteCharUrls(string callback)\n        {\n            return callback == \"oob\" ? \"oob\" : new Uri(callback).AbsoluteUri;\n        }\n\n        public string PrepareAuthorizeUrl(bool forceLogin)\n        {\n            if (CredentialStore?.OAuthToken == null)\n                throw new InvalidOperationException(\"OAuthToken not set. Call GetRequestTokenAsync first and verify that OAuthToken is set.\");\n\n            string forceLoginParamString = forceLogin ? \"&force_login=true\" : \"\";\n\n            string preFillScreenNameParamString = \n                !string.IsNullOrWhiteSpace(PreFillScreenName) ? \"&screen_name=\" + PreFillScreenName : \"\";\n\n            return string.Format(\n                \"{0}?oauth_token={1}{2}{3}\", \n                OAuthAuthorizeUrl, CredentialStore.OAuthToken, \n                forceLoginParamString, preFillScreenNameParamString);\n        }\n\n        public async Task GetAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpGetAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n            \n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        public async Task PostAccessTokenAsync(IDictionary<string, string> accessTokenParams)\n        {\n            if (!accessTokenParams.ContainsKey(\"x_auth_mode\") && !accessTokenParams.ContainsKey(\"oauth_verifier\"))\n                throw new ArgumentException(\"oauth_verifier is required, unless using xAuth.\");\n\n            foreach (var key in accessTokenParams.Keys)\n                Parameters.Add(key, accessTokenParams[key]);\n\n            Parameters.Remove(\"oauth_callback\");\n\n            string response = await HttpPostAsync(OAuthAccessTokenUrl, Parameters).ConfigureAwait(false);\n\n            if (string.IsNullOrWhiteSpace(response))\n                throw new ArgumentNullException(\"Empty response to access token response from Twitter.\");\n\n            UpdateCredentialsWithAccessTokenResponse(response);\n        }\n\n        void UpdateCredentialsFromRequestTokenResponse(string response)\n        {\n            if (CredentialStore != null)\n                CredentialStore.OAuthToken =\n                    (from nameValPair in response.Split('&')\n                     let pair = nameValPair.Split('=')\n                     where pair[0] == \"oauth_token\"\n                     select pair[1])\n                    .SingleOrDefault();\n\n            Parameters.Add(\"oauth_token\", CredentialStore?.OAuthToken ?? string.Empty);\n        }\n\n        void UpdateCredentialsWithAccessTokenResponse(string response)\n        {\n            if (CredentialStore == null)\n                return;\n\n            var responseParams =\n                (from nameValPair in response.Split('&')\n                 let pair = nameValPair.Split('=')\n                 select new\n                 {\n                     Key = pair[0],\n                     Value = pair[1]\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            if (responseParams[\"oauth_token\"] != null)\n                CredentialStore.OAuthToken = responseParams[\"oauth_token\"];\n\n            if (responseParams[\"oauth_token_secret\"] != null)\n                CredentialStore.OAuthTokenSecret = responseParams[\"oauth_token_secret\"];\n\n            if (responseParams[\"screen_name\"] != null)\n                CredentialStore.ScreenName = responseParams[\"screen_name\"];\n\n            if (responseParams[\"user_id\"] != null)\n            {\n                _ = ulong.TryParse(responseParams[\"user_id\"], out ulong userID);\n                CredentialStore.UserID = userID;\n            }\n        }\n\n        internal async Task<string> HttpGetAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var req = new HttpRequestMessage(HttpMethod.Get, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Get.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        internal async Task<string> HttpPostAsync(string oauthUrl, IDictionary<string, string> parameters)\n        {\n            var postData =\n                (from keyValPair in parameters\n                 where !keyValPair.Key.StartsWith(\"oauth\")\n                 select keyValPair)\n                .ToDictionary(pair => pair.Key, pair => pair.Value);\n\n            var req = new HttpRequestMessage(HttpMethod.Post, oauthUrl);\n            req.Headers.Add(\"Authorization\", GetAuthorizationString(HttpMethod.Post.ToString(), oauthUrl, parameters));\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            req.Headers.ExpectContinue = false;\n\n            var paramString =\n                string.Join(\"&\",\n                    (from parm in postData\n                     select parm.Key + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());\n            var content = new StringContent(paramString, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            req.Content = content;\n\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var msg = await new HttpClient(handler).SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n \n        public virtual string GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            if (CredentialStore == null)\n                return string.Empty;\n\n            string consumerSecret = CredentialStore.ConsumerSecret ?? string.Empty;\n            string oAuthTokenSecret = CredentialStore.OAuthTokenSecret ?? string.Empty;\n            string authorizationString =\n                new Signature().GetAuthorizationString(\n                    method, oauthUrl, parameters, consumerSecret, oAuthTokenSecret);\n            return authorizationString;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/IAuthorizer.cs",
    "content": "using System.Collections.Generic;\nusing System.Net;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public interface IAuthorizer\n    {\n        Task AuthorizeAsync();\n\n        string? UserAgent { get; set; }\n\n        ICredentialStore? CredentialStore { get; set; }\n\n        IWebProxy? Proxy { get; set; }\n\n        bool SupportsCompression { get; set; }\n\n        string? GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/ICredentialStore.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public interface ICredentialStore\n    {\n        /// <summary>\n        /// Key provided by Twitter for your application\n        /// </summary>\n        string? ConsumerKey { get; set; }\n\n        /// <summary>\n        /// Secret provided by Twitter for your application\n        /// </summary>\n        string? ConsumerSecret { get; set; }\n\n        /// <summary>\n        /// Token provided by Twitter for making request\n        /// </summary>\n        string? OAuthToken { get; set; }\n\n        /// <summary>\n        /// Unique access token for a user\n        /// </summary>\n        string? OAuthTokenSecret { get; set; }\n\n        /// <summary>\n        /// Twitter screen name\n        /// </summary>\n        string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Twitter user ID\n        /// </summary>\n        ulong UserID { get; set; }\n\n        /// <summary>\n        /// Does this CredentialStore have all credentials populated?\n        /// </summary>\n        bool HasAllCredentials();\n\n        /// <summary>\n        /// Populates this with credential values from storage\n        /// </summary>\n        Task LoadAsync();\n\n        /// <summary>\n        /// Saves credentials from this to storage\n        /// </summary>\n        Task StoreAsync();\n\n        /// <summary>\n        /// Removes credentials from storage\n        /// </summary>\n        Task ClearAsync();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/IOAuth2Authorizer.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public interface IOAuth2Authorizer : IAuthorizer\n    {\n        Task BeginAuthorizeAsync(string? state);\n        Task CompleteAuthorizeAsync(string code, string? state);\n        Task<string> RevokeTokenAsync();\n        Task<string> RefreshTokenAsync();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/IOAuth2CredentialStore.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace LinqToTwitter.OAuth\n{\n    public interface IOAuth2CredentialStore : ICredentialStore\n    {\n        /// <summary>\n        /// Required - you can find this in the Twitter Developer portal\n        /// </summary>\n        string? ClientID { get; set; }\n\n        /// <summary>\n        /// Required for confidential clients - you can find this in the Twitter Developer portal\n        /// </summary>\n        string? ClientSecret { get; set; }\n\n        /// <summary>\n        /// Required - these are the permissions you want the user to give your app.\n        /// See endpoint documentation for what scopes are required.\n        /// </summary>\n        IEnumerable<string>? Scopes { get; set; }\n\n        /// <summary>\n        /// Populated after user approves your app and used for each command/query\n        /// </summary>\n        string? AccessToken { get; set; }\n\n        /// <summary>\n        /// Can be used to get a new AccessToken - only available if you authorized with `offline.access` scope.\n        /// </summary>\n        string? RefreshToken { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        string? RedirectUri { get; set; }\n\n        /// <summary>\n        /// Send when authorizing and getting access token to verify original source\n        /// </summary>\n        string? CodeChallenge { get; set; }\n\n        /// <summary>\n        /// Value to verify against what was sent to Twitter and what was received.\n        /// Helps prevent CSRF attack.\n        /// </summary>\n        string? State { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/ISignature.cs",
    "content": "using System.Collections.Generic;\n\nnamespace LinqToTwitter.OAuth\n{\n    public interface ISignature\n    {\n        string GetAuthorizationString(string method, string url, IDictionary<string, string> parameters, string consumerSecret, string oAuthTokenSecret);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/InMemoryCredentialStore.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    /// <summary>\n    /// These credentials just reside in memory and only\n    /// have a lifetime matching their containing AppDomain.\n    /// </summary>\n    public class InMemoryCredentialStore : ICredentialStore\n    {\n        public virtual string? ConsumerKey { get; set; }\n\n        public virtual string? ConsumerSecret { get; set; }\n\n        public virtual string? OAuthToken { get; set; }\n\n        public virtual string? OAuthTokenSecret { get; set; }\n\n        public virtual string? ScreenName { get; set; }\n\n        public virtual ulong UserID { get; set; }\n\n        public virtual bool HasAllCredentials()\n        {\n            return\n                !string.IsNullOrWhiteSpace(ConsumerKey) &&\n                !string.IsNullOrWhiteSpace(ConsumerSecret) &&\n                !string.IsNullOrWhiteSpace(OAuthToken) &&\n                !string.IsNullOrWhiteSpace(OAuthTokenSecret);\n        }\n\n#pragma warning disable 1998\n        \n        //\n        // by definition, this type doesn't work \n        // with a data store other than memory.\n        //\n\n        public virtual async Task LoadAsync()\n        {\n        }\n\n        public virtual async Task StoreAsync() { }\n\n        public virtual async Task ClearAsync()\n        {\n            ConsumerKey = null;\n            ConsumerSecret = null;\n            OAuthToken = null;\n            OAuthTokenSecret = null;\n            ScreenName = null;\n            UserID = 0ul;\n        }\n\n#pragma warning restore 1998\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/OAuth2Authorizer.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Security.Cryptography;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class OAuth2Authorizer : OAuth2AuthorizerBase, IOAuth2Authorizer\n    {\n        public const string CredentialStoreMessage = \"You must assign the CredentialStore property (with required values).\";\n\n        public const string ValidCharacterString = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~\";\n        public static readonly char[] ValidCharacters = ValidCharacterString.ToCharArray();\n\n        public string AuthorizeUrl { get; set; }\n        public string AccessTokenUrl { get; set; }\n        public string RefreshTokenUrl { get; set; }\n        public string RevokeTokenUrl { get; set; }\n\n        public string? HtmlResponseString { get; set; }\n\n        /// <summary>\n        /// This is a hook where you can assign\n        /// an <see cref=\"Action\"/> to perform the technology\n        /// specific redirection action.\n        /// \n        /// The string passed as the <see cref=\"Action\"/> paramter\n        /// is the Twitter authorization URL.\n        /// </summary>\n        public Action<string>? GoToTwitterAuthorization { get; set; }\n\n        public OAuth2Authorizer()\n        {\n            AuthorizeUrl = \"https://twitter.com/i/oauth2/authorize\";\n            AccessTokenUrl = \"https://api.twitter.com/2/oauth2/token\";\n            RefreshTokenUrl = \"https://api.twitter.com/2/oauth2/token\";\n            RevokeTokenUrl = \"https://api.twitter.com/2/oauth2/revoke\";\n\n            SupportsCompression = true;\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n        }\n\n        void HandleAuthorizationHeader(HttpRequestMessage req, string url)\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n\n            bool isAuthorizationRequest(string url) => url.StartsWith(AuthorizeUrl);\n            bool isPublicClient() => string.IsNullOrWhiteSpace(credStore.ClientSecret);\n\n            if (isAuthorizationRequest(url) || isPublicClient())\n                return;\n\n            string authHeader =\n                \"Basic \" +\n                Convert.ToBase64String(\n                    Encoding.UTF8.GetBytes(\n                        $\"{credStore.ClientID}:{credStore.ClientSecret}\"));\n            req.Headers.Add(\"Authorization\", authHeader);\n        }\n\n        HttpRequestMessage GetHttpRequestMessage(HttpMethod method, string url)\n        {\n            var req = new HttpRequestMessage(method, url);\n            req.Headers.Add(\"User-Agent\", UserAgent);\n            HandleAuthorizationHeader(req, url);\n            return req;\n        }\n\n        public async Task<string> SendHttpAsync(HttpRequestMessage req)\n        {\n            var handler = new HttpClientHandler();\n            if (handler.SupportsAutomaticDecompression)\n                handler.AutomaticDecompression = DecompressionMethods.GZip;\n            if (Proxy != null && handler.SupportsProxy)\n                handler.Proxy = Proxy;\n\n            var client = new HttpClient(handler);\n\n            var msg = await client.SendAsync(req).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        public virtual async Task<string> GetAuthorizationCodeAsync(string authUrl)\n        {\n            var req = GetHttpRequestMessage(HttpMethod.Get, authUrl);\n            return await SendHttpAsync(req).ConfigureAwait(false);\n        }\n\n        public virtual async Task<string> GetAccessTokenAsync(string code)\n        {\n            HttpRequestMessage req = GetHttpRequestMessage(HttpMethod.Post, AccessTokenUrl);\n\n            string postParams = PrepareAccessTokenParams(code);\n\n            req.Content = new StringContent(postParams, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            return await SendHttpAsync(req).ConfigureAwait(false);\n        }\n\n        public async Task<string> RevokeTokenAsync()\n        {\n            HttpRequestMessage req = GetHttpRequestMessage(HttpMethod.Post, RevokeTokenUrl);\n\n            string postParams = PrepareRevokeTokenParams();\n\n            req.Content = new StringContent(postParams, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            return await SendHttpAsync(req).ConfigureAwait(false);\n        }\n\n        public async Task<string> RefreshTokenAsync()\n        {\n            HttpRequestMessage req = GetHttpRequestMessage(HttpMethod.Post, RefreshTokenUrl);\n\n            string postParams = PrepareRefreshTokenParams();\n\n            req.Content = new StringContent(postParams, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n\n            string tokenResponse = await SendHttpAsync(req).ConfigureAwait(false);\n\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n\n            var tokenResponseJson = JsonDocument.Parse(tokenResponse).RootElement;\n            credStore.AccessToken = tokenResponseJson.GetString(\"access_token\");\n            credStore.RefreshToken = tokenResponseJson.GetString(\"refresh_token\");\n\n            return tokenResponse;\n        }\n\n        string ToBase64Url(byte[] bytes)\n        {\n            return Convert\n                .ToBase64String(bytes)\n                .Replace('+', '-')\n                .Replace('/', '_')\n                .TrimEnd('=');\n        }\n\n        public virtual string GenerateCodeChallenge()\n        {\n            var rand = new Random((int)DateTime.UtcNow.Ticks);\n            int size = rand.Next(44, 127);\n            var chars = new char[size];\n\n            for (int i = 0; i < chars.Length; i++)\n            {\n                int charIndex = rand.Next(0, ValidCharacters.Length);\n                chars[i] = ValidCharacters[charIndex];\n            }\n\n            return new string(chars);\n        }\n\n        public virtual string? HashCodeChallenge(string challenge)\n        {\n            byte[] challengeBytes = Encoding.ASCII.GetBytes(challenge);\n\n            using var sha256 = SHA256.Create();\n\n            byte[] challengeHashed = sha256.ComputeHash(challengeBytes);\n\n            return ToBase64Url(challengeHashed);\n        }\n\n        public virtual string PrepareAuthorizeUrl(string? state = null)\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n\n            string scopes = string.Join(' ', credStore.Scopes ?? new string[0]);\n\n            credStore.CodeChallenge = GenerateCodeChallenge();\n            string? hashedCodeChallenge = HashCodeChallenge(credStore.CodeChallenge);\n\n            Func<string?, string> getState = (state) => string.IsNullOrWhiteSpace(state) ? \"\" : $\"state={state}&\";\n\n            return \n                $\"{AuthorizeUrl}?\" +\n                $\"response_type=code&\" +\n                $\"client_id={credStore.ClientID}&\" +\n                $\"redirect_uri={credStore.RedirectUri}&\" +\n                $\"scope={scopes}&\" +\n                $\"{getState(state)}\" +\n                $\"code_challenge={hashedCodeChallenge}&\" +\n                $\"code_challenge_method=S256\";\n        }\n\n        public virtual string PrepareAccessTokenParams(string? code)\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n            if (string.IsNullOrWhiteSpace(credStore.ClientID))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.ClientID)} before calling AuthorizeAsync.\", nameof(credStore.ClientID));\n            if (string.IsNullOrWhiteSpace(credStore.RedirectUri))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.RedirectUri)} before calling AuthorizeAsync.\", nameof(credStore.RedirectUri));\n            if (string.IsNullOrWhiteSpace(code))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(code)} before calling AuthorizeAsync.\", nameof(code));\n            if (string.IsNullOrWhiteSpace(credStore?.CodeChallenge))\n                throw new InvalidOperationException(\"Internal LINQ to Twitter error - Missing Code Challenge!\");\n\n            return \n                $\"code={Url.PercentEncode(code)}&\" +\n                $\"grant_type=authorization_code&\" +\n                $\"client_id={credStore.ClientID}&\" +\n                $\"redirect_uri={credStore.RedirectUri}&\" +\n                $\"code_verifier={credStore.CodeChallenge}\";\n        }\n\n        public virtual string PrepareRefreshTokenParams()\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n            if (string.IsNullOrWhiteSpace(credStore.ClientID))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.ClientID)} before calling AuthorizeAsync.\", nameof(credStore.ClientID));\n            if (string.IsNullOrWhiteSpace(credStore.RefreshToken))\n                throw new ArgumentException(\n                    \"Your CredentialStore doesn't have a refresh token. \" +\n                    \"Therefore, you are unable to update your token. \" +\n                    \"To get a refresh token, add the 'offline.access' scope when initially authorizing.\");\n\n            return\n                $\"refresh_token={credStore.RefreshToken}&\" +\n                $\"grant_type=refresh_token&\" +\n                $\"client_id={credStore.ClientID}\";\n        }\n\n        public virtual string PrepareRevokeTokenParams()\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n            if (string.IsNullOrWhiteSpace(credStore.ClientID))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.ClientID)} before calling AuthorizeAsync.\", nameof(credStore.ClientID));\n            if (string.IsNullOrWhiteSpace(credStore.AccessToken))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.AccessToken)} before calling AuthorizeAsync.\", nameof(credStore.AccessToken));\n\n            return\n                $\"token={credStore.AccessToken}&\" +\n                $\"client_id={credStore.ClientID}&\" +\n                $\"token_type_hint=access_token\";\n        }\n\n        public (string code, string state) ParseRedirectResponse(string response)\n        {\n            const string stateParam = \"state=\";\n            const string codeParam = \"code=\";\n\n            int stateStart = response.IndexOf(stateParam) + stateParam.Length;\n            int stateEnd = response.IndexOf(codeParam, stateStart) - 1;\n            int codeStart = response.IndexOf(codeParam, stateEnd) + codeParam.Length;\n            int codeEnd = response.IndexOf(\" \", codeStart);\n\n            string state = response.Substring(stateStart, stateEnd-stateStart);\n            string code = response.Substring(codeStart, codeEnd-codeStart);\n\n            return (code, state);\n        }\n\n        /// <summary>\n        /// Performs Basic Authorization (not implemented yet)\n        /// </summary>\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n\n            credStore.State = GenerateCodeChallenge();\n\n            if (string.IsNullOrWhiteSpace(credStore.ClientID))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.ClientID)} before calling AuthorizeAsync.\", nameof(credStore.ClientID));\n            if (string.IsNullOrWhiteSpace(credStore.RedirectUri))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.RedirectUri)} before calling AuthorizeAsync.\", nameof(credStore.RedirectUri));\n            if (!credStore.Scopes?.Any() ?? false)\n                throw new ArgumentException($\"You must populate CredentialStore with {nameof(credStore.Scopes)} (permissions) before calling AuthorizeAsync.\", nameof(credStore.Scopes));\n\n            string authUrl = PrepareAuthorizeUrl(credStore.State);\n\n            if (GoToTwitterAuthorization != null)\n                GoToTwitterAuthorization(authUrl);\n\n            Uri uri = new Uri(credStore.RedirectUri);\n            string response = new OAuthListener(HtmlResponseString).Listen(uri.Host, uri.Port);\n\n            (string code, string state) = ParseRedirectResponse(response);\n\n            await CompleteAuthorizeAsync(code, state);\n\n            await Task.CompletedTask;\n        }\n\n        /// <summary>\n        /// Starts the authorization process\n        /// </summary>\n        /// <param name=\"state\">Any state of your choice for security checks durng <see cref=\"CompleteAuthorizeAsync(string)\"/>.</param>\n        /// <returns></returns>\n        /// <exception cref=\"NullReferenceException\">For missing Credential Store</exception>\n        /// <exception cref=\"ArgumentException\">For missing ClientID or Scopes</exception>\n        public async Task BeginAuthorizeAsync(string? state = null)\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n\n            credStore.State = state;\n\n            if (credStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(credStore.ClientID))\n                throw new ArgumentException($\"You must populate CredentialStore with a {nameof(credStore.ClientID)} before calling AuthorizeAsync.\", nameof(credStore.ClientID));\n            if (!credStore.Scopes?.Any() ?? false)\n                throw new ArgumentException($\"You must populate CredentialStore with {nameof(credStore.Scopes)} (permissions) before calling AuthorizeAsync.\", nameof(credStore.Scopes));\n\n            string authUrl = PrepareAuthorizeUrl(state);\n\n            if (GoToTwitterAuthorization != null)\n                GoToTwitterAuthorization(authUrl);\n\n            await Task.CompletedTask;\n        }\n\n        /// <summary>\n        /// Completes the authorization process, which gets access token \n        /// (and optionally refresh token if you added the \"offline.access\" scope)\n        /// </summary>\n        /// <param name=\"code\">Authorization code result from the <see cref=\"BeginAuthorizeAsync(string?)\"/> process.</param>\n        /// <exception cref=\"NullReferenceException\">If missing CredentialStore</exception>\n        /// <exception cref=\"TwitterQueryException\">When state passed here doesn't equal state passed to <see cref=\"BeginAuthorizeAsync(string?)\"/>, then possible CSRF attack.</exception>\n        public async Task CompleteAuthorizeAsync(string code, string? state = null)\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n            \n            string expectedState = credStore.State ?? string.Empty;\n            string returnedState = Uri.UnescapeDataString(state ?? string.Empty);\n\n            if (expectedState != returnedState)\n                throw new TwitterQueryException(\"Possible CSRF attack - State doesn't match. Check that the state sent in the begin request matches the state in the received request.\");\n\n            string tokenResponse = await GetAccessTokenAsync(code);\n\n            var tokenResponseJson = JsonDocument.Parse(tokenResponse).RootElement;\n            credStore.AccessToken = tokenResponseJson.GetString(\"access_token\");\n            credStore.RefreshToken = tokenResponseJson.GetString(\"refresh_token\");\n        }\n\n        /// <summary>\n        /// Called by LINQ to Twitter provider to build the Authorization header for each request.\n        /// </summary>\n        /// <exception cref=\"NullReferenceException\">For missing CredentialStore</exception>\n        public override string? GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters)\n        {\n            if (CredentialStore is not IOAuth2CredentialStore credStore)\n                throw new NullReferenceException(CredentialStoreMessage);\n\n            return $\"Bearer {credStore.AccessToken}\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/OAuth2AuthorizerBase.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net;\n\nnamespace LinqToTwitter.OAuth\n{\n    public abstract class OAuth2AuthorizerBase\n    {\n        /// <summary>\n        /// User-Agent header string sent to Twitter to represent your application. Defaults to LINQ to Twitter.\n        /// </summary>\n        public string? UserAgent { get; set; }\n\n        /// <summary>\n        /// Allows user to specify a proxy for HTTP requests\n        /// </summary>\n        public IWebProxy? Proxy { get; set; }\n\n        /// <summary>\n        /// LINQ to Twitter will use gzip compression if the client supports it\n        /// </summary>\n        public bool SupportsCompression { get; set; }\n\n        /// <summary>\n        /// Get/Set Credentials\n        /// </summary>\n        public ICredentialStore? CredentialStore { get; set; }\n\n        public abstract string? GetAuthorizationString(string method, string oauthUrl, IDictionary<string, string> parameters);\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/OAuth2CredentialStore.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    /// <summary>\n    /// Manages credentials for OAuth2 Authentications\n    /// </summary>\n    public class OAuth2CredentialStore : InMemoryCredentialStore, IOAuth2CredentialStore\n    {\n        /// <summary>\n        /// Required for all clients - you can find this in the Twitter Developer portal\n        /// </summary>\n        public virtual string? ClientID { get; set; }\n\n        /// <summary>\n        /// Required for confidential clients - you can find this in the Twitter Developer portal\n        /// </summary>\n        public virtual string? ClientSecret { get; set; }\n\n        /// <summary>\n        /// Send when authorizing and getting access token to verify original source\n        /// </summary>\n        public virtual string? CodeChallenge { get; set; }\n\n        /// <summary>\n        /// Required - these are the permissions you want the user to give your app.\n        /// See endpoint documentation for what scopes are required.\n        /// </summary>\n        public virtual IEnumerable<string>? Scopes { get; set; }\n\n        /// <summary>\n        /// Populated after user approves your app and used for each command/query\n        /// </summary>\n        public virtual string? AccessToken { get; set; }\n\n        /// <summary>\n        /// Can be used to get a new AccessToken - only available if you authorized with `offline.access` scope.\n        /// </summary>\n        public virtual string? RefreshToken { get; set; }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public virtual string? RedirectUri { get; set; }\n\n        /// <summary>\n        /// Value to verify against what was sent to Twitter and what was received.\n        /// Helps prevent CSRF attack.\n        /// </summary>\n        public virtual string? State { get; set; }\n\n        /// <summary>\n        /// Sets all properties to default values\n        /// </summary>\n        public override async Task ClearAsync()\n        {\n            await base.ClearAsync();\n\n            AccessToken = default;\n            ClientID = default;\n            ClientSecret = default;\n            CodeChallenge = default;\n            RefreshToken = default;\n            RedirectUri = default;\n            Scopes = default;\n            State = default;\n        }\n\n        public override bool HasAllCredentials() => !string.IsNullOrWhiteSpace(AccessToken);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/OAuthKeys.cs",
    "content": "﻿namespace LinqToTwitter.OAuth\n{\n    public class OAuthKeys\n    {\n        public const string TwitterConsumerKey = \"TwitterConsumerKey\";\n        public const string TwitterConsumerSecret = \"TwitterConsumerSecret\";\n        public const string TwitterOAuthToken = \"TwitterOAuthToken\";\n        public const string TwitterOAuthTokenSecret = \"TwitterOAuthTokenSecret\";\n        public const string TwitterAccessToken = \"TwitterAccessToken\";\n        public const string TwitterAccessTokenSecret = \"TwitterAccessTokenSecret\";\n        public const string TwitterClientID = \"TwitterClientID\";\n        public const string TwitterClientSecret = \"TwitterClientSecret\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/OAuthListener.cs",
    "content": "﻿using System.IO;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Text;\n\nnamespace LinqToTwitter.OAuth\n{\n    internal class OAuthListener\n    {\n        const string DefaultContents = @\"\n    <h1>Success!</h1>\n    <p>You've successfully authenticated your app.</p>\n    <p>\n      Follow <a href=\"\"https://twitter.com/JoeMayo\"\">@JoeMayo</a> for the latest updates.\n    </p>\n\";\n        const string HtmlResponseTemplate = @\"\nHTTP/1.1 200 OK\n\n<html>\n  <body>\n    <div>\n        {0}\n    </div>\n    <p>\n      <b>Powered By:</b> <a href=\"\"https://github.com/JoeMayo/LinqToTwitter\"\">LINQ to Twitter!</a>\n    </p>\n  </body>\n</html>\n\";\n\n        readonly string responseHtml;\n\n        public OAuthListener(string? responseHtml = null)\n        {\n            string contents = string.IsNullOrWhiteSpace(responseHtml) ? DefaultContents : responseHtml;\n\n            this.responseHtml = string.Format(HtmlResponseTemplate, contents);\n        }\n\n        /// <summary>\n        /// Listens for an authorization token response from Twitter\n        /// </summary>\n        /// <param name=\"ip\"></param>\n        /// <param name=\"port\"></param>\n        /// <returns></returns>\n        public string Listen(string ip, int port)\n        {\n            TcpListener? server = null;\n            try\n            {\n                server = new TcpListener(IPAddress.Parse(ip), port);\n                server.Start();\n\n                using TcpClient client = server.AcceptTcpClient();\n                using NetworkStream stream = client.GetStream();\n\n                if (stream.CanTimeout)\n                {\n                    stream.ReadTimeout = 500;\n                    stream.WriteTimeout = 500;\n                }\n\n                int readCount;\n                var bytes = new byte[1024];\n                var sb = new StringBuilder();\n\n                while ((readCount = stream.Read(bytes, 0, bytes.Length)) != 0)\n                {\n                    sb.Append(Encoding.UTF8.GetString(bytes, 0, readCount));\n\n                    if (readCount < bytes.Length)\n                        break;\n                }\n\n                stream.Write(Encoding.UTF8.GetBytes(responseHtml));\n\n                return sb.ToString();\n            }\n            finally\n            {\n                server?.Stop();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/PinAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class PinAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// PIN-based authorization requires a 7-digit pin that is provided by Twitter.\n        /// The user must copy that PIN and give it back to the program to use as a verifier\n        /// in getting the final access token from Twitter.  You should write code (a lambda)\n        /// that allows the user to provide this pin that this code will return.\n        /// </summary>\n        public Func<string>? GetPin { get; set; }\n\n        /// <summary>\n        /// Action to redirect user to Twitter authorization page\n        /// </summary>\n        public Action<string>? GoToTwitterAuthorization { get; set; }\n\n        public PinAuthorizer()\n            : base(false, AuthAccessType.NoChange, string.Empty) { }\n\n        public PinAuthorizer(bool forceLogin)\n            : base(forceLogin, AuthAccessType.NoChange, string.Empty) { }\n\n        public PinAuthorizer(bool forceLogin, AuthAccessType accessType) \n            : base(forceLogin, accessType, string.Empty) { }\n\n        public PinAuthorizer(bool forceLogin, AuthAccessType accessType, string preFillScreenName)\n            : base(forceLogin, accessType, preFillScreenName) { }\n\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            if (GetPin == null)\n                throw new InvalidOperationException(\"You must provide an Func<string> delegate/lambda for GetPin.\");\n\n            await GetRequestTokenAsync(\"oob\").ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n\n            string verifier = GetPin();\n\n            var accessTokenParams = new Dictionary<string, string>\n            {\n                { \"oauth_verifier\", verifier }\n            };\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n\n        public async Task BeginAuthorizeAsync()\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            await GetRequestTokenAsync(\"oob\").ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n        }\n\n\n        public async Task CompleteAuthorizeAsync(string pin)\n        {\n            var accessTokenParams = new Dictionary<string, string>\n            {\n                { \"oauth_verifier\", pin }\n            };\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/Scopes.cs",
    "content": "﻿namespace LinqToTwitter.OAuth\n{\n    public class Scopes\n    {\n        public const string TweetRead = \"tweet.read\";\n\n        public const string UsersRead = \"users.read\";\n\n        public const string AccountFollowsRead = \"account.follows.read\";\n\n        public const string AccountFollowsWrite = \"account.follows.write\";\n\n        public const string OfflineAccess = \"offline.access\";\n\n        public const string SpacesRead = \"spaces.read\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/Signature.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Security.Cryptography;\nusing System.Text;\nusing LinqToTwitter.Net;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class Signature : ISignature\n    {  \n        public string GetAuthorizationString(string method, string url, IDictionary<string, string> parameters, string consumerSecret, string oAuthTokenSecret)\n        {\n            string encodedAndSortedString = BuildEncodedSortedString(parameters);\n            string signatureBaseString = BuildSignatureBaseString(method, url, encodedAndSortedString);\n            string signingKey = BuildSigningKey(consumerSecret, oAuthTokenSecret);\n            string signature = CalculateSignature(signingKey, signatureBaseString);\n            string authorizationHeader = BuildAuthorizationHeaderString(encodedAndSortedString, signature);\n\n            return authorizationHeader;\n        }\n\n        internal static void AddMissingOAuthParameters(IDictionary<string, string> parameters)\n        {\n            const string OAuthVersion = \"1.0\";\n            const string OAuthSignatureMethod = \"HMAC-SHA1\";\n\n            if (!parameters.ContainsKey(\"oauth_timestamp\"))\n                parameters.Add(\"oauth_timestamp\", GetTimestamp());\n\n            if (!parameters.ContainsKey(\"oauth_nonce\"))\n                parameters.Add(\"oauth_nonce\", GenerateNonce());\n\n            if (!parameters.ContainsKey(\"oauth_version\"))\n                parameters.Add(\"oauth_version\", OAuthVersion);\n\n            if (!parameters.ContainsKey(\"oauth_signature_method\"))\n                parameters.Add(\"oauth_signature_method\", OAuthSignatureMethod);     \n        }\n\n        internal static string BuildEncodedSortedString(IDictionary<string, string> parameters)\n        {\n            AddMissingOAuthParameters(parameters);\n\n            return\n                string.Join(\"&\",\n                    (from parm in parameters\n                     orderby parm.Key\n                     select parm.Key + \"=\" + Url.PercentEncode(parameters[parm.Key]))\n                    .ToArray());\n        }\n\n        internal static string BuildSignatureBaseString(string method, string url, string encodedStringParameters)\n        {\n            int paramsIndex = url.IndexOf('?');\n\n            string urlWithoutParams = paramsIndex >= 0 ? url.Substring(0, paramsIndex) : url;\n\n            return string.Join(\"&\", new string[]\n            {\n                method.ToUpper(),\n                Url.PercentEncode(urlWithoutParams, false),\n                Url.PercentEncode(encodedStringParameters, false)\n            });\n        }\n\n        internal static string BuildSigningKey(string consumerSecret, string oAuthTokenSecret)\n        {\n            return string.Format(\n                CultureInfo.InvariantCulture, \"{0}&{1}\",\n                Url.PercentEncode(consumerSecret, false),\n                Url.PercentEncode(oAuthTokenSecret, false));\n        }\n\n        internal static string CalculateSignature(string signingKey, string signatureBaseString)\n        {\n            byte[] key = Encoding.UTF8.GetBytes(signingKey);\n            byte[] msg = Encoding.UTF8.GetBytes(signatureBaseString);\n\n            byte[] hash = new HMACSHA1(key).ComputeHash(msg);\n\n            return Convert.ToBase64String(hash);\n        }\n\n        internal static string BuildAuthorizationHeaderString(string encodedAndSortedString, string signature)\n        {\n            string[] allParms = (encodedAndSortedString + \"&oauth_signature=\" + Url.PercentEncode(signature)).Split('&');\n            string allParmsString =\n                string.Join(\", \",\n                    (from parm in allParms\n                     let keyVal = parm.Split('=')\n                     where parm.StartsWith(\"oauth\") || parm.StartsWith(\"x_auth\")\n                     orderby keyVal[0]\n                     select keyVal[0] + \"=\\\"\" + keyVal[1] + \"\\\"\")\n                    .ToList());\n            return \"OAuth \" + allParmsString;\n        }\n\n        const long UnixEpocTicks = 621355968000000000L;\n        internal static string GetTimestamp()\n        {\n            long ticksSinceUnixEpoc = DateTime.UtcNow.Ticks - UnixEpocTicks;\n            double secondsSinceUnixEpoc = new TimeSpan(ticksSinceUnixEpoc).TotalSeconds;\n            return Math.Floor(secondsSinceUnixEpoc).ToString(CultureInfo.InvariantCulture);\n        }\n\n        internal static string GenerateNonce()\n        {\n            return new Random().Next(1111111, 9999999).ToString(CultureInfo.InvariantCulture);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/SingleUserAuthorizer.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class SingleUserAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// Not required. Since you've already provided all 4 tokens, you don't need to call this.\n        /// </summary>\n        public async Task AuthorizeAsync()\n        {\n            if (!(CredentialStore?.HasAllCredentials() ?? false))\n                throw new InvalidOperationException(\"SingleUserAuthorizer needs pre-set credentials; don't call Authorize unless you've set all four credentials.\");\n\n            await Task.Delay(0).ConfigureAwait(false);\n\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/SingleUserInMemoryCredentialStore.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    /// <summary>\n    /// Maps the twitter-provided credentials to the in memory credentials \n    /// for in-memory use.\n    /// </summary>\n    public class SingleUserInMemoryCredentialStore : InMemoryCredentialStore\n    {\n        // The properties provided by Twitter are named AccessToken and\n        // AccessTokenSecret, we need to map them to what the \n        // IOAuthCredentials interface uses.\n        public virtual string? AccessToken { get; set; }\n        public virtual string? AccessTokenSecret { get; set; }\n\n        public override string? OAuthToken\n        {\n            get\n            {\n                return AccessToken;\n            }\n            set\n            {\n                AccessToken = value;\n            }\n        }\n\n        public override string? OAuthTokenSecret \n        {\n            get\n            {\n                return AccessTokenSecret;\n            }\n            set\n            {\n                AccessTokenSecret = value;\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            AccessToken = null;\n            AccessTokenSecret = null;\n\n            return base.ClearAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/XAuthAuthorizer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.OAuth\n{\n    public class XAuthAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        public async Task AuthorizeAsync()\n        {\n            if (CredentialStore is not XAuthCredentials xauthCredentials)\n                throw new ArgumentException($\"{nameof(CredentialStore)} is required for authorization.\");\n\n            if (xauthCredentials.UserName == null)\n                throw new ArgumentException($\"{nameof(xauthCredentials.UserName)} is required for authorization.\");\n            if (xauthCredentials.Password == null)\n                throw new ArgumentException($\"{nameof(xauthCredentials.Password)} is required for authorization.\");\n\n            var postData = new Dictionary<string, string>\n            {\n                {\"x_auth_username\", xauthCredentials.UserName},\n                {\"x_auth_password\", xauthCredentials.Password},\n                {\"x_auth_mode\", \"client_auth\"}\n            };\n\n            await PostAccessTokenAsync(postData).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/OAuth/XAuthCredentials.cs",
    "content": "﻿namespace LinqToTwitter.OAuth\n{\n    /// <summary>\n    /// Used for XAuthAuthorization, which requires permission from Twitter before using\n    /// </summary>\n    public class XAuthCredentials : InMemoryCredentialStore\n    {\n        /// <summary>\n        /// Twitter User Name\n        /// </summary>\n        public string? UserName { get; set; }\n\n        /// <summary>\n        /// Twitter Password\n        /// </summary>\n        public string? Password { get; set; }\n\n        public override string ToString()\n        {\n            return base.ToString() + \",\" + UserName + \",\" + Password;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/Evaluator.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// translates variable references in expressions to constants\n    /// </summary>\n    public static class Evaluator\n    {\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <param name=\"fnCanBeEvaluated\">A function that decides whether a given expression node can be part of the local function.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression? PartialEval(Expression expression, Func<Expression, bool> fnCanBeEvaluated)\n        {\n            return new SubtreeEvaluator(new Nominator(fnCanBeEvaluated).Nominate(expression)).Eval(expression);\n        }\n\n        /// <summary>\n        /// Performs evaluation & replacement of independent sub-trees\n        /// </summary>\n        /// <param name=\"expression\">The root of the expression tree.</param>\n        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>\n        public static Expression? PartialEval(Expression expression)\n        {\n            return PartialEval(expression, Evaluator.CanBeEvaluatedLocally);\n        }\n\n        static bool CanBeEvaluatedLocally(Expression expression)\n        {\n            return expression.NodeType != ExpressionType.Parameter;\n        }\n\n        /// <summary>\n        /// Evaluates & replaces sub-trees when first candidate is reached (top-down)\n        /// </summary>\n        class SubtreeEvaluator : ExpressionVisitor\n        {\n            readonly HashSet<Expression> candidates;\n\n            internal SubtreeEvaluator(HashSet<Expression> candidates)\n            {\n                this.candidates = candidates;\n            }\n\n            internal Expression? Eval(Expression exp)\n            {\n                return Visit(exp);\n            }\n\n            public override Expression? Visit(Expression? exp)\n            {\n                if (exp == null)\n                    return null;\n\n                if (candidates.Contains(exp))\n                    return Evaluate(exp);\n\n                return base.Visit(exp);\n            }\n\n            static Expression Evaluate(Expression e)\n            {\n                if (e.NodeType == ExpressionType.Constant)\n                {\n                    return e;\n                }\n                LambdaExpression lambda = Expression.Lambda(e);\n                Delegate fn = lambda.Compile();\n                return Expression.Constant(fn.DynamicInvoke(null), e.Type);\n            }\n        }\n\n        /// <summary>\n        /// Performs bottom-up analysis to determine which nodes can possibly\n        /// be part of an evaluated sub-tree.\n        /// </summary>\n        class Nominator : ExpressionVisitor\n        {\n            readonly Func<Expression, bool> fnCanBeEvaluated;\n            HashSet<Expression>? candidates;\n            bool cannotBeEvaluated;\n\n            internal Nominator(Func<Expression, bool> fnCanBeEvaluated)\n            {\n                this.fnCanBeEvaluated = fnCanBeEvaluated;\n            }\n\n            internal HashSet<Expression> Nominate(Expression expression)\n            {\n                candidates = new HashSet<Expression>();\n                Visit(expression);\n                return candidates;\n            }\n\n            public override Expression? Visit(Expression? expression)\n            {\n                if (expression != null)\n                {\n                    bool saveCannotBeEvaluated = cannotBeEvaluated;\n                    cannotBeEvaluated = false;\n                    base.Visit(expression);\n                    if (!cannotBeEvaluated)\n                    {\n                        if (fnCanBeEvaluated(expression))\n                        {\n                            candidates?.Add(expression);\n                        }\n                        else\n                        {\n                            cannotBeEvaluated = true;\n                        }\n                    }\n                    cannotBeEvaluated |= saveCannotBeEvaluated;\n                }\n                return expression;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/ExpressionTreeHelpers.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing LinqToTwitter.Common;\nusing System;\nusing System.Linq.Expressions;\nusing System.Reflection;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// utilities for working with expression trees\n    /// </summary>\n    internal class ExpressionTreeHelpers\n    {\n        /// <summary>\n        /// test to see if expression is a binary expression that checks equality with a constant value\n        /// - essentially, the caller wants to know if this is a well-formed expression with certain criteria\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">type containing member</param>\n        /// <param name=\"memberName\">member being checked</param>\n        /// <returns>true if member is being checked for equality with value</returns>\n        internal static bool IsMemberEqualsValueExpression(Expression exp, Type declaringType, string memberName)\n        {\n            if (exp.NodeType != ExpressionType.Equal &&\n                exp.NodeType != ExpressionType.NotEqual &&\n                exp.NodeType != ExpressionType.GreaterThan &&\n                exp.NodeType != ExpressionType.GreaterThanOrEqual &&\n                exp.NodeType != ExpressionType.LessThan &&\n                exp.NodeType != ExpressionType.LessThanOrEqual)\n                return false;\n\n            BinaryExpression be = (BinaryExpression)exp;\n\n            // Assert.\n            if (IsSpecificMemberExpression(be.Left, declaringType, memberName) &&\n                IsSpecificMemberExpression(be.Right, declaringType, memberName))\n                throw new Exception(\"Cannot have 'member' == 'member' in an expression!\");\n\n            return (\n                IsSpecificMemberExpression(be.Left, declaringType, memberName) ||\n                IsSpecificMemberExpression(be.Right, declaringType, memberName));\n        }\n\n        /// <summary>\n        /// verify that the type and member name in the expression are what is expected\n        /// </summary>\n        /// <param name=\"exp\">expression to check</param>\n        /// <param name=\"declaringType\">expected type</param>\n        /// <param name=\"memberName\">expected member name</param>\n        /// <returns>true if type and name in expression match expected type and name</returns>\n        internal static bool IsSpecificMemberExpression(Expression exp, Type declaringType, string memberName)\n        {\n            // adjust for enums or VB ConvertChecked\n            // VB wraps Type in a ConvertChecked that we must extract\n            Expression? tempExp =\n                exp.NodeType == ExpressionType.Convert ||\n                exp.NodeType == ExpressionType.ConvertChecked ?\n                    (exp as UnaryExpression)?.Operand :\n                    exp;\n\n            return ((tempExp is MemberExpression expression) &&\n                (expression.Member.DeclaringType == declaringType) &&\n                (expression.Member.Name == memberName));\n        }\n\n        /// <summary>\n        /// extracts the constant value from a binary equals expression\n        /// - either the left or right side of the expression\n        /// </summary>\n        /// <param name=\"be\">binary expression</param>\n        /// <param name=\"memberDeclaringType\">type of object</param>\n        /// <param name=\"memberName\">member to get value for</param>\n        /// <returns>string representation of value</returns>\n        internal static string GetValueFromEqualsExpression(BinaryExpression be, Type memberDeclaringType, string memberName)\n        {\n            if (be.NodeType != ExpressionType.Equal &&\n                be.NodeType != ExpressionType.NotEqual &&\n                be.NodeType != ExpressionType.GreaterThan &&\n                be.NodeType != ExpressionType.GreaterThanOrEqual &&\n                be.NodeType != ExpressionType.LessThan &&\n                be.NodeType != ExpressionType.LessThanOrEqual)\n                throw new Exception(\"There is a bug in this program.\");\n\n            if (be.Left.NodeType == ExpressionType.MemberAccess ||\n                be.Left.NodeType == ExpressionType.Convert ||\n                be.Left.NodeType == ExpressionType.ConvertChecked)\n            {\n                // adjust for enums & VB ConvertChecked\n                MemberExpression? me =\n                    be.Left.NodeType == ExpressionType.Convert ||\n                    be.Left.NodeType == ExpressionType.ConvertChecked ?\n                        (be.Left as UnaryExpression)?.Operand as MemberExpression :\n                        be.Left as MemberExpression;\n\n                if (me?.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                    return GetValueFromExpression(be.Right);\n            }\n            else if (be.Right.NodeType == ExpressionType.MemberAccess)\n            {\n                MemberExpression me = (MemberExpression)be.Right;\n\n                if (me.Member.DeclaringType == memberDeclaringType && me.Member.Name == memberName)\n                    return GetValueFromExpression(be.Left);\n            }\n\n            // We should have returned by now.\n            throw new Exception(\"There is a bug in this program.\");\n        }\n\n        /// <summary>\n        /// converts constant expression to constant value\n        /// </summary>\n        /// <param name=\"expression\">constant expression</param>\n        /// <returns>constant value</returns>\n        internal static string GetValueFromExpression(Expression expression)\n        {\n            if (expression.NodeType == ExpressionType.Constant)\n            {\n                string? constantValue = ((ConstantExpression)expression)?.Value?.ToString();\n\n                if (constantValue == null)\n                    throw new InvalidQueryException($\"null Constant value for expression : {expression?.ToString()}\");\n\n                return constantValue;\n            }\n            else if (expression.NodeType == ExpressionType.Convert || expression.NodeType == ExpressionType.ConvertChecked)\n            {\n                ConstantExpression? constExpr = (expression as UnaryExpression)?.Operand as ConstantExpression;\n                object? constExpValue = constExpr?.Value;\n                int constVal = constExpValue == null ? 0 : (int)constExpValue;\n\n                return constVal.ToString();\n            }\n            else if (expression.NodeType == ExpressionType.MemberAccess)\n            {\n                MemberExpression memberExpression = (MemberExpression)expression;\n                FieldInfo? fieldInfo = memberExpression?.Member as FieldInfo;\n                ConstantExpression? constantExpression = memberExpression?.Expression as ConstantExpression;\n                string? constantValue = fieldInfo?.GetValue(constantExpression?.Value)?.ToString();\n\n                if (constantValue == null)\n                    throw new InvalidQueryException($\"null MemberAccess value for expression: {expression?.ToString()}\");\n\n                return constantValue;\n            }\n            else\n            {\n                throw new InvalidQueryException(\n                    string.Format(\"The expression type {0} is not supported to obtain a value.\", expression.NodeType));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/ExpressionTreeModifier.cs",
    "content": "﻿using System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    class ExpressionTreeModifier<T> : ExpressionVisitor\n    {\n        readonly IQueryable<T> queryableItems;\n\n        internal ExpressionTreeModifier(IQueryable<T> items)\n        {\n            queryableItems = items;\n        }\n\n        internal Expression? CopyAndModify(Expression expression)\n        {\n            return Visit(expression);\n        }\n\n        protected override Expression VisitConstant(ConstantExpression c)\n        {\n            // Replace the constant TwitterQueryable arg with the queryable collection.\n            if (c.Type.Name == \"TwitterQueryable`1\")\n                return Expression.Constant(queryableItems);\n            \n            return c;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/ExpressionVisitor.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    public abstract class ExpressionVisitor\n    {\n        public virtual Expression? Visit(Expression? exp)\n        {\n            if (exp == null)\n                return exp;\n\n            return exp.NodeType switch\n            {\n                ExpressionType.Negate or ExpressionType.NegateChecked or ExpressionType.Not or ExpressionType.Convert or ExpressionType.ConvertChecked or ExpressionType.ArrayLength or ExpressionType.Quote or ExpressionType.TypeAs => this.VisitUnary((UnaryExpression)exp),\n                ExpressionType.Add or ExpressionType.AddChecked or ExpressionType.Subtract or ExpressionType.SubtractChecked or ExpressionType.Multiply or ExpressionType.MultiplyChecked or ExpressionType.Divide or ExpressionType.Modulo or ExpressionType.And or ExpressionType.AndAlso or ExpressionType.Or or ExpressionType.OrElse or ExpressionType.LessThan or ExpressionType.LessThanOrEqual or ExpressionType.GreaterThan or ExpressionType.GreaterThanOrEqual or ExpressionType.Equal or ExpressionType.NotEqual or ExpressionType.Coalesce or ExpressionType.ArrayIndex or ExpressionType.RightShift or ExpressionType.LeftShift or ExpressionType.ExclusiveOr => this.VisitBinary((BinaryExpression)exp),\n                ExpressionType.TypeIs => this.VisitTypeIs((TypeBinaryExpression)exp),\n                ExpressionType.Conditional => this.VisitConditional((ConditionalExpression)exp),\n                ExpressionType.Constant => this.VisitConstant((ConstantExpression)exp),\n                ExpressionType.Parameter => this.VisitParameter((ParameterExpression)exp),\n                ExpressionType.MemberAccess => this.VisitMemberAccess((MemberExpression)exp),\n                ExpressionType.Call => this.VisitMethodCall((MethodCallExpression)exp),\n                ExpressionType.Lambda => this.VisitLambda((LambdaExpression)exp),\n                ExpressionType.New => this.VisitNew((NewExpression)exp),\n                ExpressionType.NewArrayInit or ExpressionType.NewArrayBounds => this.VisitNewArray((NewArrayExpression)exp),\n                ExpressionType.Invoke => this.VisitInvocation((InvocationExpression)exp),\n                ExpressionType.MemberInit => this.VisitMemberInit((MemberInitExpression)exp),\n                ExpressionType.ListInit => this.VisitListInit((ListInitExpression)exp),\n                _ => throw new Exception(string.Format(\"Unhandled expression type: '{0}'\", exp.NodeType)),\n            };\n        }\n\n        protected virtual MemberBinding VisitBinding(MemberBinding binding)\n        {\n            return binding.BindingType switch\n            {\n                MemberBindingType.Assignment => this.VisitMemberAssignment((MemberAssignment)binding),\n                MemberBindingType.MemberBinding => this.VisitMemberMemberBinding((MemberMemberBinding)binding),\n                MemberBindingType.ListBinding => this.VisitMemberListBinding((MemberListBinding)binding),\n                _ => throw new Exception(string.Format(\"Unhandled binding type '{0}'\", binding.BindingType)),\n            };\n        }\n\n        protected virtual ElementInit VisitElementInitializer(ElementInit initializer)\n        {\n            ReadOnlyCollection<Expression> arguments = this.VisitExpressionList(initializer.Arguments);\n\n            if (arguments != initializer.Arguments)\n                return Expression.ElementInit(initializer.AddMethod, arguments);\n\n            return initializer;\n        }\n\n        protected virtual Expression VisitUnary(UnaryExpression u)\n        {\n            Expression? operand = this.Visit(u.Operand);\n\n            if (operand != u.Operand)\n                return Expression.MakeUnary(u.NodeType, operand, u.Type, u.Method);\n\n            return u;\n        }\n\n        protected virtual Expression VisitBinary(BinaryExpression b)\n        {\n            Expression? left = this.Visit(b.Left);\n            Expression? right = this.Visit(b.Right);\n            Expression? conversion = this.Visit(b.Conversion);\n\n            if (left != b.Left || right != b.Right || conversion != b.Conversion)\n            {\n                if (b.NodeType == ExpressionType.Coalesce && b.Conversion != null)\n                    return Expression.Coalesce(left, right, conversion as LambdaExpression);\n                else\n                    return Expression.MakeBinary(b.NodeType, left, right, b.IsLiftedToNull, b.Method);\n            }\n\n            return b;\n        }\n\n        protected virtual Expression VisitTypeIs(TypeBinaryExpression b)\n        {\n            Expression? expr = this.Visit(b.Expression);\n\n            if (expr != b.Expression)\n                return Expression.TypeIs(expr, b.TypeOperand);\n\n            return b;\n        }\n\n        protected virtual Expression VisitConstant(ConstantExpression c)\n        {\n            return c;\n        }\n\n        protected virtual Expression VisitConditional(ConditionalExpression c)\n        {\n            Expression? test = this.Visit(c.Test);\n            Expression? ifTrue = this.Visit(c.IfTrue);\n            Expression? ifFalse = this.Visit(c.IfFalse);\n\n            if (test != c.Test || ifTrue != c.IfTrue || ifFalse != c.IfFalse)\n                return Expression.Condition(test, ifTrue, ifFalse);\n\n            return c;\n        }\n\n        protected virtual Expression VisitParameter(ParameterExpression p)\n        {\n            return p;\n        }\n\n        protected virtual Expression VisitMemberAccess(MemberExpression m)\n        {\n            Expression? exp = this.Visit(m.Expression);\n\n            if (exp != m.Expression)\n                return Expression.MakeMemberAccess(exp, m.Member);\n\n            return m;\n        }\n\n        protected virtual Expression VisitMethodCall(MethodCallExpression m)\n        {\n            Expression? obj = this.Visit(m.Object);\n            IEnumerable<Expression> args = this.VisitExpressionList(m.Arguments);\n\n            if (obj != m.Object || args != m.Arguments)\n                return Expression.Call(obj, m.Method, args);\n\n            return m;\n        }\n\n        protected virtual ReadOnlyCollection<Expression> VisitExpressionList(ReadOnlyCollection<Expression> original)\n        {\n            List<Expression> list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                Expression? p = this.Visit(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(p);\n                }\n                else if (p != original[i])\n                {\n                    list = new List<Expression>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(p);\n                }\n            }\n\n            if (list != null)\n                return new ReadOnlyCollection<Expression>(list);\n\n            return original;\n        }\n\n        protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assignment)\n        {\n            Expression? e = this.Visit(assignment.Expression);\n\n            if (e != assignment.Expression)\n                return Expression.Bind(assignment.Member, e);\n\n            return assignment;\n        }\n\n        protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)\n        {\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(binding.Bindings);\n\n            if (bindings != binding.Bindings)\n                return Expression.MemberBind(binding.Member, bindings);\n\n            return binding;\n        }\n\n        protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)\n        {\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(binding.Initializers);\n\n            if (initializers != binding.Initializers)\n                return Expression.ListBind(binding.Member, initializers);\n\n            return binding;\n        }\n\n        protected virtual IEnumerable<MemberBinding> VisitBindingList(ReadOnlyCollection<MemberBinding> original)\n        {\n            List<MemberBinding>? list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                MemberBinding b = this.VisitBinding(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(b);\n                }\n                else if (b != original[i])\n                {\n                    list = new List<MemberBinding>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(b);\n                }\n            }\n\n            if (list != null)\n                return list;\n\n            return original;\n        }\n\n        protected virtual IEnumerable<ElementInit> VisitElementInitializerList(ReadOnlyCollection<ElementInit> original)\n        {\n            List<ElementInit>? list = null;\n\n            for (int i = 0, n = original.Count; i < n; i++)\n            {\n                ElementInit init = this.VisitElementInitializer(original[i]);\n\n                if (list != null)\n                {\n                    list.Add(init);\n                }\n                else if (init != original[i])\n                {\n                    list = new List<ElementInit>(n);\n\n                    for (int j = 0; j < i; j++)\n                    {\n                        list.Add(original[j]);\n                    }\n\n                    list.Add(init);\n                }\n            }\n\n            if (list != null)\n                return list;\n\n            return original;\n        }\n\n        protected virtual Expression VisitLambda(LambdaExpression lambda)\n        {\n            Expression? body = this.Visit(lambda.Body);\n\n            if (body != lambda.Body)\n                return Expression.Lambda(lambda.Type, body, lambda.Parameters);\n\n            return lambda;\n        }\n\n        protected virtual NewExpression VisitNew(NewExpression nex)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(nex.Arguments);\n\n            if (args != nex.Arguments)\n            {\n                if (nex.Members != null)\n                    return Expression.New(nex.Constructor, args, nex.Members);\n                else\n                    return Expression.New(nex.Constructor, args);\n            }\n\n            return nex;\n        }\n\n        protected virtual Expression VisitMemberInit(MemberInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n\n            IEnumerable<MemberBinding> bindings = this.VisitBindingList(init.Bindings);\n\n            if (n != init.NewExpression || bindings != init.Bindings)\n                return Expression.MemberInit(n, bindings);\n\n            return init;\n        }\n\n        protected virtual Expression VisitListInit(ListInitExpression init)\n        {\n            NewExpression n = this.VisitNew(init.NewExpression);\n            IEnumerable<ElementInit> initializers = this.VisitElementInitializerList(init.Initializers);\n\n            if (n != init.NewExpression || initializers != init.Initializers)\n                return Expression.ListInit(n, initializers);\n\n            return init;\n        }\n\n        protected virtual Expression VisitNewArray(NewArrayExpression na)\n        {\n            IEnumerable<Expression> exprs = this.VisitExpressionList(na.Expressions);\n\n            if (exprs != na.Expressions)\n            {\n                if (na.NodeType == ExpressionType.NewArrayInit)\n                {\n                    return Expression.NewArrayInit(na.Type.GetElementType(), exprs);\n                }\n                else\n                {\n                    return Expression.NewArrayBounds(na.Type.GetElementType(), exprs);\n                }\n            }\n\n            return na;\n        }\n\n        protected virtual Expression VisitInvocation(InvocationExpression iv)\n        {\n            IEnumerable<Expression> args = this.VisitExpressionList(iv.Arguments);\n            Expression? expr = this.Visit(iv.Expression);\n\n            if (args != iv.Arguments || expr != iv.Expression)\n                return Expression.Invoke(expr, args);\n\n            return iv;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/IRequestProcessor.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    public interface IRequestProcessor<T>\n    {\n        string? BaseUrl { get; set; }\n        Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression);\n        Request BuildUrl(Dictionary<string, string> expressionParameters);\n        List<T> ProcessResults(string twitterResponse);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/IRequestProcessorWantsJson.cs",
    "content": "﻿namespace LinqToTwitter.Provider\n{\n    // temporary marker interface used to communicate that this\n    // request processor wants native JSON objects.\n    public interface IRequestProcessorWantsJson\n    {\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/IRequestProcessorWithAction.cs",
    "content": "﻿using System;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace LinqToTwitter.Provider\n{\n    // Declare that this request processor knows how to handle action\n    // responses, implies the request processor also wants native JSON objects.\n    public interface IRequestProcessorWithAction<T>\n        : IRequestProcessorWantsJson\n    {\n        [return: MaybeNull]\n        T ProcessActionResult(string twitterResponse, Enum theAction);\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/ITwitterExecute.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// Members for communicating with Twitter\n    /// </summary>\n    public interface ITwitterExecute\n    {\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        IAuthorizer? Authorizer { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        Uri? LastUrl { get; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        IDictionary<string, string>? ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        string? UserAgent { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        int Timeout { get; set; }\n\n        /// <summary>\n        /// Performs HTTP POST, with JSON payload, to Twitter.\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request.</param>\n        /// <param name=\"postData\">URL parameters to post.</param>\n        /// <param name=\"postObj\">Serializable payload object.</param>\n        /// <param name=\"getResult\">Callback for handling async Json response - null if synchronous.</param>\n        /// <returns>JSON Response from Twitter - empty string if async.</returns>\n        Task<string> SendJsonToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, T postObj, CancellationToken cancelToken);\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        Task<string> PostFormUrlEncodedToTwitterAsync<T>(string method, string url, IDictionary<string, string?> postData, CancellationToken cancelToken);\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        Task<string> PostImageAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken);\n\n        /// <summary>\n        /// performs HTTP POST media byte array upload to Twitter\n        /// </summary>\n        /// <param name=\"url\">url to upload to</param>\n        /// <param name=\"postData\">request parameters</param>\n        /// <param name=\"image\">Image data in a byte[]</param>\n        /// <param name=\"name\">Name of parameter to pass to Twitter.</param>\n        /// <param name=\"fileName\">name to pass to Twitter for the file</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, tweet_video, and amplify_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Cancellation token</param>\n        /// <returns>JSON results From Twitter</returns>\n        Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] image, string name, string fileName, string? contentType, string mediaCategory, bool shared, CancellationToken cancelToken);\n\n        /// <summary>\n        /// makes HTTP call to Twitter API\n        /// </summary>\n        /// <param name=\"url\">URL with all query info</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>JSON Results from Twitter</returns>\n        Task<string> QueryTwitterAsync<T>(Request req, IRequestProcessor<T> reqProc);\n\n        /// <summary>\n        /// Query for Twitter Streaming APIs\n        /// </summary>\n        /// <param name=\"req\">Request URL and parameters.</param>\n        /// <returns>Placeholder - real data flows from stream into callback you define.</returns>\n        Task<string> QueryTwitterStreamAsync(Request req);\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        Func<StreamContent, Task>? StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        bool IsStreamClosed { get; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        CancellationToken CancellationToken { get; set; }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        void CloseStream();\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/LinqExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace LinqToTwitter.Provider\n{\n    public static class LinqExtensions\n    {\n        /// <summary>\n        /// Takes a single element and returns an IEnumerable of just that element.\n        /// </summary>\n        /// <typeparam name=\"T\">What kind of element we're enumerating</typeparam>\n        /// <param name=\"oneOff\">The one element in the resulting enumeration</param>\n        /// <returns>An IEnumerable that has one element (consisting of the oneOff parameter)</returns>\n        public static IEnumerable<T> ToEnumerable<T>(this T oneOff)\n        {\n            yield return oneOff;\n        }\n\n        [return: MaybeNull]\n        public static TTo ItemCast<TFrom, TTo>(this TFrom item, TTo? defaultValue)\n            where TTo: class\n        {\n            return item as TTo ?? defaultValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/MethodCallExpressionTypeFinder.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    internal class MethodCallExpressionTypeFinder : ExpressionVisitor\n    {\n        Type? genericType;\n\n        /// <summary>\n        /// Gets the underlying type of the whole method call expression\n        /// </summary>\n        /// <param name=\"exp\">MethodCallExpression</param>\n        /// <returns>Type</returns>\n        public Type? GetGenericType(Expression exp)\n        {\n            Visit(exp);\n            return genericType;\n        }\n\n\n        /// <summary>\n        /// Sets the expression type when found\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (expression.Arguments.Count > 0)\n                genericType = expression.Method.GetGenericArguments()[0];\n\n            // look at extension source to see if there is an inner type\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/ParameterFinder.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// extracts parameters from an expression\n    /// - called for extracting parameters and values on where clauses\n    /// </summary>\n    /// <typeparam name=\"T\">type to get parameters for</typeparam>\n    internal class ParameterFinder<T> : ExpressionVisitor\n    {\n        /// <summary>\n        /// expression being searched\n        /// </summary>\n        readonly Expression? expression;\n\n        /// <summary>\n        /// parameters to search for\n        /// </summary>\n        readonly Dictionary<string, string> parameters;\n\n        /// <summary>\n        /// names of input parameters\n        /// </summary>\n        readonly List<string> parameterNames;\n\n        /// <summary>\n        /// keep track of expression and parameter list\n        /// </summary>\n        /// <param name=\"expression\">expression to search</param>\n        /// <param name=\"parameterNames\">parameters to search for</param>\n        public ParameterFinder(Expression expression, List<string> parameterNames)\n        {\n            this.parameters = new Dictionary<string, string>();\n            this.expression = expression;\n            this.parameterNames = parameterNames;\n        }\n\n        /// <summary>\n        /// name/value pairs of parameters and their values\n        /// </summary>\n        public Dictionary<string, string> Parameters\n        {\n            get\n            {\n                Visit(expression);\n                return parameters;\n            }\n        }\n\n        /// <summary>\n        /// extracts values from equality expressions that match parameter names\n        /// </summary>\n        /// <param name=\"be\">binary expression to evaluate</param>\n        /// <returns>binary expression - supports recursive tree traversal in visitor</returns>\n        protected override Expression VisitBinary(BinaryExpression be)\n        {\n            if (be.NodeType == ExpressionType.Equal || \n                be.NodeType == ExpressionType.GreaterThan ||\n                be.NodeType == ExpressionType.GreaterThanOrEqual ||\n                be.NodeType == ExpressionType.LessThan ||\n                be.NodeType == ExpressionType.LessThanOrEqual ||\n                be.NodeType == ExpressionType.NotEqual)\n            {\n                foreach (var param in parameterNames)\n                {\n                    if (ExpressionTreeHelpers.IsMemberEqualsValueExpression(be, typeof(T), param))\n                    {\n                        parameters.Add(param, ExpressionTreeHelpers.GetValueFromEqualsExpression(be, typeof(T), param));\n                        return be;\n                    }\n                }\n\n                return base.VisitBinary(be);\n            }\n            else\n                return base.VisitBinary(be);\n        }\n\n        protected override Expression VisitMethodCall(MethodCallExpression me)\n        {\n\n            foreach (var param in parameterNames)\n            {\n                if (me?.Method.Name == \"CompareString\" && (me?.Arguments[0] as MemberExpression)?.Member.Name == param)\n                {\n                    string? constantValue = (me.Arguments[1] as ConstantExpression)?.Value?.ToString();\n                    \n                    if (constantValue != null)\n                        parameters.Add(param, constantValue);\n                    \n                    return me;\n                } \n            }\n\n            return base.VisitMethodCall(me);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/QueryParameter.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// Provides an structure to hold the query parameters\n    /// </summary>\n    public class QueryParameter : IComparable<QueryParameter>, IComparable\n    {\n        public QueryParameter(string name, string value)\n        {\n            this.Name = name;\n            this.Value = value;\n        }\n\n        public string Name { get; }\n\n        public string Value { get; internal set; }\n\n        public int CompareTo(object? obj)\n        {\n            if (obj is null)\n                return this is null ? 0 : 1;\n\n            var other = obj as QueryParameter;\n            return CompareTo(other);\n        }\n\n        public int CompareTo(QueryParameter? other)\n        {\n            return defaultComparer.Compare(this, other);\n        }\n\n        static readonly IComparer<QueryParameter> defaultComparer = new QueryParameterComparer();\n    }\n\n    /// <summary>\n    /// Comparer class used to perform the sorting of the query parameters\n    /// </summary>\n    public class QueryParameterComparer : IComparer<QueryParameter>\n    {\n        public int Compare(QueryParameter? x, QueryParameter? y)\n        {\n            if (x == null || y == null)\n            {\n                if (x == y)\n                    return 0;\n                else if (x == null && y != null)\n                    return 1;\n                else\n                    return -1;\n            }\n\n            if (x.Name.Equals(y.Name))\n            {\n                return string.Compare(x.Value, y.Value);\n            }\n            else\n            {\n                return string.Compare(x.Name, y.Name);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/Request.cs",
    "content": "using LinqToTwitter.Net;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace LinqToTwitter.Provider\n{\n    public class Request\n    {\n        public string Endpoint { get; set; }\n        public bool IsStreaming { get; set; }\n        public IList<QueryParameter> RequestParameters { get; internal set; }\n\n        public Request(string endpoint)\n        {\n            this.Endpoint = endpoint;\n            this.RequestParameters = new List<QueryParameter>();\n        }\n\n        public string FullUrl\n        {\n            get\n            {\n                var queryString = this.QueryString;\n\n                if (queryString.Length > 0)\n                    return Endpoint + \"?\" + QueryString;\n                else return Endpoint;\n            }\n        }\n\n        public string QueryString\n        {\n            get\n            {\n                if (RequestParameters == null)\n                    throw new ArgumentNullException(\"parameters\");\n\n                StringBuilder builder = new StringBuilder();\n                foreach (var pair in RequestParameters.Where(p => !string.IsNullOrWhiteSpace(p.Value)))\n                {\n                    builder.Append(Url.PercentEncode(pair.Name));\n                    builder.Append('=');\n                    builder.Append(Url.PercentEncode(pair.Value));\n                    builder.Append('&');\n                }\n\n                if (builder.Length > 1)\n                    builder.Length--;   // truncate trailing &\n\n                return builder.ToString();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/RequestProcessorHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// reusable methods for all request processors\n    /// </summary>\n    internal class RequestProcessorHelper\n    {\n        /// <summary>\n        /// Some query parameters represent enum types. Different languages\n        /// handle such values in different ways when translating query expressions.\n        /// This method performs the conversion to the enum type regardless of whether\n        /// the parameter string represents an int value or a textual enum case name.\n        /// </summary>\n        /// <remarks>\n        /// Delphi and F# enums come to the IRequestProcessor as pneumonic strings,\n        /// but C# enums arrive as the underlying int type of the enum;\n        /// therefore, we must determine what we're working with to succeed.\n        /// </remarks>\n        /// <typeparam name=\"T\">Enum type to convert to</typeparam>\n        /// <param name=\"enumValue\">\n        /// Either a string enum member name (from Delphi Prism or F#)\n        /// or an underlying int value (from C#/VB)\n        /// </param>\n        /// <returns>Parameter value translated to the requested enum type</returns>\n        internal static T ParseEnum<T>(string enumValue)\n        {\n            return (T)Enum.Parse(typeof(T), enumValue, /*ignoreCase:*/ true);\n        }\n\n        /// <summary>\n        /// Determines if a parameter is true\n        /// </summary>\n        /// <param name=\"parameters\">Name/Value list of parameters</param>\n        /// <param name=\"key\">Name of parameter to check.</param>\n        /// <returns>Boolean value of parameter (false if value is false or not bool)</returns>\n        internal static bool FlagTrue(IDictionary<string, string> parameters, string key)\n        {\n            bool flag;\n\n            if (!bool.TryParse(parameters[key], out flag))\n                flag = false;\n\n            return flag;\n        }\n\n        /// <summary>\n        /// Sets parameter, but doen't treat as a query parameter\n        /// </summary>\n        /// <example>\n        /// //\n        /// // Notice how we need UserID as a parameter - we use this pattern a lot.\n        /// //\n        /// \n        /// SetRequredSegmentParam(parameters, nameof(UserID), val => UserID = val);\n        /// \n        /// var req = new Request($\"{BaseUrl}users/{UserID}/owned_lists\");\n        /// \n        /// </example>\n        /// <param name=\"parameters\">list of parameters</param>\n        /// <param name=\"paramName\">name of parameter containing value to set</param>\n        /// <param name=\"setter\">lambda to set property with value</param>\n        internal static void SetSegment(\n            Dictionary<string, string> parameters,\n            string paramName,\n            Action<string> setter)\n        {\n            if (parameters.ContainsKey(paramName))\n                setter(parameters[paramName]);\n            else\n                throw new ArgumentException($\"{paramName} is required\", paramName);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/TwitterExecute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Net;\nusing LinqToTwitter.OAuth;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// Logic that performs actual communication with Twitter\n    /// </summary>\n    internal partial class TwitterExecute : ITwitterExecute, IDisposable\n    {\n        internal const int DefaultReadWriteTimeout = 300000;\n        internal const int DefaultTimeout = 100000;\n\n        /// <summary>\n        /// Gets or sets the object that can send authorized requests to Twitter.\n        /// </summary>\n        public IAuthorizer? Authorizer { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) for writing to request \n        /// stream or reading from response stream\n        /// </summary>\n        public int ReadWriteTimeout { get; set; }\n\n        /// <summary>\n        /// Timeout (milliseconds) to wait for a server response\n        /// </summary>\n        public int Timeout { get; set; }\n\n        /// <summary>\n        /// Gets the most recent URL executed\n        /// </summary>\n        /// <remarks>\n        /// This is very useful for debugging\n        /// </remarks>\n        public Uri? LastUrl { get; private set; }\n\n        /// <summary>\n        /// list of response headers from query\n        /// </summary>\n        public IDictionary<string, string>? ResponseHeaders { get; set; }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string? UserAgent\n        {\n            get\n            {\n                return Authorizer?.UserAgent;\n            }\n            set\n            {\n                if (Authorizer != null)\n                    Authorizer.UserAgent =\n                        string.IsNullOrWhiteSpace(value) ?\n                            Authorizer.UserAgent :\n                            value + \", \" + Authorizer.UserAgent;\n            }\n        }\n\n        /// <summary>\n        /// Assign your TextWriter instance to receive LINQ to Twitter output\n        /// </summary>\n        public static TextWriter? Log { get; set; }\n\n        readonly object streamingCallbackLock = new();\n\n        /// <summary>\n        /// Allows users to process content returned from stream\n        /// </summary>\n        public Func<StreamContent, Task>? StreamingCallbackAsync { get; set; }\n\n        /// <summary>\n        /// HttpClient instance being used in a streaming operation\n        /// </summary>\n        internal HttpClient? StreamingClient { get; set; }\n\n        /// <summary>\n        /// Set to true to close stream, false means stream is still open\n        /// </summary>\n        public bool IsStreamClosed { get; internal set; }\n\n        /// <summary>\n        /// Allows callers to cancel operation (where applicable)\n        /// </summary>\n        public CancellationToken CancellationToken { get; set; }\n\n        readonly object asyncCallbackLock = new();\n\n        /// <summary>\n        /// supports testing\n        /// </summary>\n        public TwitterExecute(IAuthorizer authorizer)\n        {\n            Authorizer = authorizer ?? throw new ArgumentNullException(\"authorizedClient\");\n            Authorizer.UserAgent = Authorizer.UserAgent ?? L2TKeys.DefaultUserAgent;\n        }\n\n        /// <summary>\n        /// Used in queries to read information from Twitter API endpoints.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters</param>\n        /// <param name=\"reqProc\">Request Processor for Async Results</param>\n        /// <returns>XML Respose from Twitter</returns>\n        public async Task<string> QueryTwitterAsync<T>(Request request, IRequestProcessor<T> reqProc)\n        {\n            WriteLog(request.FullUrl, nameof(QueryTwitterAsync));\n            _ = Authorizer ?? throw new ArgumentNullException(nameof(Authorizer), $\"{nameof(Authorizer)} is required.\");\n\n\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n\n            Dictionary<string, string> parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            var handler = new GetMessageHandler(this, parms, request.FullUrl, Authorizer.SupportsCompression);\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            var msg = await client.SendAsync(req, CancellationToken).ConfigureAwait(false);\n\n            return await HandleResponseAsync(msg).ConfigureAwait(false);\n        }\n  \n        internal void SetAuthorizationHeader(string method, string url, IDictionary<string, string> parms, HttpRequestMessage req)\n        {\n            _ = Authorizer ?? throw new ArgumentNullException(nameof(Authorizer), $\"{nameof(Authorizer)} is required.\");\n\n            var authStringParms = parms.ToDictionary(parm => parm.Key, elm => elm.Value);\n            authStringParms.Add(\"oauth_consumer_key\", Authorizer.CredentialStore?.ConsumerKey ?? string.Empty);\n            authStringParms.Add(\"oauth_token\", Authorizer.CredentialStore?.OAuthToken ?? string.Empty);\n\n            string? authorizationString = Authorizer.GetAuthorizationString(method, url, authStringParms);\n\n            req.Headers.Add(\"Authorization\", authorizationString);\n        }\n\n        /// <summary>\n        /// Performs a query on the Twitter Stream.\n        /// </summary>\n        /// <param name=\"request\">Request with url endpoint and all query parameters.</param>\n        /// <returns>\n        /// Caller expects an JSON formatted string response, but\n        /// real response(s) with streams is fed to the callback.\n        /// </returns>\n        public async Task<string> QueryTwitterStreamAsync(Request request)\n        {\n            WriteLog(request.FullUrl, nameof(QueryTwitterStreamAsync));\n            _ = Authorizer ?? throw new ArgumentNullException(nameof(Authorizer), $\"{nameof(Authorizer)} is required.\");\n\n            var req = new HttpRequestMessage(HttpMethod.Get, new Uri(request.FullUrl));\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            Authorizer.SupportsCompression = false;\n            var handler = new GetMessageHandler(this, parms, request.FullUrl, Authorizer.SupportsCompression);\n\n            StreamingClient = new HttpClient(handler)\n            {\n                Timeout = TimeSpan.FromMilliseconds(System.Threading.Timeout.Infinite)\n            };\n\n            var response = await StreamingClient.SendAsync(\n                req, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(response).ConfigureAwait(false);\n\n            Stream? stream = null;\n            MemoryStream? memStr = null;\n\n            try\n            {\n                const int CarriageReturn = 0x0D;\n                const int LineFeed = 0x0A;\n\n                stream = await CreateStream(response).ConfigureAwait(false);\n                memStr = new MemoryStream();\n\n                byte[] readByte;\n\n                while (stream.CanRead && !IsStreamClosed)\n                {\n                    readByte = new byte[1];\n                    await stream.ReadAsync(readByte.AsMemory(0, 1), CancellationToken).ConfigureAwait(false);\n                    byte nextByte = readByte.SingleOrDefault();\n\n                    CancellationToken.ThrowIfCancellationRequested();\n\n                    if (IsStreamClosed) break;\n\n                    if (nextByte == 0xff) break;\n\n                    if (nextByte != CarriageReturn && nextByte != LineFeed)\n                        memStr.WriteByte(nextByte);\n\n                    if (nextByte == LineFeed)\n                    {\n                        int byteCount = (int)memStr.Length;\n                        byte[] tweetBytes = new byte[byteCount];\n\n                        memStr.Position = 0;\n                        await memStr.ReadAsync(tweetBytes.AsMemory(0, byteCount), CancellationToken).ConfigureAwait(false);\n\n                        string tweet = Encoding.UTF8.GetString(tweetBytes, 0, byteCount);\n                        var strmContent = new StreamContent(this, tweet);\n\n                        if (StreamingCallbackAsync != null)\n                            await StreamingCallbackAsync(strmContent).ConfigureAwait(false);\n\n                        memStr.Dispose();\n                        memStr = new MemoryStream();\n                    }\n                }\n            }\n            finally\n            {\n                stream?.Dispose();\n                memStr?.Dispose();\n            }\n\n            IsStreamClosed = false;\n\n            return \"{}\";\n        }\n \n        HttpRequestMessage ConfigureRequest(Request request)\n        {\n            _ = Authorizer ?? throw new ArgumentNullException(nameof(Authorizer), $\"{nameof(Authorizer)} is required.\");\n\n            var httpRequest = new HttpRequestMessage(HttpMethod.Post, request.Endpoint);\n\n            var parameters =\n                string.Join(\"&\",\n                    (from parm in request.RequestParameters\n                     select parm.Name + \"=\" + Url.PercentEncode(parm.Value))\n                    .ToList());                            \n            var content = new StringContent(parameters, Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            httpRequest.Content = content;\n\n            var parms = request.RequestParameters\n                               .ToDictionary(\n                                    key => key.Name,\n                                    val => val.Value);\n            SetAuthorizationHeader(HttpMethod.Post.ToString(), request.FullUrl, parms, httpRequest);\n            httpRequest.Headers.Add(\"User-Agent\", UserAgent);\n            httpRequest.Headers.ExpectContinue = false;\n\n            if (Authorizer.SupportsCompression)\n                httpRequest.Headers.AcceptEncoding.TryParseAdd(\"gzip\");\n\n            return httpRequest;\n        }\n \n        async Task<Stream> CreateStream(HttpResponseMessage response)\n        {\n            _ = Authorizer ?? throw new ArgumentNullException(nameof(Authorizer), $\"{nameof(Authorizer)} is required.\");\n\n            var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);\n\n            if (Authorizer.SupportsCompression)\n                return new GZipStream(stream, CompressionMode.Decompress);\n            else\n                return stream;\n        }\n\n        /// <summary>\n        /// Closes the stream\n        /// </summary>\n        public void CloseStream()\n        {\n            IsStreamClosed = true;\n\n            if (StreamingClient != null)\n                StreamingClient.CancelPendingRequests();\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostImageAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string contentType, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostImageAsync));\n\n            var multiPartContent = new MultipartFormDataContent();\n            var byteArrayContent = new ByteArrayContent(data);\n            byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n            multiPartContent.Add(byteArrayContent, name, fileName);\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    cleanPostData.Add(pair.Key, pair.Value);\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n                }\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n            return await HandleResponseAsync(msg).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Performs HTTP POST media byte array upload to Twitter.\n        /// </summary>\n        /// <param name=\"url\">Url to upload to.</param>\n        /// <param name=\"postData\">Request parameters.</param>\n        /// <param name=\"data\">Image to upload.</param>\n        /// <param name=\"name\">Image parameter name.</param>\n        /// <param name=\"fileName\">Image file name.</param>\n        /// <param name=\"contentType\">Type of image: must be one of jpg, gif, or png.</param>\n        /// <param name=\"reqProc\">Request processor for handling results.</param>\n        /// <param name=\"mediaCategory\">\n        /// Media category - possible values are tweet_image, tweet_gif, and tweet_video. \n        /// See this post on the Twitter forums: https://twittercommunity.com/t/media-category-values/64781/6\n        /// </param>\n        /// <param name=\"shared\">True if can be used in multiple DM Events.</param>\n        /// <param name=\"cancelToken\">Cancellation token</param>\n        /// <returns>JSON response From Twitter.</returns>\n        public async Task<string> PostMediaAsync(string url, IDictionary<string, string> postData, byte[] data, string name, string fileName, string? contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostMediaAsync));\n\n            ulong mediaID = await InitAsync(url, data, postData, contentType, mediaCategory, shared, cancelToken).ConfigureAwait(false);\n\n            await AppendChunksAsync(url, mediaID, data, name, fileName, contentType, cancelToken).ConfigureAwait(false);\n\n            return await FinalizeAsync(url, mediaID, cancelToken).ConfigureAwait(false);\n        }\n\n        async Task<ulong> InitAsync(string url, byte[] data, IDictionary<string, string> postData, string? contentType, string mediaCategory, bool shared, CancellationToken cancelToken)\n        {\n            var multiPartContent = new MultipartFormDataContent\n            {\n                { new StringContent(\"INIT\"), \"command\" },\n                { new StringContent(contentType ?? string.Empty), \"media_type\" }\n            };\n            if (!string.IsNullOrWhiteSpace(mediaCategory))\n                multiPartContent.Add(new StringContent(mediaCategory), \"media_category\");\n            if (shared)\n                multiPartContent.Add(new StringContent(\"true\"), \"shared\");\n            multiPartContent.Add(new StringContent(data.Length.ToString()), \"total_bytes\");\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                    multiPartContent.Add(new StringContent(pair.Value), pair.Key);\n            }\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n            string response = await HandleResponseAsync(msg).ConfigureAwait(false);\n\n            var media = JsonDocument.Parse(response);\n            var mediaID = media.RootElement.GetProperty(\"media_id\").GetUInt64();\n            return mediaID;\n        }\n\n        async Task AppendChunksAsync(string url, ulong mediaID, byte[] data, string name, string fileName, string? contentType, CancellationToken cancelToken)\n        {\n            const int ChunkSize = 5000000;\n\n            for (\n                int segmentIndex = 0, skip = 0; \n                skip < data.Length; \n                segmentIndex++, skip = segmentIndex * ChunkSize)\n            {\n                byte[] chunk = data.Skip(skip).Take(ChunkSize).ToArray();\n\n                var multiPartContent = new MultipartFormDataContent();\n\n                var byteArrayContent = new ByteArrayContent(chunk);\n                byteArrayContent.Headers.Add(\"Content-Type\", contentType);\n                multiPartContent.Add(byteArrayContent, name, fileName);\n\n                multiPartContent.Add(new StringContent(\"APPEND\"), \"command\");\n                multiPartContent.Add(new StringContent(mediaID.ToString()), \"media_id\");\n                multiPartContent.Add(new StringContent(segmentIndex.ToString()), \"segment_index\");\n\n                var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n                var client = new HttpClient(handler);\n\n                if (Timeout != 0)\n                    client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n                HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n                await HandleResponseAsync(msg).ConfigureAwait(false);\n            }\n        }\n\n        async Task<string> FinalizeAsync(string url, ulong mediaID, CancellationToken cancelToken)\n        {\n            var multiPartContent = new MultipartFormDataContent\n            {\n                { new StringContent(\"FINALIZE\"), \"command\" },\n                { new StringContent(mediaID.ToString()), \"media_id\" }\n            };\n\n            var handler = new PostMessageHandler(this, new Dictionary<string, string>(), url);\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            HttpResponseMessage msg = await client.PostAsync(url, multiPartContent, cancelToken).ConfigureAwait(false);\n\n            return await HandleResponseAsync(msg).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// Performs HTTP POST, with JSON payload, to Twitter.\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request.</param>\n        /// <param name=\"postData\">URL parameters to post.</param>\n        /// <param name=\"postObj\">Serializable payload object.</param>\n        /// <param name=\"getResult\">Callback for handling async Json response - null if synchronous.</param>\n        /// <returns>JSON Response from Twitter - empty string if async.</returns>\n        public async Task<string> SendJsonToTwitterAsync<T>(string method, string url, IDictionary<string, string> postData, T postObj, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(SendJsonToTwitterAsync));\n\n            var postJson = postObj == null ? \"\" : JsonSerializer.Serialize(postObj);\n            var content = new StringContent(postJson, Encoding.UTF8, \"application/json\");\n\n            var cleanPostData = new Dictionary<string, string>();\n            foreach (var pair in postData)\n                if (pair.Value != null)\n                    cleanPostData.Add(pair.Key, pair.Value);\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            HttpResponseMessage msg;\n\n            if (method == HttpMethod.Post.ToString())\n                msg = await client.PostAsync(url, content, cancelToken).ConfigureAwait(false);\n            else if (method == HttpMethod.Delete.ToString())\n                msg = await client.DeleteAsync(url, cancelToken).ConfigureAwait(false);\n            else\n                msg = await client.PutAsync(url, content, cancelToken).ConfigureAwait(false);\n\n            return await HandleResponseAsync(msg).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// performs HTTP POST to Twitter\n        /// </summary>\n        /// <param name=\"method\">Delete, Post, or Put</param>\n        /// <param name=\"url\">URL of request</param>\n        /// <param name=\"postData\">parameters to post</param>\n        /// <param name=\"getResult\">callback for handling async Json response - null if synchronous</param>\n        /// <returns>Json Response from Twitter - empty string if async</returns>\n        public async Task<string> PostFormUrlEncodedToTwitterAsync<T>(string method, string url, IDictionary<string, string?> postData, CancellationToken cancelToken)\n        {\n            WriteLog(url, nameof(PostFormUrlEncodedToTwitterAsync));\n\n            var cleanPostData = new Dictionary<string, string>();\n\n            var dataString = new StringBuilder();\n\n            foreach (var pair in postData)\n            {\n                if (pair.Value != null)\n                {\n                    dataString.AppendFormat(\"{0}={1}&\", pair.Key, Url.PercentEncode(pair.Value));\n                    cleanPostData.Add(pair.Key, pair.Value);\n                }\n            }\n\n            var content = new StringContent(dataString.ToString().TrimEnd('&'), Encoding.UTF8, \"application/x-www-form-urlencoded\");\n            var handler = new PostMessageHandler(this, cleanPostData, url);\n            var client = new HttpClient(handler);\n\n            if (Timeout != 0)\n                client.Timeout = new TimeSpan(0, 0, 0, Timeout);\n\n            HttpResponseMessage msg;\n            if (method == HttpMethod.Delete.ToString())\n                msg = await client.DeleteAsync(url, cancelToken).ConfigureAwait(false);\n            else\n                msg = await client.PostAsync(url, content, cancelToken).ConfigureAwait(false);\n\n            return await HandleResponseAsync(msg).ConfigureAwait(false);\n        }\n  \n        async Task<string> HandleResponseAsync(HttpResponseMessage msg)\n        {\n            LastUrl = msg.RequestMessage?.RequestUri;\n\n            ResponseHeaders =\n                (from header in msg.Headers\n                 select new\n                 {\n                     header.Key,\n                     Value = string.Join(\", \", header.Value)\n                 })\n                .ToDictionary(\n                    pair => pair.Key,\n                    pair => pair.Value);\n\n            await TwitterErrorHandler.ThrowIfErrorAsync(msg).ConfigureAwait(false);\n\n            return await msg.Content.ReadAsStringAsync().ConfigureAwait(false);\n        }\n\n        static void WriteLog(string content, string currentMethod)\n        {\n            if (Log != null)\n            {\n                Log.WriteLine(\"--Log Starts Here--\");\n                Log.WriteLine(\"Query:\" + content);\n                Log.WriteLine(\"Method:\" + currentMethod);\n                Log.WriteLine(\"--Log Ends Here--\");\n                Log.Flush();\n            }\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                StreamingCallbackAsync = null;\n\n                if (Log != null)\n                {\n                    Log.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/TwitterQueryProvider.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Adopted and Modified By: Joe Mayo 8/26/08\n * *********************************************************/\nusing System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// implementation of IQueryProvider, part of the LINQ Provider API\n    /// </summary>\n    public class TwitterQueryProvider : IQueryProvider\n    {\n        /// <summary>\n        /// refers to TwitterContext that calling code instantiated\n        /// </summary>\n        public TwitterContext? Context { get; set; }\n\n        /// <summary>\n        /// Non-generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable CreateQuery(Expression expression)\n        {\n            Type? elementType = TypeSystem.GetElementType(expression.Type);\n\n            _ = elementType ?? throw new TwitterQueryException(\"Expression doesn't have an element type.\");\n\n            try\n            {\n                object? twitterQueryableInstance = Activator.CreateInstance(\n                    typeof(TwitterQueryable<>)\n                        .MakeGenericType(elementType), \n                    new object[] { this, expression });\n\n                _ = twitterQueryableInstance ?? throw new TwitterQueryException(\"Unable to create query instance.\");\n\n                return (IQueryable)twitterQueryableInstance;\n            }\n            catch (TargetInvocationException tie)\n            {\n                _ = tie?.InnerException ?? throw new InvalidOperationException(\"Invalid null exception\");\n\n                throw tie.InnerException;\n            }\n        }\n\n        /// <summary>\n        /// generic version, returns current query to \n        /// calling code as its constructing the query\n        /// </summary>\n        /// <typeparam name=\"TResult\">current object type being worked with</typeparam>\n        /// <param name=\"expression\">expression tree for query</param>\n        /// <returns>IQueryable that can be executed</returns>\n        public IQueryable<TResult> CreateQuery<TResult>(Expression expression)\n        {\n            return new TwitterQueryable<TResult>(this, expression);\n        }\n\n        /// <summary>\n        /// non-generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <param name=\"expression\">Expression Tree</param>\n        /// <returns>list of results from query</returns>\n        public object? Execute(Expression expression)\n        {\n            Type elementType = TypeSystem.GetElementType(expression.Type);\n\n            return GetType().GetTypeInfo()\n                .DeclaredMethods.Where(meth => meth.IsGenericMethod && meth.Name == \"Execute\").First()\n                .Invoke(this, new object[] { expression });\n        }\n\n        /// <summary>\n        /// generic execute, delegates execution to TwitterContext\n        /// </summary>\n        /// <typeparam name=\"TResult\">type of query</typeparam>\n        /// <param name=\"expression\">Expression tree</param>\n        /// <returns>list of results from query</returns>\n        public TResult Execute<TResult>(Expression expression)\n        {\n            bool isEnumerable = \n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n            var methodInfo = Context?.GetType().GetTypeInfo().GetDeclaredMethod(\"ExecuteAsync\");\n            MethodInfo? genericMethodInfo = methodInfo?.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var exeTask = Task.Run(() => (Task<object>)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable }));\n                return (TResult)exeTask.Result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n\n        public async Task<object> ExecuteAsync<TResult>(Expression expression)\n            where TResult : class\n        {\n            bool isEnumerable =\n                typeof(TResult).Name == \"IEnumerable`1\" ||\n                typeof(TResult).Name == \"IEnumerable\";\n\n            Type resultType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n            var genericArguments = new[] { resultType };\n\n            var methodInfo = Context.GetType().GetTypeInfo().GetDeclaredMethod(\"ExecuteAsync\");\n            MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(genericArguments);\n\n            try\n            {\n                var result = await ((Task<object>)genericMethodInfo.Invoke(Context, new object[] { expression, isEnumerable })).ConfigureAwait(false);\n                return result;\n            }\n            catch (TargetInvocationException tex)\n            {\n                // gotta unwrap the Invoke exception, as the the inner exception is the interesting bit...\n                if (tex.InnerException != null)\n                    throw tex.InnerException;\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/TwitterQueryable.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * \n * Adopted and Modified By: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// IQueryable of T part of LINQ to Twitter\n    /// </summary>\n    /// <typeparam name=\"T\">Type to operate on</typeparam>\n    public class TwitterQueryable<T> : IOrderedQueryable<T>\n    {\n        /// <summary>\n        /// init with TwitterContext\n        /// </summary>\n        /// <param name=\"context\"></param>\n        public TwitterQueryable(TwitterContext context)\n        {\n            Provider = new TwitterQueryProvider();\n            Expression = Expression.Constant(this);\n\n            // lets provider reach back to TwitterContext, \n            // where execute implementation resides\n            ((TwitterQueryProvider) Provider).Context = context;\n        }\n\n        /// <summary>\n        /// modified as internal because LINQ to Twitter is Unusable \n        /// without TwitterContext, but provider still needs access\n        /// </summary>\n        /// <param name=\"provider\">IQueryProvider</param>\n        /// <param name=\"expression\">Expression Tree</param>\n        internal TwitterQueryable(\n            TwitterQueryProvider provider,\n            Expression expression)\n        {\n            if (provider == null)\n            {\n                throw new ArgumentNullException(\"provider\");\n            }\n\n            if (expression == null)\n            {\n                throw new ArgumentNullException(\"expression\");\n            }\n\n            if (!typeof(IQueryable<T>).GetTypeInfo().IsAssignableFrom(expression.Type.GetTypeInfo()))\n            {\n                throw new ArgumentOutOfRangeException(\"expression\");\n            }\n\n            Provider = provider;\n            Expression = expression;\n        }\n\n        /// <summary>\n        /// IQueryProvider part of LINQ to Twitter\n        /// </summary>\n        public IQueryProvider Provider { get; private set; }\n        \n        /// <summary>\n        /// expression tree\n        /// </summary>\n        public Expression Expression { get; private set; }\n\n        /// <summary>\n        /// type of T in IQueryable of T\n        /// </summary>\n        public Type ElementType\n        {\n            get { return typeof(T); }\n        }\n\n        /// <summary>\n        /// executes when iterating over collection\n        /// </summary>\n        /// <returns>query results</returns>\n        public IEnumerator<T> GetEnumerator()\n        {\n            var tsk = Task.Run(() => (((TwitterQueryProvider)Provider).ExecuteAsync<IEnumerable<T>>(Expression)));\n            return ((IEnumerable<T>)tsk.Result).GetEnumerator();\n        }\n\n        /// <summary>\n        /// non-generic execution when collection is iterated over\n        /// </summary>\n        /// <returns>query results</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return (Provider.Execute<IEnumerable>(Expression)).GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/TypeSystem.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * MSDN Documentation -\n * Walkthrough: Creating an IQueryable LINQ Provider\n * \n * http://msdn.microsoft.com/en-us/library/bb546158.aspx\n * \n * Matt Warren's Blog -\n * LINQ: Building an IQueryable Provider:\n * \n * http://blogs.msdn.com/mattwar/default.aspx\n * *********************************************************/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace LinqToTwitter\n{\n    internal static class TypeSystem\n    {\n        internal static Type? GetElementType(Type seqType)\n        {\n            Type? ienum = FindIEnumerable(seqType);\n            if (ienum == null) return seqType;\n            return ienum.GenericTypeArguments[0];\n        }\n\n        private static Type? FindIEnumerable(Type seqType)\n        {\n            TypeInfo seqTypeInfo = seqType.GetTypeInfo();\n            if (seqType == null || seqType == typeof(string))\n                return null;\n\n            if (seqTypeInfo.IsArray)\n            {\n                Type? elementType = seqTypeInfo.GetElementType();\n                if (elementType != null)\n                    return typeof(IEnumerable<>).MakeGenericType(elementType);\n            }\n\n            if (seqTypeInfo.IsGenericType)\n            {\n                foreach (Type arg in seqTypeInfo.GenericTypeArguments)\n                {\n                    Type? ienum = typeof(IEnumerable<>).MakeGenericType(arg);\n\n                    if (ienum != null && ienum.GetTypeInfo().IsAssignableFrom(seqTypeInfo))\n                        return ienum;\n                }\n            }\n\n            Type[] ifaces = seqTypeInfo.ImplementedInterfaces.ToArray();\n            if (ifaces != null && ifaces.Length > 0)\n            {\n                foreach (Type iface in ifaces)\n                {\n                    Type? ienum = FindIEnumerable(iface);\n                    if (ienum != null) return ienum;\n                }\n            }\n\n            if (seqTypeInfo.BaseType != null && seqTypeInfo.BaseType != typeof(object))\n                return FindIEnumerable(seqTypeInfo.BaseType);\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Provider/WhereClauseFinder.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Provider\n{\n    /// <summary>\n    /// finds where clauses in the expression tree\n    /// </summary>\n    internal class WhereClauseFinder : ExpressionVisitor\n    {\n        static readonly string[] WhereMethodNames = { \"Where\", \"Single\", \"SingleOrDefault\", \"First\", \"FirstOrDefault\" };\n\n        // holds all where expressions\n        readonly List<MethodCallExpression> whereExpressions = new List<MethodCallExpression>();\n\n        /// <summary>\n        /// searches expression tree for wheres and returns collection of all it finds.\n        /// </summary>\n        /// <param name=\"expression\">query expression to search.</param>\n        /// <returns>collection of where expressions.</returns>\n        public MethodCallExpression[] GetAllWheres(Expression expression)\n        {\n            Visit(expression);\n            return whereExpressions.ToArray();\n        }\n\n        /// <summary>\n        /// custom processing of MethodCallExpression NodeType that checks for a\n        /// where clause and retains expression as member of list of where clauses.\n        /// </summary>\n        /// <param name=\"expression\">a MethodCallExpression node from the expression tree</param>\n        /// <returns>expression that was passed in</returns>\n        protected override Expression VisitMethodCall(MethodCallExpression expression)\n        {\n            if (WhereMethodNames.Contains(expression.Method.Name) && expression.Arguments.Count == 2)\n            {\n                whereExpressions.Add(expression);\n            }\n\n            Visit(expression.Arguments[0]);\n\n            return expression;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Raw/Raw.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Allows working at a low level with Twitter API\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Raw\n    {\n        /// <summary>\n        /// Query string with segments and parameters.  \n        /// Do not include BaseUrl as it will be prefixed \n        /// to this value. You're resposible for ensuring\n        /// the format of this part of the query is correct,\n        /// including encoding parameters.\n        /// </summary>\n        public string? QueryString { get; set; }\n\n        /// <summary>\n        /// Raw result, returned directly from Twitter.\n        /// </summary>\n        public string? Response { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Raw/RawRequestProcessor.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Raw requests, allowing free-form url and query strings.\n    /// </summary>\n    public class RawRequestProcessor<T> : \n        IRequestProcessor<T>,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Actual query string sent to twitter\n        /// </summary>\n        internal string? QueryString { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        internal string? Result { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return new ParameterFinder<Raw>(\n               lambdaExpression.Body,\n               new List<string> { \n                   nameof(QueryString)\n               })\n               .Parameters;\n        }\n\n        /// <summary>\n        /// Builds url based on input parameters.\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const int UrlPart = 0;\n            const int UrlPlusParameters = 2;\n\n            if (parameters == null || !parameters.ContainsKey(nameof(QueryString)))\n                throw new ArgumentNullException(nameof(QueryString), $\"{nameof(QueryString)} parameter is required.\");\n\n            QueryString = parameters[nameof(QueryString)].Trim();\n\n            if (QueryString == string.Empty)\n                throw new ArgumentException($\"Blank {nameof(QueryString)} isn't valid.\", nameof(QueryString));\n\n            string url = BaseUrl?.TrimEnd('/') + \"/\" + QueryString.TrimStart('/');\n            var parts = url.Split('?');\n            var req = new Request(parts[UrlPart]);\n            var urlParams = req.RequestParameters;\n\n            if (parts.Length == UrlPlusParameters)\n            {\n                var qsParms =\n                    (from pair in parts[1].Split('&')\n                     let keyVal = pair.Split('=')\n                     select new\n                     {\n                         Key = keyVal[0],\n                         Val = keyVal[1]\n                     })\n                    .ToDictionary(\n                        key => key.Key,\n                        val => val.Val);\n\n                foreach (KeyValuePair<string, string> parm in qsParms)\n                    urlParams.Add(new QueryParameter(parm.Key, parm.Value));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// transforms response into List of Raw\n        /// </summary>\n        /// <param name=\"response\">Twitter response</param>\n        /// <returns>List of Raw</returns>\n        public virtual List<T> ProcessResults(string response)\n        {\n            var rawList = new List<Raw>\n            {\n                new Raw\n                {\n                    QueryString = QueryString,\n                    Response = response\n                }\n            };\n\n            return rawList.OfType<T>().ToList();\n        }\n\n        [return: MaybeNull]\n        public T ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var raw = new Raw\n            {\n                Response = responseJson\n            };\n\n            return raw!.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Raw/TwitterContextRawCommands.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/home_timeline.json\" for a home timeline query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <returns>Twitter JSON response.</returns>\n        public async Task<string> ExecuteRawAsync(string queryString, Dictionary<string, string?> parameters, CancellationToken cancelToken = default)\n        {\n            return await ExecuteRawAsync(queryString, parameters, HttpMethod.Post, cancelToken);\n        }\n\n        /// <summary>\n        /// Lets you perform a query by specifying the raw URL and parameters yourself.\n        /// Useful for when Twitter changes or adds new features before they are added to LINQ to Twitter.\n        /// </summary>\n        /// <param name=\"queryString\">The segments that follow the base URL. i.e. \"statuses/home_timeline.json\" for a home timeline query</param>\n        /// <param name=\"parameters\">Querystring parameters that will be appended to the URL</param>\n        /// <param name=\"method\"><see cref=\"HttpMethod\"/> for sending the request.</param>\n        /// <returns>Twitter JSON response.</returns>\n        public async Task<string> ExecuteRawAsync(string queryString, Dictionary<string, string?> parameters, HttpMethod method, CancellationToken cancelToken = default)\n        {\n            string rawUrl = BaseUrl?.TrimEnd('/') + \"/\" + queryString.TrimStart('/');\n\n            RawResult = await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<Raw>(method.ToString(), rawUrl, parameters, cancelToken).ConfigureAwait(false);\n\n            return RawResult;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/SavedSearch/SavedSearch.cs",
    "content": "﻿using System;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// info for query and retrieval of saved searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SavedSearch\n    {\n        public SavedSearch() { }\n        public SavedSearch(JsonElement searchJson)\n        {\n            Query = searchJson.GetString(\"query\");\n            Name = searchJson.GetString(\"name\");\n            Position = searchJson.GetInt(\"position\");\n            IDResponse = searchJson.GetUlong(\"id\");\n            CreatedAt = searchJson.GetString(\"created_at\")?.GetDate(DateTime.MaxValue);\n        }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        public SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Search item ID.\n        /// </summary>\n        public ulong IDResponse { get; set; }\n\n        /// <summary>\n        /// name of search\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// search query contents\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// position in search list\n        /// </summary>\n        public int Position { get; set; }\n\n        /// <summary>\n        /// when search was created\n        /// </summary>\n        public DateTime? CreatedAt { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/SavedSearch/SavedSearchAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum SavedSearchAction\n    {\n        Create,\n\n        Destroy\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/SavedSearch/SavedSearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    ///Processes Twitter Saved Search requests.\n    /// </summary>\n    public class SavedSearchRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search to perform (Searches or Show)\n        /// </summary>\n        public SavedSearchType Type { get; set; }\n\n        /// <summary>\n        /// search item ID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<SavedSearch>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\"\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", \"Type\");\n\n            Type = RequestProcessorHelper.ParseEnum<SavedSearchType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    return BuildSearchesUrl();\n                case SavedSearchType.Show:\n                    return BuildShowUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// construct a base show url\n        /// </summary>\n        /// <param name=\"url\">base show url</param>\n        /// <returns>base url + show segment</returns>\n        Request BuildShowUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required for a Saved Search Show query.\", \"ID\");\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n\n            var url = BaseUrl + \"saved_searches/show/\" + ID + \".json\";\n\n            return new Request(url);\n        }\n\n        /// <summary>\n        /// return a saved searches url\n        /// </summary>\n        /// <returns>saved search url</returns>\n        Request BuildSearchesUrl()\n        {\n            return new Request(BaseUrl + \"saved_searches/list.json\");\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of SavedSearch\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of SavedSearch</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonElement searchJson = JsonDocument.Parse(responseJson).RootElement;\n\n            List<SavedSearch> savedSearchList = new();\n\n            switch (Type)\n            {\n                case SavedSearchType.Searches:\n                    savedSearchList =\n                        (from search in searchJson.EnumerateArray()\n                         select new SavedSearch(search))\n                        .ToList();\n                    break;\n                case SavedSearchType.Show:\n                    savedSearchList = new List<SavedSearch> { new SavedSearch(searchJson) };\n                    break;\n                default:\n                    break;\n            }\n\n            foreach (var search in savedSearchList)\n            {\n                search.Type = Type;\n                search.ID = ID;\n            };\n\n            return savedSearchList.OfType<T>().ToList();\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement searchJson = JsonDocument.Parse(responseJson).RootElement;\n\n            var search = new SavedSearch(searchJson);\n\n            return search.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/SavedSearch/SavedSearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of saved search queries\n    /// </summary>\n    public enum SavedSearchType\n    {\n        /// <summary>\n        /// query all searches by logged in user\n        /// </summary>\n        Searches,\n\n        /// <summary>\n        /// query for a single search by the search id\n        /// </summary>\n        Show\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/SavedSearch/TwitterContextSavedSearchCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"query\">Search query to add</param>\n        /// <returns>SavedSearch object</returns>\n        public async Task<SavedSearch?> CreateSavedSearchAsync(string query, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(query))\n                throw new ArgumentException(\"query is required.\", \"query\");\n\n            var savedSearchUrl = BaseUrl + \"saved_searches/create.json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    savedSearchUrl,\n                    new Dictionary<string, string?>\n                    {\n                        { \"query\", query }\n                    },\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, SavedSearchAction.Create);\n        }\n\n        /// <summary>\n        /// Adds a saved search to your twitter account\n        /// </summary>\n        /// <param name=\"id\">ID of saved search</param>\n        /// <param name=\"callback\">Async Callback used in Silverlight queries</param>\n        /// <returns>SavedSearch object</returns>\n        public async Task<SavedSearch?> DestroySavedSearchAsync(ulong id, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (id == 0)\n                throw new ArgumentException(\"Invalid Saved Search ID: \" + id, \"id\");\n\n            var savedSearchUrl = BaseUrl + \"saved_searches/destroy/\" + id + \".json\";\n\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            RawResult =\n                await TwitterExecutor.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    savedSearchUrl,\n                    new Dictionary<string, string?>(),\n                    cancelToken)\n                    .ConfigureAwait(false);\n\n            SavedSearch? result = reqProc.ProcessActionResult(RawResult, SavedSearchAction.Destroy);\n\n            if (result != null)\n                result.ID = id;\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/Attitude.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Search for tweets with different types of attitudes\n    /// </summary>\n    [Flags]\n    public enum Attitude\n    {\n        /// <summary>\n        /// Happy\n        /// </summary>\n        Positive = 0x01,\n\n        /// <summary>\n        /// Sad\n        /// </summary>\n        Negative = 0x02,\n\n        /// <summary>\n        /// Curious\n        /// </summary>\n        Question = 0x04\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/ResultType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of results to return in a search\n    /// </summary>\n    public enum ResultType\n    {\n        /// <summary>\n        /// Combination of popular and recent\n        /// </summary>\n        Mixed,\n\n        /// <summary>\n        /// Real-time results\n        /// </summary>\n        Recent,\n\n        /// <summary>\n        /// Most popular tweets\n        /// </summary>\n        Popular\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/Search.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// for performing Twitter searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Search\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        public SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        public string? SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        public string? Locale { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        public DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// first status ID\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        public string? GeoCode { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result requested (mixed, recent, or popular)\n        /// </summary>\n        public ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// Include entities in results\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Supports compatibility or extended mode tweets.\n        /// </summary>\n        public TweetMode TweetMode { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        public List<Status>? Statuses { get; set; }\n\n        /// <summary>\n        /// Tweet metadata returned from search\n        /// </summary>\n        public SearchMetaData? Meta { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/SearchMetaData.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class SearchMetaData\n    {\n        public SearchMetaData() { }\n        public SearchMetaData(JsonElement metaData)\n        {\n            CompletedIn = metaData.GetDecimal(\"completed_in\");\n            NextResults = metaData.GetString(\"next_results\");\n            Query = metaData.GetString(\"query\");\n            RefreshUrl = metaData.GetString(\"refresh_url\");\n            Count = metaData.GetInt(\"count\");\n            MaxID = (metaData.GetString(\"max_id_str\") ?? string.Empty).GetULong();\n            SinceID = (metaData.GetString(\"since_id_str\") ?? string.Empty).GetULong();\n        }\n\n        /// <summary>\n        /// Processing time for search\n        /// </summary>\n        public decimal CompletedIn { get; set; }\n\n        /// <summary>\n        /// Max ID returned in search\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Query string to get next page\n        /// </summary>\n        public string? NextResults { get; set; }\n\n        /// <summary>\n        /// Original Query\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Query string to refresh this search\n        /// </summary>\n        public string? RefreshUrl { get; set; }\n\n        /// <summary>\n        /// Number of results per page to return on next query\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Don't return tweets older than this ID\n        /// </summary>\n        public ulong SinceID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/SearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes search queries\n    /// </summary>\n    public class SearchRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        internal SearchType Type { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        internal string? Query { get; set; }\n\n        /// <summary>\n        /// location, specified as \"latitude,longitude,radius\"\n        /// </summary>\n        internal string? GeoCode { get; set; }\n\n        /// <summary>\n        /// filters query to tweets in specified language (ISO 639-1)\n        /// </summary>\n        internal string? SearchLanguage { get; set; }\n\n        /// <summary>\n        /// language of the search query (currently only supports ja)\n        /// </summary>\n        internal string? Locale { get; set; }\n\n        /// <summary>\n        /// Metadata for type of result (mixed, recent, or popular)\n        /// </summary>\n        private ResultType ResultType { get; set; }\n\n        /// <summary>\n        /// number of results for each page\n        /// </summary>\n        internal int Count { get; set; }\n\n        /// <summary>\n        /// Return tweets before this date\n        /// </summary>\n        internal DateTime Until { get; set; }\n\n        /// <summary>\n        /// last status ID\n        /// </summary>\n        internal ulong SinceID { get; set; }\n\n        /// <summary>\n        /// Include entities in results (default: false)\n        /// </summary>\n        internal bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// for getting tweets with ID that is less than or equal to this value\n        /// </summary>\n        internal ulong MaxID { get; set; }\n\n        /// <summary>\n        /// Supports compatibility or extended mode tweets.\n        /// </summary>\n        internal TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(System.Linq.Expressions.LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Search>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(Query),\n                       nameof(GeoCode),\n                       nameof(SearchLanguage),\n                       nameof(Locale),\n                       nameof(ResultType),\n                       nameof(Count),\n                       nameof(Until),\n                       nameof(SinceID),\n                       nameof(MaxID),\n                       nameof(IncludeEntities),\n                       nameof(TweetMode)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(\"Type\"))\n                Type = RequestProcessorHelper.ParseEnum<SearchType>(parameters[\"Type\"]);\n            else\n                throw new ArgumentException(\"Type is required\", \"Type\");\n\n            return BuildSearchUrlParameters(parameters, \"search/tweets.json\");\n        }\n\n        /// <summary>\n        /// appends parameters for Search request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        private Request BuildSearchUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\") && !string.IsNullOrWhiteSpace(parameters[\"Query\"]))\n            {\n                Query = parameters[\"Query\"];\n\n                urlParams.Add(new QueryParameter(\"q\", Query));\n            }\n            else\n            {\n                throw new ArgumentNullException(\"Query\", \"Query filter in where clause is required.\");\n            }\n\n            if (parameters.ContainsKey(\"GeoCode\"))\n            {\n                GeoCode = parameters[\"GeoCode\"];\n                urlParams.Add(new QueryParameter(\"geocode\" , GeoCode));\n            }\n\n            if (parameters.ContainsKey(\"SearchLanguage\"))\n            {\n                SearchLanguage = parameters[\"SearchLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", SearchLanguage));\n            }\n\n            if (parameters.ContainsKey(\"Locale\"))\n            {\n                Locale = parameters[\"Locale\"];\n                urlParams.Add(new QueryParameter(\"locale\", Locale));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"Until\"))\n            {\n                Until = DateTime.Parse(parameters[\"Until\"]).Date;\n                urlParams.Add(new QueryParameter(\"until\",  Until.ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", MaxID.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(\"ResultType\"))\n            {\n                ResultType = RequestProcessorHelper.ParseEnum<ResultType>(parameters[\"ResultType\"]);\n                urlParams.Add(new QueryParameter(\"result_type\" , ResultType.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Search\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Search> search;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                search = new List<Search> { new Search() };\n            }\n            else\n            {\n                var searchResult = JsonSerialize(responseJson);\n\n                search = new List<Search> { searchResult };\n            }\n\n            return search.OfType<T>().ToList();\n        }\n\n        Search JsonSerialize(string responseJson)\n        {\n            JsonElement search = JsonDocument.Parse(responseJson).RootElement;\n\n            var searchResult = new Search\n            {\n                Type = Type,\n                GeoCode = GeoCode,\n                Count = Count,\n                Query = Query,\n                MaxID = MaxID,\n                SinceID = SinceID,\n                SearchLanguage = SearchLanguage,\n                Locale = Locale,\n                Until = Until.Date,\n                ResultType = ResultType,\n                IncludeEntities = IncludeEntities,\n                Statuses =\n                    (from result in search.GetProperty(\"statuses\").EnumerateArray()\n                     select new Status(result))\n                    .ToList(),\n                Meta = \n                    new SearchMetaData(search.GetProperty(\"search_metadata\")),\n                TweetMode = TweetMode\n            };\n\n            return searchResult;\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/SearchSortOrder.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Sorting order for tweet searches\n    /// </summary>\n    public static class SearchSortOrder\n    {\n        /// <summary>\n        /// Most recent tweets first\n        /// </summary>\n        public const string Recency = \"recency\";\n\n        /// <summary>\n        /// Most relevant tweets first\n        /// </summary>\n        public const string Relevancy = \"relevancy\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/SearchType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of search\n    /// </summary>\n    public enum SearchType\n    {\n        /// <summary>\n        /// Classic Search on <see cref=\"Search\"/>\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Full archive search\n        /// </summary>\n        FullSearch,\n\n        /// <summary>\n        /// Search for Recent Tweets on <see cref=\"TwitterSearch\"/>\n        /// </summary>\n        RecentSearch\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/TwitterSearch.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json.Serialization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// for performing Twitter searches\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public record TwitterSearch\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        public SearchType Type { get; init; }\n\n        /// <summary>\n        /// Date/Time to search to\n        /// </summary>\n        public DateTime EndTime { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields\n        /// </summary>\n        public string? Expansions { get; init; }\n\n        /// <summary>\n        /// Maximum number of tweets to return\n        /// </summary>\n        public int MaxResults { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object\n        /// </summary>\n        public string? MediaFields { get; init; }\n\n        /// <summary>\n        /// Provide this, when paging, to get the next page of results\n        /// </summary>\n        public string? NextToken { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object\n        /// </summary>\n        public string? PlaceFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object\n        /// </summary>\n        public string? PollFields { get; init; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string? Query { get; init; }\n\n        /// <summary>\n        /// Return tweets whose IDs are greater than this\n        /// </summary>\n        public string? SinceID { get; init; }\n\n        /// <summary>\n        /// Order to return tweets\n        /// </summary>\n        public string SortOrder { get; set; }\n\n        /// <summary>\n        /// Date/Time to start search\n        /// </summary>\n        public DateTime StartTime { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object\n        /// </summary>\n        public string? TweetFields { get; init; }\n\n        /// <summary>\n        /// Return tweets whose ids are less than this\n        /// </summary>\n        public string? UntilID { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object\n        /// </summary>\n        public string? UserFields { get; init; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<Tweet>? Tweets { get; init; }\n\n        /// <summary>\n        /// If any errors occur, they'll show up here\n        /// </summary>\n        [JsonPropertyName(\"errors\")]\n        public List<TwitterError>? Errors { get; init; }\n\n        /// <summary>\n        /// Were there errors?\n        /// </summary>\n        public bool HasErrors { get => Errors?.Any() ?? false; }\n\n        /// <summary>\n        /// Populated when query includes expansion fields\n        /// </summary>\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; init; }\n\n        /// <summary>\n        /// Tweet metadata returned from search\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public TwitterSearchMeta? Meta { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/TwitterSearchMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Metadata for <see cref=\"TwitterSearch\"/> query results\n    /// </summary>\n    public record TwitterSearchMeta\n    {\n        /// <summary>\n        /// Most recent ID in the data\n        /// </summary>\n        [JsonPropertyName(\"newest_id\")]\n        public string? NewestID { get; init; }\n\n        /// <summary>\n        /// Oldest ID in the data\n        /// </summary>\n        [JsonPropertyName(\"oldest_id\")]\n        public string? OldestID { get; init; }\n\n        /// <summary>\n        /// Number of results\n        /// </summary>\n        [JsonPropertyName(\"result_count\")]\n        public int Count { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Search/TwitterSearchRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes search queries\n    /// </summary>\n    public class TwitterSearchRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of search\n        /// </summary>\n        public SearchType Type { get; set; }\n\n        /// <summary>\n        /// Date/Time to search to\n        /// </summary>\n        public DateTime EndTime { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Maximum number of tweets to return\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// Provide this, when paging, to get the next page of results\n        /// </summary>\n        public string? NextToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// search query\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Return tweets whose IDs are greater than this\n        /// </summary>\n        public string? SinceID { get; set; }\n\n        /// <summary>\n        /// Order to return tweets\n        /// </summary>\n        public string SortOrder { get; set; }\n\n        /// <summary>\n        /// Date/Time to start search\n        /// </summary>\n        public DateTime StartTime { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// Return tweets whose ids are less than this\n        /// </summary>\n        public string? UntilID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<TwitterSearch>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(EndTime),\n                       nameof(Expansions),\n                       nameof(MaxResults),\n                       nameof(MediaFields),\n                       nameof(NextToken),\n                       nameof(PlaceFields),\n                       nameof(PollFields),\n                       nameof(Query),\n                       nameof(SinceID),\n                       nameof(SortOrder),\n                       nameof(StartTime),\n                       nameof(TweetFields),\n                       nameof(UntilID),\n                       nameof(UserFields)\n                   }) ;\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Type)))\n                Type = RequestProcessorHelper.ParseEnum<SearchType>(parameters[nameof(Type)]);\n            else\n                throw new ArgumentException($\"{nameof(Type)} is required\", nameof(Type));\n\n            string urlSegment = Type switch\n            {\n                SearchType.FullSearch => \"tweets/search/all\",\n                SearchType.RecentSearch => \"tweets/search/recent\",\n                _ => throw new ArgumentException($\"Unknown SearchType: '{Type}'\")\n            };\n\n            return BuildSearchUrlParameters(parameters, urlSegment);\n        }\n\n        /// <summary>\n        /// appends parameters for Search request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildSearchUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n\n            if (parameters.ContainsKey(nameof(Query)) && !string.IsNullOrWhiteSpace(parameters[nameof(Query)]))\n            {\n                Query = parameters[nameof(Query)];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n            else\n            {\n                throw new ArgumentNullException(nameof(Query), \"Query filter in where clause is required.\");\n            }\n\n            if (parameters.ContainsKey(nameof(EndTime)))\n            {\n                EndTime = DateTime.Parse(parameters[nameof(EndTime)]);\n                urlParams.Add(new QueryParameter(\"end_time\", EndTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                MaxResults = int.Parse(parameters[nameof(MaxResults)]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(NextToken)))\n            {\n                NextToken = parameters[nameof(NextToken)];\n                urlParams.Add(new QueryParameter(\"next_token\", NextToken));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(SinceID)))\n            {\n                SinceID = parameters[nameof(SinceID)];\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID));\n            }\n\n            if (parameters.ContainsKey(nameof(SortOrder)))\n            {\n                SortOrder = parameters[nameof(SortOrder)];\n                urlParams.Add(new QueryParameter(\"sort_order\", SortOrder));\n            }\n\n            if (parameters.ContainsKey(nameof(StartTime)))\n            {\n                StartTime = DateTime.Parse(parameters[nameof(StartTime)]);\n                urlParams.Add(new QueryParameter(\"start_time\", StartTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UntilID)))\n            {\n                UntilID = parameters[nameof(UntilID)];\n                urlParams.Add(new QueryParameter(\"until_id\", UntilID));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Search\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<TwitterSearch> search;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                search = new List<TwitterSearch> { new TwitterSearch() };\n            }\n            else\n            {\n                var searchResult = JsonDeserialize(responseJson);\n                search = new List<TwitterSearch> { searchResult };\n            }\n\n            return search.OfType<T>().ToList();\n        }\n\n        TwitterSearch JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter(),\n                    new TweetReplySettingsConverter()\n                }\n            };\n            TwitterSearch? search = JsonSerializer.Deserialize<TwitterSearch>(responseJson, options);\n\n            if (search == null)\n                return new TwitterSearch\n                {\n                    Type = Type,\n                    EndTime = EndTime,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    MediaFields = MediaFields,\n                    NextToken = NextToken,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    Query = Query,\n                    SinceID = SinceID,\n                    SortOrder = SortOrder,\n                    StartTime = StartTime,\n                    TweetFields = TweetFields,\n                    UntilID = UntilID,\n                    UserFields = UserFields\n                };\n            else\n                return search with\n                {\n                    Type = Type,\n                    EndTime = EndTime,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    MediaFields = MediaFields,\n                    NextToken = NextToken,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    Query = Query,\n                    SinceID = SinceID,\n                    SortOrder= SortOrder,\n                    StartTime = StartTime,\n                    TweetFields = TweetFields,\n                    UntilID = UntilID,\n                    UserFields = UserFields\n                };\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/Space.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public record Space\n    {\n        [JsonPropertyName(\"creator_id\")]\n        public string? CreatorID { get; set; }\n\n        [JsonPropertyName(\"ended_at\")]\n        public DateTime? EndedAt { get; set; }\n\n        [JsonPropertyName(\"invited_user_ids\")]\n        public List<string>? InvitedUserIds { get; set; }\n\n        [JsonPropertyName(\"participant_count\")]\n        public int ParticipantCount { get; set; }\n\n        [JsonPropertyName(\"is_ticketed\")]\n        public bool IsTicketed { get; set; }\n\n        [JsonPropertyName(\"lang\")]\n        public string? Lang { get; set; }\n\n        [JsonPropertyName(\"created_at\")]\n        public DateTime? CreatedAt { get; set; }\n\n        [JsonPropertyName(\"updated_at\")]\n        public DateTime? UpdatedAt { get; set; }\n\n        [JsonPropertyName(\"scheduled_start\")]\n        public DateTime? ScheduledStart { get; set; }\n\n        [JsonPropertyName(\"started_at\")]\n        public DateTime? StartedAt { get; set; }\n\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        [JsonPropertyName(\"speaker_ids\")]\n        public List<string>? SpeakerIds { get; set; }\n\n        [JsonPropertyName(\"state\")]\n        public string? State { get; set; }\n\n        [JsonPropertyName(\"subscriber_count\")]\n        public int SubscriberCount { get; set; }\n\n        [JsonPropertyName(\"title\")]\n        public string? Title { get; set; }\n\n        [JsonPropertyName(\"topic_ids\")]\n        public List<string>? TopicIds { get; set; }\n\n        [JsonPropertyName(\"host_ids\")]\n        public List<string>? HostIds { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpaceMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class SpaceMeta\n    {\n        [JsonPropertyName(\"result_count\")]\n        public int ResultCount { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpaceResponse.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class SpaceResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public MuteResponseData? Data { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpaceResponseData.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record SpaceResponseData\n    {\n        [JsonPropertyName(\"muting\")]\n        public bool Muting { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpaceState.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public class SpaceState\n    {\n        /// <summary>\n        /// All states\n        /// </summary>\n        public const string All = \"all\";\n\n        /// <summary>\n        /// Currently active\n        /// </summary>\n        public const string Live = \"live\";\n\n        /// <summary>\n        /// upcoming\n        /// </summary>\n        public const string Scheduled = \"scheduled\";\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpacesQuery.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record SpacesQuery\n    {\n        //\n        // Input parameters\n        //\n\n        /// <summary>\n        /// Type of space query to perform.\n        /// </summary>\n        public SpacesType Type { get; set; }\n\n        /// <summary>\n        /// Criteria for Search queries\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of creator IDs to search for\n        /// </summary>\n        public string? CreatorIds { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Space object - <see cref=\"SpaceField\"/>\n        /// </summary>\n        public string? SpaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of space IDs to search for\n        /// </summary>\n        public string? SpaceIds { get; set; }\n\n        /// <summary>\n        /// Current state of the space - <see cref=\"SpaceState\"/>\n        /// </summary>\n        public string? State { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Topic object - <see cref=\"TopicField\"/>\n        /// </summary>\n        public string? TopicFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Space data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<Space>? Spaces { get; init; }\n\n        /// <summary>\n        /// Populated when query includes expansion fields\n        /// </summary>\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; init; }\n\n        /// <summary>\n        /// Space metadata returned from search\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public SpaceMeta? Meta { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpacesRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Spaces requests.\n    /// </summary>\n    public class SpacesRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Type of space query to perform.\n        /// </summary>\n        public SpacesType Type { get; set; }\n\n        /// <summary>\n        /// Criteria for Search queries\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of creator IDs to search for\n        /// </summary>\n        public string? CreatorIds { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Space object - <see cref=\"SpaceField\"/>\n        /// </summary>\n        public string? SpaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of space IDs to search for\n        /// </summary>\n        public string? SpaceIds { get; set; }\n\n        /// <summary>\n        /// Current state of the space - <see cref=\"SpaceState\"/>\n        /// </summary>\n        public string? State { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Topic object - <see cref=\"TopicField\"/>\n        /// </summary>\n        public string? TopicFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<SpacesQuery>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       nameof(Type),\n                       nameof(Query),\n                       nameof(CreatorIds),\n                       nameof(Expansions),\n                       nameof(MaxResults),\n                       nameof(SpaceFields),\n                       nameof(SpaceIds),\n                       nameof(State),\n                       nameof(TopicFields),\n                       nameof(UserFields)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<SpacesType>(parameters[\"Type\"]);\n\n            return Type switch\n            {\n                SpacesType.ByCreatorID => BuildByCreatorIdsUrl(parameters),\n                SpacesType.BySpaceID => BuildBySpaceIdsUrl(parameters),\n                SpacesType.Search => BuildSearchdUrl(parameters),\n                _ => throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\"),\n            };\n        }\n\n        Request BuildByCreatorIdsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request($\"{BaseUrl}spaces/by/creator_ids\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(CreatorIds)))\n            {\n                CreatorIds = parameters[nameof(CreatorIds)];\n                urlParams.Add(new QueryParameter(\"user_ids\", CreatorIds.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(SpaceFields)))\n            {\n                SpaceFields = parameters[nameof(SpaceFields)];\n                urlParams.Add(new QueryParameter(\"space.fields\", SpaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TopicFields)))\n            {\n                TopicFields = parameters[nameof(TopicFields)];\n                urlParams.Add(new QueryParameter(\"topic.fields\", TopicFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        Request BuildBySpaceIdsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request($\"{BaseUrl}spaces\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(SpaceIds)))\n            {\n                SpaceIds = parameters[nameof(SpaceIds)];\n                urlParams.Add(new QueryParameter(\"ids\", SpaceIds.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(SpaceFields)))\n            {\n                SpaceFields = parameters[nameof(SpaceFields)];\n                urlParams.Add(new QueryParameter(\"space.fields\", SpaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TopicFields)))\n            {\n                TopicFields = parameters[nameof(TopicFields)];\n                urlParams.Add(new QueryParameter(\"topic.fields\", TopicFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        Request BuildSearchdUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request($\"{BaseUrl}spaces/search\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Query)))\n            {\n                Query = parameters[nameof(Query)];\n                urlParams.Add(new QueryParameter(\"query\", Query));\n            }\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                MaxResults = int.Parse(parameters[nameof(MaxResults)]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString()));\n            }\n\n            if (parameters.ContainsKey(nameof(SpaceFields)))\n            {\n                SpaceFields = parameters[nameof(SpaceFields)];\n                urlParams.Add(new QueryParameter(\"space.fields\", SpaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(State)))\n            {\n                State = parameters[nameof(State)];\n                urlParams.Add(new QueryParameter(\"state\", State));\n            }\n\n            if (parameters.ContainsKey(nameof(TopicFields)))\n            {\n                TopicFields = parameters[nameof(TopicFields)];\n                urlParams.Add(new QueryParameter(\"topic.fields\", TopicFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            List<SpacesQuery>? spaces;\n\n            switch (Type)\n            {\n                case SpacesType.Search:\n                case SpacesType.ByCreatorID:\n                case SpacesType.BySpaceID:\n                    spaces = new List<SpacesQuery> { JsonDeserialize(responseJson) };\n                    break;\n                default:\n                    spaces = new List<SpacesQuery>();\n                    break;\n            }\n\n            return spaces.OfType<T>().ToList();\n        }\n\n        SpacesQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter(),\n                    new TweetReplySettingsConverter()\n                }\n            };\n            SpacesQuery? space = JsonSerializer.Deserialize<SpacesQuery>(responseJson, options);\n\n            if (space == null)\n                return new SpacesQuery\n                {\n                    Type = Type,\n                    Query = Query,\n                    CreatorIds = CreatorIds,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    SpaceFields = SpaceFields,\n                    SpaceIds = SpaceIds,\n                    State = State,\n                    TopicFields = TopicFields,\n                    UserFields = UserFields\n                };\n            else\n                return space with\n                {\n                    Type = Type,\n                    Query = Query,\n                    CreatorIds = CreatorIds,\n                    Expansions = Expansions,\n                    MaxResults = MaxResults,\n                    SpaceFields = SpaceFields,\n                    SpaceIds = SpaceIds,\n                    State = State,\n                    TopicFields = TopicFields,\n                    UserFields = UserFields\n                };\n        }\n\n        List<User> HandleSingleUserResponse(JsonElement userJson)\n        {\n            List<User> userList = new List<User> { new User(userJson) };\n            return userList;\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement userJson = JsonDocument.Parse(responseJson).RootElement;\n\n            List<User> user = HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Spaces/SpacesType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of queries for spaces\n    /// </summary>\n    public enum SpacesType\n    { \n        /// <summary\n        /// Search for spaces\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// Return spaces matching one or more space ids (comma-separated)\n        /// </summary>\n        BySpaceID,\n\n        /// <summary>\n        /// Return spaces matching one or more creators (comma-separated)\n        /// </summary>\n        ByCreatorID,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/Annotation.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Annotation\n    {\n        public Annotation() { }\n        public Annotation(JsonElement annotationJson)\n        {\n            if (annotationJson.IsNull())\n            {\n                Attributes = new Dictionary<string, string>();\n                Elements = new Dictionary<string, string>();\n                return;\n            }\n\n            Attributes =\n                annotationJson\n                    .EnumerateObject()\n                    .ToDictionary(\n                        atr => atr.Name,\n                        atr => atr.Value.GetString() ?? string.Empty);\n        }\n\n        public string? Type { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string>? Attributes { get; set; }\n\n        [XmlIgnore]\n        public Dictionary<string, string>? Elements { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/Contributor.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Contributor\n    {\n        public Contributor() { }\n        public Contributor(JsonElement contributor)\n        {\n            if (contributor.IsNull()) return;\n\n            if (contributor.ValueKind == JsonValueKind.Number)\n            {\n                ID = contributor.GetInt64().ToString();\n            }\n            else\n            {\n                ID = contributor.GetLong(\"id_str\").ToString();\n                ScreenName = contributor.GetString(\"screen_name\"); \n            }\n        }\n\n        public string? ID { get; set; }\n\n        public string? ScreenName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/EmbeddedStatus.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class EmbeddedStatus\n    {\n        public EmbeddedStatus() { }\n        public EmbeddedStatus(JsonElement embeddedStatusJson)\n        {\n            Html = embeddedStatusJson.GetString(\"html\");\n            AuthorName = embeddedStatusJson.GetString(\"author_name\");\n            AuthorUrl = embeddedStatusJson.GetString(\"author_url\");\n            ProviderName = embeddedStatusJson.GetString(\"provider_name\");\n            ProviderUrl = embeddedStatusJson.GetString(\"provider_url\");\n            Url = embeddedStatusJson.GetString(\"url\");\n            Version = embeddedStatusJson.GetString(\"version\");\n            Type = embeddedStatusJson.GetString(\"type\");\n            Height = embeddedStatusJson.GetInt(\"height\");\n            Width = embeddedStatusJson.GetInt(\"width\");\n            string? cacheAgeStr = embeddedStatusJson.GetString(\"cache_age\");\n            if (!string.IsNullOrWhiteSpace(cacheAgeStr)) \n                CacheAge = ulong.Parse(cacheAgeStr);\n        }\n\n        public string? Html { get; set; }\n\n        public string? AuthorName { get; set; }\n\n        public string? ProviderUrl { get; set; }\n\n        public string? Url { get; set; }\n\n        public string? ProviderName { get; set; }\n\n        public string? Version { get; set; }\n\n        public string? Type { get; set; }\n\n        public int Height { get; set; }\n\n        public ulong CacheAge { get; set; }\n\n        public string? AuthorUrl { get; set; }\n\n        public int Width { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/EmbeddedStatusAlignment.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    public enum EmbeddedStatusAlignment\n    {\n        None,\n\n        Left,\n\n        Right,\n\n        Center\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/FilterLevel.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Twitter evaluation of tweet quality\n    /// </summary>\n    public enum FilterLevel\n    {\n        /// <summary>\n        /// No value\n        /// </summary>\n        None,\n\n        /// <summary>\n        /// Low value\n        /// </summary>\n        Low,\n\n        /// <summary>\n        /// Medium quality\n        /// </summary>\n        Medium,\n\n        /// <summary>\n        /// High quality\n        /// </summary>\n        High\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/Status.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Written by: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Common.Entities;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// returned information from Twitter Status queries\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Status\n    {\n        public Status() {}\n        public Status(JsonElement status)\n        {\n            if (status.IsNull()) \n                return;\n\n            status.TryGetProperty(\"retweeted_status\", out JsonElement retweetedStatus);\n            RetweetedStatus = new Status(retweetedStatus);\n            Retweeted = !retweetedStatus.IsNull();\n            Source = status.GetString(\"source\");\n            InReplyToScreenName = status.GetString(\"in_reply_to_screen_name\");\n            PossiblySensitive = status.GetBool(\"possibly_sensitive\");\n            IsQuotedStatus = status.GetBool(\"is_quote_status\");\n            QuotedStatusID = status.GetUlong(\"quoted_status_id\");\n            status.TryGetProperty(\"quoted_status\", out JsonElement quotedStatusValue);\n            QuotedStatus = new Status(quotedStatusValue);\n            status.TryGetProperty(\"contributors\", out JsonElement contributors);\n            Contributors =\n                contributors.IsNull() ?\n                    new List<Contributor>() :\n                    (from contributor in contributors.EnumerateArray()\n                     select new Contributor(contributor))\n                    .ToList();\n            status.TryGetProperty(\"coordinates\", out JsonElement coords);\n            if (!coords.IsNull())\n            {\n                coords.TryGetProperty(\"coordinates\", out JsonElement coordsValue);\n                Coordinates = new Coordinate(coordsValue);\n            }\n            else\n            {\n                Coordinates = new Coordinate();\n            }\n            status.TryGetProperty(\"place\", out JsonElement placeValue);\n            Place = new Place(placeValue);\n            RetweetCount = status.GetInt(\"retweet_count\");\n            StatusID = status.GetUlong(\"id\");\n            FavoriteCount = status.GetInt(\"favorite_count\");\n            Favorited = status.GetBool(\"favorited\");\n            InReplyToStatusID = status.GetUlong(\"in_reply_to_status_id\");\n            CreatedAt = status.GetDate(\"created_at\", DateTime.MaxValue);\n            InReplyToUserID = status.GetUlong(\"in_reply_to_user_id\");\n            Truncated = status.GetBool(\"truncated\");\n            status.TryGetProperty(\"display_text_range\", out JsonElement displayTextRange);\n            if (!displayTextRange.IsNull())\n            {\n                JsonElement[] displayTextIndices = displayTextRange.EnumerateArray().ToArray();\n                DisplayTextRange = new List<int> { displayTextIndices[0].GetInt32(), displayTextIndices[1].GetInt32() };\n            }\n            TweetMode tweetMode;\n            Enum.TryParse(value: status.GetString(\"tweet_mode\"), ignoreCase: true, result: out tweetMode);\n            TweetMode = tweetMode;\n            Text = status.GetString(\"text\");\n            FullText = status.GetString(\"full_text\");\n            status.TryGetProperty(\"extended_tweet\", out JsonElement extendedTweetValue);\n            ExtendedTweet = new Status(extendedTweetValue);\n            status.TryGetProperty(\"annotation\", out JsonElement annotationValue);\n            Annotation = new Annotation(annotationValue);\n            status.TryGetProperty(\"entities\", out JsonElement entitiesValue);\n            Entities = new Entities(entitiesValue);\n            status.TryGetProperty(\"extended_entities\", out JsonElement extendedEntitiesValue);\n            ExtendedEntities = new Entities(extendedEntitiesValue);\n            status.TryGetProperty(\"current_user_retweet\", out JsonElement currentUserRetweet);\n            if (!currentUserRetweet.IsNull())\n                CurrentUserRetweet = currentUserRetweet.GetProperty(\"id\").GetUInt64();\n            // TODO: We need a good example of a scope so we can write a test.\n            //JsonElement scopes = status.GetProperty(\"scopes\");\n            //Scopes =\n            //    scopes.IsNull() ? new Dictionary<string, string>() :\n            //    (from key in (scopes as IDictionary<string, JsonData>).Keys as List<string>\n            //     select new\n            //     {\n            //         Key = key,\n            //         Value = scopes[key].ToString()\n            //     })\n            //    .ToDictionary(\n            //        key => key.Key,\n            //        val => val.Value);\n            WithheldCopyright = status.GetBool(\"withheld_copyright\");\n            status.TryGetProperty(\"withheld_in_countries\", out JsonElement withheldCountries);\n            if (withheldCountries.IsNull())\n            {\n                WithheldInCountries = new List<string>();\n            }\n            else\n            {\n                WithheldInCountries =\n                    (from country in withheldCountries.EnumerateArray()\n                     select country.GetString())\n                    .ToList();\n            }\n            WithheldScope = status.GetString(\"withheld_scope\");\n            status.TryGetProperty(\"metadata\", out JsonElement metadataValue);\n            MetaData = new StatusMetaData(metadataValue);\n            Lang = status.GetString(\"lang\");\n            FilterLevel filterLevel;\n            Enum.TryParse(value: status.GetString(\"filter_level\"), ignoreCase: true, result: out filterLevel);\n            FilterLevel = filterLevel;\n            status.TryGetProperty(\"user\", out JsonElement userValue);\n            User = new User(userValue);\n            Users = new List<ulong>();\n        }\n\n        /// <summary>\n        /// Supports XML serialization\n        /// </summary>\n        [XmlIgnore]\n        StatusType type;\n\n        /// <summary>\n        /// type of status request, i.e. Friends or Public\n        /// </summary>\n        [XmlIgnore]\n        public StatusType Type\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        [XmlAttribute(AttributeName = \"Type\")]\n        internal StatusType StatusTypeXml\n        {\n            get { return type; }\n            set { type = value; }\n        }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// ID of User\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// User Screen Name\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// By default, user timeline doesn't include retweets,\n        /// but you can set this to true to includes retweets\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in results\n        /// </summary>\n        public bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Add entities to tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Add entities to user (default: true)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        public bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Includes Alt Text, if available\n        /// </summary>\n        public bool IncludeAltText { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        public string? OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        public int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand image\n        /// </summary>\n        public bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        public bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        public bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        public EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        public string? OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        public string? OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// when was the tweet created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// ID of this status\n        /// </summary>\n        public ulong StatusID { get; set; }\n\n        /// <summary>\n        /// Tweet Text (140)characters\n        /// </summary>\n        public string? Text { get; set; }\n\n        /// <summary>\n        /// When a tweet is an extended tweet in extended mode, \n        /// Text will be null and FullText will contain the tweet text.\n        /// </summary>\n        public string? FullText { get; set; }\n\n        /// <summary>\n        /// Extended tweet with entities in extended mode.\n        /// </summary>\n        public Status? ExtendedTweet { get; set; }\n\n        /// <summary>\n        /// where did the tweet come from\n        /// </summary>\n        public string? Source { get; set; }\n\n        /// <summary>\n        /// Has the tweet been truncated? True means that this is compatibiltiy mode tweet.\n        /// </summary>\n        public bool Truncated { get; set; }\n\n        /// <summary>\n        /// Inclusive start and exclusive end of displayable tweet content.\n        /// </summary>\n        public List<int>? DisplayTextRange { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        public TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// id of tweet being replied to, if it is a reply\n        /// </summary>\n        public ulong InReplyToStatusID { get; set; }\n\n        /// <summary>\n        /// id of user being replied to, if it is a reply\n        /// </summary>\n        public ulong InReplyToUserID { get; set; }\n\n        /// <summary>\n        /// Number of times this tweet has been favorited\n        /// </summary>\n        public int? FavoriteCount { get; set; }\n\n        /// <summary>\n        /// is listed as a favorite\n        /// </summary>\n        public bool Favorited { get; set; }\n\n        /// <summary>\n        /// screen name of user being replied to, if it is a reply\n        /// </summary>\n        public string? InReplyToScreenName { get; set; }\n\n        /// <summary>\n        /// information about user posting tweet (except in user tweets)\n        /// </summary>\n        public User? User { get; set; }\n\n        /// <summary>\n        /// Users who retweeted a tweet (used in StatusType.RetweetedBy queries)\n        /// </summary>\n        public List<ulong>? Users { get; set; }\n\n        /// <summary>\n        /// users who have contributed\n        /// </summary>\n        public List<Contributor>? Contributors { get; set; }\n\n        /// <summary>\n        /// Coordinates of where tweet occurred\n        /// </summary>\n        public Coordinate? Coordinates { get; set; }\n\n        /// <summary>\n        /// Place where status was created\n        /// </summary>\n        public Place? Place { get; set; }\n\n        /// <summary>\n        /// Meta-data applied to tweet\n        /// </summary>\n        public Annotation? Annotation { get; set; }\n\n        /// <summary>\n        /// Entities connected to the status\n        /// </summary>\n        public Entities? Entities { get; set; }\n\n        /// <summary>\n        /// Additional entities connected to the status\n        /// </summary>\n        public Entities? ExtendedEntities { get; set; }\n\n        /// <summary>\n        /// Removes all user info, except for ID\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Include more contributor info, beyond ID\n        /// </summary>\n        public bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Number of times retweeted\n        /// </summary>\n        public int RetweetCount { get; set; }\n\n        /// <summary>\n        /// Has tweet been retweeted\n        /// </summary>\n        public bool Retweeted { get; set; }\n\n        /// <summary>\n        /// Is tweet possibly sensitive (can be set via TweetWithMedia)\n        /// </summary>\n        public bool PossiblySensitive { get; set; }\n\n        /// <summary>\n        /// Retweeted status is status is a retweet\n        /// </summary>\n        public Status? RetweetedStatus { get; set; }\n\n        /// <summary>\n        /// ID of source status of retweet if IncludeMyRetweet is true.\n        /// Set to 0 if IncludeMyRetweet is false or tweet not retweeted\n        /// by authenticating user.\n        /// </summary>\n        public ulong CurrentUserRetweet { get; set; }\n\n        /// <summary>\n        /// Is this status quoting another tweet\n        /// </summary>\n        public bool IsQuotedStatus { get; set; }\n\n        /// ID of the quoted status\n        /// </summary>\n        public ulong QuotedStatusID { get; set; }\n\n        /// <summary>\n        /// Complete Status object representing the quoted status\n        /// </summary>\n        public Status? QuotedStatus { get; set; }\n\n        /// <summary>\n        /// Set of key/value pairs to support promoted tweets\n        /// </summary>\n        [XmlIgnore]\n        public Dictionary<string, string>? Scopes { get; set; }\n\n        /// <summary>\n        /// Indicates that you shouldn't display because there\n        /// is currently a DMCA complaint against the tweet.\n        /// </summary>\n        public bool WithheldCopyright { get; set; }\n\n        /// <summary>\n        /// Don't display tweet in countries in this list\n        /// </summary>\n        public List<string>? WithheldInCountries { get; set; }\n\n        /// <summary>\n        /// Part of the tweet that should not be displayed.\n        /// </summary>\n        public string? WithheldScope { get; set; }\n\n        /// <summary>\n        /// Status meta-data returned from searches\n        /// </summary>\n        public StatusMetaData? MetaData { get; set; }\n\n        /// <summary>\n        /// Twitter machine-detected prediction of language tweet is written in\n        /// </summary>\n        public string? Lang { get; set; }\n\n        /// <summary>\n        /// Indicate that a status lookup should return null objects for \n        /// tweets that the authorizing user doesn't have access to. \n        /// (e.g. tweet is from a protected account or doesn't exist)\n        /// </summary>\n        public bool Map { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet IDs passed to Lookup.\n        /// </summary>\n        public string? TweetIDs { get; set; }\n\n        /// <summary>\n        /// Twitter's evaluation of tweet quality\n        /// </summary>\n        public FilterLevel? FilterLevel { get; set; }\n\n        /// <summary>\n        /// Populated with OEmbed response for StatusType.OEmbed queries\n        /// </summary>\n        public EmbeddedStatus? EmbeddedStatus { get; set; }\n\n        /// <summary>\n        /// Manage paging through a list (e.g. IDs from Users collection)\n        /// </summary>\n        public Cursors? CursorMovement { get; set; }\n\n        /// <summary>\n        /// This helps process media uploads via StatusRequestProcessor.ProcessActionResult\n        /// </summary>\n        internal Media? Media { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/StatusAction.cs",
    "content": "namespace LinqToTwitter\n{\n    enum StatusAction\n    {\n        SingleStatus,\n\n        MediaUpload\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/StatusMetaData.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class StatusMetaData\n    {\n        public StatusMetaData() { }\n        public StatusMetaData(JsonElement mdJson)\n        {\n            if (mdJson.IsNull())\n                return;\n\n            ResultType = mdJson.GetString(\"result_type\");\n            IsoLanguageCode = mdJson.GetString(\"iso_language_code\");\n        }\n\n        public string? ResultType { get; set; }\n\n        public string? IsoLanguageCode { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/StatusRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes Twitter Status requests\n    /// </summary>\n    public class StatusRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of status request, i.e. Show or User\n        /// </summary>\n        public StatusType Type { get; set; }\n\n        /// <summary>\n        /// TweetID\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// User ID to disambiguate when ID is same as screen name\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// Screen Name to disambiguate when ID is same as UserD\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// filter results to after this status id\n        /// </summary>\n        public ulong SinceID { get; set; }\n\n        /// <summary>\n        /// max ID to retrieve\n        /// </summary>\n        public ulong MaxID { get; set; }\n\n        /// <summary>\n        /// only return this many results\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Next page of data to return\n        /// </summary>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Retweets are optional and you must set this to true\n        /// before they will be included in the user timeline\n        /// </summary>\n        public bool IncludeRetweets { get; set; }\n\n        /// <summary>\n        /// Don't include replies in responses\n        /// </summary>\n        public bool ExcludeReplies { get; set; }\n\n        /// <summary>\n        /// Include entities in tweets (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Include entities in users (default: true)\n        /// </summary>\n        public bool IncludeUserEntities { get; set; }\n\n        /// <summary>\n        /// Remove all user info, except for User ID\n        /// </summary>\n        public bool TrimUser { get; set; }\n\n        /// <summary>\n        /// Enhances contributor info, beyond the default ID\n        /// </summary>\n        public bool IncludeContributorDetails { get; set; }\n\n        /// <summary>\n        /// Populates CurrentUserRetweet in response if set to true\n        /// </summary>\n        public bool IncludeMyRetweet { get; set; }\n\n        /// <summary>\n        /// Includes Alt Text, if available\n        /// </summary>\n        public bool IncludeAltText { get; set; }\n\n        /// <summary>\n        /// Indicate that a status lookup should return null objects for \n        /// tweets that the authorizing user doesn't have access to. \n        /// (e.g. tweet is from a protected account or doesn't exist)\n        /// </summary>\n        public bool Map { get; set; }\n\n        /// <summary>\n        /// Url of tweet to embed\n        /// </summary>\n        public string? OEmbedUrl { get; set; }\n\n        /// <summary>\n        /// Max number of pixels for width\n        /// </summary>\n        public int OEmbedMaxWidth { get; set; }\n\n        /// <summary>\n        /// Don't initially expand media\n        /// </summary>\n        public bool OEmbedHideMedia { get; set; }\n\n        /// <summary>\n        /// Show original message for replies\n        /// </summary>\n        public bool OEmbedHideThread { get; set; }\n\n        /// <summary>\n        /// Don't include widgets.js script\n        /// </summary>\n        public bool OEmbedOmitScript { get; set; }\n\n        /// <summary>\n        /// Image alignment: Left, Right, Center, or None\n        /// </summary>\n        public EmbeddedStatusAlignment OEmbedAlign { get; set; }\n\n        /// <summary>\n        /// Suggested accounts for the viewer to follow\n        /// </summary>\n        public string? OEmbedRelated { get; set; }\n\n        /// <summary>\n        /// Language code for rendered tweet\n        /// </summary>\n        public string? OEmbedLanguage { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet IDs passed to Lookup.\n        /// </summary>\n        public string? TweetIDs { get; set; }\n\n        /// <summary>\n        /// Tweets can be compatibility or extended mode. Extended is the \n        /// new mode that allows you to put more characters in a tweet.\n        /// </summary>\n        public TweetMode TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<Status>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"ID\",\n                       \"UserID\",\n                       \"ScreenName\",\n                       \"SinceID\",\n                       \"MaxID\",\n                       \"Count\",\n                       \"Cursor\",\n                       \"IncludeRetweets\",\n                       \"ExcludeReplies\",\n                       \"IncludeEntities\",\n                       \"IncludeUserEntities\",\n                       \"TrimUser\",\n                       \"IncludeContributorDetails\",\n                       \"IncludeMyRetweet\",\n                       nameof(IncludeAltText),\n                       \"Map\",\n                       \"OEmbedUrl\",\n                       \"OEmbedMaxWidth\",\n                       \"OEmbedHideMedia\",\n                       \"OEmbedHideThread\",\n                       \"OEmbedOmitScript\",\n                       \"OEmbedAlign\",\n                       \"OEmbedRelated\",\n                       \"OEmbedLanguage\",\n                       \"TweetIDs\",\n                       nameof(TweetMode)\n                   });\n\n            var parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<StatusType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case StatusType.Home:\n                    return BuildHomeUrl(parameters);\n                case StatusType.Mentions:\n                    return BuildMentionsUrl(parameters);\n                case StatusType.Oembed:\n                    return BuildOembedUrl(parameters);\n                case StatusType.RetweetsOfMe:\n                    return BuildRetweetsOfMeUrl(parameters);\n                case StatusType.Retweets:\n                    return BuildRetweets(parameters);\n                case StatusType.User:\n                    return BuildUserUrl(parameters);\n                case StatusType.Retweeters:\n                    return BuildRetweetersUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// appends parameters that are common to both friend and user queries\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        Request BuildUrlParameters(Dictionary<string, string> parameters, string url)\n        {\n            var req = new Request(BaseUrl + url);\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = ulong.Parse(parameters[\"ID\"]);\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"SinceID\"))\n            {\n                SinceID = ulong.Parse(parameters[\"SinceID\"]);\n                urlParams.Add(new QueryParameter(\"since_id\", parameters[\"SinceID\"]));\n            }\n\n            if (parameters.ContainsKey(\"MaxID\"))\n            {\n                MaxID = ulong.Parse(parameters[\"MaxID\"]);\n                urlParams.Add(new QueryParameter(\"max_id\", parameters[\"MaxID\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeRetweets\"))\n            {\n                IncludeRetweets = bool.Parse(parameters[\"IncludeRetweets\"]);\n                urlParams.Add(new QueryParameter(\"include_rts\", parameters[\"IncludeRetweets\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"ExcludeReplies\"))\n            {\n                ExcludeReplies = bool.Parse(parameters[\"ExcludeReplies\"]);\n                urlParams.Add(new QueryParameter(\"exclude_replies\", parameters[\"ExcludeReplies\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeMyRetweet\"))\n            {\n                IncludeMyRetweet = bool.Parse(parameters[\"IncludeMyRetweet\"]);\n                urlParams.Add(new QueryParameter(\"include_my_retweet\", parameters[\"IncludeMyRetweet\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeUserEntities\"))\n            {\n                IncludeUserEntities = bool.Parse(parameters[\"IncludeUserEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_user_entities\", parameters[\"IncludeUserEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"IncludeContributorDetails\"))\n            {\n                IncludeContributorDetails = bool.Parse(parameters[\"IncludeContributorDetails\"]);\n                urlParams.Add(new QueryParameter(\"contributor_details\", parameters[\"IncludeContributorDetails\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(IncludeAltText)))\n            {\n                IncludeAltText = bool.Parse(parameters[nameof(IncludeAltText)]);\n                urlParams.Add(new QueryParameter(\"include_ext_alt_text\", parameters[nameof(IncludeAltText)].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base home url\n        /// </summary>\n        /// <returns>base url + home segment</returns>\n        Request BuildHomeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/home_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">parameters to build url query with</param>\n        /// <returns>base url + mentions segment</returns>\n        Request BuildMentionsUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/mentions_timeline.json\");\n        }\n\n        /// <summary>\n        /// construct an oembed url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + url segment</returns>\n        Request BuildOembedUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(\"https://publish.twitter.com/oembed\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"ID\"))\n            {\n                ID = ulong.Parse(parameters[\"ID\"]);\n                urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedUrl\"))\n            {\n                OEmbedUrl = parameters[\"OEmbedUrl\"];\n                urlParams.Add(new QueryParameter(\"url\", parameters[\"OEmbedUrl\"]));\n            }\n            else\n            {\n                throw new ArgumentException($\"{nameof(OEmbedUrl)} is required!\", nameof(OEmbedUrl));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedMaxWidth\"))\n            {\n                OEmbedMaxWidth = int.Parse(parameters[\"OEmbedMaxWidth\"]);\n                urlParams.Add(new QueryParameter(\"maxwidth\", parameters[\"OEmbedMaxWidth\"]));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideMedia\"))\n            {\n                OEmbedHideMedia = bool.Parse(parameters[\"OEmbedHideMedia\"]);\n                urlParams.Add(new QueryParameter(\"hide_media\", parameters[\"OEmbedHideMedia\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedHideThread\"))\n            {\n                OEmbedHideThread = bool.Parse(parameters[\"OEmbedHideThread\"]);\n                urlParams.Add(new QueryParameter(\"hide_thread\", parameters[\"OEmbedHideThread\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedOmitScript\"))\n            {\n                OEmbedOmitScript = bool.Parse(parameters[\"OEmbedOmitScript\"]);\n                urlParams.Add(new QueryParameter(\"omit_script\", parameters[\"OEmbedOmitScript\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedAlign\"))\n            {\n                OEmbedAlign = RequestProcessorHelper.ParseEnum<EmbeddedStatusAlignment>(parameters[\"OEmbedAlign\"]);\n                urlParams.Add(new QueryParameter(\"align\", OEmbedAlign.ToString().ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedRelated\"))\n            {\n                OEmbedRelated = parameters[\"OEmbedRelated\"];\n                urlParams.Add(new QueryParameter(\"related\", parameters[\"OEmbedRelated\"].Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(\"OEmbedLanguage\"))\n            {\n                OEmbedLanguage = parameters[\"OEmbedLanguage\"];\n                urlParams.Add(new QueryParameter(\"lang\", parameters[\"OEmbedLanguage\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base retweeted by user url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweeted by user segment</returns>\n        Request BuildRetweets(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentNullException(\"ID\", \"ID is required.\");\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n\n            var req = new Request(BaseUrl + \"statuses/retweets/\" + ID + \".json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"TrimUser\"))\n            {\n                TrimUser = bool.Parse(parameters[\"TrimUser\"]);\n                urlParams.Add(new QueryParameter(\"trim_user\", parameters[\"TrimUser\"].ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct a base mentions url\n        /// </summary>\n        /// <param name=\"parameters\">input parameters</param>\n        /// <returns>base url + retweets of me segment</returns>\n        Request BuildRetweetsOfMeUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/retweets_of_me.json\");\n        }\n\n        Request BuildRetweetersUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(\"ID\"))\n                throw new ArgumentException(\"ID is required.\", \"ID\");\n\n            var url = BaseUrl + \"statuses/retweeters/ids.json\";\n            var req = new Request(url);\n            var urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[\"ID\"]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[\"ID\"]));\n\n            if (parameters.ContainsKey(\"Cursor\"))\n            {\n                Cursor = long.Parse(parameters[\"Cursor\"]);\n\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[\"Cursor\"]));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n                urlParams.Add(new QueryParameter(\"tweet_mode\", TweetMode.ToString().ToLower()));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// construct an url for the user timeline\n        /// </summary>\n        /// <returns>base url + user timeline segment</returns>\n        Request BuildUserUrl(Dictionary<string, string> parameters)\n        {\n            return BuildUrlParameters(parameters, \"statuses/user_timeline.json\");\n        }\n\n        /// <summary>\n        /// transforms Twitter response into List of Status\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of Status</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n\n            JsonElement statusJson = JsonDocument.Parse(responseJson).RootElement;\n\n            List<Status> statusList;\n            switch (Type)\n            {\n                case StatusType.Home:\n                case StatusType.Mentions:\n                case StatusType.RetweetsOfMe:\n                case StatusType.Retweets:\n                case StatusType.User:\n                    statusList =\n                        (from status in statusJson.EnumerateArray()\n                         select new Status(status))\n                        .ToList();\n                    break;\n                case StatusType.Retweeters:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            Users =\n                                (from id in statusJson.GetProperty(\"ids\").EnumerateArray()\n                                 select id.GetUInt64())\n                                .ToList(),\n                            CursorMovement = new Cursors(statusJson)\n                        }\n                    };\n                    break;\n                case StatusType.Oembed:\n                    statusList = new List<Status>\n                    {\n                        new Status\n                        {\n                            EmbeddedStatus = new EmbeddedStatus(statusJson)\n                        }\n                    };\n                    break;\n                default:\n                    statusList = new List<Status>();\n                    break;\n            }\n\n            foreach (var status in statusList)\n            {\n                status.Type = Type;\n                status.ID = ID;\n                status.UserID = UserID;\n                status.ScreenName = ScreenName;\n                status.SinceID = SinceID;\n                status.MaxID = MaxID;\n                status.Count = Count;\n                status.Cursor = Cursor;\n                status.IncludeRetweets = IncludeRetweets;\n                status.ExcludeReplies = ExcludeReplies;\n                status.IncludeEntities = IncludeEntities;\n                status.IncludeUserEntities = IncludeUserEntities;\n                status.TrimUser = TrimUser;\n                status.IncludeContributorDetails = IncludeContributorDetails;\n                status.IncludeMyRetweet = IncludeMyRetweet;\n                status.IncludeAltText = IncludeAltText;\n                status.OEmbedAlign = OEmbedAlign;\n                status.OEmbedHideMedia = OEmbedHideMedia;\n                status.OEmbedHideThread = OEmbedHideThread;\n                status.OEmbedMaxWidth = OEmbedMaxWidth;\n                status.OEmbedOmitScript = OEmbedOmitScript;\n                status.OEmbedRelated = OEmbedRelated;\n                status.OEmbedUrl = OEmbedUrl;\n                status.OEmbedLanguage = OEmbedLanguage;\n                status.TweetIDs = TweetIDs;\n                status.Map = Map;\n                status.TweetMode = TweetMode;\n            }\n\n            return statusList.OfType<T>().ToList();\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement statusJson = JsonDocument.Parse(responseJson).RootElement;\n\n            Status status = ((StatusAction)theAction) switch\n            {\n                StatusAction.SingleStatus =>\n                    new Status(statusJson),\n                StatusAction.MediaUpload =>\n                    status = new Status\n                    {\n                        Media = new Media(statusJson)\n                    },\n                _ => new Status()\n            };\n\n            return status.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/StatusType.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// type of status request\n    /// </summary>\n    public enum StatusType\n    {\n        /// <summary>\n        /// tweets from a specific user\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, user ID to retrieve tweets for\n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        ///     - IncludeRetweets, return retweets too\n        /// </summary>\n        User,\n\n        /// <summary>\n        /// lists the 20 most recent tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        Mentions,\n\n        /// <summary>\n        /// Same as Friend, but includes retweets too\n        /// \n        /// Available Options:\n        /// \n        ///     - Since, get tweets since this date\n        ///     - SinceID, get tweets since this ID\n        ///     - Count, number of tweets to retrieve\n        ///     - Page, which page to return\n        /// </summary>\n        Home,\n\n        /// <summary>\n        /// gets retweets of specified tweet\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet to get retweets for\n        ///     - Count, number of tweets to retrieve\n        /// </summary>\n        Retweets,\n\n        /// <summary>\n        /// lists the 20 most recent re-tweets about the logged-in user\n        /// \n        /// Available Options:\n        /// \n        ///     - SinceID, get tweets since this ID\n        ///     - MaxID, gets tweets less than this ID\n        ///     - Count, max number of tweets to return\n        ///     - Page, which page to return\n        /// </summary>\n        RetweetsOfMe,\n\n        /// <summary>\n        /// lists up to 100 ids of users who retweeted a status\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, retweeted tweet ID\n        ///     - Cursor, page to return\n        /// </summary>\n        Retweeters,\n\n        /// <summary>\n        /// provides information, such as HTML, to embed a tweet in a Web page\n        /// \n        /// Available Options:\n        /// \n        ///     - ID, tweet ID\n        ///     - OEmbedUrl, Url of tweet to embed\n        ///     - OEmbedMaxWidth, Max number of pixels for width\n        ///     - OEmbedHideMedia, Don't initially expand image\n        ///     - OEmbedHideThread, Show original message for replies\n        ///     - OEmbedOmitScript, Don't include widgets.js script\n        ///     - OEmbedAlign, Image alignment: Left, Right, Center, or None\n        ///     - OEmbedRelated, Suggested accounts for the viewer to follow\n        ///     - OEmbedLanguage, Language code for rendered tweet\n        /// </summary>\n        Oembed,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Status/TwitterContextStatusCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        public const ulong MissingID = 0ul;\n        public const ulong NoReply = 0ul;\n        public const decimal NoCoordinate = Decimal.MaxValue;\n\n        /// <summary>\n        /// Retweets a tweet.\n        /// </summary>\n        /// <param name=\"tweetID\">ID of tweet being retweeted.</param>\n        /// <returns>Retweeted tweet.</returns>\n        public virtual async Task<Status?> RetweetAsync(ulong tweetID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (tweetID == MissingID)\n                throw new ArgumentException(\"0 is *not* a valid tweetID. You must provide the ID of the tweet you're retweeting.\", \"tweetID\");\n\n            var retweetUrl = BaseUrl + \"statuses/retweet/\" + tweetID + \".json\";\n\n            RawResult = await TwitterExecutor\n                .PostFormUrlEncodedToTwitterAsync<Status>(HttpMethod.Post.ToString(), retweetUrl, new Dictionary<string, string?>(), cancelToken)\n                .ConfigureAwait(false);\n\n            return new StatusRequestProcessor<Status>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/AddStreamingFilterRules.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record AddStreamingFilterRules\n    {\n        [JsonPropertyName(\"add\")]\n        public List<StreamingAddRule>? Add { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/DeleteIds.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record DeleteIds\n    {\n        [JsonPropertyName(\"ids\")]\n        public List<string>? Ids { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/DeleteStreamingFilterRules.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record DeleteStreamingFilterRules\n    {\n        [JsonPropertyName(\"delete\")]\n        public DeleteIds? Delete { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/IStreamContent.cs",
    "content": "namespace LinqToTwitter\n{\n    public interface IStreamContent\n    {\n        string Content { get; set; }\n\n        void CloseStream();\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/MatchingRule.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Rule on filter stream\n    /// </summary>\n    public record MatchingRule\n    {\n        /// <summary>\n        /// ID for rule\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// Rule tag\n        /// </summary>\n        [JsonPropertyName(\"tag\")]\n        public string? Tag { get; init; }\n    }\n\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamContent.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from Twitter stream\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class StreamContent : IStreamContent, IDisposable\n    {\n        private readonly ITwitterExecute exec;\n\n        public StreamContent(ITwitterExecute exec, string content)\n        {\n            this.exec = exec;\n            Content = content;\n            (Entity, EntityType) = ParseJson(content);\n        }\n\n        public (StreamTweet? entity, StreamEntityType entityType) ParseJson(string json)\n        {\n            if (string.IsNullOrWhiteSpace(json))\n                return (null, StreamEntityType.Unknown);\n\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter(),\n                    new TweetReplySettingsConverter()\n                }\n            };\n\n            try\n            {\n                return (JsonSerializer.Deserialize<StreamTweet>(json, options), StreamEntityType.Tweet);\n            }\n            catch (Exception ex)\n            {\n                string parseError = \n                    $\"Error parsing twitter message. Please create a new issue on the LINQ to Twitter \" +\n                    $\"site at https://github.com/JoeMayo/LinqToTwitter/issues with this info. \\n\\n\" +\n                    $\"Message Type: {EntityType}, Message Text:\\n {json} \\nException Details: {ex} \\n\";\n\n                ErrorMessage = parseError;\n\n                if (TwitterExecute.Log != null)\n                    TwitterExecute.Log.WriteLine(parseError);\n\n                return (null, StreamEntityType.Unknown);\n            }\n        }\n\n        /// <summary>\n        /// Stream object, which is a Twitter message of various\n        /// formats or empty string for keep-alive message\n        /// </summary>\n        public string Content { get; set; }\n\n        /// <summary>\n        /// Type of Stream Message\n        /// </summary>\n        public StreamEntityType EntityType { get; private set; }\n\n        /// <summary>\n        /// LINQ to Twitter entity\n        /// </summary>\n        public StreamTweet? Entity { get; private set; }\n\n        /// <summary>\n        /// If HasError is true, check the ErrorMessage for more info\n        /// </summary>\n        public bool HasError { get => ErrorMessage != null; }\n\n        /// <summary>\n        /// Will have an error message if a problem occurred.\n        /// </summary>\n        public string? ErrorMessage { get; set; }\n\n        /// <summary>\n        /// Closes Twitter stream.\n        /// </summary>\n        public virtual void CloseStream()\n        {\n            exec.CloseStream();\n        }\n\n        public void Dispose()\n        {\n            CloseStream();\n            GC.SuppressFinalize(this);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamEntityType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum StreamEntityType\n    {\n        Unknown,\n\n        Tweet\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamTweet.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record StreamTweet\n    {\n        [JsonPropertyName(\"data\")]\n        public Tweet? Tweet { get; init; }\n\n        [JsonPropertyName(\"matching_rules\")]\n        public List<MatchingRule>? MatchingRules { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/Streaming.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json.Serialization;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Reference to stream, details, and controls\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public record Streaming\n    {\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; init; }\n\n        /// <summary>\n        /// Number of minutes in the past to start returning tweets after reconnection\n        /// </summary>\n        public int BackfillMinutes { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields\n        /// </summary>\n        public string? Expansions { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object\n        /// </summary>\n        public string? MediaFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object\n        /// </summary>\n        public string? PlaceFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object\n        /// </summary>\n        public string? PollFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object\n        /// </summary>\n        public string? TweetFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object\n        /// </summary>\n        public string? UserFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of rule ids, for filter rules queries\n        /// </summary>\n        public string? Ids { get; init; }\n\n        /// <summary>\n        /// Rule data returned from the query\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<StreamingRule>? Rules { get; init; }\n\n        /// <summary>\n        /// If any errors occur, they'll show up here\n        /// </summary>\n        [JsonPropertyName(\"errors\")]\n        public List<TwitterError>? Errors { get; init; }\n\n        /// <summary>\n        /// Were there errors?\n        /// </summary>\n        public bool HasErrors { get => Errors?.Any() ?? false; }\n\n        /// <summary>\n        /// Tweet metadata returned from search\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public StreamingMeta? Meta { get; init; }\n\n        /// <summary>\n        /// Executor managing stream\n        /// </summary>\n        internal ITwitterExecute? TwitterExecutor { get; init; }\n\n        /// <summary>\n        /// Closes stream\n        /// </summary>\n        public void CloseStream()\n        {\n            TwitterExecutor?.CloseStream();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamingAddRule.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// New rule on filter stream\n    /// </summary>\n    public record StreamingAddRule\n    {\n        /// <summary>\n        /// Rule text\n        /// </summary>\n        [JsonPropertyName(\"value\")]\n        public string? Value { get; init; }\n\n        /// <summary>\n        /// Rule tag\n        /// </summary>\n        [JsonPropertyName(\"tag\")]\n        public string? Tag { get; init; }\n    }\n\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamingMeta.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record StreamingMeta\n    {\n        /// <summary>\n        /// Twitter server time when the request was sent\n        /// </summary>\n        [JsonPropertyName(\"sent\")]\n        public DateTime Sent { get; init; }\n\n        /// <summary>\n        /// Statistics on created or deleted, which ever applies for the request\n        /// </summary>\n        [JsonPropertyName(\"summary\")]\n        public StreamingMetaSummary? Summary { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamingMetaSummary.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Response from either adding or deleting rules\n    /// </summary>\n    public record StreamingMetaSummary\n    {\n        /// <summary>\n        /// Number of rules created\n        /// </summary>\n        [JsonPropertyName(\"created\")]\n        public int Created { get; init; }\n\n        /// <summary>\n        /// Number of rules not created\n        /// </summary>\n        [JsonPropertyName(\"not_created\")]\n        public int NotCreated { get; init; }\n\n        /// <summary>\n        /// Number of rules deleted\n        /// </summary>\n        [JsonPropertyName(\"deleted\")]\n        public int Deleted { get; init; }\n\n        /// <summary>\n        /// Number of rules not deleted\n        /// </summary>\n        [JsonPropertyName(\"not_deleted\")]\n        public int NotDeleted { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamingRequestProcessor.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Handles streaming queries\n    /// </summary>\n    /// <typeparam name=\"T\">Streaming type</typeparam>\n    public class StreamingRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWithAction<Streaming>\n    {\n        /// <summary>\n        /// Twitter base url\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Manages communication logic for streaming\n        /// </summary>\n        public ITwitterExecute? TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// Stream method\n        /// </summary>\n        public StreamingType Type { get; set; }\n\n        /// <summary>\n        /// Number of minutes in the past to start returning tweets after reconnection\n        /// </summary>\n        public int BackfillMinutes { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of rule ids, for filter rules queries\n        /// </summary>\n        public string? Ids { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var parameters =\n               new ParameterFinder<Streaming>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(BackfillMinutes),\n                       nameof(Expansions),\n                       nameof(Ids),\n                       nameof(MediaFields),\n                       nameof(PlaceFields),\n                       nameof(PollFields),\n                       nameof(TweetFields),\n                       nameof(UserFields)\n                   }).Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Type)))\n                Type = RequestProcessorHelper.ParseEnum<StreamingType>(parameters[\"Type\"]);\n            else\n                throw new ArgumentException($\"{nameof(Type)} is required\", nameof(Type));\n\n            string segment = Type == StreamingType.Filter ? \"tweets/search/stream\" : \"tweets/sample/stream\";\n\n            bool isStreaming = true;\n\n            if (Type == StreamingType.Rules)\n            {\n                segment = \"tweets/search/stream/rules\";\n                isStreaming = false;\n            }\n\n            var req = new Request(BaseUrl + segment) { IsStreaming = isStreaming };\n            var urlParams = req.RequestParameters;\n\n            BuildUrlParameters(parameters, urlParams);\n\n            return req;\n        }\n\n        /// <summary>\n        /// appends parameters for Tweet request\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        void BuildUrlParameters(Dictionary<string, string> parameters, IList<QueryParameter> urlParams)\n        {\n            if (parameters.ContainsKey(nameof(BackfillMinutes)))\n            {\n                int.TryParse(parameters[nameof(BackfillMinutes)], out int minutes);\n                BackfillMinutes = minutes;\n                urlParams.Add(new QueryParameter(\"backfill_minutes\", BackfillMinutes.ToString()));\n            }\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(Ids)))\n            {\n                Ids = parameters[nameof(Ids)];\n                urlParams.Add(new QueryParameter(\"ids\", Ids.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n        }\n\n        /// <summary>\n        /// Returns an object for interacting with stream\n        /// </summary>\n        /// <param name=\"notUsed\">Not used</param>\n        /// <returns>List with a single Streaming</returns>\n        public List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Streaming> streamingList;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                streamingList = new List<Streaming> { new Streaming() };\n            }\n            else\n            {\n                var tweetResult = JsonDeserialize(responseJson);\n                streamingList = new List<Streaming> { tweetResult };\n            }\n\n            return streamingList.OfType<T>().ToList();\n        }\n\n        Streaming JsonDeserialize(string responseJson)\n        {\n            Streaming? streaming = JsonSerializer.Deserialize<Streaming>(responseJson);\n\n            if (streaming == null)\n                return new Streaming\n                {\n                    Type = Type,\n                    Expansions = Expansions,\n                    MediaFields = MediaFields,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields\n                };\n            else\n                return streaming with\n                {\n                    Type = Type,\n                    Expansions = Expansions,\n                    MediaFields = MediaFields,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields\n                };\n        }\n\n        public Streaming? ProcessActionResult(string twitterResponse, Enum theAction)\n        {\n            return JsonDeserialize(twitterResponse);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamingRule.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Rule on filter stream\n    /// </summary>\n    public record StreamingRule\n    {\n        /// <summary>\n        /// ID for rule\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// Rule text\n        /// </summary>\n        [JsonPropertyName(\"value\")]\n        public string? Value { get; init; }\n\n        /// <summary>\n        /// Rule tag\n        /// </summary>\n        [JsonPropertyName(\"tag\")]\n        public string? Tag { get; init; }\n    }\n\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/StreamingType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum StreamingType\n    {\n        /// <summary>\n        /// Tweets matching a predicate (count, delimited, follow, locations, or track)\n        /// </summary>\n        Filter,\n\n        /// <summary>\n        /// Get Filter stream search rules\n        /// </summary>\n        Rules,\n\n        /// <summary>\n        /// Random (as defined by Twitter) tweets\n        /// </summary>\n        Sample,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Streaming/TwitterContextStreamingCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Add rules to the filter stream\n        /// </summary>\n        /// <param name=\"rules\">List of tag/value rules to add</param>\n        /// <param name=\"isValidateOnly\">\"true\" says don't apply rule - just validate to see if it's formatted correctly (dry run)</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns></returns>\n        public virtual async Task<Streaming?> AddStreamingFilterRulesAsync(List<StreamingAddRule> rules, bool isValidateOnly = false, CancellationToken cancelToken = default)\n        {\n            _ = rules ?? throw new ArgumentNullException(nameof(rules), $\"{nameof(rules)} is required!\");\n\n            var addRules = new AddStreamingFilterRules \n            { \n                Add = rules \n            };\n            return await AddOrValidateStreamingFilterRulesAsync(addRules, isValidateOnly, cancelToken);\n        }\n\n        /// <summary>\n        /// Delete rules from the filter stream\n        /// </summary>\n        /// <param name=\"ruleIds\">List of ids of rules to delete</param>\n        /// <param name=\"isValidateOnly\">\"true\" says don't apply rule - just validate to see if it's formatted correctly (dry run)</param>\n        /// <param name=\"cancelToken\">Allows you to cancel async operation</param>\n        /// <returns></returns>\n        public virtual async Task<Streaming?> DeleteStreamingFilterRulesAsync(List<string> ruleIds, bool isValidateOnly = false, CancellationToken cancelToken = default)\n        {\n            _ = ruleIds ?? throw new ArgumentNullException(nameof(ruleIds), $\"{nameof(ruleIds)} is required!\");\n\n            var deleteRules = new DeleteStreamingFilterRules \n            { \n                Delete = new DeleteIds\n                {\n                    Ids = ruleIds\n                }\n            };\n            return await AddOrValidateStreamingFilterRulesAsync(deleteRules, isValidateOnly, cancelToken);\n        }\n\n        async Task<Streaming?> AddOrValidateStreamingFilterRulesAsync<T>(T rules, bool isValidateOnly, CancellationToken cancelToken)\n        {\n            string rulesUrl = BaseUrl2 + \"tweets/search/stream/rules\";\n\n            var postData = new Dictionary<string, string>();\n\n            if (isValidateOnly)\n            {\n                postData[\"dry_run\"] = true.ToString();\n                rulesUrl += \"?dry_run=true\";\n            }\n\n            var reqProc = new StreamingRequestProcessor<Streaming>();\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    rulesUrl,\n                    postData,\n                    rules,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            return reqProc.ProcessActionResult(RawResult, StreamingType.Filter);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Trends/Location.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Globalization;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Location\n    {\n        public Location() {}\n        internal Location(JsonElement trendLocation)\n        {\n            if (trendLocation.TryGetProperty(\"placeType\", out JsonElement placeType))\n            {\n                PlaceTypeName = placeType.GetString(\"name\");\n                PlaceTypeNameCode = placeType.GetInt(\"code\");\n            }\n\n            Country = trendLocation.GetString(\"country\");\n            Name = trendLocation.GetString(\"name\");\n            CountryCode = trendLocation.GetString(\"countryCode\");\n            ParentID = trendLocation.GetInt(\"parentid\").ToString(CultureInfo.InvariantCulture);\n            Url = trendLocation.GetString(\"url\");\n            WoeID = trendLocation.GetInt(\"woeid\");\n        }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Name of location\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Type of location\n        /// </summary>\n        public string? PlaceTypeName { get; set; }\n\n        /// <summary>\n        /// Code for PlaceTypeName\n        /// </summary>\n        public int PlaceTypeNameCode { get; set; }\n\n        /// <summary>\n        /// Country of Location\n        /// </summary>\n        public string? Country { get; set; }\n\n        /// <summary>\n        /// Country Code\n        /// </summary>\n        public string? CountryCode { get; set; }\n\n        /// <summary>\n        /// Yahoo Location URL\n        /// </summary>\n        public string? Url { get; set; }\n\n        /// <summary>\n        /// Parent location relative to current location.\n        /// Set to null if current location is World.\n        /// </summary>\n        public string? ParentID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Trends/Trend.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps to work with trends\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Trend\n    {\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        public TrendType Type { get; set; }\n\n        /// <summary>\n        /// When place trend was created\n        /// </summary>\n        public DateTime? CreatedAt { get; set; }\n\n        /// <summary>\n        /// time of request\n        /// </summary>\n        public DateTime? AsOf { get; set; }\n\n        /// <summary>\n        /// twitter search query on topic\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Search URL returned from Local Trends\n        /// </summary>\n        public string? SearchUrl { get; set; }\n\n        /// <summary>\n        /// name of trend topic\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        public bool Exclude { get; set; }\n\n        /// <summary>\n        /// No idea, perhaps the event associated with a trend\n        /// </summary>\n        public string? Events { get; set; }\n\n        /// <summary>\n        /// Flag indicating this is a promoted trend (as opposed to organic)\n        /// </summary>\n        public string? PromotedContent { get; set; }\n\n        /// <summary>\n        /// Return value for Avalable query listing locations of trending topics\n        /// </summary>\n        public List<Location>? Locations { get; set; }\n\n        /// <summary>\n        /// Number of tweets in a trend\n        /// </summary>\n        public int TweetVolume { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Trends/TrendRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// helps process trend requests\n    /// </summary>\n    public class TrendRequestProcessor<T>\n        : IRequestProcessor<T>\n        , IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string WoeIDParam = \"WoeID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of trend to query (Trend (all), Current, Daily, or Weekly)\n        /// </summary>\n        public TrendType Type { get; set; }\n\n        /// <summary>\n        /// Latitude\n        /// </summary>\n        public double Latitude { get; set; }\n\n        /// <summary>\n        /// Longitude\n        /// </summary>\n        public double Longitude { get; set; }\n\n        /// <summary>\n        /// Yahoo Where On Earth ID\n        /// </summary>\n        public int WoeID { get; set; }\n\n        /// <summary>\n        /// Set to true to omit hashtags from results\n        /// </summary>\n        public bool Exclude { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            return\n               new ParameterFinder<Trend>(\n                   lambdaExpression.Body,\n                   new List<string> { \n                       \"Type\",\n                       \"Latitude\",\n                       \"Longitude\",\n                       \"WoeID\",\n                       \"Exclude\"\n                   })\n                   .Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(\"Type\"))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<TrendType>(parameters[\"Type\"]);\n\n            switch (Type)\n            {\n                case TrendType.Available:\n                    return BuildAvailableTrendsUrl();\n                case TrendType.Closest:\n                    return BuildClosestTrendsUrl(parameters);\n                case TrendType.Place:\n                    return BuildPlaceTrendsUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\");\n            }\n        }\n\n        /// <summary>\n        /// Builds a url for finding trends at a specified location\n        /// </summary>\n        /// <param name=\"parameters\">parameters should contain WoeID</param>\n        /// <returns>base url + location segment</returns>\n        Request BuildPlaceTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if (!parameters.ContainsKey(WoeIDParam))\n                throw new ArgumentException(\"WoeID is a required parameter.\", WoeIDParam);\n\n            var req = new Request(BaseUrl + \"trends/place.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            WoeID = int.Parse(parameters[WoeIDParam]);\n            urlParams.Add(new QueryParameter(\"id\", parameters[WoeIDParam]));\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds an URL for finding where trends are occurring\n        /// </summary>\n        /// <returns>base url + Available segment</returns>\n        Request BuildAvailableTrendsUrl()\n        {\n            return new Request(BaseUrl + \"trends/available.json\");\n        }\n\n        /// <summary>\n        /// Builds an URL for finding trends closest to a lat/long\n        /// </summary>\n        /// <param name=\"parameters\">parameters can include Latitude and Longitude (must have either both parameters or neither)</param>\n        /// <returns>base url + Available segment</returns>\n        Request BuildClosestTrendsUrl(Dictionary<string, string> parameters)\n        {\n            if ((parameters.ContainsKey(\"Latitude\") && !parameters.ContainsKey(\"Longitude\")) ||\n                (!parameters.ContainsKey(\"Latitude\") && parameters.ContainsKey(\"Longitude\")))\n                throw new ArgumentException(\"If you pass either Latitude or Longitude then you must pass both. Otherwise, don't pass either.\", \"Latitude/Longitude\");\n\n            var req = new Request(BaseUrl + \"trends/closest.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Latitude\"))\n            {\n                Latitude = double.Parse(parameters[\"Latitude\"]);\n                urlParams.Add(new QueryParameter(\"lat\", parameters[\"Latitude\"]));\n            }\n\n            if (parameters.ContainsKey(\"Longitude\"))\n            {\n                Longitude = double.Parse(parameters[\"Longitude\"]);\n                urlParams.Add(new QueryParameter(\"long\", parameters[\"Longitude\"]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Trend\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Trend</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<Trend> trends = Enumerable.Empty<Trend>();\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n            {\n                switch (Type)\n                {\n                    case TrendType.Available:\n                    case TrendType.Closest:\n                        trends = HandleAvailableOrClosestResponse(responseJson);\n                        break;\n\n                    case TrendType.Place:\n                        trends = HandlePlaceResponse(responseJson);\n                        break;\n\n                    default:\n                        throw new InvalidOperationException(\"The default case of ProcessResults should never execute because a Type must be specified.\");\n                }\n            }\n\n            return trends.OfType<T>().ToList();\n        }\n\n        /// <summary>\n        /// transforms json into an action response\n        /// </summary>\n        /// <param name=\"responseJson\">json with Twitter response</param>\n        /// <param name=\"theAction\">Type of action to process</param>\n        /// <returns>Action response</returns>\n        public virtual T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            var trend = new Trend();\n\n            return trend.ItemCast(default(T));\n        }\n\n        IEnumerable<Trend> HandlePlaceResponse(string responseJson)\n        {\n            JsonElement responses = JsonDocument.Parse(responseJson).RootElement;\n\n            IEnumerable<IEnumerable<Trend>> flat =\n                from response in responses.EnumerateArray()\n                let asOf = response.GetString(\"as_of\")?.GetDate(DateTime.UtcNow)\n                let createdAt = response.GetString(\"created_at\")?.GetDate(DateTime.UtcNow)\n                let locations =\n                     (from place in response.GetProperty(\"locations\").EnumerateArray()\n                      select new Location(place)).ToList()\n                let trends =\n                     (from trend in response.GetProperty(\"trends\").EnumerateArray()\n                      select new Trend\n                      {\n                          Type = Type,\n                          AsOf = asOf,\n                          CreatedAt = createdAt,\n                          Latitude = Latitude,\n                          Longitude = Longitude,\n                          WoeID = WoeID,\n                          Exclude = Exclude,\n                          Name = trend.GetString(\"name\"),\n                          Query = trend.GetString(\"query\"),\n                          SearchUrl = trend.GetString(\"url\"),\n                          Events = trend.GetString(\"events\"),\n                          PromotedContent = trend.GetString(\"promoted_content\"),\n                          Locations = locations,\n                          TweetVolume = trend.GetInt(\"tweet_volume\")\n                      })\n                select trends;\n\n            return flat.SelectMany(trend => trend);\n        }\n\n        IEnumerable<Trend> HandleAvailableOrClosestResponse(string responseJson)\n        {\n            JsonElement trends = JsonDocument.Parse(responseJson).RootElement;\n            List<Location> locations =\n                (from loc in trends.EnumerateArray()\n                 select new Location(loc))\n                .ToList();\n\n            // we fake a single Trend to hang the locations off of...\n            yield return new Trend\n            {\n                Type = Type,\n                AsOf = DateTime.UtcNow,\n                Latitude = Latitude,\n                Longitude = Longitude,\n                WoeID = WoeID,\n                Exclude = Exclude,\n                Locations = locations\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Trends/TrendType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of trend to query\n    /// </summary>\n    public enum TrendType\n    {\n        /// <summary>\n        /// Locations of where trends are occurring\n        /// </summary>\n        Available,\n\n        /// <summary>\n        /// Trends closest to specified lat/long\n        /// </summary>\n        Closest,\n\n        /// <summary>\n        /// Top 10 topics for a WOEID\n        /// </summary>\n        Place\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/Tweet.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record Tweet\n    {\n        /// <summary>\n        /// Attachments, such as polls, images, and videos\n        /// </summary>\n        [JsonPropertyName(\"attachments\")]\n        public TweetAttachments? Attachments { get; init; }\n\n        /// <summary>\n        /// Posting user's ID\n        /// </summary>\n        [JsonPropertyName(\"author_id\")]\n        public string? AuthorID { get; init; }\n\n        /// <summary>\n        /// Contextual metadata associated with tweet\n        /// </summary>\n        [JsonPropertyName(\"context_annotations\")]\n        public List<TweetContextAnnotation>? ContextAnnotations { get; init; }\n\n        /// <summary>\n        /// ID of conversation this tweet is part of (matches original tweet ID)\n        /// </summary>\n        [JsonPropertyName(\"conversation_id\")]\n        public string? ConversationID { get; init; }\n\n        /// <summary>\n        /// When tweeted\n        /// </summary>\n        [JsonPropertyName(\"created_at\")]\n        public DateTime? CreatedAt { get; init; }\n\n        /// <summary>\n        /// Extracted parts of the tweet, like hashtags, urls, etc.\n        /// </summary>\n        [JsonPropertyName(\"entities\")]\n        public TweetEntities? Entities { get; init; }\n\n        /// <summary>\n        /// Tweet location (if user provided)\n        /// </summary>\n        [JsonPropertyName(\"geo\")]\n        public TweetGeo? Geo { get; init; }\n\n        /// <summary>\n        /// ID of this tweet\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// If replying, this is the ID of the user being replied to\n        /// </summary>\n        [JsonPropertyName(\"in_reply_to_user_id\")]\n        public string? InReplyToUserID { get; init; }\n\n        /// <summary>\n        /// BCP47 Language tag - https://tools.ietf.org/html/bcp47\n        /// </summary>\n        [JsonPropertyName(\"lang\")]\n        public string? Language { get; init; }\n\n        // TODO: finish implementation - requires permissions to access\n        /// <summary>\n        /// Non-Public Metrics\n        /// </summary>\n        // TODO: finish implementation - requires permissions to access\n        [JsonPropertyName(\"non_public_metrics\")]\n        public object? NonPublicMetrics { get; init; }\n\n        /// <summary>\n        /// Organic Metrics\n        /// </summary>\n        // TODO: finish implementation - requires permissions to access\n        [JsonPropertyName(\"organic_metrics\")]\n        public object? OrganicMetrics { get; init; }\n\n        /// <summary>\n        /// Media or links might reveal sensitive information\n        /// </summary>\n        [JsonPropertyName(\"possibly_sensitive\")]\n        public bool? PossiblySensitive { get; init; }\n\n        /// <summary>\n        /// Promoted content metrics\n        /// </summary>\n        // TODO: finish implementation - requires permissions to access\n        [JsonPropertyName(\"promoted_metrics\")]\n        public object? PromotedMetrics { get; init; }\n\n        /// <summary>\n        /// Public metrics\n        /// </summary>\n        [JsonPropertyName(\"public_metrics\")]\n        public TweetPublicMetrics? PublicMetrics { get; init; }\n\n        /// <summary>\n        /// Any other tweets that this one refers to\n        /// </summary>\n        [JsonPropertyName(\"referenced_tweets\")]\n        public List<TweetReference>? ReferencedTweets { get; init; }\n\n        /// <summary>\n        /// Who can reply to tweet\n        /// </summary>\n        [JsonPropertyName(\"reply_settings\")]\n        public TweetReplySettings ReplySettings { get; set; }\n\n        /// <summary>\n        /// The application sending the tweet\n        /// </summary>\n        [JsonPropertyName(\"source\")]\n        public string? Source { get; init; }\n\n        /// <summary>\n        /// User's tweet text\n        /// </summary>\n        [JsonPropertyName(\"text\")]\n        public string? Text { get; init; }\n\n        /// <summary>\n        /// Information regarding a request to withhold information\n        /// </summary>\n        [JsonPropertyName(\"withheld\")]\n        public TwitterWithheld? Withheld { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetAttachments.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of attachment in a tweet\n    /// </summary>\n    public record TweetAttachments\n    {\n        /// <summary>\n        /// Poll IDs\n        /// </summary>\n        [JsonPropertyName(\"poll_ids\")]\n        public List<string>? PollIds { get; init; }\n\n        /// <summary>\n        /// Media Keys\n        /// </summary>\n        [JsonPropertyName(\"media_keys\")]\n        public List<string>? MediaKeys { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetContextAnnotation.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Tweet context annotation - a Domain/Entity pair\n    /// </summary>\n    public record TweetContextAnnotation\n    {\n        /// <summary>\n        /// Domain details\n        /// </summary>\n        [JsonPropertyName(\"domain\")]\n        public TweetContextAnnotationDetails? Domain { get; init; }\n        \n        /// <summary>\n        /// Entity details\n        /// </summary>\n        [JsonPropertyName(\"entity\")]\n        public TweetContextAnnotationDetails? Entity { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetContextAnnotationDetails.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Details for the Tweet context annotation domains and entities\n    /// </summary>\n    public record TweetContextAnnotationDetails\n    {\n        /// <summary>\n        /// Annotation ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// Annotation Name\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; init; }\n\n        /// <summary>\n        /// Annotation Description\n        /// </summary>\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetDeleteRequest.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class TweetDeleteRequest\n    {\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetDeleted.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetDeleted\n    {\n        [JsonPropertyName(\"deleted\")]\n        public bool Deleted { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetDeletedResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetDeletedResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public TweetDeleted? Data { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntities.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Entities associated with a tweet\n    /// </summary>\n    public record TweetEntities\n    {\n        /// <summary>\n        /// Annotation entities\n        /// </summary>\n        [JsonPropertyName(\"annotations\")]\n        public List<TweetEntityAnnotation>? Annotations { get; init; }\n\n        /// <summary>\n        /// Hashtag entities\n        /// </summary>\n        [JsonPropertyName(\"cashtags\")]\n        public List<TweetEntityCashtag>? Cashtags { get; init; }\n\n        /// <summary>\n        /// Hashtag entities\n        /// </summary>\n        [JsonPropertyName(\"hashtags\")]\n        public List<TweetEntityHashtag>? Hashtags { get; init; }\n\n        /// <summary>\n        /// Mention entities\n        /// </summary>\n        [JsonPropertyName(\"mentions\")]\n        public List<TweetEntityMention>? Mentions { get; init; }\n\n        /// <summary>\n        /// URL entities\n        /// </summary>\n        [JsonPropertyName(\"urls\")]\n        public List<TweetEntityUrl>? Urls { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntityAnnotation.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Represents an annotation entity\n    /// </summary>\n    public record TweetEntityAnnotation\n    {\n        /// <summary>\n        /// Start of annotation text\n        /// </summary>\n        [JsonPropertyName(\"start\")]\n        public int Start { get; init; }\n\n        /// <summary>\n        /// End of annotation text\n        /// </summary>\n        [JsonPropertyName(\"end\")]\n        public int End { get; init; }\n\n        /// <summary>\n        /// Probability that <see cref=\"NormalizedText\"/> belongs to <see cref=\"Type\"/> category\n        /// </summary>\n        [JsonPropertyName(\"probability\")]\n        public float Probability { get; init; }\n\n        /// <summary>\n        /// Category that <see cref=\"NormalizedText\"/> belongs to\n        /// </summary>\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; init; }\n\n        /// <summary>\n        /// Annotated text\n        /// </summary>\n        [JsonPropertyName(\"normalized_text\")]\n        public string? NormalizedText { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntityCashtag.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Represents a hashtag entity\n    /// </summary>\n    public record TweetEntityCashtag\n    {\n        /// <summary>\n        /// Start of hashtag\n        /// </summary>\n        [JsonPropertyName(\"start\")]\n        public int Start { get; init; }\n\n        /// <summary>\n        /// End of hashtag\n        /// </summary>\n        [JsonPropertyName(\"end\")]\n        public int End { get; init; }\n\n        /// <summary>\n        /// Hashtag text\n        /// </summary>\n        [JsonPropertyName(\"tag\")]\n        public string? Tag { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntityHashtag.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Represents a hashtag entity\n    /// </summary>\n    public record TweetEntityHashtag\n    {\n        /// <summary>\n        /// Start of hashtag\n        /// </summary>\n        [JsonPropertyName(\"start\")]\n        public int Start { get; init; }\n\n        /// <summary>\n        /// End of hashtag\n        /// </summary>\n        [JsonPropertyName(\"end\")]\n        public int End { get; init; }\n\n        /// <summary>\n        /// Hashtag text\n        /// </summary>\n        [JsonPropertyName(\"tag\")]\n        public string? Tag { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntityImage.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Tweet image details\n    /// </summary>\n    public record TweetEntityImage\n    {\n        /// <summary>\n        /// Image height\n        /// </summary>\n        [JsonPropertyName(\"height\")]\n        public int Height { get; init; }\n\n        /// <summary>\n        /// Url where you can find and download the image\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; init; }\n\n        /// <summary>\n        /// Image width\n        /// </summary>\n        [JsonPropertyName(\"width\")]\n        public int Width { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntityMention.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Represents a mention entity\n    /// </summary>\n    public record TweetEntityMention\n    {\n        /// <summary>\n        /// End of mention\n        /// </summary>\n        [JsonPropertyName(\"end\")]\n        public int End { get; init; }\n\n        /// <summary>\n        /// ID of mentioned user\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Start of mention\n        /// </summary>\n        [JsonPropertyName(\"start\")]\n        public int Start { get; init; }\n\n        /// <summary>\n        /// Mentioned username\n        /// </summary>\n        [JsonPropertyName(\"username\")]\n        public string? Username { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetEntityUrl.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Entity URL details\n    /// </summary>\n    public record TweetEntityUrl\n    {\n        /// <summary>\n        /// From Twitter Card description (in HTML header)\n        /// </summary>\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; init; }\n\n        /// <summary>\n        /// How URL appears in the tweet\n        /// </summary>\n        [JsonPropertyName(\"display_url\")]\n        public string? DisplayUrl { get; init; }\n\n        /// <summary>\n        /// Ending position of URL\n        /// </summary>\n        [JsonPropertyName(\"end\")]\n        public int End { get; init; }\n\n        /// <summary>\n        /// URL that user typed, may or may not be shortened URL\n        /// </summary>\n        [JsonPropertyName(\"expanded_url\")]\n        public string? ExpandedUrl { get; init; }\n\n        /// <summary>\n        /// Details on images (<see cref=\"TweetEntityImage\"/>) attached to tweet\n        /// </summary>\n        [JsonPropertyName(\"images\")]\n        public List<TweetEntityImage>? Images { get; init; }\n\n        /// <summary>\n        /// Starting position of URL\n        /// </summary>\n        [JsonPropertyName(\"start\")]\n        public int Start { get; init; }\n\n        /// <summary>\n        /// HTTP status from unwind\n        /// </summary>\n        [JsonPropertyName(\"status\")]\n        public int? Status { get; init; }\n\n        /// <summary>\n        /// From Twitter Card title (in HTML header)\n        /// </summary>\n        [JsonPropertyName(\"title\")]\n        public string? Title { get; init; }\n\n        /// <summary>\n        /// Final destination URL, after following intermediate shorteners (if any)\n        /// </summary>\n        [JsonPropertyName(\"unwound_url\")]\n        public string? UnwoundUrl { get; init; }\n\n        /// <summary>\n        /// Twitter's t.co URL\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetExcludes.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public class TweetExcludes\n    {\n        /// <summary>\n        /// Exclude replies and retweets\n        /// </summary>\n        public const string All = \"replies,retweets\";\n\n        /// <summary>\n        /// Exclude Replies\n        /// </summary>\n        public const string Replies = \"replies\";\n\n        /// <summary>\n        /// Exclude Retweets\n        /// </summary>\n        public const string Retweets = \"retweets\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetGeo.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Geographical location of tweet\n    /// </summary>\n    public record TweetGeo\n    {\n        /// <summary>\n        /// Place ID for location of tweet\n        /// </summary>\n        [JsonPropertyName(\"place_id\")]\n        public string? PlaceID { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetHidden.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetHidden\n    {\n        [JsonPropertyName(\"hidden\")]\n        public bool Hidden { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetHideResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetHideResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public TweetHidden? Data { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetMedia.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// For tweeting uploaded media\n    /// </summary>\n    public record TweetMedia\n    {\n        /// <summary>\n        /// IDs of uploaded media\n        /// </summary>\n        [JsonPropertyName(\"media_ids\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public IEnumerable<string>? MediaIds { get; set; }\n\n        /// <summary>\n        /// IDs of tagged users\n        /// </summary>\n        [JsonPropertyName(\"tagged_user_ids\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public IEnumerable<string>? TaggedUserIds { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetMediaType.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of Tweet Media\n    /// </summary>\n    public enum TweetMediaType\n    {\n        /// <summary>\n        /// Not set\n        /// </summary>\n        [JsonPropertyName(\"\")]\n        None,\n\n        /// <summary>\n        /// GIF Animation\n        /// </summary>\n        [JsonPropertyName(\"animated_gif\")]\n        AnimatedGif,\n\n        /// <summary>\n        /// Photo\n        /// </summary>\n        [JsonPropertyName(\"photo\")]\n        Photo,\n\n        /// <summary>\n        /// Video\n        /// </summary>\n        [JsonPropertyName(\"video\")]\n        Video\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetMediaTypeConverter.cs",
    "content": "﻿using System;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class TweetMediaTypeConverter : JsonConverter<TweetMediaType>\n    {\n        public override TweetMediaType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\n        {\n            return reader.GetString() switch\n            {\n                \"animated_gif\" => TweetMediaType.AnimatedGif,\n                \"photo\" => TweetMediaType.Photo,\n                \"video\" => TweetMediaType.Video,\n                _ => TweetMediaType.None\n            };\n        }\n\n        public override void Write(Utf8JsonWriter writer, TweetMediaType value, JsonSerializerOptions options)\n        {\n            writer.WriteStringValue(\n                value switch\n                {\n                    TweetMediaType.AnimatedGif => \"animated_gif\",\n                    TweetMediaType.Photo => \"photo\",\n                    TweetMediaType.Video => \"video\",\n                    _ => \"\"\n                });\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetMeta.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Metadata for tweet timeline queries\n    /// </summary>\n    public class TweetMeta\n    {\n        /// <summary>\n        /// First ID in the list\n        /// </summary>\n        [JsonPropertyName(\"newest_id\")]\n        public string? NewestID { get; set; }\n\n        /// <summary>\n        /// Token for next page events\n        /// </summary>\n        [JsonPropertyName(\"next_token\")]\n        public string? NextToken { get; set; }\n\n        /// <summary>\n        /// Last ID in the list\n        /// </summary>\n        [JsonPropertyName(\"oldest_id\")]\n        public string? OldestID { get; set; }\n\n        /// <summary>\n        /// Token for previous page results\n        /// </summary>\n        [JsonPropertyName(\"previous_token\")]\n        public string? PreviousToken { get; set; }\n\n        /// <summary>\n        /// Number of results returned\n        /// </summary>\n        [JsonPropertyName(\"result_count\")]\n        public int ResultCount { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetPoll.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Request data for Creating a Poll\n    /// </summary>\n    public record TweetPoll\n    {\n        /// <summary>\n        /// Poll options\n        /// </summary>\n        [JsonPropertyName(\"options\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public IEnumerable<string>? Options { get; init; }\n\n        /// <summary>\n        /// Number of minutes to run poll\n        /// </summary>\n        [JsonPropertyName(\"duration_minutes\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]\n        public int DurationMinutes { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetPublicMetrics.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Metrics available to the public\n    /// </summary>\n    public record TweetPublicMetrics\n    {\n        /// <summary>\n        /// Number of retweets\n        /// </summary>\n        [JsonPropertyName(\"retweet_count\")]\n        public int RetweetCount { get; init; }\n\n        /// <summary>\n        /// Number of replies\n        /// </summary>\n        [JsonPropertyName(\"reply_count\")]\n        public int ReplyCount { get; init; }\n\n        /// <summary>\n        /// Number of Likes\n        /// </summary>\n        [JsonPropertyName(\"like_count\")]\n        public int LikeCount { get; init; }\n\n        /// <summary>\n        /// Number of quotes\n        /// </summary>\n        [JsonPropertyName(\"quote_count\")]\n        public int QuoteCount { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetQuery.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TweetQuery\n    {\n        //\n        // Query input fields\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs - <see cref=\"TweetType\"/>\n        /// </summary>\n        public TweetType Type { get; init; }\n\n        /// <summary>\n        /// UTC date/time to search to\n        /// </summary>\n        public DateTime EndTime { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of tweet types to exclude\n        /// </summary>\n        public string? Exclude { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields\n        /// </summary>\n        public string? Expansions { get; init; }\n\n        /// <summary>\n        /// Up to 100 comma-separated IDs to search for\n        /// </summary>\n        public string? Ids { get; init; }\n\n        /// <summary>\n        /// User ID for timeline queries\n        /// </summary>\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// ID for list to get tweets from\n        /// </summary>\n        public string? ListID { get; init; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; init; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; init; }\n\n        /// <summary>\n        /// returns tweets later than this ID\n        /// </summary>\n        public string? SinceID { get; init; }\n\n        /// <summary>\n        /// Date to search from\n        /// </summary>\n        public DateTime StartTime { get; init; }\n\n        /// <summary>\n        /// ID of space to query for tweets\n        /// </summary>\n        public string? SpaceID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; init; }\n\n        /// <summary>\n        /// returns tweets earlier than this ID\n        /// </summary>\n        public string? UntilID { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; init; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<Tweet>? Tweets { get; init; }\n\n        /// <summary>\n        /// If any errors occur, they'll show up here\n        /// </summary>\n        [JsonPropertyName(\"errors\")]\n        public List<TwitterError>? Errors { get; init; }\n\n        /// <summary>\n        /// Were there errors?\n        /// </summary>\n        public bool HasErrors { get => Errors?.Any() ?? false; }\n\n        /// <summary>\n        /// Populated when query includes expansion fields\n        /// </summary>\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; init; }\n\n        /// <summary>\n        /// Metadata with count and paging details\n        /// </summary>\n        [JsonPropertyName(\"meta\")]\n        public TweetMeta? Meta { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetReference.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// References a tweet\n    /// </summary>\n    public record TweetReference\n    {\n        /// <summary>\n        /// What kind of reference. e.g. reply, quote, retweet etc.\n        /// </summary>\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; init; }\n\n        /// <summary>\n        /// ID of referenced tweet\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetReply.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Request data for replying to a tweet\n    /// </summary>\n    public record TweetReply\n    {\n        /// <summary>\n        /// ID of tweet being replied to\n        /// </summary>\n        [JsonPropertyName(\"in_reply_to_tweet_id\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public string? InReplyToTweetID { get; set; }\n\n        /// <summary>\n        /// IDs of users to remove from conversation\n        /// </summary>\n        [JsonPropertyName(\"exclude_reply_user_ids\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public IEnumerable<string>? ExcludeReplyUserIds { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetReplySettings.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Defines who can reply to a tweet\n    /// </summary>\n    public enum TweetReplySettings\n    {\n        /// <summary>\n        /// Not set\n        /// </summary>\n        [JsonPropertyName(\"\")]\n        None,\n\n        /// <summary>\n        /// Anyone can reply to this tweet\n        /// </summary>\n        [JsonPropertyName(\"everyone\")]\n        Everyone,\n\n        /// <summary>\n        /// Only the users mentioned in the tweet\n        /// </summary>\n        [JsonPropertyName(\"mentionedUsers\")]\n        MentionedUsers,\n\n        /// <summary>\n        /// Anyone following the user who tweeted\n        /// </summary>\n        [JsonPropertyName(\"following\")]\n        Following\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetReplySettingsConverter.cs",
    "content": "﻿using System;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class TweetReplySettingsConverter : JsonConverter<TweetReplySettings>\n    {\n        public override TweetReplySettings Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\n        {\n            return reader.GetString() switch\n            {\n                \"everyone\" => TweetReplySettings.Everyone,\n                \"following\" => TweetReplySettings.Following,\n                \"mentionedUsers\" => TweetReplySettings.MentionedUsers,\n                _ => TweetReplySettings.None\n            };\n        }\n\n        public override void Write(Utf8JsonWriter writer, TweetReplySettings value, JsonSerializerOptions options)\n        {\n            writer.WriteStringValue(\n                value switch\n                {\n                    TweetReplySettings.Everyone => \"everyone\",\n                    TweetReplySettings.Following => \"following\",\n                    TweetReplySettings.MentionedUsers => \"mentionedUsers\",\n                    _ => \"\"\n                });\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetRequest.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Request parameters for posting a tweet\n    /// </summary>\n    public record TweetRequest\n    {\n        /// <summary>\n        /// Deep link to a direct message, e.g. https://twitter.com/messages/compose?recipient_id=2244994945\n        /// </summary>\n        [JsonPropertyName(\"direct_message_deep_link\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public string? DirectMessageDeepLink { get; set; }\n\n        /// <summary>\n        /// Only super followers can see\n        /// </summary>\n        [JsonPropertyName(\"for_super_followers_only\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]\n        public bool ForSuperFollowersOnly { get; set; }\n\n        /// <summary>\n        /// Geographical location of tweet\n        /// </summary>\n        [JsonPropertyName(\"geo\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public TweetGeo? Geo { get; set; }\n\n        /// <summary>\n        /// For tweeting uploaded media\n        /// </summary>\n        [JsonPropertyName(\"media\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public TweetMedia? Media { get; set; }\n\n        /// <summary>\n        /// Create a new poll\n        /// </summary>\n        [JsonPropertyName(\"poll\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public TweetPoll? Poll { get; set; }\n\n        /// <summary>\n        /// ID of tweet being quoted/retweeted\n        /// </summary>\n        [JsonPropertyName(\"quote_tweet_id\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public string? QuoteTweetID { get; set; }\n\n        /// <summary>\n        /// Info for replying to a tweet\n        /// </summary>\n        [JsonPropertyName(\"reply\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public TweetReply? Reply { get; set; }\n\n        /// <summary>\n        /// Specify who can reply to a tweet\n        /// </summary>\n        [JsonPropertyName(\"reply_settings\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public TweetReplySettings? ReplySettings { get; set; }\n\n        /// <summary>\n        /// Tweet text\n        /// </summary>\n        [JsonPropertyName(\"text\")]\n        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]\n        public string? Text { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes <see cref=\"Tweet\"/> queries\n    /// </summary>\n    public class TweetRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of tweet\n        /// </summary>\n        public TweetType Type { get; set; }\n\n        /// <summary>\n        /// UTC date/time to search to\n        /// </summary>\n        public DateTime EndTime { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of tweet types to exclude\n        /// </summary>\n        public string? Exclude { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// Required - Up to 100 comma-separated IDs to search for\n        /// </summary>\n        public string? Ids { get; set; }\n\n        /// <summary>\n        /// User ID for timeline queries/Tweet ID for retweeted by\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// ID for list to get tweets from\n        /// </summary>\n        public string? ListID { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 10 - possible 100\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// returns tweets later than this ID\n        /// </summary>\n        public string? SinceID { get; set; }\n\n        /// <summary>\n        /// ID of space to query for tweets\n        /// </summary>\n        public string? SpaceID { get; set; }\n\n        /// <summary>\n        /// Date to search from\n        /// </summary>\n        public DateTime StartTime { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// returns tweets earlier than this ID\n        /// </summary>\n        public string? UntilID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<TweetQuery>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(EndTime),\n                       nameof(Exclude),\n                       nameof(Expansions),\n                       nameof(Ids),\n                       nameof(ID),\n                       nameof(ListID),\n                       nameof(MaxResults),\n                       nameof(MediaFields),\n                       nameof(PaginationToken),\n                       nameof(PlaceFields),\n                       nameof(PollFields),\n                       nameof(SinceID),\n                       nameof(SpaceID),\n                       nameof(StartTime),\n                       nameof(TweetFields),\n                       nameof(UntilID),\n                       nameof(UserFields)\n                   }) ;\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Type)))\n                Type = RequestProcessorHelper.ParseEnum<TweetType>(parameters[nameof(Type)]);\n            else\n                throw new ArgumentException($\"{nameof(Type)} is required\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<TweetType>(parameters[nameof(Type)]);\n\n            return Type switch\n            {\n                TweetType.Bookmarks => BuildBookmarkUrl(parameters),\n                TweetType.List => BuildListUrl(parameters),\n                TweetType.Lookup => BuildLookupUrl(parameters),\n                TweetType.MentionsTimeline => BuildMentionsTimelineUrl(parameters),\n                TweetType.QuoteTweets => BuildQuoteTweetsUrl(parameters),\n                TweetType.ReverseChronologicalTimeline => BuildReverseChronologicalTimelineUrl(parameters),\n                TweetType.SpaceTweets => BuildSpaceTweetsUrl(parameters),\n                TweetType.TweetsTimeline => BuildUserTimelineUrl(parameters),\n                _ => throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\"),\n            };\n        }\n\n        private Request BuildBookmarkUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ID), val => ID = val);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/bookmarks\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds URL to retrieve tweets from a list\n        /// </summary>\n        /// <param name=\"parameters\">Parameter List</param>\n        /// <returns>Base URL + lists request</returns>\n        Request BuildListUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ListID), val => ListID = val);\n\n            var req = new Request($\"{BaseUrl}lists/{ListID}/tweets\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Lookup URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"tweets\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Ids)))\n            {\n                Ids = parameters[nameof(Ids)];\n                urlParams.Add(new QueryParameter(\"ids\", Ids.Replace(\" \", \"\")));\n            }\n            else\n            {\n                throw new ArgumentException($\"{nameof(Ids)} is required\", nameof(Ids));\n            }\n\n            BuildUrlFieldParameters(parameters, req);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Mentions timeline URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildMentionsTimelineUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/mentions\");\n\n            BuildTimelineParameters(parameters, req);\n\n            return req;\n        }\n\n\n        Request BuildReverseChronologicalTimeline(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/timelines/reverse_chronological\");\n\n            BuildTimelineParameters(parameters, req);\n\n            return req;\n        }\n\n        Request BuildReverseChronologicalTimelineUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/timelines/reverse_chronological\");\n\n            BuildTimelineParameters(parameters, req);\n\n            return req;\n        }\n\n        Request BuildQuoteTweetsUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}tweets/{ID}/quote_tweets\");\n\n            BuildTimelineParameters(parameters, req);\n\n            return req;\n        }\n\n        /// <summary>\n        /// User timeline URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildUserTimelineUrl(Dictionary<string, string> parameters)\n        {\n            SetUserID(parameters);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/tweets\");\n\n            BuildTimelineParameters(parameters, req);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Used by timeline queries - sets parameter, but doesn't treat as a query parameter.\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters</param>\n        void SetUserID(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(ID)))\n                ID = parameters[nameof(ID)];\n            else\n                throw new ArgumentException($\"{nameof(ID)} is required\", nameof(ID));\n        }\n\n        /// <summary>\n        /// builds parameters common to timeline queries\n        /// </summary>\n        /// <param name=\"parameters\">parameters to process</param>\n        /// <param name=\"req\"><see cref=\"Request\"/> object</param>\n        void BuildTimelineParameters(Dictionary<string, string> parameters, Request req)\n        {\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(EndTime)))\n            {\n                EndTime = DateTime.Parse(parameters[nameof(EndTime)]);\n                urlParams.Add(new QueryParameter(\"end_time\", EndTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Exclude)))\n            {\n                Exclude = parameters[nameof(Exclude)];\n                urlParams.Add(new QueryParameter(\"exclude\", Exclude.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                MaxResults = int.Parse(parameters[nameof(MaxResults)]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString()));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(SinceID)))\n            {\n                SinceID = parameters[nameof(SinceID)];\n                urlParams.Add(new QueryParameter(\"since_id\", SinceID));\n            }\n\n            if (parameters.ContainsKey(nameof(StartTime)))\n            {\n                StartTime = DateTime.Parse(parameters[nameof(StartTime)]);\n                urlParams.Add(new QueryParameter(\"start_time\", StartTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(UntilID)))\n            {\n                UntilID = parameters[nameof(UntilID)];\n                urlParams.Add(new QueryParameter(\"until_id\", UntilID));\n            }\n\n            BuildUrlFieldParameters(parameters, req);\n        }\n\n        /// <summary>\n        /// appends parameters for expansions and fields\n        /// </summary>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"req\"><see cref=\"Request\"/>  object</param>\n        void BuildUrlFieldParameters(Dictionary<string, string> parameters, Request req)\n        {\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n        }\n\n        Request BuildSpaceTweetsUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(SpaceID), val => SpaceID = val);\n\n            var req = new Request($\"{BaseUrl}spaces/{SpaceID}/tweets\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of Tweets\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Tweets</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<TweetQuery> tweet;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                tweet = new List<TweetQuery> { new TweetQuery() };\n            }\n            else\n            {\n                var tweetResult = JsonDeserialize(responseJson);\n                tweet = new List<TweetQuery> { tweetResult };\n            }\n\n            return tweet.OfType<T>().ToList();\n        }\n\n        TweetQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter()\n                }\n            };\n            TweetQuery? tweet = JsonSerializer.Deserialize<TweetQuery>(responseJson, options);\n\n            if (tweet == null)\n                return new TweetQuery\n                {\n                    Type = Type,\n                    EndTime = EndTime,\n                    Exclude = Exclude,\n                    Expansions = Expansions,\n                    ID = ID,\n                    Ids = Ids,\n                    ListID = ListID,\n                    MaxResults = MaxResults,\n                    MediaFields = MediaFields,\n                    PaginationToken = PaginationToken,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    SinceID = SinceID,\n                    SpaceID = SpaceID,\n                    StartTime = StartTime,\n                    TweetFields = TweetFields,\n                    UntilID = UntilID,\n                    UserFields = UserFields\n                };\n            else\n                return tweet with\n                {\n                    Type = Type,\n                    EndTime = EndTime,\n                    Exclude = Exclude,\n                    Expansions = Expansions,\n                    ID = ID,\n                    Ids = Ids,\n                    ListID = ListID,\n                    MaxResults = MaxResults,\n                    MediaFields = MediaFields,\n                    PaginationToken = PaginationToken,\n                    PlaceFields = PlaceFields,\n                    PollFields = PollFields,\n                    SinceID = SinceID,\n                    SpaceID = SpaceID,\n                    StartTime = StartTime,\n                    TweetFields = TweetFields,\n                    UntilID = UntilID,\n                    UserFields = UserFields\n                };\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public class TweetResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public Tweet? Tweet { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TweetType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum TweetType\n    {\n        /// <summary>\n        /// Get bookmarked tweets\n        /// </summary>\n        Bookmarks,\n\n        /// <summary>\n        /// Get tweets from a list\n        /// </summary>\n        List,\n\n        /// <summary>\n        /// Lookup one or more tweets\n        /// </summary>\n        Lookup,\n\n        /// <summary>\n        /// Get the mentions timeline\n        /// </summary>\n        MentionsTimeline,\n\n        /// <summary>\n        /// Get quotes of a specific tweet\n        /// </summary>\n        QuoteTweets,\n\n        /// <summary>\n        /// Most recent tweets and retweets of authenticated user and user follows\n        /// </summary>\n        ReverseChronologicalTimeline,\n\n        /// <summary>\n        /// Get the tweets timeline\n        /// </summary>\n        TweetsTimeline,\n\n        /// <summary>\n        /// Tweets that people shared in a space\n        /// </summary>\n        SpaceTweets\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/Tweet/TwitterContextTweetCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Posts a new tweet\n        /// </summary>\n        /// <param name=\"text\">Tweet text</param>\n        /// <param name=\"directMessageLink\">Link to a DM</param>\n        /// <param name=\"forSuperFollowersOnly\">Only show to super followers</param>\n        /// <param name=\"geo\">Tweet location - <see cref=\"TweetGeo\"/></param>\n        /// <param name=\"quoteTweetID\">ID of tweet to quote (quoted retweet)</param>\n        /// <param name=\"replySettings\">Who can reply - <see cref=\"TweetReplySettings\"/></param>\n        /// <param name=\"cancelToken\"></param>\n        /// <returns>Tweet with new ID and Text - <see cref=\"Tweet\"/></returns>\n        /// <exception cref=\"ArgumentNullException\"></exception>\n        public async Task<Tweet?> TweetAsync(\n            string text, \n            Uri? directMessageLink = null, \n            bool forSuperFollowersOnly = false, \n            TweetGeo? geo = null,\n            string? quoteTweetID = null,\n            TweetReplySettings? replySettings = null,\n            CancellationToken cancelToken = default)\n        {\n            _ = text ?? throw new ArgumentNullException(nameof(text));\n\n            string url = $\"{BaseUrl2}tweets\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TweetRequest\n            {\n                Text = text,\n                DirectMessageDeepLink = directMessageLink?.AbsoluteUri,\n                ForSuperFollowersOnly = forSuperFollowersOnly,\n                Geo = geo,\n                QuoteTweetID = quoteTweetID,\n                ReplySettings = replySettings,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TweetResponse? response = JsonSerializer.Deserialize<TweetResponse>(RawResult);\n            return response?.Tweet;\n        }\n\n        /// <summary>\n        /// Posts a tweet with image or video media\n        /// </summary>\n        /// <param name=\"text\">Tweet text</param>\n        /// <param name=\"mediaIds\">List of IDs for media that were previously uploaded</param>\n        /// <param name=\"taggedUserIds\">List of user Ids to tag in tweet</param>\n        /// <param name=\"directMessageLink\">Link to a DM</param>\n        /// <param name=\"forSuperFollowersOnly\">Only show to super followers</param>\n        /// <param name=\"geo\">Tweet location - <see cref=\"TweetGeo\"/></param>\n        /// <param name=\"quoteTweetID\">ID of tweet to quote (quoted retweet)</param>\n        /// <param name=\"replySettings\">Who can reply - <see cref=\"TweetReplySettings\"/></param>\n        /// <param name=\"cancelToken\"></param>\n        /// <returns>Tweet with new ID and Text - <see cref=\"Tweet\"/></returns>\n        /// <exception cref=\"ArgumentNullException\"></exception>\n        public async Task<Tweet?> TweetMediaAsync(\n            string text,\n            IEnumerable<string> mediaIds,\n            IEnumerable<string>? taggedUserIds = null,\n            Uri? directMessageLink = null,\n            bool forSuperFollowersOnly = false,\n            TweetGeo? geo = null,\n            string? quoteTweetID = null,\n            TweetReplySettings? replySettings = null,\n            CancellationToken cancelToken = default)\n        {\n            _ = text ?? throw new ArgumentNullException(nameof(text));\n            _ = mediaIds ?? throw new ArgumentNullException(nameof(mediaIds));\n\n            string url = $\"{BaseUrl2}tweets\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TweetRequest\n            {\n                Text = text,\n                DirectMessageDeepLink = directMessageLink?.AbsoluteUri,\n                ForSuperFollowersOnly = forSuperFollowersOnly,\n                Geo = geo,\n                Media = new TweetMedia\n                {\n                    MediaIds = mediaIds,\n                    TaggedUserIds = taggedUserIds,\n                },\n                QuoteTweetID = quoteTweetID,\n                ReplySettings = replySettings,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TweetResponse? response = JsonSerializer.Deserialize<TweetResponse>(RawResult);\n            return response?.Tweet;\n        }\n\n        /// <summary>\n        /// Posts a tweet with a poll\n        /// </summary>\n        /// <param name=\"text\">Tweet text</param>\n        /// <param name=\"duration\">Number of minutes to run poll</param>\n        /// <param name=\"options\">List of voting options</param>\n        /// <param name=\"directMessageLink\">Link to a DM</param>\n        /// <param name=\"forSuperFollowersOnly\">Only show to super followers</param>\n        /// <param name=\"geo\">Tweet location - <see cref=\"TweetGeo\"/></param>\n        /// <param name=\"quoteTweetID\">ID of tweet to quote (quoted retweet)</param>\n        /// <param name=\"replySettings\">Who can reply - <see cref=\"TweetReplySettings\"/></param>\n        /// <param name=\"cancelToken\"></param>\n        /// <returns>Tweet with new ID and Text - <see cref=\"Tweet\"/></returns>\n        /// <exception cref=\"ArgumentNullException\"></exception>\n        public async Task<Tweet?> TweetPollAsync(\n            string text,\n            int duration,\n            IEnumerable<string>? options = null,\n            Uri? directMessageLink = null,\n            bool forSuperFollowersOnly = false,\n            TweetGeo? geo = null,\n            string? quoteTweetID = null,\n            TweetReplySettings? replySettings = null,\n            CancellationToken cancelToken = default)\n        {\n            _ = text ?? throw new ArgumentNullException(nameof(text));\n            if (duration == 0) throw new ArgumentNullException(nameof(duration));\n            _ = options ?? throw new ArgumentNullException(nameof(options));\n\n            string url = $\"{BaseUrl2}tweets\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TweetRequest\n            {\n                Text = text,\n                DirectMessageDeepLink = directMessageLink?.AbsoluteUri,\n                ForSuperFollowersOnly = forSuperFollowersOnly,\n                Geo = geo,\n                Poll = new TweetPoll\n                {\n                    DurationMinutes = duration,\n                    Options = options\n                },\n                QuoteTweetID = quoteTweetID,\n                ReplySettings = replySettings,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TweetResponse? response = JsonSerializer.Deserialize<TweetResponse>(RawResult);\n            return response?.Tweet;\n        }\n\n        /// <summary>\n        /// Posts a new tweet\n        /// </summary>\n        /// <param name=\"text\">Tweet text</param>\n        /// <param name=\"replyTweetID\">ID of tweet to reply to</param>\n        /// <param name=\"excludeUserIds\">List of Ids for users you don't want to reply to</param>\n        /// <param name=\"directMessageLink\">Link to a DM</param>\n        /// <param name=\"forSuperFollowersOnly\">Only show to super followers</param>\n        /// <param name=\"geo\">Tweet location - <see cref=\"TweetGeo\"/></param>\n        /// <param name=\"quoteTweetID\">ID of tweet to quote (quoted retweet)</param>\n        /// <param name=\"replySettings\">Who can reply - <see cref=\"TweetReplySettings\"/></param>\n        /// <param name=\"cancelToken\"></param>\n        /// <returns>Tweet with new ID and Text - <see cref=\"Tweet\"/></returns>\n        /// <exception cref=\"ArgumentNullException\"></exception>\n        public async Task<Tweet?> ReplyAsync(\n            string text,\n            string replyTweetID,\n            IEnumerable<string>? excludeUserIds = null,\n            Uri? directMessageLink = null,\n            bool forSuperFollowersOnly = false,\n            TweetGeo? geo = null,\n            string? quoteTweetID = null,\n            TweetReplySettings? replySettings = null,\n            CancellationToken cancelToken = default)\n        {\n            _ = text ?? throw new ArgumentNullException(nameof(text));\n            _ = replyTweetID ?? throw new ArgumentNullException(nameof(replyTweetID));\n\n            string url = $\"{BaseUrl2}tweets\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TweetRequest\n            {\n                Text = text,\n                DirectMessageDeepLink = directMessageLink?.AbsoluteUri,\n                ForSuperFollowersOnly = forSuperFollowersOnly,\n                Geo = geo,\n                QuoteTweetID = quoteTweetID,\n                Reply = new TweetReply\n                {\n                    ExcludeReplyUserIds = excludeUserIds,\n                    InReplyToTweetID = replyTweetID,\n                },\n                ReplySettings = replySettings,\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TweetResponse? response = JsonSerializer.Deserialize<TweetResponse>(RawResult);\n            return response?.Tweet;\n        }\n\n        /// <summary>\n        /// Deletes a tweet\n        /// </summary>\n        /// <param name=\"tweetID\">ID of the tweet to delete</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <returns>Deleted status - true if delete succeeds</returns>\n        public async Task<TweetDeletedResponse?> DeleteTweetAsync(string tweetID, CancellationToken cancelToken = default)\n        {\n            _ = tweetID ?? throw new ArgumentNullException(nameof(tweetID), $\"{nameof(tweetID)} is required.\");\n\n            string url = $\"{BaseUrl2}tweets/{tweetID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TweetDeleteRequest() { ID = tweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TweetDeletedResponse? result = JsonSerializer.Deserialize<TweetDeletedResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Hides a reply to a tweet\n        /// </summary>\n        /// <param name=\"tweetID\">ID of the replying tweet</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <exception cref=\"TwitterQueryException\">Will receive 403 Forbidden if <see cref=\"tweetID\"/> is for a tweet that is not a reply</exception>\n        /// <returns>Hidden status of reply - true if reply is hidden</returns>\n        public async Task<TweetHideResponse?> HideReplyAsync(string tweetID, CancellationToken cancelToken = default)\n        {\n            return await HideReplyAsync(tweetID, true, cancelToken);\n        }\n\n        /// <summary>\n        /// Hides a reply to a tweet\n        /// </summary>\n        /// <param name=\"tweetID\">ID of the replying tweet</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <exception cref=\"TwitterQueryException\">Will receive 403 Forbidden if <see cref=\"tweetID\"/> is for a tweet that is not a reply</exception>\n        /// <returns>Hidden status of reply - false if reply is no longer hidden</returns>\n        public async Task<TweetHideResponse?> UnhideReplyAsync(string tweetID, CancellationToken cancelToken = default)\n        {\n            return await HideReplyAsync(tweetID, false, cancelToken);\n        }\n\n        /// <summary>\n        /// Hides/unhides a reply to a tweet\n        /// </summary>\n        /// <param name=\"tweetID\">ID of the replying tweet</param>\n        /// <param name=\"shouldHide\">true to hide/false to unhide</param>\n        /// <param name=\"cancelToken\">Optional cancellation token</param>\n        /// <exception cref=\"TwitterQueryException\">Will receive 403 Forbidden if ID is for a tweet that is not a reply</exception>\n        /// <returns>Hidden status of reply - false if reply is no longer hidden</returns>\n        async Task<TweetHideResponse?> HideReplyAsync(string tweetID, bool shouldHide, CancellationToken cancelToken)\n        {\n            _ = tweetID ?? throw new ArgumentNullException(nameof(tweetID), $\"{nameof(tweetID)} is required.\");\n\n            string url = $\"{BaseUrl2}tweets/{tweetID}/hidden\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TweetHidden() { Hidden = shouldHide };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TweetHideResponse? result = JsonSerializer.Deserialize<TweetHideResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/TwitterContext.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Net;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\n\n[assembly: InternalsVisibleTo(\n    \"LinqToTwitter.Tests, PublicKey=\" +\n    \"002400000480000094000000060200000024000052534131000400000100010079457c3d341758\" +\n    \"22b3b56803d473d9491f0d2e000550adfd7064db02fd65b91e2a5018c32cc754b1cea1f1219ad2\" +\n    \"e76dda7b2a5dc7e3748159852251b72331f40e51934cb153108c3f39dd3b053f321fc12cf4d10f\" +\n    \"8f7b45aa9f96c81c63047ea53c9c5c4b5c2d251fdce0821b37d24bf51a2fa6d543668af24c1dc5\" +\n    \"69081096\")]\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// manages access to Twitter API\n    /// </summary>\n    public partial class TwitterContext : IDisposable\n    {\n        //\n        // header constants\n        //\n\n        internal const string XRateLimitLimitKey = \"x-rate-limit-limit\";\n        internal const string XRateLimitRemainingKey = \"x-rate-limit-remaining\";\n        internal const string XRateLimitResetKey = \"x-rate-limit-reset\";\n        internal const string RetryAfterKey = \"Retry-After\";\n        internal const string XMediaRateLimitLimitKey = \"x-mediaratelimit-limit\";\n        internal const string XMediaRateLimitRemainingKey = \"x-mediaratelimit-remaining\";\n        internal const string XMediaRateLimitResetKey = \"x-mediaratelimit-reset\";\n        internal const string DateKey = \"Date\";\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"authorizer\">The authorizer.</param>\n        public TwitterContext(IAuthorizer authorizer)\n            : this(new TwitterExecute(authorizer))\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TwitterContext\"/> class.\n        /// </summary>\n        /// <param name=\"execute\">The <see cref=\"ITwitterExecute\"/> object to use.</param>\n        public TwitterContext(ITwitterExecute execute)\n        {\n            TwitterExecutor = execute ?? throw new ArgumentNullException(nameof(execute), $\"{nameof(TwitterExecutor)} is required.\");\n\n            if (string.IsNullOrWhiteSpace(UserAgent))\n                UserAgent = L2TKeys.DefaultUserAgent;\n\n            BaseUrl = \"https://api.twitter.com/1.1/\";\n            BaseUrl2 = \"https://api.twitter.com/2/\";\n            StreamingUrl = \"https://stream.twitter.com/1.1/\";\n            UploadUrl = \"https://upload.twitter.com/1.1/\";\n        }\n\n        /// <summary>\n        /// base URL for accessing Twitter API v1.1\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing Twitter API v2\n        /// </summary>\n        public string? BaseUrl2 { get; set; }\n\n        /// <summary>\n        /// base URL for uploading media\n        /// </summary>\n        public string? UploadUrl { get; set; }\n\n        /// <summary>\n        /// base URL for accessing streaming APIs\n        /// </summary>\n        public string? StreamingUrl { get; set; }\n\n        /// <summary>\n        /// Assign the Log to the context\n        /// </summary>\n        public TextWriter? Log\n        {\n            get { return TwitterExecute.Log; }\n            set { TwitterExecute.Log = value; }\n        }\n\n        /// <summary>\n        /// This contains the JSON string from the Twitter response to the most recent query.\n        /// </summary>\n        public string? RawResult { get; set; }\n\n        /// <summary>\n        /// By default, LINQ to Twitter populates RawResult on TwitterContext and JsonContent on entities. \n        /// Setting this to true turn this off so that RawResult and JsonContent are not populated.\n        /// </summary>\n        public bool ExcludeRawJson { get; set; }\n\n        //\n        // The routines in this region delegate to TwitterExecute\n        // which contains the methods for communicating with Twitter.\n        // This is necessary so we can make the side-effect methods\n        // more testable, using IoC.\n        //\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public string? UserAgent\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                    return TwitterExecutor.UserAgent;\n                else\n                    return string.Empty;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                    TwitterExecutor.UserAgent = value;\n                if (Authorizer != null)\n                    Authorizer.UserAgent = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the read write timeout.\n        /// </summary>\n        /// <value>The read write timeout.</value>\n        public int ReadWriteTimeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                    return TwitterExecutor.ReadWriteTimeout;\n                return TwitterExecute.DefaultReadWriteTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                    TwitterExecutor.ReadWriteTimeout = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets and sets HTTP UserAgent header\n        /// </summary>\n        public int Timeout\n        {\n            get\n            {\n                if (TwitterExecutor != null)\n                    return TwitterExecutor.Timeout;\n                return TwitterExecute.DefaultTimeout;\n            }\n            set\n            {\n                if (TwitterExecutor != null)\n                    TwitterExecutor.Timeout = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the authorized client on the <see cref=\"ITwitterExecute\"/> object.\n        /// </summary>\n        public IAuthorizer? Authorizer\n        {\n            get { return TwitterExecutor?.Authorizer; }\n            set \n            { \n                if (TwitterExecutor != null)\n                    TwitterExecutor.Authorizer = value; \n            }\n        }\n\n#if !WINDOWS_UWP\n        /// <summary>\n        /// Allows setting the IWebProxy for all HTTP requests.\n        /// </summary>\n        public IWebProxy? Proxy\n        {\n            get { return Authorizer?.Proxy; }\n            set \n            { \n                if (Authorizer != null) \n                    Authorizer.Proxy = value; \n            }\n        }\n#endif\n\n        /// <summary>\n        /// Gets the most recent URL executed.\n        /// </summary>\n        /// <remarks>\n        /// Supports debugging.\n        /// </remarks>\n        public Uri? LastUrl\n        {\n            get { return TwitterExecutor?.LastUrl; }\n        }\n        \n        /// <summary>\n        /// Methods for communicating with Twitter.\n        /// </summary>\n        internal ITwitterExecute TwitterExecutor { get; set; }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to an int\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>int value from response</returns>\n        private int GetResponseHeaderAsInt(string responseHeader)\n        {\n            int headerVal = -1;\n            IDictionary<string, string>? headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                string headerValAsString = headers[responseHeader];\n\n                _ = int.TryParse(headerValAsString, out headerVal);\n            }\n\n            return headerVal;\n        }\n\n        /// <summary>\n        /// retrieves a specified response header, converting it to a DateTime\n        /// </summary>\n        /// <param name=\"responseHeader\">Response header to retrieve.</param>\n        /// <returns>DateTime value from response</returns>\n        /// <remarks>Expects a string like: Sat, 26 Feb 2011 01:12:08 GMT</remarks>\n        private DateTime? GetResponseHeaderAsDateTime(string responseHeader)\n        {\n            DateTime? headerVal = null;\n            IDictionary<string, string>? headers = ResponseHeaders;\n\n            if (headers != null &&\n                headers.ContainsKey(responseHeader))\n            {\n                string headerValAsString = headers[responseHeader];\n\n                if (DateTime.TryParse(headerValAsString,\n                                        CultureInfo.InvariantCulture,\n                                        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,\n                                        out DateTime value))\n                    headerVal = value;\n            }\n\n            return headerVal;\n        }\n        \n        /// <summary>\n        /// Response headers from Twitter Queries\n        /// </summary>\n        public IDictionary<string, string>? ResponseHeaders\n        {\n            get\n            {\n                return TwitterExecutor?.ResponseHeaders;\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per minute\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent query\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't performed a query yet\n        /// </remarks>\n        public int RateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// returned by the most recent search query \n        /// that fails with an HTTP 503\n        /// </summary>\n        /// <remarks>\n        /// Returns -1 if information isn't available,\n        /// i.e. you haven't exceeded search rate yet\n        /// </remarks>\n        public int RetryAfter\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(RetryAfterKey);\n            }\n        }\n\n        /// <summary>\n        /// Max number of requests per window for\n        /// TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitCurrent\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitLimitKey);\n            }\n        }\n\n        /// <summary>\n        /// Number of requests available until reset\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitRemaining\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitRemainingKey);\n            }\n        }\n\n        /// <summary>\n        /// UTC time in ticks until rate limit resets\n        /// for TweetWithMediaAsync and ReplyWithMediaAsync.\n        /// </summary>\n        public int MediaRateLimitReset\n        {\n            get\n            {\n                return GetResponseHeaderAsInt(XMediaRateLimitResetKey);\n            }\n        }\n\n        /// <summary>\n        /// Gets the response header Date and converts to a nullable-DateTime\n        /// </summary>\n        /// <remarks>\n        /// Returns null if the headers don't contain a valid Date value\n        /// i.e. you haven't performed a query yet or not convertable\n        /// </remarks>\n        public DateTime? TwitterDate\n        {\n            get\n            {\n                return GetResponseHeaderAsDateTime(DateKey);\n            }\n        }\n\n        /// <summary>\n        /// Called by QueryProvider to execute queries\n        /// </summary>\n        /// <param name=\"expression\">ExpressionTree to parse</param>\n        /// <param name=\"isEnumerable\">Indicates whether expression is enumerable</param>\n        /// <returns>list of objects with query results</returns>\n        public virtual async Task<object> ExecuteAsync<T>(Expression expression, bool isEnumerable)\n            where T: class\n        {\n            // request processor is specific to request type (i.e. Status, User, etc.)\n            IRequestProcessor<T> reqProc = CreateRequestProcessor<T>(expression);\n\n            // get input parameters that go on the REST query URL\n            Dictionary<string, string> parameters = GetRequestParameters(expression, reqProc);\n\n            // construct REST endpoint, based on input parameters\n            Request request = reqProc.BuildUrl(parameters);\n\n            string results;\n\n             //process request through Twitter\n            if (request.IsStreaming)\n                results = await TwitterExecutor.QueryTwitterStreamAsync(request).ConfigureAwait(false);\n            else\n                results = await TwitterExecutor.QueryTwitterAsync(request, reqProc).ConfigureAwait(false);\n\n            if (!ExcludeRawJson)\n                RawResult = results;\n\n            // Transform results into objects\n            List<T> queryableList = reqProc.ProcessResults(results);\n\n            // Copy the IEnumerable entities to an IQueryable.\n            IQueryable<T> queryableItems = queryableList.AsQueryable();\n\n            // Copy the expression tree that was passed in, changing only the first\n            // argument of the innermost MethodCallExpression.\n            // -- Transforms IQueryable<T> into List<T>, which is (IEnumerable<T>)\n            var treeCopier = new ExpressionTreeModifier<T>(queryableItems);\n            Expression newExpressionTree = treeCopier.CopyAndModify(expression);\n\n            // This step creates an IQueryable that executes by replacing Queryable methods with Enumerable methods.\n            if (isEnumerable)\n                return queryableItems.Provider.CreateQuery(newExpressionTree);\n\n            return queryableItems.Provider.Execute<object>(newExpressionTree);\n        }\n\n        /// <summary>\n        /// Search the where clause for query parameters\n        /// </summary>\n        /// <param name=\"expression\">Input query expression tree</param>\n        /// <param name=\"reqProc\">Processor specific to this request type</param>\n        /// <returns>Name/value pairs of query parameters</returns>\n        static Dictionary<string, string> GetRequestParameters<T>(Expression expression, IRequestProcessor<T> reqProc)\n        {\n            var parameters = new Dictionary<string, string>();\n\n            // GHK FIX: Handle all wheres\n            MethodCallExpression[] whereExpressions = new WhereClauseFinder().GetAllWheres(expression);\n            foreach (var whereExpression in whereExpressions)\n            {\n                var lambdaExpression = (LambdaExpression)((UnaryExpression)(whereExpression.Arguments[1])).Operand;\n\n                // translate variable references in expression into constants\n                lambdaExpression = (LambdaExpression)Evaluator.PartialEval(lambdaExpression);\n\n                Dictionary<string, string> newParameters = reqProc.GetParameters(lambdaExpression);\n                foreach (var newParameter in newParameters)\n                {\n                    if (!parameters.ContainsKey(newParameter.Key))\n                        parameters.Add(newParameter.Key, newParameter.Value);\n                }\n            }\n\n            return parameters;\n        }\n\n        protected internal virtual IRequestProcessor<T> CreateRequestProcessor<T>()\n            where T : class\n        {\n            string requestType = typeof(T).Name;\n\n            return CreateRequestProcessor<T>(requestType);\n        }\n\n        /// <summary>\n        /// TestMethodory method for returning a request processor\n        /// </summary>\n        /// <typeparam name=\"T\">type of request</typeparam>\n        /// <returns>request processor matching type parameter</returns>\n        internal IRequestProcessor<T> CreateRequestProcessor<T>(Expression expression)\n            where T: class\n        {\n            _ = expression ?? throw new ArgumentNullException(nameof(expression), \"Expression passed to CreateRequestProcessor must not be null.\");\n\n            Type? genericType = new MethodCallExpressionTypeFinder().GetGenericType(expression);\n\n            _ = genericType ?? throw new ArgumentNullException(nameof(expression), \"Generic type of Expression passed to CreateRequestProcessor must not be null.\");\n\n            return CreateRequestProcessor<T>(genericType.Name);\n        }\n\n        protected internal IRequestProcessor<T> CreateRequestProcessor<T>(string requestType)\n            where T : class\n        {\n            string? baseUrl = BaseUrl;\n            IRequestProcessor<T> req;\n\n            switch (requestType)\n            {\n                case nameof(Account):\n                    req = new AccountRequestProcessor<T>();\n                    break;\n                case nameof(AccountActivity):\n                    req = new AccountActivityRequestProcessor<T>();\n                    break;\n                case nameof(Blocks):\n                    req = new BlocksRequestProcessor<T>()\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(ComplianceQuery):\n                    req = new ComplianceRequestProcessor<T>()\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(Counts):\n                    req = new CountsRequestProcessor<T>()\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(DirectMessageEvents):\n                    req = new DirectMessageEventsRequestProcessor<T>();\n                    break;\n                case nameof(Favorites):\n                    req = new FavoritesRequestProcessor<T>();\n                    break;\n                case nameof(Friendship):\n                    req = new FriendshipRequestProcessor<T>();\n                    break;\n                case nameof(Geo):\n                    req = new GeoRequestProcessor<T>();\n                    break;\n                case nameof(Help):\n                    req = new HelpRequestProcessor<T>();\n                    break;\n                case nameof(LikeQuery):\n                    req = new LikeRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(ListQuery):\n                    req = new ListRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(Media):\n                    req = new MediaRequestProcessor<T>\n                    {\n                        UploadUrl = UploadUrl\n                    };\n                    break;\n                case nameof(Mute):\n                    req = new MuteRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(Raw):\n                    req = new RawRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(SavedSearch):\n                    req = new SavedSearchRequestProcessor<T>();\n                    break;\n                case nameof(Search):\n                    req = new SearchRequestProcessor<T>();\n                    break;\n                case nameof(TwitterSearch):\n                    req = new TwitterSearchRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(SpacesQuery):\n                    req = new SpacesRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(Status):\n                    req = new StatusRequestProcessor<T>();\n                    break;\n                case nameof(Streaming):\n                    baseUrl = StreamingUrl;\n                    req = new StreamingRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2,\n                        TwitterExecutor = TwitterExecutor\n                    };\n                    break;\n                case nameof(Trend):\n                    req = new TrendRequestProcessor<T>();\n                    break;\n                case nameof(TweetQuery):\n                    req = new TweetRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(TwitterBlocksQuery):\n                    req = new TwitterBlocksRequestProcessor<T> \n                    { \n                        BaseUrl = BaseUrl2 \n                    };\n                    break;\n                case nameof(TwitterUserQuery):\n                    req = new TwitterUserRequestProcessor<T>\n                    {\n                        BaseUrl = BaseUrl2\n                    };\n                    break;\n                case nameof(User):\n                    req = new UserRequestProcessor<T>();\n                    break;\n                case nameof(WelcomeMessage):\n                    req = new WelcomeMessageRequestProcessor<T>();\n                    break;\n                default:\n                    throw new ArgumentException($\"Type, {requestType} isn't a supported LINQ to Twitter entity.\", nameof(requestType));\n            }\n\n            if (req.BaseUrl == null)\n                req.BaseUrl = baseUrl;\n\n            return req;\n        }\n\n        /// <summary>\n        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n        /// </summary>\n        public void Dispose()\n        {\n            Dispose(true);\n            GC.SuppressFinalize(this);\n        }\n\n        /// <summary>\n        /// Releases unmanaged and - optionally - managed resources\n        /// </summary>\n        /// <param name=\"disposing\"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>\n        protected virtual void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (TwitterExecutor is IDisposable disposableExecutor)\n                {\n                    disposableExecutor.Dispose();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/TwitterContextEntities.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// enables access to Twitter account information, such as Verify Credentials and Rate Limit Status\n        /// </summary>\n        public TwitterQueryable<Account> Account\n        {\n            get\n            {\n                return new TwitterQueryable<Account>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables access to Twitter account activity information, such as listing webhooks and showing subscriptions.\n        /// </summary>\n        public TwitterQueryable<AccountActivity> AccountActivity\n        {\n            get\n            {\n                return new TwitterQueryable<AccountActivity>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter blocking information, such as Exists, Blocks, and IDs\n        /// </summary>\n        public TwitterQueryable<Blocks> Blocks\n        {\n            get\n            {\n                return new TwitterQueryable<Blocks>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables querying compliance jobs\n        /// </summary>\n        public TwitterQueryable<ComplianceQuery> Compliance\n        {\n            get\n            {\n                return new TwitterQueryable<ComplianceQuery>(this);\n            }\n        }\n\n        public TwitterQueryable<Counts> Counts \n        { \n            get\n            {\n                return new TwitterQueryable<Counts>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Direct Message Events, supporting Twitter chatbots\n        /// </summary>\n        public TwitterQueryable<DirectMessageEvents> DirectMessageEvents\n        {\n            get\n            {\n                return new TwitterQueryable<DirectMessageEvents>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Favorites\n        /// </summary>\n        [Obsolete(\"Please use the new v2 `Likes` query instead.\")]\n        public TwitterQueryable<Favorites> Favorites\n        {\n            get\n            {\n                return new TwitterQueryable<Favorites>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Friendship info\n        /// </summary>\n        public TwitterQueryable<Friendship> Friendship\n        {\n            get\n            {\n                return new TwitterQueryable<Friendship>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Geo info\n        /// </summary>\n        public TwitterQueryable<Geo> Geo\n        {\n            get\n            {\n                return new TwitterQueryable<Geo>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Help info\n        /// </summary>\n        public TwitterQueryable<Help> Help\n        {\n            get\n            {\n                return new TwitterQueryable<Help>(this);\n            }\n        }\n\n        /// <summary>\n        /// Enables access to media commands, like STATUS (Twitter API v1)\n        /// </summary>\n        public TwitterQueryable<Media> Media\n        {\n            get\n            {\n                return new TwitterQueryable<Media>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Likes lookup (Twitter API v2)\n        /// </summary>\n        public TwitterQueryable<LikeQuery> Likes => new(this);\n\n        /// <summary>\n        /// enables access to Twitter List info\n        /// </summary>\n        public TwitterQueryable<ListQuery> List => new(this);\n\n        /// <summary>\n        /// Enables access to muted users\n        /// </summary>\n        public TwitterQueryable<Mute> Mute\n        {\n            get\n            {\n                return new TwitterQueryable<Mute>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Raw Query Extensibility (All Twitter API versions)\n        /// </summary>\n        public TwitterQueryable<Raw> RawQuery => new(this);\n\n        /// <summary>\n        /// enables access to Twitter Saved Searches\n        /// </summary>\n        public TwitterQueryable<SavedSearch> SavedSearch\n        {\n            get\n            {\n                return new TwitterQueryable<SavedSearch>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Search to query tweets (Twitter API v1)\n        /// </summary>\n        public TwitterQueryable<Search> Search => new(this);\n\n        /// <summary>\n        /// enables access to Twitter Search v2 to query tweets (Twitter API v2)\n        /// </summary>\n        public TwitterQueryable<TwitterSearch> TwitterSearch => new(this);\n\n        /// <summary>\n        /// enables access to Twitter Search v2 to search spaces (Twitter API v2)\n        /// </summary>\n        public TwitterQueryable<SpacesQuery> Spaces => new(this);\n\n        /// <summary>\n        /// enables access to Twitter Status messages (Twitter API v1)\n        /// </summary>\n        public TwitterQueryable<Status> Status\n        {\n            get\n            {\n                return new TwitterQueryable<Status>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter streams\n        /// </summary>\n        public TwitterQueryable<Streaming> Streaming\n        {\n            get\n            {\n                return new TwitterQueryable<Streaming>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Trends, such as Trend, Current, Daily, and Weekly\n        /// </summary>\n        public TwitterQueryable<Trend> Trends\n        {\n            get\n            {\n                return new TwitterQueryable<Trend>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Tweets lookup (Twitter API v2)\n        /// </summary>\n        public TwitterQueryable<TweetQuery> Tweets => new(this);\n\n\n        /// <summary>\n        /// enables access to Twitter blocking information, such as Lookup\n        /// </summary>\n        public TwitterQueryable<TwitterBlocksQuery> TwitterBlocks => new(this);\n\n        /// <summary>\n        /// enables access to Twitter User lookup (Twitter API v2)\n        /// </summary>\n        public TwitterQueryable<TwitterUserQuery> TwitterUser => new(this);\n\n        /// <summary>\n        /// enables access to Twitter User messages, such as Friends and Followers (Twitter API v1)\n        /// </summary>\n        public TwitterQueryable<User> User\n        {\n            get\n            {\n                return new TwitterQueryable<User>(this);\n            }\n        }\n\n        /// <summary>\n        /// enables access to Twitter Welcome messages\n        /// </summary>\n        public TwitterQueryable<WelcomeMessage> WelcomeMessage\n        {\n            get\n            {\n                return new TwitterQueryable<LinqToTwitter.WelcomeMessage>(this);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/TwitterExtensions.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public static class TwitterExtensions\n    {\n        /// <summary>\n        /// Callback is invoked by LINQ to Twitter streaming support,\n        /// allowing you to process each individual response from Twitter.\n        /// For best results, please review the Twitter API streaming guidelines.\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static async Task<List<Streaming>> StartAsync(this IQueryable<Streaming> streaming, Func<StreamContent, Task> callback)\n        {\n            _ = callback ?? throw new ArgumentNullException(nameof(callback), $\"{nameof(callback)} is required!\");\n\n            ITwitterExecute executor = GetTwitterExecutor(streaming);\n\n            executor.StreamingCallbackAsync = callback;\n\n            return await streaming.ToListAsync().ConfigureAwait(false);\n        }\n\n        public static async Task<List<T>> ToListAsync<T>(this IQueryable<T> query)\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider!.ExecuteAsync<IEnumerable<T>>(query.Expression).ConfigureAwait(false);\n\n            return results.ToList();\n        }\n\n        public static async Task<T?> FirstOrDefaultAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider!.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.FirstOrDefault();\n        }\n\n        public static async Task<T> FirstAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider!.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.First();\n        }\n\n        public static async Task<T?> SingleOrDefaultAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider!.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.SingleOrDefault();\n        }\n\n        public static async Task<T> SingleAsync<T>(this IQueryable<T> query)\n            where T : class\n        {\n            var provider = query.Provider as TwitterQueryProvider;\n\n            IEnumerable<T> results = (IEnumerable<T>)await provider!.ExecuteAsync<T>(query.Expression).ConfigureAwait(false);\n\n            return results.Single();\n        }\n\n        /// <summary>\n        /// Enables use of .NET Cancellation Framework for this query.\n        /// </summary>\n        /// <param name=\"streaming\">Query being extended</param>\n        /// <param name=\"callback\">Your code for handling Twitter content</param>\n        /// <returns>Streaming instance to support further LINQ opertations</returns>\n        public static IQueryable<T> WithCancellation<T>(this IQueryable<T> query, CancellationToken cancelToken)\n            where T : class\n        {\n            ITwitterExecute executor = GetTwitterExecutor(query);\n\n            executor.CancellationToken = cancelToken;\n\n            return query;\n        }\n\n        /// <summary>\n        /// Safely gets a <see cref=\"TwitterExecutor\"/> from an IQueryable<T>\n        /// </summary>\n        /// <typeparam name=\"T\">IQueryable type</typeparam>\n        /// <param name=\"query\">IQueryable for this request</param>\n        /// <returns><see cref=\"TwitterExecutor\"/> for the <see cref=\"TwitterContext\"/></returns>\n        static ITwitterExecute GetTwitterExecutor<T>(IQueryable<T> query)\n        {\n            var executor = (query.Provider as TwitterQueryProvider)?.Context?.TwitterExecutor;\n\n            _ = executor ?? throw new InvalidOperationException($\"{nameof(TwitterContext)} not properly instantiated.\");\n\n            return executor;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/Category.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing LinqToTwitter.Common;\nusing System.Xml.Serialization;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// A single category for Twitter suggested categories\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class Category\n    {\n        public Category() { }\n        public Category(JsonElement catJson)\n        {\n            Size = catJson.GetInt(\"size\");\n            Name = catJson.GetString(\"name\");\n            Slug = catJson.GetString(\"slug\");\n\n            catJson.TryGetProperty(\"users\", out JsonElement users);\n            if (!users.IsNull())\n                Users =\n                    (from user in users.EnumerateArray()\n                     select new User(user))\n                    .ToList();\n        }\n\n        /// <summary>\n        /// Category name\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// Category description\n        /// </summary>\n        public string? Slug { get; set; }\n\n        /// <summary>\n        /// Number of users in category\n        /// </summary>\n        public int Size { get; set; }\n\n        /// <summary>\n        /// ?\n        /// </summary>\n        public List<Category>? Categories { get; set; }\n\n        /// <summary>\n        /// Users in category\n        /// </summary>\n        public List<User>? Users { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/ProfileImageSize.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    public enum ProfileImageSize\n    {\n        /// <summary>\n        /// 48 x 48 pixels (default)\n        /// </summary>\n        Normal,\n\n        /// <summary>\n        /// 73 x 73 pixels\n        /// </summary>\n        Bigger,\n\n        /// <summary>\n        /// 24 x 24 pixels\n        /// </summary>\n        Mini,\n\n        /// <summary>\n        /// Size of the originally uploaded image\n        /// </summary>\n        Original\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/RetweetResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record RetweetResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public RetweetResponseData? Data { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/RetweetResponseData.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record RetweetResponseData\n    {\n        [JsonPropertyName(\"retweeted\")]\n        public bool Retweeted { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/RetweetTweetID.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record RetweetTweetID\n    {\n        [JsonPropertyName(\"tweet_id\")]\n        public string? TweetID { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/SingleUser.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record SingleUser\n    {\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public TwitterUser? User { get; init; }\n\n        /// <summary>\n        /// If any errors occur, they'll show up here\n        /// </summary>\n        [JsonPropertyName(\"errors\")]\n        public List<TwitterError>? Errors { get; init; }\n\n        /// <summary>\n        /// Were there errors?\n        /// </summary>\n        public bool HasErrors { get => Errors?.Any() ?? false; }\n\n        /// <summary>\n        /// Populated when query includes expansion fields\n        /// </summary>\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterContextUserCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Lets logged-in user report spam.\n        /// </summary>\n        /// <param name=\"userID\">User id of alleged spammer.</param>\n        /// <returns>Alleged spammer user info.</returns>\n        public async Task<User?> ReportSpamAsync(ulong userID, bool performBlock = false, CancellationToken cancelToken = default)\n        {\n            if (userID == 0)\n                throw new ArgumentException(\"Twitter doesn't have a user with ID == 0\", nameof(userID));\n\n            var reportParams = new Dictionary<string, string?>\n            {\n                { \"user_id\", userID.ToString() },\n                { \"perform_block\", performBlock ? bool.TrueString.ToLower() : null }\n            };\n\n            return await ReportSpamAsync(reportParams, cancelToken).ConfigureAwait(false);\n        }\n\n\n        /// <summary>\n        /// Lets logged-in user report spam.\n        /// </summary>\n        /// <param name=\"screenName\">Screen name of alleged spammer.</param>\n        /// <returns>Alleged spammer user info.</returns>\n        public async Task<User?> ReportSpamAsync(string screenName, bool performBlock = false, CancellationToken cancelToken = default)\n        {\n            if (string.IsNullOrWhiteSpace(screenName))\n                throw new ArgumentException(\"Please supply a valid screen name\", nameof(screenName));\n\n            var reportParams = new Dictionary<string, string?>\n            {\n                { \"screen_name\", screenName },\n                { \"perform_block\", performBlock ? bool.TrueString.ToLower() : null }\n            };\n\n            return await ReportSpamAsync(reportParams, cancelToken).ConfigureAwait(false);\n        }\n\n        internal async Task<User?> ReportSpamAsync(IDictionary<string, string?> reportParams, CancellationToken cancelToken = default)\n        {\n            string reportSpamUrl = BaseUrl + \"users/report_spam.json\";\n\n            RawResult =\n                await TwitterExecutor\n                    .PostFormUrlEncodedToTwitterAsync<User>(HttpMethod.Post.ToString(), reportSpamUrl, reportParams, cancelToken)\n                    .ConfigureAwait(false);\n\n            return new UserRequestProcessor<User>()\n                .ProcessActionResult(RawResult, StatusAction.SingleStatus);\n        }\n\n        /// <summary>\n        /// Make a source user follow a target user\n        /// </summary>\n        /// <param name=\"sourceUserID\">Following user ID</param>\n        /// <param name=\"targetUserID\">Followed user ID</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Follow Status</returns>\n        public async Task<TwitterUserFollowResponse?> FollowAsync(string sourceUserID, string targetUserID, CancellationToken cancelToken = default)\n        {\n            _ = sourceUserID ?? throw new ArgumentException($\"{nameof(sourceUserID)} is a required parameter.\", nameof(sourceUserID));\n            _ = targetUserID ?? throw new ArgumentException($\"{nameof(targetUserID)} is a required parameter.\", nameof(targetUserID));\n\n            string url = $\"{BaseUrl2}users/{sourceUserID}/following\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TwitterUserTargetID() { TargetUserID = targetUserID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TwitterUserFollowResponse? result = JsonSerializer.Deserialize<TwitterUserFollowResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Make a source user un-follow a target user\n        /// </summary>\n        /// <param name=\"sourceUserID\">Following user ID</param>\n        /// <param name=\"targetUserID\">Followed user ID</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Follow Status</returns>\n        public async Task<TwitterUserFollowResponse?> UnFollowAsync(string sourceUserID, string targetUserID, CancellationToken cancelToken = default)\n        {\n            _ = sourceUserID ?? throw new ArgumentException($\"{nameof(sourceUserID)} is a required parameter.\", nameof(sourceUserID));\n            _ = targetUserID ?? throw new ArgumentException($\"{nameof(targetUserID)} is a required parameter.\", nameof(targetUserID));\n\n            string url = $\"{BaseUrl2}users/{sourceUserID}/following/{targetUserID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new TwitterUserTargetID() { TargetUserID = targetUserID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            TwitterUserFollowResponse? result = JsonSerializer.Deserialize<TwitterUserFollowResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Retweet a tweet\n        /// </summary>\n        /// <param name=\"userID\">User retweeting</param>\n        /// <param name=\"tweetID\">Tweet to retweet</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Retweet Status</returns>\n        public async Task<RetweetResponse?> RetweetAsync(string userID, string tweetID, CancellationToken cancelToken = default)\n        {\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is a required parameter.\", nameof(userID));\n            _ = tweetID ?? throw new ArgumentException($\"{nameof(tweetID)} is a required parameter.\", nameof(tweetID));\n\n            string url = $\"{BaseUrl2}users/{userID}/retweets\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new RetweetTweetID { TweetID = tweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            RetweetResponse? result = JsonSerializer.Deserialize<RetweetResponse>(RawResult);\n\n            return result;\n        }\n\n        /// <summary>\n        /// Remove retweet from a tweet\n        /// </summary>\n        /// <param name=\"userID\">Retweeting user</param>\n        /// <param name=\"sourceTweetID\">Tweet to undo retweet</param>\n        /// <param name=\"cancelToken\">Allows request cancellation</param>\n        /// <returns>Retweet Status</returns>\n        public async Task<RetweetResponse?> UndoRetweetAsync(string userID, string sourceTweetID, CancellationToken cancelToken = default)\n        {\n            _ = userID ?? throw new ArgumentException($\"{nameof(userID)} is a required parameter.\", nameof(userID));\n            _ = sourceTweetID ?? throw new ArgumentException($\"{nameof(sourceTweetID)} is a required parameter.\", nameof(sourceTweetID));\n\n            string url = $\"{BaseUrl2}users/{userID}/retweets/{sourceTweetID}\";\n\n            var postData = new Dictionary<string, string>();\n            var postObj = new RetweetTweetID { TweetID = sourceTweetID };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    url,\n                    postData,\n                    postObj,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            RetweetResponse? result = JsonSerializer.Deserialize<RetweetResponse>(RawResult);\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUser.cs",
    "content": "﻿using System;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Represents a Twitter User.\n    /// </summary>\n    public record TwitterUser\n    {\n        /// <summary>\n        /// Date the user signed up for Twitter\n        /// </summary>\n        [JsonPropertyName(\"created_at\")]\n        public DateTime CreatedAt { get; init; }\n\n        /// <summary>\n        /// Profile description\n        /// </summary>\n        [JsonPropertyName(\"description\")]\n        public string? Description { get; init; }\n\n        /// <summary>\n        /// Entities associated with this user's profile\n        /// </summary>\n        [JsonPropertyName(\"entities\")]\n        public TwitterUserEntity? Entities { get; init; }\n\n        /// <summary>\n        /// User's Twitter ID\n        /// </summary>\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// Profile location\n        /// </summary>\n        [JsonPropertyName(\"location\")]\n        public string? Location { get; init; }\n\n        /// <summary>\n        /// User's entered name in profile\n        /// </summary>\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; init; }\n\n        /// <summary>\n        /// ID of tweet user has pinned at the top of their timeline\n        /// </summary>\n        [JsonPropertyName(\"pinned_tweet_id\")]\n        public string? PinnedTweetId { get; init; }\n\n        /// <summary>\n        /// URL to user's profile image\n        /// </summary>\n        [JsonPropertyName(\"profile_image_url\")]\n        public string? ProfileImageUrl { get; init; }\n\n        /// <summary>\n        /// Is user account private (access by user's approval only)\n        /// </summary>\n        [JsonPropertyName(\"protected\")]\n        public bool Protected { get; init; }\n\n        /// <summary>\n        /// Metrics for this user\n        /// </summary>\n        [JsonPropertyName(\"public_metrics\")]\n        public TwitterUserPublicMetrics? PublicMetrics { get; init; }\n\n        /// <summary>\n        /// Profile URL\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public string? Url { get; init; }\n\n        /// <summary>\n        /// Twitter assigned screen name\n        /// </summary>\n        [JsonPropertyName(\"username\")]\n        public string? Username { get; init; }\n\n        /// <summary>\n        /// Is a Twitter verified account?\n        /// </summary>\n        [JsonPropertyName(\"verified\")]\n        public bool Verified { get; init; }\n\n        /// <summary>\n        /// Details on information to withhold\n        /// </summary>\n        public object? Withheld { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserDescriptionEntities.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Entities associated with a user profile description\n    /// </summary>\n    public record TwitterUserDescriptionEntities\n    {\n        /// <summary>\n        /// Urls in the profile description\n        /// </summary>\n        [JsonPropertyName(\"urls\")]\n        public List<TweetEntityUrl>? Urls { get; init; }\n\n        /// <summary>\n        /// Hashtags in the profile description\n        /// </summary>\n        [JsonPropertyName(\"hashtags\")]\n        public List<TweetEntityHashtag>? Hashtags { get; init; }\n\n        /// <summary>\n        /// Mentions in the profile description\n        /// </summary>\n        [JsonPropertyName(\"mentions\")]\n        public List<TweetEntityMention>? Mentions { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserEntity.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Entities associated with a user\n    /// </summary>\n    public record TwitterUserEntity\n    {\n        /// <summary>\n        /// Entities from user profile URL\n        /// </summary>\n        [JsonPropertyName(\"url\")]\n        public TwitterUserUrlEntities? Url { get; init; }\n\n        /// <summary>\n        /// Entities from user profile description\n        /// </summary>\n        [JsonPropertyName(\"description\")]\n        public TwitterUserDescriptionEntities? Description { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserFollowResponse.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TwitterUserFollowResponse\n    {\n        [JsonPropertyName(\"data\")]\n        public TwitterUserFollowResponseData? Data { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserFollowResponseData.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TwitterUserFollowResponseData\n    {\n        [JsonPropertyName(\"following\")]\n        public bool Following { get; set; }\n\n        [JsonPropertyName(\"pending_follow\")]\n        public bool PendingFollow { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserPublicMetrics.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Public metrics for a user\n    /// </summary>\n    public record TwitterUserPublicMetrics\n    {\n        /// <summary>\n        /// Number of people following the user\n        /// </summary>\n        [JsonPropertyName(\"followers_count\")]\n        public int FollowersCount { get; init; }\n\n        /// <summary>\n        /// Number of people user is following\n        /// </summary>\n        [JsonPropertyName(\"following_count\")]\n        public int FollowingCount { get; init; }\n\n        /// <summary>\n        /// Number of times user tweeted\n        /// </summary>\n        [JsonPropertyName(\"tweet_count\")]\n        public int TweetCount { get; init; }\n\n        /// <summary>\n        /// Number of lists others have added this user to\n        /// </summary>\n        [JsonPropertyName(\"listed_count\")]\n        public int ListedCount { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserQuery.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TwitterUserQuery\n    {\n        //\n        // Query input fields\n        //\n\n        /// <summary>\n        /// type of search, included for compatibility\n        /// with other APIs\n        /// </summary>\n        public UserType Type { get; init; }\n\n        /// <summary>\n        /// Required for id queries - Up to 100 comma-separated IDs to search for\n        /// </summary>\n        public string? Ids { get; init; }\n\n        /// <summary>\n        /// Required for username queries - Up to 100 comma-separated usernames to search for\n        /// </summary>\n        public string? Usernames { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields\n        /// </summary>\n        public string? Expansions { get; init; }\n\n        /// <summary>\n        /// User ID for following/follower queries\n        /// </summary>\n        public string? ID { get; init; }\n\n        /// <summary>\n        /// ID for queries that need users associated with a list\n        /// </summary>\n        public string? ListID { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 100 - possible 1000\n        /// </summary>\n        public int MaxResults { get; init; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// ID of space to query for users\n        /// </summary>\n        public string? SpaceID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object\n        /// </summary>\n        public string? TweetFields { get; init; }\n\n        /// <summary>\n        /// ID of tweet that users are associated with. e.g. users who liked a tweet\n        /// </summary>\n        public string? TweetID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object\n        /// </summary>\n        public string? UserFields { get; init; }\n\n        //\n        // Output results\n        //\n\n        /// <summary>\n        /// Tweet data returned from the search\n        /// </summary>\n        [JsonPropertyName(\"data\")]\n        public List<TwitterUser>? Users { get; init; }\n\n        /// <summary>\n        /// If any errors occur, they'll show up here\n        /// </summary>\n        [JsonPropertyName(\"errors\")]\n        public List<TwitterError>? Errors { get; init; }\n\n        /// <summary>\n        /// Were there errors?\n        /// </summary>\n        public bool HasErrors { get => Errors?.Any() ?? false; }\n\n        /// <summary>\n        /// Populated when query includes expansion fields\n        /// </summary>\n        [JsonPropertyName(\"includes\")]\n        public TwitterInclude? Includes { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// processes user queries\n    /// </summary>\n    public class TwitterUserRequestProcessor<T> : IRequestProcessor<T>, IRequestProcessorWantsJson\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of query\n        /// </summary>\n        public UserType Type { get; set; }\n\n        /// <summary>\n        /// User ID for following/follower queries\n        /// </summary>\n        public string? ID { get; set; }\n\n        /// <summary>\n        /// Required for ID queries - Up to 100 comma-separated IDs to search for\n        /// </summary>\n        public string? Ids { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of expansion fields - <see cref=\"ExpansionField\"/>\n        /// </summary>\n        public string? Expansions { get; set; }\n\n        /// <summary>\n        /// ID for queries that need users associated with a list\n        /// </summary>\n        public string? ListID { get; set; }\n\n        /// <summary>\n        /// Max number of tweets to return per requrest - default 100 - possible 1000\n        /// </summary>\n        public int MaxResults { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the media object - <see cref=\"MediaField\"/>\n        /// </summary>\n        public string? MediaFields { get; set; }\n\n        /// <summary>\n        /// If set, with token from previous response metadata, pages forward or backward\n        /// </summary>\n        public string? PaginationToken { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the place object - <see cref=\"PlaceField\"/>\n        /// </summary>\n        public string? PlaceFields { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the poll object - <see cref=\"PollField\"/>\n        /// </summary>\n        public string? PollFields { get; set; }\n\n        /// <summary>\n        /// ID of space to query for users\n        /// </summary>\n        public string? SpaceID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the Tweet object - <see cref=\"TweetField\"/>\n        /// </summary>\n        public string? TweetFields { get; set; }\n\n        /// <summary>\n        /// ID of tweet that users are associated with. e.g. users who liked a tweet\n        /// </summary>\n        public string? TweetID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of fields to return in the User object - <see cref=\"UserField\"/>\n        /// </summary>\n        public string? UserFields { get; set; }\n\n        /// <summary>\n        /// Required for username queries - Up to 100 comma-separated usernames to search for\n        /// </summary>\n        public string? Usernames { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<TwitterUserQuery>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(ID),\n                       nameof(Ids),\n                       nameof(Expansions),\n                       nameof(ListID),\n                       nameof(MaxResults),\n                       nameof(MediaFields),\n                       nameof(PaginationToken),\n                       nameof(PlaceFields),\n                       nameof(PollFields),\n                       nameof(SpaceID),\n                       nameof(TweetFields),\n                       nameof(TweetID),\n                       nameof(UserFields),\n                       nameof(Usernames),\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Type)))\n                Type = RequestProcessorHelper.ParseEnum<UserType>(parameters[\"Type\"]);\n            else\n                throw new ArgumentException($\"{nameof(Type)} is required\", nameof(Type));\n\n            return Type switch\n            {\n                UserType.IdLookup => BuildIdLookupUrl(parameters),\n                UserType.Followers => BuildFollowersUrl(parameters),\n                UserType.Following => BuildFollowingUrl(parameters),\n                UserType.Liking => BuildLikingUrl(parameters),\n                UserType.ListFollowers => BuildListFollowersUrl(parameters),\n                UserType.ListMembers => BuildListMembersUrl(parameters),\n                UserType.Me => BuildMeUrl(parameters),\n                UserType.RetweetedBy => BuildRetweetedByUrl(parameters),\n                UserType.SpaceBuyers => BuildSpaceBuyersUrl(parameters),\n                UserType.UsernameLookup => BuildUsernameLookupUrl(parameters),\n                _ => throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\"),\n            };\n        }\n\n        /// <summary>\n        /// builds a url to search for user info by id(s)\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildIdLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Ids)))\n            {\n                Ids = parameters[nameof(Ids)];\n                urlParams.Add(new QueryParameter(\"ids\", Ids.Replace(\" \", \"\")));\n            }\n            else\n            {\n                throw new ArgumentNullException(nameof(Ids), $\"{nameof(Ids)} is required!\");\n            }\n\n            BuildSharedUrlParameters(urlParams, parameters);\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds a url for people following user\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildFollowersUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ID), val => ID = val);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/followers\");\n\n            BuildFollowParameters(parameters, req);\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds a url for people user follows\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildFollowingUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ID), val => ID = val);\n\n            var req = new Request($\"{BaseUrl}users/{ID}/following\");\n\n            BuildFollowParameters(parameters, req);\n\n            return req;\n        }\n\n        /// <summary>\n        /// ListFollowers URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildListFollowersUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ListID), val => ListID = val);\n\n            var req = new Request($\"{BaseUrl}lists/{ListID}/followers\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// ListMembers URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildListMembersUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(ListID), val => ListID = val);\n\n            var req = new Request($\"{BaseUrl}lists/{ListID}/members\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                string maxResultsString = parameters[nameof(MaxResults)];\n                _ = int.TryParse(maxResultsString, out var maxResults);\n                MaxResults = maxResults;\n                urlParams.Add(new QueryParameter(\"max_results\", maxResultsString));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// RetweetedBy URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildRetweetedByUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(TweetID), val => TweetID = val);\n\n            var req = new Request($\"{BaseUrl}tweets/{TweetID}/retweeted_by\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// RetweetedBy URL\n        /// </summary>\n        /// <param name=\"parameters\">Parameters to process</param>\n        /// <returns><see cref=\"Request\"/> object</returns>\n        Request BuildLikingUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(TweetID), val => TweetID = val);\n\n            var req = new Request($\"{BaseUrl}tweets/{TweetID}/liking_users\");\n\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        Request BuildMeUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request($\"{BaseUrl}users/me\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds parameters common to timeline queries\n        /// </summary>\n        /// <param name=\"parameters\">parameters to process</param>\n        /// <param name=\"req\"><see cref=\"Request\"/> object</param>\n        void BuildFollowParameters(Dictionary<string, string> parameters, Request req)\n        {\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(MaxResults)))\n            {\n                MaxResults = int.Parse(parameters[nameof(MaxResults)]);\n                urlParams.Add(new QueryParameter(\"max_results\", MaxResults.ToString()));\n            }\n\n            if (parameters.ContainsKey(nameof(PaginationToken)))\n            {\n                PaginationToken = parameters[nameof(PaginationToken)];\n                urlParams.Add(new QueryParameter(\"pagination_token\", PaginationToken));\n            }\n\n            BuildSharedUrlParameters(urlParams, parameters);\n        }\n\n        /// <summary>\n        /// builds a url to search for user info by username(s)\n        /// </summary>\n        /// <param name=\"parameters\">url parameters</param>\n        /// <returns>new url for request</returns>\n        Request BuildUsernameLookupUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/by\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Usernames)))\n            {\n                Usernames = parameters[nameof(Usernames)];\n                urlParams.Add(new QueryParameter(\"usernames\", Usernames.Replace(\" \", \"\")));\n            }\n            else\n            {\n                throw new ArgumentNullException(nameof(Usernames), $\"{nameof(Usernames)} is required!\");\n            }\n\n            BuildSharedUrlParameters(urlParams, parameters);\n\n            return req;\n        }\n\n        /// <summary>\n        /// Appends parameters for User requests\n        /// </summary>\n        /// <param name=\"urlParams\">List of parameters to build</param>\n        /// <param name=\"parameters\">list of parameters from expression tree</param>\n        /// <param name=\"url\">base url</param>\n        /// <returns>base url + parameters</returns>\n        void BuildSharedUrlParameters(IList<QueryParameter> urlParams, Dictionary<string, string> parameters)\n        {\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n        }\n\n        Request BuildSpaceBuyersUrl(Dictionary<string, string> parameters)\n        {\n            RequestProcessorHelper.SetSegment(parameters, nameof(SpaceID), val => SpaceID = val);\n\n            var req = new Request($\"{BaseUrl}spaces/{SpaceID}/buyers\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(nameof(Expansions)))\n            {\n                Expansions = parameters[nameof(Expansions)];\n                urlParams.Add(new QueryParameter(\"expansions\", Expansions.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(MediaFields)))\n            {\n                MediaFields = parameters[nameof(MediaFields)];\n                urlParams.Add(new QueryParameter(\"media.fields\", MediaFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PlaceFields)))\n            {\n                PlaceFields = parameters[nameof(PlaceFields)];\n                urlParams.Add(new QueryParameter(\"place.fields\", PlaceFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(PollFields)))\n            {\n                PollFields = parameters[nameof(PollFields)];\n                urlParams.Add(new QueryParameter(\"poll.fields\", PollFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetFields)))\n            {\n                TweetFields = parameters[nameof(TweetFields)];\n                urlParams.Add(new QueryParameter(\"tweet.fields\", TweetFields.Replace(\" \", \"\")));\n            }\n\n            if (parameters.ContainsKey(nameof(UserFields)))\n            {\n                UserFields = parameters[nameof(UserFields)];\n                urlParams.Add(new QueryParameter(\"user.fields\", UserFields.Replace(\" \", \"\")));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms response from Twitter into List of <see cref=\"TwitterUserQuery\"/>\n        /// </summary>\n        /// <param name=\"responseJson\">Json response from Twitter</param>\n        /// <returns>List of Search</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            IEnumerable<TwitterUserQuery> user;\n\n            if (string.IsNullOrWhiteSpace(responseJson))\n            {\n                user = new List<TwitterUserQuery> { new TwitterUserQuery() };\n            }\n            else\n            {\n                var userResult = JsonDeserialize(responseJson);\n                user = new List<TwitterUserQuery> { userResult };\n            }\n\n            return user.OfType<T>().ToList();\n        }\n\n        TwitterUserQuery JsonDeserialize(string responseJson)\n        {\n            var options = new JsonSerializerOptions\n            {\n                Converters =\n                {\n                    new JsonStringEnumConverter(),\n                    new TweetMediaTypeConverter(),\n                    new TweetReplySettingsConverter()\n                }\n            };\n            TwitterUserQuery? user = DeserializeUser(responseJson, options);\n\n            if (user == null)\n                return new TwitterUserQuery\n                {\n                    Type = Type,\n                    ID = ID,\n                    Ids = Ids,\n                    Expansions = Expansions,\n                    ListID = ListID,\n                    MaxResults = MaxResults,\n                    PaginationToken = PaginationToken,\n                    SpaceID = SpaceID,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields,\n                    Usernames = Usernames\n                };\n            else\n                return user with\n                {\n                    Type = Type,\n                    ID = ID,\n                    Ids = Ids,\n                    Expansions = Expansions,\n                    ListID = ListID,\n                    MaxResults = MaxResults,\n                    PaginationToken = PaginationToken,\n                    SpaceID = SpaceID,\n                    TweetFields = TweetFields,\n                    UserFields = UserFields,\n                    Usernames = Usernames\n                };\n        }\n\n        TwitterUserQuery? DeserializeUser(string responseJson, JsonSerializerOptions options)\n        {\n            TwitterUserQuery? user;\n\n            if (IsSingleUser())\n            {\n                SingleUser? singleUser = JsonSerializer.Deserialize<SingleUser>(responseJson, options);\n                if (singleUser?.User != null)\n                {\n                    user =\n                        new TwitterUserQuery\n                        {\n                            Errors = singleUser.Errors,\n                            Includes = singleUser.Includes,\n                            Users = new List<TwitterUser> { singleUser.User }\n                        };\n                }\n                else\n                {\n                    user = new TwitterUserQuery();\n                }\n            }\n            else\n            {\n                user = JsonSerializer.Deserialize<TwitterUserQuery>(responseJson, options);\n            }\n\n            return user;\n\n            bool IsSingleUser() => Type == UserType.Me;\n        }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserTargetID.cs",
    "content": "﻿using System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TwitterUserTargetID\n    {\n        [JsonPropertyName(\"target_user_id\")]\n        public string? TargetUserID { get; init; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/TwitterUserUrlEntities.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace LinqToTwitter\n{\n    public record TwitterUserUrlEntities\n    {\n        /// <summary>\n        /// Collection of URLs attached to Tweet\n        /// </summary>\n        [JsonPropertyName(\"urls\")]\n        public List<TweetEntityUrl>? Urls { get; init; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/User.cs",
    "content": "﻿/***********************************************************\n * Credits:\n * \n * Created By: Joe Mayo, 8/26/08\n * *********************************************************/\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Text.Json;\nusing System.Xml.Serialization;\n\nusing LinqToTwitter.Common;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// information for a twitter user\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class User\n    {\n        public User() {}\n        public User(JsonElement user)\n        {\n            if (user.IsNull()) return;\n\n            BannerSizes = new List<BannerSize>();\n            Categories = new List<Category>();\n            UserIDResponse = user.GetUlong(\"id\").ToString(CultureInfo.InvariantCulture);\n            ScreenNameResponse = user.GetString(\"screen_name\");\n            Name = user.GetString(\"name\");\n            Location = user.GetString(\"location\");\n            Description = user.GetString(\"description\");\n            ProfileImageUrl = user.GetString(\"profile_image_url\");\n            ProfileImageUrlHttps = user.GetString(\"profile_image_url_https\");\n            Url = user.GetString(\"url\");\n            user.TryGetProperty(\"entities\", out JsonElement entitiesValue);\n            Entities = new UserEntities(entitiesValue);\n            Protected = user.GetBool(\"protected\");\n            ProfileUseBackgroundImage = user.GetBool(\"profile_use_background_image\");\n            IsTranslator = user.GetBool(\"is_translator\");\n            FollowersCount = user.GetInt(\"followers_count\");\n            DefaultProfile = user.GetBool(\"default_profile\");\n            ProfileBackgroundColor = user.GetString(\"profile_background_color\");\n            LangResponse = user.GetString(\"lang\");\n            ProfileTextColor = user.GetString(\"profile_text_color\");\n            ProfileLinkColor = user.GetString(\"profile_link_color\");\n            ProfileSidebarFillColor = user.GetString(\"profile_sidebar_fill_color\");\n            ProfileSidebarBorderColor = user.GetString(\"profile_sidebar_border_color\");\n            FriendsCount = user.GetInt(\"friends_count\");\n            DefaultProfileImage = user.GetBool(\"default_profile_image\");\n            CreatedAt = (user.GetString(\"created_at\") ?? string.Empty).GetDate(DateTime.MinValue);\n            FavoritesCount = user.GetInt(\"favourites_count\");\n            UtcOffset = user.GetInt(\"utc_offset\");\n            TimeZone = user.GetString(\"time_zone\");\n            ProfileBackgroundImageUrl = user.GetString(\"profile_background_image_url\");\n            ProfileBackgroundImageUrlHttps = user.GetString(\"profile_background_image_url_https\");\n            ProfileBackgroundTile = user.GetBool(\"profile_background_tile\");\n            ProfileBannerUrl = user.GetString(\"profile_banner_url\");\n            StatusesCount = user.GetInt(\"statuses_count\");\n            Notifications = user.GetBool(\"notifications\");\n            GeoEnabled = user.GetBool(\"geo_enabled\");\n            Verified = user.GetBool(\"verified\");\n            ContributorsEnabled = user.GetBool(\"contributors_enabled\");\n            Following = user.GetBool(\"following\");\n            ShowAllInlineMedia = user.GetBool(\"show_all_inline_media\");\n            ListedCount = user.GetInt(\"listed_count\");\n            FollowRequestSent = user.GetBool(\"follow_request_sent\");\n            user.TryGetProperty(\"status\", out JsonElement statusElement);\n            Status = new Status(statusElement);\n            CursorMovement = new Cursors(user);\n            Email = user.GetString(\"email\");\n        }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        public UserType? Type { get; set; }\n\n        /// <summary>\n        /// Query User ID\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs (e.g. for Lookup query)\n        /// </summary>\n        public string? UserIdList { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names (e.g. for Lookup queries)\n        /// </summary>\n        public string? ScreenNameList { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        public string? Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Add entities to results (default: true)\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Query User ID\n        /// </summary>\n        public string? UserIDResponse { get; set; }\n\n        /// <summary>\n        /// Query screen name\n        /// </summary>\n        public string? ScreenNameResponse { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        public ProfileImageSize? ImageSize { get; set; }\n\n        /// <summary>\n        /// Set to TweetMode.Extended to receive 280 characters in Status.FullText property\n        /// </summary>\n        public TweetMode? TweetMode { get; set; }\n\n        /// <summary>\n        /// Contains Next and Previous cursors\n        /// </summary>\n        /// <remarks>\n        /// This is read-only and returned with the response\n        /// from Twitter. You use it by setting Cursor on the\n        /// next request to indicate that you want to move to\n        /// either the next or previous page.\n        /// </remarks>\n        [XmlIgnore]\n        public Cursors? CursorMovement { get; internal set; }\n\n        /// <summary>\n        /// name of user\n        /// </summary>\n        public string? Name { get; set; }\n\n        /// <summary>\n        /// location of user\n        /// </summary>\n        public string? Location { get; set; }\n\n        /// <summary>\n        /// user's description\n        /// </summary>\n        public string? Description { get; set; }\n\n        /// <summary>\n        /// user's image\n        /// </summary>\n        public string? ProfileImageUrl { get; set; }\n\n        /// <summary>\n        /// user's image for use on HTTPS secured pages\n        /// </summary>\n        public string? ProfileImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// user's image is a defaulted placeholder\n        /// </summary>\n        public bool DefaultProfileImage{ get; set; }\n\n        /// <summary>\n        /// user's URL\n        /// </summary>\n        public string? Url { get; set; }\n\n        /// <summary>\n        /// Entities connected to the <see cref=\"User\"/>\n        /// </summary>\n        public UserEntities? Entities { get; set; }\n\n        /// <summary>\n        /// user's profile has not been configured (is just defaults)\n        /// </summary>\n        public bool DefaultProfile { get; set; }\n\n        /// <summary>\n        /// is user protected\n        /// </summary>\n        public bool Protected { get; set; }\n\n        /// <summary>\n        /// number of people following user\n        /// </summary>\n        public int FollowersCount { get; set; }\n\n        /// <summary>\n        /// color of profile background\n        /// </summary>\n        public string? ProfileBackgroundColor { get; set; }\n\n        /// <summary>\n        /// color of profile text\n        /// </summary>\n        public string? ProfileTextColor { get; set; }\n\n        /// <summary>\n        /// color of profile links\n        /// </summary>\n        public string? ProfileLinkColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar\n        /// </summary>\n        public string? ProfileSidebarFillColor { get; set; }\n\n        /// <summary>\n        /// color of profile sidebar border\n        /// </summary>\n        public string? ProfileSidebarBorderColor { get; set; }\n\n        /// <summary>\n        /// number of friends\n        /// </summary>\n        public int FriendsCount { get; set; }\n\n        /// <summary>\n        /// date and time when profile was created\n        /// </summary>\n        public DateTime CreatedAt { get; set; }\n\n        /// <summary>\n        /// number of favorites\n        /// </summary>\n        public int FavoritesCount { get; set; }\n\n        /// <summary>\n        /// UTC Offset\n        /// </summary>\n        public int UtcOffset { get; set; }\n\n        /// <summary>\n        /// Time Zone\n        /// </summary>\n        public string? TimeZone { get; set; }\n\n        /// <summary>\n        /// URL of profile background image\n        /// </summary>\n        public string? ProfileBackgroundImageUrl { get; set; }\n\n        /// <summary>\n        /// URL of profile background image for use on HTTPS secured pages\n        /// </summary>\n        public string? ProfileBackgroundImageUrlHttps { get; set; }\n\n        /// <summary>\n        /// Title of profile background\n        /// </summary>\n        public bool ProfileBackgroundTile { get; set; }\n\n        /// <summary>\n        /// Should we use the profile background image?\n        /// </summary>\n        public bool ProfileUseBackgroundImage { get; set; }\n\n        /// <summary>\n        /// number of status updates user has made\n        /// </summary>\n        public int StatusesCount { get; set; }\n\n        /// <summary>\n        /// type of device notifications\n        /// </summary>\n        public bool Notifications { get; set; }\n\n        /// <summary>\n        /// Supports Geo Tracking\n        /// </summary>\n        public bool GeoEnabled { get; set; }\n\n        /// <summary>\n        /// Is a verified account\n        /// </summary>\n        public bool Verified { get; set; }\n\n        /// <summary>\n        /// Is contributors enabled on account?\n        /// </summary>\n        public bool ContributorsEnabled { get; set; }\n\n        /// <summary>\n        /// Is this a translator?\n        /// </summary>\n        public bool IsTranslator { get; set; }\n\n        /// <summary>\n        /// is authenticated user following this user\n        /// </summary>\n        public bool Following { get; set; }\n\n        /// <summary>\n        /// current user status (valid only in user queries)\n        /// </summary>\n        public Status? Status { get; set; }\n\n        /// <summary>\n        /// User categories for Twitter Suggested Users\n        /// </summary>\n        public List<Category>? Categories { get; set; }\n\n        /// <summary>\n        /// Input param for Category queries\n        /// </summary>\n        public string? Lang { get; set; }\n\n        /// <summary>\n        /// Return results for specified language\n        ///  Note: Twitter only supports a limited number of languages,\n        ///  which include en, fr, de, es, it when this feature was added.\n        /// </summary>\n        public string? LangResponse { get; set; }\n\n        /// <summary>\n        /// Indicates if user has inline media enabled\n        /// </summary>\n        public bool ShowAllInlineMedia { get; set; }\n\n        /// <summary>\n        /// Number of lists user is a member of\n        /// </summary>\n        public int ListedCount { get; set; }\n\n        /// <summary>\n        /// If authenticated user has requested to follow this use\n        /// </summary>\n        public bool FollowRequestSent { get; set; }\n\n        /// <summary>\n        /// Response from ProfileImage query\n        /// </summary>\n        public string? ProfileImage { get; set; }\n\n        /// <summary>\n        /// Url of Profile Banner image.\n        /// </summary>\n        public string? ProfileBannerUrl { get; set; }\n\n        /// <summary>\n        /// Available sizes to use in account banners.\n        /// </summary>\n        public List<BannerSize>? BannerSizes { get; set; }\n\n        /// <summary>\n        /// User's email-address (null if not filled in on app is\n        /// lacking whitelisting)\n        /// </summary>\n        public string? Email { get; set; }\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/UserAction.cs",
    "content": "namespace LinqToTwitter\n{\n    public enum UserAction\n    {\n        SingleUser\n    }\n}"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/UserEntities.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Common.Entities;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// URLs associated with the User profile\n    /// </summary>\n    public class UserEntities\n    {\n        public UserEntities(JsonElement entities)\n        {\n            if (entities.IsNull())\n                return;\n\n            entities.TryGetProperty(\"url\", out JsonElement urlValue);\n            Url = new Entities(urlValue);\n            entities.TryGetProperty(\"description\", out JsonElement descriptionValue);\n            Description = new Entities(descriptionValue);\n        }\n\n        /// <summary>\n        /// Url entities in the profile\n        /// </summary>\n        public Entities? Url { get; set; }\n\n        /// <summary>\n        /// Url entities in the description\n        /// </summary>\n        public Entities? Description { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/UserRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter User requests.\n    /// </summary>\n    public class UserRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        const string ScreenNameOrUserID = \"ScreenNameOrUserID\";\n\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// type of user request (i.e. Friends, Followers, or Show)\n        /// </summary>\n        public UserType? Type { get; set; }\n\n        /// <summary>\n        /// User ID\n        /// </summary>\n        public ulong UserID { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of user IDs (e.g. for Lookup query)\n        /// </summary>\n        public string? UserIdList { get; set; }\n\n        /// <summary>\n        /// user's screen name\n        /// On Input - disambiguates when ID is User ID\n        /// </summary>\n        public string? ScreenName { get; set; }\n\n        /// <summary>\n        /// Comma-separated list of screen names (e.g. for Lookup query)\n        /// </summary>\n        public string? ScreenNameList { get; set; }\n\n        /// <summary>\n        /// page number of results to retrieve\n        /// </summary>\n        public int Page { get; set; }\n\n        /// <summary>\n        /// Number of users to return for each page\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Indicator for which page to get next\n        /// </summary>\n        /// <remarks>\n        /// This is not a page number, but is an indicator to\n        /// Twitter on which page you need back. Your choices\n        /// are Previous and Next, which you can find in the\n        /// CursorResponse property when your response comes back.\n        /// </remarks>\n        public long Cursor { get; set; }\n\n        /// <summary>\n        /// Used to identify suggested users category\n        /// </summary>\n        public string? Slug { get; set; }\n\n        /// <summary>\n        /// Query for User Search\n        /// </summary>\n        public string? Query { get; set; }\n\n        /// <summary>\n        /// Supports various languages\n        /// </summary>\n        public string? Lang { get; set; }\n\n        /// <summary>\n        /// Add entities to results\n        /// </summary>\n        public bool IncludeEntities { get; set; }\n\n        /// <summary>\n        /// Remove status from results\n        /// </summary>\n        public bool SkipStatus { get; set; }\n\n        /// <summary>\n        /// Size for UserProfileImage query\n        /// </summary>\n        public ProfileImageSize? ImageSize { get; set; }\n\n        /// <summary>\n        /// Set to TweetMode.Extended to receive 280 characters in Status.FullText property\n        /// </summary>\n        public TweetMode? TweetMode { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<User>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Type),\n                       nameof(UserID),\n                       nameof(UserIdList),\n                       nameof(ScreenName),\n                       nameof(ScreenNameList),\n                       nameof(Page),\n                       nameof(Count),\n                       nameof(Cursor),\n                       nameof(Slug),\n                       nameof(Query),\n                       nameof(Lang),\n                       nameof(IncludeEntities),\n                       nameof(SkipStatus),\n                       nameof(ImageSize),\n                       nameof(TweetMode)\n                   });\n\n            return paramFinder.Parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            const string TypeParam = \"Type\";\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException(\"You must set Type.\", TypeParam);\n\n            Type = RequestProcessorHelper.ParseEnum<UserType>(parameters[\"Type\"]);\n\n            return Type switch\n            {\n                UserType.Search => BuildSearchUrl(parameters),\n                UserType.Contributees => BuildContributeesUrl(parameters),\n                UserType.Contributors => BuildContributorsUrl(parameters),\n                UserType.BannerSizes => BuildBannerSizesUrl(parameters),\n                _ => throw new InvalidOperationException(\"The default case of BuildUrl should never execute because a Type must be specified.\"),\n            };\n        }\n\n        Request BuildContributorsUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/contributors.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n\n                string? tweetModeValue = TweetMode?.ToString().ToLower();\n                if (tweetModeValue != null)\n                    urlParams.Add(new QueryParameter(\"tweet_mode\", tweetModeValue));\n            }\n\n            return req;\n        }\n \n        Request BuildContributeesUrl(Dictionary<string, string> parameters)\n        {\n            if (!(parameters.ContainsKey(\"ScreenName\") || parameters.ContainsKey(\"UserID\")) ||\n                (parameters.ContainsKey(\"ScreenName\") && parameters.ContainsKey(\"UserID\")))\n                throw new ArgumentException(\"Query must contain one of either ScreenName or UserID parameters, but not both.\", ScreenNameOrUserID);\n\n            var req = new Request(BaseUrl + \"users/contributees.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(\"SkipStatus\"))\n            {\n                SkipStatus = bool.Parse(parameters[\"SkipStatus\"]);\n                urlParams.Add(new QueryParameter(\"skip_status\", parameters[\"SkipStatus\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n\n                string? tweetModeValue = TweetMode?.ToString().ToLower();\n                if (tweetModeValue != null)\n                    urlParams.Add(new QueryParameter(\"tweet_mode\", tweetModeValue));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Builds a URL to perform a user search\n        /// </summary>\n        /// <param name=\"parameters\">Query, Page, and Count</param>\n        /// <returns>URL for performing user search</returns>\n        Request BuildSearchUrl(Dictionary<string, string> parameters)\n        {\n            const string QueryParam = \"Query\";\n            if (!parameters.ContainsKey(\"Query\"))\n                throw new ArgumentException(\"Query parameter is required.\", QueryParam);\n\n            var req = new Request(BaseUrl + \"users/search.json\");\n            var urlParams = req.RequestParameters;\n\n            if (parameters.ContainsKey(\"Query\"))\n            {\n                Query = parameters[\"Query\"];\n                urlParams.Add(new QueryParameter(\"q\", parameters[\"Query\"]));\n            }\n\n            if (parameters.ContainsKey(\"Page\"))\n            {\n                Page = int.Parse(parameters[\"Page\"]);\n                urlParams.Add(new QueryParameter(\"page\", parameters[\"Page\"]));\n            }\n\n            if (parameters.ContainsKey(\"Count\"))\n            {\n                Count = int.Parse(parameters[\"Count\"]);\n                urlParams.Add(new QueryParameter(\"count\", parameters[\"Count\"]));\n            }\n\n            if (parameters.ContainsKey(\"IncludeEntities\"))\n            {\n                IncludeEntities = bool.Parse(parameters[\"IncludeEntities\"]);\n                urlParams.Add(new QueryParameter(\"include_entities\", parameters[\"IncludeEntities\"].ToLower()));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n\n                string? tweetModeValue = TweetMode?.ToString().ToLower();\n                if (tweetModeValue != null)\n                    urlParams.Add(new QueryParameter(\"tweet_mode\", tweetModeValue));\n            }\n\n            return req;\n        }\n\n        Request BuildBannerSizesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"users/profile_banner.json\");\n            var urlParams = req.RequestParameters;\n\n            if (!parameters.ContainsKey(\"UserID\") &&\n                !parameters.ContainsKey(\"ScreenName\"))\n            {\n                throw new ArgumentException(\"Parameters must include either UserID or ScreenName.\", ScreenNameOrUserID);\n            }\n\n            if (parameters.ContainsKey(\"UserID\") && string.IsNullOrWhiteSpace(parameters[\"UserID\"]))\n            {\n                throw new ArgumentNullException(\"UserID\", \"If specified, UserID can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\") && string.IsNullOrWhiteSpace(parameters[\"ScreenName\"]))\n            {\n                throw new ArgumentNullException(\"ScreenName\", \"If specified, ScreenName can't be null or an empty string.\");\n            }\n\n            if (parameters.ContainsKey(\"UserID\"))\n            {\n                UserID = ulong.Parse(parameters[\"UserID\"]);\n                urlParams.Add(new QueryParameter(\"user_id\", parameters[\"UserID\"]));\n            }\n\n            if (parameters.ContainsKey(\"ScreenName\"))\n            {\n                ScreenName = parameters[\"ScreenName\"];\n                urlParams.Add(new QueryParameter(\"screen_name\", parameters[\"ScreenName\"]));\n            }\n\n            if (parameters.ContainsKey(nameof(TweetMode)))\n            {\n                TweetMode = RequestProcessorHelper.ParseEnum<TweetMode>(parameters[nameof(TweetMode)]);\n\n                string? tweetModeValue = TweetMode?.ToString().ToLower();\n                if (tweetModeValue != null)\n                    urlParams.Add(new QueryParameter(\"tweet_mode\", tweetModeValue));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms Twitter response into List of User\n        /// </summary>\n        /// <param name=\"responseJson\">Twitter response</param>\n        /// <returns>List of User</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson)) return new List<T>();\n            JsonElement userJson = JsonDocument.Parse(responseJson).RootElement;\n\n            List<User>? userList = Type switch\n            {\n                UserType.Contributees or UserType.Contributors or UserType.Search => UserRequestProcessor<T>.HandleMultipleUserResponse(userJson),\n                UserType.BannerSizes => UserRequestProcessor<T>.HandleBannerSizesResponse(userJson),\n                _ => new List<User>(),\n            };\n\n            foreach (var user in userList)\n            {\n                user.Type = Type;\n                user.UserID = UserID;\n                user.UserIdList = UserIdList;\n                user.ScreenName = ScreenName;\n                user.ScreenNameList = ScreenNameList;\n                user.Count = Count;\n                user.Cursor = Cursor;\n                user.Slug = Slug;\n                user.Lang = Lang;\n                user.Query = Query;\n                user.IncludeEntities = IncludeEntities;\n                user.SkipStatus = SkipStatus;\n                user.ImageSize = ImageSize;\n                user.TweetMode = TweetMode;\n            }\n\n            return userList.OfType<T>().ToList();\n        }\n\n        static List<User> HandleSingleUserResponse(JsonElement userJson)\n        {\n            List<User> userList = new() { new User(userJson) };\n            return userList;\n        }\n\n        static List<User> HandleMultipleUserResponse(JsonElement userJson)\n        {\n            List<User> userList =\n                (from user in userJson.EnumerateArray()\n                 select new User(user))\n                .ToList();\n\n            return userList;\n        }\n\n        static List<User> HandleBannerSizesResponse(JsonElement userJson)\n        {\n            var sizes = userJson.GetProperty(\"sizes\");\n            var userList = new List<User>\n            {\n                new User\n                {\n                    BannerSizes =\n                        (from key in sizes.EnumerateObject()\n                         let name = key.Name\n                         let value = key.Value\n                         select new BannerSize\n                         {\n                             Label = name,\n                             Width = value.GetInt(\"w\"),\n                             Height = value.GetInt(\"h\"),\n                             Url = value.GetString(\"url\")\n                         })\n                        .ToList()\n                }\n            };\n\n            return userList;\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            JsonElement userJson = JsonDocument.Parse(responseJson).RootElement;\n\n            List<User> user = UserRequestProcessor<T>.HandleSingleUserResponse(userJson);\n\n            return user.Single().ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/User/UserType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// type of user request\n    /// </summary>\n    public enum UserType\n    {\n        /// <summary>\n        /// List of sizes for account banners\n        /// </summary>\n        BannerSizes,\n\n        /// <summary>\n        /// Users that specified user can contribute to\n        /// </summary>\n        Contributees,\n\n        /// <summary>\n        /// Users who can contribute to an account\n        /// </summary>\n        Contributors,\n\n        /// <summary>\n        /// Get list of people that are following user\n        /// </summary>\n        Followers,\n\n        /// <summary>\n        /// Get list of people that user is following \n        /// </summary>\n        Following,\n\n        /// <summary>\n        /// Search users by ids\n        /// </summary>\n        IdLookup,\n\n        /// <summary>\n        /// Users who liked a tweet\n        /// </summary>\n        Liking,\n\n        /// <summary>\n        /// Gets users who follow a list\n        /// </summary>\n        ListFollowers,\n\n        /// <summary>\n        /// Get users who are members of a list\n        /// </summary>\n        ListMembers,\n\n        /// <summary>\n        /// Gets user information for the currently authenticated user\n        /// </summary>\n        Me,\n\n        /// <summary>\n        /// Get tweets a user retweeted\n        /// </summary>\n        RetweetedBy,\n\n        /// <summary>\n        /// Perform a user search\n        /// </summary>\n        Search,\n\n        /// <summary>\n        /// People who bought a ticket to a space\n        /// </summary>\n        SpaceBuyers,\n\n        /// <summary>\n        /// Search users by username\n        /// </summary>\n        UsernameLookup,\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/WelcomeMessages/TwitterContextWelcomeMessageCommands.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public partial class TwitterContext\n    {\n        /// <summary>\n        /// Creates a new welcome message.\n        /// </summary>\n        /// <param name=\"name\">Name of welcome message.</param>\n        /// <param name=\"text\">Welcome message contents.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<WelcomeMessage?> NewWelcomeMessageAsync(string name, string text, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException($\"{nameof(text)} is a required parameter.\", nameof(text));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/new.json\";\n\n            var msgParams = new WelcomeMessageValue\n            {\n                WelcomeMessage = new WelcomeMsg\n                {\n                    Name = name,\n                    MessageData = new WelcomeMessageData\n                    {\n                        Text = text\n                    }\n                },\n                Apps = JsonDocument.Parse(\"null\").RootElement\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    msgParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage? msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            //msg.Name = name;\n            //msg.Text = text;\n\n            return msg;\n        }\n\n        /// <summary>\n        /// Updates an existing welcome message.\n        /// <param name=\"welcomeMessageID\">ID of the welcome message.</param>\n        /// <paramref name=\"name\">Updated welcome message name.</paramref>\n        /// <param name=\"text\">Updated welcome message contents.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<WelcomeMessage?> UpdateWelcomeMessageAsync(ulong welcomeMessageID, string name, string text, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageID));\n\n            if (string.IsNullOrWhiteSpace(text))\n                throw new ArgumentException($\"{nameof(text)} is a required parameter.\", nameof(text));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/update.json?id=\" + welcomeMessageID;\n\n            var postData = new Dictionary<string, string>\n            {\n                [\"id\"] = welcomeMessageID.ToString()\n            };\n\n            var msgParams = new WelcomeMsg\n            {\n                Name = name,\n                MessageData = new WelcomeMessageData\n                {\n                    Text = text\n                }\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    newUrl,\n                    postData,\n                    msgParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage? msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            //msg.ID = welcomeMessageID;\n            //msg.Text = text;\n\n            return msg;\n        }\n\n        /// <summary>\n        /// Deletes an existing welcome message.\n        /// <param name=\"welcomeMessageID\">ID of the welcome message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task DeleteWelcomeMessageAsync(ulong welcomeMessageID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageID));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/destroy.json?id=\" + welcomeMessageID;\n\n            var postData = new Dictionary<string, string>\n            {\n                [\"id\"] = welcomeMessageID.ToString()\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    postData,\n                    \"\",\n                    cancelToken)\n                   .ConfigureAwait(false) ?? string.Empty;\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage? msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            if (msg != null)\n                msg.ID = welcomeMessageID;\n        }\n\n        /// <summary>\n        /// Marks a welcome message as the default.\n        /// </summary>\n        /// <param name=\"welcomeMessageID\">ID of the welcome message.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        /// <returns>Direct message events data.</returns>\n        public async Task<WelcomeMessage?> NewWelcomeMessageRuleAsync(ulong welcomeMessageID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageID));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/rules/new.json\";\n\n            var msgParams = new WelcomeMessageValue\n            {\n                WelcomeMessageRule = new WelcomeMessageRule\n                {\n                    WelcomeMessageID = welcomeMessageID.ToString()\n                },\n                Apps = JsonDocument.Parse(\"null\").RootElement\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    newUrl,\n                    new Dictionary<string, string>(),\n                    msgParams,\n                    cancelToken)\n                   .ConfigureAwait(false);\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage? msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            if (msg != null)\n                msg.ID = welcomeMessageID;\n\n            return msg;\n        }\n\n        /// <summary>\n        /// Deletes an existing welcome message rule.\n        /// <param name=\"welcomeMessageRuleID\">ID of the welcome message rule.</param>\n        /// <param name=\"cancelToken\">Async cancellation token.</param>\n        public async Task DeleteWelcomeMessageRuleAsync(ulong welcomeMessageRuleID, CancellationToken cancelToken = default(CancellationToken))\n        {\n            if (welcomeMessageRuleID == 0)\n                throw new ArgumentException($\"{nameof(welcomeMessageRuleID)} is a required parameter, but it's value is 0, which is invalid.\", nameof(welcomeMessageRuleID));\n\n            var newUrl = BaseUrl + \"direct_messages/welcome_messages/rules/destroy.json?id=\" + welcomeMessageRuleID;\n\n            var postData = new Dictionary<string, string>\n            {\n                [\"id\"] = welcomeMessageRuleID.ToString()\n            };\n\n            RawResult =\n                await TwitterExecutor.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    newUrl,\n                    postData,\n                    \"\",\n                    cancelToken)\n                   .ConfigureAwait(false) ?? string.Empty;\n\n            var reqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            WelcomeMessage? msg = reqProc.ProcessActionResult(RawResult, WelcomeMessageType.ShowMessage);\n\n            if (msg != null)\n                msg.ID = welcomeMessageRuleID;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/WelcomeMessages/WelcomeMessage.cs",
    "content": "﻿using System.Xml.Serialization;\nusing System;\nusing LinqToTwitter.Common;\nusing System.Collections.Generic;\nusing System.Text.Json.Serialization;\nusing LinqToTwitter.Common.Entities;\nusing System.Text.Json;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Direct message events support Twitter chatbot messages.\n    /// </summary>\n    [XmlType(Namespace = \"LinqToTwitter\")]\n    public class WelcomeMessage\n    {\n        ///// <summary>\n        ///// Input (New Welcome Message): Name of the Welcome Message\n        ///// </summary>\n        //public string Name { get; set; }\n\n        ///// <summary>\n        ///// Input (New Welcome Message): Welcome Message contents\n        ///// </summary>\n        //public string Text { get; set; }\n\n        /// <summary>\n        /// Number of items to return\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Helps page through results greater than Count items\n        /// </summary>\n        public string? Cursor { get; set; }\n\n        /// <summary>\n        /// Input (New Welcome Message Rule): ID of the message to set as default.\n        /// </summary>\n        public ulong ID { get; internal set; }\n\n        /// <summary>\n        /// Input (All Queries): Type of Welcome Message\n        /// </summary>\n        public WelcomeMessageType? Type { get; set; }\n\n        /// <summary>\n        /// Output: Response from Twitter\n        /// </summary>\n        public WelcomeMessageValue? Value { get; set; }\n    }\n\n    public class WelcomeMessageValue\n    {\n        /// <summary>\n        /// Single Welcome Message\n        /// </summary>\n        [JsonPropertyName(\"welcome_message\")]\n        public WelcomeMsg? WelcomeMessage { get; set; }\n\n        /// <summary>\n        /// Multiple Welcome Messages\n        /// </summary>\n        [JsonPropertyName(\"welcome_messages\")]\n        public List<WelcomeMsg>? WelcomeMessages { get; set; }\n\n        /// <summary>\n        /// A single message rule\n        /// </summary>\n        [JsonPropertyName(\"welcome_message_rule\")]\n        public WelcomeMessageRule? WelcomeMessageRule { get; set; }\n\n        /// <summary>\n        /// Multiple message rules\n        /// </summary>\n        [JsonPropertyName(\"welcome_message_rules\")]\n        public List<WelcomeMessageRule>? WelcomeMessageRules { get; set; }\n\n        /// <summary>\n        /// Show and List queries populate this to show which app created the message.\n        /// You need to use System.Text.Json because the nested object ID is a property matching the app id, \n        /// which is different for every app, precluding the ability to assign a C# property.\n        /// </summary>\n        [JsonPropertyName(\"apps\")]\n        public JsonElement Apps { get; set; }\n\n        /// <summary>\n        /// ID for the next page or null if there isn't a next page\n        /// </summary>\n        [JsonPropertyName(\"next_cursor\")]\n        public string? NextCursor { get; set; }\n    }\n\n    public class WelcomeMsg\n    {\n        [JsonPropertyName(\"id\")]\n        public string? Id { get; set; }\n        [JsonPropertyName(\"created_timestamp\")]\n        public string? CreatedTimestamp { get; set; }\n\n        /// <summary>\n        /// ID of the application creating the Message\n        /// </summary>\n        [JsonPropertyName(\"source_app_id\")]\n        public string? SourceAppId { get; set; }\n        [JsonPropertyName(\"name\")]\n        public string? Name { get; set; }\n        [JsonPropertyName(\"message_data\")]\n        public WelcomeMessageData? MessageData { get; set; }\n\n        DateTime? createdAt;\n        /// <summary>\n        /// Helper property for C# DateTime matching CreatedTimestamp (so you don't have to convert it yourself)\n        /// </summary>\n        [JsonIgnore]\n        public DateTime? CreatedAt\n        {\n            get\n            {\n                if (createdAt == null || createdAt == default(DateTime))\n                    createdAt = CreatedTimestamp?.GetEpochDateFromTimestamp();\n\n                return createdAt;\n            }\n        }\n    }\n\n    public class WelcomeMessageData\n    {\n        [JsonPropertyName(\"text\")]\n        public string? Text { get; set; }\n        [JsonPropertyName(\"entities\")]\n        public Entities? Entities { get; set; }\n        [JsonPropertyName(\"attachment\")]\n        public WelcomeMessageAttachment? Attachment { get; set; }\n    }\n\n    public class WelcomeMessageAttachment\n    {\n        [JsonPropertyName(\"type\")]\n        public string? Type { get; set; }\n        [JsonPropertyName(\"media\")]\n        public WelcomeMessageMedia? Media { get; set; }\n    }\n\n    public class WelcomeMessageMedia\n    {\n        [JsonPropertyName(\"id\")]\n        public string? Id { get; set; }\n    }\n\n    public class WelcomeMessageRule\n    {\n        [JsonPropertyName(\"id\")]\n        public string? ID { get; set; }\n        [JsonPropertyName(\"created_timestamp\")]\n        public string? CreatedTimestamp { get; set; }\n        [JsonPropertyName(\"welcome_message_id\")]\n        public string? WelcomeMessageID { get; set; }\n\n        /// <summary>\n        /// Helper property for C# DateTime matching CreatedTimestamp (so you don't have to convert it yourself)\n        /// </summary>\n        DateTime? createdAt;\n        [JsonIgnore]\n        public DateTime? CreatedAt\n        {\n            get\n            {\n                if (createdAt == default(DateTime))\n                    createdAt = CreatedTimestamp?.GetEpochDateFromTimestamp();\n\n                return createdAt;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/WelcomeMessages/WelcomeMessageRequestProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Processes Twitter Direct Messages.\n    /// </summary>\n    public class WelcomeMessageRequestProcessor<T> :\n        IRequestProcessor<T>,\n        IRequestProcessorWantsJson,\n        IRequestProcessorWithAction<T>\n        where T : class\n    {\n        /// <summary>\n        /// base url for request\n        /// </summary>\n        public virtual string? BaseUrl { get; set; }\n\n        /// <summary>\n        /// Number of items to return\n        /// </summary>\n        public int Count { get; set; }\n\n        /// <summary>\n        /// Helps page through results greater than Count items\n        /// </summary>\n        public string? Cursor { get; set; }\n\n        /// <summary>\n        /// ID of item to show\n        /// </summary>\n        public ulong ID { get; set; }\n\n        /// <summary>\n        /// Type of Welcome Message\n        /// </summary>\n        public WelcomeMessageType Type { get; set; }\n\n        /// <summary>\n        /// extracts parameters from lambda\n        /// </summary>\n        /// <param name=\"lambdaExpression\">lambda expression with where clause</param>\n        /// <returns>dictionary of parameter name/value pairs</returns>\n        public virtual Dictionary<string, string> GetParameters(LambdaExpression lambdaExpression)\n        {\n            var paramFinder =\n               new ParameterFinder<WelcomeMessage>(\n                   lambdaExpression.Body,\n                   new List<string> {\n                       nameof(Count),\n                       nameof(Cursor),\n                       nameof(ID),\n                       nameof(Type)\n                   });\n\n            Dictionary<string, string> parameters = paramFinder.Parameters;\n\n            return parameters;\n        }\n\n        /// <summary>\n        /// builds url based on input parameters\n        /// </summary>\n        /// <param name=\"parameters\">criteria for url segments and parameters</param>\n        /// <returns>URL conforming to Twitter API</returns>\n        public virtual Request BuildUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(Type)))\n                throw new ArgumentException($\"You must set {nameof(Type)}.\", nameof(Type));\n\n            Type = RequestProcessorHelper.ParseEnum<WelcomeMessageType>(parameters[nameof(Type)]);\n\n            switch (Type)\n            {\n                case WelcomeMessageType.ListMessages:\n                    return BuildListMessagesUrl(parameters);\n                case WelcomeMessageType.ListRules:\n                    return BuildListRulesUrl(parameters);\n                case WelcomeMessageType.ShowMessage:\n                    return BuildShowMessagesUrl(parameters);\n                case WelcomeMessageType.ShowRule:\n                    return BuildShowRuleUrl(parameters);\n                default:\n                    throw new InvalidOperationException(\n                        $\"Didn't recognize '{Type}' for {nameof(Type)} parameter in WelcomeMessageRequestProcessor.BuildUrl.\");\n            }\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct messages\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildListMessagesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/list.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(nameof(Count)))\n            {\n                Count = int.Parse(parameters[nameof(Count)]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Cursor)))\n            {\n                Cursor = parameters[nameof(Cursor)];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[nameof(Cursor)]));\n            }\n\n            return req;\n        }\n\n        /// <summary>\n        /// builds an url for getting a list of direct messages\n        /// </summary>\n        /// <param name=\"parameters\">parameters to add</param>\n        /// <returns>new url with parameters</returns>\n        Request BuildListRulesUrl(Dictionary<string, string> parameters)\n        {\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/rules/list.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            if (parameters == null)\n                return req;\n\n            if (parameters.ContainsKey(nameof(Count)))\n            {\n                Count = int.Parse(parameters[nameof(Count)]);\n                urlParams.Add(new QueryParameter(\"count\", Count.ToString(CultureInfo.InvariantCulture)));\n            }\n\n            if (parameters.ContainsKey(nameof(Cursor)))\n            {\n                Cursor = parameters[nameof(Cursor)];\n                urlParams.Add(new QueryParameter(\"cursor\", parameters[nameof(Cursor)]));\n            }\n\n            return req;\n        }\n\n        Request BuildShowMessagesUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(ID)))\n                throw new ArgumentNullException(nameof(ID), $\"{nameof(ID)} is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/show.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[nameof(ID)]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            return req;\n        }\n\n        Request BuildShowRuleUrl(Dictionary<string, string> parameters)\n        {\n            if (parameters == null || !parameters.ContainsKey(nameof(ID)))\n                throw new ArgumentNullException(nameof(ID), $\"{nameof(ID)} is required.\");\n\n            var req = new Request(BaseUrl + \"direct_messages/welcome_messages/rules/show.json\");\n            IList<QueryParameter> urlParams = req.RequestParameters;\n\n            ID = ulong.Parse(parameters[nameof(ID)]);\n            urlParams.Add(new QueryParameter(\"id\", ID.ToString()));\n\n            return req;\n        }\n\n        /// <summary>\n        /// Transforms twitter response into List of Blocks objects\n        /// </summary>\n        /// <param name=\"responseJson\">JSON with Twitter response</param>\n        /// <returns>List of WelcomeMessage</returns>\n        public virtual List<T> ProcessResults(string responseJson)\n        {\n            if (string.IsNullOrWhiteSpace(responseJson))\n                return new List<T>();\n\n            IEnumerable<WelcomeMessage> msgList;\n\n            switch (Type)\n            {\n                case WelcomeMessageType.ListMessages:\n                case WelcomeMessageType.ListRules:\n                case WelcomeMessageType.ShowMessage:\n                case WelcomeMessageType.ShowRule:\n                    msgList = HandleWelcomeMessage(responseJson);\n                    break;\n                default:\n                    msgList = new List<WelcomeMessage>();\n                    break;\n            }\n\n            return msgList.OfType<T>().ToList();\n        }\n\n        IEnumerable<WelcomeMessage> HandleWelcomeMessage(string msgJson)\n        {\n            WelcomeMessageValue? welcomeMsg = JsonSerializer.Deserialize<WelcomeMessageValue>(msgJson);\n\n            return new List<WelcomeMessage>\n            {\n                new WelcomeMessage\n                {\n                    Type = Type,\n                    Count = Count,\n                    Cursor = Cursor,\n                    ID = ID,\n                    Value = welcomeMsg\n                }\n            };\n        }\n\n        public T? ProcessActionResult(string responseJson, Enum theAction)\n        {\n            WelcomeMessage? msg = null;\n\n            if (!string.IsNullOrWhiteSpace(responseJson))\n                msg = new WelcomeMessage\n                {\n                    Value = JsonSerializer.Deserialize<WelcomeMessageValue>(responseJson ?? \"\")\n                };\n            else\n                msg = new WelcomeMessage();\n\n            return msg.ItemCast(default(T));\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter/WelcomeMessages/WelcomeMessageType.cs",
    "content": "﻿namespace LinqToTwitter\n{\n    /// <summary>\n    /// Type of welcome message query\n    /// </summary>\n    public enum WelcomeMessageType\n    {\n        /// <summary>\n        /// All welcome messages\n        /// </summary>\n        ListMessages,\n\n        /// <summary>\n        /// All welcome message rules\n        /// </summary>\n        ListRules,\n\n        /// <summary>\n        /// A single welcome message\n        /// </summary>\n        ShowMessage,\n\n        /// <summary>\n        /// A single welcome message rule\n        /// </summary>\n        ShowRule\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/AccountActivityExtensions.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace LinqToTwitter\n{\n    public static class AccountActivityExtensions\n    {\n        public static string BuildCrcResponse(this AccountActivity accAct, string crc_token, string consumerSecret)\n        {\n            byte[] keyBytes = Encoding.UTF8.GetBytes(consumerSecret);\n            byte[] crcBytes = Encoding.UTF8.GetBytes(crc_token);\n\n            var hmac = new HMACSHA256(keyBytes);\n            var hash = hmac.ComputeHash(crcBytes);\n            var base64Hmac = Convert.ToBase64String(hash);\n\n            return \"sha256=\" + base64Hmac;\n        }\n\n        public static bool IsValidPostSignature(this AccountActivity accAct, HttpRequestMessage request, string message, string consumerSecret)\n        {\n            string webhooksSignature =\n                request?.Headers\n                    ?.GetValues(\"x-twitter-webhooks-signature\")\n                    ?.First()\n                    ?.Replace(\"sha256=\", \"\");\n\n            if (webhooksSignature == null)\n                return false;\n\n            byte[] webhookSignatureByes = Convert.FromBase64String(webhooksSignature);\n\n            byte[] keyBytes = Encoding.UTF8.GetBytes(consumerSecret);\n            byte[] contentBytes = Encoding.UTF8.GetBytes(message);\n\n            var hmac = new HMACSHA256(keyBytes);\n            var contentHash = hmac.ComputeHash(contentBytes);\n\n            if (!SecureCompareEqual(webhookSignatureByes, contentHash))\n                return false;\n\n            return true;\n        }\n\n        /// <summary>\n        /// Avoid timing attack - see https://en.wikipedia.org/wiki/Timing_attack for more details.\n        /// </summary>\n        /// <param name=\"arrayA\">First byte[].</param>\n        /// <param name=\"arrayB\">Second byte[].</param>\n        /// <returns>True if both arrays are equal.</returns>\n        static bool SecureCompareEqual(byte[] arrayA, byte[] arrayB)\n        {\n            if (arrayA.Length != arrayB.Length)\n                return false;\n\n            int result = 0;\n            for (int i = 0; i < arrayA.Length; i++)\n                result |= (arrayA[i] ^ arrayB[i]);\n\n            return result == 0;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/AspNetAuthorizer.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class AspNetAuthorizer : AuthorizerBase, IAuthorizer\n    {\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public new Uri Callback { get; set; }\n\n        /// <summary>\n        /// This is a hook where you can assign\n        /// a lambda to perform the technology\n        /// specific redirection action.\n        /// \n        /// The string passed as the lambda paramter\n        /// is the Twitter authorization URL.\n        /// </summary>\n        public Action<string> GoToTwitterAuthorization { get; set; }\n\n        public AspNetAuthorizer()\n            : base(false, AuthAccessType.NoChange, null) { }\n\n        public AspNetAuthorizer(bool forceLogin)\n            : base(forceLogin, AuthAccessType.NoChange, null) { }\n\n        public AspNetAuthorizer(bool forceLogin, AuthAccessType accessType)\n            : base(forceLogin, accessType, null) { }\n\n        public AspNetAuthorizer(bool forceLogin, AuthAccessType accessType, string preFillScreenName)\n            : base(forceLogin, accessType, preFillScreenName) { }\n\n        /// <summary>\n        /// Perform authorization\n        /// </summary>\n        public Task AuthorizeAsync()\n        {\n            throw new InvalidOperationException(\n                \"For ASP.NET apps, you should use BeginAuthorization and CompleteAuthorization instead. Please visit the LINQ to Twitter documentation and samples for examples on how to do this.\");\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        public async Task BeginAuthorizeAsync()\n        {\n            await BeginAuthorizeAsync(Callback).ConfigureAwait(false);\n        }\n\n        /// <summary>\n        /// First part of the authorization sequence that:\n        /// 1. Obtains a request token and then\n        /// 2. Redirects to the Twitter authorization page\n        /// </summary>\n        /// <param name=\"callback\">This is where you want Twitter to redirect to after authorization</param>\n        public virtual async Task BeginAuthorizeAsync(Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (CredentialStore == null)\n                throw new NullReferenceException(\n                    \"The authorization process requires a minimum of ConsumerKey and ConsumerSecret tokens. \" +\n                    \"You must assign the CredentialStore property (with tokens) before calling AuthorizeAsync().\");\n\n            if (CredentialStore.HasAllCredentials())\n                throw new InvalidOperationException(\n                    \"Your LINQ to Twitter Authorizer already has all credentials assigned to it. In this \" +\n                    \"case, You don't need to re-authorize because having the OAuthToken/AccessToken and \" +\n                    \"OAuthTokenSecret/AccessTokenSecret means that you already have the user's credentials \" +\n                    \"and re-authorization isn't required. If for some reason, these credentials are not \" +\n                    \"working (e.g. the user might have removed your app from their Twitter app list). Set the \" +\n                    \"OAuthToken/AccessToken and OAuthTokenSecret/AccessTokenSecret in the authorizer's credential \" +\n                    \"store to 'null' and then re-authorize. Tip: Call Authorizer.CredentialStore.HasAllCredentials() \" +\n                    \"to see if all of the credentials are already populated. Additionally, if you meant to authorize \" +\n                    \"for a different user, you can call Authorizer.CredentialStore.ClearAsync() to remove the \" +\n                    \"previous user's credentials. (just make sure you've re-loaded your consumerKey and consumerSecret).\");\n\n            if (string.IsNullOrWhiteSpace(CredentialStore.ConsumerKey) || string.IsNullOrWhiteSpace(CredentialStore.ConsumerSecret))\n                throw new ArgumentException(\"You must populate CredentialStore with ConsumerKey and ConsumerSecret tokens before calling AuthorizeAsync.\", \"CredentialStore\");\n\n            if (GoToTwitterAuthorization == null)\n                throw new InvalidOperationException(\"You must provide an Action<string> delegate/lambda for GoToTwitterAuthorization.\");\n\n            string callbackString = callback.ToString();\n\n            if (parameters != null)\n            {\n                var paramsList = new List<string>();\n                foreach (var parm in parameters)\n                {\n                    Parameters.Add(parm);\n                    paramsList.Add($\"{parm.Key}={parm.Value}\");\n                }\n\n                string queryString = \"?\" + string.Join(\"&\", paramsList);\n\n                OAuthRequestTokenUrl += queryString;\n                callbackString += queryString;\n            }\n\n            await GetRequestTokenAsync(callbackString).ConfigureAwait(false);\n\n            string authUrl = PrepareAuthorizeUrl(ForceLogin);\n            GoToTwitterAuthorization(authUrl);\n        }\n\n        /// <summary>\n        /// After the user Authorizes the app, Twitter will \n        /// redirect to the responseUrl url, provided during \n        /// BeginAuthorization. When redirecting, Twitter will \n        /// also provide oauth_verifier and oauth_token \n        /// parameters. This method uses those parameters to \n        /// request an access token, which is used automatically\n        /// by LINQ to Twitter when executing queries.\n        /// </summary>\n        /// <param name=\"responseUrl\">\n        /// URL that Twitter redirected to after authorization.\n        /// We need this because it contains important parameters\n        /// we need to finish the OAuth process.\n        /// </param>\n        /// <returns>True if successful</returns>\n        public virtual async Task CompleteAuthorizeAsync(Uri responseUrl)\n        {\n            if (responseUrl == null)\n                throw new ArgumentNullException(\"responseUrl\", \"You must pass in the callback that Twitter returned after authentication.\");\n\n            if (CredentialStore.HasAllCredentials()) return;\n\n            string pin = ParseVerifierFromResponseUrl(responseUrl.ToString());\n\n            var accessTokenParams = new Dictionary<string, string>\n            {\n                { \"oauth_verifier\", pin }\n            };\n            await GetAccessTokenAsync(accessTokenParams).ConfigureAwait(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/AspNetSignInAuthorizer.cs",
    "content": "﻿using LinqToTwitter.OAuth;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class AspNetSignInAuthorizer : AspNetAuthorizer, IAuthorizer\n    {\n        public AspNetSignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/LinqToTwitter.AspNet.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n    <Version>6.15.0</Version>\n    <Authors>Joe Mayo</Authors>\n    <Company>Joe Mayo</Company>\n    <Product>LINQ to Twitter for ASP.NET</Product>\n    <Description>LINQ to Twitter is a 3rd party LINQ Provider that lets you tweet and query with the Twitter API.\n\nThis library has ASP.NET authorizers and SessionStateCredentialCache that you'll need for ASP.NET Core 5 applications.</Description>\n    <Copyright>LINQ to Twitter</Copyright>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <PackageProjectUrl>https://github.com/JoeMayo/LinqToTwitter</PackageProjectUrl>\n    <PackageIcon>200xColor_2.png</PackageIcon>\n    <RepositoryUrl>https://github.com/JoeMayo/LinqToTwitter</RepositoryUrl>\n    <RepositoryType></RepositoryType>\n    <PackageTags>twitter twitterapi twitterdev tweet linq social linqtotwitter linq2twitter</PackageTags>\n    <PackageReleaseNotes>\nNote: In previous versions of LINQ to Twitter, this was included in the `linqtotwitter` package. In version 6, ASP.NET Core 5 support is a separate package with a dependency on `linqtotwitter` v6.0+.\n\n- Fixed bug were omitting offline.access scope in OAuth2SessionStateCredentialStore throws a NullReferenceException.\n\t</PackageReleaseNotes>\n    <PackageReadmeFile>ReadMe.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Core\" Version=\"2.2.5\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Session\" Version=\"2.2.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter\\LinqToTwitter.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"..\\..\\..\\BuildScripts\\200xColor_2.png\">\n      <Pack>True</Pack>\n      <PackagePath></PackagePath>\n    </None>\n    <None Include=\"..\\..\\..\\ReadMe.md\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/MvcAuthorizer.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class MvcAuthorizer : AspNetAuthorizer\n    {\n        string _authUrl;\n\n        public async Task<ActionResult> BeginAuthorizationAsync()\n        {\n            return await BeginAuthorizationAsync(Callback).ConfigureAwait(false);\n        }\n\n        public async Task<ActionResult> BeginAuthorizationAsync(Uri callback, Dictionary<string, string> parameters = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { _authUrl = authUrl; };\n\n            Callback = callback;\n\n            await base.BeginAuthorizeAsync(callback, parameters).ConfigureAwait(false);\n\n            return new RedirectResult(_authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/MvcOAuth2Authorizer.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class MvcOAuth2Authorizer : OAuth2Authorizer\n    {\n        string authUrl;\n\n        public new async Task<ActionResult> BeginAuthorizeAsync(string state = null)\n        {\n            if (GoToTwitterAuthorization == null)\n                GoToTwitterAuthorization = authUrl => { this.authUrl = authUrl; };\n\n            await base.BeginAuthorizeAsync(state).ConfigureAwait(false);\n\n            return new RedirectResult(authUrl);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/MvcSignInAuthorizer.cs",
    "content": "﻿using LinqToTwitter.OAuth;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Implements the \"Sign-in With Twitter\" feature\n    /// </summary>\n    public class MvcSignInAuthorizer : MvcAuthorizer, IAuthorizer\n    {\n        public MvcSignInAuthorizer()\n        {\n            OAuthAuthorizeUrl = \"https://api.twitter.com/oauth/authenticate\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/OAuth2SessionCredentialStore.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing Microsoft.AspNetCore.Http;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    /// <summary>\n    /// Credential Store for ASP.NET applications - Uses Session State\n    /// </summary>\n    public class OAuth2SessionCredentialStore : OAuth2CredentialStore\n    {\n        readonly ISession session;\n\n        public OAuth2SessionCredentialStore(IHttpContextAccessor httpCtx)\n        {\n            session = httpCtx.HttpContext.Session;         \n        }\n\n        public OAuth2SessionCredentialStore(ISession session)\n        {\n            this.session = session;\n        }\n\n        /// <summary>\n        /// Required for all clients - you can find this in the Twitter Developer portal\n        /// </summary>\n        public override string ClientID\n        {\n            get\n            {\n                return session.GetString(\"OAuth2ClientID\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2ClientID\", value ?? string.Empty);\n            }\n        }\n\n        /// <summary>\n        /// Required for confidential clients - you can find this in the Twitter Developer portal\n        /// </summary>\n        public override string ClientSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuth2ClientSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2ClientSecret\", value ?? string.Empty);\n            }\n        }\n\n        /// <summary>\n        /// Send when authorizing and getting access token to verify original source\n        /// </summary>\n        public override string CodeChallenge\n        {\n            get\n            {\n                return session.GetString(\"OAuth2CodeChallenge\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2CodeChallenge\", value ?? string.Empty);\n            }\n        }\n\n        /// <summary>\n        /// Required - these are the permissions you want the user to give your app.\n        /// See endpoint documentation for what scopes are required.\n        /// </summary>\n        public override IEnumerable<string> Scopes\n        {\n            get\n            {\n                return \n                    session\n                        .GetString(\"OAuth2Scopes\")\n                        .Split(' ')\n                        .ToList();\n            }\n            set\n            {\n                if (value != null)\n                    session\n                        .SetString(\n                            \"OAuth2Scopes\", \n                            string.Join(' ', value));\n            }\n        }\n\n        /// <summary>\n        /// Populated after user approves your app and used for each command/query\n        /// </summary>\n        public override string AccessToken\n        {\n            get\n            {\n                return session.GetString(\"OAuth2AccessToken\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2AccessToken\", value ?? string.Empty);\n            }\n        }\n\n        /// <summary>\n        /// Can be used to get a new AccessToken - only available if you authorized with `offline.access` scope.\n        /// </summary>\n        public override string RefreshToken\n        {\n            get\n            {\n                return session.GetString(\"OAuth2RefreshToken\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2RefreshToken\", value ?? string.Empty);\n            }\n        }\n\n        /// <summary>\n        /// Url that Twitter redirects to after user authorizes your app\n        /// </summary>\n        public override string RedirectUri\n        {\n            get\n            {\n                return session.GetString(\"OAuth2Callback\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2Callback\", value ?? string.Empty);\n            }\n        }\n\n        /// <summary>\n        /// Value to verify against what was sent to Twitter and what was received.\n        /// Helps prevent CSRF attack.\n        /// </summary>\n        public override string State\n        {\n            get\n            {\n                return session.GetString(\"OAuth2State\");\n            }\n            set\n            {\n                session.SetString(\"OAuth2State\", value ?? string.Empty);\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            session.Remove(\"OAuth2ClientID\");\n            session.Remove(\"OAuth2ClientSecret\");\n            session.Remove(\"OAuth2CodeChallenge\");\n            session.Remove(\"OAuth2Scopes\");\n            session.Remove(\"OAuth2AccessToken\");\n            session.Remove(\"OAuth2RefreshToken\");\n            session.Remove(\"OAuth2Callback\");\n            session.Remove(\"OAuth2State\");\n\n            return Task.CompletedTask;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.AspNet/SessionStateCredentialStore.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing Microsoft.AspNetCore.Http;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter\n{\n    public class SessionStateCredentialStore : InMemoryCredentialStore\n    {\n        readonly ISession session;\n\n        public SessionStateCredentialStore(IHttpContextAccessor httpCtx)\n        {\n            session = httpCtx.HttpContext.Session;         \n        }\n\n        public SessionStateCredentialStore(ISession session)\n        {\n            this.session = session;\n        }\n\n        public override string ConsumerKey\n        {\n            get\n            {\n                return session.GetString(\"OAuthConsumerKey\");\n            }\n            set\n            {\n                session.SetString(\"OAuthConsumerKey\", value);\n            }\n        }\n\n        public override string ConsumerSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuthConsumerSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuthConsumerSecret\", value);\n            }\n        }\n\n        public override string OAuthToken\n        {\n            get\n            {\n                return session.GetString(\"OAuthToken\");\n            }\n            set\n            {\n                session.SetString(\"OAuthToken\", value);\n            }\n        }\n\n        public override string OAuthTokenSecret\n        {\n            get\n            {\n                return session.GetString(\"OAuthTokenSecret\");\n            }\n            set\n            {\n                session.SetString(\"OAuthTokenSecret\", value);\n            }\n        }\n\n        public override string ScreenName\n        {\n            get\n            {\n                return session.GetString(\"ScreenNameToken\");\n            }\n            set\n            {\n                session.SetString(\"ScreenNameToken\", value);\n            }\n        }\n\n        public override ulong UserID\n        {\n            get\n            {\n                string userIDString = session.GetString(\"UserIdToken\");\n                ulong.TryParse(userIDString, out ulong userID);\n                return userID;\n            }\n            set\n            {\n                session.SetString(\"UserIdToken\", value.ToString());\n            }\n        }\n\n        public override Task ClearAsync()\n        {\n            session.Remove(\"OAuthConsumerKey\");\n            session.Remove(\"OAuthConsumerSecret\");\n            session.Remove(\"OAuthToken\");\n            session.Remove(\"OAuthTokenSecret\");\n            session.Remove(\"ScreenNameToken\");\n            session.Remove(\"UserIdToken\");\n\n            return Task.CompletedTask;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/AccountActivityTests/AccountActivityCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.AccountActivityTests\n{\n    [TestClass]\n    public class AccountActivityCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public AccountActivityCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void AccountActivityRequestProcessor_Works_With_Actions()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>();\n\n            Assert.IsInstanceOfType(accActReqProc, typeof(IRequestProcessorWithAction<AccountActivity>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(AccountActivityResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<AccountActivity>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<AccountActivity>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithWebhookParameter_PopulatesInputParametersInResponse()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithWebhookID_ReturnsCreatedAccountActivity()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            SubscriptionValue subsVal = accAct.SubscriptionValue;\n            Assert.IsNotNull(subsVal);\n            Assert.IsTrue(subsVal.IsSubscribed);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithValidParameters_LeavesNullRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNull(ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivitySubscriptionAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1/subscriptions.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivityValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivitySubscriptionAsync_WithZeroWebhookID_Throws()\n        {\n            const int WebhookID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddAccountActivitySubscriptionAsync(WebhookID));\n\n            Assert.AreEqual(\"webhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithUrlParameter_PopulatesInputParametersInResponse()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivityWebhookAsync(Url);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(Url, accAct.Url);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithUrlParameter_ReturnsCreatedAccountActivity()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.AddAccountActivityWebhookAsync(Url);\n\n            Assert.IsNotNull(accAct);\n            WebhooksValue accActVal = accAct.WebhooksValue;\n            Assert.IsNotNull(accActVal);\n            Webhook[] webhooks = accActVal.Webhooks;\n            Assert.IsNotNull(webhooks);\n            Assert.AreEqual(1, webhooks.Length);\n            Webhook webhook = webhooks[0];\n            Assert.IsNotNull(webhook);\n            Assert.AreEqual(\"921246280768151552\", webhook.ID);\n            Assert.AreEqual(\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\", webhook.Url);\n            Assert.IsTrue(webhook.Valid);\n            Assert.AreEqual(\"2017-10-20 05:26:44 +0000\", webhook.CreatedTimestamp);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivityWebhookAsync(Url);\n\n            Assert.AreEqual(AccountActivityResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithValidParameters_ConstructsUrl()\n        {\n            const string Url = \"https://www.example.com/api/accountactivity\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.AddAccountActivityWebhookAsync(Url);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<AccountActivity>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithNullUrl_Throws()\n        {\n            const string Url = null;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddAccountActivityWebhookAsync(Url));\n\n            Assert.AreEqual(\"url\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddAccountActivityWebhookAsync_WithEmptyUrl_Throws()\n        {\n            const string Url = \"\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddAccountActivityWebhookAsync(Url));\n\n            Assert.AreEqual(\"url\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithWebhookParameter_PopulatesInputParametersInResponse()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithWebhookID_ReturnsCreatedAccountActivity()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithValidParameters_SetsNullRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            Assert.IsNull(ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.SendAccountActivityCrcAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivityValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task SendAccountActivityCrcAsync_WithZeroWebhookID_Throws()\n        {\n            const int WebhookID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.SendAccountActivityCrcAsync(WebhookID));\n\n            Assert.AreEqual(\"webhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithWebhookParameter_PopulatesInputParametersInResponse()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithWebhookID_ReturnsCreatedAccountActivity()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            AccountActivity accAct = await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNotNull(accAct);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithValidParameters_SetsNullRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            Assert.IsNull(ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1/subscriptions.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivityValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivitySubscriptionAsync_WithZeroWebhookID_Throws()\n        {\n            const int WebhookID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteAccountActivitySubscriptionAsync(WebhookID));\n\n            Assert.AreEqual(\"webhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivityWebhookAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivityWebhookAsync(WebhookID);\n\n            Assert.AreEqual(AccountActivityResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteAccountActivityWebhookAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WebhookID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteAccountActivityWebhookAsync(WebhookID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/1.1/account_activity/webhooks/1.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<AccountActivity>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        const string AccountActivityResponse = @\"{\n\t\"\"id\"\": \"\"921246280768151552\"\",\n\t\"\"url\"\": \"\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\"\",\n\t\"\"valid\"\": true,\n\t\"\"created_timestamp\"\": \"\"2017-10-20 05:26:44 +0000\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/AccountActivityTests/AccountActivityRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.AccountActivityTests\n{\n    [TestClass]\n    public class AccountActivityRequestProcessorTests\n    {\n        public AccountActivityRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithSubscriptionsType_ConstructsUrl()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/account_activity/webhooks/1/subscriptions.json\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountActivityType.Subscriptions).ToString(CultureInfo.InvariantCulture) },\n                        { \"WebhookID\", \"1\" }\n                };\n\n            Request req = accActReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithWebhooksType_ConstructsUrl()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/account_activity/webhooks.json\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)AccountActivityType.Webhooks).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = accActReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForSubscriptionsWithoutWebhookID_Throws()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountActivityType.Subscriptions).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"WebhookID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => accActReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"WebhookID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForWebhooks_HandlesSingleResult()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Webhooks\n            };\n\n            List<AccountActivity> accActs = accActReqProc.ProcessResults(WebhooksResponse);\n\n            Assert.IsNotNull(accActs?.SingleOrDefault());\n\n            AccountActivity accAct = accActs.First();\n\n            Assert.IsNotNull(accAct);\n            WebhooksValue webhooksVal = accAct.WebhooksValue;\n            Assert.IsNotNull(webhooksVal);\n            Webhook[] webhooks = webhooksVal.Webhooks;\n            Assert.IsNotNull(webhooks);\n            Assert.AreEqual(1, webhooks.Length);\n            Webhook webhook = webhooks.First();\n            Assert.IsNotNull(webhook);\n            Assert.AreEqual(\"920835776169910272\", webhook.ID);\n            Assert.AreEqual(\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\", webhook.Url);\n            Assert.IsTrue(webhook.Valid);\n            Assert.AreEqual(\"2017-10-19 02:15:32 +0000\", webhook.CreatedTimestamp);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForSubscriptions_HandlesResult()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Subscriptions,\n                WebhookID = 1\n            };\n\n            List<AccountActivity> accActs = accActReqProc.ProcessResults(\"\");\n\n            AccountActivity accAct = accActs?.SingleOrDefault();\n            Assert.IsNotNull(accAct);\n            SubscriptionValue subsVal = accAct.SubscriptionValue;\n            Assert.IsNotNull(subsVal);\n            Assert.IsTrue(subsVal.IsSubscribed);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithWebhooksQuery_ReplacesInputParams()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Webhooks\n            };\n\n            List<AccountActivity> accActList = accActReqProc.ProcessResults(WebhooksResponse);\n\n            AccountActivity accAct = accActList.First();\n\n            Assert.AreEqual(AccountActivityType.Webhooks, accAct.Type);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithSubscriptionsQuery_ReplacesInputParams()\n        {\n            const ulong WebhookID = 4;\n\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = AccountActivityType.Subscriptions,\n                WebhookID = WebhookID\n            };\n\n            List<AccountActivity> accActs = accActReqProc.ProcessResults(\"\");\n\n            AccountActivity accAct = accActs.First();\n            Assert.AreEqual(WebhookID, accAct.WebhookID);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity>();\n            Expression<Func<AccountActivity, bool>> expression =\n                dm =>\n                    dm.Type == AccountActivityType.Subscriptions &&\n                    dm.WebhookID == 1;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = accActReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)AccountActivityType.Subscriptions).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"WebhookID\", \"1\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithMissingType_Throws()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => accActReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParamDictionary_Throws()\n        {\n            var accActReqProc = new AccountActivityRequestProcessor<AccountActivity> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => accActReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        const string WebhooksResponse = @\"[{\n\t\"\"id\"\": \"\"920835776169910272\"\",\n\t\"\"url\"\": \"\"https://accountactivitydemo.azurewebsites.net/api/accountactivity\"\",\n\t\"\"valid\"\": true,\n\t\"\"created_timestamp\"\": \"\"2017-10-19 02:15:32 +0000\"\"\n}]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/AccountTests/AccountCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.AccountTests\n{\n    [TestClass]\n    public class AccountCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public AccountCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<Account>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostImageAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.mayosoftware.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountProfileAsync(Name, Url, Location, Description, true, SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/update_profile.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ExpectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_WithRawResult_Succeeds()\n        {\n            const string Name = \"Twitter API\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountProfileAsync(Name, Url, Location, Description, true, SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Null_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(null, null, null, null, true, false));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Name_Over_20_Chars()\n        {\n            const string ExpectedParamName = \"name\";\n            string name = new string(Enumerable.Repeat('x', 51).ToArray());\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"San Francisco, CA\";\n            const string Description = \"The Real Twitter API.\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(name, Url, Location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfile_Throws_On_Url_Over_100_Chars()\n        {\n            const string ExpectedParamName = \"url\";\n            const string Name = \"Joe\";\n            var url = new string(Enumerable.Repeat('x', 101).ToArray());\n            const string Location = \"Denver, CO\";\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, url, Location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Location_Over_30_Chars()\n        {\n            const string ExpectedParamName = \"location\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            var location = new string(Enumerable.Repeat('x', 31).ToArray());\n            const string Description = \"Open source developer for LINQ to Twitter\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, Url, location, Description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountProfileAsync_Throws_On_Description_Over_160_Chars()\n        {\n            const string ExpectedParamName = \"description\";\n            const string Name = \"Joe\";\n            const string Url = \"http://www.csharp-station.com\";\n            const string Location = \"Denver, CO\";\n            var description = new string(Enumerable.Repeat('x', 161).ToArray());\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountProfileAsync(Name, Url, Location, description, true, SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Invokes_Executor_Execute()\n        {\n            const string ExpectedName = \"Twitter API\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateAccountImageAsync(new byte[] { 1 }, \"myFile.jpg\", \"jpg\", SkipStatus);\n\n            execMock.Verify(exec =>\n                exec.PostImageAsync(\n                    \"https://api.twitter.com/1.1/account/update_profile_image.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ExpectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_WithRawResult_Succeeds()\n        {\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateAccountImageAsync(new byte[] { 1 }, \"myFile.jpg\", \"jpg\", SkipStatus);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Throws_On_Empty_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountImageAsync(new byte[] { }, \"myImage.jpg\", \"jpg\", SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountImageAsync_Throws_On_Null_Image()\n        {\n            const string ExpectedParamName = \"image\";\n            const bool SkipStatus = true;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountImageAsync(null, \"myImage.jpg\", \"jpg\", SkipStatus));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"time_zone\", \"MST\" },\n                { \"lang\", \"en\" },\n                { \"trend_location_woeid\", \"1\" },\n                { \"sleep_time_enabled\", \"true\" },\n                { \"start_sleep_time\", \"20\" },\n                { \"end_sleep_time\", \"6\" },\n            };\n\n            Account acct = await ctx.UpdateAccountSettingsAsync(1, true, 20, 6, \"MST\", \"en\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Account>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/settings.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(acct);\n            Settings settings = acct.Settings;\n            Assert.IsNotNull(settings);\n            Assert.AreEqual(\"en\", settings.Language);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_WithRawResult_Succeeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);\n\n            await ctx.UpdateAccountSettingsAsync(1, true, 20, 6, \"MST\", \"en\");\n\n            Assert.AreEqual(SettingsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateAccountSettingsAsync_Throws_On_No_Input()\n        {\n            const string ExpectedParamName = \"NoInput\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateAccountSettingsAsync(null, null, null, null, null, null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Invokes_Executor_Execute()\n        {\n            byte[] banner = new byte[] { 1, 2, 3 };\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.UpdateProfileBannerAsync(banner);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/update_profile_banner.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(actual);\n            Assert.IsNull(actual.Name); // Twitter no longer responds with the User account.\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_WithRawResult_Succeeds()\n        {\n            byte[] banner = new byte[] { 1, 2, 3 };\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.UpdateProfileBannerAsync(banner);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Null_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = null;\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateProfileBannerAsync_Throws_On_Empty_Banner()\n        {\n            const string ExpectedParamName = \"banner\";\n            byte[] banner = new byte[0];\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateProfileBannerAsync(banner));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RemoveProfileBannerAsync_Invokes_Executor_Execute()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.RemoveProfileBannerAsync();\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/account/remove_profile_banner.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.IsNotNull(actual);\n        }\n\n        [TestMethod]\n        public async Task RemoveProfileBannerAsync_WithRawResult_Succeeds()\n        {\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.RemoveProfileBannerAsync();\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string SettingsResponse = @\"{\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n   \"\"protected\"\":false,\n   \"\"geo_enabled\"\":false,\n   \"\"time_zone\"\":{\n      \"\"name\"\":\"\"Mountain Time (US & Canada)\"\",\n      \"\"utc_offset\"\":-25200,\n      \"\"tzinfo_name\"\":\"\"America\\/Denver\"\"\n   },\n   \"\"sleep_time\"\":{\n      \"\"enabled\"\":true,\n      \"\"start_time\"\":20,\n      \"\"end_time\"\":8\n   },\n   \"\"show_all_inline_media\"\":true,\n   \"\"discoverable_by_email\"\":true,\n   \"\"trend_location\"\":[\n      {\n         \"\"woeid\"\":23424977,\n         \"\"name\"\":\"\"United States\"\",\n         \"\"country\"\":\"\"United States\"\",\n         \"\"countryCode\"\":\"\"US\"\",\n         \"\"placeType\"\":{\n            \"\"name\"\":\"\"Country\"\",\n            \"\"code\"\":12\n         },\n         \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424977\"\",\n         \"\"parentid\"\":1\n      }\n   ],\n   \"\"language\"\":\"\"en\"\",\n   \"\"always_use_https\"\":true\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/AccountTests/AccountRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.AccountTests\n{\n    [TestClass]\n    public class AccountRequestProcessorTests\n    {\n        public AccountRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_VerifyCredentials()\n        {\n            var target = new AccountRequestProcessor<Account> { Type = AccountType.VerifyCredentials };\n\n            List<Account> actual = target.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            var acct = actual.Cast<Account>().ToList().FirstOrDefault();\n            Assert.IsNotNull(acct);\n            Assert.AreEqual(\"Joe Mayo\", acct.User.Name);\n        }\n\n        [TestMethod]\n        public void HandleSettingsResponse_Converts_Settings_To_Account()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>();\n\n            Account acct = acctReqProc.HandleSettingsResponse(TestSettingsResponse);\n\n            Assert.IsNotNull(acct);\n            Assert.IsNotNull(acct.Settings);\n            var settings = acct.Settings;\n            Assert.IsNotNull(settings.TimeZone);\n            var timeZone = settings.TimeZone;\n            Assert.AreEqual(\"Mountain Time (US & Canada)\", timeZone.Name);\n            Assert.AreEqual(-21600, timeZone.UtcOffset);\n            Assert.AreEqual(\"America/Denver\", timeZone.TzInfoName);\n            Assert.AreEqual(\"Mayoster\", settings.ScreenName);\n            Assert.AreEqual(true, settings.AlwaysUseHttps);\n            Assert.AreEqual(true, settings.UseCookiePersonalization);\n            Assert.IsNotNull(settings.SleepTime);\n            var sleepTime = settings.SleepTime;\n            Assert.AreEqual(true, sleepTime.Enabled);\n            Assert.AreEqual(20, sleepTime.StartHour);\n            Assert.AreEqual(0, sleepTime.EndHour);\n            Assert.AreEqual(true, settings.GeoEnabled);\n            Assert.AreEqual(\"en\", settings.Language);\n            Assert.AreEqual(true, settings.DiscoverableByEmail);\n            Assert.AreEqual(true, settings.DiscoverableByMobilePhone);\n            Assert.AreEqual(true, settings.DisplaySensitiveMedia);\n            Assert.AreEqual(\"all\", settings.AllowContributorRequest);\n            Assert.AreEqual(\"following\", settings.AllowDmsFrom);\n            Assert.AreEqual(\"following\", settings.AllowDmGroupsFrom);\n            Assert.IsNotNull(settings.TrendLocation);\n            var trendLocation = settings.TrendLocation;\n            Assert.AreEqual(\"Las Vegas\", trendLocation.Name);\n            Assert.AreEqual(\"US\", trendLocation.CountryCode);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/2436704\", trendLocation.Url);\n            Assert.AreEqual(2436704, trendLocation.WoeID);\n            Assert.AreEqual(\"Town\", trendLocation.PlaceTypeName);\n            Assert.AreEqual(7, trendLocation.PlaceTypeNameCode);\n            Assert.AreEqual(\"23424977\", trendLocation.ParentID);\n            Assert.AreEqual(\"United States\", trendLocation.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var accts = reqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, accts.Count);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var target = new AccountRequestProcessor<Account>();\n            Expression<Func<Account, bool>> expression =\n                acct =>\n                    acct.Type == AccountType.Settings &&\n                    acct.SkipStatus == true &&\n                    acct.IncludeEntities == true &&\n                    acct.IncludeEmail == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEmail\", \"True\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_VerifyCredentials_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/verify_credentials.json?skip_status=true&include_entities=false&include_email=true\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.VerifyCredentials).ToString(CultureInfo.InvariantCulture) },\n                        { \"SkipStatus\", true.ToString() },\n                        { \"IncludeEntities\", false.ToString() },\n                        { \"IncludeEmail\", true.ToString() }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Settings_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/account/settings.json\";\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)AccountType.Settings).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = acctReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_Null_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => acctReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var acctReqProc = new AccountRequestProcessor<Account>\n            {\n                Type = AccountType.VerifyCredentials,\n                SkipStatus = true,\n                IncludeEntities = true\n            };\n\n            var accounts = acctReqProc.ProcessResults(TestVerifyCredentialsQueryResponse);\n\n            Assert.IsNotNull(accounts);\n            Assert.IsNotNull(accounts.SingleOrDefault());\n            var account = accounts.Single();\n            Assert.AreEqual(AccountType.VerifyCredentials, account.Type);\n            Assert.IsTrue(account.SkipStatus);\n            Assert.IsTrue(account.IncludeEntities);\n        }\n\n        const string TestVerifyCredentialsQueryResponse = @\"{\n   \"\"statuses_count\"\":1624,\n   \"\"favourites_count\"\":65,\n   \"\"protected\"\":false,\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a2.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\",\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"default_profile\"\":false,\n   \"\"listed_count\"\":101,\n   \"\"following\"\":false,\n   \"\"profile_background_tile\"\":false,\n   \"\"utc_offset\"\":-25200,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; MVP; interested in C#, MVC, and Language Integrated Query (LINQ)\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"contributors_enabled\"\":false,\n   \"\"verified\"\":false,\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"followers_count\"\":875,\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\\/\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":2,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"id_str\"\":\"\"115131137906589696\"\",\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":115131137906589696,\n      \"\"created_at\"\":\"\"Sat Sep 17 18:32:56 +0000 2011\"\",\n      \"\"possibly_sensitive\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Visual Studio 11 Developer Preview: http:\\/\\/t.co\\/fISuavMD\"\"\n   },\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"geo_enabled\"\":true,\n   \"\"profile_use_background_image\"\":true,\n   \"\"friends_count\"\":161,\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"is_translator\"\":false,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"id\"\":15411837,\n   \"\"follow_request_sent\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a1.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/520626655\\/JoeTwitterBW_-_150_x_150_normal.jpg\"\"\n}\";\n\n        const string TestSettingsResponse = @\"{\n\t\"\"time_zone\"\": {\n\t\t\"\"name\"\": \"\"Mountain Time (US & Canada)\"\",\n\t\t\"\"utc_offset\"\": -21600,\n\t\t\"\"tzinfo_name\"\": \"\"America\\/Denver\"\"\n\t},\n\t\"\"protected\"\": true,\n\t\"\"screen_name\"\": \"\"Mayoster\"\",\n\t\"\"always_use_https\"\": true,\n\t\"\"use_cookie_personalization\"\": true,\n\t\"\"sleep_time\"\": {\n\t\t\"\"enabled\"\": true,\n\t\t\"\"end_time\"\": 0,\n\t\t\"\"start_time\"\": 20\n\t},\n\t\"\"geo_enabled\"\": true,\n\t\"\"language\"\": \"\"en\"\",\n\t\"\"discoverable_by_email\"\": true,\n\t\"\"discoverable_by_mobile_phone\"\": true,\n\t\"\"display_sensitive_media\"\": true,\n\t\"\"allow_contributor_request\"\": \"\"all\"\",\n\t\"\"allow_dms_from\"\": \"\"following\"\",\n\t\"\"allow_dm_groups_from\"\": \"\"following\"\",\n\t\"\"trend_location\"\": [{\n\t\t\"\"name\"\": \"\"Las Vegas\"\",\n\t\t\"\"countryCode\"\": \"\"US\"\",\n\t\t\"\"url\"\": \"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/2436704\"\",\n\t\t\"\"woeid\"\": 2436704,\n\t\t\"\"placeType\"\": {\n\t\t\t\"\"name\"\": \"\"Town\"\",\n\t\t\t\"\"code\"\": 7\n\t\t},\n\t\t\"\"parentid\"\": 23424977,\n\t\t\"\"country\"\": \"\"United States\"\"\n\t}]\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/BlocksTests/BlocksCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.BlocksTests\n{\n    [TestClass]\n    public class BlocksCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public BlocksCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BlocksRequestProcessor_Works_With_Actions()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(blocksReqProc, typeof(IRequestProcessorWithAction<User>));\n        }\n\n        TwitterContext InitializeTwitterContext(string response)\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task BlockUserAsync_Handles_Response()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(BlockUserResponse);\n\n            BlockingResponse actual = await ctx.BlockUserAsync(SourceUserID, TargetUserID);\n\n            Assert.IsTrue(actual.Data.Blocking);\n        }\n\n        [TestMethod]\n        public async Task BlockUserAsync_WithRawResult_Succeeds()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(BlockUserResponse);\n\n            await ctx.BlockUserAsync(SourceUserID, TargetUserID);\n\n            Assert.AreEqual(BlockUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task BlockUserAsync_Builds_Url()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(BlockUserResponse);\n\n            await ctx.BlockUserAsync(SourceUserID, TargetUserID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/2/users/1/blocking\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task BlockUserAsync_Throws_On_Null_SourceUserID()\n        {\n            const string SourceUserID = null;\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(BlockUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.BlockUserAsync(SourceUserID, TargetUserID));\n\n            Assert.AreEqual(\"sourceUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task BlockUserAsync_Throws_On_Null_TargetUserID()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = null;\n            var ctx = InitializeTwitterContext(BlockUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.BlockUserAsync(SourceUserID, TargetUserID));\n\n            Assert.AreEqual(\"targetUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnblockUserAsync_Handles_Response()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(UnblockUserResponse);\n\n            BlockingResponse actual = await ctx.UnblockUserAsync(SourceUserID, TargetUserID);\n\n            Assert.IsFalse(actual.Data.Blocking);\n        }\n\n        [TestMethod]\n        public async Task UnblockUserAsync_WithRawResult_Succeeds()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(UnblockUserResponse);\n\n            await ctx.UnblockUserAsync(SourceUserID, TargetUserID);\n\n            Assert.AreEqual(UnblockUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UnblockUserAsync_Builds_Url()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(UnblockUserResponse);\n\n            await ctx.UnblockUserAsync(SourceUserID, TargetUserID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/2/users/1/blocking/2\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UnblockUserAsync_Throws_On_No_SourceUserID()\n        {\n            const string SourceUserID = null;\n            const string TargetUserID = \"2\";\n            var ctx = InitializeTwitterContext(UnblockUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnblockUserAsync(SourceUserID, TargetUserID));\n\n            Assert.AreEqual(\"sourceUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnblockUserAsync_Throws_On_No_TargetUserID()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = null;\n            var ctx = InitializeTwitterContext(UnblockUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnblockUserAsync(SourceUserID, TargetUserID));\n\n            Assert.AreEqual(\"targetUserID\", ex.ParamName);\n        }\n\n        const string BlockUserResponse = @\"{\n    \"\"data\"\": {\n        \"\"blocking\"\":true}\n    }\";\n\n        const string UnblockUserResponse = @\"{\n    \"\"data\"\": {\n        \"\"blocking\"\":false}\n    }\";\n\n        const string BlocksUserJson = @\"{\n   \"\"id\"\":16761255,\n   \"\"listed_count\"\":2,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"87bc44\"\",\n   \"\"geo_enabled\"\":false,\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"friends_count\"\":0,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"followers_count\"\":22,\n   \"\"is_translator\"\":false,\n   \"\"show_all_inline_media\"\":true,\n   \"\"follow_request_sent\"\":false,\n   \"\"statuses_count\"\":100,\n   \"\"utc_offset\"\":-25200,\n   \"\"profile_sidebar_fill_color\"\":\"\"e0ff92\"\",\n   \"\"name\"\":\"\"LINQ to Tweeter Test\"\",\n   \"\"default_profile_image\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_background_color\"\":\"\"9ae4e8\"\",\n   \"\"favourites_count\"\":2,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"url\"\":\"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n   \"\"verified\"\":false,\n   \"\"created_at\"\":\"\"Wed Oct 15 05:15:40 +0000 2008\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/308329951\\/linq2twitter_v3_300x90.png\"\",\n   \"\"description\"\":\"\"Testing the LINQ to Twitter Account Profile Update.\"\",\n   \"\"profile_link_color\"\":\"\"0000ff\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1446295540\\/200xColor_2_normal.png\"\",\n   \"\"default_profile\"\":false,\n   \"\"following\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"location\"\":\"\"Anywhere In The World\"\",\n   \"\"notifications\"\":false,\n   \"\"id_str\"\":\"\"16761255\"\",\n   \"\"profile_text_color\"\":\"\"000000\"\",\n   \"\"status\"\":{\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"created_at\"\":\"\"Sun Mar 04 23:16:17 +0000 2012\"\",\n      \"\"coordinates\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"place\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"contributors\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003EC# Station\\u003C\\/a\\u003E\"\",\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"geo\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"id\"\":176445993091481604,\n      \"\"id_str\"\":\"\"176445993091481604\"\",\n      \"\"text\"\":\"\"Windows Phone Test, 03\\/04\\/2012 16:15:12 #linq2twitter\"\"\n   },\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"screen_name\"\":\"\"Linq2Tweeter\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/BlocksTests/BlocksRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.BlocksTests\n{\n    [TestClass]\n    public class BlocksRequestProcessorTests\n    {\n        public BlocksRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_IDs()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.Ids\n            };\n\n            IList<Blocks> blocksResponse = blockReqProc.ProcessResults(BlockedIDsJson);\n\n            Assert.IsNotNull(blocksResponse);\n            Blocks blocks = blocksResponse.First();\n            List<string> ids = blocks.IDs;\n            Assert.AreEqual(5, ids.Count());\n            Assert.AreEqual(\"35080286\", ids.First());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_BlockedUsers()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List\n            };\n\n            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            var actualQuery = actual as IList<Blocks>;\n            Assert.IsNotNull(actualQuery);\n            Assert.AreEqual(actualQuery[0].Users.Count, 3);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var blocks = blocksReqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(1, blocks.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var blockedReqProc = new BlocksRequestProcessor<Blocks>\n            {\n                Type = BlockingType.List,\n                ScreenName = \"somename\",\n                Page = 1,\n                PerPage = 10,\n                IncludeEntities = true,\n                SkipStatus = true,\n                Cursor = \"789\"\n            };\n\n            var blocks = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            Assert.IsNotNull(blocks);\n            Assert.IsNotNull(blocks.SingleOrDefault());\n            var block = blocks.Single();\n            Assert.AreEqual(BlockingType.List, block.Type);\n            Assert.AreEqual(\"somename\", block.ScreenName);\n            Assert.AreEqual(1, block.Page);\n            Assert.AreEqual(10, block.PerPage);\n            Assert.IsTrue(block.IncludeEntities);\n            Assert.IsTrue(block.SkipStatus);\n            Assert.AreEqual(\"789\", block.Cursor);\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var blocksReqProc = new BlocksRequestProcessor<Blocks>();\n            Expression<Func<Blocks, bool>> expression =\n                block =>\n                    block.Type == BlockingType.List &&\n                    block.UserID == 123ul &&\n                    block.ScreenName == \"JoeMayo\" &&\n                    block.Page == 1 &&\n                    block.PerPage == 10 &&\n                    block.IncludeEntities == true &&\n                    block.SkipStatus == true &&\n                    block.Cursor == \"789\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = blocksReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Page\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PerPage\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_List_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/list.json?page=2&per_page=10&include_entities=true&skip_status=true&cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture) },\n                    { \"Page\", \"2\" },\n                    { \"PerPage\", \"10\" },\n                    { \"SkipStatus\", true.ToString() },\n                    { \"Cursor\", \"789\" },\n                    { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_BlockingIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/blocks/ids.json?cursor=789\";\n            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)BlockingType.Ids).ToString(CultureInfo.InvariantCulture) },\n                    { \"Cursor\", \"789\" }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Parameter()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n\n        const string BlockedUsersJson = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":35080286,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":0,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":null,\n         \"\"name\"\":\"\"Nunya Business\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Fri Apr 24 23:44:07 +0000 2009\"\",\n         \"\"time_zone\"\":null,\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"35080286\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_3_normal.png\"\",\n         \"\"followers_count\"\":1,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"somename\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Apr 24 23:44:34 +0000 2009\"\",\n            \"\"id_str\"\":\"\"1608673165\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"whatever\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":1608673165,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":0\n      },\n      {\n         \"\"id\"\":132447355,\n         \"\"location\"\":null,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":1,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"utc_offset\"\":14400,\n         \"\"name\"\":\"\"abcdefg\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"statuses_count\"\":1,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":true,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Tue Apr 13 07:49:37 +0000 2010\"\",\n         \"\"time_zone\"\":\"\"Baku\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"132447355\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/sticky\\/default_profile_images\\/default_profile_5_normal.png\"\",\n         \"\"followers_count\"\":33,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":null,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"listed_count\"\":0,\n         \"\"screen_name\"\":\"\"abcdefg\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":17,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Tue Apr 13 08:09:41 +0000 2010\"\",\n            \"\"id_str\"\":\"\"12093232220\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"hi\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"web\"\",\n            \"\"id\"\":12093232220,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":null,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"friends_count\"\":6\n      },\n      {\n         \"\"id\"\":22785157,\n         \"\"location\"\":\"\"Orange County, CA\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"following\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"favourites_count\"\":2,\n         \"\"profile_background_color\"\":\"\"B2DFDA\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"name\"\":\"\"Patrick Kerr\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"statuses_count\"\":9823,\n         \"\"profile_link_color\"\":\"\"93A644\"\",\n         \"\"protected\"\":false,\n         \"\"verified\"\":false,\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":null,\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        31\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\"\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"created_at\"\":\"\"Wed Mar 04 15:15:54 +0000 2009\"\",\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme13\\/bg.gif\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"id_str\"\":\"\"22785157\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1267036839\\/pkresume_normal.jpg\"\",\n         \"\"followers_count\"\":1149,\n         \"\"geo_enabled\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.kerrorganization.com\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"notifications\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"eeeeee\"\",\n         \"\"listed_count\"\":11,\n         \"\"screen_name\"\":\"\"patrickkerr\"\",\n         \"\"status\"\":{\n            \"\"contributors\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"geo\"\":null,\n            \"\"retweeted\"\":false,\n            \"\"retweet_count\"\":0,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"created_at\"\":\"\"Fri Dec 28 15:00:13 +0000 2012\"\",\n            \"\"id_str\"\":\"\"284675125813575680\"\",\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"entities\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"display_url\"\":\"\"lnkd.in\\/_n9Mq5\"\",\n                     \"\"expanded_url\"\":\"\"http:\\/\\/lnkd.in\\/_n9Mq5\"\",\n                     \"\"indices\"\":[\n                        66,\n                        86\n                     ],\n                     \"\"url\"\":\"\"http:\\/\\/t.co\\/Fil30ira\"\"\n                  }\n               ],\n               \"\"user_mentions\"\":[\n\n               ],\n               \"\"hashtags\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"truncated\"\":false,\n            \"\"text\"\":\"\"Lincoln Property Makes Second SoCal Office Acquisition in a Month http:\\/\\/t.co\\/Fil30ira\"\",\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"place\"\":null,\n            \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.linkedin.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ELinkedIn\\u003C\\/a\\u003E\"\",\n            \"\"id\"\":284675125813575680,\n            \"\"possibly_sensitive\"\":false,\n            \"\"in_reply_to_user_id_str\"\":null\n         },\n         \"\"profile_background_tile\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"description\"\":\"\"Patrick Kerr at Kerr Organization, develops & invests in commercial real estate #realestate #properties #buildings #multifamily #investments #homes\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"ffffff\"\",\n         \"\"friends_count\"\":155\n      }\n   ],\n   \"\"next_cursor\"\":0,\n   \"\"previous_cursor\"\":0,\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n\n        const string BlockedIDsJson = @\"{\n   \"\"previous_cursor\"\":0,\n   \"\"ids\"\":[\n      35080286,\n      132447355,\n      22785157,\n      238429025,\n      256075978\n   ],\n   \"\"next_cursor_str\"\":\"\"0\"\",\n   \"\"previous_cursor_str\"\":\"\"0\"\",\n   \"\"next_cursor\"\":0\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/BlocksTests/TwitterBlocksRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.BlocksTests\n{\n    [TestClass]\n    public class TwitterBlocksRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public TwitterBlocksRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_ParsesParameters()\n        {\n            var blocksReqProc = new TwitterBlocksRequestProcessor<TwitterBlocksQuery>();\n            Expression<Func<TwitterBlocksQuery, bool>> expression =\n                block =>\n                    block.Type == BlockingType.Lookup &&\n                    block.Expansions == \"attachments.poll_ids,author_id\" &&\n                    block.ID == \"123\" &&\n                    block.MaxResults == 99 &&\n                    block.PaginationToken == \"456\" &&\n                    block.TweetFields == \"author_id,created_at\" &&\n                    block.UserFields == \"created_at,verified\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = blocksReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.Type), ((int)BlockingType.Lookup).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.Expansions), \"attachments.poll_ids,author_id\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.ID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.MaxResults), \"99\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.PaginationToken), \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.TweetFields), \"author_id,created_at\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterBlocksQuery.UserFields), \"created_at,verified\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithUserID_CreatesLookupUrl()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/123/blocking?\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"max_results=99&\" +\n                \"pagination_token=456&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"user.fields=created_at%2Cverified\";\n\n            var blocksReqProc = new TwitterBlocksRequestProcessor<TwitterBlocksQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterBlocksQuery.Type), ((int)BlockingType.Lookup).ToString(CultureInfo.InvariantCulture) },\n                    { nameof(TwitterBlocksQuery.ID), \"123\" },\n                    { nameof(TwitterBlocksQuery.Expansions), \"attachments.poll_ids,author_id\" },\n                    { nameof(TwitterBlocksQuery.MaxResults), \"99\" },\n                    { nameof(TwitterBlocksQuery.PaginationToken), \"456\" },\n                    { nameof(TwitterBlocksQuery.TweetFields), \"author_id,created_at\" },\n                    { nameof(TwitterBlocksQuery.UserFields), \"created_at,verified\" }\n                };\n\n            Request req = blocksReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_MissingTypeParameter_Throw()\n        {\n            var blockReqProc = new TwitterBlocksRequestProcessor<TwitterBlocksQuery> { BaseUrl = BaseUrl2 };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParameter_Throws()\n        {\n            var blockReqProc = new TwitterBlocksRequestProcessor<Blocks> { BaseUrl = BaseUrl2 };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(null));\n\n            Assert.AreEqual(nameof(Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithBlockedUsers_HandlesResults()\n        {\n            var blockedReqProc = new TwitterBlocksRequestProcessor<TwitterBlocksQuery>\n            {\n                Type = BlockingType.Lookup\n            };\n\n            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            var actualQuery = actual as IList<TwitterBlocksQuery>;\n            Assert.IsNotNull(actualQuery);\n            Assert.AreEqual(actualQuery[0].Users.Count, 1);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithEmptyResults_ReturnsEmptyList()\n        {\n            var blocksReqProc = new TwitterBlocksRequestProcessor<TwitterBlocksQuery> \n            { \n                BaseUrl = BaseUrl2,\n                Type = BlockingType.Lookup\n            };\n\n            var blocks = blocksReqProc.ProcessResults(NoBlockedUsers);\n\n            Assert.AreEqual(1, blocks.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_RetainsOriginalInputParameters()\n        {\n            var blockedReqProc = new TwitterBlocksRequestProcessor<TwitterBlocksQuery>\n            {\n                Type = BlockingType.Lookup,\n                Expansions = \"attachments.poll_ids,author_id\",\n                ID = \"123\",\n                MaxResults = 99,\n                PaginationToken = \"456\",\n                TweetFields = \"author_id,created_at\",\n                UserFields = \"created_at,verified\"\n            };\n\n            var blocks = blockedReqProc.ProcessResults(BlockedUsersJson);\n\n            Assert.IsNotNull(blocks);\n            Assert.IsNotNull(blocks.SingleOrDefault());\n            var block = blocks.Single();\n            Assert.AreEqual(BlockingType.Lookup, block.Type);\n            Assert.AreEqual(\"attachments.poll_ids,author_id\", block.Expansions);\n            Assert.AreEqual(\"123\", block.ID);\n            Assert.AreEqual(99, block.MaxResults);\n            Assert.AreEqual(\"456\", block.PaginationToken);\n            Assert.AreEqual(\"author_id,created_at\", block.TweetFields);\n            Assert.AreEqual(\"created_at,verified\", block.UserFields);\n        }\n\n        const string NoBlockedUsers = @\"{\"\"meta\"\":{\"\"result_count\"\":0}}\";\n\n        const string BlockedUsersJson = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1195087456548401166/kmi8U-M9_normal.jpg\"\",\n\t\t\t\"\"verified\"\": true,\n\t\t\t\"\"location\"\": \"\"Kansas City, MO\"\",\n\t\t\t\"\"created_at\"\": \"\"2007-11-27T23:50:12.000Z\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/4jenbcenp0\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://hrblock.io/WaysToFile\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"hrblock.io/WaysToFile\"\"\n\n                        }\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n    \"\"mentions\"\": [\n\n                        {\n        \"\"start\"\": 117,\n\t\t\t\t\t\t\t\"\"end\"\": 132,\n\t\t\t\t\t\t\t\"\"username\"\": \"\"HRBlockAnswers\"\"\n\n                        }\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"\"username\"\": \"\"HRBlock\"\",\n\t\t\t\"\"description\"\": \"\"At H&R Block, we have many filing options to make it easy for you. Expert tax prep in person or virtually. \\n\\nContact @HRBlockAnswers for support.\"\",\n\t\t\t\"\"id\"\": \"\"10673252\"\",\n\t\t\t\"\"public_metrics\"\": {\n    \"\"followers_count\"\": 39286,\n\t\t\t\t\"\"following_count\"\": 6622,\n\t\t\t\t\"\"tweet_count\"\": 33591,\n\t\t\t\t\"\"listed_count\"\": 677\n\n            },\n\t\t\t\"\"pinned_tweet_id\"\": \"\"1397658537053102082\"\",\n\t\t\t\"\"name\"\": \"\"H&R Block\"\",\n\t\t\t\"\"url\"\": \"\"https://t.co/4jenbcenp0\"\",\n\t\t\t\"\"protected\"\": false\n\t\t}\n\t],\n\t\"\"meta\"\": {\n    \"\"result_count\"\": 1\n\n    }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/BookmarkTests/BookmarkCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FavoritesTests\n{\n    [TestClass]\n    public class BookmarkCommandsTests\n    {\n        public BookmarkCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        static TwitterContext InitializeTwitterContext(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<BookmarkedTweetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<BookmarkedTweetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task BookmarkAsync_WithValidID_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(BookmarkResponse);\n\n            BookmarkResponse actual = await ctx.BookmarkAsync(UserId, TweetID);\n\n            Assert.IsTrue(actual.Data.Bookmarked);\n        }\n\n        [TestMethod]\n        public async Task BookmarkAsync_WithRawResult_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(BookmarkResponse);\n\n            await ctx.BookmarkAsync(UserId, TweetID);\n\n            Assert.AreEqual(BookmarkResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task BookmarkAsync_WithNullUserID_Throws()\n        {\n            const string UserId = null;\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(BookmarkResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.BookmarkAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task BookmarkAsync_WithNullTweetID_Throws()\n        {\n            const string UserId = \"123\";\n            const string TweetID = null;\n            var ctx = InitializeTwitterContext(BookmarkResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.BookmarkAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RemoveBookmarkAsync_WithValidID_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(RemoveBookmarkResponse);\n\n            BookmarkResponse actual = await ctx.RemoveBookmarkAsync(UserId, TweetID);\n\n            Assert.IsFalse(actual.Data.Bookmarked);\n        }\n\n        [TestMethod]\n        public async Task RemoveBookmarkAsync_WithRawResult_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(RemoveBookmarkResponse);\n\n            await ctx.RemoveBookmarkAsync(UserId, TweetID);\n\n            Assert.AreEqual(RemoveBookmarkResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task RemoveBookmarkAsync_WithNullUserID_Throws()\n        {\n            const string UserId = null;\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(RemoveBookmarkResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.RemoveBookmarkAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RemoveBookmarkAsync_WithNullTweetID_Throws()\n        {\n            const string UserId = \"123\";\n            const string TweetID = null;\n            var ctx = InitializeTwitterContext(RemoveBookmarkResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.RemoveBookmarkAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        const string BookmarkResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"bookmarked\"\": true\n\t}\n}\";\n\n        const string RemoveBookmarkResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"bookmarked\"\": false\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/Common/DebuggerWriter.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Text;\n\nnamespace LinqToTwitter.Tests.Common\n{\n    /// <summary>\n    /// Implements a <see cref=\"TextWriter\"/> for writing information to the debugger log.\n    /// </summary>\n    /// <seealso cref=\"Debugger.Log\"/>\n    /// <remarks>This code is created by Kris Vandermotten</remarks>\n    /// /// <remarks>For more information check this link: http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11 </remarks>\n    public class DebuggerWriter : TextWriter\n    {\n        private bool isOpen;\n        private static UnicodeEncoding encoding;\n        private readonly int level;\n        private readonly string category;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class.\n        /// </summary>\n        public DebuggerWriter()\n#if NETCORE\n            : this(0, string.Empty)\n#else\n            : this(0, Debugger.DefaultCategory)\n#endif\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level and category.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        public DebuggerWriter(int level, string category)\n            : this(level, category, CultureInfo.CurrentCulture)\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"DebuggerWriter\"/> class with the specified level, category and format provider.\n        /// </summary>\n        /// <param name=\"level\">A description of the importance of the messages.</param>\n        /// <param name=\"category\">The category of the messages.</param>\n        /// <param name=\"formatProvider\">An <see cref=\"IFormatProvider\"/> object that controls formatting.</param>\n        public DebuggerWriter(int level, string category, IFormatProvider formatProvider)\n            : base(formatProvider)\n        {\n            this.level = level;\n            this.category = category;\n            this.isOpen = true;\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            isOpen = false;\n            base.Dispose(disposing);\n        }\n\n        public override void Write(char value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n#if !NETCORE\n            Debugger.Log(level, category, value.ToString());\n#endif\n        }\n\n        public override void Write(string value)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (value != null)\n            {\n#if !NETCORE\n                Debugger.Log(level, category, value);\n#endif\n            }\n        }\n\n        public override void Write(char[] buffer, int index, int count)\n        {\n            if (!isOpen)\n            {\n                throw new ObjectDisposedException(null);\n            }\n            if (buffer == null || index < 0 || count < 0 || buffer.Length - index < count)\n            {\n                base.Write(buffer, index, count); // delegate throw exception to base class\n            }\n#if !NETCORE\n            Debugger.Log(level, category, new string(buffer, index, count));\n#endif\n        }\n\n        public override Encoding Encoding\n        {\n            get\n            {\n                if (encoding == null)\n                {\n                    encoding = new UnicodeEncoding(false, false);\n                }\n                return encoding;\n            }\n        }\n\n        public int Level\n        {\n            get { return level; }\n        }\n\n        public string Category\n        {\n            get { return category; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/Common/EntitiesTests.cs",
    "content": "﻿using System.Linq;\nusing System.Text.Json;\nusing LinqToTwitter.Common.Entities;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.Common\n{\n    [TestClass]\n    public class EntitiesTests\n    {\n        [TestMethod]\n        public void InstantiateEntities_WithNull_SuccessfullyCreatesEmptyCollectionProperties()\n        {\n            var emptyEntities = new Entities(new JsonElement());\n\n            Assert.IsNotNull(emptyEntities);\n            Assert.IsNotNull(emptyEntities.HashTagEntities);\n            Assert.IsFalse(emptyEntities.HashTagEntities.Any());\n            Assert.IsNotNull(emptyEntities.MediaEntities);\n            Assert.IsFalse(emptyEntities.MediaEntities.Any());\n            Assert.IsNotNull(emptyEntities.SymbolEntities);\n            Assert.IsFalse(emptyEntities.SymbolEntities.Any());\n            Assert.IsNotNull(emptyEntities.UrlEntities);\n            Assert.IsFalse(emptyEntities.UrlEntities.Any());\n            Assert.IsNotNull(emptyEntities.UserMentionEntities);\n            Assert.IsFalse(emptyEntities.UserMentionEntities.Any());\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/Common/L2TAssert.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.Common\n{\n    class L2TAssert\n    {\n        public static async Task<T> Throws<T>(Func<Task> task) \n            where T : Exception\n        {\n            try\n            {\n                await task();\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(T));\n                return (T)ex;\n            }\n\n            if (typeof(T).Equals(new Exception().GetType()))\n                Assert.Fail(\"Expected exception but no exception was thrown.\");\n            else\n                Assert.Fail(\n                    string.Format(\n                        \"Expected exception of type {0} but no exception was thrown.\", \n                        typeof(T)));\n\n            return null;\n        }\n\n        public static T Throws<T>(Action task)\n            where T : Exception\n        {\n            try\n            {\n                task();\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(T));\n                return (T)ex;\n            }\n\n            if (typeof(T).Equals(new Exception().GetType()))\n                Assert.Fail(\"Expected exception but no exception was thrown.\");\n            else\n                Assert.Fail(\n                    string.Format(\n                        \"Expected exception of type {0} but no exception was thrown.\",\n                        typeof(T)));\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/Common/TestCulture.cs",
    "content": "﻿#if !NETCORE\n#endif\nusing System.Globalization;\n\nnamespace LinqToTwitter.Tests.Common\n{\n    public class TestCulture\n    {\n        public static void SetCulture()\n        {\n            string culture = string.Empty;\n            var cultureInfo = new CultureInfo(culture);\n            CultureInfo.CurrentCulture = cultureInfo;\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/Common/TwitterExtensionsTests.cs",
    "content": "﻿using System;\n\nnamespace LinqToTwitter.Tests.Common\n{\n    public class TwitterExtensionsTests\n    {\n        public TwitterExtensionsTests()\n        {\n            TestCulture.SetCulture();\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/ComplianceTests/ComplianceCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Compliance;\nusing LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitter.Tests.ComplianceTests\n{\n    [TestClass]\n    public class ComplianceCommandsTests\n    {\n        public ComplianceCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        static async Task<TwitterContext> InitializeTwitterContextAsync(string result)\n        {\n            await Task.Delay(1);\n            var authMock = new Mock<IAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(result);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ComplianceJobCreate>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task CreateComplianceJobAsync_WithReply_ReturnsTrue()\n        {\n            const string JobType = ComplianceJobType.Tweets;\n            const string JobName = \"abc\";\n            const bool Resumable = true;\n            var ctx = await InitializeTwitterContextAsync(JobResponse);\n\n            ComplianceQuerySingle query = await ctx.CreateComplianceJobAsync(JobType, JobName, Resumable);\n\n            Assert.IsNotNull(query);\n            ComplianceJob job = query.Job;\n            Assert.IsNotNull(job);\n            Assert.AreEqual(\"1452446437015314435\", job.ID);\n            Assert.AreEqual(DateTime.Parse(\"2021-11-01T01:26:30.000Z\").ToUniversalTime(), job.DownloadExpiresAt);\n            Assert.AreEqual(ComplianceStatus.Created, job.Status);\n            Assert.AreEqual(\"https://storage.googleapis.com/up\", job.UploadUrl);\n            Assert.AreEqual(\"https://storage.googleapis.com/down\", job.DownloadUrl);\n            Assert.AreEqual(DateTime.Parse(\"2021-10-25T01:41:30.000Z\").ToUniversalTime(), job.UploadExpiresAt);\n            Assert.AreEqual(\"test-202110240626\", job.Name);\n            Assert.AreEqual(DateTime.Parse(\"2021-10-25T01:26:30.000Z\").ToUniversalTime(), job.CreatedAt);\n            Assert.AreEqual(ComplianceJobType.Tweets, job.JobType);\n            Assert.AreEqual(true, job.Resumable);\n        }\n\n        const string JobResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"id\"\": \"\"1452446437015314435\"\",\n\t\t\"\"download_expires_at\"\": \"\"2021-11-01T01:26:30.000Z\"\",\n\t\t\"\"status\"\": \"\"created\"\",\n\t\t\"\"upload_url\"\": \"\"https://storage.googleapis.com/up\"\",\n\t\t\"\"download_url\"\": \"\"https://storage.googleapis.com/down\"\",\n\t\t\"\"upload_expires_at\"\": \"\"2021-10-25T01:41:30.000Z\"\",\n\t\t\"\"name\"\": \"\"test-202110240626\"\",\n\t\t\"\"created_at\"\": \"\"2021-10-25T01:26:30.000Z\"\",\n\t\t\"\"type\"\": \"\"tweets\"\",\n\t\t\"\"resumable\"\": true\n\t}\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/ComplianceTests/ComplianceRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.ComplianceTests\n{\n    [TestClass]\n    public class ComplianceRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public ComplianceRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new ComplianceRequestProcessor<ComplianceQuery>();\n\n            var endTime = new DateTime(2020, 8, 30);\n            var startTime = new DateTime(2020, 8, 1);\n            Expression<Func<ComplianceQuery, bool>> expression =\n                job =>\n                    job.Type == ComplianceType.MultipleJobs &&\n                    job.ID == \"123\" &&\n                    job.JobType == ComplianceJobType.Tweets &&\n                    job.Status == ComplianceStatus.Created;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ComplianceQuery.Type), ((int)ComplianceType.MultipleJobs).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ComplianceQuery.ID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ComplianceQuery.JobType), ComplianceJobType.Tweets)));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ComplianceQuery.Status), ComplianceStatus.Created)));\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForMultipleJobs_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"compliance/jobs?\" +\n                \"type=tweets&\" +\n                \"status=in_progress\";\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ComplianceQuery.Type), ComplianceType.MultipleJobs.ToString() },\n                    { nameof(ComplianceQuery.JobType), ComplianceJobType.Tweets },\n                    { nameof(ComplianceQuery.Status), ComplianceStatus.InProgress }\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForMultipleJobsWithMissingType_Throws()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ComplianceQuery.Type), ComplianceType.MultipleJobs.ToString() },\n                    //{ nameof(ComplianceQuery.JobType), ComplianceJobType.Tweets }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ComplianceQuery.JobType), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForSingleJob_IncludesID()\n        {\n            const string ExpectedUrl = BaseUrl2 + \"compliance/jobs/123\";\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ComplianceQuery.Type), ComplianceType.SingleJob.ToString() },\n                    { nameof(ComplianceQuery.ID), \"123\" }\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForSingleJobWithoutID_Throws()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ComplianceQuery.Type), ComplianceType.SingleJob.ToString() },\n                    //{ nameof(ComplianceQuery.ID), \"123\" }\n               };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ComplianceQuery.ID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParameters_Throws()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> { BaseUrl = BaseUrl2 };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                reqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_SingleJob()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> \n            { \n                BaseUrl = BaseUrl2,\n                Type = ComplianceType.SingleJob\n            };\n\n            List<ComplianceQuery> results = reqProc.ProcessResults(SingleJob);\n\n            Assert.IsNotNull(results);\n            ComplianceQuery complianceQuery = results.SingleOrDefault();\n            Assert.IsNotNull(complianceQuery);\n            List<ComplianceJob> jobs = complianceQuery.Jobs;\n            Assert.IsNotNull(jobs);\n            Assert.AreEqual(1, jobs.Count);\n            ComplianceJob job = jobs.FirstOrDefault();\n            Assert.IsNotNull(job);\n            Assert.AreEqual(\"1452446437015314435\", job.ID);\n            Assert.AreEqual(DateTime.Parse(\"2021-11-01T01:26:30.000Z\").ToUniversalTime(), job.DownloadExpiresAt);\n            Assert.AreEqual(ComplianceStatus.Created, job.Status);\n            Assert.AreEqual(\"https://storage.googleapis.com/up\", job.UploadUrl);\n            Assert.AreEqual(\"https://storage.googleapis.com/down\", job.DownloadUrl);\n            Assert.AreEqual(DateTime.Parse(\"2021-10-25T01:41:30.000Z\").ToUniversalTime(), job.UploadExpiresAt);\n            Assert.AreEqual(\"test-202110240626\", job.Name);\n            Assert.AreEqual(DateTime.Parse(\"2021-10-25T01:26:30.000Z\").ToUniversalTime(), job.CreatedAt);\n            Assert.AreEqual(ComplianceJobType.Tweets, job.JobType);\n            Assert.AreEqual(true, job.Resumable);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_MultipleJobs()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery>\n            {\n                BaseUrl = BaseUrl2,\n                Type = ComplianceType.MultipleJobs\n            };\n\n            List<ComplianceQuery> results = reqProc.ProcessResults(MultipleJobs);\n\n            Assert.IsNotNull(results);\n            ComplianceQuery complianceQuery = results.SingleOrDefault();\n            Assert.IsNotNull(complianceQuery);\n            List<ComplianceJob> jobs = complianceQuery.Jobs;\n            Assert.IsNotNull(jobs);\n            Assert.AreEqual(3, jobs.Count);\n            ComplianceJob job = jobs.FirstOrDefault();\n            Assert.AreEqual(\"1452493500373553153\", job.ID);\n            Assert.AreEqual(DateTime.Parse(\"2021-11-01T04:33:31.000Z\").ToUniversalTime(), job.DownloadExpiresAt);\n            Assert.AreEqual(ComplianceStatus.Created, job.Status);\n            Assert.AreEqual(\"https://storage.googleapis.com/up\", job.UploadUrl);\n            Assert.AreEqual(\"https://storage.googleapis.com/down\", job.DownloadUrl);\n            Assert.AreEqual(DateTime.Parse(\"2021-10-25T04:48:31.000Z\").ToUniversalTime(), job.UploadExpiresAt);\n            Assert.AreEqual(\"test-202110240933\", job.Name);\n            Assert.AreEqual(DateTime.Parse(\"2021-10-25T04:33:31.000Z\").ToUniversalTime(), job.CreatedAt);\n            Assert.AreEqual(ComplianceJobType.Tweets, job.JobType);\n            Assert.AreEqual(true, job.Resumable);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithNoResults_ReturnsNoJobs()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery> { BaseUrl = BaseUrl2 };\n\n            List<ComplianceQuery> results = reqProc.ProcessResults(ErrorTweet);\n\n            Assert.IsNotNull(results);\n            ComplianceQuery complianceQuery = results.SingleOrDefault();\n            Assert.IsNotNull(complianceQuery);\n            List<ComplianceJob> jobs = complianceQuery.Jobs;\n            Assert.IsNull(jobs);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForSingleJob_PopulatesInputParameters()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery>()\n            {\n                BaseUrl = BaseUrl2,\n                Type = ComplianceType.SingleJob,\n                ID = \"123\"\n            };\n\n            var results = reqProc.ProcessResults(SingleJob);\n\n            Assert.IsNotNull(results);\n            Assert.AreEqual(1, results.Count);\n            var complianceQuery = results.Single();\n            Assert.IsNotNull(complianceQuery);\n            Assert.AreEqual(ComplianceType.SingleJob, complianceQuery.Type);\n            Assert.AreEqual(\"123\", complianceQuery.ID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForMultipleJobs_PopulatesInputParameters()\n        {\n            var reqProc = new ComplianceRequestProcessor<ComplianceQuery>()\n            {\n                BaseUrl = BaseUrl2,\n                Type = ComplianceType.MultipleJobs,\n                JobType = ComplianceJobType.Tweets,\n                Status = ComplianceStatus.Complete\n            };\n\n            var results = reqProc.ProcessResults(MultipleJobs);\n\n            Assert.IsNotNull(results);\n            Assert.AreEqual(1, results.Count);\n            var complianceQuery = results.Single();\n            Assert.IsNotNull(complianceQuery);\n            Assert.AreEqual(ComplianceType.MultipleJobs, complianceQuery.Type);\n            Assert.AreEqual(ComplianceJobType.Tweets, complianceQuery.JobType);\n            Assert.AreEqual(ComplianceStatus.Complete, complianceQuery.Status);\n        }\n\n        const string SingleJob = @\"{\n\t\"\"data\"\": {\n\t\t\"\"id\"\": \"\"1452446437015314435\"\",\n\t\t\"\"download_expires_at\"\": \"\"2021-11-01T01:26:30.000Z\"\",\n\t\t\"\"status\"\": \"\"created\"\",\n\t\t\"\"upload_url\"\": \"\"https://storage.googleapis.com/up\"\",\n\t\t\"\"download_url\"\": \"\"https://storage.googleapis.com/down\"\",\n\t\t\"\"upload_expires_at\"\": \"\"2021-10-25T01:41:30.000Z\"\",\n\t\t\"\"name\"\": \"\"test-202110240626\"\",\n\t\t\"\"created_at\"\": \"\"2021-10-25T01:26:30.000Z\"\",\n\t\t\"\"type\"\": \"\"tweets\"\",\n\t\t\"\"resumable\"\": true\n\t}\n}\";\n\n        const string MultipleJobs = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"download_url\"\": \"\"https://storage.googleapis.com/down\"\",\n\t\t\t\"\"id\"\": \"\"1452493500373553153\"\",\n\t\t\t\"\"download_expires_at\"\": \"\"2021-11-01T04:33:31.000Z\"\",\n\t\t\t\"\"name\"\": \"\"test-202110240933\"\",\n\t\t\t\"\"status\"\": \"\"created\"\",\n\t\t\t\"\"type\"\": \"\"tweets\"\",\n\t\t\t\"\"upload_url\"\": \"\"https://storage.googleapis.com/up\"\",\n\t\t\t\"\"resumable\"\": true,\n\t\t\t\"\"upload_expires_at\"\": \"\"2021-10-25T04:48:31.000Z\"\",\n\t\t\t\"\"created_at\"\": \"\"2021-10-25T04:33:31.000Z\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"download_url\"\": \"\"https://storage.googleapis.com/twttr-tweet-compliance/1452446437015314435/delivery/1021848369956700166_1452446437015314435?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=complianceapi-public-svc-acct%40twttr-compliance-public-prod.iam.gserviceaccount.com%2F20211025%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20211025T012630Z&X-Goog-Expires=604800&X-Goog-SignedHeaders=host&X-Goog-Signature=15c34a51d8778d867be1d5c59b5e4a4f38e0850d84febd5c8836d44851c08348a497ffb0b6cc9d6fb4e3f5fe50dbd7782fc3b6cfd926b9c433846fc93a3a9cd204055519578a87432c6d29cde179c251d22daa40a04edc5b1c12bf2d517dbb667461b902ac4aae1153b490e8694ab9d24bf4808ed2f8970bde12589a6ea4cdc8e22998af960fd10f1fb9274a51cc2b51543e9bb299191a1b043d777b74814b07921d2c0c503b1fa3e7b997ded194d34ac088d9d3dd952394d27849f35ee2f2f095d10fb79e8b4ba29c60a38e8cb70d45dd19798d03dc36d3eb083178d69da73c72d952505102bb2366c2ebed824f73380b56fc7ef2ab2cc5013cec950dd6b3a9\"\",\n\t\t\t\"\"id\"\": \"\"1452446437015314435\"\",\n\t\t\t\"\"download_expires_at\"\": \"\"2021-11-01T01:26:30.000Z\"\",\n\t\t\t\"\"name\"\": \"\"test-202110240626\"\",\n\t\t\t\"\"status\"\": \"\"expired\"\",\n\t\t\t\"\"type\"\": \"\"tweets\"\",\n\t\t\t\"\"upload_url\"\": \"\"https://storage.googleapis.com/twttr-tweet-compliance/1452446437015314435/submission/1021848369956700166_1452446437015314435?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=complianceapi-public-svc-acct%40twttr-compliance-public-prod.iam.gserviceaccount.com%2F20211025%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20211025T012630Z&X-Goog-Expires=900&X-Goog-SignedHeaders=content-length%3Bcontent-type%3Bhost%3Bx-goog-resumable&X-Goog-Signature=0e2e456a6a530a69fa31c9e5c65bbeff8f6b087635bf3ce5680a0a309281efd7e58067df61487e41a270d52e63f1dae6a7d67894965a92e8a062614abd6fc9e682860b814b13f761211aceac5334d4de6c382b7f39d29b50f8d68c11aef9b25641867f8f2b9cef68ea6ae1af724ca690cc22a8d97cb7e893a8eadeec3a97188c17fda4d00477460dfb31dd89dc8272fd1488c6c5fc621538d6fcc6d257cfb655592d28e4ec3c5bfd9e3d1ee8f99541a1f85ba9719e44418432c7c356c6785f17b1b521744666ed7b904f9b7d36fcce74621fc554c4ab1cad859c40caa727b70a2282a519e93a02e9bce769b76d20e0bc21ee6edd99d73f6442c5146dc7f6205f\"\",\n\t\t\t\"\"resumable\"\": true,\n\t\t\t\"\"upload_expires_at\"\": \"\"2021-10-25T01:41:30.000Z\"\",\n\t\t\t\"\"created_at\"\": \"\"2021-10-25T01:26:30.000Z\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"download_url\"\": \"\"https://storage.googleapis.com/twttr-tweet-compliance/1452416010036727813/delivery/1021848369956700166_1452416010036727813?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=complianceapi-public-svc-acct%40twttr-compliance-public-prod.iam.gserviceaccount.com%2F20211024%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20211024T232536Z&X-Goog-Expires=604800&X-Goog-SignedHeaders=host&X-Goog-Signature=30e8eba838c366aa6315a61e83ff029fc26d472787e6f2aa826df06678bdb915408d195da0035f90b0ffd7484d6d4854479dd8c14b785f795f5127d88ca852cff72023ff29f503f021bd40801175eac3a6eb9d5a065f6b54f30c3b7548a0e67fdd68b014b4856f710b7e5c7514f589f60db3d0d74e324fd8783a4d894756c0799789da78c16bb80dca71025ac586d02da5f680982726fee362ac2f88beff2deb119d4705ffcb434e359cd95cbad3771c60cde29b1e912f0a34534010fc0b18e14d2d928219cae13371b3d5b7e29df9bae44acd8742fc9fc83b4f13773430f847cbc2ea71e8df5ad18cccafa5c1ab1bf846e229af0bd10d7c949e095018633b77\"\",\n\t\t\t\"\"id\"\": \"\"1452416010036727813\"\",\n\t\t\t\"\"download_expires_at\"\": \"\"2021-10-31T23:25:36.000Z\"\",\n\t\t\t\"\"name\"\": \"\"test-202110240425\"\",\n\t\t\t\"\"status\"\": \"\"expired\"\",\n\t\t\t\"\"type\"\": \"\"tweets\"\",\n\t\t\t\"\"upload_url\"\": \"\"https://storage.googleapis.com/twttr-tweet-compliance/1452416010036727813/submission/1021848369956700166_1452416010036727813?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=complianceapi-public-svc-acct%40twttr-compliance-public-prod.iam.gserviceaccount.com%2F20211024%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20211024T232536Z&X-Goog-Expires=900&X-Goog-SignedHeaders=content-length%3Bcontent-type%3Bhost%3Bx-goog-resumable&X-Goog-Signature=6a3a1a71e67579f97748ba3e81b1ca75570514a8e6c866a4778c0d938fe40d4379fdbb7ab1aeed8309c352389c2fe2a1e2e238c5990b8c128da7db294324908ce9ae6036206f642319769cbd8507b1def8107b43c0c77bc5d2cc68782c0ff2bfc5bc47b31074c372c4f016745c828d5feca9949135be9bcec18e361d7055eec9a06f83c373c728ddcadbe33b5059b2e36fe0fc3f3e0ff9b5cea10e00957eeb787451d4759d10ac5b40920cd151295065355d04e9f2cb710469a141b273dd954c11c2568ace1c5b9e025744724c4216c9959730cc04062e24fd69c574df794edaafcaa429466e8c4a2ec7c31980c138a01012299f170ab88de8f4826efa74be35\"\",\n\t\t\t\"\"resumable\"\": true,\n\t\t\t\"\"upload_expires_at\"\": \"\"2021-10-24T23:40:36.000Z\"\",\n\t\t\t\"\"created_at\"\": \"\"2021-10-24T23:25:36.000Z\"\"\n\t\t}\n\t]\n}\";\n\n        const string ErrorTweet = @\"{\n\t\"\"errors\"\": [\n\t\t{\n\t\t\t\"\"detail\"\": \"\"Could not find tweet with ids: [1].\"\",\n\t\t\t\"\"title\"\": \"\"Not Found Error\"\",\n\t\t\t\"\"resource_type\"\": \"\"tweet\"\",\n\t\t\t\"\"parameter\"\": \"\"ids\"\",\n\t\t\t\"\"value\"\": \"\"1\"\",\n\t\t\t\"\"type\"\": \"\"https://api.twitter.com/2/problems/resource-not-found\"\"\n\t\t}\n\t]\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/CountsTests/CountsRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.CountsTests\n{\n    [TestClass]\n    public class CountsRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public CountsRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new CountsRequestProcessor<Counts>();\n\n            var endTime = new DateTime(2020, 8, 30);\n            var startTime = new DateTime(2020, 8, 1);\n            Expression<Func<Counts, bool>> expression =\n                count =>\n                    count.Type == CountType.All &&\n                    count.EndTime == endTime &&\n                    count.Granularity == Granularity.Day &&\n                    count.NextToken == \"abc\" &&\n                    count.Query == \"LINQ to Twitter\" &&\n                    count.SinceID == \"123\" &&\n                    count.StartTime == startTime &&\n                    count.UntilID == \"525\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.Type), ((int)CountType.All).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.EndTime), \"08/30/2020 00:00:00\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.Granularity), ((int)Granularity.Day).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.NextToken), \"abc\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(Counts.Query), \"LINQ to Twitter\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.SinceID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.StartTime), \"08/01/2020 00:00:00\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Counts.UntilID), \"525\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForRecent_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets/counts/recent?\" +\n                \"query=LINQ%20to%20Twitter&\" +\n                \"end_time=2021-01-01T12%3A59%3A59Z&\" +\n                \"granularity=day&\" +\n                \"next_token=abc&\" +\n                \"since_id=123&\" +\n                \"start_time=2020-12-31T00%3A00%3A01Z&\" +\n                \"until_id=525\";\n            var countReqProc = new CountsRequestProcessor<Counts> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Counts.Query), \"LINQ to Twitter\" },\n                    { nameof(Counts.Type), CountType.Recent.ToString() },\n                    { nameof(Counts.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },\n                    { nameof(Counts.Granularity), Granularity.Day.ToString().ToLower() },\n                    { nameof(Counts.NextToken), \"abc\" },\n                    { nameof(Counts.SinceID), \"123\" },\n                    { nameof(Counts.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },\n                    { nameof(Counts.UntilID), \"525\" },\n               };\n\n            Request req = countReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForAll_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets/counts/all?\" +\n                \"query=LINQ%20to%20Twitter&\" +\n                \"end_time=2021-01-01T12%3A59%3A59Z&\" +\n                \"granularity=day&\" +\n                \"next_token=abc&\" +\n                \"since_id=123&\" +\n                \"start_time=2020-12-31T00%3A00%3A01Z&\" +\n                \"until_id=525\";\n            var countReqProc = new CountsRequestProcessor<Counts> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Counts.Query), \"LINQ to Twitter\" },\n                    { nameof(Counts.Type), CountType.All.ToString() },\n                    { nameof(Counts.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },\n                    { nameof(Counts.Granularity), Granularity.Day.ToString().ToLower() },\n                    { nameof(Counts.NextToken), \"abc\" },\n                    { nameof(Counts.SinceID), \"123\" },\n                    { nameof(Counts.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },\n                    { nameof(Counts.UntilID), \"525\" },\n               };\n\n            Request req = countReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Parameters_Null()\n        {\n            var countReqProc = new CountsRequestProcessor<Counts> { BaseUrl = BaseUrl2 };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                countReqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_Query()\n        {\n            var countReqProc = new CountsRequestProcessor<Counts> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Counts.Type), CountType.Recent.ToString() },\n                    { nameof(Counts.Query), null },\n               };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentNullException>(() =>\n                    countReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Counts.Query), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_CountRanges()\n        {\n            var countReqProc = new CountsRequestProcessor<Counts> { BaseUrl = BaseUrl2 };\n\n            List<Counts> results = countReqProc.ProcessResults(CountResponse);\n\n            Assert.IsNotNull(results);\n            Counts counts = results.SingleOrDefault();\n            Assert.IsNotNull(counts);\n            List<CountRange> ranges = counts.CountRanges;\n            Assert.IsNotNull(ranges);\n            Assert.AreEqual(8, ranges.Count);\n            CountRange range = ranges[6];\n            Assert.AreEqual(DateTime.Parse(\"2021-09-18\").Date, range.End.Date);\n            Assert.AreEqual(DateTime.Parse(\"2021-09-17\").Date, range.Start.Date);\n            Assert.AreEqual(2, range.TweetCount);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Meta()\n        {\n            var countReqProc = new CountsRequestProcessor<Counts> { BaseUrl = BaseUrl2 };\n\n            List<Counts> results = countReqProc.ProcessResults(CountResponse);\n\n            Assert.IsNotNull(results);\n            Counts counts = results.SingleOrDefault();\n            Assert.IsNotNull(counts);\n            CountsMeta meta = counts.Meta;\n            Assert.IsNotNull(meta);\n            Assert.AreEqual(5, meta.TotalTweetCount);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var countReqProc = new CountsRequestProcessor<Counts>\n            {\n                BaseUrl = BaseUrl2,\n                Type = CountType.Recent,\n                EndTime = new DateTime(2020, 12, 31),\n                Granularity = Granularity.Minute,\n                NextToken = \"789\",\n                Query = \"JoeMayo\",\n                SinceID = \"1\",\n                StartTime = new DateTime(2020, 1, 1),\n                UntilID = \"901\"\n            };\n\n            var countResult = countReqProc.ProcessResults(CountResponse);\n\n            Assert.IsNotNull(countResult);\n            Assert.AreEqual(1, countResult.Count);\n            var count = countResult.Single();\n            Assert.IsNotNull(count);\n            Assert.AreEqual(CountType.Recent, count.Type);\n            Assert.AreEqual(new DateTime(2020, 12, 31), count.EndTime);\n            Assert.AreEqual(Granularity.Minute, count.Granularity);\n            Assert.AreEqual(\"789\", count.NextToken);\n            Assert.AreEqual(\"JoeMayo\", count.Query);\n            Assert.AreEqual(\"1\", count.SinceID);\n            Assert.AreEqual(new DateTime(2020, 1, 1), count.StartTime);\n            Assert.AreEqual(\"901\", count.UntilID);\n        }\n\n        #region CountResponse\n\n        const string CountResponse = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-12T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-11T02:15:42.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 0\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-13T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-12T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 3\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-14T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-13T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 0\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-15T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-14T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 0\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-16T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-15T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 0\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-17T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-16T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 0\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-18T00:00:00.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-17T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 2\n\t\t},\n\t\t{\n\t\t\t\"\"end\"\": \"\"2021-09-18T02:15:42.000Z\"\",\n\t\t\t\"\"start\"\": \"\"2021-09-18T00:00:00.000Z\"\",\n\t\t\t\"\"tweet_count\"\": 0\n\t\t}\n\t],\n\t\"\"meta\"\": {\n\t\t\"\"total_tweet_count\"\": 5\n\t}\n}\";\n\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/DirectMessageEventsTests/DirectMessageEventsCommandsTests.cs",
    "content": "﻿using LinqToTwitter.Common.Entities;\nusing LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.DirectMessageEventsTests\n{\n    [TestClass]\n    public class DirectMessageEventsCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public DirectMessageEventsCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void DirectMessageRequestProcessor_Works_With_Actions()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>();\n\n            Assert.IsInstanceOfType(dmReqProc, typeof(IRequestProcessorWithAction<DirectMessageEvents>));\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(DirectMessageEventsResponse);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<DirectMessageEventsValue>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithRecipientID_ReturnsCreatedDM()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            DirectMessageEvents dmEvt = await ctx.NewDirectMessageEventAsync(RecipientID, Text);\n\n            Assert.IsNotNull(dmEvt);\n            DirectMessageEventsValue dmVal = dmEvt.Value;\n            Assert.IsNotNull(dmVal);\n            DMEvent evt = dmVal.DMEvent;\n            Assert.IsNotNull(evt);\n            Assert.AreEqual(\"message_create\", evt.Type);\n            Assert.AreEqual(\"917929712638246916\", evt.ID);\n            Assert.AreEqual(\"1507686472459\", evt.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 10, 11, 01, 47, 52, 459), evt.CreatedAt);\n            DirectMessageCreate mc = evt.MessageCreate;\n            Assert.IsNotNull(mc);\n            Assert.AreEqual(\"15411837\", mc.SenderID);\n            DirectMessageTarget tgt = mc.Target;\n            Assert.IsNotNull(tgt);\n            Assert.AreEqual(\"16761255\", tgt.RecipientID);\n            DirectMessageData md = mc.MessageData;\n            Assert.IsNotNull(md);\n            Assert.AreEqual(\n                \"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https://t.co/ikGq2AnAir and https://t.co/nLvwwjz40q on 10/10/2017 6:47:46 PM!'\",\n                md.Text);\n            Entities ent = md.Entities;\n            Assert.IsNotNull(ent);\n            List<HashTagEntity> hashtags = ent.HashTagEntities;\n            Assert.IsNotNull(hashtags);\n            Assert.AreEqual(2, hashtags.Count);\n            HashTagEntity ht1 = hashtags[0];\n            Assert.IsNotNull(ht1);\n            Assert.AreEqual(\"TwitterAPI\", ht1.Text);\n            int[] ht1i = ht1.Indices;\n            Assert.IsNotNull(ht1i);\n            Assert.AreEqual(58, ht1i[0]);\n            Assert.AreEqual(69, ht1i[1]);\n            HashTagEntity ht2 = hashtags[1];\n            Assert.IsNotNull(ht2);\n            Assert.AreEqual(\"chatbot\", ht2.Text);\n            int[] ht2i = ht2.Indices;\n            Assert.IsNotNull(ht2i);\n            Assert.AreEqual(70, ht2i[0]);\n            Assert.AreEqual(78, ht2i[1]);\n            List<SymbolEntity> syms = ent.SymbolEntities;\n            Assert.IsNotNull(syms);\n            Assert.AreEqual(2, syms.Count);\n            SymbolEntity sym1 = syms[0];\n            Assert.IsNotNull(sym1);\n            Assert.AreEqual(\"MSFT\", sym1.Text);\n            int[] sym1i = sym1.Indices;\n            Assert.IsNotNull(sym1i);\n            Assert.AreEqual(35, sym1i[0]);\n            Assert.AreEqual(40, sym1i[1]);\n            SymbolEntity sym2 = syms[1];\n            Assert.IsNotNull(sym2);\n            Assert.AreEqual(\"TSLA\", sym2.Text);\n            int[] sym2i = sym2.Indices;\n            Assert.IsNotNull(sym2i);\n            Assert.AreEqual(47, sym2i[0]);\n            Assert.AreEqual(52, sym2i[1]);\n            List<UserMentionEntity> usrs = ent.UserMentionEntities;\n            Assert.IsNotNull(usrs);\n            Assert.AreEqual(2, usrs.Count);\n            UserMentionEntity um1 = usrs[0];\n            Assert.IsNotNull(um1);\n            Assert.AreEqual(\"JoeMayo\", um1.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", um1.Name);\n            Assert.AreEqual(15411837ul, um1.Id);\n            Assert.AreEqual(\"15411837\", um1.IdStr);\n            int[] um1i = um1.Indices;\n            Assert.IsNotNull(um1i);\n            Assert.AreEqual(2, um1i.Length);\n            Assert.AreEqual(8, um1i[0]);\n            Assert.AreEqual(16, um1i[1]);\n            UserMentionEntity um2 = usrs[1];\n            Assert.IsNotNull(um2);\n            Assert.AreEqual(\"Linq2Twitr\", um2.ScreenName);\n            Assert.AreEqual(\"LINQ to Twitr\", um2.Name);\n            Assert.AreEqual(16761255ul, um2.Id);\n            Assert.AreEqual(\"16761255\", um2.IdStr);\n            int[] um2i = um2.Indices;\n            Assert.IsNotNull(um2i);\n            Assert.AreEqual(2, um2i.Length);\n            Assert.AreEqual(20, um2i[0]);\n            Assert.AreEqual(31, um2i[1]);\n            List<UrlEntity> urls = ent.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(2, urls.Count);\n            UrlEntity url1 = urls[0];\n            Assert.IsNotNull(url1);\n            Assert.AreEqual(\"https://t.co/ikGq2AnAir\", url1.Url);\n            Assert.AreEqual(\"http://bit.ly/2xSJWJk\", url1.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/2xSJWJk\", url1.DisplayUrl);\n            int[] url1i = url1.Indices;\n            Assert.IsNotNull(url1i);\n            Assert.AreEqual(2, url1i.Length);\n            Assert.AreEqual(82, url1i[0]);\n            Assert.AreEqual(105, url1i[1]);\n            UrlEntity url2 = urls[1];\n            Assert.IsNotNull(url2);\n            Assert.AreEqual(\"https://t.co/nLvwwjz40q\", url2.Url);\n            Assert.AreEqual(\"http://amzn.to/2gD09X6\", url2.ExpandedUrl);\n            Assert.AreEqual(\"amzn.to/2gD09X6\", url2.DisplayUrl);\n            int[] url2i = url2.Indices;\n            Assert.IsNotNull(url2i);\n            Assert.AreEqual(2, url2i.Length);\n            Assert.AreEqual(110, url2i[0]);\n            Assert.AreEqual(133, url2i[1]);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.NewDirectMessageEventAsync(RecipientID, Text);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Hi\";\n            var ctx = InitializeTwitterContext();\n\n            await ctx.NewDirectMessageEventAsync(RecipientID, Text);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<DirectMessageEventsValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithZeroRecipientID_Throws()\n        {\n            const int RecipientID = 0;\n            const string Text = \"Test Text\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageEventAsync(RecipientID, Text));\n\n            Assert.AreEqual(\"recipientID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithNullText_Throws()\n        {\n            const int RecipientID = 1;\n            const string Text = null;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageEventAsync(RecipientID, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewDirectMessageEventsAsync_WithEmptyText_Throws()\n        {\n            const int RecipientID = 1;\n            const string Text = \"\";\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewDirectMessageEventAsync(RecipientID, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteDirectMessageEventsAsync_WithValidParameters_HasAnEmptyRawResult()\n        {\n            const ulong DirectMessageID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteDirectMessageEventAsync(DirectMessageID);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteDirectMessageEventsAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong DirectMessageID = 1;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DeleteDirectMessageEventAsync(DirectMessageID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/destroy.json?id=1\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteDirectMessageEventsAsync_WithZeroDirectMessageID_Throws()\n        {\n            const int DirectMessageID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteDirectMessageEventAsync(DirectMessageID));\n\n            Assert.AreEqual(\"directMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task RequestQuickReplyOptionsAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"What is your choice?\";\n            List<QuickReplyOption> options = BuildOptions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestQuickReplyOptionsAsync(RecipientID, Text, options);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task RequestQuickReplyOptionsAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"What is your choice?\";\n            List<QuickReplyOption> options = BuildOptions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestQuickReplyOptionsAsync(RecipientID, Text, options);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<DirectMessageEventsValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        static List<QuickReplyOption> BuildOptions()\n        {\n            return new List<QuickReplyOption>\n            {\n                new QuickReplyOption\n                {\n                    Label = \"Option 1\",\n                    Description = \"Description for the first option.\",\n                    Metadata = \"abc001\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 2\",\n                    Description = \"Description for the second option.\",\n                    Metadata = \"abc002\"\n                },\n                new QuickReplyOption\n                {\n                    Label = \"Option 3\",\n                    Description = \"Description for the third option.\",\n                    Metadata = \"abc003\"\n                },\n            };\n        }\n\n        [TestMethod]\n        public async Task RequestButtonChoiceAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Where would you like to go?\";\n            List<CallToAction> ctas = BuildCallToActions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestButtonChoiceAsync(RecipientID, Text, ctas);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task RequestButtonChoiceAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 1;\n            const string Text = \"Where would you like to go?\";\n            List<CallToAction> ctas = BuildCallToActions();\n            var ctx = InitializeTwitterContext();\n\n            await ctx.RequestButtonChoiceAsync(RecipientID, Text, ctas);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/events/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<DirectMessageEventsValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        static List<CallToAction> BuildCallToActions()\n        {\n            return new List<CallToAction>\n            {\n                new CallToAction\n                {\n                    Label = \"Visit LINQ to Twitter Website\",\n                    Url = \"https://github.com/JoeMayo/LinqToTwitter\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @JoeMayo on Twitter\",\n                    Url = \"https://twitter.com/JoeMayo\",\n                    Type = \"web_url\"\n                },\n                new CallToAction\n                {\n                    Label = \"Visit @Linq2Twitr on Twitter\",\n                    Url = \"https://twitter.com/Linq2Twitr\",\n                    Type = \"web_url\"\n                }\n            };\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithValidParameters_HasAnEmptyRawResult()\n        {\n            const ulong LastReadEventID = 1;\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.MarkReadAsync(LastReadEventID, RecipientID);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong LastReadEventID = 1;\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.MarkReadAsync(LastReadEventID, RecipientID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/direct_messages/mark_read.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithZeroLastReadEventID_Throws()\n        {\n            const ulong LastReadEventID = 0;\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.MarkReadAsync(LastReadEventID, RecipientID));\n\n            Assert.AreEqual(\"lastReadEventID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task MarkReadAsync_WithZeroRecipientID_Throws()\n        {\n            const ulong LastReadEventID = 1;\n            const ulong RecipientID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.MarkReadAsync(LastReadEventID, RecipientID));\n\n            Assert.AreEqual(\"recipientID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task IndicateTypingAsync_WithValidParameters_HasAnEmptyRawResult()\n        {\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.IndicateTypingAsync(RecipientID);\n\n            Assert.AreEqual(DirectMessageEventsResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task IndicateTypingAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong RecipientID = 2;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.IndicateTypingAsync(RecipientID);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<DirectMessageEvents>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/direct_messages/indicate_typing.json\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task IndicateTypingAsync_WithZeroRecipientID_Throws()\n        {\n            const ulong RecipientID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.IndicateTypingAsync(RecipientID));\n\n            Assert.AreEqual(\"recipientID\", ex.ParamName);\n        }\n\n        #region Response Messages\n\n        const string DirectMessageEventsResponse = @\"{\n\t\"\"event\"\": {\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"917929712638246916\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507686472459\"\",\n\t\t\"\"message_create\"\": {\n            \"\"target\"\": {\n                \"\"recipient_id\"\": \"\"16761255\"\"\n\n            },\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"message_data\"\": {\n                \"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/10\\/2017 6:47:46 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n                    \"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n\n                    },\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n    }],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/DirectMessageEventsTests/DirectMessageEventsRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Common.Entities;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.DirectMessageEventsTests\n{\n    [TestClass]\n    public class DirectMessageEventsRequestProcessorTests\n    {\n        public DirectMessageEventsRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithShowType_ConstructsUrl()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/events/show.json?id=1\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageEventsType.Show).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"1\" }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithListType_ConstructsUrl()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/events/list.json?count=2&cursor=ABC123\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageEventsType.List).ToString(CultureInfo.InvariantCulture) },\n                        { \"Count\", \"2\" },\n                        { \"Cursor\", \"ABC123\" }\n                };\n\n            Request req = dmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForShowWithoutID_Throws()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)DirectMessageEventsType.Show).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithEmptyResults_ReturnsEmptyCollection()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(dms.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForShow_HandlesSingleResult()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.Show\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            Assert.IsNotNull(dms?.SingleOrDefault());\n\n            DirectMessageEvents dmEvt = dms.First();\n\n            Assert.IsNotNull(dmEvt);\n            DirectMessageEventsValue dmVal = dmEvt.Value;\n            Assert.IsNotNull(dmVal);\n            DMEvent evt = dmVal.DMEvent;\n            Assert.IsNotNull(evt);\n            Assert.AreEqual(\"message_create\", evt.Type);\n            Assert.AreEqual(\"917929712638246916\", evt.ID);\n            Assert.AreEqual(\"1507686472459\", evt.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 10, 11, 01, 47, 52, 459), evt.CreatedAt);\n            DirectMessageCreate mc = evt.MessageCreate;\n            Assert.IsNotNull(mc);\n            Assert.AreEqual(\"15411837\", mc.SenderID);\n            Assert.AreEqual(\"472356\", mc.SourceAppID);\n            DirectMessageTarget tgt = mc.Target;\n            Assert.IsNotNull(tgt);\n            Assert.AreEqual(\"16761255\", tgt.RecipientID);\n            DirectMessageData md = mc.MessageData;\n            Assert.IsNotNull(md);\n            Assert.AreEqual(\n                \"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https://t.co/ikGq2AnAir and https://t.co/nLvwwjz40q on 10/10/2017 6:47:46 PM!'\",\n                md.Text);\n            Entities ent = md.Entities;\n            Assert.IsNotNull(ent);\n            List<HashTagEntity> hashtags = ent.HashTagEntities;\n            Assert.IsNotNull(hashtags);\n            Assert.AreEqual(2, hashtags.Count);\n            HashTagEntity ht1 = hashtags[0];\n            Assert.IsNotNull(ht1);\n            Assert.AreEqual(\"TwitterAPI\", ht1.Text);\n            int[] ht1i = ht1.Indices;\n            Assert.IsNotNull(ht1i);\n            Assert.AreEqual(58, ht1i[0]);\n            Assert.AreEqual(69, ht1i[1]);\n            HashTagEntity ht2 = hashtags[1];\n            Assert.IsNotNull(ht2);\n            Assert.AreEqual(\"chatbot\", ht2.Text);\n            int[] ht2i = ht2.Indices;\n            Assert.IsNotNull(ht2i);\n            Assert.AreEqual(70, ht2i[0]);\n            Assert.AreEqual(78, ht2i[1]);\n            List<SymbolEntity> syms = ent.SymbolEntities;\n            Assert.IsNotNull(syms);\n            Assert.AreEqual(2, syms.Count);\n            SymbolEntity sym1 = syms[0];\n            Assert.IsNotNull(sym1);\n            Assert.AreEqual(\"MSFT\", sym1.Text);\n            int[] sym1i = sym1.Indices;\n            Assert.IsNotNull(sym1i);\n            Assert.AreEqual(35, sym1i[0]);\n            Assert.AreEqual(40, sym1i[1]);\n            SymbolEntity sym2 = syms[1];\n            Assert.IsNotNull(sym2);\n            Assert.AreEqual(\"TSLA\", sym2.Text);\n            int[] sym2i = sym2.Indices;\n            Assert.IsNotNull(sym2i);\n            Assert.AreEqual(47, sym2i[0]);\n            Assert.AreEqual(52, sym2i[1]);\n            List<UserMentionEntity> usrs = ent.UserMentionEntities;\n            Assert.IsNotNull(usrs);\n            Assert.AreEqual(2, usrs.Count);\n            UserMentionEntity um1 = usrs[0];\n            Assert.IsNotNull(um1);\n            Assert.AreEqual(\"JoeMayo\", um1.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", um1.Name);\n            Assert.AreEqual(15411837ul, um1.Id);\n            Assert.AreEqual(\"15411837\", um1.IdStr);\n            int[] um1i = um1.Indices;\n            Assert.IsNotNull(um1i);\n            Assert.AreEqual(2, um1i.Length);\n            Assert.AreEqual(8, um1i[0]);\n            Assert.AreEqual(16, um1i[1]);\n            UserMentionEntity um2 = usrs[1];\n            Assert.IsNotNull(um2);\n            Assert.AreEqual(\"Linq2Twitr\", um2.ScreenName);\n            Assert.AreEqual(\"LINQ to Twitr\", um2.Name);\n            Assert.AreEqual(16761255ul, um2.Id);\n            Assert.AreEqual(\"16761255\", um2.IdStr);\n            int[] um2i = um2.Indices;\n            Assert.IsNotNull(um2i);\n            Assert.AreEqual(2, um2i.Length);\n            Assert.AreEqual(20, um2i[0]);\n            Assert.AreEqual(31, um2i[1]);\n            List<UrlEntity> urls = ent.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(2, urls.Count);\n            UrlEntity url1 = urls[0];\n            Assert.IsNotNull(url1);\n            Assert.AreEqual(\"https://t.co/ikGq2AnAir\", url1.Url);\n            Assert.AreEqual(\"http://bit.ly/2xSJWJk\", url1.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/2xSJWJk\", url1.DisplayUrl);\n            int[] url1i = url1.Indices;\n            Assert.IsNotNull(url1i);\n            Assert.AreEqual(2, url1i.Length);\n            Assert.AreEqual(82, url1i[0]);\n            Assert.AreEqual(105, url1i[1]);\n            UrlEntity url2 = urls[1];\n            Assert.IsNotNull(url2);\n            Assert.AreEqual(\"https://t.co/nLvwwjz40q\", url2.Url);\n            Assert.AreEqual(\"http://amzn.to/2gD09X6\", url2.ExpandedUrl);\n            Assert.AreEqual(\"amzn.to/2gD09X6\", url2.DisplayUrl);\n            int[] url2i = url2.Indices;\n            Assert.IsNotNull(url2i);\n            Assert.AreEqual(2, url2i.Length);\n            Assert.AreEqual(110, url2i[0]);\n            Assert.AreEqual(133, url2i[1]);\n            JsonElement app = dmVal.Apps;\n            JsonElement appDetail = app.GetProperty(\"472356\");\n            Assert.AreEqual(\"472356\", appDetail.GetString(\"id\"));\n            Assert.AreEqual(\"LINQ to Tweeter\", appDetail.GetString(\"name\"));\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", appDetail.GetString(\"url\"));\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForList_HandlesMultipleResults()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.List\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQueryMultipleResponses);\n\n            Assert.IsNotNull(dms?.SingleOrDefault());\n\n            DirectMessageEvents dmEvt = dms.First();\n\n            Assert.IsNotNull(dmEvt);\n            DirectMessageEventsValue dmVal = dmEvt.Value;\n            Assert.IsNotNull(dmVal);\n            List<DMEvent> evts = dmVal.DMEvents;\n            Assert.IsNotNull(evts);\n            Assert.AreEqual(2, evts.Count);\n            Assert.AreEqual(\"OTE3ODE0NTUzMzExOTMyNDIy\", dmVal.NextCursor);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithShowQuery_ReplacesInputParams()\n        {\n            const ulong ID = 5;\n\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.Show,\n                ID = ID\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQuerySingleResponse);\n\n            DirectMessageEvents dm = dms.First();\n\n            Assert.AreEqual(ID, dm.ID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithListQuery_ReplacesInputParams()\n        {\n            const int Count = 4;\n            const string Cursor = \"ABC123\";\n\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = DirectMessageEventsType.List,\n                Count = Count,\n                Cursor = Cursor\n            };\n\n            List<DirectMessageEvents> dms = dmReqProc.ProcessResults(TestQueryMultipleResponses);\n\n            DirectMessageEvents dm = dms.First();\n\n            Assert.AreEqual(Count, dm.Count);\n            Assert.AreEqual(Cursor, dm.Cursor);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents>();\n            Expression<Func<DirectMessageEvents, bool>> expression =\n                dm =>\n                    dm.Type == DirectMessageEventsType.Show &&\n                    dm.Count == 1 &&\n                    dm.Cursor == \"ABC123\" &&\n                    dm.ID == 456;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = dmReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)DirectMessageEventsType.Show).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"ABC123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithMissingType_Throws()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParamDictionary_Throws()\n        {\n            var dmReqProc = new DirectMessageEventsRequestProcessor<DirectMessageEvents> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => dmReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        const string TestQuerySingleResponse = @\"{\n\t\"\"event\"\": {\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"917929712638246916\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507686472459\"\",\n\t\t\"\"message_create\"\": {\n            \"\"target\"\": {\n                \"\"recipient_id\"\": \"\"16761255\"\"\n\n            },\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\t\"\"message_data\"\": {\n                \"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/10\\/2017 6:47:46 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n                    \"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n\n                    },\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n    }],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        public const string TestQueryMultipleResponses = @\"{\n\t\"\"events\"\": [{\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"918326071484805124\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507780971772\"\",\n\t\t\"\"message_create\"\": {\n\t\t\t\"\"target\"\": {\n\t\t\t\t\"\"recipient_id\"\": \"\"16761255\"\"\n\t\t\t},\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\t\"\"message_data\"\": {\n\t\t\t\t\"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/11\\/2017 9:02:49 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n    },\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n}],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\t\"\"type\"\": \"\"message_create\"\",\n\t\t\"\"id\"\": \"\"918309059970842629\"\",\n\t\t\"\"created_timestamp\"\": \"\"1507776915911\"\",\n\t\t\"\"message_create\"\": {\n\t\t\t\"\"target\"\": {\n\t\t\t\t\"\"recipient_id\"\": \"\"16761255\"\"\n\t\t\t},\n\t\t\t\"\"sender_id\"\": \"\"15411837\"\",\n\t\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\t\"\"message_data\"\": {\n\t\t\t\t\"\"text\"\": \"\"DM from @JoeMayo to @Linq2Twitr of $MSFT &amp; $TSLA with #TwitterAPI #chatbot at https:\\/\\/t.co\\/ikGq2AnAir and https:\\/\\/t.co\\/nLvwwjz40q on 10\\/11\\/2017 7:55:13 PM!'\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"TwitterAPI\"\",\n\t\t\t\t\t\t\"\"indices\"\": [58,\n\t\t\t\t\t\t69]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"chatbot\"\",\n\t\t\t\t\t\t\"\"indices\"\": [70,\n\t\t\t\t\t\t78]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"symbols\"\": [{\n\t\t\t\t\t\t\"\"text\"\": \"\"MSFT\"\",\n\t\t\t\t\t\t\"\"indices\"\": [35,\n\t\t\t\t\t\t40]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"text\"\": \"\"TSLA\"\",\n\t\t\t\t\t\t\"\"indices\"\": [47,\n\t\t\t\t\t\t52]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [8,\n\t\t\t\t\t\t16]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\t\"\"indices\"\": [20,\n\t\t\t\t\t\t31]\n\t\t\t\t\t}],\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/ikGq2AnAir\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly\\/2xSJWJk\"\",\n\t\t\t\t\t\t\"\"indices\"\": [82,\n\t\t\t\t\t\t105]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/nLvwwjz40q\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"amzn.to\\/2gD09X6\"\",\n\t\t\t\t\t\t\"\"indices\"\": [110,\n\t\t\t\t\t\t133]\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}],\n\t\"\"apps\"\": {\n\t\t\"\"268278\"\": {\n\t\t\t\"\"id\"\": \"\"268278\"\",\n\t\t\t\"\"name\"\": \"\"Twitter Web Client\"\",\n\t\t\t\"\"url\"\": \"\"http:\\/\\/twitter.com\"\"\n\t\t},\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t},\n\t\"\"next_cursor\"\": \"\"OTE3ODE0NTUzMzExOTMyNDIy\"\"\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/FavoritesTests/FavoritesCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesCommandsTests\n    {\n        public FavoritesCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SingleStatusResponse);\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Status>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void CreateFavoritesRequestProcessor_Works_With_Actions()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            Assert.IsInstanceOfType(favReqProc, typeof(IRequestProcessorWithAction<Favorites>));\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_WithValidID_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            Status actual = await ctx.CreateFavoriteAsync(Id);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1ul;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.CreateFavoriteAsync(Id);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateFavoriteAsync_Throws_On_Zero_ID()\n        {\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateFavoriteAsync(0));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_WithValidID_Succeeds()\n        {\n            const ulong Id = 1ul;\n            const ulong ExpectedStatusID = 184835136037191681ul;\n            var ctx = InitializeTwitterContext();\n\n            Status actual = await ctx.DestroyFavoriteAsync(Id, true);\n\n            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_WithRawResult_Succeeds()\n        {\n            const ulong Id = 1ul;\n            var ctx = InitializeTwitterContext();\n\n            await ctx.DestroyFavoriteAsync(Id, true);\n\n            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyFavoriteAsync_Throws_On_Zero_ID()\n        {\n            const ulong ID = 0;\n            var ctx = InitializeTwitterContext();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFavoriteAsync(ID, true));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        const string SingleStatusResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/FavoritesTests/FavoritesCtorTests.cs",
    "content": "﻿using LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesCtorTests\n    {\n        public FavoritesCtorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Favorites_Ctor_Parses_JsonData()\n        {\n            var favJson = JsonDocument.Parse(TwitterResponse).RootElement;\n\n            var favorite = new Favorites(favJson);\n\n            Assert.AreEqual(1234ul, favorite.InReplyToStatusID);\n            Assert.AreEqual(new DateTimeOffset(2012, 4, 5, 16, 44, 8, new TimeSpan(0)).DateTime, favorite.CreatedAt);\n            Assert.IsFalse(favorite.Truncated);\n            Assert.AreEqual(false, favorite.Retweeted);\n            Assert.IsNotNull(favorite.User);\n        }\n\n        const string TwitterResponse = @\"\n   {\n      \"\"in_reply_to_status_id_str\"\":\"\"1234\"\",\n      \"\"in_reply_to_status_id\"\":1234,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":\"\"5678\"\",\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      }\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/FavoritesTests/FavoritesRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FavoritesTests\n{\n    [TestClass]\n    public class FavoritesRequestProcessorTests\n    {\n        public FavoritesRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites>();\n\n            List<Favorites> favorites = favReqProc.ProcessResults(TwitterResponse);\n\n            Assert.AreEqual(2, favorites.Count());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var favorites = reqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(favorites.Any());\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Favorites, bool>> expression =\n                fav =>\n                    fav.Type == FavoritesType.Favorites &&\n                    fav.UserID == 123ul &&\n                    fav.ScreenName == \"JoeMayo\" &&\n                    fav.Count == 100 &&\n                    fav.SinceID == 456 &&\n                    fav.MaxID == 789 &&\n                    fav.IncludeEntities == true &&\n                    fav.TweetMode == TweetMode.Extended;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = favReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.Type), ((int)FavoritesType.Favorites).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.UserID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.ScreenName), \"JoeMayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.Count), \"100\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.SinceID), \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.MaxID), \"789\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.IncludeEntities), \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Favorites.TweetMode), ((int)TweetMode.Extended).ToString(CultureInfo.InvariantCulture))));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Favorites_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/favorites/list.json?user_id=123&screen_name=JoeMayo&count=100&since_id=456&max_id=789&include_entities=true&tweet_mode=extended\";\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Favorites.Type), FavoritesType.Favorites.ToString() },\n                    { nameof(Favorites.UserID), \"123\" },\n                    { nameof(Favorites.ScreenName), \"JoeMayo\" },\n                    { nameof(Favorites.Count), \"100\" },\n                    { nameof(Favorites.SinceID), \"456\" },\n                    { nameof(Favorites.MaxID), \"789\" },\n                    { nameof(Favorites.IncludeEntities), true.ToString() },\n                    { nameof(Favorites.TweetMode), ((int)TweetMode.Extended).ToString() }\n                };\n\n            Request req = favReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/favorites/list.json?user_id=123&screen_name=JoeMayo&count=100&since_id=456&max_id=789&include_entities=true&tweet_mode=extended\";\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(Favorites.Type), FavoritesType.Favorites.ToString() },\n                    { nameof(Favorites.UserID), \"123\" },\n                    { nameof(Favorites.ScreenName), \"JoeMayo\" },\n                    { nameof(Favorites.Count), \"100\" },\n                    { nameof(Favorites.SinceID), \"456\" },\n                    { nameof(Favorites.MaxID), \"789\" },\n                    { nameof(Favorites.IncludeEntities), true.ToString() },\n                    { nameof(Favorites.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n                };\n\n            Request req = favReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type_Param()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => favReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Params_Dictionary()\n        {\n            var favReqProc = new FavoritesRequestProcessor<Favorites> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => favReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"parameters\", ex.ParamName);\n        }\n\n        const string TwitterResponse = @\"[\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Apr 05 16:44:08 +0000 2012\"\",\n      \"\"id_str\"\":\"\"187943716558864384\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"id\"\":24358412,\n         \"\"statuses_count\"\":1921,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":10,\n         \"\"utc_offset\"\":null,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Mark Russinovich\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.zerodaythebook.com\"\",\n         \"\"created_at\"\":\"\"Sat Mar 14 11:43:34 +0000 2009\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Technical Fellow at Microsoft in Windows Azure, author of Zero Day: A Novel, Windows Internals, Sysinternals Admin Reference and the Sysinternals utilities. \"\",\n         \"\"id_str\"\":\"\"24358412\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"time_zone\"\":null,\n         \"\"following\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"location\"\":\"\"\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":596,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":70,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1497556516\\/markrussinovich_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/198832493\\/ZeroDayCover.jpg\"\",\n         \"\"followers_count\"\":11740,\n         \"\"screen_name\"\":\"\"markrussinovich\"\",\n         \"\"profile_background_tile\"\":true\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":41,\n      \"\"favorited\"\":true,\n      \"\"id\"\":187943716558864384,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Windows Internals 6th Edition Part 1 (on Win7\\/Server 2008R2) is now available for purchase! http:\\/\\/t.co\\/F8vE1LnC\"\"\n   },\n   {\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"created_at\"\":\"\"Thu Mar 22 15:34:00 +0000 2012\"\",\n      \"\"id_str\"\":\"\"182852636905701377\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"truncated\"\":false,\n      \"\"place\"\":null,\n      \"\"retweeted\"\":false,\n      \"\"user\"\":{\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"id\"\":14457688,\n         \"\"statuses_count\"\":8803,\n         \"\"profile_sidebar_fill_color\"\":\"\"e9e9dc\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_background_color\"\":\"\"1574a4\"\",\n         \"\"verified\"\":false,\n         \"\"name\"\":\"\"Andrew Brust\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"protected\"\":false,\n         \"\"profile_link_color\"\":\"\"1574a4\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/bit.ly\\/bigondata\"\",\n         \"\"created_at\"\":\"\"Mon Apr 21 02:57:59 +0000 2008\"\",\n         \"\"default_profile\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"description\"\":\"\"Founder\\/CEO, Blue Badge Insights; ZDNet Big Data blogger; RedDevNews.com columnist; co-author Programming Microsoft SQL Server 2012; Microsoft tech influencer.\"\",\n         \"\"id_str\"\":\"\"14457688\"\",\n         \"\"profile_text_color\"\":\"\"5e6466\"\",\n         \"\"time_zone\"\":\"\"Eastern Time (US & Canada)\"\",\n         \"\"following\"\":true,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"1c4273\"\",\n         \"\"location\"\":\"\"New York, NY\"\",\n         \"\"notifications\"\":false,\n         \"\"listed_count\"\":111,\n         \"\"geo_enabled\"\":false,\n         \"\"friends_count\"\":720,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1826210109\\/AndrewBrust-_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"followers_count\"\":1743,\n         \"\"screen_name\"\":\"\"andrewbrust\"\",\n         \"\"profile_background_tile\"\":false\n      },\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"annotations\"\":null,\n      \"\"contributors\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/www.tweetdeck.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ETweetDeck\\u003C\\/a\\u003E\"\",\n      \"\"geo\"\":null,\n      \"\"retweet_count\"\":0,\n      \"\"favorited\"\":true,\n      \"\"id\"\":182852636905701377,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"text\"\":\"\"Check out my #ZDNet blog post - Big Data\\u2019s Ground Floor Consulting Opportunity - http:\\/\\/t.co\\/PxDMPRJT\"\"\n   }\n]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/FriendshipTests/FriendshipCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FriendshipTests\n{\n    [TestClass]\n    class FriendshipCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public FriendshipCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<TEntity>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void FriendshipRequestProcessor_Works_With_Actions()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsInstanceOfType(freindReqProc, typeof(IRequestProcessorWithAction<Friendship>));\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_WithValidInput_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = await ctx.CreateFriendshipAsync(ScreenName, Follow);\n\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_RawResult_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            await ctx.CreateFriendshipAsync(ScreenName, Follow);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task CreateFriendshipAsync_Throws_On_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            const bool Follow = false;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateFriendshipAsync(UserID, Follow));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_WithValidScreenName_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            string expectedName = \"Joe Mayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            User actual = await ctx.DestroyFriendshipAsync(ScreenName);\n\n            Assert.AreEqual(expectedName, actual.Name);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_WithRawResult_Succeeds()\n        {\n            const string ScreenName = \"JoeMayo\";\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            await ctx.DestroyFriendshipAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Empty_ScreenName()\n        {\n            string screenName = string.Empty;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(screenName));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Null_ScreenName()\n        {\n            string screenName = null;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(screenName));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroyFriendshipAsync_Throws_On_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            InitializeTwitterContext<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroyFriendshipAsync(UserID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Calls_Execute()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            await ctx.UpdateFriendshipSettingsAsync(\"Linq2Tweeter\", true, true);\n\n            execMock.Verify(exec => exec.PostFormUrlEncodedToTwitterAsync<Friendship>(\n                It.IsAny<string>(),\n                \"https://api.twitter.com/1.1/friendships/update.json\",\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_WithRawResult_Succeeds()\n        {\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            await ctx.UpdateFriendshipSettingsAsync(\"Linq2Tweeter\", true, true);\n\n            Assert.AreEqual(RelationshipResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Null_ScreenName()\n        {\n            string screenName = null;\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(screenName, true, true));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Empty_ScreenName()\n        {\n            const string ScreenName = \"\";\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(ScreenName, true, true));\n\n            Assert.AreEqual(\"screenName\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateFriendshipSettingsAsync_Throws_With_Zero_UserID()\n        {\n            const ulong UserID = 0;\n            InitializeTwitterContext<Friendship>(RelationshipResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UpdateFriendshipSettingsAsync(UserID, true, true));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":15411837,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n   \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n   \"\"followers_count\"\":1101,\n   \"\"default_profile\"\":false,\n   \"\"profile_background_color\"\":\"\"0099B9\"\",\n   \"\"lang\"\":\"\"en\"\",\n   \"\"utc_offset\"\":-25200,\n   \"\"name\"\":\"\"Joe Mayo\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"location\"\":\"\"Denver, CO\"\",\n   \"\"profile_link_color\"\":\"\"0099B9\"\",\n   \"\"listed_count\"\":113,\n   \"\"verified\"\":false,\n   \"\"protected\"\":false,\n   \"\"profile_use_background_image\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"following\"\":true,\n   \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n   \"\"profile_text_color\"\":\"\"3C3940\"\",\n   \"\"statuses_count\"\":1907,\n   \"\"screen_name\"\":\"\"JoeMayo\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n   \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n   \"\"friends_count\"\":210,\n   \"\"default_profile_image\"\":false,\n   \"\"contributors_enabled\"\":false,\n   \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n   \"\"id_str\"\":\"\"15411837\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"favourites_count\"\":44,\n   \"\"status\"\":{\n      \"\"retweeted\"\":true,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"possibly_sensitive_editable\"\":true,\n      \"\"place\"\":null,\n      \"\"retweet_count\"\":3,\n      \"\"id_str\"\":\"\"196991337554378752\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Apr 30 15:56:09 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196991337554378752,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Funny - http:\\/\\/t.co\\/yZW2Sbmi :)\"\"\n   },\n   \"\"profile_background_tile\"\":false,\n   \"\"notifications\"\":false,\n   \"\"show_all_inline_media\"\":false,\n   \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n   \"\"follow_request_sent\"\":false\n}\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false\n      }\n   }\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/FriendshipTests/FriendshipRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FriendshipTests\n{\n    [TestClass]\n    public class FriendshipRequestProcessorTests\n    {\n        public FriendshipRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void FriendshipRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var freindReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Assert.IsInstanceOfType(freindReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Translates_Relationships_From_LookupQuery()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Lookup };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var relations = friends.Single().Relationships;\n            Assert.IsNotNull(relations);\n            Assert.IsNotNull(relations.SingleOrDefault());\n            var connections = relations.Single().Connections;\n            Assert.IsNotNull(connections);\n            Assert.IsNotNull(connections.SingleOrDefault());\n            var connection = connections.First();\n            Assert.IsNotNull(connection);\n            Assert.AreEqual(\"following\", connection);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.Show };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(RelationshipResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var tgtRel = friend.TargetRelationship;\n            Assert.IsNotNull(tgtRel);\n            Assert.AreEqual(\"JoeMayo\", tgtRel.ScreenName);\n            Assert.IsTrue(tgtRel.FollowedBy);\n            Assert.AreEqual(15411837ul, tgtRel.ID);\n            Assert.IsFalse(tgtRel.Following);\n            var srcRel = friend.SourceRelationship;\n            Assert.IsNotNull(srcRel);\n            Assert.AreEqual(\"Linq2Tweeter\", srcRel.ScreenName);\n            Assert.IsTrue(srcRel.RetweetsWanted);\n            Assert.IsFalse(srcRel.AllReplies);\n            Assert.IsFalse(srcRel.MarkedSpam);\n            Assert.IsFalse(srcRel.FollowedBy);\n            Assert.AreEqual(16761255ul, srcRel.ID);\n            Assert.IsFalse((bool)srcRel.Blocking);\n            Assert.IsTrue((bool)srcRel.NotificationsEnabled);\n            Assert.IsTrue(srcRel.Following);\n            Assert.IsFalse(srcRel.CanDm);\n            Assert.IsTrue(srcRel.Muting);\n        }\n\n        void TestParsingIds(FriendshipType friendType)\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = friendType };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(IdsResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var cursor = friend.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(2, cursor.Previous);\n            Assert.AreEqual(1, cursor.Next);\n            var idList = friend.IDInfo;\n            Assert.IsNotNull(idList);\n            var idsCursor = idList.CursorMovement;\n            Assert.IsNotNull(idsCursor);\n            Assert.AreEqual(2, idsCursor.Previous);\n            Assert.AreEqual(1, idsCursor.Next);\n            var ids = idList.IDs;\n            Assert.IsNotNull(ids);\n            Assert.IsTrue(ids.Any());\n            var id = ids.First();\n            Assert.AreEqual(5676142ul, id);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Incoming_Response()\n        {\n            TestParsingIds(FriendshipType.Incoming);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Outgoing_Response()\n        {\n            TestParsingIds(FriendshipType.Outgoing);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_NoRetweetIDs_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.NoRetweetIDs };\n\n            List<Friendship> friends = friendReqProc.ProcessResults(NoRetweetIDsResponse);\n\n            Assert.IsNotNull(friends);\n            Assert.IsNotNull(friends.SingleOrDefault());\n            var friend = friends.Single();\n            Assert.IsNotNull(friend);\n            var idList = friend.IDInfo;\n            Assert.IsNotNull(idList);\n            var ids = idList.IDs;\n            Assert.IsNotNull(ids);\n            Assert.IsTrue(ids.Any());\n            var id = ids.First();\n            Assert.AreEqual(15411837ul, id);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<Friendship> friendships = reqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(friendships.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_FriendsListOrFollowersList_Response()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship> { Type = FriendshipType.FriendsList };\n\n            List<Friendship> friendshipList = friendReqProc.ProcessResults(FriendsFollowersResponse);\n\n            Assert.IsNotNull(friendshipList);\n            Assert.IsNotNull(friendshipList.SingleOrDefault());\n            var friendship = friendshipList.Single();\n            Assert.IsNotNull(friendship);\n            var users = friendship.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(3, users.Count);\n            var user = users.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"93604443\", user.UserIDResponse);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Params()\n        {\n            const ulong SrcUsrID = 1;\n            const string SrcScrNm = \"JoeMayo\";\n            const ulong TgtUsrID = 2;\n            const string TgtScrNm = \"MayMayo\";\n            const long Cursor = 123;\n            const int Count = 20;\n            const string ScrNm = \"JoeMayo,MayMayo\";\n            const string UsrID = \"1,2\";\n            const bool SkipStatus = true;\n            const bool IncludeUserEntities = true;\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>\n            {\n                Type = FriendshipType.Lookup,\n                SourceUserID = SrcUsrID,\n                SourceScreenName = SrcScrNm,\n                TargetUserID = TgtUsrID,\n                TargetScreenName = TgtScrNm,\n                Count = Count,\n                Cursor = Cursor,\n                ScreenName = ScrNm,\n                UserID = UsrID,\n                SkipStatus = SkipStatus,\n                IncludeUserEntities = IncludeUserEntities\n            };\n\n            List<Friendship> friendships = friendReqProc.ProcessResults(LookupResponse);\n\n            Assert.IsNotNull(friendships);\n            Assert.IsTrue(friendships.Any());\n            var friendship = friendships.First();\n            Assert.IsNotNull(friendship);\n            Assert.AreEqual(FriendshipType.Lookup, friendship.Type);\n            Assert.AreEqual(SrcUsrID, friendship.SourceUserID);\n            Assert.AreEqual(SrcScrNm, friendship.SourceScreenName);\n            Assert.AreEqual(TgtUsrID, friendship.TargetUserID);\n            Assert.AreEqual(TgtScrNm, friendship.TargetScreenName);\n            Assert.AreEqual(Count, friendship.Count);\n            Assert.AreEqual(Cursor, friendship.Cursor);\n            Assert.AreEqual(ScrNm, friendship.ScreenName);\n            Assert.AreEqual(UsrID, friendship.UserID);\n            Assert.AreEqual(SkipStatus, friendship.SkipStatus);\n            Assert.AreEqual(IncludeUserEntities, friendship.IncludeUserEntities);\n        }\n\n        [TestMethod]\n        public void ProcessActionResult_Translates_Relationships_From_UpdateSettings()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>();\n\n            Friendship friend = friendReqProc.ProcessActionResult(RelationshipResponse, FriendshipAction.Update);\n\n            var srcRel = friend.SourceRelationship;\n            Assert.AreEqual(true, srcRel.RetweetsWanted);\n            Assert.AreEqual(true, srcRel.NotificationsEnabled);\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<Friendship, bool>> expression =\n                friend =>\n                         friend.Type == FriendshipType.Show &&\n                         friend.SourceUserID == 1 &&\n                         friend.SourceScreenName == \"Name\" &&\n                         friend.TargetUserID == 2 &&\n                         friend.TargetScreenName == \"Name\" &&\n                         friend.Cursor == -1 &&\n                         friend.ScreenName == \"twitter,joemayo\" &&\n                         friend.UserID == \"123,456\" &&\n                         friend.SkipStatus == true &&\n                         friend.IncludeUserEntities == true &&\n                         friend.Count == 7;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = friendReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)FriendshipType.Show).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceUserID\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SourceScreenName\", \"Name\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetUserID\", \"2\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"TargetScreenName\", \"Name\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"-1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ScreenName\", \"twitter,joemayo\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"UserID\", \"123,456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SkipStatus\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"7\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"SourceUserID\", \"123\" },\n                    { \"SourceScreenName\", \"JoeMayo\" },\n                    { \"TargetUserID\", \"456\" },\n                    { \"TargetScreenName\", \"LinqToTweeter\" }\n                };\n            string expected = \"https://api.twitter.com/1.1/friendships/show.json?source_id=123&source_screen_name=JoeMayo&target_id=456&target_screen_name=LinqToTweeter\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_Without_Source_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", FriendshipType.Show.ToString() },\n                    { \"friendReqProcUserID\", \"456\" },\n                    { \"friendReqProcScreenName\", \"LinqToTweeter\" }\n                };\n\n            L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_Without_FriendsReqProcUrl()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Show.ToString() },\n                { \"SourceUserID\", \"123\" },\n                { \"SourceScreenName\", \"JoeMayo\" },\n            };\n\n            L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Creates_No_Retweet_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"http://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.NoRetweetIDs.ToString() }\n            };\n            string expected = \"http://api.twitter.com/1.1/friendships/no_retweets/ids.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Missing_Type()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters = null;\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Incoming_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Incoming.ToString() }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/incoming.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_With_Cursor_Param_Constructs_Incoming_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Incoming.ToString() },\n                { \"Cursor\", \"-1\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/incoming.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Outgoing_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Outgoing.ToString() }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/outgoing.json\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_With_Cursor_Param_Constructs_Outgoing_Url()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Outgoing.ToString() },\n                { \"Cursor\", \"-1\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/outgoing.json?cursor=-1\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Returns_Url_For_ScreenName()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                { \"ScreenName\", \"twitter,joemayo\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/lookup.json?screen_name=twitter%2Cjoemayo\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Returns_Url_For_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                { \"UserID\", \"123,456\" }\n            };\n            string expected = \"https://api.twitter.com/1.1/friendships/lookup.json?user_id=123%2C456\";\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildLookupUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.Lookup.ToString() },\n                //{ \"ScreenName\", \"twitter,joemayo\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FriendsList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/list.json?user_id=1&screen_name=abc&count=20&cursor=234&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"234\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildFriendListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                //{ \"UserID\", \"1\" },\n                //{ \"ScreenName\", \"abc\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FollowersList_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/list.json?user_id=1&screen_name=abc&count=20&cursor=234&skip_status=true&include_user_entities=false\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FollowersList.ToString() },\n                { \"UserID\", \"1\" },\n                { \"ScreenName\", \"abc\" },\n                { \"Count\", \"20\" },\n                { \"Cursor\", \"234\" },\n                { \"SkipStatus\", true.ToString() },\n                { \"IncludeUserEntities\", false.ToString() }\n            };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildFollowerListUrl_Requires_ScreenName_Or_UserID()\n        {\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", FriendshipType.FriendsList.ToString() },\n                //{ \"UserID\", \"1\" },\n                //{ \"ScreenName\", \"abc\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => friendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ScreenNameOrUserID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FollowerIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/followers/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FollowerIDs).ToString() },\n                        { \"UserID\", \"123\" },\n                        { \"ScreenName\", \"456\" },\n                        { \"Cursor\", \"1\" },\n                        { \"Count\", \"1\" }\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_FriendIDs_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?user_id=123&screen_name=456&cursor=1&count=1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FriendIDs).ToString() },\n                        { \"UserID\", \"123\" },\n                        { \"ScreenName\", \"456\" },\n                        { \"Cursor\", \"1\" },\n                        { \"Count\", \"1\" }\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Defaults_Cursor_When_Not_Specified()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/friends/ids.json?screen_name=JoeMayo&cursor=-1\";\n            var friendReqProc = new FriendshipRequestProcessor<Friendship>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Dictionary<string, string> parameters =\n                new Dictionary<string, string>\n                    {\n                        { \"Type\", ((int)FriendshipType.FriendIDs).ToString() },\n                        { \"ScreenName\", \"JoeMayo\" },\n                    };\n\n            Request req = friendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        const string LookupResponse = @\"[\n   {\n      \"\"screen_name\"\":\"\"JoeMayo\"\",\n      \"\"name\"\":\"\"Joe Mayo\"\",\n      \"\"id_str\"\":\"\"15411837\"\",\n      \"\"connections\"\":[\n         \"\"following\"\"\n      ],\n      \"\"id\"\":15411837\n   }\n]\";\n\n        const string RelationshipResponse = @\"{\n   \"\"relationship\"\":{\n      \"\"target\"\":{\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"followed_by\"\":true,\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"following\"\":false,\n         \"\"id\"\":15411837\n      },\n      \"\"source\"\":{\n         \"\"screen_name\"\":\"\"Linq2Tweeter\"\",\n         \"\"want_retweets\"\":true,\n         \"\"all_replies\"\":false,\n         \"\"marked_spam\"\":false,\n         \"\"followed_by\"\":false,\n         \"\"id_str\"\":\"\"16761255\"\",\n         \"\"blocking\"\":false,\n         \"\"notifications_enabled\"\":true,\n         \"\"following\"\":true,\n         \"\"id\"\":16761255,\n         \"\"can_dm\"\":false,\n         \"\"muting\"\": true\n      }\n   }\n}\";\n\n        const string IdsResponse = @\"{\n   \"\"previous_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"ids\"\":[\n      5676142\n   ],\n   \"\"previous_cursor_str\"\":\"\"2\"\",\n   \"\"next_cursor\"\":1\n}\";\n\n        const string NoRetweetIDsResponse = @\"[\n15411837,\n241594327\n]\";\n\n        const string FriendsFollowersResponse = @\"{\n   \"\"users\"\":[\n      {\n         \"\"id\"\":93604443,\n         \"\"id_str\"\":\"\"93604443\"\",\n         \"\"name\"\":\"\"Geert van Horrik\"\",\n         \"\"screen_name\"\":\"\"GeertvanHorrik\"\",\n         \"\"location\"\":\"\"Heeze, The Netherlands\"\",\n         \"\"description\"\":\"\"Software Developer and creator of the Catel MVVM framework (see http:\\/\\/catel.codeplex.com)\"\",\n         \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/blog.catenalogic.com\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        27\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":212,\n         \"\"friends_count\"\":97,\n         \"\"listed_count\"\":12,\n         \"\"created_at\"\":\"\"Mon Nov 30 10:32:19 +0000 2009\"\",\n         \"\"favourites_count\"\":5,\n         \"\"utc_offset\"\":3600,\n         \"\"time_zone\"\":\"\"Amsterdam\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":4431,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 11:10:16 +0000 2012\"\",\n            \"\"id\"\":280993376646598658,\n            \"\"id_str\"\":\"\"280993376646598658\"\",\n            \"\"text\"\":\"\"@FransBouma Dank, ik zocht op changes maar moest queue hebben, kan ik weer verder :-)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":280993183754768384,\n            \"\"in_reply_to_status_id_str\"\":\"\"280993183754768384\"\",\n            \"\"in_reply_to_user_id\"\":67035608,\n            \"\"in_reply_to_user_id_str\"\":\"\"67035608\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"FransBouma\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"FransBouma\"\",\n                     \"\"name\"\":\"\"Frans Bouma\"\",\n                     \"\"id\"\":67035608,\n                     \"\"id_str\"\":\"\"67035608\"\",\n                     \"\"indices\"\":[\n                        0,\n                        11\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1420487736\\/Avatar_3_small_normal.png\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":389487039,\n         \"\"id_str\"\":\"\"389487039\"\",\n         \"\"name\"\":\"\"Elizabeth Hulett\"\",\n         \"\"screen_name\"\":\"\"EHulett\"\",\n         \"\"location\"\":\"\"Defuniak Springs\"\",\n         \"\"description\"\":\"\"\"\",\n         \"\"url\"\":null,\n         \"\"entities\"\":{\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":4,\n         \"\"friends_count\"\":10,\n         \"\"listed_count\"\":0,\n         \"\"created_at\"\":\"\"Wed Oct 12 14:16:54 +0000 2011\"\",\n         \"\"favourites_count\"\":1,\n         \"\"utc_offset\"\":null,\n         \"\"time_zone\"\":null,\n         \"\"geo_enabled\"\":false,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":3,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Mon Dec 17 19:47:23 +0000 2012\"\",\n            \"\"id\"\":280761124901765120,\n            \"\"id_str\"\":\"\"280761124901765120\"\",\n            \"\"text\"\":\"\"Can't believe Amanda is 28weeks today.... Lily Rose will be here soon :)\"\",\n            \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/#!\\/download\\/ipad\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for iPad\\u003c\\/a\\u003e\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":null,\n            \"\"in_reply_to_status_id_str\"\":null,\n            \"\"in_reply_to_user_id\"\":null,\n            \"\"in_reply_to_user_id_str\"\":null,\n            \"\"in_reply_to_screen_name\"\":null,\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"C0DEED\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1584881066\\/Callie_025_normal.JPG\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":true,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      },\n      {\n         \"\"id\"\":608455311,\n         \"\"id_str\"\":\"\"608455311\"\",\n         \"\"name\"\":\"\"\\/\\/ mellodev\"\",\n         \"\"screen_name\"\":\"\"mellodev\"\",\n         \"\"location\"\":\"\"Las Vegas, NV\"\",\n         \"\"description\"\":\"\".Net aficionado and Software craftsman. C#, Asp.Net, TSQL, Quartz.Net, WebForms, MVC + WP7. I build Social Office Suite (@SOS) and tweet about #DevLife\"\",\n         \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n         \"\"entities\"\":{\n            \"\"url\"\":{\n               \"\"urls\"\":[\n                  {\n                     \"\"url\"\":\"\"http:\\/\\/stackoverflow.com\\/users\\/531901\\/mello702\"\",\n                     \"\"expanded_url\"\":null,\n                     \"\"indices\"\":[\n                        0,\n                        46\n                     ]\n                  }\n               ]\n            },\n            \"\"description\"\":{\n               \"\"urls\"\":[\n\n               ]\n            }\n         },\n         \"\"protected\"\":false,\n         \"\"followers_count\"\":355,\n         \"\"friends_count\"\":1373,\n         \"\"listed_count\"\":20,\n         \"\"created_at\"\":\"\"Thu Jun 14 18:32:56 +0000 2012\"\",\n         \"\"favourites_count\"\":109,\n         \"\"utc_offset\"\":-28800,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"verified\"\":false,\n         \"\"statuses_count\"\":1272,\n         \"\"lang\"\":\"\"en\"\",\n         \"\"status\"\":{\n            \"\"created_at\"\":\"\"Tue Dec 18 21:05:14 +0000 2012\"\",\n            \"\"id\"\":281143104046768129,\n            \"\"id_str\"\":\"\"281143104046768129\"\",\n            \"\"text\"\":\"\"@adamralph Nice background btw! Can't wait to go riding this year!\"\",\n            \"\"source\"\":\"\"web\"\",\n            \"\"truncated\"\":false,\n            \"\"in_reply_to_status_id\"\":281141527877652480,\n            \"\"in_reply_to_status_id_str\"\":\"\"281141527877652480\"\",\n            \"\"in_reply_to_user_id\"\":5966642,\n            \"\"in_reply_to_user_id_str\"\":\"\"5966642\"\",\n            \"\"in_reply_to_screen_name\"\":\"\"adamralph\"\",\n            \"\"geo\"\":null,\n            \"\"coordinates\"\":null,\n            \"\"place\"\":null,\n            \"\"contributors\"\":null,\n            \"\"retweet_count\"\":0,\n            \"\"entities\"\":{\n               \"\"hashtags\"\":[\n\n               ],\n               \"\"urls\"\":[\n\n               ],\n               \"\"user_mentions\"\":[\n                  {\n                     \"\"screen_name\"\":\"\"adamralph\"\",\n                     \"\"name\"\":\"\"Adam Ralph\"\",\n                     \"\"id\"\":5966642,\n                     \"\"id_str\"\":\"\"5966642\"\",\n                     \"\"indices\"\":[\n                        0,\n                        10\n                     ]\n                  }\n               ]\n            },\n            \"\"favorited\"\":false,\n            \"\"retweeted\"\":false\n         },\n         \"\"contributors_enabled\"\":false,\n         \"\"is_translator\"\":false,\n         \"\"profile_background_color\"\":\"\"191134\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/591395288\\/3jgrymfj3hmiokbf3n2i.jpeg\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/2357024693\\/ad1730c5-ad81-4485-af3b-1cb03a7ffacc_normal.png\"\",\n         \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/608455311\\/1348679711\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"profile_sidebar_border_color\"\":\"\"FFFFFF\"\",\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"profile_use_background_image\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"default_profile_image\"\":false,\n         \"\"following\"\":false,\n         \"\"follow_request_sent\"\":false,\n         \"\"notifications\"\":false\n      }\n   ],\n   \"\"next_cursor\"\":2,\n   \"\"next_cursor_str\"\":\"\"1\"\",\n   \"\"previous_cursor\"\":0,\n   \"\"previous_cursor_str\"\":\"\"0\"\"\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/GeoTests/CoordinateTests.cs",
    "content": "﻿using LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.GeoTests\n{\n    [TestClass]\n    public class CoordinateTests\n    {\n        public CoordinateTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Coordinate_Ctor_Parses_JsonData()\n        {\n            var coordJson = JsonDocument.Parse(CoordinateJson).RootElement;\n\n            var coord = new Coordinate(coordJson);\n\n            Assert.AreEqual(-122.51368188, coord.Longitude);\n            Assert.AreEqual(37.70813196, coord.Latitude);\n        }\n\n        [TestMethod]\n        public void Coordinate_Ctor_Returns_Null_JsonData()\n        {\n            var coord = new Coordinate(JsonDocument.Parse(\"null\").RootElement);\n\n            Assert.AreEqual(0, coord.Longitude);\n            Assert.AreEqual(0, coord.Latitude);\n        }\n\n        const string CoordinateJson = @\"[\n                              -122.51368188,\n                              37.70813196\n                           ]\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/GeoTests/GeoRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.GeoTests\n{\n    [TestClass]\n    public class GeoRequestProcessorTests\n    {\n        public GeoRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n            Expression<Func<Geo, bool>> expression =\n                geo =>\n                    geo.Type == GeoType.Reverse &&\n                    geo.Accuracy == \"10\" &&\n                    geo.Granularity == \"city\" &&\n                    geo.Latitude == 37.78215 &&\n                    geo.Longitude == -122.40060 &&\n                    geo.MaxResults == 10 &&\n                    geo.ID == \"456\" &&\n                    geo.IP == \"168.143.171.180\" &&\n                    geo.Query == \"place\" &&\n                    geo.ContainedWithin == \"abc\" &&\n                    geo.Attribute == \"street_address=123\" &&\n                    geo.PlaceName == \"placeName\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = geoReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)GeoType.Reverse).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Accuracy\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Granularity\", \"city\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", (37.78215).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", (-122.4006).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"MaxResults\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"IP\", \"168.143.171.180\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"place\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ContainedWithin\", \"abc\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Attribute\", \"street_address=123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"PlaceName\", \"placeName\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Reverse_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/reverse_geocode.json?lat=37.78215&long=-122.4006&accuracy=city&granularity=10&max_results=10\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Latitude\", \"37.78215\"},\n                 {\"Longitude\", \"-122.40060\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrlReverseL_WithoutLatLongIPOrQuery_ExpectException()\n        {\n            const string ExpectedLatLongParamName = \"LatLong\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Reverse).ToString()},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedLatLongParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_ID_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/id/7695dd2ec2f86f2b.json\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n                 {\"ID\", \"7695dd2ec2f86f2b\"},\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ID_Without_ID_Throws()\n        {\n            const string ExpectedIDParamName = \"ID\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.ID).ToString()},\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedIDParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?lat=37.78215&long=-122.4006&query=Twitter%20HQ&ip=168.143.171.180&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"Latitude\", (37.78215).ToString()},\n                 {\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrlForSearch_WithQueryButNotLatLongAndIP_ExpectSuccess()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/geo/search.json?query=Twitter%20HQ&accuracy=city&granularity=10&max_results=10&contained_within=123&attribute%3Astreet_address=123\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 //{\"Latitude\", (37.78215).ToString()},\n                 //{\"Longitude\", (-122.40060).ToString()},\n                 {\"Query\", \"Twitter HQ\" },\n                 //{\"IP\", \"168.143.171.180\"},\n                 {\"Accuracy\", \"city\" },\n                 {\"Granularity\", \"10\" },\n                 {\"MaxResults\", \"10\" },\n                 {\"ContainedWithin\", \"123\" },\n                 {\"Attribute\", \"street_address=123\" }\n             };\n\n            Request req = geoReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Search_With_Attribute_Missing_Equals_Symbol_Throws()\n        {\n            const string ExpectedAttributeParam = \"Attribute\";\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) GeoType.Search).ToString()},\n                 {\"IP\", \"168.143.171.180\"},\n                 {\"Attribute\", \"street_address\" }\n             };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => geoReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedAttributeParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void GeoRequestProcessor_Processes_Json_Format_Responses()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>();\n\n            Assert.IsInstanceOfType(geoReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_ID_Response()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponse);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResultsForID_WithNullGeometry_ExpectSucces()\n        {\n            const string ExpectedPlaceName = \"San Francisco\";\n            var geoReqProc = new GeoRequestProcessor<Geo> { Type = GeoType.ID };\n\n            List<Geo> geo = geoReqProc.ProcessResults(IDResponseWithNullGeometry);\n\n            Assert.IsNotNull(geo);\n            Assert.IsNotNull(geo.SingleOrDefault());\n            Assert.IsNotNull(geo.Single().Places);\n            Assert.AreEqual(ExpectedPlaceName, geo.Single().Places.First().Name);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var geoReqProc = new GeoRequestProcessor<Geo>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var geo = geoReqProc.ProcessResults(string.Empty);\n\n            Assert.IsNotNull(geo);\n            Assert.IsFalse(geo.Any());\n        }\n\n//        const string MultiPlaceResponse = @\"{\n//   \"\"query\"\":{\n//      \"\"type\"\":\"\"reverse_geocode\"\",\n//      \"\"params\"\":{\n//         \"\"accuracy\"\":0,\n//         \"\"granularity\"\":\"\"neighborhood\"\",\n//         \"\"coordinates\"\":{\n//            \"\"type\"\":\"\"Point\"\",\n//            \"\"coordinates\"\":[\n//               -122.4006,\n//               37.78215\n//            ]\n//         }\n//      },\n//      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n//   },\n//   \"\"result\"\":{\n//      \"\"token\"\":\"\"15f3c6f2b94ba19faee70d9d61aaebee\"\",\n//      \"\"places\"\":[\n//         {\n//            \"\"contained_within\"\":[\n//               {\n//                  \"\"country\"\":\"\"United States\"\",\n//                  \"\"place_type\"\":\"\"city\"\",\n//                  \"\"name\"\":\"\"San Francisco\"\",\n//                  \"\"bounding_box\"\":{\n//                     \"\"type\"\":\"\"Polygon\"\",\n//                     \"\"coordinates\"\":[\n//                        [\n//                           [\n//                              -122.51368188,\n//                              37.70813196\n//                           ],\n//                           [\n//                              -122.35845384,\n//                              37.70813196\n//                           ],\n//                           [\n//                              -122.35845384,\n//                              37.83245301\n//                           ],\n//                           [\n//                              -122.51368188,\n//                              37.83245301\n//                           ]\n//                        ]\n//                     ]\n//                  },\n//                  \"\"attributes\"\":{\n\n//                  },\n//                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n//                  \"\"country_code\"\":\"\"US\"\",\n//                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n//                  \"\"id\"\":\"\"5a110d312052166f\"\"\n//               }\n//            ],\n//            \"\"place_type\"\":\"\"neighborhood\"\",\n//            \"\"country\"\":\"\"United States\"\",\n//            \"\"name\"\":\"\"SoMa\"\",\n//            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n//            \"\"attributes\"\":{\n\n//            },\n//            \"\"bounding_box\"\":{\n//               \"\"type\"\":\"\"Polygon\"\",\n//               \"\"coordinates\"\":[\n//                  [\n//                     [\n//                        -122.42284884,\n//                        37.76893497\n//                     ],\n//                     [\n//                        -122.3964,\n//                        37.76893497\n//                     ],\n//                     [\n//                        -122.3964,\n//                        37.78752897\n//                     ],\n//                     [\n//                        -122.42284884,\n//                        37.78752897\n//                     ]\n//                  ]\n//               ]\n//            },\n//            \"\"country_code\"\":\"\"US\"\",\n//            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n//            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n//         },\n//         {\n//            \"\"contained_within\"\":[\n//               {\n//                  \"\"country\"\":\"\"United States\"\",\n//                  \"\"place_type\"\":\"\"admin\"\",\n//                  \"\"name\"\":\"\"California\"\",\n//                  \"\"bounding_box\"\":{\n//                     \"\"type\"\":\"\"Polygon\"\",\n//                     \"\"coordinates\"\":[\n//                        [\n//                           [\n//                              -124.482003,\n//                              32.528832\n//                           ],\n//                           [\n//                              -114.131211,\n//                              32.528832\n//                           ],\n//                           [\n//                              -114.131211,\n//                              42.009517\n//                           ],\n//                           [\n//                              -124.482003,\n//                              42.009517\n//                           ]\n//                        ]\n//                     ]\n//                  },\n//                  \"\"attributes\"\":{\n\n//                  },\n//                  \"\"full_name\"\":\"\"California, US\"\",\n//                  \"\"country_code\"\":\"\"US\"\",\n//                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n//                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n//               }\n//            ],\n//            \"\"place_type\"\":\"\"city\"\",\n//            \"\"country\"\":\"\"United States\"\",\n//            \"\"name\"\":\"\"San Francisco\"\",\n//            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n//            \"\"attributes\"\":{\n\n//            },\n//            \"\"bounding_box\"\":{\n//               \"\"type\"\":\"\"Polygon\"\",\n//               \"\"coordinates\"\":[\n//                  [\n//                     [\n//                        -122.51368188,\n//                        37.70813196\n//                     ],\n//                     [\n//                        -122.35845384,\n//                        37.70813196\n//                     ],\n//                     [\n//                        -122.35845384,\n//                        37.83245301\n//                     ],\n//                     [\n//                        -122.51368188,\n//                        37.83245301\n//                     ]\n//                  ]\n//               ]\n//            },\n//            \"\"country_code\"\":\"\"US\"\",\n//            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n//            \"\"id\"\":\"\"5a110d312052166f\"\"\n//         },\n//         {\n//            \"\"contained_within\"\":[\n//               {\n//                  \"\"country\"\":\"\"United States\"\",\n//                  \"\"place_type\"\":\"\"country\"\",\n//                  \"\"name\"\":\"\"United States\"\",\n//                  \"\"bounding_box\"\":null,\n//                  \"\"attributes\"\":{\n\n//                  },\n//                  \"\"full_name\"\":\"\"United States\"\",\n//                  \"\"country_code\"\":\"\"US\"\",\n//                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n//                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n//               }\n//            ],\n//            \"\"place_type\"\":\"\"admin\"\",\n//            \"\"country\"\":\"\"United States\"\",\n//            \"\"name\"\":\"\"California\"\",\n//            \"\"full_name\"\":\"\"California, US\"\",\n//            \"\"attributes\"\":{\n\n//            },\n//            \"\"bounding_box\"\":{\n//               \"\"type\"\":\"\"Polygon\"\",\n//               \"\"coordinates\"\":[\n//                  [\n//                     [\n//                        -124.482003,\n//                        32.528832\n//                     ],\n//                     [\n//                        -114.131211,\n//                        32.528832\n//                     ],\n//                     [\n//                        -114.131211,\n//                        42.009517\n//                     ],\n//                     [\n//                        -124.482003,\n//                        42.009517\n//                     ]\n//                  ]\n//               ]\n//            },\n//            \"\"country_code\"\":\"\"US\"\",\n//            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n//            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n//         },\n//         {\n//            \"\"contained_within\"\":[\n\n//            ],\n//            \"\"place_type\"\":\"\"country\"\",\n//            \"\"country\"\":\"\"United States\"\",\n//            \"\"name\"\":\"\"United States\"\",\n//            \"\"full_name\"\":\"\"United States\"\",\n//            \"\"attributes\"\":{\n\n//            },\n//            \"\"bounding_box\"\":null,\n//            \"\"country_code\"\":\"\"US\"\",\n//            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n//            \"\"id\"\":\"\"96683cc9126741d1\"\"\n//         }\n//      ]\n//   }\n//}\";\n\n        const string IDResponse = @\"{\n   \"\"country\"\":\"\"United States\"\",\n   \"\"place_type\"\":\"\"city\"\",\n   \"\"name\"\":\"\"San Francisco\"\",\n   \"\"geometry\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.46628284,\n               37.70813196\n            ],\n            [\n               -122.47088292,\n               37.70823204\n            ],\n            [\n               -122.48518284,\n               37.71123201\n            ],\n            [\n               -122.48948304,\n               37.712232\n            ],\n            [\n               -122.497983,\n               37.71713196\n            ],\n            [\n               -122.49978012,\n               37.71960696\n            ],\n            [\n               -122.50198296,\n               37.723131\n            ],\n            [\n               -122.50787796,\n               37.73529\n            ],\n            [\n               -122.51368188,\n               37.77856803\n            ],\n            [\n               -122.51305692,\n               37.78252398\n            ],\n            [\n               -122.47808292,\n               37.81082799\n            ],\n            [\n               -122.47738308,\n               37.81102797\n            ],\n            [\n               -122.37322716,\n               37.83245301\n            ],\n            [\n               -122.36652288,\n               37.83081303\n            ],\n            [\n               -122.365395,\n               37.82917296\n            ],\n            [\n               -122.36177592,\n               37.82153403\n            ],\n            [\n               -122.35845384,\n               37.81450503\n            ],\n            [\n               -122.377842,\n               37.72782\n            ],\n            [\n               -122.38322616,\n               37.70940303\n            ],\n            [\n               -122.39378208,\n               37.70823096\n            ],\n            [\n               -122.43398184,\n               37.70813196\n            ],\n            [\n               -122.46628284,\n               37.70813196\n            ]\n         ]\n      ]\n   },\n   \"\"bounding_box\"\":{\n      \"\"type\"\":\"\"Polygon\"\",\n      \"\"coordinates\"\":[\n         [\n            [\n               -122.51368188,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.70813196\n            ],\n            [\n               -122.35845384,\n               37.83245301\n            ],\n            [\n               -122.51368188,\n               37.83245301\n            ]\n         ]\n      ]\n   },\n   \"\"attributes\"\":{\n      \"\"189390:id\"\":\"\"san-francisco-ca\"\",\n      \"\"162772:pop100\"\":\"\"776733\"\",\n      \"\"162772:place_id\"\":\"\"0667000\"\"\n   },\n   \"\"full_name\"\":\"\"San Francisco, CA\"\",\n   \"\"polylines\"\":[\n      \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n   ],\n   \"\"country_code\"\":\"\"US\"\",\n   \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n   \"\"id\"\":\"\"5a110d312052166f\"\",\n   \"\"contained_within\"\":[\n      {\n         \"\"country\"\":\"\"United States\"\",\n         \"\"place_type\"\":\"\"admin\"\",\n         \"\"name\"\":\"\"California\"\",\n         \"\"bounding_box\"\":{\n            \"\"type\"\":\"\"Polygon\"\",\n            \"\"coordinates\"\":[\n               [\n                  [\n                     -124.482003,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     32.528832\n                  ],\n                  [\n                     -114.131211,\n                     42.009517\n                  ],\n                  [\n                     -124.482003,\n                     42.009517\n                  ]\n               ]\n            ]\n         },\n         \"\"attributes\"\":{\n\n         },\n         \"\"full_name\"\":\"\"California, US\"\",\n         \"\"country_code\"\":\"\"US\"\",\n         \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n         \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n      }\n   ]\n}\";\n\n        const string IDResponseWithNullGeometry = @\"{\n\t\"\"id\"\": \"\"5a110d312052166f\"\",\n\t\"\"url\"\": \"\"https:\\/\\/api.twitter.com\\/1.1\\/geo\\/id\\/5a110d312052166f.json\"\",\n\t\"\"place_type\"\": \"\"city\"\",\n\t\"\"name\"\": \"\"San Francisco\"\",\n\t\"\"full_name\"\": \"\"San Francisco, CA\"\",\n\t\"\"country_code\"\": \"\"US\"\",\n\t\"\"country\"\": \"\"United States\"\",\n\t\"\"contained_within\"\": [{\n\t\t\"\"id\"\": \"\"fbd6d2f5a4e4a15e\"\",\n\t\t\"\"url\"\": \"\"https:\\/\\/api.twitter.com\\/1.1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n\t\t\"\"place_type\"\": \"\"admin\"\",\n\t\t\"\"name\"\": \"\"California\"\",\n\t\t\"\"full_name\"\": \"\"California, US\"\",\n\t\t\"\"country_code\"\": \"\"US\"\",\n\t\t\"\"country\"\": \"\"United States\"\",\n\t\t\"\"bounding_box\"\": {\n\t\t\t\"\"type\"\": \"\"Polygon\"\",\n\t\t\t\"\"coordinates\"\": [[[-124.482003,\n\t\t\t32.528832],\n\t\t\t[-124.482003,\n\t\t\t42.009519],\n\t\t\t[-114.131212,\n\t\t\t42.009519],\n\t\t\t[-114.131212,\n\t\t\t32.528832],\n\t\t\t[-124.482003,\n\t\t\t32.528832]]]\n\t\t},\n\t\t\"\"attributes\"\": {\n\t\t\t\n\t\t}\n\t}],\n\t\"\"geometry\"\": null,\n\t\"\"polylines\"\": [],\n\t\"\"bounding_box\"\": {\n\t\t\"\"type\"\": \"\"Polygon\"\",\n\t\t\"\"coordinates\"\": [[[-122.514926,\n\t\t37.708075],\n\t\t[-122.514926,\n\t\t37.833238],\n\t\t[-122.357031,\n\t\t37.833238],\n\t\t[-122.357031,\n\t\t37.708075],\n\t\t[-122.514926,\n\t\t37.708075]]]\n\t},\n\t\"\"attributes\"\": {\n\t\t\"\"162772:pop100\"\": \"\"776733\"\",\n\t\t\"\"162772:place_id\"\": \"\"0667000\"\",\n\t\t\"\"189390:id\"\": \"\"san-francisco-ca\"\"\n\t}\n}\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/GeoTests/GeoTests.cs",
    "content": "﻿using LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.GeoTests\n{\n    [TestClass]\n    public class GeoTests\n    {\n        public GeoTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Geo_Ctor_Parses_JsonData()\n        {\n            var geoJson = JsonDocument.Parse(ReverseResponse).RootElement;\n\n            var geo = new Geo(geoJson);\n\n            Assert.IsNotNull(geo.Places);\n            var places = geo.Places;\n            Assert.AreEqual(4, places.Count);\n            Assert.AreEqual(\"neighborhood\", places.First().PlaceType);\n        }\n\n        [TestMethod]\n        public void Geo_Ctor_Returns_On_Null_JsonData()\n        {\n            var geo = new Geo(JsonDocument.Parse(\"null\").RootElement);\n\n            Assert.IsNull(geo.Places);\n        }\n\n        const string ReverseResponse = @\"{\n   \"\"query\"\":{\n      \"\"type\"\":\"\"reverse_geocode\"\",\n      \"\"params\"\":{\n         \"\"accuracy\"\":0,\n         \"\"granularity\"\":\"\"neighborhood\"\",\n         \"\"coordinates\"\":{\n            \"\"type\"\":\"\"Point\"\",\n            \"\"coordinates\"\":[\n               -122.4006,\n               37.78215\n            ]\n         }\n      },\n      \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/reverse_geocode.json?long=-122.4006&accuracy=0&granularity=neighborhood&lat=37.78215\"\"\n   },\n   \"\"result\"\":{\n      \"\"places\"\":[\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"admin\"\",\n                  \"\"name\"\":\"\"California\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -124.482003,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              32.528832\n                           ],\n                           [\n                              -114.131211,\n                              42.009517\n                           ],\n                           [\n                              -124.482003,\n                              42.009517\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"California, US\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n                  \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"city\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"San Francisco\"\",\n            \"\"full_name\"\":\"\"San Francisco, CA\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.51368188,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.70813196\n                     ],\n                     [\n                        -122.35845384,\n                        37.83245301\n                     ],\n                     [\n                        -122.51368188,\n                        37.83245301\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n            \"\"id\"\":\"\"5a110d312052166f\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"country\"\",\n                  \"\"name\"\":\"\"United States\"\",\n                  \"\"bounding_box\"\":null,\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"United States\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n                  \"\"id\"\":\"\"96683cc9126741d1\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"admin\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"California\"\",\n            \"\"full_name\"\":\"\"California, US\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -124.482003,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        32.528832\n                     ],\n                     [\n                        -114.131211,\n                        42.009517\n                     ],\n                     [\n                        -124.482003,\n                        42.009517\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/fbd6d2f5a4e4a15e.json\"\",\n            \"\"id\"\":\"\"fbd6d2f5a4e4a15e\"\"\n         },\n         {\n            \"\"contained_within\"\":[\n\n            ],\n            \"\"place_type\"\":\"\"country\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"United States\"\",\n            \"\"full_name\"\":\"\"United States\"\",\n            \"\"attributes\"\":{\n\n            },\n            \"\"bounding_box\"\":null,\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/96683cc9126741d1.json\"\",\n            \"\"id\"\":\"\"96683cc9126741d1\"\"\n         }\n      ]\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/GeoTests/GeometryTests.cs",
    "content": "﻿using LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.GeoTests\n{\n    [TestClass]\n    public class GeometryTests\n    {\n        public GeometryTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Geometry_Ctor_Parses_JsonData()\n        {\n            var geometryJson = JsonDocument.Parse(GeometryJson).RootElement;\n\n            var geometry = new Geometry(geometryJson);\n\n            Assert.AreEqual(\"Polygon\", geometry.Type);\n            Assert.IsNotNull(geometry.Coordinates);\n            Assert.AreEqual(4, geometry.Coordinates.Count);\n            Coordinate coord = geometry.Coordinates.First();\n            Assert.AreEqual(-122.51368188, coord.Longitude);\n            Assert.AreEqual(37.70813196, coord.Latitude);\n        }\n\n        [TestMethod]\n        public void Geometry_Ctor_Returns_On_Null_JsonData()\n        {\n            var geometry = new Geometry(JsonDocument.Parse(\"null\").RootElement);\n\n            Assert.AreEqual(null, geometry.Type);\n        }\n\n        const string GeometryJson = @\"{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  }\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/GeoTests/PlaceTests.cs",
    "content": "﻿using LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.GeoTests\n{\n    [TestClass]\n    public class PlaceTests\n    {\n        public PlaceTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void Place_Ctor_Parses_JsonData()\n        {\n            const string ExpectedPolyLine = \"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\";\n            var placeJson = JsonDocument.Parse(PlaceJson).RootElement;\n\n            var place = new Place(placeJson);\n\n            Assert.IsNotNull(place.ContainedWithin);\n            Assert.AreEqual(\"United States\", place.ContainedWithin.Country);\n\n            Assert.AreEqual(\"neighborhood\", place.PlaceType);\n            Assert.AreEqual(\"United States\", place.Country);\n            Assert.AreEqual(\"SoMa\", place.Name);\n            Assert.AreEqual(\"SoMa, San Francisco\", place.FullName);\n\n            Assert.IsNotNull(place.Attributes);\n            var attrDict = place.Attributes;\n            Assert.AreEqual(3, attrDict.Count);\n            Assert.AreEqual(attrDict[\"street_address\"], \"795 Folsom St\");\n            Assert.AreEqual(attrDict[\"623:id\"], \"210176\");\n            Assert.AreEqual(attrDict[\"twitter\"], \"JoeMayo\");\n\n            Assert.IsNotNull(place.BoundingBox);\n            Assert.AreEqual(\"Polygon\", place.BoundingBox.Type);\n\n            Assert.AreEqual(\"US\", place.CountryCode);\n            Assert.AreEqual(\"http://api.twitter.com/1/geo/id/2b6ff8c22edd9576.json\", place.Url);\n            Assert.AreEqual(\"2b6ff8c22edd9576\", place.ID);\n\n            Assert.IsNotNull(place.PolyLines);\n            Assert.IsNotNull(place.PolyLines.SingleOrDefault());\n            Assert.AreEqual(ExpectedPolyLine, place.PolyLines.First());\n        }\n\n        [TestMethod]\n        public void Place_Ctor_Returns_On_Null_JsonData()\n        {\n            var place = new Place(JsonDocument.Parse(\"null\").RootElement);\n\n            Assert.IsNull(place.Country);\n        }\n\n        const string PlaceJson = @\"{\n            \"\"contained_within\"\":[\n               {\n                  \"\"country\"\":\"\"United States\"\",\n                  \"\"place_type\"\":\"\"city\"\",\n                  \"\"name\"\":\"\"San Francisco\"\",\n                  \"\"bounding_box\"\":{\n                     \"\"type\"\":\"\"Polygon\"\",\n                     \"\"coordinates\"\":[\n                        [\n                           [\n                              -122.51368188,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.70813196\n                           ],\n                           [\n                              -122.35845384,\n                              37.83245301\n                           ],\n                           [\n                              -122.51368188,\n                              37.83245301\n                           ]\n                        ]\n                     ]\n                  },\n                  \"\"attributes\"\":{\n\n                  },\n                  \"\"full_name\"\":\"\"San Francisco, CA\"\",\n                  \"\"country_code\"\":\"\"US\"\",\n                  \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/5a110d312052166f.json\"\",\n                  \"\"id\"\":\"\"5a110d312052166f\"\"\n               }\n            ],\n            \"\"place_type\"\":\"\"neighborhood\"\",\n            \"\"country\"\":\"\"United States\"\",\n            \"\"name\"\":\"\"SoMa\"\",\n            \"\"full_name\"\":\"\"SoMa, San Francisco\"\",\n            \"\"polylines\"\":[\n               \"\"yzceFfenjVSv[wQjxAgEzYs]bt@oNfJ_UvL_kAzc@omGfc@uW\\u007BB\\u007DoDsyEg@kC\\u007BdC\\u007DiSfI\\u007Dh@fIaFvn@qUzj@ySx|OdxBbrBt`@hF|`ARfzF?zhE\"\"\n            ],\n            \"\"attributes\"\":{\n               \"\"street_address\"\": \"\"795 Folsom St\"\",\n                \"\"623:id\"\": \"\"210176\"\",\n                \"\"twitter\"\": \"\"JoeMayo\"\"\n            },\n            \"\"bounding_box\"\":{\n               \"\"type\"\":\"\"Polygon\"\",\n               \"\"coordinates\"\":[\n                  [\n                     [\n                        -122.42284884,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.76893497\n                     ],\n                     [\n                        -122.3964,\n                        37.78752897\n                     ],\n                     [\n                        -122.42284884,\n                        37.78752897\n                     ]\n                  ]\n               ]\n            },\n            \"\"country_code\"\":\"\"US\"\",\n            \"\"url\"\":\"\"http:\\/\\/api.twitter.com\\/1\\/geo\\/id\\/2b6ff8c22edd9576.json\"\",\n            \"\"id\"\":\"\"2b6ff8c22edd9576\"\"\n         }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/HelpTests/HelpRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.HelpTests\n{\n    [TestClass]\n    public class HelpRequestProcessorTests\n    {\n        public HelpRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_Parameters()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n            Expression<Func<Help, bool>> expression =\n                help =>\n                    help.Type == HelpType.RateLimits &&\n                    help.Resources == \"search\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = helpReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)HelpType.RateLimits).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Resources\", \"search\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_Languages_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/help/languages.json\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.Languages).ToString()}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Generates_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search,users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Removes_Parameter_Spaces_In_RateLimits_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/application/rate_limit_status.json?resources=search%2Cusers\";\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {\"Type\", ((int) HelpType.RateLimits).ToString()},\n                 {\"Resources\", \"search, users\"}\n             };\n\n            Request req = helpReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_No_Type()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help> { BaseUrl = \"https://api.twitter.com/1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{\"Type\", ((int) HelpType.Languages).ToString()}\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => helpReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void HelpRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>();\n\n            Assert.IsInstanceOfType(helpReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Languages_Results()\n        {\n            const int ExpectedLanguagesCount = 28;\n            const string ExpectedLanguageName = \"Hungarian\";\n            const string ExpectedLanguageStatus = \"production\";\n            const string ExpectedLanguageCode = \"hu\";\n            var helpReqProc = new HelpRequestProcessor<Help>\n            {\n                Type = HelpType.Languages,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(HelpLanguagesXml);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.Languages, help.Type);\n            List<Language> languages = help.Languages;\n            Assert.IsNotNull(languages);\n            Assert.AreEqual(ExpectedLanguagesCount, languages.Count);\n            Language language = languages.First();\n            Assert.AreEqual(ExpectedLanguageName, language.Name);\n            Assert.AreEqual(ExpectedLanguageStatus, language.Status);\n            Assert.AreEqual(ExpectedLanguageCode, language.Code);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_RateLimits_Results()\n        {\n            var helpReqProc = new HelpRequestProcessor<Help>\n            {\n                Type = HelpType.RateLimits,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n\n            List<Help> helpList = helpReqProc.ProcessResults(RateLimitsResponse);\n\n            Assert.IsNotNull(helpList);\n            Assert.IsNotNull(helpList.SingleOrDefault());\n            Help help = helpList.Single();\n            Assert.AreEqual(HelpType.RateLimits, help.Type);\n            Assert.AreEqual(\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\", help.RateLimitAccountContext);\n            Assert.IsNotNull(help.RateLimits);\n            Assert.IsTrue(help.RateLimits.Any());\n            Dictionary<string, List<RateLimits>> rateLimits = help.RateLimits;\n            Assert.IsTrue(rateLimits.ContainsKey(\"lists\"));\n            List<RateLimits> limitsList = rateLimits[\"lists\"];\n            Assert.IsNotNull(limitsList);\n            Assert.IsTrue(limitsList.Any());\n            RateLimits limits = limitsList.First();\n            Assert.IsNotNull(limits);\n            Assert.AreEqual(\"/lists/subscriptions\", limits.Resource);\n            Assert.AreEqual(15, limits.Limit);\n            Assert.AreEqual(15, limits.Remaining);\n            Assert.AreEqual(1348087186ul, limits.Reset);\n        }\n\n        const string HelpConfigurationResponse = @\"{\n   \"\"characters_reserved_per_media\"\":21,\n   \"\"photo_sizes\"\":{\n      \"\"thumb\"\":{\n         \"\"h\"\":150,\n         \"\"w\"\":150,\n         \"\"resize\"\":\"\"crop\"\"\n      },\n      \"\"small\"\":{\n         \"\"h\"\":480,\n         \"\"w\"\":340,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"large\"\":{\n         \"\"h\"\":2048,\n         \"\"w\"\":1024,\n         \"\"resize\"\":\"\"fit\"\"\n      },\n      \"\"medium\"\":{\n         \"\"h\"\":1200,\n         \"\"w\"\":600,\n         \"\"resize\"\":\"\"fit\"\"\n      }\n   },\n   \"\"short_url_length\"\":20,\n   \"\"photo_size_limit\"\":3145728,\n   \"\"non_username_paths\"\":[\n      \"\"about\"\",\n      \"\"account\"\",\n      \"\"accounts\"\",\n      \"\"activity\"\",\n      \"\"all\"\",\n      \"\"announcements\"\",\n      \"\"anywhere\"\",\n      \"\"api_rules\"\",\n      \"\"api_terms\"\",\n      \"\"apirules\"\",\n      \"\"apps\"\",\n      \"\"auth\"\",\n      \"\"badges\"\",\n      \"\"blog\"\",\n      \"\"business\"\",\n      \"\"buttons\"\",\n      \"\"contacts\"\",\n      \"\"devices\"\",\n      \"\"direct_messages\"\",\n      \"\"download\"\",\n      \"\"downloads\"\",\n      \"\"edit_announcements\"\",\n      \"\"faq\"\",\n      \"\"favorites\"\",\n      \"\"find_sources\"\",\n      \"\"find_users\"\",\n      \"\"followers\"\",\n      \"\"following\"\",\n      \"\"friend_request\"\",\n      \"\"friendrequest\"\",\n      \"\"friends\"\",\n      \"\"goodies\"\",\n      \"\"help\"\",\n      \"\"home\"\",\n      \"\"im_account\"\",\n      \"\"inbox\"\",\n      \"\"invitations\"\",\n      \"\"invite\"\",\n      \"\"jobs\"\",\n      \"\"list\"\",\n      \"\"login\"\",\n      \"\"logout\"\",\n      \"\"me\"\",\n      \"\"mentions\"\",\n      \"\"messages\"\",\n      \"\"mockview\"\",\n      \"\"newtwitter\"\",\n      \"\"notifications\"\",\n      \"\"nudge\"\",\n      \"\"oauth\"\",\n      \"\"phoenix_search\"\",\n      \"\"positions\"\",\n      \"\"privacy\"\",\n      \"\"public_timeline\"\",\n      \"\"related_tweets\"\",\n      \"\"replies\"\",\n      \"\"retweeted_of_mine\"\",\n      \"\"retweets\"\",\n      \"\"retweets_by_others\"\",\n      \"\"rules\"\",\n      \"\"saved_searches\"\",\n      \"\"search\"\",\n      \"\"sent\"\",\n      \"\"settings\"\",\n      \"\"share\"\",\n      \"\"signup\"\",\n      \"\"signin\"\",\n      \"\"similar_to\"\",\n      \"\"statistics\"\",\n      \"\"terms\"\",\n      \"\"tos\"\",\n      \"\"translate\"\",\n      \"\"trends\"\",\n      \"\"tweetbutton\"\",\n      \"\"twttr\"\",\n      \"\"update_discoverability\"\",\n      \"\"users\"\",\n      \"\"welcome\"\",\n      \"\"who_to_follow\"\",\n      \"\"widgets\"\",\n      \"\"zendesk_auth\"\",\n      \"\"media_signup\"\"\n   ],\n   \"\"max_media_per_upload\"\":1,\n   \"\"short_url_length_https\"\":21\n}\";\n\n        const string HelpLanguagesXml = @\"[\n   {\n      \"\"name\"\":\"\"Hungarian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hu\"\"\n   },\n   {\n      \"\"name\"\":\"\"Finnish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fi\"\"\n   },\n   {\n      \"\"name\"\":\"\"Swedish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"sv\"\"\n   },\n   {\n      \"\"name\"\":\"\"Norwegian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"no\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hebrew\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"he\"\"\n   },\n   {\n      \"\"name\"\":\"\"Korean\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ko\"\"\n   },\n   {\n      \"\"name\"\":\"\"Portuguese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pt\"\"\n   },\n   {\n      \"\"name\"\":\"\"French\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fr\"\"\n   },\n   {\n      \"\"name\"\":\"\"German\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"de\"\"\n   },\n   {\n      \"\"name\"\":\"\"Arabic\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ar\"\"\n   },\n   {\n      \"\"name\"\":\"\"Russian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ru\"\"\n   },\n   {\n      \"\"name\"\":\"\"Dutch\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"nl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Indonesian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"id\"\"\n   },\n   {\n      \"\"name\"\":\"\"Traditional Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-tw\"\"\n   },\n   {\n      \"\"name\"\":\"\"Italian\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"it\"\"\n   },\n   {\n      \"\"name\"\":\"\"Hindi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"hi\"\"\n   },\n   {\n      \"\"name\"\":\"\"English\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"en\"\"\n   },\n   {\n      \"\"name\"\":\"\"Filipino\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fil\"\"\n   },\n   {\n      \"\"name\"\":\"\"Japanese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ja\"\"\n   },\n   {\n      \"\"name\"\":\"\"Thai\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"th\"\"\n   },\n   {\n      \"\"name\"\":\"\"Urdu\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"ur\"\"\n   },\n   {\n      \"\"name\"\":\"\"Polish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"pl\"\"\n   },\n   {\n      \"\"name\"\":\"\"Simplified Chinese\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"zh-cn\"\"\n   },\n   {\n      \"\"name\"\":\"\"Turkish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"tr\"\"\n   },\n   {\n      \"\"name\"\":\"\"Farsi\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"fa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Danish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"da\"\"\n   },\n   {\n      \"\"name\"\":\"\"Malay\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"msa\"\"\n   },\n   {\n      \"\"name\"\":\"\"Spanish\"\",\n      \"\"status\"\":\"\"production\"\",\n      \"\"code\"\":\"\"es\"\"\n   }\n]\";\n\n        const string RateLimitsResponse = @\"{\n   \"\"rate_limit_context\"\":{\n      \"\"access_token\"\":\"\"15411837-3wGGrD7CY0Hb0tguLA3pSH7EMwSWWcnuD3DEQ1E27\"\"\n   },\n   \"\"resources\"\":{\n      \"\"lists\"\":{\n         \"\"/lists/subscriptions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/subscribers\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/memberships\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/statuses\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/lists/members/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friendships\"\":{\n         \"\"/friendships/incoming\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/lookup\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/friendships/outgoing\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"blocks\"\":{\n         \"\"/blocks/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/blocks/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"geo\"\":{\n         \"\"/geo/id/:place_id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/reverse_geocode\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/search\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/geo/similar_places\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"users\"\":{\n         \"\"/users/suggestions/:slug/members\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/search\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/show\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributees\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/contributors\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/lookup\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/users/suggestions/:slug\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"followers\"\":{\n         \"\"/followers/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"statuses\"\":{\n         \"\"/statuses/home_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/mentions_timeline\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/show/:id\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/retweets/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/user_timeline\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/statuses/oembed\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"help\"\":{\n         \"\"/help/privacy\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/tos\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/configuration\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/help/languages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"friends\"\":{\n         \"\"/friends/ids\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"direct_messages\"\":{\n         \"\"/direct_messages\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/show\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/direct_messages/sent\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"account\"\":{\n         \"\"/account/verify_credentials\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/account/settings\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"favorites\"\":{\n         \"\"/favorites/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"saved_searches\"\":{\n         \"\"/saved_searches/list\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/saved_searches/show/:id\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"search\"\":{\n         \"\"/search/tweets\"\":{\n            \"\"limit\"\":180,\n            \"\"remaining\"\":180,\n            \"\"reset\"\":1348087186\n         }\n      },\n      \"\"trends\"\":{\n         \"\"/trends/available\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/closest\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         },\n         \"\"/trends/place\"\":{\n            \"\"limit\"\":15,\n            \"\"remaining\"\":15,\n            \"\"reset\"\":1348087186\n         }\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/LikeTests/LikeCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.FavoritesTests\n{\n    [TestClass]\n    public class LikeCommandsTests\n    {\n        public LikeCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        static TwitterContext InitializeTwitterContext(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            var execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<LikedTweetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<LikedTweetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task LikeAsync_WithValidID_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(LikeResponse);\n\n            LikedResponse actual = await ctx.LikeAsync(UserId, TweetID);\n\n            Assert.IsTrue(actual.Data.Liked);\n        }\n\n        [TestMethod]\n        public async Task LikeAsync_WithRawResult_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(LikeResponse);\n\n            await ctx.LikeAsync(UserId, TweetID);\n\n            Assert.AreEqual(LikeResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task LikeAsync_WithNullUserID_Throws()\n        {\n            const string UserId = null;\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(LikeResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.LikeAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task LikeAsync_WithNullTweetID_Throws()\n        {\n            const string UserId = \"123\";\n            const string TweetID = null;\n            var ctx = InitializeTwitterContext(LikeResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.LikeAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnlikeAsync_WithValidID_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(UnlikeResponse);\n\n            LikedResponse actual = await ctx.UnlikeAsync(UserId, TweetID);\n\n            Assert.IsFalse(actual.Data.Liked);\n        }\n\n        [TestMethod]\n        public async Task UnlikeAsync_WithRawResult_Succeeds()\n        {\n            const string UserId = \"123\";\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(UnlikeResponse);\n\n            await ctx.UnlikeAsync(UserId, TweetID);\n\n            Assert.AreEqual(UnlikeResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UnlikeAsync_WithNullUserID_Throws()\n        {\n            const string UserId = null;\n            const string TweetID = \"456\";\n            var ctx = InitializeTwitterContext(UnlikeResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UnlikeAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnlikeAsync_WithNullTweetID_Throws()\n        {\n            const string UserId = \"123\";\n            const string TweetID = null;\n            var ctx = InitializeTwitterContext(UnlikeResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UnlikeAsync(UserId, TweetID));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        const string LikeResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"liked\"\": true\n\t}\n}\";\n\n        const string UnlikeResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"liked\"\": false\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/LikeTests/LikeRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.BlocksTests\n{\n    [TestClass]\n    public class LikeRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public LikeRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_ParsesParameters()\n        {\n            var likeReqProc = new LikeRequestProcessor<LikeQuery>();\n            Expression<Func<LikeQuery, bool>> expression =\n                like =>\n                    like.Type == LikeType.Lookup &&\n                    like.Expansions == \"attachments.poll_ids,author_id\" &&\n                    like.ID == \"123\" &&\n                    like.MaxResults == 99 &&\n                    like.MediaFields == \"height,width\" &&\n                    like.PaginationToken == \"456\" &&\n                    like.PlaceFields == \"country\" &&\n                    like.PollFields == \"duration_minutes,end_datetime\" &&\n                    like.TweetFields == \"author_id,created_at\" &&\n                    like.UserFields == \"created_at,verified\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = likeReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.Type), ((int)LikeType.Lookup).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.Expansions), \"attachments.poll_ids,author_id\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.ID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.MaxResults), \"99\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.MediaFields), \"height,width\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.PaginationToken), \"456\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(LikeQuery.PlaceFields), \"country\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(LikeQuery.PollFields), \"duration_minutes,end_datetime\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.TweetFields), \"author_id,created_at\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(LikeQuery.UserFields), \"created_at,verified\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithUserID_CreatesLookupUrl()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/123/liked_tweets?\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"max_results=99&\" +\n                \"media.fields=height%2Cwidth&\" +\n                \"pagination_token=456&\" +\n                \"place.fields=country&\" +\n                \"poll.fields=duration_minutes%2Cend_datetime&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"user.fields=created_at%2Cverified\";\n\n            var likeReqProc = new LikeRequestProcessor<LikeQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(LikeQuery.Type), ((int)LikeType.Lookup).ToString(CultureInfo.InvariantCulture) },\n                    { nameof(LikeQuery.ID), \"123\" },\n                    { nameof(LikeQuery.Expansions), \"attachments.poll_ids,author_id\" },\n                    { nameof(LikeQuery.MaxResults), \"99\" },\n                    { nameof(LikeQuery.MediaFields), \"height,width\" },\n                    { nameof(LikeQuery.PaginationToken), \"456\" },\n                    { nameof(LikeQuery.PlaceFields), \"country\" },\n                    { nameof(LikeQuery.PollFields), \"duration_minutes,end_datetime\" },\n                    { nameof(LikeQuery.TweetFields), \"author_id,created_at\" },\n                    { nameof(LikeQuery.UserFields), \"created_at,verified\" }\n                };\n\n            Request req = likeReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_MissingTypeParameter_Throw()\n        {\n            var likeReqProc = new LikeRequestProcessor<LikeQuery> { BaseUrl = BaseUrl2 };\n            var parameters = new Dictionary<string, string>();\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => likeReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParameter_Throws()\n        {\n            var likeReqProc = new LikeRequestProcessor<LikeQuery> { BaseUrl = BaseUrl2 };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => likeReqProc.BuildUrl(null));\n\n            Assert.AreEqual(nameof(Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithLikes_HandlesResults()\n        {\n            var likeReqProc = new LikeRequestProcessor<LikeQuery>\n            {\n                Type = LikeType.Lookup\n            };\n\n            IList actual = likeReqProc.ProcessResults(LikesJson);\n\n            var actualQuery = actual as IList<LikeQuery>;\n            Assert.IsNotNull(actualQuery);\n            Assert.AreEqual(4, actualQuery[0].Tweets.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithEmptyResults_ReturnsEmptyList()\n        {\n            var likeReqProc = new LikeRequestProcessor<LikeQuery> \n            { \n                BaseUrl = BaseUrl2,\n                Type = LikeType.Lookup\n            };\n\n            var likes = likeReqProc.ProcessResults(NoLikes);\n\n            Assert.AreEqual(1, likes.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_RetainsOriginalInputParameters()\n        {\n            var likeReqProc = new LikeRequestProcessor<LikeQuery>\n            {\n                Type = LikeType.Lookup,\n                Expansions = \"attachments.poll_ids,author_id\",\n                ID = \"123\",\n                MaxResults = 99,\n                MediaFields = \"456\",\n                PaginationToken = \"567\",\n                PlaceFields = \"012\",\n                PollFields = \"345\",\n                TweetFields = \"author_id,created_at\",\n                UserFields = \"created_at,verified\"\n            };\n\n            var likes = likeReqProc.ProcessResults(LikesJson);\n\n            Assert.IsNotNull(likes);\n            Assert.IsNotNull(likes.SingleOrDefault());\n            var like = likes.Single();\n            Assert.AreEqual(LikeType.Lookup, like.Type);\n            Assert.AreEqual(\"attachments.poll_ids,author_id\", like.Expansions);\n            Assert.AreEqual(\"123\", like.ID);\n            Assert.AreEqual(99, like.MaxResults);\n            Assert.AreEqual(\"456\", like.MediaFields);\n            Assert.AreEqual(\"567\", like.PaginationToken);\n            Assert.AreEqual(\"012\", like.PlaceFields);\n            Assert.AreEqual(\"345\", like.PollFields);\n            Assert.AreEqual(\"author_id,created_at\", like.TweetFields);\n            Assert.AreEqual(\"created_at,verified\", like.UserFields);\n        }\n\n        const string NoLikes = @\"{\"\"meta\"\":{\"\"result_count\"\":0}}\";\n\n        const string LikesJson = @\"{\n\t\"\"data\"\": [\n\t{\n\t\"\"id\"\": \"\"1399921020669022210\"\",\n\t\t\t\"\"attachments\"\": {\n\t\t\"\"media_keys\"\": [\n\t\t\t\t\t\"\"3_1399919388547903488\"\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"context_annotations\"\": [\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"67\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Interests, opinions, and behaviors of individuals, groups, or cultures; like Speciality Cooking or Theme Parks\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"1359865633672859649\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Upper body fitness\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"65\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Vertical\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Top level interests and hobbies groupings, like Food or Travel\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"847868745150119936\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Home & family\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Hobbies and interests\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"65\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Vertical\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Top level interests and hobbies groupings, like Food or Travel\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"872553326499422208\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Fitness\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Fitness\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"872554146750017536\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Exercises\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Exercises\"\"\n\t\t\t\t\t}\n\t}\n\t\t\t],\n\t\t\t\"\"entities\"\": {\n\t\t\"\"urls\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 172,\n\t\t\t\t\t\t\"\"end\"\": 195,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/lxI08XTVaW\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/Azure/bicep#get-started-with-bicep\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"github.com/Azure/bicep#ge…\"\",\n\t\t\t\t\t\t\"\"images\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\"\"url\"\": \"\"https://pbs.twimg.com/news_img/1405272347951603714/TqGIykgy?format=jpg&name=orig\"\",\n\t\t\t\t\t\t\t\t\"\"width\"\": 1200,\n\t\t\t\t\t\t\t\t\"\"height\"\": 600\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\"\"url\"\": \"\"https://pbs.twimg.com/news_img/1405272347951603714/TqGIykgy?format=jpg&name=150x150\"\",\n\t\t\t\t\t\t\t\t\"\"width\"\": 150,\n\t\t\t\t\t\t\t\t\"\"height\"\": 150\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"\"status\"\": 200,\n\t\t\t\t\t\t\"\"title\"\": \"\"Azure/bicep\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Bicep is a declarative language for describing and deploying Azure resources - Azure/bicep\"\",\n\t\t\t\t\t\t\"\"unwound_url\"\": \"\"https://github.com/Azure/bicep#get-started-with-bicep\"\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 196,\n\t\t\t\t\t\t\"\"end\"\": 219,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/3zXjNOhv8w\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://twitter.com/jongallant/status/1399921020669022210/photo/1\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com/3zXjNOhv8w\"\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 220,\n\t\t\t\t\t\t\"\"end\"\": 243,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/AooS3lvcDf\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://twitter.com/BicepLang/status/1399799768021278721\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"twitter.com/BicepLang/stat…\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"annotations\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 43,\n\t\t\t\t\t\t\"\"end\"\": 51,\n\t\t\t\t\t\t\"\"probability\"\": 0.6501,\n\t\t\t\t\t\t\"\"type\"\": \"\"Organization\"\",\n\t\t\t\t\t\t\"\"normalized_text\"\": \"\"Gym Azure\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 83,\n\t\t\t\t\t\t\"\"end\"\": 93,\n\t\t\t\t\t\t\"\"username\"\": \"\"BicepLang\"\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"conversation_id\"\": \"\"1399921020669022210\"\",\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"referenced_tweets\"\": [\n\t\t\t\t{\n\t\t\"\"type\"\": \"\"quoted\"\",\n\t\t\t\t\t\"\"id\"\": \"\"1399799768021278721\"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"author_id\"\": \"\"14631076\"\",\n\t\t\t\"\"text\"\": \"\"Every day is bicep day when you workout at Gym Azure. 🦾\\n\\nToday I'm flexing the new @BicepLang linter to help guide me towards having better toned biceps.\\n\\nGet ripped today https://t.co/lxI08XTVaW https://t.co/3zXjNOhv8w https://t.co/AooS3lvcDf\"\",\n\t\t\t\"\"reply_settings\"\": \"\"everyone\"\",\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"source\"\": \"\"Twitter Web App\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\"\"retweet_count\"\": 1,\n\t\t\t\t\"\"reply_count\"\": 2,\n\t\t\t\t\"\"like_count\"\": 25,\n\t\t\t\t\"\"quote_count\"\": 0\n\t\t\t},\n\t\t\t\"\"created_at\"\": \"\"2021-06-02T02:49:15.000Z\"\"\n\t\t},\n\t\t{\n\t\"\"id\"\": \"\"1398741415807664129\"\",\n\t\t\t\"\"attachments\"\": {\n\t\t\"\"media_keys\"\": [\n\t\t\t\t\t\"\"3_1398724015984947200\"\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"context_annotations\"\": [\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"123\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Ongoing News Story\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Ongoing News Stories like 'Brexit'\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"1220701888179359745\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"COVID-19\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"852219717016141824\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"College life\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"College Life\"\"\n\t\t\t\t\t}\n\t}\n\t\t\t],\n\t\t\t\"\"entities\"\": {\n\t\t\"\"urls\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 278,\n\t\t\t\t\t\t\"\"end\"\": 301,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/77Ezx4y5Ez\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://twitter.com/AtlCodeCamp/status/1398741415807664129/photo/1\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com/77Ezx4y5Ez\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"hashtags\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 265,\n\t\t\t\t\t\t\"\"end\"\": 277,\n\t\t\t\t\t\t\"\"tag\"\": \"\"ATLCodeCamp\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"annotations\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\"\"end\"\": 16,\n\t\t\t\t\t\t\"\"probability\"\": 0.7556,\n\t\t\t\t\t\t\"\"type\"\": \"\"Organization\"\",\n\t\t\t\t\t\t\"\"normalized_text\"\": \"\"Atlanta Code Camp\"\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 65,\n\t\t\t\t\t\t\"\"end\"\": 98,\n\t\t\t\t\t\t\"\"probability\"\": 0.9565,\n\t\t\t\t\t\t\"\"type\"\": \"\"Organization\"\",\n\t\t\t\t\t\t\"\"normalized_text\"\": \"\"Kennesaw State University Marietta\"\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"conversation_id\"\": \"\"1398741415807664129\"\",\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"author_id\"\": \"\"1598668740\"\",\n\t\t\t\"\"text\"\": \"\"Atlanta Code Camp 2021 will take place on Oct. 9th, 2021, at the Kennesaw State University Marietta campus. \\n\\nWe hope the world continues making progress in the recovery from the COVID-19 pandemic and that we can be back with our friends and colleagues this year.\\n\\n#ATLCodeCamp https://t.co/77Ezx4y5Ez\"\",\n\t\t\t\"\"reply_settings\"\": \"\"everyone\"\",\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"source\"\": \"\"TweetDeck\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\"\"retweet_count\"\": 12,\n\t\t\t\t\"\"reply_count\"\": 1,\n\t\t\t\t\"\"like_count\"\": 17,\n\t\t\t\t\"\"quote_count\"\": 1\n\t\t\t},\n\t\t\t\"\"created_at\"\": \"\"2021-05-29T20:41:55.000Z\"\"\n\t\t},\n\t\t{\n\t\"\"id\"\": \"\"1397685862981308420\"\",\n\t\t\t\"\"attachments\"\": {\n\t\t\"\"media_keys\"\": [\n\t\t\t\t\t\"\"3_1397685860414410755\"\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"entities\"\": {\n\t\t\"\"urls\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 17,\n\t\t\t\t\t\t\"\"end\"\": 40,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/x9DBDjooFW\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://twitter.com/Madelie90476411/status/1397685862981308420/photo/1\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com/x9DBDjooFW\"\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"conversation_id\"\": \"\"1397685862981308420\"\",\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"author_id\"\": \"\"1388658349810593793\"\",\n\t\t\t\"\"text\"\": \"\"Kind reminder... https://t.co/x9DBDjooFW\"\",\n\t\t\t\"\"reply_settings\"\": \"\"everyone\"\",\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"source\"\": \"\"Twitter for Android\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\"\"retweet_count\"\": 15,\n\t\t\t\t\"\"reply_count\"\": 0,\n\t\t\t\t\"\"like_count\"\": 56,\n\t\t\t\t\"\"quote_count\"\": 3\n\t\t\t},\n\t\t\t\"\"created_at\"\": \"\"2021-05-26T22:47:32.000Z\"\"\n\t\t},\n\t\t{\n\t\"\"id\"\": \"\"1380279280211537928\"\",\n\t\t\t\"\"context_annotations\"\": [\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"46\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Categories within Brand Verticals that narrow down the scope of Brands\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"781974596752842752\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Services\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"47\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Brands and Companies\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"10045225402\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Twitter\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"65\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Vertical\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Top level interests and hobbies groupings, like Food or Travel\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"848920371311001600\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Technology\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Technology and computing\"\"\n\t\t\t\t\t}\n\t},\n\t\t\t\t{\n\t\t\"\"domain\"\": {\n\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\"\"id\"\": \"\"898673391980261376\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Web development\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Web Development\"\"\n\t\t\t\t\t}\n\t}\n\t\t\t],\n\t\t\t\"\"entities\"\": {\n\t\t\"\"urls\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 143,\n\t\t\t\t\t\t\"\"end\"\": 166,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/kv0SIogtJb\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://twitter.com/JoeMayo/status/1380211819676016643\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"twitter.com/JoeMayo/status…\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"hashtags\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 34,\n\t\t\t\t\t\t\"\"end\"\": 45,\n\t\t\t\t\t\t\"\"tag\"\": \"\"twitterapi\"\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 121,\n\t\t\t\t\t\t\"\"end\"\": 128,\n\t\t\t\t\t\t\"\"tag\"\": \"\"dotnet\"\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 129,\n\t\t\t\t\t\t\"\"end\"\": 142,\n\t\t\t\t\t\t\"\"tag\"\": \"\"linq2twitter\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"annotations\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\"\"end\"\": 2,\n\t\t\t\t\t\t\"\"probability\"\": 0.7058,\n\t\t\t\t\t\t\"\"type\"\": \"\"Person\"\",\n\t\t\t\t\t\t\"\"normalized_text\"\": \"\"Joe\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"start\"\": 6,\n\t\t\t\t\t\t\"\"end\"\": 17,\n\t\t\t\t\t\t\"\"username\"\": \"\"Linq2Twitr\"\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"conversation_id\"\": \"\"1380279280211537928\"\",\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"referenced_tweets\"\": [\n\t\t\t\t{\n\t\t\"\"type\"\": \"\"quoted\"\",\n\t\t\t\t\t\"\"id\"\": \"\"1380211819676016643\"\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"author_id\"\": \"\"786491\"\",\n\t\t\t\"\"text\"\": \"\"Joe's @Linq2Twitr library is 🔥 on #twitterapi v2! Thank you! dotNet devs get the latest API features, first, right here! #dotnet #linq2twitter https://t.co/kv0SIogtJb\"\",\n\t\t\t\"\"reply_settings\"\": \"\"everyone\"\",\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"source\"\": \"\"Twitter Web App\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\"\"retweet_count\"\": 6,\n\t\t\t\t\"\"reply_count\"\": 1,\n\t\t\t\t\"\"like_count\"\": 6,\n\t\t\t\t\"\"quote_count\"\": 0\n\t\t\t},\n\t\t\t\"\"created_at\"\": \"\"2021-04-08T21:59:59.000Z\"\"\n\t\t}\n\t],\n\t\"\"meta\"\": {\n\t\"\"result_count\"\": 20,\n\t\t\"\"next_token\"\": \"\"7140dibdnow9c7btw45446skphfy2d9i9rkwfd2qe4q46\"\"\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/LinqToTwitter.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0</TargetFramework>\n\n    <IsPackable>false</IsPackable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.1.0\" />\n    <PackageReference Include=\"Moq\" Version=\"4.17.2\" />\n    <PackageReference Include=\"MSTest.TestAdapter\" Version=\"2.2.10\" />\n    <PackageReference Include=\"MSTest.TestFramework\" Version=\"2.2.10\" />\n    <PackageReference Include=\"coverlet.collector\" Version=\"3.1.2\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"System.Configuration.ConfigurationManager\" Version=\"6.0.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LinqToTwitter\\LinqToTwitter.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/ListTests/ListCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.ListTests\n{\n    [TestClass]\n    public class ListCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public ListCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<List>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListCreateOrUpdateRequest>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListDeleteRequest>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListMemberRequest>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListFollowOrPinRequest>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_MissingNameParam_Throws()\n        {\n            InitializeTwitterContext(CreateListResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateListAsync(null, \"desc\", isPrivate: true));\n\n            Assert.AreEqual(\"name\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_WithParameters_BuildsUrl()\n        {\n            InitializeTwitterContext(CreateListResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"name\", \"test\" },\n                { \"description\", \"desc\" },\n                { \"private\", true.ToString() }\n            };\n\n            await ctx.CreateListAsync(\"test\", \"desc\", isPrivate: true);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/2/lists\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListCreateOrUpdateRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(CreateListResponse);\n\n            ListResponse response = await ctx.CreateListAsync(\"test\", \"desc\", isPrivate: true);\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.AreEqual(\"1441162269824405510\", data.ID);\n            Assert.AreEqual(\"test v2 create list\", data.Name);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_MissingIDParam_Throws()\n        {\n            InitializeTwitterContext(UpdateListResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateListAsync(null, \"test\", \"desc\", isPrivate: true));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_WithParams_BuildsUrl()\n        {\n            InitializeTwitterContext(UpdateListResponse);\n\n            await ctx.UpdateListAsync(\"123\", \"test\", \"desc\", isPrivate: true);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    \"https://api.twitter.com/2/lists/123\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListCreateOrUpdateRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UpdateListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(UpdateListResponse);\n\n            ListResponse response = await ctx.UpdateListAsync(\"123\", \"test\", \"desc\", isPrivate: true);\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsTrue(data.Updated);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_WithMissingID_Throws()\n        {\n            InitializeTwitterContext(DeleteListResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteListAsync(null));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_WithGoodID_BuildsUrl()\n        {\n            InitializeTwitterContext(DeleteListResponse);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"id\", \"123\" }\n            };\n\n            await ctx.DeleteListAsync(\"123\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/2/lists/123\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListDeleteRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(DeleteListResponse);\n\n            ListResponse response = await ctx.DeleteListAsync(\"123\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsTrue(data.Deleted);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_WithoutListID_Throws()\n        {\n            InitializeTwitterContext(AddListMemberResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(null, \"def\"));\n\n            Assert.AreEqual(\"listID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_WithoutUserID_Throws()\n        {\n            InitializeTwitterContext(AddListMemberResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddMemberToListAsync(\"abc\", null));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_WithGoodIDs_BuildsUrl()\n        {\n            InitializeTwitterContext(AddListMemberResponse);\n\n            await ctx.AddMemberToListAsync(\"abc\", \"def\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/2/lists/abc/members\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListMemberRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddMemberToListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(AddListMemberResponse);\n\n            ListResponse response = await ctx.AddMemberToListAsync(\"abc\", \"def\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsTrue(data.IsMember);\n        }\n\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_WithoutListID_Throws()\n        {\n            InitializeTwitterContext(DeleteListMemberResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(null, \"def\"));\n\n            Assert.AreEqual(\"listID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_WithoutUserID_Throws()\n        {\n            InitializeTwitterContext(DeleteListMemberResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteMemberFromListAsync(\"abc\", null));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_WithGoodIDs_BuildsUrl()\n        {\n            InitializeTwitterContext(DeleteListMemberResponse);\n\n            await ctx.DeleteMemberFromListAsync(\"abc\", \"def\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/2/lists/abc/members/def\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListMemberRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteMemberFromListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(DeleteListMemberResponse);\n\n            ListResponse response = await ctx.DeleteMemberFromListAsync(\"abc\", \"def\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsFalse(data.IsMember);\n        }\n\n        [TestMethod]\n        public async Task AddFollowerToListAsync_WithoutListID_Throws()\n        {\n            InitializeTwitterContext(AddListFollowerResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddFollowerToListAsync(null, \"def\"));\n\n            Assert.AreEqual(\"listID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddFollowerToListAsync_WithoutUserID_Throws()\n        {\n            InitializeTwitterContext(AddListFollowerResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddFollowerToListAsync(\"abc\", null));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task AddFollowerToListAsync_WithGoodIDs_BuildsUrl()\n        {\n            InitializeTwitterContext(AddListFollowerResponse);\n\n            await ctx.AddFollowerToListAsync(\"abc\", \"def\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/2/users/def/followed_lists\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListFollowOrPinRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task AddFollowerToListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(AddListFollowerResponse);\n\n            ListResponse response = await ctx.AddFollowerToListAsync(\"abc\", \"def\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsTrue(data.Following);\n        }\n\n\n        [TestMethod]\n        public async Task DeleteFollowerFromListAsync_WithoutListID_Throws()\n        {\n            InitializeTwitterContext(DeleteListFollowResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteFollowerFromListAsync(null, \"def\"));\n\n            Assert.AreEqual(\"listID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteFollowerFromListAsync_WithoutUserID_Throws()\n        {\n            InitializeTwitterContext(DeleteListFollowResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteFollowerFromListAsync(\"abc\", null));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteFollowerFromListAsync_WithGoodIDs_BuildsUrl()\n        {\n            InitializeTwitterContext(DeleteListFollowResponse);\n\n            await ctx.DeleteFollowerFromListAsync(\"abc\", \"def\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/2/users/def/followed_lists/abc\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListFollowOrPinRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteFollowerFromListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(DeleteListFollowResponse);\n\n            ListResponse response = await ctx.DeleteFollowerFromListAsync(\"abc\", \"def\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsFalse(data.Following);\n        }\n\n        [TestMethod]\n        public async Task PinListAsync_WithoutListID_Throws()\n        {\n            InitializeTwitterContext(PinResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.PinListAsync(null, \"def\"));\n\n            Assert.AreEqual(\"listID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task PinListAsync_WithoutUserID_Throws()\n        {\n            InitializeTwitterContext(PinResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.AddFollowerToListAsync(\"abc\", null));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task PinListAsync_WithGoodIDs_BuildsUrl()\n        {\n            InitializeTwitterContext(PinResponse);\n\n            await ctx.PinListAsync(\"abc\", \"def\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/2/users/def/pinned_lists\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListFollowOrPinRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task PinListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(PinResponse);\n\n            ListResponse response = await ctx.PinListAsync(\"abc\", \"def\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsTrue(data.Pinned);\n        }\n\n\n        [TestMethod]\n        public async Task UnpinListAsync_WithoutListID_Throws()\n        {\n            InitializeTwitterContext(UnpinResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnpinListAsync(null, \"def\"));\n\n            Assert.AreEqual(\"listID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnpinListAsync_WithoutUserID_Throws()\n        {\n            InitializeTwitterContext(UnpinResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnpinListAsync(\"abc\", null));\n\n            Assert.AreEqual(\"userID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnpinListAsync_WithGoodIDs_BuildsUrl()\n        {\n            InitializeTwitterContext(UnpinResponse);\n\n            await ctx.UnpinListAsync(\"abc\", \"def\");\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    \"https://api.twitter.com/2/users/def/pinned_lists/abc\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<ListFollowOrPinRequest>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task UnpinListAsync_WithGoodParams_PopulatesResponse()\n        {\n            InitializeTwitterContext(DeleteListFollowResponse);\n\n            ListResponse response = await ctx.UnpinListAsync(\"abc\", \"def\");\n\n            Assert.IsNotNull(response);\n            ListResponseData data = response.Data;\n            Assert.IsFalse(data.Pinned);\n        }\n\n        const string CreateListResponse = @\"{\n  \"\"data\"\": {\n    \"\"id\"\": \"\"1441162269824405510\"\",\n    \"\"name\"\": \"\"test v2 create list\"\"\n  }\n}\";\n\n        const string UpdateListResponse = @\"{\n  \"\"data\"\": {\n    \"\"updated\"\": true\n  }\n}\";\n\n        const string DeleteListResponse = @\"{\n  \"\"data\"\": {\n    \"\"deleted\"\": true\n  }\n}\";\n\n        const string AddListMemberResponse = @\"{\n  \"\"data\"\": {\n    \"\"is_member\"\": true\n  }\n}\";\n\n        const string DeleteListMemberResponse = @\"{\n  \"\"data\"\": {\n    \"\"is_member\"\": false\n  }\n}\";\n\n        const string AddListFollowerResponse = @\"{\n  \"\"data\"\": {\n    \"\"following\"\": true\n  }\n}\";\n\n        const string DeleteListFollowResponse = @\"{\n  \"\"data\"\": {\n    \"\"following\"\": false\n  }\n}\";\n\n        const string PinResponse = @\"{\n  \"\"data\"\": {\n    \"\"pinned\"\": true\n  }\n}\";\n\n        const string UnpinResponse = @\"{\n  \"\"data\"\": {\n    \"\"pinned\"\": false\n  }\n}\";\n\n        const string TestStatusQueryResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":6194482,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/techpreacher.corti.com\"\",\n         \"\"created_at\"\":\"\"Mon May 21 08:57:50 +0000 2007\"\",\n         \"\"followers_count\"\":815,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"a6cce6\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":3600,\n         \"\"name\"\":\"\"Sascha Corti\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"location\"\":\"\"47.580262,-122.135105\"\",\n         \"\"profile_link_color\"\":\"\"0084B4\"\",\n         \"\"listed_count\"\":47,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":false,\n         \"\"description\"\":\"\"Developer evangelist for Microsoft in Switzerland. Focus on web 2.0 technologies, Windows Phone 7 development. Passionate gamer with a life.\"\",\n         \"\"profile_text_color\"\":\"\"333333\"\",\n         \"\"statuses_count\"\":4293,\n         \"\"screen_name\"\":\"\"TechPreacher\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1618873297\\/iPhone_Pictures_524_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Bern\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/242394801\\/TwitterBackground2.png\"\",\n         \"\"friends_count\"\":517,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n         \"\"id_str\"\":\"\"6194482\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":37,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"196286470443642880\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"annotations\"\":null,\n      \"\"source\"\":\"\"\\u003Ca href=\\\"\"http:\\/\\/raptr.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003ERaptr\\u003C\\/a\\u003E\"\",\n      \"\"created_at\"\":\"\"Sat Apr 28 17:15:16 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":196286470443642880,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"I unlocked the Get a cube achievement on Fez! http:\\/\\/t.co\\/Hqhl5oix\"\"\n   }\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/ListTests/ListRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.ListTests\n{\n    [TestClass]\n    public class ListRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public ListRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Parses_All_Available_Parameters()\n        {\n            var listReqProc = new ListRequestProcessor<ListQuery>();\n            Expression<Func<ListQuery, bool>> expression =\n                list =>\n                    list.Type == ListType.Lookup &&\n                    list.Expansions == ExpansionField.OwnerID &&\n                    list.ListID == \"abc\" &&\n                    list.ListFields == ListField.CreatedAt &&\n                    list.MaxResults == 50 &&\n                    list.PaginationToken == \"def\" &&\n                    list.UserFields == UserField.ProfileImageUrl &&\n                    list.UserID == \"123\";\n\n            var queryParams = listReqProc.GetParameters(expression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.Type), ((int)ListType.Lookup).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.Expansions), ExpansionField.OwnerID)));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.ListID), \"abc\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.ListFields), ListField.CreatedAt)));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.MaxResults), \"50\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.PaginationToken), \"def\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.UserFields), UserField.ProfileImageUrl)));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(ListQuery.UserID), \"123\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParameters_Throws()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n\n            L2TAssert.Throws<ArgumentNullException>(() =>\n            {\n                reqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForLookup_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"lists/12345?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Lookup.ToString() },\n                    { nameof(ListQuery.ListID), \"12345\" },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description},{ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForLookupWithSpacesInFields_RemovesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"lists/12345?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Lookup.ToString() },\n                    { nameof(ListQuery.ListID), \"12345\" },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description}, {ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForLookup_RequiresListID()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Lookup.ToString() },\n                    //{ nameof(ListType.ListID), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ListQuery.ListID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForOwnership_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/owned_lists?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"max_results=50&\" +\n                \"pagination_token=def&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Owned.ToString() },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description},{ListField.MemberCount}\" },\n                    { nameof(ListQuery.MaxResults), \"50\" },\n                    { nameof(ListQuery.PaginationToken), \"def\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n                    { nameof(ListQuery.UserID), \"12345\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForOwnershipWithSpacesInFields_RemovesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/owned_lists?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Owned.ToString() },\n                    { nameof(ListQuery.UserID), \"12345\" },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description}, {ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForOwnership_RequiresListID()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Owned.ToString() },\n                    //{ nameof(ListType.UserID), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ListQuery.UserID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessReults_WithSingleList_ReturnsListData()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n\n            List<ListQuery> results = reqProc.ProcessResults(SingleListResponse);\n\n            Assert.IsNotNull(results);\n            Assert.AreEqual(1, results.Count);\n            ListQuery query = results.SingleOrDefault();\n            Assert.IsNotNull(query);\n            List<List> lists = query.Lists;\n            Assert.IsNotNull(lists);\n            Assert.AreEqual(1, lists.Count);\n            List list = query.Lists.SingleOrDefault();\n            Assert.AreEqual(\"898994036043689985\", list.ID);\n            Assert.AreEqual(\"AI\", list.Name);\n        }\n\n        [TestMethod]\n        public void ProcessReults_WithMultipleLists_ReturnsListData()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n\n            List<ListQuery> results = reqProc.ProcessResults(MultipleListsResponse);\n\n            Assert.IsNotNull(results);\n            Assert.AreEqual(1, results.Count);\n            ListQuery query = results.SingleOrDefault();\n            Assert.IsNotNull(query);\n            List<List> lists = query.Lists;\n            Assert.IsNotNull(lists);\n            Assert.AreEqual(2, lists.Count);\n            List list = query.Lists.FirstOrDefault();\n            Assert.AreEqual(\"1465133473744654337\", list.ID);\n            Assert.AreEqual(\"Crypto\", list.Name);\n            Assert.AreEqual(12, list.MemberCount);\n            Assert.AreEqual(\"Accounts Related to Crypto Currencies\", list.Description);\n            Assert.IsTrue(list.Private);\n            Assert.AreEqual(1024, list.FollowerCount);\n            Assert.AreEqual(DateTime.Parse(\"2021-11-29T01:40:15.000Z\").ToUniversalTime(), list.CreatedAt);\n            Assert.AreEqual(\"15411837\", list.OwnerID);\n            ListMeta meta = query.Meta;\n            Assert.IsNotNull(meta);\n            Assert.AreEqual(2, meta.ResultCount);\n            Assert.AreEqual(\"1695585497111705486\", meta.NextToken);\n            Assert.AreEqual(\"1695585497111705485\", meta.PreviousToken);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForMembership_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/list_memberships?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"max_results=50&\" +\n                \"pagination_token=def&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Member.ToString() },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description},{ListField.MemberCount}\" },\n                    { nameof(ListQuery.MaxResults), \"50\" },\n                    { nameof(ListQuery.PaginationToken), \"def\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n                    { nameof(ListQuery.UserID), \"12345\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForMembershipWithSpacesInFields_RemovesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/list_memberships?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Member.ToString() },\n                    { nameof(ListQuery.UserID), \"12345\" },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description}, {ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForMembership_RequiresListID()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Member.ToString() },\n                    //{ nameof(ListType.UserID), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ListQuery.UserID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForFollowed_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/followed_lists?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"max_results=50&\" +\n                \"pagination_token=def&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Following.ToString() },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description},{ListField.MemberCount}\" },\n                    { nameof(ListQuery.MaxResults), \"50\" },\n                    { nameof(ListQuery.PaginationToken), \"def\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n                    { nameof(ListQuery.UserID), \"12345\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForFollowedWithSpacesInFields_RemovesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/followed_lists?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Following.ToString() },\n                    { nameof(ListQuery.UserID), \"12345\" },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description}, {ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForFollowed_RequiresListID()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Following.ToString() },\n                    //{ nameof(ListType.UserID), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ListQuery.UserID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForPinned_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/pinned_lists?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Pinned.ToString() },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description},{ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n                    { nameof(ListQuery.UserID), \"12345\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForPinnedWithSpacesInFields_RemovesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users/12345/pinned_lists?\" +\n                \"expansions=owner_id&\" +\n                \"list.fields=description%2Cmember_count&\" +\n                \"user.fields=created_at%2Cverified\";\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Pinned.ToString() },\n                    { nameof(ListQuery.UserID), \"12345\" },\n                    { nameof(ListQuery.Expansions), ExpansionField.OwnerID },\n                    { nameof(ListQuery.ListFields), $\"{ListField.Description}, {ListField.MemberCount}\" },\n                    { nameof(ListQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n               };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForPinned_RequiresListID()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(ListQuery.Type), ListType.Pinned.ToString() },\n                    //{ nameof(ListType.UserID), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(ListQuery.UserID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_PopulatesInputParameters()\n        {\n            var reqProc = new ListRequestProcessor<ListQuery>\n            {\n                BaseUrl = BaseUrl2,\n                Type = ListType.Member,\n                Expansions = \"123\",\n                ListID = \"9025\",\n                ListFields = \"678\",\n                MaxResults = 50,\n                PaginationToken = \"567\",\n                UserFields = \"234\",\n                UserID = \"3572\",\n            };\n\n            var results = reqProc.ProcessResults(SingleListResponse);\n\n            Assert.IsNotNull(results);\n            Assert.AreEqual(1, results.Count);\n            var listQuery = results.Single();\n            Assert.IsNotNull(listQuery);\n            Assert.AreEqual(ListType.Member, listQuery.Type);\n            Assert.AreEqual(\"123\", listQuery.Expansions);\n            Assert.AreEqual(\"9025\", listQuery.ListID);\n            Assert.AreEqual(\"678\", listQuery.ListFields);\n            Assert.AreEqual(50, listQuery.MaxResults);\n            Assert.AreEqual(\"567\", listQuery.PaginationToken);\n            Assert.AreEqual(\"234\", listQuery.UserFields);\n            Assert.AreEqual(\"3572\", listQuery.UserID);\n        }\n\n        const string SingleListResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"id\"\": \"\"898994036043689985\"\",\n\t\t\"\"name\"\": \"\"AI\"\"\n\t}\n}\";\n\n        const string MultipleListsResponse = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"member_count\"\": 12,\n\t\t\t\"\"description\"\": \"\"Accounts Related to Crypto Currencies\"\",\n\t\t\t\"\"private\"\": true,\n\t\t\t\"\"id\"\": \"\"1465133473744654337\"\",\n\t\t\t\"\"follower_count\"\": 1024,\n\t\t\t\"\"created_at\"\": \"\"2021-11-29T01:40:15.000Z\"\",\n\t\t\t\"\"owner_id\"\": \"\"15411837\"\",\n\t\t\t\"\"name\"\": \"\"Crypto\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"member_count\"\": 1764,\n\t\t\t\"\"description\"\": \"\"Startup and VC Ecosystem\"\",\n\t\t\t\"\"private\"\": false,\n\t\t\t\"\"id\"\": \"\"1288570987919757312\"\",\n\t\t\t\"\"follower_count\"\": 6,\n\t\t\t\"\"created_at\"\": \"\"2020-07-29T20:23:58.000Z\"\",\n\t\t\t\"\"owner_id\"\": \"\"15411837\"\",\n\t\t\t\"\"name\"\": \"\"VC and Startup\"\"\n\t\t}\n\t],\n\t\"\"includes\"\": {\n\t\t\"\"users\"\": [\n\t\t\t{\n\t\t\t\t\"\"created_at\"\": \"\"2008-07-13T04:35:50.000Z\"\",\n\t\t\t\t\"\"id\"\": \"\"15411837\"\",\n\t\t\t\t\"\"username\"\": \"\"JoeMayo\"\",\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\t\t\"\"followers_count\"\": 10000,\n\t\t\t\t\t\"\"following_count\"\": 1639,\n\t\t\t\t\t\"\"tweet_count\"\": 4031,\n\t\t\t\t\t\"\"listed_count\"\": 265\n\n                },\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"pinned_tweet_id\"\": \"\"1461369532514127877\"\",\n\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1185764990403268613/8GoXoOtz_normal.jpg\"\",\n\t\t\t\t\"\"url\"\": \"\"https://t.co/1V3mZMjFvp\"\",\n\t\t\t\t\"\"description\"\": \"\"Author, Instructor, and Independent Consultant \\n\\nNewest Release: C# Cookbook (https://t.co/acNTiAe6HQ)\\n\\n#AI #Azure #Chatbots #CSharp #Linq2Twitter #NLP\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/1V3mZMjFvp\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://www.linkedin.com/in/joemayo/\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"linkedin.com/in/joemayo/\"\"\n\n                            }\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n    \"\"urls\"\": [\n\n                            {\n        \"\"start\"\": 78,\n\t\t\t\t\t\t\t\t\"\"end\"\": 101,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/acNTiAe6HQ\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://bit.ly/CSharpCookbook\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly/CSharpCookbook\"\"\n\n                            }\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"\"hashtags\"\": [\n\n                            {\n        \"\"start\"\": 104,\n\t\t\t\t\t\t\t\t\"\"end\"\": 107,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"AI\"\"\n\n                            },\n\t\t\t\t\t\t\t{\n        \"\"start\"\": 108,\n\t\t\t\t\t\t\t\t\"\"end\"\": 114,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"Azure\"\"\n\n                            },\n\t\t\t\t\t\t\t{\n        \"\"start\"\": 115,\n\t\t\t\t\t\t\t\t\"\"end\"\": 124,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"Chatbots\"\"\n\n                            },\n\t\t\t\t\t\t\t{\n        \"\"start\"\": 125,\n\t\t\t\t\t\t\t\t\"\"end\"\": 132,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"CSharp\"\"\n\n                            },\n\t\t\t\t\t\t\t{\n        \"\"start\"\": 133,\n\t\t\t\t\t\t\t\t\"\"end\"\": 146,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"Linq2Twitter\"\"\n\n                            },\n\t\t\t\t\t\t\t{\n        \"\"start\"\": 147,\n\t\t\t\t\t\t\t\t\"\"end\"\": 151,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"NLP\"\"\n\n                            }\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\"\n\t\t\t}\n\t\t]\n\t},\n\t\"\"meta\"\": {\n        \"\"result_count\"\": 2,\n\t\t\"\"next_token\"\": \"\"1695585497111705486\"\",\n\t\t\"\"previous_token\"\": \"\"1695585497111705485\"\"\n\n    }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/MediaTests/MediaCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class MediaCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public MediaCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        async Task<TwitterContext> InitializeTwitterContext()\n        {\n            await Task.Delay(1);\n            authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsMedia = new TaskCompletionSource<string>();\n            tcsMedia.SetResult(MediaResponse);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsMedia.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<MediaMetadata>(),\n                It.IsAny<CancellationToken>()))\n                .Returns(tcsMedia.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task UploadMediaAsync_WithBinaryImage_ReturnsMedia()\n        {\n            const ulong ExpectedMediaID = 521449660083609601ul;\n            string mediaType = \"image/jpg\";\n            var image = new byte[] { 1, 2, 3 };\n            var additionalOwners = new List<ulong> { 1, 2 };\n            string mediaCategory = \"tweet_image\";\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            Media actual = await ctx.UploadMediaAsync(image, mediaType, additionalOwners, mediaCategory);\n\n            Assert.AreEqual(ExpectedMediaID, actual.MediaID);\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithValidParameters_Succeeds()\n        {\n            ulong mediaID = 521449660083609601ul;\n            string altText = \"Sample media description\";\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await ctx.CreateMediaMetadataAsync(mediaID, altText);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://upload.twitter.com/1.1/media/metadata/create.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<MediaMetadata>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithZeroMediaID_Throws()\n        {\n            ulong mediaID = 0;\n            string altText = \"Sample media description\";\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.CreateMediaMetadataAsync(mediaID, altText));\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithEmptyAltText_Throws()\n        {\n            ulong mediaID = 521449660083609601ul;\n            string altText = \"\";\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.CreateMediaMetadataAsync(mediaID, altText));\n        }\n\n        [TestMethod]\n        public async Task CreateMediaMetadataAsync_WithNullAltText_Throws()\n        {\n            ulong mediaID = 521449660083609601ul;\n            string altText = null;\n\n            TwitterContext ctx = await InitializeTwitterContext();\n\n            await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.CreateMediaMetadataAsync(mediaID, altText));\n        }\n\n        const string MediaResponse = @\"{\n\t\"\"media_id\"\": 521449660083609601,\n\t\"\"media_id_string\"\": \"\"521449660083609601\"\",\n\t\"\"size\"\": 6955,\n\t\"\"image\"\": {\n\t\t\"\"w\"\": 100,\n\t\t\"\"h\"\": 100,\n\t\t\"\"image_type\"\": \"\"image\\/png\"\"\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/MediaTests/MediaRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitterPcl.Tests.StatusTests\n{\n    [TestClass]\n    public class MediaRequestProcessorTests\n    {\n        public const string BaseUrlAndVersion = \"https://upload.twitter.com/1.1/\";\n\n        public MediaRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new MediaRequestProcessor<Media>();\n\n            Expression<Func<Media, bool>> expression =\n            media =>\n                media.Type == MediaType.Status &&\n                media.Command == Media.StatusCommand &&\n                media.MediaID == 123;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Media.Type), ((int)MediaType.Status).ToString())));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(Media.Command), Media.StatusCommand)));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(Media.MediaID), 123.ToString())));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var mediaReqProc = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n            var parameters = new Dictionary<string, string> { };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => mediaReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Media.Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameter()\n        {\n            var target = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(null));\n\n            Assert.AreEqual(nameof(Media.Type), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildStatusUrl_MissingRequiredMediaID_Throws()\n        {\n            var target = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Media.Type), ((int)MediaType.Status).ToString() },\n                { nameof(Media.Command), Media.StatusCommand },\n                //{ nameof(Media.MediaID), 123.ToString() }\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(Media.MediaID), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Status_Url()\n        {\n            const string ExpectedUrl = BaseUrlAndVersion + \"media/upload.json?command=STATUS&media_id=123\";\n            var reqProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Media.Type), ((int)MediaType.Status).ToString() },\n                { nameof(Media.Command), Media.StatusCommand },\n                { nameof(Media.MediaID), 123.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildStatusUrl_WithoutOptionalCommand_HasDefault()\n        {\n            const string ExpectedUrl = BaseUrlAndVersion + \"media/upload.json?command=STATUS&media_id=123\";\n            var reqProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { nameof(Media.Type), ((int)MediaType.Status).ToString() },\n                //{ nameof(Media.Command), Media.StatusCommand },\n                { nameof(Media.MediaID), 123.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void MediaRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var statProc = new MediaRequestProcessor<Media> { BaseUrl = BaseUrlAndVersion };\n\n            Assert.IsInstanceOfType(statProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithInProgressResponse_IsProcessed()\n        {\n            var statProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion,\n                MediaID = 772492064386912256ul\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusInProgressResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(772492064386912256ul, media.MediaID);\n            Assert.IsNotNull(media.ProcessingInfo);\n            MediaProcessingInfo info = media.ProcessingInfo;\n            Assert.AreEqual(MediaProcessingInfo.InProgress, info.State);\n            Assert.AreEqual(5, info.CheckAfterSeconds);\n            Assert.AreEqual(5, info.ProgressPercent);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithFailedResponse_IsProcessed()\n        {\n            var statProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion,\n                MediaID = 773000650376548356ul\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusFailedResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(773000650376548356ul, media.MediaID);\n            Assert.AreEqual(28276017, media.Size);\n            Assert.IsNotNull(media.ProcessingInfo);\n            MediaProcessingInfo info = media.ProcessingInfo;\n            Assert.AreEqual(MediaProcessingInfo.Failed, info.State);\n            Assert.AreEqual(100, info.ProgressPercent);\n            Assert.IsNotNull(info.Error);\n            MediaError error = info.Error;\n            Assert.AreEqual(3, error.Code);\n            Assert.AreEqual(\"UnsupportedMedia\", error.Name);\n            Assert.AreEqual(\"Duration 10.minutes+22.seconds+628.milliseconds exceeds max duration of 2.minutes+20.seconds\", error.Message);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithSucceededResponse_IsProcessed()\n        {\n            var statProc = new MediaRequestProcessor<Media>\n            {\n                Type = MediaType.Status,\n                UploadUrl = BaseUrlAndVersion,\n                MediaID = 773017325037580289ul\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusSucceededResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(773017325037580289ul, media.MediaID);\n            Assert.AreEqual(7319206, media.Size);\n            Assert.AreEqual(86395, media.ExpiresAfterSeconds);\n            Assert.AreEqual(\"video/mp4\", media.VideoType);\n            Assert.IsNotNull(media.ProcessingInfo);\n            MediaProcessingInfo info = media.ProcessingInfo;\n            Assert.AreEqual(MediaProcessingInfo.Succeeded, info.State);\n            Assert.AreEqual(100, info.ProgressPercent);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var statProc = new MediaRequestProcessor<Media>() { BaseUrl = BaseUrlAndVersion };\n\n            List<Media> stats = statProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, stats.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var statProc = new MediaRequestProcessor<Media>()\n            {\n                BaseUrl = BaseUrlAndVersion,\n                Type = MediaType.Status,\n                Command = \"STATUS\",\n                MediaID = 123,\n            };\n\n            List<Media> mediaList = statProc.ProcessResults(MediaStatusInProgressResponse);\n\n            Assert.IsNotNull(mediaList);\n            Assert.AreEqual(1, mediaList.Count);\n            Media media = mediaList.Single();\n            Assert.IsNotNull(media);\n            Assert.AreEqual(MediaType.Status, media.Type);\n            Assert.AreEqual(\"STATUS\", media.Command);\n            Assert.AreEqual(123ul, media.MediaID);\n        }\n\n        const string MediaStatusInProgressResponse = @\"{\n\t\"\"media_id\"\": 772492064386912256,\n\t\"\"media_id_string\"\": \"\"772492064386912256\"\",\n\t\"\"processing_info\"\": {\n\t\t\"\"state\"\": \"\"in_progress\"\",\n\t\t\"\"check_after_secs\"\": 5,\n\t\t\"\"progress_percent\"\": 5\n\t}\n}\";\n\n        const string MediaStatusFailedResponse = @\"{\n\t\"\"media_id\"\": 773000650376548356,\n\t\"\"media_id_string\"\": \"\"773000650376548356\"\",\n\t\"\"size\"\": 28276017,\n\t\"\"processing_info\"\": {\n\t\t\"\"state\"\": \"\"failed\"\",\n\t\t\"\"progress_percent\"\": 100,\n\t\t\"\"error\"\": {\n\t\t\t\"\"code\"\": 3,\n\t\t\t\"\"name\"\": \"\"UnsupportedMedia\"\",\n\t\t\t\"\"message\"\": \"\"Duration 10.minutes+22.seconds+628.milliseconds exceeds max duration of 2.minutes+20.seconds\"\"\n\t\t}\n\t}\n}\";\n\n        const string MediaStatusSucceededResponse = @\"{\n\t\"\"media_id\"\": 773017325037580289,\n\t\"\"media_id_string\"\": \"\"773017325037580289\"\",\n\t\"\"size\"\": 7319206,\n\t\"\"expires_after_secs\"\": 86395,\n\t\"\"video\"\": {\n\t\t\"\"video_type\"\": \"\"video\\/mp4\"\"\n\t},\n\t\"\"processing_info\"\": {\n\t\t\"\"state\"\": \"\"succeeded\"\",\n\t\t\"\"progress_percent\"\": 100\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/MuteTests/MuteCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.MuteTests\n{\n    [TestClass]\n    public class MuteCommandsTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        Mock<ITwitterExecute> execMock;\n\n        public MuteCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_WithUserParams_SendsJson()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<MuteResponse>(MuteUserResponse);\n\n            MuteResponse actual = await ctx.MuteAsync(SourceUserID, TargetUserID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    $\"{BaseUrl2}users/{SourceUserID}/muting\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n\n        [TestMethod]\n        public async Task MuteAsync_WithUserParams_ReturnsMutingTrue()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<MuteResponse>(MuteUserResponse);\n\n            MuteResponse actual = await ctx.MuteAsync(SourceUserID, TargetUserID);\n\n            Assert.IsTrue(actual?.Data?.Muting ?? false);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_MissingSourceID_Throws()\n        {\n            const string ExpectedParamName = \"sourceUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(MuteUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.MuteAsync(null, \"2\"));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task MuteAsync_MissingTargetID_Throws()\n        {\n            const string ExpectedParamName = \"targetUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(MuteUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.MuteAsync(\"1\", null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_WithUserParams_SendsJson()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<MuteResponse>(MuteUserResponse);\n\n            MuteResponse actual = await ctx.UnMuteAsync(SourceUserID, TargetUserID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    $\"{BaseUrl2}users/{SourceUserID}/muting/{TargetUserID}\",\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n\n        [TestMethod]\n        public async Task UnMuteAsync_WithUserParams_ReturnsMutingTrue()\n        {\n            const string SourceUserID = \"1\";\n            const string TargetUserID = \"2\";\n\n            var ctx = InitTwitterContextWithPostToTwitter<MuteResponse>(MuteUserResponse);\n\n            MuteResponse actual = await ctx.UnMuteAsync(SourceUserID, TargetUserID);\n\n            Assert.IsTrue(actual?.Data?.Muting ?? false);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_MissingSourceID_Throws()\n        {\n            const string ExpectedParamName = \"sourceUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(MuteUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UnMuteAsync(null, \"2\"));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnMuteAsync_MissingTargetID_Throws()\n        {\n            const string ExpectedParamName = \"targetUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(MuteUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentNullException>(\n                async () => await ctx.UnMuteAsync(\"1\", null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        const string MuteUserResponse = @\"{\n  \"\"data\"\": {\n    \"\"muting\"\": true\n  }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/MuteTests/MuteRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.MuteTests\n{\n    [TestClass]\n    public class MuteRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public MuteRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_WithInputParams_Succeeds()\n        {\n            var target = new MuteRequestProcessor<Mute>();\n            Expression<Func<Mute, bool>> expression =\n                mute =>\n                    mute.Type == MuteType.Muted &&\n                    mute.ID == \"123\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Mute.Type), ((int)MuteType.Muted).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Mute.ID), \"123\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithParams_ConstructsUrl()\n        {\n            const string ExpectedUrl = BaseUrl2 + \"users/123/muting\";\n            var reqProc = new MuteRequestProcessor<Mute> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { nameof(Mute.Type), ((int)MuteType.Muted).ToString(CultureInfo.InvariantCulture) },\n                        { nameof(Mute.ID), \"123\" }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithMutesResponse_Succeeds()\n        {\n            var reqProc = new MuteRequestProcessor<Mute> { Type = MuteType.Muted };\n\n            List<Mute> mutes = reqProc.ProcessResults(MutesResponse);\n\n            Assert.IsNotNull(mutes);\n            Assert.IsNotNull(mutes.SingleOrDefault());\n            var mute = mutes.Single();\n            Assert.IsNotNull(mute);\n            var users = mute.Users;\n            Assert.IsNotNull(users);\n            Assert.IsTrue(users.Any());\n            TwitterUser user = users.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"30892897\", user.ID);\n            Assert.AreEqual(\"BigWallGraphics\", user.Name);\n            Assert.AreEqual(\"BigWallGraphics\", user.Username);\n            MuteMeta meta = mute.Meta;\n            Assert.IsNotNull(meta);\n            Assert.AreEqual(2, meta.ResultCount);\n        }\n\n        const string MutesResponse = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"id\"\": \"\"30892897\"\",\n\t\t\t\"\"name\"\": \"\"BigWallGraphics\"\",\n\t\t\t\"\"username\"\": \"\"BigWallGraphics\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"67294478\"\",\n\t\t\t\"\"name\"\": \"\"Walls360\"\",\n\t\t\t\"\"username\"\": \"\"Walls360\"\"\n\t\t}\n\t],\n\t\"\"meta\"\": {\n\t\t\"\"result_count\"\": 2\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/Net/TwitterErrorHandlerTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing LinqToTwitter.Net;\nusing System.Linq;\n\nnamespace LinqToTwitter.Tests.Net\n{\n    [TestClass]\n    public class TwitterErrorHandlerTests\n    {\n        public TwitterErrorHandlerTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithApiV1Error_Parses()\n        {\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(ApiV1ErrorJson);\n\n            Assert.IsNotNull(errorDetails);\n            List<Error> errors = errorDetails.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(1, errors.Count);\n            Error error = errors.First();\n            Assert.AreEqual(144, error.Code);\n            Assert.AreEqual(\"No status found with that ID.\", error.Message);\n        }\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithApiV1RequestError_Parses()\n        {\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(MediaErrorJson);\n\n            Assert.IsNotNull(errorDetails);\n            List<Error> errors = errorDetails.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(1, errors.Count);\n            Error error = errors.First();\n            Assert.AreEqual(\"/1.1/media/metadata/create.json\", error.Request);\n            Assert.AreEqual(\"media_id field must be provided.\", error.Message);\n        }\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithApiV2Error_Parses()\n        {\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(ApiV2ErrorJson);\n\n            Assert.IsNotNull(errorDetails);\n            Assert.AreEqual(\"Invalid Request\", errorDetails.Title);\n            Assert.AreEqual(\"One or more parameters to your request was invalid.\", errorDetails.Detail);\n            Assert.AreEqual(\"https://api.twitter.com/labs/2/problems/invalid-request\", errorDetails.Type);\n            List<Error> errors = errorDetails.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(2, errors.Count);\n            Error error = errors[1];\n            Assert.AreEqual(\"[q] is not one of [query,start_time,end_time,since_id,until_id,max_results,next_token,expansions,tweet.fields,media.fields,poll.fields,place.fields,user.fields]\", error.Message);\n            Dictionary<string, string[]> parameters = error.Parameters;\n            Assert.IsNotNull(parameters);\n            Assert.AreEqual(1, parameters.Count);\n            Assert.IsTrue(parameters.ContainsKey(\"q\"));\n            string[] values = parameters[\"q\"];\n            Assert.IsNotNull(values);\n            Assert.AreEqual(1, values.Count());\n            string value = values.First();\n            Assert.AreEqual(\"LINQ%20to%20Twitter\", value);\n        }\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithApiV2AccountLockedError_Parses()\n        {\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(AccountLockedErrorJson);\n\n            Assert.IsNotNull(errorDetails);\n            Assert.AreEqual(\"Forbidden\", errorDetails.Title);\n            Assert.AreEqual(\"Your account is temporarily locked. Please log in to https://twitter.com to unlock your account.\", errorDetails.Detail);\n            Assert.AreEqual(\"about:blank\", errorDetails.Type);\n            Assert.AreEqual(403, errorDetails.Status);\n        }\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithUnrecognizedContent_SendsErrorMessage()\n        {\n            const string GarbageIn = \"This is garbage\";\n\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(GarbageIn);\n\n            Assert.IsNotNull(errorDetails);\n            Assert.IsTrue(errorDetails.Title?.StartsWith(\"Unhandled Error\") ?? false);\n            Assert.AreEqual(GarbageIn, errorDetails.Detail);\n        }\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithApiV2XmlErrorCode415_Parses()\n        {\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(ApiV2ErrorXml);\n\n            Assert.IsNotNull(errorDetails);\n            Assert.AreEqual(ApiV2ErrorXml, errorDetails.Detail);\n            List<Error> errors = errorDetails.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(1, errors.Count);\n            Error error = errors.First();\n            Assert.AreEqual(415, error.Code);\n            Assert.AreEqual(\"Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings\", error.Message);\n        }\n\n\n        [TestMethod]\n        public void ParseTwitterErrorMessage_WithInvalidRequestError_Parses()\n        {\n            TwitterErrorDetails errorDetails = TwitterErrorHandler.ParseTwitterErrorMessage(BadRequestErrorMessage);\n\n            Assert.IsNotNull(errorDetails);\n            Assert.AreEqual(\"Invalid Request\", errorDetails.Title);\n            Assert.AreEqual(\"One or more parameters to your request was invalid.\", errorDetails.Detail);\n            Assert.AreEqual(\"https://api.twitter.com/2/problems/invalid-request\", errorDetails.Type);\n            Assert.AreEqual(0, errorDetails.Status);\n            List<Error> errors = errorDetails.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(1, errors.Count);\n            Error error = errors[0];\n            Assert.AreEqual(\"This tweet cannot be found.\", error.Message);\n        }\n\n\n        const string AccountLockedErrorJson = @\"{\n\t\"\"title\"\": \"\"Forbidden\"\",\n\t\"\"detail\"\": \"\"Your account is temporarily locked. Please log in to https://twitter.com to unlock your account.\"\",\n\t\"\"type\"\": \"\"about:blank\"\",\n\t\"\"status\"\": 403\n}\";\n\n        const string BadRequestErrorMessage = @\"{\n    \"\"errors\"\":[\n        {\n            \"\"message\"\":\"\"This tweet cannot be found.\"\"\n        }],\n    \"\"title\"\":\"\"Invalid Request\"\",\n    \"\"detail\"\":\"\"One or more parameters to your request was invalid.\"\",\n    \"\"type\"\":\"\"https://api.twitter.com/2/problems/invalid-request\"\"\n}\";\n\n        const string ApiV1ErrorJson = @\"{\n\t\"\"errors\"\": [\n\t\t{\n\t\t\t\"\"code\"\": 144,\n\t\t\t\"\"message\"\": \"\"No status found with that ID.\"\"\n\t\t}\n\t]\n}\";\n\n        const string ApiV2ErrorJson = @\"{\n\t\"\"errors\"\": [\n\t\t{\n\t\t\t\"\"parameters\"\": {\n\t\t\t\t\"\"query\"\": []\n    },\n\t\t\t\"\"message\"\": \"\"Request parameter `query` can not be empty\"\"\n\t\t},\n\t\t{\n    \"\"parameters\"\": {\n        \"\"q\"\": [\n\n                    \"\"LINQ%20to%20Twitter\"\"\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"message\"\": \"\"[q] is not one of [query,start_time,end_time,since_id,until_id,max_results,next_token,expansions,tweet.fields,media.fields,poll.fields,place.fields,user.fields]\"\"\n\n        }\n\t],\n\t\"\"title\"\": \"\"Invalid Request\"\",\n\t\"\"detail\"\": \"\"One or more parameters to your request was invalid.\"\",\n\t\"\"type\"\": \"\"https://api.twitter.com/labs/2/problems/invalid-request\"\"\n}\";\n\n        const string MediaErrorJson = @\"{\n\t\"\"request\"\": \"\"/1.1/media/metadata/create.json\"\",\n\t\"\"error\"\": \"\"media_id field must be provided.\"\"\n}\";\n\n        const string ApiV2ErrorXml = @\"<?xml version='1.0' encoding='UTF-8'?>\n<errors>\n    <error code=\"\"415\"\">Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings</error>\n</errors>\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/OAuth/OAuth2AuthorizerTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace LinqToTwitter.Tests.OAuth\n{\n    [TestClass]\n    public class OAuth2AuthorizerTests\n    {\n        OAuth2Authorizer auth;\n\n        [TestInitialize]\n        public void Init()\n        {\n            auth = new OAuth2Authorizer();\n        }\n\n        [TestMethod]\n        public void GenerateCodeChallenge_ReturnsValuesGreaterThanOrEqualTo44()\n        {\n            string codeChallenge = auth.GenerateCodeChallenge();\n            Assert.IsTrue(codeChallenge.Length >= 44);\n        }\n\n        [TestMethod]\n        public void GenerateCodeChallenge_ReturnsValuesLessThanOrEqualTo127()\n        {\n            string codeChallenge = auth.GenerateCodeChallenge();\n            Assert.IsTrue(codeChallenge.Length <= 127);\n        }\n\n        [TestMethod]\n        public void GenerateCodeChallenge_ReturnsAlphabeticCharacters()\n        {\n            string codeChallenge = auth.GenerateCodeChallenge();\n\n            foreach (var ch in codeChallenge)\n                Assert.IsTrue(OAuth2Authorizer.ValidCharacters.Contains(ch));\n        }\n\n        [TestMethod]\n        public void PrepareAuthorizeUrl_WithAllInputs_BuildsUrl()\n        {\n            const string State = \"state\";\n\n            auth.CredentialStore =\n                new OAuth2CredentialStore\n                {\n                    ClientID = \"MyClientID\",\n                    ClientSecret = \"MyClientSecret\",\n                    Scopes = new List<string>\n                    {\n                        \"tweet.read\", \"users.read\", \"account.follows.read\", \"account.follows.write\"\n                    },\n                    RedirectUri = \"https://www.example.com\"\n                };\n\n            string authUrl = auth.PrepareAuthorizeUrl(State);\n\n            string[] parts = authUrl.Split('?');\n\n            Dictionary<string, string> queryParms = null;\n            if (parts.Length == 2)\n                queryParms =\n                    (from parm in parts[1].Split('&')\n                     select parm.Split('='))\n                    .ToDictionary(key => key[0], val => val[1]);\n\n            Assert.IsNotNull(queryParms);\n            Assert.AreEqual(\"code\", queryParms[\"response_type\"]);\n            Assert.AreEqual(\"MyClientID\", queryParms[\"client_id\"]);\n            Assert.AreEqual(\"https://www.example.com\", queryParms[\"redirect_uri\"]);\n            Assert.AreEqual(\"tweet.read users.read account.follows.read account.follows.write\", queryParms[\"scope\"]);\n            Assert.AreEqual(State, queryParms[\"state\"]);\n            Assert.AreEqual(\"S256\", queryParms[\"code_challenge_method\"]);\n            Assert.IsTrue(queryParms[\"code_challenge\"].Length > 16);\n        }\n\n        [TestMethod]\n        public void PrepareTokenParams_WithAllInputs_ReturnsParamString()\n        {\n            const string CodeFromTwitterAuthorize = \"MyCode\";\n            const string ExpectedParams = \n                \"code=MyCode&\" +\n                \"grant_type=authorization_code&\" +\n                \"client_id=My Client ID&\" +\n                \"redirect_uri=https://www.example.com&\" +\n                \"code_verifier=challenge\";\n\n            auth.CredentialStore =\n                new OAuth2CredentialStore\n                {\n                    ClientID = \"My Client ID\",\n                    ClientSecret = \"MyClientSecret\",\n                    Scopes = new List<string>\n                    {\n                        \"tweet.read\", \"users.read\", \"account.follows.read\", \"account.follows.write\"\n                    },\n                    RedirectUri = \"https://www.example.com\",\n                    CodeChallenge = \"challenge\"\n                };\n\n            string queryParms = auth.PrepareAccessTokenParams(CodeFromTwitterAuthorize);\n\n            Assert.IsNotNull(queryParms);\n            Assert.AreEqual(ExpectedParams, queryParms);\n        }\n\n        [TestMethod]\n        public void ParseRedirectResponse_WithGetParams_ParsesParams()\n        {\n            const string Response = @\"GET /?state=zdso8cyW9aMoWE2Zs.20vx_f2KEcKtPAT2qQyzQmo3GzsrdWrkqfbD1BfNzxXWLQKLViblp7uPM5rM0KvwynCyn&code=OWIwZDZ5UUR1R3VsQ0FLX3Y1YURKZVdQRFJzdG1TcjM5aUd4NkQyQ3ZwbkhIOjE2NDMyNTEwNDQwOTU6MToxOmFjOjE HTTP/1.1\nHost: 127.0.0.1:8599\nConnection: keep-alive\nsec-ch-ua: \"\" Not; A Brand\"\";v=\"\"99\"\", \"\"Microsoft Edge\"\";v=\"\"97\"\", \"\"Chromium\"\";v=\"\"97\"\"\nsec - ch - ua - mobile: ?0\nsec - ch - ua - platform: \"\"Windows\"\"\nUpgrade - Insecure - Requests: 1\nDNT: 1\nUser - Agent: Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 97.0.4692.99 Safari / 537.36 Edg / 97.0.1072.69\nAccept: text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp,image / apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\nSec-Fetch-Site: cross-site\nSec-Fetch-Mode: navigate\nSec-Fetch-User: ?1\nSec-Fetch-Dest: document\nAccept-Encoding: gzip, deflate, br\nAccept-Language: en-US,en;q=0.9\nCookie: ai_user=YwWs2|2022-01-17T06:01:24.226Z\n\n\";\n\n            (string code, string state) = auth.ParseRedirectResponse(Response);\n\n            Assert.AreEqual(\"OWIwZDZ5UUR1R3VsQ0FLX3Y1YURKZVdQRFJzdG1TcjM5aUd4NkQyQ3ZwbkhIOjE2NDMyNTEwNDQwOTU6MToxOmFjOjE\", code);\n            Assert.AreEqual(\"zdso8cyW9aMoWE2Zs.20vx_f2KEcKtPAT2qQyzQmo3GzsrdWrkqfbD1BfNzxXWLQKLViblp7uPM5rM0KvwynCyn\", state);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/OAuth/OAuth2CredentialStoreTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.OAuth\n{\n    [TestClass]\n    public class OAuth2CredentialStoreTests\n    {\n        OAuth2CredentialStore credStore;\n\n        [TestInitialize]\n        public void Init()\n        {\n            credStore = new OAuth2CredentialStore()\n            {\n                AccessToken = \"123\",\n                ClientID = \"456\",\n                ClientSecret = \"789\",\n                CodeChallenge = \"012\",\n                RedirectUri = \"345\",\n                RefreshToken = \"123\",\n                Scopes = new List<string>(),\n                State = \"678\",\n            };\n        }\n\n        [TestMethod]\n        public async Task GenerateCodeChallenge_ReturnsValuesGreaterThanOrEqualTo44()\n        {\n            await credStore.ClearAsync();\n\n            Assert.IsNull(credStore.AccessToken);\n            Assert.IsNull(credStore.ClientID);\n            Assert.IsNull(credStore.ClientSecret);\n            Assert.IsNull(credStore.CodeChallenge);\n            Assert.IsNull(credStore.RedirectUri);\n            Assert.IsNull(credStore.RefreshToken);\n            Assert.IsNull(credStore.Scopes);\n            Assert.IsNull(credStore.State);\n        }\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/RawTests/RawCommandsTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Threading;\nusing System.Net.Http;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.OAuth;\n\nnamespace LinqToTwitter.Tests.RawTests\n{\n    [TestClass]\n    public class RawCommandsTests\n    {\n        TwitterContext ctx;\n        Mock<ITwitterExecute> execMock;\n\n        public RawCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        void InitializeTwitterContext()\n        {\n            var authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(EmptyRawResponse);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            ctx = new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public void RawRequestProcessor_WorksWithActions()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            Assert.IsInstanceOfType(rawReqProc, typeof(IRequestProcessorWithAction<Raw>));\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawAsync_InvokesPostFormUrlEncodedToTwitterAsync()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/statuses/update.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawAsync_WithRawResultProperty_Succeeds()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryString, parameters, HttpMethod.Post);\n\n            Assert.AreEqual(EmptyRawResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_ReturnsRawResult()\n        {\n            InitializeTwitterContext();\n            const string QueryString = \"statuses/update.json\";\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n            const string ExpectedResult = \"<status>xxx</status>\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(ExpectedResult);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<Raw>(HttpMethod.Post.ToString(), FullUrl, parameters, It.IsAny<CancellationToken>())).Returns(tcsResponse.Task);\n\n            string actualResult = await ctx.ExecuteRawAsync(QueryString, parameters);\n\n            Assert.AreEqual(ExpectedResult, actualResult);\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_WithTooManyUrlSlashes_StillWorks()\n        {\n            const string QueryStringWithBeginningSlash = \"/statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryStringWithBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    HttpMethod.Post.ToString(),\n                    FullUrl,\n                    parameters,\n                    It.IsAny<CancellationToken>()), Times.Once());\n        }\n\n        [TestMethod]\n        public async Task ExecuteRawRequest_WithTooFewUrlSlashes_StillWorks()\n        {\n            const string QueryStringWithoutBeginningSlash = \"statuses/update.json\";\n            const string FullUrl = \"https://api.twitter.com/1.1/statuses/update.json\";\n            InitializeTwitterContext();\n            var parameters = new Dictionary<string, string>\n            {\n                { \"status\", \"Testing\" }\n            };\n\n            await ctx.ExecuteRawAsync(QueryStringWithoutBeginningSlash, parameters);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<Raw>(\n                    HttpMethod.Post.ToString(),\n                    FullUrl,\n                    parameters,\n                    It.IsAny<CancellationToken>()), Times.Once());\n        }\n\n        const string EmptyRawResponse = \"{}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/RawTests/RawRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.RawTests\n{\n    [TestClass]\n    public class RawRequestProcessorTests\n    {\n        public RawRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_ReturnsParameters()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n            Expression<Func<Raw, bool>> expression =\n                raw =>\n                    raw.QueryString == \"/statuses/public_timeline.json\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = rawReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Raw.QueryString), \"/statuses/public_timeline.json\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_ReturnsFullUrl()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n             {\n                 {nameof(Raw.QueryString), \"statuses/public_timeline.json\"},\n             };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullQueryString_Throws()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                //{nameof(Raw.QueryString), \"statuses/public_timeline.json\"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentNullException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"QueryString\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithBlankQueryString_Throws()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                {nameof(Raw.QueryString), \" \"},\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => rawReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"QueryString\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithExtraSlashBetweenBaseUrlAndQueryString_StillWorks()\n        {\n            string baseUrlWithTrailingSlash = \"https://api.twitter.com/1.1/\";\n            string queryStringWithPrecedingSlash = \"/statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {nameof(Raw.QueryString), queryStringWithPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNoSlashBetweenBaseUrlAndQueryString_StillWorks()\n        {\n            string baseUrlWithoutTrailingSlash = \"https://api.twitter.com/1.1\";\n            string queryStringWithoutPrecedingSlash = \"statuses/public_timeline.json\";\n\n            var rawReqProc = new RawRequestProcessor<Raw> { BaseUrl = baseUrlWithoutTrailingSlash };\n            var parameters = new Dictionary<string, string>\n            {\n                {nameof(Raw.QueryString), queryStringWithoutPrecedingSlash},\n            };\n            string expected = \"https://api.twitter.com/1.1/statuses/public_timeline.json\";\n\n            Request req = rawReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessIDResultsTest()\n        {\n            var rawReqProc = new RawRequestProcessor<Raw>();\n\n            List<Raw> result = rawReqProc.ProcessResults(QueryResponse);\n\n            Assert.AreEqual(QueryResponse, result.First().Response);\n        }\n\n        const string QueryResponse = @\"<statuses type=\"\"array\"\">\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906745</id>\n    <text>ah,vou lá comer</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>77880019</id>\n      <name>caah </name>\n      <screen_name>caahbuss</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/440024240/d_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>48</followers_count>\n      <profile_background_color>131516</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>009999</profile_link_color>\n      <profile_sidebar_fill_color>efefef</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>eeeeee</profile_sidebar_border_color>\n      <friends_count>47</friends_count>\n      <created_at>Mon Sep 28 00:47:48 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme14/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>211</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906740</id>\n    <text>É só ir no site e participar... http://tinyurl.com/ygvepg5</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>76732695</id>\n      <name>Embarque Imediato</name>\n      <screen_name>EmbarqueNoFilme</screen_name>\n      <location></location>\n      <description>Twitter oficial do filme Embarque Imediato autorizado pela Europa Filmes.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/473272502/poster_embarque_imediato_rostoatores_2_normal.jpg</profile_image_url>\n      <url>http://embarqueimediatoofilme.blogspot.com/</url>\n      <protected>false</protected>\n      <followers_count>401</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>381</friends_count>\n      <created_at>Wed Sep 23 19:33:49 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-14400</utc_offset>\n      <time_zone>Santiago</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/45672389/twitter08.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>224</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906722</id>\n    <text>Se pá, ir em aniversário rico, onde deve haver muitas etiquetas, e eu odeio, pois gosto de aniversário de pobre onde é churras de havaiana</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>55657026</id>\n      <name>bee</name>\n      <screen_name>beemk</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/463563734/Imagem_004_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>76</followers_count>\n      <profile_background_color>1A1B1F</profile_background_color>\n      <profile_text_color>666666</profile_text_color>\n      <profile_link_color>2FC2EF</profile_link_color>\n      <profile_sidebar_fill_color>252429</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>181A1E</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Jul 10 20:34:52 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme9/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>819</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906718</id>\n    <text>@BruBloinski é... digamos que de tradicional só os mesmos shows horríveis de sempre. só.</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118865157</in_reply_to_status_id>\n    <in_reply_to_user_id>60946427</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>BruBloinski</in_reply_to_screen_name>\n    <user>\n      <id>16219715</id>\n      <name>wickybr</name>\n      <screen_name>wickybr</screen_name>\n      <location></location>\n      <description>25 anos, publicidade, cerveja Original. Blogueiro, curioso, as vezes nervoso, nem sempre calmo. Leitor, afinador e desajeitador.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/287234140/fbranco_copy_normal.jpg</profile_image_url>\n      <url>http://www.wickybr.blogspot.com</url>\n      <protected>false</protected>\n      <followers_count>41</followers_count>\n      <profile_background_color>642D8B</profile_background_color>\n      <profile_text_color>3D1957</profile_text_color>\n      <profile_link_color>FF0000</profile_link_color>\n      <profile_sidebar_fill_color>7AC3EE</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>65B0DA</profile_sidebar_border_color>\n      <friends_count>59</friends_count>\n      <created_at>Wed Sep 10 11:58:16 +0000 2008</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/28744035/base-back-twitter2.jpg</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>586</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906715</id>\n    <text>Завтра \"\"Саломея\"\" Виктюка ^^</text>\n    <source>&lt;a href=\"\"http://www.tweetdeck.com/\"\" rel=\"\"nofollow\"\"&gt;TweetDeck&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>45792079</id>\n      <name>Нестерова Валерия</name>\n      <screen_name>Valeriya22</screen_name>\n      <location>Russia, Kazan</location>\n      <description>Sunshine Cowboy</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/511281997/IMG_6486-_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>30</followers_count>\n      <profile_background_color>9AE4E8</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n      <friends_count>31</friends_count>\n      <created_at>Tue Jun 09 07:59:17 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/17289836/22334353_lll01.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>241</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906713</id>\n    <text>Diferente C S!</text>\n    <source>&lt;a href=\"\"http://www.myspace.com/sync\"\" rel=\"\"nofollow\"\"&gt;MySpace&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>83531026</id>\n      <name>Abraham</name>\n      <screen_name>yosoeelabraham</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/479193636/bleach_chad0005_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>0</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>0</friends_count>\n      <created_at>Mon Oct 19 05:38:34 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906712</id>\n    <text>@REL407 you sound like a Disney original! I was scared for the entire summer!!!! Smdh</text>\n    <source>&lt;a href=\"\"http://ubertwitter.com\"\" rel=\"\"nofollow\"\"&gt;UberTwitter&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118659350</in_reply_to_status_id>\n    <in_reply_to_user_id>33132386</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>REL407</in_reply_to_screen_name>\n    <user>\n      <id>91234221</id>\n      <name>Calesha Thompson</name>\n      <screen_name>missKILLAmouse</screen_name>\n      <location>ÜT: 39.739345,-104.97695</location>\n      <description>La plus belle. KILLA. Never change</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/544207431/135152_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>13</followers_count>\n      <profile_background_color>030303</profile_background_color>\n      <profile_text_color>8c878c</profile_text_color>\n      <profile_link_color>e30417</profile_link_color>\n      <profile_sidebar_fill_color>393f42</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>050505</profile_sidebar_border_color>\n      <friends_count>18</friends_count>\n      <created_at>Fri Nov 20 00:53:08 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Eastern Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/56030928/killainstincts.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>108</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906709</id>\n    <text>45 I use http://x2t.com/6145 to get 100 followers a day. It work great</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>50541031</id>\n      <name>oaiden;</name>\n      <screen_name>helloaiden17</screen_name>\n      <location>Philadelphia</location>\n      <description>by the looks of my twitter picture, you can call me Lindsey Lohan.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/533420177/151033_normal.jpg</profile_image_url>\n      <url>http://www.myspace.com/omgaiden</url>\n      <protected>false</protected>\n      <followers_count>92</followers_count>\n      <profile_background_color>fa3483</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>fa3483</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>202</friends_count>\n      <created_at>Thu Jun 25 03:45:43 +0000 2009</created_at>\n      <favourites_count>4</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/54654224/1111111111.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>706</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906708</id>\n    <text>Police parked outside my house #ilovemyneighbourhood</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>23310378</id>\n      <name>Natalie Dye</name>\n      <screen_name>natalie_xo</screen_name>\n      <location>Yorkshire, its a state of mind</location>\n      <description>Listen to the sound of the world then watch it turn.</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/525311356/Snapshot_20091026_10_normal.jpg</profile_image_url>\n      <url>http://www.facebook.com/natalie0x</url>\n      <protected>false</protected>\n      <followers_count>102</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>4597d6</profile_link_color>\n      <profile_sidebar_fill_color>2b3575</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>93</friends_count>\n      <created_at>Sun Mar 08 14:05:12 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/55410721/Desktop_Background.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>1794</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906705</id>\n    <text>@robertabachert ta eu vo tenta adiantar algumas coisas mais eu preciso das fotos</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118781972</in_reply_to_status_id>\n    <in_reply_to_user_id>61624985</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>robertabachert</in_reply_to_screen_name>\n    <user>\n      <id>61279770</id>\n      <name>Patrícia Ferrari</name>\n      <screen_name>PatyFerrariC</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/534284147/patttttttty_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>35</followers_count>\n      <profile_background_color>000000</profile_background_color>\n      <profile_text_color>050505</profile_text_color>\n      <profile_link_color>4978d6</profile_link_color>\n      <profile_sidebar_fill_color>ffffff</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>090a0a</profile_sidebar_border_color>\n      <friends_count>51</friends_count>\n      <created_at>Wed Jul 29 19:53:07 +0000 2009</created_at>\n      <favourites_count>6</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/26221650/16587349.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>518</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906704</id>\n    <text>RT @ALuizCosta: Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <retweeted_status>\n      <created_at>Fri Nov 27 12:31:15 +0000 2009</created_at>\n      <id>6110610973</id>\n      <text>Robert Fisk comenta o nada profissional calote de Dubai e suas relações com Abu Dhabi e Índia http://is.gd/54CEg</text>\n      <source>web</source>\n      <truncated>false</truncated>\n      <in_reply_to_status_id></in_reply_to_status_id>\n      <in_reply_to_user_id></in_reply_to_user_id>\n      <favorited>false</favorited>\n      <in_reply_to_screen_name></in_reply_to_screen_name>\n      <user>\n        <id>67778641</id>\n        <name>AntonioLuiz MCCosta</name>\n        <screen_name>ALuizCosta</screen_name>\n        <location>São Paulo, Brasil</location>\n        <description>Antonio Luiz escreve na revista CartaCapital e gosta de ciência, filosofia e literatura, principalmente fantasia e ficção científica</description>\n        <profile_image_url>http://a3.twimg.com/profile_images/375056565/AntonioLuiz_normal.jpg</profile_image_url>\n        <url>http://www.scribd.com/people/documents/3817321-antonio-luiz-monteiro-coelho-da-costa</url>\n        <protected>false</protected>\n        <followers_count>460</followers_count>\n        <profile_background_color>9AE4E8</profile_background_color>\n        <profile_text_color>333333</profile_text_color>\n        <profile_link_color>b30000</profile_link_color>\n        <profile_sidebar_fill_color>DDFFCC</profile_sidebar_fill_color>\n        <profile_sidebar_border_color>BDDCAD</profile_sidebar_border_color>\n        <friends_count>44</friends_count>\n        <created_at>Sat Aug 22 01:31:02 +0000 2009</created_at>\n        <favourites_count>0</favourites_count>\n        <utc_offset>-10800</utc_offset>\n        <time_zone>Brasilia</time_zone>\n        <profile_background_image_url>http://a1.twimg.com/profile_background_images/31703608/celebraohf2.jpg</profile_background_image_url>\n        <profile_background_tile>true</profile_background_tile>\n        <statuses_count>1427</statuses_count>\n        <notifications>false</notifications>\n        <geo_enabled>false</geo_enabled>\n        <verified>false</verified>\n        <following>false</following>\n      </user>\n      <geo />\n    </retweeted_status>\n    <user>\n      <id>77265167</id>\n      <name>SL da Silva</name>\n      <screen_name>sergio_virtual</screen_name>\n      <location></location>\n      <description>Um brasileiro no mundo do Twitter!</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/460588539/DSC00180_normal.JPG</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>20</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>36</friends_count>\n      <created_at>Fri Sep 25 17:31:11 +0000 2009</created_at>\n      <favourites_count>1</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Brasilia</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>514</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906701</id>\n    <text>@No1SassyGrl anywhere! I have to take vacay bc I have too many hours accrued at work and I want to travel!</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6113853732</in_reply_to_status_id>\n    <in_reply_to_user_id>14408045</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>No1SassyGrl</in_reply_to_screen_name>\n    <user>\n      <id>9408302</id>\n      <name>Ian Mone</name>\n      <screen_name>x5455</screen_name>\n      <location>Puerto Rico</location>\n      <description>Intelligent, laid back, addicted to videogames, X-Men and TV. Hopelessly romantic and hoping for a nice boy to spend time with</description>\n      <profile_image_url>http://a1.twimg.com/profile_images/84361594/icon_twitter_normal.jpg</profile_image_url>\n      <url>http://x5455.livejournal.com</url>\n      <protected>false</protected>\n      <followers_count>75</followers_count>\n      <profile_background_color>8B542B</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>9D582E</profile_link_color>\n      <profile_sidebar_fill_color>EADEAA</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>D9B17E</profile_sidebar_border_color>\n      <friends_count>38</friends_count>\n      <created_at>Fri Oct 12 18:26:24 +0000 2007</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme8/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1194</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906696</id>\n    <text>@nickjonas amor! te hiciste el twitter! jaja el otro día me lo habías dicho XD ahora unite al @teamfasofachero</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>56783491</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>nickjonas</in_reply_to_screen_name>\n    <user>\n      <id>37250104</id>\n      <name>Milagros C.</name>\n      <screen_name>militaaa</screen_name>\n      <location>Buenos Aires, Argentina</location>\n      <description>This is my crazy world... I'm just being milita. I hope you like my antics and madness, because that's me :)  </description>\n      <profile_image_url>http://a3.twimg.com/profile_images/532032207/P1050370_-_copia_normal.JPG</profile_image_url>\n      <url>http://www.facebook.com/profile.php?id=1010395037&amp;ref=name</url>\n      <protected>false</protected>\n      <followers_count>204</followers_count>\n      <profile_background_color>050505</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>746278</profile_link_color>\n      <profile_sidebar_fill_color>ff088c</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>d1bcbc</profile_sidebar_border_color>\n      <friends_count>300</friends_count>\n      <created_at>Sat May 02 18:17:02 +0000 2009</created_at>\n      <favourites_count>21</favourites_count>\n      <utc_offset>-10800</utc_offset>\n      <time_zone>Buenos Aires</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/54044533/Teen_Vogue_Collage_by_bob55_JOE.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>6718</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906693</id>\n    <text>@MrPeterAndre its really good of u to set the record straight on that coz every1 believes everything they read abwt katie n its not fair!x</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6106899259</in_reply_to_status_id>\n    <in_reply_to_user_id>24086418</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>MrPeterAndre</in_reply_to_screen_name>\n    <user>\n      <id>54843229</id>\n      <name>ashleigh berry</name>\n      <screen_name>missashleigh19</screen_name>\n      <location>bradford</location>\n      <description>waaasssssup :) mobile beauty therapist from bradford, probably should say leeds but that would be lying haha follow me :)</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/503338157/halloween_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>7</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>362720</profile_text_color>\n      <profile_link_color>B40B43</profile_link_color>\n      <profile_sidebar_fill_color>E5507E</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>CC3366</profile_sidebar_border_color>\n      <friends_count>16</friends_count>\n      <created_at>Wed Jul 08 08:56:21 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme11/bg.gif</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>49</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906692</id>\n    <text>RT @ArmsLikeYours Chain Reaction with a Skylit Drive Next Friday!!!</text>\n    <source>&lt;a href=\"\"http://m.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;mobile web&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>18696988</id>\n      <name>Faith Sugarhigh</name>\n      <screen_name>Miss_Sugarhigh</screen_name>\n      <location>Texas</location>\n      <description>I'm a ProMoTeR/Booking Agent. I love helping bands/artists/Concerts &amp; events that inspire/change the scene. I support Skate4Cancer.</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/367961955/pink_pink_003_normal.JPG</profile_image_url>\n      <url>http://www.myspace.com/miss_sugarhigh</url>\n      <protected>false</protected>\n      <followers_count>1172</followers_count>\n      <profile_background_color>FF6699</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>373799</profile_link_color>\n      <profile_sidebar_fill_color>ff3892</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>000000</profile_sidebar_border_color>\n      <friends_count>822</friends_count>\n      <created_at>Tue Jan 06 21:42:00 +0000 2009</created_at>\n      <favourites_count>3</favourites_count>\n      <utc_offset>-21600</utc_offset>\n      <time_zone>Central Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://a3.twimg.com/profile_background_images/30568555/btf_witness_cover400x400.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>11612</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906683</id>\n    <text>64 Heyy I just got alot of followers using http://ohurl.com/0G .</text>\n    <source>&lt;a href=\"\"http://apiwiki.twitter.com/\"\" rel=\"\"nofollow\"\"&gt;API&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>61754026</id>\n      <name>Samien</name>\n      <screen_name>Samien501</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://s.twimg.com/a/1259091217/images/default_profile_5_normal.png</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>382</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>1071</friends_count>\n      <created_at>Fri Jul 31 11:52:27 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset></utc_offset>\n      <time_zone></time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>208</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906674</id>\n    <text>@JohnCarnell Thanks for the blog post, looking forward to getting you a proper write up. Have yourself a good evening : )</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id>39247092</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>JohnCarnell</in_reply_to_screen_name>\n    <user>\n      <id>29426018</id>\n      <name>David Wood</name>\n      <screen_name>BigDaveSB</screen_name>\n      <location>Gloucester</location>\n      <description>I’m a serial fundraising; capoeira playing; science loving; hat wearing; skeptically enquiring geek</description>\n      <profile_image_url>http://a3.twimg.com/profile_images/359441931/twitterProfilePhoto_normal.jpg</profile_image_url>\n      <url>http://justgiving.com/melonandbigdave</url>\n      <protected>false</protected>\n      <followers_count>177</followers_count>\n      <profile_background_color>9ae4e8</profile_background_color>\n      <profile_text_color>000000</profile_text_color>\n      <profile_link_color>0000ff</profile_link_color>\n      <profile_sidebar_fill_color>e0ff92</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>87bc44</profile_sidebar_border_color>\n      <friends_count>161</friends_count>\n      <created_at>Tue Apr 07 11:02:36 +0000 2009</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>0</utc_offset>\n      <time_zone>London</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme1/bg.png</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1335</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906673</id>\n    <text>I think it's possible my characters laugh and smile too much. Not that I need to be thinking about such things since I just need to write!</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>14297876</id>\n      <name>Misty Baird</name>\n      <screen_name>Langwidere</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a3.twimg.com/profile_images/66698519/Photo_80_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>47</followers_count>\n      <profile_background_color>0099B9</profile_background_color>\n      <profile_text_color>3C3940</profile_text_color>\n      <profile_link_color>0099B9</profile_link_color>\n      <profile_sidebar_fill_color>95E8EC</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>5ED4DC</profile_sidebar_border_color>\n      <friends_count>56</friends_count>\n      <created_at>Thu Apr 03 23:38:48 +0000 2008</created_at>\n      <favourites_count>0</favourites_count>\n      <utc_offset>-25200</utc_offset>\n      <time_zone>Mountain Time (US &amp; Canada)</time_zone>\n      <profile_background_image_url>http://s.twimg.com/a/1259091217/images/themes/theme4/bg.gif</profile_background_image_url>\n      <profile_background_tile>false</profile_background_tile>\n      <statuses_count>1907</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906670</id>\n    <text>@bpradolovers eu nem ligo pra essas coisas de responder e pa.. pra MIM eles sao os msm desde SEMPRE e vo continuar amando eles me*</text>\n    <source>web</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id>6118810923</in_reply_to_status_id>\n    <in_reply_to_user_id>74561853</in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name>bpradolovers</in_reply_to_screen_name>\n    <user>\n      <id>48044595</id>\n      <name>Marie Rochebois !</name>\n      <screen_name>marie_vr</screen_name>\n      <location></location>\n      <description></description>\n      <profile_image_url>http://a1.twimg.com/profile_images/541774726/Picture_066_normal.jpg</profile_image_url>\n      <url>http://www.orkut.com.br/Main#Profile?uid=8665293908869110209&amp;rl=t</url>\n      <protected>false</protected>\n      <followers_count>239</followers_count>\n      <profile_background_color>eb1717</profile_background_color>\n      <profile_text_color>1f1f1d</profile_text_color>\n      <profile_link_color>f01fe9</profile_link_color>\n      <profile_sidebar_fill_color>8838bd</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>fc0ad8</profile_sidebar_border_color>\n      <friends_count>160</friends_count>\n      <created_at>Wed Jun 17 17:44:04 +0000 2009</created_at>\n      <favourites_count>85</favourites_count>\n      <utc_offset>-32400</utc_offset>\n      <time_zone>Alaska</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/53871388/caveira-de-diamantes_-amor_dios.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>7664</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n  <status>\n    <created_at>Fri Nov 27 18:28:57 +0000 2009</created_at>\n    <id>6118906667</id>\n    <text>Follow my nigga, my Lil brother @KENNETHVP he keep big shit going on in the M</text>\n    <source>&lt;a href=\"\"http://echofon.com/\"\" rel=\"\"nofollow\"\"&gt;Echofon&lt;/a&gt;</source>\n    <truncated>false</truncated>\n    <in_reply_to_status_id></in_reply_to_status_id>\n    <in_reply_to_user_id></in_reply_to_user_id>\n    <favorited>false</favorited>\n    <in_reply_to_screen_name></in_reply_to_screen_name>\n    <user>\n      <id>30511463</id>\n      <name>Dj Hollywood Oompa </name>\n      <screen_name>HollywoodOompa</screen_name>\n      <location></location>\n      <description>i am a cool ass person. i am a DJ and i am an entertainer. i dont keep drama around me, and i am a hard worker hell im working now </description>\n      <profile_image_url>http://a1.twimg.com/profile_images/540923604/16644_568873017318_56703609_33197738_592021_n_normal.jpg</profile_image_url>\n      <url></url>\n      <protected>false</protected>\n      <followers_count>278</followers_count>\n      <profile_background_color>C0DEED</profile_background_color>\n      <profile_text_color>333333</profile_text_color>\n      <profile_link_color>0084B4</profile_link_color>\n      <profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color>\n      <profile_sidebar_border_color>C0DEED</profile_sidebar_border_color>\n      <friends_count>81</friends_count>\n      <created_at>Sat Apr 11 19:55:17 +0000 2009</created_at>\n      <favourites_count>2</favourites_count>\n      <utc_offset>-18000</utc_offset>\n      <time_zone>Quito</time_zone>\n      <profile_background_image_url>http://a1.twimg.com/profile_background_images/55606030/mix.jpg</profile_background_image_url>\n      <profile_background_tile>true</profile_background_tile>\n      <statuses_count>457</statuses_count>\n      <notifications>false</notifications>\n      <geo_enabled>false</geo_enabled>\n      <verified>false</verified>\n      <following>false</following>\n    </user>\n    <geo />\n  </status>\n</statuses>\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/SavedSearchTests/SavedSearchCommandsTests.cs",
    "content": "﻿using LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.SavedSearchTests\n{\n    [TestClass]\n    public class SavedSearchCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public SavedSearchCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitializeTwitterContextMock()\n        {\n            authMock = new Mock<IAuthorizer>();\n            execMock = new Mock<ITwitterExecute>();\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public void SavedSearchRequestProcessor_Handles_Actions()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsInstanceOfType(searchReqProc, typeof(IRequestProcessorWithAction<SavedSearch>));\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_Throws_On_Missing_Query()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.CreateSavedSearchAsync(null));\n\n            Assert.AreEqual(\"query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_Invokes_Executor_Execute()\n        {\n            const string Query = \"#LinqToTwitter\";\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var parameters = new Dictionary<string, string>\n            {\n                { \"query\", Query }\n            };\n\n            SavedSearch search = await ctx.CreateSavedSearchAsync(\"#LinqToTwitter\");\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/saved_searches/create.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(search);\n            Assert.AreEqual(Query, search.Name);\n            Assert.AreEqual(Query, search.Query);\n        }\n\n        [TestMethod]\n        public async Task CreateSavedSearchAsync_WithRawResult_Succeeds()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            await ctx.CreateSavedSearchAsync(\"#LinqToTwitter\");\n\n            Assert.AreEqual(SavedSearchResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearch_Throws_On_Invalid_ID()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DestroySavedSearchAsync(0));\n\n            Assert.AreEqual(\"id\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearchAsync_Invokes_Executor_Execute()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var parameters = new Dictionary<string, string>();\n\n            SavedSearch search = await ctx.DestroySavedSearchAsync(123);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/saved_searches/destroy/123.json\",\n                    parameters,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(123ul, search.ID);\n        }\n\n        [TestMethod]\n        public async Task DestroySavedSearchAsync_WithRawResult_Succeeds()\n        {\n            TwitterContext ctx = InitializeTwitterContextMock();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(SavedSearchResponse);\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<SavedSearch>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n\n            await ctx.DestroySavedSearchAsync(123);\n\n            Assert.AreEqual(SavedSearchResponse, ctx.RawResult);\n        }\n\n        const string SavedSearchResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/SavedSearchTests/SavedSearchRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.SavedSearchTests\n{\n    [TestClass]\n    public class SavedSearchRequestProcessorTests\n    {\n        public SavedSearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void SavedSearchRequestProcessor_Works_On_Json_Format_Data()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            Assert.IsInstanceOfType(searchReqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Searches_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Searches };\n\n            var searches = searchReqProc.ProcessResults(SearchesResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.AreEqual(2, searches.Count);\n            var search = searches.First();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Query);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(0, search.Position);\n            Assert.AreEqual(3275867ul, search.IDResponse);\n            Assert.AreEqual(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Show_Response()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { Type = SavedSearchType.Show };\n\n            var searches = searchReqProc.ProcessResults(ShowResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.IsNotNull(searches.SingleOrDefault());\n            var search = searches.Single();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Query);\n            Assert.AreEqual(\"#LinqToTwitter\", search.Name);\n            Assert.AreEqual(0, search.Position);\n            Assert.AreEqual(3275867ul, search.IDResponse);\n            Assert.AreEqual(new DateTime(2009, 12, 18, 4, 17, 24), search.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var reqProc = new SavedSearchRequestProcessor<SavedSearch>();\n\n            var searches = reqProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, searches.Count);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            Expression<Func<SavedSearch, bool>> expression =\n                search =>\n                    search.Type == SavedSearchType.Show &&\n                    search.ID == 123;\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = searchReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SavedSearchType.Show).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"123\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Show_Throws_On_Missing_ID()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Show_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/show/123.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Show.ToString() },\n                { \"ID\", \"123\" }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_SavedSearches_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/saved_searches/list.json\";\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", SavedSearchType.Searches.ToString() }\n            };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameters()\n        {\n            var searchReqProc = new SavedSearchRequestProcessor<SavedSearch>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => searchReqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n\n        const string SearchesResponse = @\"[\n   {\n      \"\"query\"\":\"\"#LinqToTwitter\"\",\n      \"\"name\"\":\"\"#LinqToTwitter\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"3275867\"\",\n      \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n      \"\"id\"\":3275867\n   },\n   {\n      \"\"query\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"name\"\":\"\"\\\"\"Windows 8\\\"\"\"\",\n      \"\"position\"\":null,\n      \"\"id_str\"\":\"\"101035995\"\",\n      \"\"created_at\"\":\"\"Sun Apr 29 04:09:00 +0000 2012\"\",\n      \"\"id\"\":101035995\n   }\n]\";\n\n        const string ShowResponse = @\"{\n   \"\"query\"\":\"\"#LinqToTwitter\"\",\n   \"\"name\"\":\"\"#LinqToTwitter\"\",\n   \"\"position\"\":null,\n   \"\"id_str\"\":\"\"3275867\"\",\n   \"\"created_at\"\":\"\"Fri Dec 18 04:17:24 +0000 2009\"\",\n   \"\"id\"\":3275867\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/SearchTests/SearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Common.Entities;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.SearchTests\n{\n    [TestClass]\n    public class SearchRequestProcessorTests\n    {\n        public SearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new SearchRequestProcessor<Search>();\n            Expression<Func<Search, bool>> expression =\n                search =>\n                    search.Type == SearchType.Search &&\n                    search.GeoCode == \"40.757929,-73.985506,25km\" &&\n                    search.SearchLanguage == \"en\" &&\n                    search.Count == 10 &&\n                    search.Query == \"LINQ to Twitter\" &&\n                    search.SinceID == 123 &&\n                    search.MaxID == 200 &&\n                    search.ResultType == ResultType.Popular &&\n                    search.IncludeEntities == true &&\n                    search.TweetMode == TweetMode.Extended;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)SearchType.Search).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"GeoCode\", \"40.757929,-73.985506,25km\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SearchLanguage\", \"en\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Query\", \"LINQ to Twitter\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"MaxID\", \"200\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ResultType\", ((int)ResultType.Popular).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeEntities\", \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(Search.TweetMode), ((int) TweetMode.Extended).ToString(CultureInfo.InvariantCulture))));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_Parameters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&geocode=40.757929%2C-73.985506%2C25km&lang=en&count=10&until=2011-07-04&since_id=1&result_type=popular&include_entities=false&tweet_mode=extended\";\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"GeoCode\", \"40.757929,-73.985506,25km\" },\n                    { \"SearchLanguage\", \"en\" },\n                    { \"Count\", \"10\" },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"SinceID\", \"1\" },\n                    { \"Until\", new DateTime(2011, 7, 4).ToString() },\n                    { \"ResultType\", ResultType.Popular.ToString() },\n                    { \"IncludeEntities\", false.ToString() },\n                    { nameof(Search.TweetMode), ((int)TweetMode.Extended).ToString() }\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&geocode=40.757929%2C-73.985506%2C25km&lang=en&count=10&until=2011-07-04&since_id=1&result_type=popular&include_entities=false&tweet_mode=extended\";\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"GeoCode\", \"40.757929,-73.985506,25km\" },\n                    { \"SearchLanguage\", \"en\" },\n                    { \"Count\", \"10\" },\n                    { \"Query\", \"LINQ to Twitter\" },\n                    { \"SinceID\", \"1\" },\n                    { \"Until\", new DateTime(2011, 7, 4).ToString() },\n                    { \"ResultType\", ResultType.Popular.ToString() },\n                    { \"IncludeEntities\", false.ToString() },\n                    { nameof(Search.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Parameters_Null()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                searchReqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_Encodes_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            string expected = searchReqProc.BaseUrl + \"search/tweets.json?q=Contains%20Space\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"Contains Space\" }\n                };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_Query()\n        {\n            var searchReqProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentNullException>(() =>\n                    searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Adds_True_IncludeEntities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/search/tweets.json?q=LINQ%20to%20Twitter&include_entities=true\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", SearchType.Search.ToString() },\n                    { \"Query\", \"LINQ to Twitter\"},\n                    { \"IncludeEntities\", true.ToString() }\n                };\n\n            Request req = searchProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Creates_List_Of_Status()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results.First().Statuses);\n            Assert.IsTrue(results.First().Statuses.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_CreatedAt()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(\n                new DateTimeOffset(2012, 9, 6, 0, 10, 12, new TimeSpan(0, 0, 0)), \n                results.First().Statuses.First().CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Instantiates_Entities()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results.First().Statuses.First().Entities);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Urls()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UrlEntity> urls = results.First().Statuses.First().Entities.UrlEntities;\n            Assert.IsNotNull(urls);\n            Assert.AreEqual(1, urls.Count);\n            UrlEntity firstUrl = urls.First();\n            Assert.AreEqual(\"http://t.co/Cc85Yzpj\", firstUrl.Url);\n            Assert.AreEqual(\"http://bit.ly/PSOVso\", firstUrl.ExpandedUrl);\n            Assert.AreEqual(\"bit.ly/PSOVso\", firstUrl.DisplayUrl);\n            Assert.AreEqual(68, firstUrl.Start);\n            Assert.AreEqual(88, firstUrl.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Hashtags()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<HashTagEntity> hashes = results.First().Statuses[0].Entities.HashTagEntities;\n            Assert.IsNotNull(hashes);\n            Assert.AreEqual(3, hashes.Count);\n            HashTagEntity firstHash = hashes.First();\n            Assert.AreEqual(\"twitterapi\", firstHash.Text);\n            Assert.AreEqual(89, firstHash.Start);\n            Assert.AreEqual(100, firstHash.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Users()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<UserMentionEntity> users = results.First().Statuses[0].Entities.UserMentionEntities;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(1, users.Count);\n            UserMentionEntity firstUser = users.First();\n            Assert.AreEqual(\"JoeMayo\", firstUser.ScreenName);\n            Assert.AreEqual(\"Joe Mayo\", firstUser.Name);\n            Assert.AreEqual(15411837ul, firstUser.Id);\n            Assert.AreEqual(3, firstUser.Start);\n            Assert.AreEqual(11, firstUser.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Media()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<MediaEntity> media = results.First().Statuses[0].Entities.MediaEntities;\n            Assert.IsNotNull(media);\n            Assert.AreEqual(1, media.Count);\n            MediaEntity firstMedia = media.First();\n            Assert.AreEqual(155683816676134913ul, firstMedia.ID);\n            Assert.AreEqual(\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrl);\n            Assert.AreEqual(\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\", firstMedia.MediaUrlHttps);\n            Assert.AreEqual(\"http://t.co/36MZIOyW\", firstMedia.Url);\n            Assert.AreEqual(\"pic.twitter.com/36MZIOyW\", firstMedia.DisplayUrl);\n            Assert.AreEqual(\"http://twitter.com/rschu/status/155683816671940609/photo/1\", firstMedia.ExpandedUrl);\n            Assert.AreEqual(\"photo\", firstMedia.Type);\n            Assert.IsNotNull(firstMedia.Sizes);\n            Assert.AreEqual(5, firstMedia.Sizes.Count);\n            PhotoSize firstSize = firstMedia.Sizes.First();\n            Assert.AreEqual(\"orig\", firstSize.Type);\n            Assert.AreEqual(1161, firstSize.Width);\n            Assert.AreEqual(925, firstSize.Height);\n            Assert.AreEqual(\"fit\", firstSize.Resize);\n            Assert.AreEqual(59, firstMedia.Start);\n            Assert.AreEqual(79, firstMedia.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Entity_Symbols()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            List<SymbolEntity> symbols = results.First().Statuses[0].Entities.SymbolEntities;\n            Assert.IsNotNull(symbols);\n            Assert.AreEqual(2, symbols.Count);\n            SymbolEntity symbol = symbols.First();\n            Assert.AreEqual(\"PEP\", symbol.Text);\n            Assert.AreEqual(114, symbol.Start);\n            Assert.AreEqual(118, symbol.End);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Search_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results);\n            Assert.IsNotNull(results.SingleOrDefault());\n            Search search = results.Single();\n            Assert.IsNotNull(search);\n            SearchMetaData metaData = search.Meta;\n            Assert.IsNotNull(metaData);\n            Assert.AreEqual(0.046m, metaData.CompletedIn);\n            Assert.AreEqual(281604225014824960ul, metaData.MaxID);\n            Assert.AreEqual(5ul, metaData.SinceID);\n            Assert.AreEqual(10, metaData.Count);\n            Assert.AreEqual(\"Twitter\", metaData.Query);\n            Assert.AreEqual(\n                \"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\",\n                metaData.NextResults);\n            Assert.AreEqual(\n                \"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\", \n                metaData.RefreshUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Status_MetaData()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.IsNotNull(results);\n            Assert.IsNotNull(results.SingleOrDefault());\n            Search search = results.Single();\n            Assert.IsNotNull(search);\n            List<Status> statuses = search.Statuses;\n            Assert.IsNotNull(statuses);\n            Assert.IsTrue(statuses.Any());\n            Status status = search.Statuses.First();\n            Assert.IsNotNull(status);\n            StatusMetaData metaData = status.MetaData;\n            Assert.IsNotNull(metaData);\n            Assert.AreEqual(\"recent\", metaData.ResultType);\n            Assert.AreEqual(\"en\", metaData.IsoLanguageCode);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Source()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(@\"<a href=\"\"http://www.csharp-station.com/\"\" rel=\"\"nofollow\"\">C# Station</a>\", results.First().Statuses.First().Source);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Text()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> results = searchProc.ProcessResults(SearchJson);\n\n            Assert.AreEqual(\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http://t.co/Cc85Yzpj #twitterapi #linq #linq2twitter\", results.First().Statuses.First().Text);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var searchProc = new SearchRequestProcessor<Search> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<Search> searches = searchProc.ProcessResults(EmptyResponse);\n\n            Assert.IsNotNull(searches);\n            Assert.IsNotNull(searches.SingleOrDefault());\n            Search search = searches.Single();\n            Assert.IsNotNull(search);\n            List<Status> results = search.Statuses;\n            Assert.IsNotNull(results);\n            Assert.IsFalse(results.Any());\n        }\n\n        const string SearchJson = @\"{\n   \"\"statuses\"\":[\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Sep 06 00:10:12 +0000 2012\"\",\n         \"\"id\"\":243501315039322112,\n         \"\"id_str\"\":\"\"243501315039322112\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.csharp-station.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eC# Station\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ],\n            \"\"symbols\"\": [\n                {\n                    \"\"text\"\": \"\"PEP\"\",\n                    \"\"indices\"\": [\n                        114,\n                        118\n                    ]\n                    },\n                    {\n                    \"\"text\"\": \"\"COKE\"\",\n                    \"\"indices\"\": [\n                        128,\n                        133\n                    ]\n                }\n            ],\n            \"\"media\"\":[\n               {\n                  \"\"id\"\":155683816676134913,\n                  \"\"id_str\"\":\"\"155683816676134913\"\",\n                  \"\"indices\"\":[\n                     59,\n                     79\n                  ],\n                  \"\"media_url\"\":\"\"http://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"media_url_https\"\":\"\"https://p.twimg.com/AikZmz5CEAESBHD.jpg\"\",\n                  \"\"url\"\":\"\"http://t.co/36MZIOyW\"\",\n                  \"\"display_url\"\":\"\"pic.twitter.com/36MZIOyW\"\",\n                  \"\"expanded_url\"\":\"\"http://twitter.com/rschu/status/155683816671940609/photo/1\"\",\n                  \"\"type\"\":\"\"photo\"\",\n                  \"\"sizes\"\":{\n                     \"\"orig\"\":{\n                        \"\"w\"\":1161,\n                        \"\"h\"\":925,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"thumb\"\":{\n                        \"\"w\"\":150,\n                        \"\"h\"\":150,\n                        \"\"resize\"\":\"\"crop\"\"\n                     },\n                     \"\"large\"\":{\n                        \"\"w\"\":1024,\n                        \"\"h\"\":816,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"small\"\":{\n                        \"\"w\"\":340,\n                        \"\"h\"\":271,\n                        \"\"resize\"\":\"\"fit\"\"\n                     },\n                     \"\"medium\"\":{\n                        \"\"w\"\":600,\n                        \"\"h\"\":478,\n                        \"\"resize\"\":\"\"fit\"\"\n                     }\n                  }\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:08:16 +0000 2012\"\",\n         \"\"id\"\":243123342771625985,\n         \"\"id_str\"\":\"\"243123342771625985\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:08:13\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:51 +0000 2012\"\",\n         \"\"id\"\":243121726920224769,\n         \"\"id_str\"\":\"\"243121726920224769\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:47\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"vi\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 23:01:40 +0000 2012\"\",\n         \"\"id\"\":243121682787741696,\n         \"\"id_str\"\":\"\"243121682787741696\"\",\n         \"\"text\"\":\"\"Testing LINQ to Twitter Windows 8 support: 05\\/09\\/2012 00:01:39\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.BradStevo.info\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eIIVVYTest\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Tue Sep 04 06:34:40 +0000 2012\"\",\n         \"\"id\"\":242873292950757376,\n         \"\"id_str\"\":\"\"242873292950757376\"\",\n         \"\"text\"\":\"\"Check out Working with Timelines with LINQ to Twitter written by @JoeMayo http:\\/\\/t.co\\/wTSodeyq\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twitter.com\\/tweetbutton\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTweet Button\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/wTSodeyq\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/wblo.gs\\/dB3\"\",\n                  \"\"display_url\"\":\"\"wblo.gs\\/dB3\"\",\n                  \"\"indices\"\":[\n                     74,\n                     94\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     65,\n                     73\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 06:18:02 +0000 2012\"\",\n         \"\"id\"\":242506723078836224,\n         \"\"id_str\"\":\"\"242506723078836224\"\",\n         \"\"text\"\":\"\"RT @JoeMayo: Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     89,\n                     100\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     101,\n                     106\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     107,\n                     120\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     68,\n                     88\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"JoeMayo\"\",\n                  \"\"name\"\":\"\"Joe Mayo\"\",\n                  \"\"id\"\":15411837,\n                  \"\"id_str\"\":\"\"15411837\"\",\n                  \"\"indices\"\":[\n                     3,\n                     11\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Mon Sep 03 04:12:43 +0000 2012\"\",\n         \"\"id\"\":242475182780973056,\n         \"\"id_str\"\":\"\"242475182780973056\"\",\n         \"\"text\"\":\"\"Blogged - Working with Timelines with LINQ to Twitter: http:\\/\\/t.co\\/Cc85Yzpj #twitterapi #linq #linq2twitter\"\",\n         \"\"source\"\":\"\"web\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":2,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n               {\n                  \"\"text\"\":\"\"twitterapi\"\",\n                  \"\"indices\"\":[\n                     76,\n                     87\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq\"\",\n                  \"\"indices\"\":[\n                     88,\n                     93\n                  ]\n               },\n               {\n                  \"\"text\"\":\"\"linq2twitter\"\",\n                  \"\"indices\"\":[\n                     94,\n                     107\n                  ]\n               }\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/Cc85Yzpj\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/bit.ly\\/PSOVso\"\",\n                  \"\"display_url\"\":\"\"bit.ly\\/PSOVso\"\",\n                  \"\"indices\"\":[\n                     55,\n                     75\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Fri Aug 31 20:02:43 +0000 2012\"\",\n         \"\"id\"\":241627095502041088,\n         \"\"id_str\"\":\"\"241627095502041088\"\",\n         \"\"text\"\":\"\"@ChevonChr Here's an example what i use LINQ on to extract the user values http:\\/\\/t.co\\/UL222Y5Q\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/www.metrotwit.com\\/\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eMetroTwit\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":241623155712610306,\n         \"\"in_reply_to_status_id_str\"\":\"\"241623155712610306\"\",\n         \"\"in_reply_to_user_id\"\":128105076,\n         \"\"in_reply_to_user_id_str\"\":\"\"128105076\"\",\n         \"\"in_reply_to_screen_name\"\":\"\"ChevonChr\"\",\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/UL222Y5Q\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/j.mp\\/ODpb3E\"\",\n                  \"\"display_url\"\":\"\"j.mp\\/ODpb3E\"\",\n                  \"\"indices\"\":[\n                     75,\n                     95\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n               {\n                  \"\"screen_name\"\":\"\"ChevonChr\"\",\n                  \"\"name\"\":\"\"Chevon Christie\"\",\n                  \"\"id\"\":128105076,\n                  \"\"id_str\"\":\"\"128105076\"\",\n                  \"\"indices\"\":[\n                     0,\n                     10\n                  ]\n               }\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"en\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 22:48:05 +0000 2012\"\",\n         \"\"id\"\":241306323923390464,\n         \"\"id_str\"\":\"\"241306323923390464\"\",\n         \"\"text\"\":\"\"Cool, I'm about to reach 100 followers! See the rest of my stats at Twitter Counter: http:\\/\\/t.co\\/QH864mhf\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/twittercounter.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eThe Visitor Widget\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n               {\n                  \"\"url\"\":\"\"http:\\/\\/t.co\\/QH864mhf\"\",\n                  \"\"expanded_url\"\":\"\"http:\\/\\/twtr.to\\/lINq\"\",\n                  \"\"display_url\"\":\"\"twtr.to\\/lINq\"\",\n                  \"\"indices\"\":[\n                     85,\n                     105\n                  ]\n               }\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false,\n         \"\"possibly_sensitive\"\":false\n      },\n      {\n         \"\"metadata\"\":{\n            \"\"result_type\"\":\"\"recent\"\",\n            \"\"iso_language_code\"\":\"\"es\"\"\n         },\n         \"\"created_at\"\":\"\"Thu Aug 30 00:00:51 +0000 2012\"\",\n         \"\"id\"\":240962249802530816,\n         \"\"id_str\"\":\"\"240962249802530816\"\",\n         \"\"text\"\":\"\"TWITTER to LINQ parece tan sencillo... No s\\u00e9 porqu\\u00e9 me trae tantos problemas :S\"\",\n         \"\"source\"\":\"\"\\u003ca href=\\\"\"http:\\/\\/blackberry.com\\/twitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eTwitter for BlackBerry\\u00ae\\u003c\\/a\\u003e\"\",\n         \"\"truncated\"\":false,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"geo\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"contributors\"\":null,\n         \"\"retweet_count\"\":0,\n         \"\"entities\"\":{\n            \"\"hashtags\"\":[\n\n            ],\n            \"\"urls\"\":[\n\n            ],\n            \"\"user_mentions\"\":[\n\n            ]\n         },\n         \"\"favorited\"\":false,\n         \"\"retweeted\"\":false\n      }\n   ],\n   \"\"search_metadata\"\":{\n       \"\"completed_in\"\":0.046,\n       \"\"max_id\"\":281604225014824960,\n       \"\"max_id_str\"\":\"\"281604225014824960\"\",\n       \"\"next_results\"\":\"\"?max_id=281562053162979328&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"query\"\":\"\"Twitter\"\",\n       \"\"refresh_url\"\":\"\"?since_id=281604225014824960&q=Twitter&geocode=37.781157%2C-122.398720%2C1mi&include_entities=1\"\",\n       \"\"count\"\":10,\n       \"\"since_id\"\":5,\n       \"\"since_id_str\"\":\"\"5\"\"\n   }\n}\";\n\n        const string EmptyResponse = @\"{\n   \"\"statuses\"\":[\n   ],\n   \"\"search_metadata\"\":{\n      \"\"completed_in\"\":0.038,\n      \"\"max_id\"\":243501315039322112,\n      \"\"max_id_str\"\":\"\"243501315039322112\"\",\n      \"\"page\"\":1,\n      \"\"query\"\":\"\"LINQ+To+Twitter\"\",\n      \"\"refresh_url\"\":\"\"?since_id=243501315039322112&q=LINQ%20To%20Twitter&include_entities=1\"\",\n      \"\"results_per_page\"\":15,\n      \"\"since_id\"\":0,\n      \"\"since_id_str\"\":\"\"0\"\"\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/SearchTests/TwitterSearchRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.SearchTests\n{\n    [TestClass]\n    public class TwitterSearchRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public TwitterSearchRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new TwitterSearchRequestProcessor<Search>();\n\n            var endTime = new DateTime(2020, 8, 30);\n            var startTime = new DateTime(2020, 8, 1);\n            Expression<Func<TwitterSearch, bool>> expression =\n                search =>\n                    search.Type == SearchType.RecentSearch &&\n                    search.EndTime == endTime &&\n                    search.Expansions == \"attachments.poll_ids,author_id\" &&\n                    search.MaxResults == 10 &&\n                    search.MediaFields == \"height,width\" &&\n                    search.NextToken == \"abc\" &&\n                    search.PlaceFields == \"country\" &&\n                    search.PollFields == \"duration_minutes,end_datetime\" &&\n                    search.Query == \"LINQ to Twitter\" &&\n                    search.SinceID == \"123\" &&\n                    search.SortOrder == SearchSortOrder.Relevancy &&\n                    search.StartTime == startTime &&\n                    search.TweetFields == \"author_id,created_at\" &&\n                    search.UntilID == \"525\" &&\n                    search.UserFields == \"created_at,verified\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.Type), ((int)SearchType.RecentSearch).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.EndTime), \"08/30/2020 00:00:00\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.Expansions), \"attachments.poll_ids,author_id\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.MaxResults), \"10\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.MediaFields), \"height,width\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.NextToken), \"abc\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(TwitterSearch.PlaceFields), \"country\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(TwitterSearch.PollFields), \"duration_minutes,end_datetime\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(TwitterSearch.Query), \"LINQ to Twitter\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.SinceID), \"123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.SortOrder), \"relevancy\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.StartTime), \"08/01/2020 00:00:00\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.TweetFields), \"author_id,created_at\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.UntilID), \"525\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterSearch.UserFields), \"created_at,verified\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_Parameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets/search/recent?\" +\n                \"query=LINQ%20to%20Twitter&\" +\n                \"end_time=2021-01-01T12%3A59%3A59Z&\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"max_results=10&\" +\n                \"media.fields=height%2Cwidth&\" +\n                \"next_token=abc&\" +\n                \"place.fields=country&\" +\n                \"poll.fields=duration_minutes%2Cend_datetime&\" +\n                \"since_id=123&\" +\n                \"sort_order=relevancy&\" +\n                \"start_time=2020-12-31T00%3A00%3A01Z&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"until_id=525&\" +\n                \"user.fields=created_at%2Cverified\";\n            var searchReqProc = new TwitterSearchRequestProcessor<Search> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterSearch.Query), \"LINQ to Twitter\" },\n                    { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },\n                    { nameof(TwitterSearch.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },\n                    { nameof(TwitterSearch.Expansions), \"attachments.poll_ids,author_id\" },\n                    { nameof(TwitterSearch.MaxResults), 10.ToString() },\n                    { nameof(TwitterSearch.MediaFields), \"height,width\" },\n                    { nameof(TwitterSearch.NextToken), \"abc\" },\n                    { nameof(TwitterSearch.PlaceFields), \"country\" },\n                    { nameof(TwitterSearch.PollFields), \"duration_minutes,end_datetime\" },\n                    { nameof(TwitterSearch.SinceID), \"123\" },\n                    { nameof(TwitterSearch.SortOrder), SearchSortOrder.Relevancy },\n                    { nameof(TwitterSearch.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },\n                    { nameof(TwitterSearch.TweetFields), \"author_id,created_at\" },\n                    { nameof(TwitterSearch.UntilID), \"525\" },\n                    { nameof(TwitterSearch.UserFields), \"created_at,verified\" },\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Parameters_Null()\n        {\n            var searchReqProc = new TwitterSearchRequestProcessor<Search> { BaseUrl = BaseUrl2 };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                searchReqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithAllParameters_SendsParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets/search/recent?\" +\n                \"query=LINQ%20to%20Twitter&\" +\n                \"end_time=2021-01-01T12%3A59%3A59Z&\" +\n                \"expansions=author_id&\" +\n                \"max_results=10&\" +\n                \"media.fields=url&\" +\n                \"next_token=abc&\" +\n                \"place.fields=full_name&\" +\n                \"poll.fields=voting_status&\" +\n                \"since_id=123&\" +\n                \"sort_order=recency&\" +\n                \"start_time=2020-12-31T00%3A00%3A01Z&\" +\n                \"tweet.fields=text&\" +\n                \"until_id=525&\" +\n                \"user.fields=username\";\n            var searchReqProc = new TwitterSearchRequestProcessor<TwitterSearch> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },\n                    { nameof(TwitterSearch.Query), \"LINQ to Twitter\" },\n                    { nameof(TwitterSearch.EndTime), new DateTime(2021, 01, 01, 12, 59, 59).ToString() },\n                    { nameof(TwitterSearch.Expansions), ExpansionField.AuthorID },\n                    { nameof(TwitterSearch.MaxResults), 10.ToString() },\n                    { nameof(TwitterSearch.MediaFields), MediaField.Url },\n                    { nameof(TwitterSearch.NextToken), \"abc\" },\n                    { nameof(TwitterSearch.PlaceFields), PlaceField.FullName },\n                    { nameof(TwitterSearch.PollFields), PollField.VotingStatus },\n                    { nameof(TwitterSearch.SinceID), 123.ToString() },\n                    { nameof(TwitterSearch.SortOrder), SearchSortOrder.Recency },\n                    { nameof(TwitterSearch.StartTime), new DateTime(2020, 12, 31, 00, 00, 01).ToString() },\n                    { nameof(TwitterSearch.TweetFields), TweetField.Text },\n                    { nameof(TwitterSearch.UntilID), 525.ToString() },\n                    { nameof(TwitterSearch.UserFields), UserField.UserName },\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithSpacesInFields_FixesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets/search/recent?\" +\n                \"query=LINQ%20to%20Twitter&\" +\n                \"expansions=author_id%2Cgeo.place_id&\" +\n                \"media.fields=url%2Cduration_ms&\" +\n                \"place.fields=full_name%2Ccountry&\" +\n                \"poll.fields=voting_status%2Coptions&\" +\n                \"tweet.fields=text%2Ccreated_at&\" +\n                \"user.fields=username%2Clocation\";\n            var searchReqProc = new TwitterSearchRequestProcessor<TwitterSearch> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },\n                    { nameof(TwitterSearch.Query), \"LINQ to Twitter\" },\n                    { nameof(TwitterSearch.Expansions), ExpansionField.AuthorID + \", \" + ExpansionField.PlaceID },\n                    { nameof(TwitterSearch.MediaFields), MediaField.Url + \", \" + MediaField.Duration },\n                    { nameof(TwitterSearch.PlaceFields), PlaceField.FullName + \", \" + PlaceField.Country },\n                    { nameof(TwitterSearch.PollFields), PollField.VotingStatus + \", \" + PollField.Options },\n                    { nameof(TwitterSearch.TweetFields), TweetField.Text + \", \" + TweetField.CreatedAt },\n                    { nameof(TwitterSearch.UserFields), UserField.UserName + \", \" + UserField.Location },\n               };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Encodes_Query()\n        {\n            var searchReqProc = new TwitterSearchRequestProcessor<Search> { BaseUrl = BaseUrl2 };\n            string expected = searchReqProc.BaseUrl + \"tweets/search/recent?query=Contains%20Space\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },\n                    { nameof(TwitterSearch.Query), \"Contains Space\" }\n                };\n\n            Request req = searchReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Requires_Query()\n        {\n            var searchReqProc = new TwitterSearchRequestProcessor<Search> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },\n                    { nameof(TwitterSearch.Query), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentNullException>(() =>\n                    searchReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(TwitterSearch.Query), ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Meta()\n        {\n            var searchProc = new TwitterSearchRequestProcessor<TwitterSearch> { BaseUrl = BaseUrl2 };\n\n            List<TwitterSearch> results = searchProc.ProcessResults(SearchDefaultJson);\n\n            Assert.IsNotNull(results);\n            TwitterSearch search = results.SingleOrDefault();\n            Assert.IsNotNull(search);\n            TwitterSearchMeta meta = search.Meta;\n            Assert.IsNotNull(meta);\n            Assert.AreEqual(\"1317802724407316480\", meta.NewestID);\n            Assert.AreEqual(\"1316030424850800640\", meta.OldestID);\n            Assert.AreEqual(4, meta.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_DefaultTweets()\n        {\n            var searchProc = new TwitterSearchRequestProcessor<TwitterSearch> { BaseUrl = BaseUrl2 };\n\n            List<TwitterSearch> results = searchProc.ProcessResults(SearchDefaultJson);\n\n            Assert.IsNotNull(results);\n            TwitterSearch search = results.SingleOrDefault();\n            Assert.IsNotNull(search);\n            List<Tweet> tweets = search.Tweets;\n            Assert.IsNotNull(tweets);\n            Assert.AreEqual(4, tweets.Count);\n            Tweet firstTweet = tweets.FirstOrDefault();\n            Assert.IsNotNull(firstTweet);\n            Assert.AreEqual(\"1317802724407316480\", firstTweet.ID);\n            Assert.AreEqual(\"Test Data 1\", firstTweet.Text);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var searchProc = new TwitterSearchRequestProcessor<TwitterSearch> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<TwitterSearch> searches = searchProc.ProcessResults(EmptyResponse);\n\n            Assert.IsNotNull(searches);\n            TwitterSearch search = searches.SingleOrDefault();\n            Assert.IsNotNull(search);\n            List<Tweet> results = search.Tweets;\n            Assert.IsNull(results);\n\n            TwitterSearchMeta meta = search.Meta;\n            Assert.IsNotNull(meta);\n            Assert.IsNull(meta.NewestID);\n            Assert.IsNull(meta.OldestID);\n            Assert.AreEqual(0, meta.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var searchProc = new TwitterSearchRequestProcessor<TwitterSearch>()\n            {\n                BaseUrl = BaseUrl2,\n                Type = SearchType.RecentSearch,\n                EndTime = new DateTime(2020, 12, 31),\n                Expansions = \"123\",\n                MaxResults = 100,\n                MediaFields = \"456\",\n                NextToken = \"789\",\n                PlaceFields = \"012\",\n                PollFields = \"345\",\n                Query = \"JoeMayo\",\n                SinceID = \"1\",\n                SortOrder = SearchSortOrder.Relevancy,\n                StartTime = new DateTime(2020, 1, 1),\n                TweetFields = \"678\",\n                UntilID = \"901\",\n                UserFields = \"234\"\n            };\n\n            var searchResult = searchProc.ProcessResults(SearchDefaultJson);\n\n            Assert.IsNotNull(searchResult);\n            Assert.AreEqual(1, searchResult.Count);\n            var search = searchResult.Single();\n            Assert.IsNotNull(search);\n            Assert.AreEqual(SearchType.RecentSearch, search.Type);\n            Assert.AreEqual(new DateTime(2020, 12, 31), search.EndTime);\n            Assert.AreEqual(\"123\", search.Expansions);\n            Assert.AreEqual(100, search.MaxResults);\n            Assert.AreEqual(\"456\", search.MediaFields);\n            Assert.AreEqual(\"789\", search.NextToken);\n            Assert.AreEqual(\"012\", search.PlaceFields);\n            Assert.AreEqual(\"345\", search.PollFields);\n            Assert.AreEqual(\"JoeMayo\", search.Query);\n            Assert.AreEqual(\"1\", search.SinceID);\n            Assert.AreEqual(SearchSortOrder.Relevancy, search.SortOrder);\n            Assert.AreEqual(new DateTime(2020, 1, 1), search.StartTime);\n            Assert.AreEqual(\"678\", search.TweetFields);\n            Assert.AreEqual(\"901\", search.UntilID);\n            Assert.AreEqual(\"234\", search.UserFields);\n        }\n\n\n        [TestMethod]\n        public void ProcessResults_WithErrors_PopulatesErrorList()\n        {\n            var searchProc = new TwitterSearchRequestProcessor<TwitterSearch> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<TwitterSearch> searches = searchProc.ProcessResults(SearchErrorJson);\n\n            Assert.IsNotNull(searches);\n            TwitterSearch search = searches.SingleOrDefault();\n            Assert.IsNotNull(search);\n            List<TwitterError> errors = search.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(2, errors.Count);\n            TwitterError error = errors.FirstOrDefault();\n            Assert.IsNotNull(error);\n            Assert.AreEqual(\"tweet\", error.ResourceType);\n            Assert.AreEqual(\"non_public_metrics.impression_count\", error.Field);\n            Assert.AreEqual(\"Field Authorization Error\", error.Title);\n            Assert.AreEqual(\"data\", error.Section);\n            Assert.AreEqual(\"Sorry, you are not authorized to access non_public_metrics.impression_count on a Tweet.\", error.Detail);\n            Assert.AreEqual(\"https://api.twitter.com/2/problems/not-authorized-for-field\", error.Type);\n        }\n\n        #region EmptyResponse\n\n        const string EmptyResponse = @\"{\"\"meta\"\":{\"\"result_count\"\":0}}\";\n\n        #endregion\n\n        #region SearchJson\n\n        const string SearchDefaultJson = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"id\"\": \"\"1317802724407316480\"\",\n\t\t\t\"\"text\"\": \"\"Test Data 1\"\"\n\n        },\n\t\t{\n\t\t\t\"\"id\"\": \"\"1317307540561121280\"\",\n\t\t\t\"\"text\"\": \"\"Test Data 2\"\"\n\t\t},\n\t\t{\n    \"\"id\"\": \"\"1317077936948785152\"\",\n\t\t\t\"\"text\"\": \"\"Test Data 3\"\"\n\n        },\n\t\t{\n    \"\"id\"\": \"\"1316030424850800640\"\",\n\t\t\t\"\"text\"\": \"\"Test Data 4\"\"\n\n        }\n\t],\n\t\"\"meta\"\": {\n        \"\"newest_id\"\": \"\"1317802724407316480\"\",\n\t\t\"\"oldest_id\"\": \"\"1316030424850800640\"\",\n\t\t\"\"result_count\"\": 4\n\n    }\n}\";\n\n        #endregion\n\n        #region SearchError\n\n        const string SearchErrorJson = @\"{\n\t\"\"errors\"\": [\n\t\t{\n\t\t\t\"\"resource_type\"\": \"\"tweet\"\",\n\t\t\t\"\"field\"\": \"\"non_public_metrics.impression_count\"\",\n\t\t\t\"\"title\"\": \"\"Field Authorization Error\"\",\n\t\t\t\"\"section\"\": \"\"data\"\",\n\t\t\t\"\"detail\"\": \"\"Sorry, you are not authorized to access non_public_metrics.impression_count on a Tweet.\"\",\n\t\t\t\"\"type\"\": \"\"https://api.twitter.com/2/problems/not-authorized-for-field\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"resource_type\"\": \"\"tweet\"\",\n\t\t\t\"\"field\"\": \"\"non_public_metrics.url_link_clicks\"\",\n\t\t\t\"\"title\"\": \"\"Field Authorization Error\"\",\n\t\t\t\"\"section\"\": \"\"data\"\",\n\t\t\t\"\"detail\"\": \"\"Sorry, you are not authorized to access non_public_metrics.url_link_clicks on a Tweet.\"\",\n\t\t\t\"\"type\"\": \"\"https://api.twitter.com/2/problems/not-authorized-for-field\"\"\n\t\t}\n\t],\n\t\"\"meta\"\": {\n\t\t\"\"result_count\"\": 0\n\t}\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/SpacesTests/SpacesRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.SpaceTests\n{\n    [TestClass]\n    public class SpacesRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public SpacesRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_WithInputParams_Succeeds()\n        {\n            var target = new SpacesRequestProcessor<SpacesQuery>();\n            Expression<Func<SpacesQuery, bool>> expression =\n                space =>\n                    space.Type == SpacesType.Search &&\n                    space.Query == \"My Space\" &&\n\t\t\t\t\tspace.CreatorIds == \"123,456\" &&\n\t\t\t\t\tspace.Expansions == \"author_id,attachments.media_keys\" &&\n\t\t\t\t\tspace.SpaceIds == \"789,012\" &&\n                    space.MaxResults == 100 &&\n                    space.SpaceFields == \"id,title\" &&\n                    space.State == \"live\" &&\n\t\t\t\t\tspace.TopicFields == \"id,name\" &&\n                    space.UserFields == \"id,name\";\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.Type), ((int)SpacesType.Search).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.Query), \"My Space\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(SpacesQuery.CreatorIds), \"123,456\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.Expansions), \"author_id,attachments.media_keys\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(SpacesQuery.SpaceIds), \"789,012\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.MaxResults), \"100\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.SpaceFields), \"id,title\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.State), \"live\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(SpacesQuery.TopicFields), \"id,name\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(SpacesQuery.UserFields), \"id,name\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForSearch_ConstructsUrl()\n        {\n            const string ExpectedUrl = \n                BaseUrl2 + \"spaces/search?\" +\n                \"query=twitter&\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"max_results=99&\" +\n                \"space.fields=id%2Ctitle&\" +\n                \"state=live&\" +\n\t\t\t\t\"topic.fields=id%2Cname&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\n            var reqProc = new SpacesRequestProcessor<SpacesQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(SpacesQuery.Type), ((int)SpacesType.Search).ToString(CultureInfo.InvariantCulture) },\n                    { nameof(SpacesQuery.Query), \"twitter\" },\n                    { nameof(SpacesQuery.Expansions), \"attachments.poll_ids,author_id\" },\n                    { nameof(SpacesQuery.MaxResults), \"99\" },\n                    { nameof(SpacesQuery.SpaceFields), \"id,title\" },\n                    { nameof(SpacesQuery.State), SpaceState.Live },\n                    { nameof(SpacesQuery.TopicFields), \"id,name\" },\n                    { nameof(SpacesQuery.UserFields), \"created_at,verified\" }\n                };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForSearchParamsWithSpaces_TrimsSpaces()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces/search?\" +\n\t\t\t\t\"query=twitter&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"max_results=99&\" +\n\t\t\t\t\"space.fields=id%2Ctitle&\" +\n\t\t\t\t\"state=live&\" +\n\t\t\t\t\"topic.fields=id%2Cname&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\n\t\t\tvar reqProc = new SpacesRequestProcessor<SpacesQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(SpacesQuery.Type), ((int)SpacesType.Search).ToString(CultureInfo.InvariantCulture) },\n\t\t\t\t\t{ nameof(SpacesQuery.Query), \"twitter\" },\n\t\t\t\t\t{ nameof(SpacesQuery.Expansions), \"attachments.poll_ids ,author_id\" },\n\t\t\t\t\t{ nameof(SpacesQuery.MaxResults), \"99\" },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceFields), \"id ,title\" },\n\t\t\t\t\t{ nameof(SpacesQuery.State), SpaceState.Live },\n\t\t\t\t\t{ nameof(SpacesQuery.TopicFields), \"id, name\" },\n\t\t\t\t\t{ nameof(SpacesQuery.UserFields), \"created_at ,verified\" }\n\t\t\t\t};\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_WithInputFilters_RepopulatesInputFilterProperties()\n        {\n\t\t\tvar reqProc = new SpacesRequestProcessor<SpacesQuery> \n\t\t\t{ \n\t\t\t\tType = SpacesType.Search,\n\t\t\t\tQuery = \"twitter\",\n\t\t\t\tCreatorIds = \"123,456\",\n\t\t\t\tExpansions = ExpansionField.HostIds,\n\t\t\t\tMaxResults = 99,\n\t\t\t\tSpaceFields = SpaceField.HostIds,\n\t\t\t\tSpaceIds = \"789,012\",\n\t\t\t\tState = SpaceState.Live,\n\t\t\t\tTopicFields = TopicField.Description,\n\t\t\t\tUserFields = UserField.Name\n\t\t\t};\n\n\t\t\tList<SpacesQuery> searchResponse = reqProc.ProcessResults(SearchResponse);\n\n\t\t\tvar spaceQuery = searchResponse.FirstOrDefault();\n\t\t\tAssert.IsNotNull(spaceQuery);\n\t\t\tAssert.AreEqual(SpacesType.Search, spaceQuery.Type);\n\t\t\tAssert.AreEqual(\"twitter\", spaceQuery.Query);\n\t\t\tAssert.AreEqual(\"123,456\", spaceQuery.CreatorIds);\n\t\t\tAssert.AreEqual(ExpansionField.HostIds, spaceQuery.Expansions);\n\t\t\tAssert.AreEqual(99, spaceQuery.MaxResults);\n\t\t\tAssert.AreEqual(SpaceField.HostIds, spaceQuery.SpaceFields);\n\t\t\tAssert.AreEqual(\"789,012\", spaceQuery.SpaceIds);\n\t\t\tAssert.AreEqual(SpaceState.Live, spaceQuery.State);\n\t\t\tAssert.AreEqual(TopicField.Description, spaceQuery.TopicFields);\n\t\t\tAssert.AreEqual(UserField.Name, spaceQuery.UserFields);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForBySpaceIds_ConstructsUrl()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"ids=123%2C456&\" +\n\t\t\t\t\"space.fields=id%2Ctitle&\" +\n\t\t\t\t\"topic.fields=id%2Cname&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new SpacesRequestProcessor<SpacesQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(SpacesQuery.Type), SpacesType.BySpaceID.ToString() },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceIds), \"123,456\" },\n\t\t\t\t\t{ nameof(SpacesQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceFields), \"id,title\" },\n\t\t\t\t\t{ nameof(SpacesQuery.TopicFields), \"id,name\" },\n\t\t\t\t\t{ nameof(SpacesQuery.UserFields), \"created_at,verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForBySpaceIdsParamsWithSapces_TrimsSpaces()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"ids=123%2C456&\" +\n\t\t\t\t\"space.fields=id%2Ctitle&\" +\n\t\t\t\t\"topic.fields=id%2Cname&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new SpacesRequestProcessor<SpacesQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(SpacesQuery.Type), SpacesType.BySpaceID.ToString() },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceIds), \"123, 456\" },\n\t\t\t\t\t{ nameof(SpacesQuery.Expansions), \"attachments.poll_ids, author_id\" },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceFields), \"id, title\" },\n\t\t\t\t\t{ nameof(SpacesQuery.TopicFields), \"id, name\" },\n\t\t\t\t\t{ nameof(SpacesQuery.UserFields), \"created_at, verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForByCreatorIds_ConstructsUrl()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces/by/creator_ids?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"user_ids=123%2C456&\" +\n\t\t\t\t\"space.fields=id%2Ctitle&\" +\n\t\t\t\t\"topic.fields=id%2Cname&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new SpacesRequestProcessor<SpacesQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(SpacesQuery.Type), SpacesType.ByCreatorID.ToString() },\n\t\t\t\t\t{ nameof(SpacesQuery.CreatorIds), \"123,456\" },\n\t\t\t\t\t{ nameof(SpacesQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceFields), \"id,title\" },\n\t\t\t\t\t{ nameof(SpacesQuery.TopicFields), \"id,name\" },\n\t\t\t\t\t{ nameof(SpacesQuery.UserFields), \"created_at,verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForByCreatorIdsParamsWithSapces_TrimsSpaces()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces/by/creator_ids?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"user_ids=123%2C456&\" +\n\t\t\t\t\"space.fields=id%2Ctitle&\" +\n\t\t\t\t\"topic.fields=id%2Cname&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new SpacesRequestProcessor<SpacesQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(SpacesQuery.Type), SpacesType.ByCreatorID.ToString() },\n\t\t\t\t\t{ nameof(SpacesQuery.CreatorIds), \"123, 456\" },\n\t\t\t\t\t{ nameof(SpacesQuery.Expansions), \"attachments.poll_ids, author_id\" },\n\t\t\t\t\t{ nameof(SpacesQuery.SpaceFields), \"id, title\" },\n\t\t\t\t\t{ nameof(SpacesQuery.TopicFields), \"id, name\" },\n\t\t\t\t\t{ nameof(SpacesQuery.UserFields), \"created_at, verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void ProcessResults_WithSearchResponse_Succeeds()\n        {\n            var reqProc = new SpacesRequestProcessor<SpacesQuery> { Type = SpacesType.Search };\n\n            List<SpacesQuery> searchResponse = reqProc.ProcessResults(SearchResponse);\n\n            Assert.IsNotNull(searchResponse);\n            Assert.IsNotNull(searchResponse.SingleOrDefault());\n            var spaceQuery = searchResponse.Single();\n            Assert.IsNotNull(spaceQuery);\n            var spaces = spaceQuery.Spaces;\n            Assert.IsNotNull(spaces);\n            Assert.IsTrue(spaces.Any());\n            Space space = spaces.First();\n            Assert.IsNotNull(space);\n            Assert.AreEqual(\"1109717717895049216\", space.CreatorID);\n\t\t\tAssert.IsNotNull(space.InvitedUserIds);\n\t\t\tAssert.AreEqual(7, space.InvitedUserIds.Count);\n\t\t\tAssert.AreEqual(1, space.ParticipantCount);\n\t\t\tAssert.AreEqual(5, space.SubscriberCount);\n\t\t\tAssert.AreEqual(true, space.IsTicketed);\n\t\t\tAssert.AreEqual(\"fr\", space.Lang);\n\t\t\tAssert.AreEqual(\"10/20/2021 00:54:23\", space.CreatedAt.Value.ToString());\n\t\t\tAssert.AreEqual(\"10/20/2021 04:04:53\", space.UpdatedAt.Value.ToString());\n\t\t\tAssert.AreEqual(\"10/20/2021 00:54:25\", space.StartedAt.Value.ToString());\n\t\t\tAssert.AreEqual(\"1rmxPgZLjEZJN\", space.ID);\n\t\t\tAssert.IsNotNull(space.SpeakerIds);\n\t\t\tAssert.AreEqual(1, space.SpeakerIds.Count);\n\t\t\tAssert.IsNotNull(space.HostIds);\n\t\t\tAssert.AreEqual(2, space.HostIds.Count);\n\n            SpaceMeta meta = spaceQuery.Meta;\n            Assert.IsNotNull(meta);\n            Assert.AreEqual(3, meta.ResultCount);\n        }\n\n\t\tconst string SearchResponse = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"creator_id\"\": \"\"1109717717895049216\"\",\n\t\t\t\"\"invited_user_ids\"\": [\n\t\t\t\t\"\"1242778807930683399\"\",\n\t\t\t\t\"\"30089230\"\",\n\t\t\t\t\"\"617105864\"\",\n\t\t\t\t\"\"1439813626060230657\"\",\n\t\t\t\t\"\"1268062881884618752\"\",\n\t\t\t\t\"\"1420497557281771520\"\",\n\t\t\t\t\"\"20550618\"\"\n\t\t\t],\n\t\t\t\"\"participant_count\"\": 1,\n\t\t\t\"\"subscriber_count\"\": 5,\n\t\t\t\"\"is_ticketed\"\": true,\n\t\t\t\"\"lang\"\": \"\"fr\"\",\n\t\t\t\"\"created_at\"\": \"\"2021-10-20T00:54:23.000Z\"\",\n\t\t\t\"\"updated_at\"\": \"\"2021-10-20T04:04:53.000Z\"\",\n\t\t\t\"\"started_at\"\": \"\"2021-10-20T00:54:25.000Z\"\",\n\t\t\t\"\"state\"\": \"\"live\"\",\n\t\t\t\"\"id\"\": \"\"1rmxPgZLjEZJN\"\",\n\t\t\t\"\"speaker_ids\"\": [\n\t\t\t\t\"\"1439813626060230657\"\"\n\t\t\t],\n\t\t\t\"\"host_ids\"\": [\n\t\t\t\t\"\"1109717717895049216\"\",\n\t\t\t\t\"\"1439813626060230657\"\"\n\t\t\t]\n\t},\n\t\t{\n\t\t\t\"\"creator_id\"\": \"\"1131099534786945024\"\",\n\t\t\t\"\"invited_user_ids\"\": [\n\t\t\t\t\"\"1290675089222991874\"\",\n\t\t\t\t\"\"1246445180908998656\"\",\n\t\t\t\t\"\"1275005734606876673\"\",\n\t\t\t\t\"\"1414825887854252034\"\",\n\t\t\t\t\"\"1434147837831364610\"\",\n\t\t\t\t\"\"1140992831391240193\"\",\n\t\t\t\t\"\"985972363\"\"\n\t\t\t],\n\t\t\t\"\"participant_count\"\": 8,\n\t\t\t\"\"subscriber_count\"\": 3,\n\t\t\t\"\"is_ticketed\"\": false,\n\t\t\t\"\"lang\"\": \"\"hi\"\",\n\t\t\t\"\"created_at\"\": \"\"2021-10-20T03:24:00.000Z\"\",\n\t\t\t\"\"updated_at\"\": \"\"2021-10-20T04:04:54.000Z\"\",\n\t\t\t\"\"title\"\": \"\"my last space twitter 😊\"\",\n\t\t\t\"\"started_at\"\": \"\"2021-10-20T03:24:02.000Z\"\",\n\t\t\t\"\"state\"\": \"\"live\"\",\n\t\t\t\"\"id\"\": \"\"1vAxRkZazZqKl\"\",\n\t\t\t\"\"speaker_ids\"\": [\n\t\t\t\t\"\"1246445180908998656\"\",\n\t\t\t\t\"\"1275005734606876673\"\",\n\t\t\t\t\"\"1165133352728289280\"\",\n\t\t\t\t\"\"1434147837831364610\"\",\n\t\t\t\t\"\"1140992831391240193\"\"\n\t\t\t],\n\t\t\t\"\"host_ids\"\": [\n\t\t\t\t\"\"1131099534786945024\"\",\n\t\t\t\t\"\"1434147837831364610\"\"\n\t\t\t]\n},\n\t\t{\n\t\"\"creator_id\"\": \"\"1137751093\"\",\n\t\t\t\"\"participant_count\"\": 0,\n\t\t\t\"\"is_ticketed\"\": false,\n\t\t\t\"\"lang\"\": \"\"da\"\",\n\t\t\t\"\"created_at\"\": \"\"2021-10-13T18:57:44.000Z\"\",\n\t\t\t\"\"updated_at\"\": \"\"2021-10-19T19:45:48.000Z\"\",\n\t\t\t\"\"title\"\": \"\"Online Safety for Parents & Kids #InfosecAwareness\"\",\n\t\t\t\"\"state\"\": \"\"scheduled\"\",\n\t\t\t\"\"id\"\": \"\"1ypKdERNAnqGW\"\",\n\t\t\t\"\"scheduled_start\"\": \"\"2021-10-21T18:00:00.000Z\"\",\n\t\t\t\"\"host_ids\"\": [\n\t\t\t\t\"\"1137751093\"\"\n\t\t\t]\n\t\t}\n\t],\n\t\"\"includes\"\": {\n\t\"\"users\"\": [\n\t\t\t{\n\t\t\"\"id\"\": \"\"1109717717895044328\"\",\n\t\t\t\t\"\"created_at\"\": \"\"2019-03-24T07:24:56.000Z\"\",\n\t\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1445704677840994314/UpZdlVbD_normal.jpg\"\",\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"name\"\": \"\"shegraegaga\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\"\"url\"\": {\n\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/G6pm5Gmar0\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://gradioofficiel.com/\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"gradioofficiel.com\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\"\"start\"\": 19,\n\t\t\t\t\t\t\t\t\"\"end\"\": 42,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/EWcI1NBzT7\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://facebook.com/GRadioOfficiel\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"facebook.com/GRadioOfficiel\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\"\"start\"\": 43,\n\t\t\t\t\t\t\t\t\"\"end\"\": 66,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/zduUUeNpOd\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://instagram.com/gradioofficiel/\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"instagram.com/gradioofficiel/\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\"\"start\"\": 67,\n\t\t\t\t\t\t\t\t\"\"end\"\": 90,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/b1ydyQfqWV\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://www.twitch.tv/gradioofficiel\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"twitch.tv/gradioofficiel\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t},\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\"\"followers_count\"\": 440,\n\t\t\t\t\t\"\"following_count\"\": 4116,\n\t\t\t\t\t\"\"tweet_count\"\": 28328,\n\t\t\t\t\t\"\"listed_count\"\": 3\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"location\"\": \"\"France\"\",\n\t\t\t\t\"\"description\"\": \"\"Suivez le Tempo ! \\nhttps://t.co/EWcI1NBzT7\\nhttps://t.co/zduUUeNpOd\\nhttps://t.co/b1ydyQfqWV\"\",\n\t\t\t\t\"\"pinned_tweet_id\"\": \"\"1243446272205426695\"\",\n\t\t\t\t\"\"username\"\": \"\"jjsjhshrthr\"\",\n\t\t\t\t\"\"url\"\": \"\"https://t.co/G6pm5Gmar0\"\"\n\t\t\t},\n\t\t\t{\n\t\t\"\"id\"\": \"\"1439813626060235432\"\",\n\t\t\t\t\"\"created_at\"\": \"\"2021-09-20T04:48:59.000Z\"\",\n\t\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1443036575932239876/Z4buzkDB_normal.jpg\"\",\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"name\"\": \"\"ASFASFf\"\",\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\"\"followers_count\"\": 5,\n\t\t\t\t\t\"\"following_count\"\": 71,\n\t\t\t\t\t\"\"tweet_count\"\": 18,\n\t\t\t\t\t\"\"listed_count\"\": 0\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"description\"\": \"\"Pas trop républicain\"\",\n\t\t\t\t\"\"username\"\": \"\"fafWFWEF\"\",\n\t\t\t\t\"\"url\"\": \"\"\"\"\n\t\t\t},\n\t\t\t{\n\t\t\"\"id\"\": \"\"1242778807930686789\"\",\n\t\t\t\t\"\"created_at\"\": \"\"2020-03-25T11:42:43.000Z\"\",\n\t\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1393808717729210371/Cf8G8rhy_normal.jpg\"\",\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"name\"\": \"\"⚜ afsfdaf ⚜\"\",\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\"\"followers_count\"\": 45,\n\t\t\t\t\t\"\"following_count\"\": 121,\n\t\t\t\t\t\"\"tweet_count\"\": 223,\n\t\t\t\t\t\"\"listed_count\"\": 0\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"description\"\": \"\"\"\",\n\t\t\t\t\"\"username\"\": \"\"sggWFwf\"\",\n\t\t\t\t\"\"url\"\": \"\"\"\"\n\t\t\t}\n\t\t]\n\t},\n\t\"\"meta\"\": {\n\t\"\"result_count\"\": 3\n\t}\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/StatusTests/StatusCommandsTests.cs",
    "content": "﻿//using System;\n//using System.Collections.Generic;\n//using System.Threading;\n//using System.Threading.Tasks;\n//using LinqToTwitter;\n//using LinqToTwitter.Common;\n//using LinqToTwitter.OAuth;\n//using LinqToTwitter.Provider;\n//using LinqToTwitter.Tests.Common;\n//using Microsoft.VisualStudio.TestTools.UnitTesting;\n//using Moq;\n\n//namespace LinqToTwitter.Tests.StatusTests\n//{\n//    [TestClass]\n//    public class StatusCommandsTests\n//    {\n//        public StatusCommandsTests()\n//        {\n//            TestCulture.SetCulture();\n//        }\n\n//        async Task<TwitterContext> InitializeTwitterContextAsync()\n//        {\n//            await Task.Delay(1);\n//            var authMock = new Mock<IAuthorizer>();\n//            var execMock = new Mock<ITwitterExecute>();\n\n//            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n//            tcsAuth.SetResult(authMock.Object);\n\n//            var tcsResponse = new TaskCompletionSource<string>();\n//            tcsResponse.SetResult(SingleStatusResponse);\n\n//            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n//            execMock.Setup(exec =>\n//                exec.PostFormUrlEncodedToTwitterAsync<Status>(\n//                    It.IsAny<string>(),\n//                    It.IsAny<string>(),\n//                    It.IsAny<IDictionary<string, string>>(),\n//                    It.IsAny<CancellationToken>()))\n//                .Returns(tcsResponse.Task);\n//            var ctx = new TwitterContext(execMock.Object);\n//            return ctx;\n//        }\n\n//        [TestMethod]\n//        public void StatusRequestProcessor_Handles_Actions()\n//        {\n//            var statusReqProc = new StatusRequestProcessor<Status>();\n\n//            Assert.IsInstanceOfType(statusReqProc, typeof(IRequestProcessorWithAction<Status>));\n//        }\n\n//        [TestMethod]\n//        public async Task ReplyAsync_Sets_StatusIDAsync()\n//        {\n//            const string Status = \"Hello\";\n//            const ulong InReplyToStatusID = 1;\n//            const ulong ExpectedStatusID = 184835136037191681ul;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            Status responseTweet = await ctx.ReplyAsync(InReplyToStatusID, Status);\n\n//            Assert.AreEqual(ExpectedStatusID, responseTweet.StatusID);\n//        }\n\n//        [TestMethod]\n//        public async Task ReplyAsync_WithRawResult_SucceedsAsync()\n//        {\n//            const string Status = \"Hello\";\n//            const ulong InReplyToStatusID = 1;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            await ctx.ReplyAsync(InReplyToStatusID, Status);\n\n//            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n//        }\n\n//        [TestMethod]\n//        public async Task ReplyAsync_Sets_AutoPopulateReplyMetadataAndExcludeReplyUserIdsAsync()\n//        {\n//            const string Status = \"Hello\";\n//            const ulong ExpectedStatusID = 184835136037191681ul;\n//            const ulong InReplyToStatusID = 1;\n//            var excludedIDs = new List<ulong> { 2ul, 3ul, 4ul };\n//            const string AttachmentUrl = \"http://t.co/abc123\";\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            Status actual = await ctx.ReplyAsync(InReplyToStatusID, Status, autoPopulateReplyMetadata: true, excludeReplyUserIds: excludedIDs, attachmentUrl: AttachmentUrl, TweetMode.Compat);\n\n//            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n//        }\n\n//        [TestMethod]\n//        public async Task TweetAsync_Throws_On_Null_TweetAsync()\n//        {\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            var ex = await L2TAssert.Throws<ArgumentException>(\n//                async () => await ctx.TweetAsync(null));\n\n//            Assert.AreEqual(\"status\", ex.ParamName);\n//        }\n\n//        [TestMethod]\n//        public void TweetAsync_Throws_On_Bad_Tweet()\n//        {\n//            var authMock = new Mock<IAuthorizer>();\n//            var execMock = new Mock<ITwitterExecute>();\n\n//            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n//            tcsAuth.SetResult(authMock.Object);\n\n//            var tcsResponse = new TaskCompletionSource<string>();\n//            tcsResponse.SetResult(SingleStatusResponse);\n\n//            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n//            execMock.Setup(exec =>\n//                exec.PostFormUrlEncodedToTwitterAsync<Status>(\n//                    It.IsAny<string>(),\n//                    It.IsAny<string>(),\n//                    It.IsAny<IDictionary<string, string>>(),\n//                    It.IsAny<CancellationToken>()))\n//                .Returns(tcsResponse.Task);\n\n//            var ctx = new Mock<TwitterContext>(execMock.Object);\n//            ctx.Setup(mock => mock.TweetAsync(null, TweetMode.Extended))\n//                .ThrowsAsync(new ArgumentException());\n//        }\n\n//        [TestMethod]\n//        public async Task TweetAsync_Sets_StatusIDAsync()\n//        {\n//            const string Status = \"Hello\";\n//            const ulong ExpectedStatusID = 184835136037191681ul;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            Status actual = await ctx.TweetAsync(Status);\n\n//            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n//        }\n\n//        [TestMethod]\n//        public async Task TweetAsync_Sets_StatusIDAndAttachmentUrlAsync()\n//        {\n//            const string Status = \"Hello\";\n//            const ulong ExpectedStatusID = 184835136037191681ul;\n//            const string AttachmentUrl = \"http://t.co/abc123\";\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            Status actual = await ctx.TweetAsync(Status, AttachmentUrl);\n\n//            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n//        }\n\n//        [TestMethod]\n//        public async Task TweetAsync_WithMediaIds_ReturnsStatusAsync()\n//        {\n//            const string Status = \"Hello\";\n//            const ulong ExpectedStatusID = 184835136037191681ul;\n//            var mediaIds = new List<ulong> { 1, 2, 3 };\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            Status actual = await ctx.TweetAsync(Status, mediaIds);\n\n//            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n//        }\n\n//        [TestMethod]\n//        public async Task DeleteTweetAsync_WithRawResult_SucceedsAsync()\n//        {\n//            const ulong Id = 184835136037191681ul;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            await ctx.DeleteTweetAsync(Id);\n\n//            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n//        }\n\n//        [TestMethod]\n//        public async Task DeleteTweetAsync_Sets_IDAsync()\n//        {\n//            const ulong Id = 184835136037191681ul;\n//            const ulong ExpectedStatusID = 184835136037191681ul;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            Status actual = await ctx.DeleteTweetAsync(Id);\n\n//            Assert.AreEqual(ExpectedStatusID, actual.StatusID);\n//        }\n\n//        [TestMethod]\n//        public async Task DeleteTweetAsync_WithRawResults_SucceedsAsync()\n//        {\n//            const ulong Id = 184835136037191681ul;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            await ctx.DeleteTweetAsync(Id);\n\n//            Assert.AreEqual(SingleStatusResponse, ctx.RawResult);\n//        }\n\n//        [TestMethod]\n//        public async Task DeleteTweetAsync_Throws_On_Zero_IDAsync()\n//        {\n//            const ulong ID = 0;\n//            var ctx = await InitializeTwitterContextAsync();\n\n//            var ex = await L2TAssert.Throws<ArgumentException>(\n//                async () => await ctx.DeleteTweetAsync(ID));\n\n//            Assert.AreEqual(\"tweetID\", ex.ParamName);\n//        }\n\n//        const string SingleStatusResponse = @\"{\n//      \"\"retweeted\"\":false,\n//      \"\"in_reply_to_screen_name\"\":null,\n//      \"\"possibly_sensitive\"\":false,\n//      \"\"retweeted_status\"\":{\n//         \"\"retweeted\"\":false,\n//         \"\"in_reply_to_screen_name\"\":null,\n//         \"\"possibly_sensitive\"\":false,\n//         \"\"contributors\"\":null,\n//         \"\"coordinates\"\":null,\n//         \"\"place\"\":null,\n//         \"\"user\"\":{\n//            \"\"id\"\":41754227,\n//            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n//            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n//            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n//            \"\"followers_count\"\":57222,\n//            \"\"default_profile\"\":true,\n//            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n//            \"\"lang\"\":\"\"en\"\",\n//            \"\"utc_offset\"\":-28800,\n//            \"\"name\"\":\"\"Scott Guthrie\"\",\n//            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n//            \"\"location\"\":\"\"Redmond, WA\"\",\n//            \"\"profile_link_color\"\":\"\"0084B4\"\",\n//            \"\"listed_count\"\":4390,\n//            \"\"verified\"\":false,\n//            \"\"protected\"\":false,\n//            \"\"profile_use_background_image\"\":true,\n//            \"\"is_translator\"\":false,\n//            \"\"following\"\":false,\n//            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n//            \"\"profile_text_color\"\":\"\"333333\"\",\n//            \"\"statuses_count\"\":3054,\n//            \"\"screen_name\"\":\"\"scottgu\"\",\n//            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n//            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n//            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n//            \"\"friends_count\"\":86,\n//            \"\"default_profile_image\"\":false,\n//            \"\"contributors_enabled\"\":false,\n//            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n//            \"\"id_str\"\":\"\"41754227\"\",\n//            \"\"geo_enabled\"\":false,\n//            \"\"favourites_count\"\":44,\n//            \"\"profile_background_tile\"\":false,\n//            \"\"notifications\"\":false,\n//            \"\"show_all_inline_media\"\":false,\n//            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n//            \"\"follow_request_sent\"\":false\n//         },\n//         \"\"retweet_count\"\":393,\n//         \"\"id_str\"\":\"\"184793217231880192\"\",\n//         \"\"in_reply_to_user_id\"\":null,\n//         \"\"favorited\"\":false,\n//         \"\"in_reply_to_status_id_str\"\":null,\n//         \"\"in_reply_to_status_id\"\":null,\n//         \"\"source\"\":\"\"web\"\",\n//         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n//         \"\"in_reply_to_user_id_str\"\":null,\n//         \"\"truncated\"\":false,\n//         \"\"id\"\":184793217231880192,\n//         \"\"geo\"\":null,\n//         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n//      },\n//      \"\"contributors\"\":null,\n//      \"\"coordinates\"\":null,\n//      \"\"place\"\":null,\n//      \"\"user\"\":{\n//         \"\"id\"\":15411837,\n//         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n//         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n//         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n//         \"\"followers_count\"\":1102,\n//         \"\"default_profile\"\":false,\n//         \"\"profile_background_color\"\":\"\"0099B9\"\",\n//         \"\"lang\"\":\"\"en\"\",\n//         \"\"utc_offset\"\":-25200,\n//         \"\"name\"\":\"\"Joe Mayo\"\",\n//         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n//         \"\"location\"\":\"\"Denver, CO\"\",\n//         \"\"profile_link_color\"\":\"\"0099B9\"\",\n//         \"\"listed_count\"\":112,\n//         \"\"verified\"\":false,\n//         \"\"protected\"\":false,\n//         \"\"profile_use_background_image\"\":true,\n//         \"\"is_translator\"\":false,\n//         \"\"following\"\":true,\n//         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n//         \"\"profile_text_color\"\":\"\"3C3940\"\",\n//         \"\"statuses_count\"\":1906,\n//         \"\"screen_name\"\":\"\"JoeMayo\"\",\n//         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n//         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n//         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n//         \"\"friends_count\"\":211,\n//         \"\"default_profile_image\"\":false,\n//         \"\"contributors_enabled\"\":false,\n//         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n//         \"\"id_str\"\":\"\"15411837\"\",\n//         \"\"geo_enabled\"\":true,\n//         \"\"favourites_count\"\":44,\n//         \"\"profile_background_tile\"\":false,\n//         \"\"notifications\"\":true,\n//         \"\"show_all_inline_media\"\":false,\n//         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n//         \"\"follow_request_sent\"\":false\n//      },\n//      \"\"retweet_count\"\":393,\n//      \"\"id_str\"\":\"\"184835136037191681\"\",\n//      \"\"in_reply_to_user_id\"\":null,\n//      \"\"favorited\"\":false,\n//      \"\"in_reply_to_status_id_str\"\":null,\n//      \"\"in_reply_to_status_id\"\":null,\n//      \"\"source\"\":\"\"web\"\",\n//      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n//      \"\"in_reply_to_user_id_str\"\":null,\n//      \"\"truncated\"\":false,\n//      \"\"id\"\":184835136037191681,\n//      \"\"geo\"\":null,\n//      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n//   }\";\n//    }\n//}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/StatusTests/StatusRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text.Json;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Common.Entities;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.StatusTests\n{\n    [TestClass]\n    public class StatusRequestProcessorTests\n    {\n        public StatusRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new StatusRequestProcessor<Status>();\n\n            Expression<Func<Status, bool>> expression =\n            status =>\n                status.Type == StatusType.Home &&\n                status.ID == 10 &&\n                status.UserID == 10 &&\n                status.ScreenName == \"JoeMayo\" &&\n                status.SinceID == 123 &&\n                status.MaxID == 456 &&\n                status.Count == 50 &&\n                status.Cursor == 789 &&\n                status.IncludeRetweets == true &&\n                status.ExcludeReplies == true &&\n                status.IncludeEntities == true &&\n                status.IncludeUserEntities == true &&\n                status.TrimUser == true &&\n                status.IncludeContributorDetails == true &&\n                status.IncludeMyRetweet == true &&\n                status.IncludeAltText == true &&\n                status.OEmbedUrl == \"http://myurl.com\" &&\n                status.OEmbedAlign == EmbeddedStatusAlignment.Center &&\n                status.OEmbedHideMedia == true &&\n                status.OEmbedHideThread == true &&\n                status.OEmbedLanguage == \"en\" &&\n                status.OEmbedMaxWidth == 300 &&\n                status.OEmbedOmitScript == true &&\n                status.OEmbedRelated == \"JoeMayo\" &&\n                status.TweetIDs == \"1,2,3\" &&\n                status.Map == true &&\n                status.TweetMode == TweetMode.Extended;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            var queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int) StatusType.Home).ToString())));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ID\", \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"UserID\", \"10\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"ScreenName\", \"JoeMayo\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"SinceID\", \"123\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"MaxID\", \"456\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Count\", \"50\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(\"Cursor\", \"789\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeRetweets\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"ExcludeReplies\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeUserEntities\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TrimUser\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeContributorDetails\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"IncludeMyRetweet\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(Status.IncludeAltText), \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedUrl\", \"http://myurl.com\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedAlign\", ((int) EmbeddedStatusAlignment.Center).ToString())));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideMedia\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedHideThread\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedLanguage\", \"en\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedMaxWidth\", \"300\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedOmitScript\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"OEmbedRelated\", \"JoeMayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TweetIDs\", \"1,2,3\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"Map\", \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(\"TweetMode\", ((int) TweetMode.Extended).ToString())));\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Mentions_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/mentions_timeline.json?since_id=123&max_id=145&count=50&tweet_mode=extended\";\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Mentions).ToString() },\n                { \"SinceID\", \"123\" },\n                { \"MaxID\", \"145\" },\n                { \"Count\", \"50\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = statProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_User_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&user_id=15411837&screen_name=JoeMayo&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Home_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/home_timeline.json?count=5&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Home).ToString() },\n                { \"Count\", \"5\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_IncludeRetweets_On_User_Timeline()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=true\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", \"True\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_False_Include_Rts_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/user_timeline.json?id=15411837&include_rts=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.User).ToString() },\n                { \"ID\", \"15411837\" },\n                { \"IncludeRetweets\", false.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_OEmbed()\n        {\n            const string ExpectedUrl = \"https://publish.twitter.com/oembed?id=1&url=abc&maxwidth=300&hide_media=true&hide_thread=true&omit_script=true&align=left&related=JoeMayo%2CTwitterAPI&lang=en&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://publish.twitter.com/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Oembed).ToString() },\n                { \"ID\", \"1\" },\n                { \"OEmbedUrl\", \"abc\" },\n                { \"OEmbedMaxWidth\", \"300\" },\n                { \"OEmbedHideMedia\", true.ToString() },\n                { \"OEmbedHideThread\", true.ToString() },\n                { \"OEmbedOmitScript\", true.ToString() },\n                { \"OEmbedAlign\", ((int)EmbeddedStatusAlignment.Left).ToString() },\n                { \"OEmbedRelated\", \"JoeMayo, TwitterAPI\" },\n                { \"OEmbedLanguage\", \"en\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Returns_Url_For_RetweetsOfMe()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?since_id=2&max_id=3&count=1&include_entities=true&include_user_entities=true&trim_user=true&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Oembed,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"Count\", \"1\" },\n                { \"SinceID\", \"2\" },\n                { \"MaxID\", \"3\" },\n                { \"TrimUser\", true.ToString() },\n                { \"IncludeEntities\", true.ToString() },\n                { \"IncludeUserEntities\", true.ToString() },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Includes_False_IncludeUserEntities_Param()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweets_of_me.json?include_user_entities=false\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.RetweetsOfMe).ToString() },\n                { \"IncludeUserEntities\", false.ToString() },\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Retweeters_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=5&cursor=7&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                { \"ID\", \"5\" },\n                { \"Cursor\", \"7\" },\n                { nameof(Status.TweetMode), ((int)TweetMode.Extended).ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode_Retweeters()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=5&cursor=7&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                { \"ID\", \"5\" },\n                { \"Cursor\", \"7\" },\n                { nameof(Status.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_String_TweetMode()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/statuses/home_timeline.json?count=5&tweet_mode=extended\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.User,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Home).ToString() },\n                { \"Count\", \"5\" },\n                { nameof(Status.TweetMode), TweetMode.Extended.ToString().ToLower() } // \"extended\" string, not \"1\"\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_RetweetedBy_Throws_On_Missing_ID()\n        {\n            const string ExpectedParam = \"ID\";\n            var reqProc = new StatusRequestProcessor<Status>\n            {\n                Type = StatusType.Retweeters,\n                BaseUrl = \"https://api.twitter.com/1.1/\"\n            };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)StatusType.Retweeters).ToString() },\n                //{ \"ID\", \"123\" },\n                { \"Cursor\", \"25\" }\n            };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParam, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var statusReqProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => statusReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Parameter()\n        {\n            var target = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var ex = L2TAssert.Throws<ArgumentException>(() => target.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void StatusRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var statProc = new StatusRequestProcessor<Status> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            Assert.IsInstanceOfType(statProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Multiple_Statuses()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Home, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleStatusResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(3, statuses.Count);\n            var status = statuses.First();\n            Assert.IsNotNull(status);\n            Assert.IsTrue(status.Retweeted);\n            Assert.IsNull(status.InReplyToScreenName);\n            Assert.IsFalse(status.PossiblySensitive);\n            var retweetedStatus = status.RetweetedStatus;\n            Assert.IsNotNull(retweetedStatus);\n            Assert.IsNotNull(retweetedStatus.Text);\n            Assert.IsTrue(retweetedStatus.Text.StartsWith(\"I just blogged about\"));\n            var contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsFalse(contributors.Any());\n            var coords = status.Coordinates;\n            Assert.IsNotNull(coords);\n            Assert.AreEqual(-122.40060, coords.Longitude);\n            Assert.AreEqual(37.78215, coords.Latitude);\n            Assert.IsNotNull(status.Place);\n            Assert.IsNull(status.Place.Name);\n            Assert.IsNotNull(status.User);\n            Assert.AreEqual(\"Joe Mayo\", status.User.Name);\n            Assert.AreEqual(393, status.RetweetCount);\n            Assert.AreEqual(184835136037191681ul, status.StatusID);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsFalse(status.Favorited);\n            Assert.AreEqual(0ul, status.InReplyToStatusID);\n            Assert.AreEqual(\"web\", status.Source);\n            Assert.AreEqual(new DateTime(2012, 3, 28, 2, 51, 45), status.CreatedAt);\n            Assert.AreEqual(0ul, status.InReplyToUserID);\n            Assert.IsFalse(status.Truncated);\n            Assert.IsNotNull(status.Text);\n            Assert.IsTrue(status.Text.StartsWith(\"RT @scottgu: I just blogged about\"));\n            Assert.IsNotNull(status.Annotation);\n            Assert.IsFalse(status.Annotation.Attributes.Any());\n            Assert.IsNotNull(status.Entities);\n            Assert.IsNotNull(status.Entities.HashTagEntities);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Multiple_Users()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Retweeters, BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var statuses = statProc.ProcessResults(MultipleUsersResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            var users = status.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(5, users.Count);\n            ulong user = users.First();\n            Assert.AreEqual(34649740ul, user);\n            var cursor = status.CursorMovement;\n            Assert.IsNotNull(cursor);\n            Assert.AreEqual(123L, cursor.Next);\n            Assert.AreEqual(456L, cursor.Previous);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var statProc = new StatusRequestProcessor<Status>() { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            var stats = statProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, stats.Count);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_An_Embedded_Status()\n        {\n            var statProc = new StatusRequestProcessor<Status> { Type = StatusType.Oembed, BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string ExpectedType = \"rich\";\n            const ulong ExpectedCacheAge = 3153600000;\n            const string ExpectedVersion = \"1.0\";\n            const string ExpectedProviderName = \"Twitter\";\n            const string ExpectedUrl = \"https://twitter.com/JoeMayo/statuses/305050067973312514\";\n            const int ExpectedWidth = 550;\n            const int ExpectedHeight = 0;\n            const string ExpectedHtml = \"some html\";\n            const string ExpectedProviderUrl = \"https://twitter.com\";\n            const string ExpectedAuthorUrl = \"https://twitter.com/JoeMayo\";\n            const string ExpectedAuthorName = \"Joe Mayo\";\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            var embeddedStatus = status.EmbeddedStatus;\n            Assert.IsNotNull(embeddedStatus);\n            Assert.AreEqual(ExpectedType, embeddedStatus.Type);\n            Assert.AreEqual(ExpectedCacheAge, embeddedStatus.CacheAge);\n            Assert.AreEqual(ExpectedVersion, embeddedStatus.Version);\n            Assert.AreEqual(ExpectedProviderName, embeddedStatus.ProviderName);\n            Assert.AreEqual(ExpectedUrl, embeddedStatus.Url);\n            Assert.AreEqual(ExpectedWidth, embeddedStatus.Width);\n            Assert.AreEqual(ExpectedHeight, embeddedStatus.Height);\n            Assert.AreEqual(ExpectedHtml, embeddedStatus.Html);\n            Assert.AreEqual(ExpectedProviderUrl, embeddedStatus.ProviderUrl);\n            Assert.AreEqual(ExpectedAuthorUrl, embeddedStatus.AuthorUrl);\n            Assert.AreEqual(ExpectedAuthorName, embeddedStatus.AuthorName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_EmbeddedStatus_Parameters()\n        {\n            var statProc = new StatusRequestProcessor<Status>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = StatusType.Oembed,\n                ID = 123,\n                OEmbedUrl = \"http://myurl.com\",\n                OEmbedMaxWidth = 300,\n                OEmbedHideMedia = true,\n                OEmbedHideThread = true,\n                OEmbedOmitScript = true,\n                OEmbedAlign = EmbeddedStatusAlignment.Left,\n                OEmbedRelated = \"JoeMayo,TwitterAPI\",\n                OEmbedLanguage = \"en\"\n            };\n\n            var statuses = statProc.ProcessResults(OEmbedResponse);\n\n            Assert.IsNotNull(statuses);\n            Assert.AreEqual(1, statuses.Count);\n            var status = statuses.Single();\n            Assert.IsNotNull(status);\n            Assert.AreEqual(StatusType.Oembed, status.Type);\n            Assert.AreEqual(123ul, status.ID);\n            Assert.AreEqual(\"http://myurl.com\", status.OEmbedUrl);\n            Assert.AreEqual(300, status.OEmbedMaxWidth);\n            Assert.IsTrue(status.OEmbedHideMedia);\n            Assert.IsTrue(status.OEmbedHideThread);\n            Assert.IsTrue(status.OEmbedOmitScript);\n            Assert.AreEqual(EmbeddedStatusAlignment.Left, status.OEmbedAlign);\n            Assert.AreEqual(\"JoeMayo,TwitterAPI\", status.OEmbedRelated);\n            Assert.AreEqual(\"en\", status.OEmbedLanguage);\n        }\n\n\n        [TestMethod]\n        public void StatusConstructor_WithRetweetedJsonString_SetsRetweetedToTrue()\n        {\n            var status = new Status(JsonDocument.Parse(SingleStatusWithRetweetResponse).RootElement);\n\n            Assert.IsNotNull(status);\n            Assert.IsTrue(status.Retweeted);\n        }\n\n        [TestMethod]\n        public void StatusConstructor_WithoutRetweetedJsonString_SetsRetweetedToFalse()\n        {\n            var status = new Status(JsonDocument.Parse(SingleStatusExtendedInExtendedMode).RootElement);\n\n            Assert.IsNotNull(status);\n            Assert.IsFalse(status.Retweeted);\n        }\n\n        #region Test Data\n        const string SingleStatusClassicResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string SingleStatusExtendedInCompatibilityMode = @\"{\n\t\t\"\"created_at\"\": \"\"Mon Jan 16 04:09:29 +0000 2017\"\",\n\t\t\"\"id\"\": 820845403897622528,\n\t\t\"\"id_str\"\": \"\"820845403897622528\"\",\n\t\t\"\"text\"\": \"\"@JoeMayo @amazonbooks @JoeMayo @linq2twitr 2016: The Year When Chatbots Were Hot  #Linq2Twitter \\u00a3 Sunday, January 1\\u2026 https:\\/\\/t.co\\/iGY1I49TM2\"\",\n\t\t\"\"truncated\"\": true,\n\t\t\"\"entities\"\": {\n\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\"\"text\"\": \"\"Linq2Twitter\"\",\n\t\t\t\t\t\"\"indices\"\": [82, 95]\n    }\n\t\t\t],\n\t\t\t\"\"symbols\"\": [],\n\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [0, 8]\n}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"amazonbooks\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Amazon Books\"\",\n\t\t\t\t\t\"\"id\"\": 14172201,\n\t\t\t\t\t\"\"id_str\"\": \"\"14172201\"\",\n\t\t\t\t\t\"\"indices\"\": [9, 21]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [22, 30]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\"\"indices\"\": [31, 42]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/iGY1I49TM2\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/i\\/web\\/status\\/820845403897622528\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"twitter.com\\/i\\/web\\/status\\/8\\u2026\"\",\n\t\t\t\t\t\"\"indices\"\": [117, 140]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eLINQ to Tweeter\\u003c\\/a\\u003e\"\",\n\t\t\"\"in_reply_to_status_id\"\": 806571633754284032,\n\t\t\"\"in_reply_to_status_id_str\"\": \"\"806571633754284032\"\",\n\t\t\"\"in_reply_to_user_id\"\": 15411837,\n\t\t\"\"in_reply_to_user_id_str\"\": \"\"15411837\"\",\n\t\t\"\"in_reply_to_screen_name\"\": \"\"JoeMayo\"\",\n\t\t\"\"user\"\": {\n\t\t\t\"\"id\"\": 45714308,\n\t\t\t\"\"id_str\"\": \"\"45714308\"\",\n\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\"\"screen_name\"\": \"\"Mayoster\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\"\"description\"\": \"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"indices\"\": [0, 22]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\"\"urls\"\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"\"protected\"\": true,\n\t\t\t\"\"followers_count\"\": 3,\n\t\t\t\"\"friends_count\"\": 16,\n\t\t\t\"\"listed_count\"\": 0,\n\t\t\t\"\"created_at\"\": \"\"Tue Jun 09 00:21:32 +0000 2009\"\",\n\t\t\t\"\"favourites_count\"\": 3,\n\t\t\t\"\"utc_offset\"\": -25200,\n\t\t\t\"\"time_zone\"\": \"\"Mountain Time (US & Canada)\"\",\n\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"statuses_count\"\": 36,\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\"\"is_translator\"\": false,\n\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\"\"profile_background_color\"\": \"\"FFF04D\"\",\n\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/45714308\\/1400306772\"\",\n\t\t\t\"\"profile_link_color\"\": \"\"0000FF\"\",\n\t\t\t\"\"profile_sidebar_border_color\"\": \"\"FFFFFF\"\",\n\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"E0FF92\"\",\n\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\"\"profile_use_background_image\"\": true,\n\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\"\"default_profile\"\": false,\n\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\"\"following\"\": false,\n\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\"\"notifications\"\": false,\n\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t},\n\t\t\"\"geo\"\": null,\n\t\t\"\"coordinates\"\": null,\n\t\t\"\"place\"\": null,\n\t\t\"\"contributors\"\": null,\n\t\t\"\"is_quote_status\"\": true,\n\t\t\"\"quoted_status_id\"\": 815351062295093248,\n\t\t\"\"quoted_status_id_str\"\": \"\"815351062295093248\"\",\n\t\t\"\"quoted_status\"\": {\n\t\t\t\"\"created_at\"\": \"\"Sun Jan 01 00:16:56 +0000 2017\"\",\n\t\t\t\"\"id\"\": 815351062295093248,\n\t\t\t\"\"id_str\"\": \"\"815351062295093248\"\",\n\t\t\t\"\"text\"\": \"\"\\u201c2016: The Year When Chatbots Were Hot\\u201d by @JoeMayo https:\\/\\/t.co\\/olTyx2NR1V https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\"\"truncated\"\": false,\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [43, 51]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/olTyx2NR1V\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"indices\"\": [52, 75]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"extended_entities\"\": {\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"http:\\/\\/bufferapp.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eBuffer\\u003c\\/a\\u003e\"\",\n\t\t\t\"\"in_reply_to_status_id\"\": null,\n\t\t\t\"\"in_reply_to_status_id_str\"\": null,\n\t\t\t\"\"in_reply_to_user_id\"\": null,\n\t\t\t\"\"in_reply_to_user_id_str\"\": null,\n\t\t\t\"\"in_reply_to_screen_name\"\": null,\n\t\t\t\"\"user\"\": {\n\t\t\t\t\"\"id\"\": 1666261482,\n\t\t\t\t\"\"id_str\"\": \"\"1666261482\"\",\n\t\t\t\t\"\"name\"\": \"\"Chatbots Life\"\",\n\t\t\t\t\"\"screen_name\"\": \"\"ChatBotsLife\"\",\n\t\t\t\t\"\"location\"\": \"\"San Francisco, CA\"\",\n\t\t\t\t\"\"description\"\": \"\"Latest on #ChatBots, #AI, & #Tech News. Learn what the #Chatbot Craze is all about! See our #Bot: https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [0, 23]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [98, 121]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"followers_count\"\": 13389,\n\t\t\t\t\"\"friends_count\"\": 39,\n\t\t\t\t\"\"listed_count\"\": 820,\n\t\t\t\t\"\"created_at\"\": \"\"Mon Aug 12 23:50:26 +0000 2013\"\",\n\t\t\t\t\"\"favourites_count\"\": 1932,\n\t\t\t\t\"\"utc_offset\"\": -28800,\n\t\t\t\t\"\"time_zone\"\": \"\"Pacific Time (US & Canada)\"\",\n\t\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"statuses_count\"\": 50133,\n\t\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\t\"\"is_translator\"\": false,\n\t\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\t\"\"profile_background_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/1666261482\\/1475354021\"\",\n\t\t\t\t\"\"profile_link_color\"\": \"\"89C9FA\"\",\n\t\t\t\t\"\"profile_sidebar_border_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_use_background_image\"\": false,\n\t\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\t\"\"default_profile\"\": false,\n\t\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\t\"\"following\"\": false,\n\t\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\t\"\"notifications\"\": false,\n\t\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t\t},\n\t\t\t\"\"geo\"\": null,\n\t\t\t\"\"coordinates\"\": null,\n\t\t\t\"\"place\"\": null,\n\t\t\t\"\"contributors\"\": null,\n\t\t\t\"\"is_quote_status\"\": false,\n\t\t\t\"\"retweet_count\"\": 3,\n\t\t\t\"\"favorite_count\"\": 2,\n\t\t\t\"\"favorited\"\": false,\n\t\t\t\"\"retweeted\"\": false,\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\t\"\"lang\"\": \"\"en\"\"\n\t\t},\n\t\t\"\"retweet_count\"\": 0,\n\t\t\"\"favorite_count\"\": 0,\n\t\t\"\"favorited\"\": false,\n\t\t\"\"retweeted\"\": false,\n\t\t\"\"possibly_sensitive\"\": false,\n\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\"\"lang\"\": \"\"en\"\"\n\t}\";\n\n        const string SingleStatusExtendedInExtendedMode = @\"{\n\t\t\"\"created_at\"\": \"\"Mon Jan 16 04:09:29 +0000 2017\"\",\n\t\t\"\"id\"\": 820845403897622528,\n\t\t\"\"id_str\"\": \"\"820845403897622528\"\",\n\t\t\"\"full_text\"\": \"\"@JoeMayo @amazonbooks @JoeMayo @linq2twitr 2016: The Year When Chatbots Were Hot  #Linq2Twitter \\u00a3 Sunday, January 15, 2017 https:\\/\\/t.co\\/E0k68kBiV9\"\",\n\t\t\"\"truncated\"\": false,\n\t\t\"\"display_text_range\"\": [22, 122],\n\t\t\"\"entities\"\": {\n\t\t\t\"\"hashtags\"\": [{\n\t\t\t\t\t\"\"text\"\": \"\"Linq2Twitter\"\",\n\t\t\t\t\t\"\"indices\"\": [82, 95]\n    }\n\t\t\t],\n\t\t\t\"\"symbols\"\": [],\n\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [0, 8]\n}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"amazonbooks\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Amazon Books\"\",\n\t\t\t\t\t\"\"id\"\": 14172201,\n\t\t\t\t\t\"\"id_str\"\": \"\"14172201\"\",\n\t\t\t\t\t\"\"indices\"\": [9, 21]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\"\"indices\"\": [22, 30]\n\t\t\t\t}, {\n\t\t\t\t\t\"\"screen_name\"\": \"\"Linq2Twitr\"\",\n\t\t\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\t\t\"\"id\"\": 16761255,\n\t\t\t\t\t\"\"id_str\"\": \"\"16761255\"\",\n\t\t\t\t\t\"\"indices\"\": [31, 42]\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/E0k68kBiV9\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"twitter.com\\/ChatBotsLife\\/s\\u2026\"\",\n\t\t\t\t\t\"\"indices\"\": [123, 146]\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eLINQ to Tweeter\\u003c\\/a\\u003e\"\",\n\t\t\"\"in_reply_to_status_id\"\": 806571633754284032,\n\t\t\"\"in_reply_to_status_id_str\"\": \"\"806571633754284032\"\",\n\t\t\"\"in_reply_to_user_id\"\": 15411837,\n\t\t\"\"in_reply_to_user_id_str\"\": \"\"15411837\"\",\n\t\t\"\"in_reply_to_screen_name\"\": \"\"JoeMayo\"\",\n\t\t\"\"user\"\": {\n\t\t\t\"\"id\"\": 45714308,\n\t\t\t\"\"id_str\"\": \"\"45714308\"\",\n\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\"\"screen_name\"\": \"\"Mayoster\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\"\"description\"\": \"\"Testing the Account Profile Update with LINQ to Twitter.\"\",\n\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\"\"url\"\": \"\"http:\\/\\/t.co\\/RupxTeunbF\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"linqtotwitter.codeplex.com\"\",\n\t\t\t\t\t\t\t\"\"indices\"\": [0, 22]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\"\"urls\"\": []\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"\"protected\"\": true,\n\t\t\t\"\"followers_count\"\": 3,\n\t\t\t\"\"friends_count\"\": 16,\n\t\t\t\"\"listed_count\"\": 0,\n\t\t\t\"\"created_at\"\": \"\"Tue Jun 09 00:21:32 +0000 2009\"\",\n\t\t\t\"\"favourites_count\"\": 3,\n\t\t\t\"\"utc_offset\"\": -25200,\n\t\t\t\"\"time_zone\"\": \"\"Mountain Time (US & Canada)\"\",\n\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"statuses_count\"\": 36,\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\"\"is_translator\"\": false,\n\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\"\"profile_background_color\"\": \"\"FFF04D\"\",\n\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_background_images\\/655924105510715393\\/j09ZFaZ4.png\"\",\n\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/526949387688484864\\/CWWAuTPO_normal.png\"\",\n\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/45714308\\/1400306772\"\",\n\t\t\t\"\"profile_link_color\"\": \"\"0000FF\"\",\n\t\t\t\"\"profile_sidebar_border_color\"\": \"\"FFFFFF\"\",\n\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"E0FF92\"\",\n\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\"\"profile_use_background_image\"\": true,\n\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\"\"default_profile\"\": false,\n\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\"\"following\"\": false,\n\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\"\"notifications\"\": false,\n\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t},\n\t\t\"\"geo\"\": null,\n\t\t\"\"coordinates\"\": null,\n\t\t\"\"place\"\": null,\n\t\t\"\"contributors\"\": null,\n\t\t\"\"is_quote_status\"\": true,\n\t\t\"\"quoted_status_id\"\": 815351062295093248,\n\t\t\"\"quoted_status_id_str\"\": \"\"815351062295093248\"\",\n\t\t\"\"quoted_status\"\": {\n\t\t\t\"\"created_at\"\": \"\"Sun Jan 01 00:16:56 +0000 2017\"\",\n\t\t\t\"\"id\"\": 815351062295093248,\n\t\t\t\"\"id_str\"\": \"\"815351062295093248\"\",\n\t\t\t\"\"full_text\"\": \"\"\\u201c2016: The Year When Chatbots Were Hot\\u201d by @JoeMayo https:\\/\\/t.co\\/olTyx2NR1V https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\"\"truncated\"\": false,\n\t\t\t\"\"display_text_range\"\": [0, 75],\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [{\n\t\t\t\t\t\t\"\"screen_name\"\": \"\"JoeMayo\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\t\t\"\"id\"\": 15411837,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"15411837\"\",\n\t\t\t\t\t\t\"\"indices\"\": [43, 51]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/olTyx2NR1V\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"buff.ly\\/2hAmG6A\"\",\n\t\t\t\t\t\t\"\"indices\"\": [52, 75]\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"extended_entities\"\": {\n\t\t\t\t\"\"media\"\": [{\n\t\t\t\t\t\t\"\"id\"\": 815351059719868418,\n\t\t\t\t\t\t\"\"id_str\"\": \"\"815351059719868418\"\",\n\t\t\t\t\t\t\"\"indices\"\": [76, 99],\n\t\t\t\t\t\t\"\"media_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"media_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/media\\/C1C1eAnXUAIC3YU.jpg\"\",\n\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"pic.twitter.com\\/lPbBPrVjRQ\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/twitter.com\\/ChatBotsLife\\/status\\/815351062295093248\\/photo\\/1\"\",\n\t\t\t\t\t\t\"\"type\"\": \"\"photo\"\",\n\t\t\t\t\t\t\"\"sizes\"\": {\n\t\t\t\t\t\t\t\"\"medium\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"thumb\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 150,\n\t\t\t\t\t\t\t\t\"\"h\"\": 150,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"crop\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"large\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 800,\n\t\t\t\t\t\t\t\t\"\"h\"\": 266,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\"small\"\": {\n\t\t\t\t\t\t\t\t\"\"w\"\": 680,\n\t\t\t\t\t\t\t\t\"\"h\"\": 226,\n\t\t\t\t\t\t\t\t\"\"resize\"\": \"\"fit\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"source\"\": \"\"\\u003ca href=\\\"\"http:\\/\\/bufferapp.com\\\"\" rel=\\\"\"nofollow\\\"\"\\u003eBuffer\\u003c\\/a\\u003e\"\",\n\t\t\t\"\"in_reply_to_status_id\"\": null,\n\t\t\t\"\"in_reply_to_status_id_str\"\": null,\n\t\t\t\"\"in_reply_to_user_id\"\": null,\n\t\t\t\"\"in_reply_to_user_id_str\"\": null,\n\t\t\t\"\"in_reply_to_screen_name\"\": null,\n\t\t\t\"\"user\"\": {\n\t\t\t\t\"\"id\"\": 1666261482,\n\t\t\t\t\"\"id_str\"\": \"\"1666261482\"\",\n\t\t\t\t\"\"name\"\": \"\"Chatbots Life\"\",\n\t\t\t\t\"\"screen_name\"\": \"\"ChatBotsLife\"\",\n\t\t\t\t\"\"location\"\": \"\"San Francisco, CA\"\",\n\t\t\t\t\"\"description\"\": \"\"Latest on #ChatBots, #AI, & #Tech News. Learn what the #Chatbot Craze is all about! See our #Bot: https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/49T79PfuUm\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https:\\/\\/ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"ChatbotsLife.com\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [0, 23]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https:\\/\\/t.co\\/jJzBD3ygWJ\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http:\\/\\/m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"m.me\\/ChatbotsLife\"\",\n\t\t\t\t\t\t\t\t\"\"indices\"\": [98, 121]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"followers_count\"\": 13389,\n\t\t\t\t\"\"friends_count\"\": 39,\n\t\t\t\t\"\"listed_count\"\": 820,\n\t\t\t\t\"\"created_at\"\": \"\"Mon Aug 12 23:50:26 +0000 2013\"\",\n\t\t\t\t\"\"favourites_count\"\": 1932,\n\t\t\t\t\"\"utc_offset\"\": -28800,\n\t\t\t\t\"\"time_zone\"\": \"\"Pacific Time (US & Canada)\"\",\n\t\t\t\t\"\"geo_enabled\"\": true,\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"statuses_count\"\": 50133,\n\t\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\t\"\"contributors_enabled\"\": false,\n\t\t\t\t\"\"is_translator\"\": false,\n\t\t\t\t\"\"is_translation_enabled\"\": false,\n\t\t\t\t\"\"profile_background_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_background_image_url\"\": \"\"http:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_image_url_https\"\": \"\"https:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n\t\t\t\t\"\"profile_background_tile\"\": false,\n\t\t\t\t\"\"profile_image_url\"\": \"\"http:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_image_url_https\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_images\\/782224386744999936\\/sXFWxq_x_normal.jpg\"\",\n\t\t\t\t\"\"profile_banner_url\"\": \"\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/1666261482\\/1475354021\"\",\n\t\t\t\t\"\"profile_link_color\"\": \"\"89C9FA\"\",\n\t\t\t\t\"\"profile_sidebar_border_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_sidebar_fill_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_text_color\"\": \"\"000000\"\",\n\t\t\t\t\"\"profile_use_background_image\"\": false,\n\t\t\t\t\"\"has_extended_profile\"\": false,\n\t\t\t\t\"\"default_profile\"\": false,\n\t\t\t\t\"\"default_profile_image\"\": false,\n\t\t\t\t\"\"following\"\": false,\n\t\t\t\t\"\"follow_request_sent\"\": false,\n\t\t\t\t\"\"notifications\"\": false,\n\t\t\t\t\"\"translator_type\"\": \"\"none\"\"\n\t\t\t},\n\t\t\t\"\"geo\"\": null,\n\t\t\t\"\"coordinates\"\": null,\n\t\t\t\"\"place\"\": null,\n\t\t\t\"\"contributors\"\": null,\n\t\t\t\"\"is_quote_status\"\": false,\n\t\t\t\"\"retweet_count\"\": 3,\n\t\t\t\"\"favorite_count\"\": 2,\n\t\t\t\"\"favorited\"\": false,\n\t\t\t\"\"retweeted\"\": false,\n\t\t\t\"\"possibly_sensitive\"\": false,\n\t\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\t\"\"lang\"\": \"\"en\"\"\n\t\t},\n\t\t\"\"retweet_count\"\": 0,\n\t\t\"\"favorite_count\"\": 0,\n\t\t\"\"favorited\"\": false,\n\t\t\"\"retweeted\"\": false,\n\t\t\"\"possibly_sensitive\"\": false,\n\t\t\"\"possibly_sensitive_appealable\"\": false,\n\t\t\"\"lang\"\": \"\"en\"\"\n\t}\";\n\n        const string MultipleStatusResponse = @\"[\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":0,\n      \"\"id_str\"\":\"\"184374428111601664\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Mon Mar 26 20:21:03 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184374428111601664,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Speaking at Twin Cities Code Camp: http:\\/\\/t.co\\/3tJz5vPW #tccc12\"\"\n   },\n   {\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":1,\n      \"\"id_str\"\":\"\"183620070084325376\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Sat Mar 24 18:23:30 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":183620070084325376,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"Free ebook: Introducing Microsoft SQL Server 2012: http:\\/\\/t.co\\/VZ52WIZf\"\"\n   }\n]\";\n\n        const string SingleStatusWithRetweetResponse = @\"{\n      \"\"retweeted\"\":false,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"possibly_sensitive\"\":false,\n      \"\"retweeted_status\"\":{\n         \"\"retweeted\"\":false,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"coordinates\"\":null,\n         \"\"place\"\":null,\n         \"\"user\"\":{\n            \"\"id\"\":41754227,\n            \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"url\"\":\"\"http:\\/\\/weblogs.asp.net\\/scottgu\"\",\n            \"\"created_at\"\":\"\"Fri May 22 04:39:35 +0000 2009\"\",\n            \"\"followers_count\"\":57222,\n            \"\"default_profile\"\":true,\n            \"\"profile_background_color\"\":\"\"C0DEED\"\",\n            \"\"lang\"\":\"\"en\"\",\n            \"\"utc_offset\"\":-28800,\n            \"\"name\"\":\"\"Scott Guthrie\"\",\n            \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"location\"\":\"\"Redmond, WA\"\",\n            \"\"profile_link_color\"\":\"\"0084B4\"\",\n            \"\"listed_count\"\":4390,\n            \"\"verified\"\":false,\n            \"\"protected\"\":false,\n            \"\"profile_use_background_image\"\":true,\n            \"\"is_translator\"\":false,\n            \"\"following\"\":false,\n            \"\"description\"\":\"\"I live in Seattle and build a few products for Microsoft\"\",\n            \"\"profile_text_color\"\":\"\"333333\"\",\n            \"\"statuses_count\"\":3054,\n            \"\"screen_name\"\":\"\"scottgu\"\",\n            \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/565139568\\/redshirt_normal.jpg\"\",\n            \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n            \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/images\\/themes\\/theme1\\/bg.png\"\",\n            \"\"friends_count\"\":86,\n            \"\"default_profile_image\"\":false,\n            \"\"contributors_enabled\"\":false,\n            \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n            \"\"id_str\"\":\"\"41754227\"\",\n            \"\"geo_enabled\"\":false,\n            \"\"favourites_count\"\":44,\n            \"\"profile_background_tile\"\":false,\n            \"\"notifications\"\":false,\n            \"\"show_all_inline_media\"\":false,\n            \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n            \"\"follow_request_sent\"\":false\n         },\n         \"\"retweet_count\"\":393,\n         \"\"id_str\"\":\"\"184793217231880192\"\",\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"favorited\"\":false,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"source\"\":\"\"web\"\",\n         \"\"created_at\"\":\"\"Wed Mar 28 00:05:10 +0000 2012\"\",\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"truncated\"\":false,\n         \"\"id\"\":184793217231880192,\n         \"\"geo\"\":null,\n         \"\"text\"\":\"\"I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n      },\n      \"\"contributors\"\":null,\n      \"\"coordinates\"\":{\n          \"\"type\"\":\"\"Point\"\",\n          \"\"coordinates\"\":[\n              -122.40060,\n              37.78215\n          ]\n      },\n      \"\"place\"\":null,\n      \"\"user\"\":{\n         \"\"id\"\":15411837,\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"url\"\":\"\"http:\\/\\/www.mayosoftware.com\"\",\n         \"\"created_at\"\":\"\"Sun Jul 13 04:35:50 +0000 2008\"\",\n         \"\"followers_count\"\":1102,\n         \"\"default_profile\"\":false,\n         \"\"profile_background_color\"\":\"\"0099B9\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-25200,\n         \"\"name\"\":\"\"Joe Mayo\"\",\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"location\"\":\"\"Denver, CO\"\",\n         \"\"profile_link_color\"\":\"\"0099B9\"\",\n         \"\"listed_count\"\":112,\n         \"\"verified\"\":false,\n         \"\"protected\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"is_translator\"\":false,\n         \"\"following\"\":true,\n         \"\"description\"\":\"\"Independent .NET Consultant; author of 6 books; Microsoft Visual C# MVP\"\",\n         \"\"profile_text_color\"\":\"\"3C3940\"\",\n         \"\"statuses_count\"\":1906,\n         \"\"screen_name\"\":\"\"JoeMayo\"\",\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1728197892\\/n536783050_1693444_2739826_normal.jpg\"\",\n         \"\"time_zone\"\":\"\"Mountain Time (US & Canada)\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/13330711\\/200xColor_2.png\"\",\n         \"\"friends_count\"\":211,\n         \"\"default_profile_image\"\":false,\n         \"\"contributors_enabled\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"5ED4DC\"\",\n         \"\"id_str\"\":\"\"15411837\"\",\n         \"\"geo_enabled\"\":true,\n         \"\"favourites_count\"\":44,\n         \"\"profile_background_tile\"\":false,\n         \"\"notifications\"\":true,\n         \"\"show_all_inline_media\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"95E8EC\"\",\n         \"\"follow_request_sent\"\":false\n      },\n      \"\"retweet_count\"\":393,\n      \"\"id_str\"\":\"\"184835136037191681\"\",\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"favorited\"\":false,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"source\"\":\"\"web\"\",\n      \"\"created_at\"\":\"\"Wed Mar 28 02:51:45 +0000 2012\"\",\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"truncated\"\":false,\n      \"\"id\"\":184835136037191681,\n      \"\"geo\"\":null,\n      \"\"text\"\":\"\"RT @scottgu: I just blogged about http:\\/\\/t.co\\/YWHGwOq6 MVC, Web API, Razor and Open Source - Now with Contributions: http:\\/\\/t.co\\/qpevLMZd\"\"\n   }\";\n\n        const string MultipleUsersResponse = @\"{\n   \"\"ids\"\":[\n      34649740,\n      6411122,\n      106069564,\n      152318142,\n      72197816\n   ],\n   \"\"next_cursor\"\":123,\n   \"\"next_cursor_str\"\":\"\"123\"\",\n   \"\"previous_cursor\"\":456,\n   \"\"previous_cursor_str\"\":\"\"456\"\"\n}\";\n\n        const string OEmbedResponse = @\"{\n   \"\"cache_age\"\":\"\"3153600000\"\",\n   \"\"url\"\":\"\"https://twitter.com/JoeMayo/statuses/305050067973312514\"\",\n   \"\"height\"\":null,\n   \"\"provider_url\"\":\"\"https://twitter.com\"\",\n   \"\"provider_name\"\":\"\"Twitter\"\",\n   \"\"author_name\"\":\"\"Joe Mayo\"\",\n   \"\"version\"\":\"\"1.0\"\",\n   \"\"author_url\"\":\"\"https://twitter.com/JoeMayo\"\",\n   \"\"type\"\":\"\"rich\"\",\n   \"\"html\"\":\"\"some html\"\",\n   \"\"width\"\":550\n}\";\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/StreamTests/StreamContentTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace LinqToTwitter.Tests.StreamContentTests\n{\n    [TestClass]\n    public class StreamContentTests\n    {\n\t\tconst string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n\t\tMock<ITwitterExecute> execMock = new();\n\n        public StreamContentTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n\t\t[TestMethod]\n\t\tpublic void GetParametersTest()\n\t\t{\n\t\t\tvar target = new StreamingRequestProcessor<Streaming>();\n\n\t\t\tvar endTime = new DateTime(2020, 8, 30);\n\t\t\tvar startTime = new DateTime(2020, 8, 1);\n\t\t\tExpression<Func<Streaming, bool>> expression =\n\t\t\t\ttweet =>\n\t\t\t\t\ttweet.Type == StreamingType.Filter &&\n\t\t\t\t\ttweet.BackfillMinutes == 5 &&\n\t\t\t\t\ttweet.Ids == \"2,3\" &&\n\t\t\t\t\ttweet.Expansions == \"attachments.poll_ids,author_id\" &&\n\t\t\t\t\ttweet.MediaFields == \"height,width\" &&\n\t\t\t\t\ttweet.PlaceFields == \"country\" &&\n\t\t\t\t\ttweet.PollFields == \"duration_minutes,end_datetime\" &&\n\t\t\t\t\ttweet.TweetFields == \"author_id,created_at\" &&\n\t\t\t\t\ttweet.UserFields == \"created_at,verified\";\n\n\t\t\tvar lambdaExpression = expression as LambdaExpression;\n\n\t\t\tDictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.Type), ((int)StreamingType.Filter).ToString(CultureInfo.InvariantCulture))));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.BackfillMinutes), \"5\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.Ids), \"2,3\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.Expansions), \"attachments.poll_ids,author_id\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.MediaFields), \"height,width\")));\n\t\t\tAssert.IsTrue(\n\t\t\t   queryParams.Contains(\n\t\t\t\t   new KeyValuePair<string, string>(nameof(Streaming.PlaceFields), \"country\")));\n\t\t\tAssert.IsTrue(\n\t\t\t   queryParams.Contains(\n\t\t\t\t   new KeyValuePair<string, string>(nameof(Streaming.PollFields), \"duration_minutes,end_datetime\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.TweetFields), \"author_id,created_at\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(Streaming.UserFields), \"created_at,verified\")));\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForFilterStream_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"tweets/search/stream?\" +\n\t\t\t\t\"backfill_minutes=5&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"ids=2%2C3&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new StreamingRequestProcessor<Streaming> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(Streaming.Type), StreamingType.Filter.ToString() },\n\t\t\t\t\t{ nameof(Streaming.BackfillMinutes), \"5\" },\n\t\t\t\t\t{ nameof(Streaming.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(Streaming.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(Streaming.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(Streaming.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(Streaming.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(Streaming.UserFields), \"created_at,verified\" },\n\t\t\t\t\t{ nameof(Streaming.Ids), \"2,3\" },\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void ParseJson_WithTweetEntity_Succeeds()\n        {\n            var content = new StreamContent(execMock.Object, TweetContent);\n\n            (StreamTweet entity, StreamEntityType entityType) = content.ParseJson(TweetContent);\n\n            Assert.IsNotNull(entity);\n            Assert.AreEqual(\"1439984798332866573\", entity.Tweet.ID);\n            Assert.IsTrue(entity.Tweet.Text.StartsWith(\"Very\"));\n            Assert.AreEqual(\"1324201416731160579\", entity.MatchingRules[0].ID);\n            Assert.AreEqual(\"funny things\", entity.MatchingRules[0].Tag);\n            Assert.AreEqual(StreamEntityType.Tweet, entityType);\n        }\n\n        const string TweetContent = @\"{\n\t\"\"data\"\": {\n\t\t\"\"id\"\": \"\"1439984798332866573\"\",\n\t\t\"\"text\"\": \"\"Very very true, Dev! ..😜😂💕\\n#Dev https://t.co/cHFjan\"\"\n\t},\n\t\"\"matching_rules\"\": [\n\t\t{\n\t\t\t\"\"id\"\": \"\"1324201416731160579\"\",\n\t\t\t\"\"tag\"\": \"\"funny things\"\"\n\n        }\n\t]\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/TrendsTests/TrendsRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.TrendsTests\n{\n    [TestClass]\n    public class TrendRequestProcessorTests\n    {\n        public TrendRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Collects_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend>();\n            Expression<Func<Trend, bool>> expression =\n                trend =>\n                    trend.Type == TrendType.Available &&\n                    trend.WoeID == 1 &&\n                    trend.Latitude == 1.2 &&\n                    trend.Longitude == 3.4 &&\n                    trend.Exclude == true;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = trendReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"WoeID\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Latitude\", \"1.2\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Longitude\", \"3.4\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Exclude\", \"True\")));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>()\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = TrendType.Place,\n                Exclude = true,\n                Latitude = 1.1,\n                Longitude = 2.2,\n                WoeID = 1\n            };\n\n            List<Trend> trends = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.IsNotNull(trends);\n            Assert.IsTrue(trends.Any());\n            Trend trend = trends.First();\n            Assert.IsNotNull(trend);\n            Assert.IsTrue(trend.Exclude);\n            Assert.AreEqual(1.1, trend.Latitude);\n            Assert.AreEqual(2.2, trend.Longitude);\n            Assert.AreEqual(1, trend.WoeID);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Handles_Available_Trends()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_AvailableTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/available.json\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Available).ToString(CultureInfo.InvariantCulture) }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_ClosestTrends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/closest.json?lat=37.78215&long=-122.40060\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Closest).ToString(CultureInfo.InvariantCulture) },\n                    { \"Latitude\", \"37.78215\" },\n                    { \"Longitude\", \"-122.40060\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Place_Trends_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/trends/place.json?id=1\";\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                    { \"WoeID\", \"1\" }\n                };\n\n            Request req = trendReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Place_Trends_WithoutWoeID()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { \"Type\", ((int)TrendType.Place).ToString(CultureInfo.InvariantCulture) },\n                };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"WoeID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_When_Type_Not_Provided()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_With_No_Parameters()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => trendReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Available()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Available };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            Trend trends = trendList.SingleOrDefault();\n            Assert.IsNotNull(trends);\n            List<Location> locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(2, locations.Count);\n            Location location = locations[0];\n            Assert.AreEqual(\"Country\", location.PlaceTypeName);\n            Assert.AreEqual(12, location.PlaceTypeNameCode);\n            Assert.AreEqual(\"Turkey\", location.Name);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/23424969\", location.Url);\n            Assert.AreEqual(23424969, location.WoeID);\n            Assert.AreEqual(\"TR\", location.CountryCode);\n            Assert.AreEqual(\"1\", location.ParentID);\n            Assert.AreEqual(\"Turkey\", location.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Handles_Closest()\n        {\n            var trendReqProc = new TrendRequestProcessor<Trend> { Type = TrendType.Closest };\n\n            List<Trend> trendList = trendReqProc.ProcessResults(TestAvailableOrClosestQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            Trend trends = trendList.SingleOrDefault();\n            Assert.IsNotNull(trends);\n            List<Location> locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(2, locations.Count);\n            Location location = locations[1];\n            Assert.IsNotNull(location);\n            Assert.AreEqual(\"Town\", location.PlaceTypeName);\n            Assert.AreEqual(7, location.PlaceTypeNameCode);\n            Assert.AreEqual(\"Birmingham\", location.Name);\n            Assert.AreEqual(\"http://where.yahooapis.com/v1/place/2364559\", location.Url);\n            Assert.AreEqual(2364559, location.WoeID);\n            Assert.AreEqual(\"US\", location.CountryCode);\n            Assert.AreEqual(\"23424977\", location.ParentID);\n            Assert.AreEqual(\"United States\", location.Country);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Location()\n        {\n            var trendProc = new TrendRequestProcessor<Trend> { Type = TrendType.Place };\n\n            List<Trend> trendList = trendProc.ProcessResults(TestTrendQueryResponse);\n\n            Assert.IsNotNull(trendList);\n            Trend trends = trendList.FirstOrDefault();\n            Assert.IsNotNull(trends);\n            List<Location> locations = trends.Locations;\n            Assert.IsNotNull(locations);\n            Assert.AreEqual(1, locations.Count);\n            Location location = locations[0];\n            Assert.AreEqual(\"Worldwide\", location.Name);\n            Assert.AreEqual(1, location.WoeID);\n            Assert.AreEqual(3700, trends.TweetVolume);\n            Assert.AreEqual(\"%22Julianna%20Margulies%22\", trends.Query);\n            Assert.AreEqual(\"Julianna Margulies\", trends.Name);\n            Assert.IsNull(trends.PromotedContent);\n            Assert.AreEqual(\"http://twitter.com/search/%22Julianna%20Margulies%22\", trends.SearchUrl);\n            Assert.IsNull(trends.Events);\n            Assert.AreEqual(new DateTime(2011, 9, 19, 2, 4, 39), trends.AsOf);\n            Assert.AreEqual(new DateTime(2011, 9, 19, 2, 0, 17), trends.CreatedAt);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var trendProc = new TrendRequestProcessor<Trend>();\n\n            List<Trend> trends = trendProc.ProcessResults(string.Empty);\n\n            Assert.AreEqual(0, trends.Count);\n        }\n\n        const string TestTrendQueryResponse = @\"[\n   {\n      \"\"as_of\"\":\"\"2011-09-19T02:04:39Z\"\",\n      \"\"locations\"\":[\n         {\n            \"\"name\"\":\"\"Worldwide\"\",\n            \"\"woeid\"\":1\n         }\n      ],\n      \"\"trends\"\":[\n         {\n            \"\"tweet_volume\"\": 3700,\n            \"\"query\"\":\"\"%22Julianna%20Margulies%22\"\",\n            \"\"name\"\":\"\"Julianna Margulies\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Julianna%20Margulies%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 4200,\n            \"\"query\"\":\"\"%23ThingsThatGetMeUpset\"\",\n            \"\"name\"\":\"\"#ThingsThatGetMeUpset\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ThingsThatGetMeUpset\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3200,\n            \"\"query\"\":\"\"%23ReasonsWeCantBeTogether\"\",\n            \"\"name\"\":\"\"#ReasonsWeCantBeTogether\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23ReasonsWeCantBeTogether\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 1200,\n            \"\"query\"\":\"\"%22Peter%20Dinklage%22\"\",\n            \"\"name\"\":\"\"Peter Dinklage\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Peter%20Dinklage%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 500,\n            \"\"query\"\":\"\"%22Connie%20Britton%22\"\",\n            \"\"name\"\":\"\"Connie Britton\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Connie%20Britton%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3100,\n            \"\"query\"\":\"\"%23100BestGogoSongs\"\",\n            \"\"name\"\":\"\"#100BestGogoSongs\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%23100BestGogoSongs\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3200,\n            \"\"query\"\":\"\"%22Kyle%20Chandler%22\"\",\n            \"\"name\"\":\"\"Kyle Chandler\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Kyle%20Chandler%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 7700,\n            \"\"query\"\":\"\"%22Tony%20Gonzalez%22\"\",\n            \"\"name\"\":\"\"Tony Gonzalez\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Tony%20Gonzalez%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 3700,\n            \"\"query\"\":\"\"%22Drew%20Barrymore%22\"\",\n            \"\"name\"\":\"\"Drew Barrymore\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Drew%20Barrymore%22\"\",\n            \"\"events\"\":null\n         },\n         {\n            \"\"tweet_volume\"\": 2200,\n            \"\"query\"\":\"\"%22Elisabeth%20Moss%22\"\",\n            \"\"name\"\":\"\"Elisabeth Moss\"\",\n            \"\"promoted_content\"\":null,\n            \"\"url\"\":\"\"http:\\/\\/twitter.com\\/search\\/%22Elisabeth%20Moss%22\"\",\n            \"\"events\"\":null\n         }\n      ],\n      \"\"created_at\"\":\"\"2011-09-19T02:00:17Z\"\"\n   }\n]\";\n\n        const string TestAvailableOrClosestQueryResponse = @\"[\n   {\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Country\"\",\n         \"\"code\"\":12\n      },\n      \"\"name\"\":\"\"Turkey\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/23424969\"\",\n      \"\"woeid\"\":23424969,\n      \"\"countryCode\"\":\"\"TR\"\",\n      \"\"parentid\"\":1,\n      \"\"country\"\":\"\"Turkey\"\"\n   },\n   {\n      \"\"name\"\":\"\"Birmingham\"\",\n      \"\"url\"\":\"\"http:\\/\\/where.yahooapis.com\\/v1\\/place\\/2364559\"\",\n      \"\"parentid\"\":23424977,\n      \"\"woeid\"\":2364559,\n      \"\"countryCode\"\":\"\"US\"\",\n      \"\"placeType\"\":{\n         \"\"name\"\":\"\"Town\"\",\n         \"\"code\"\":7\n      },\n      \"\"country\"\":\"\"United States\"\"\n   }\n]\";\n\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/TweetTests/TweetCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\n\nnamespace LinqToTwitter.Tests.StatusTests\n{\n    [TestClass]\n    public class TweetCommandsTests\n    {\n        public TweetCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        async Task<TwitterContext> InitializeTwitterContextAsync(string result)\n        {\n            await Task.Delay(1);\n            var authMock = new Mock<IAuthorizer>();\n            var execMock = new Mock<ITwitterExecute>();\n\n            var tcsAuth = new TaskCompletionSource<IAuthorizer>();\n            tcsAuth.SetResult(authMock.Object);\n\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(result);\n\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Put.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TweetHidden>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Post.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TweetRequest>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    HttpMethod.Delete.ToString(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TweetDeleteRequest>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_WithText_PopulatesResponse()\n        {\n            const string ExpectedText = \"Hello\";\n            const string ExpectedID = \"1460045236168654853\";\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            Tweet actual = await ctx.TweetAsync(ExpectedText);\n\n            Assert.AreEqual(ExpectedID, actual.ID);\n            Assert.AreEqual(ExpectedText, actual.Text);\n        }\n\n        [TestMethod]\n        public async Task TweetAsync_WithNullText_Throws()\n        {\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.TweetAsync(null));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetMediaAsync_WithMediaIds_Succeeds()\n        {\n            const string ExpectedText = \"Hello\";\n            const string ExpectedID = \"1460045236168654853\";\n\n            List<string> mediaIds = new() { \"521449660083609601\" };\n            List<string> taggedUserIds = new() { \"521449660083609601\" };\n\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            Tweet actual = await ctx.TweetMediaAsync(\"a\", mediaIds, taggedUserIds);\n\n            Assert.IsNotNull(actual);\n            Assert.AreEqual(ExpectedID, actual.ID);\n            Assert.AreEqual(ExpectedText, actual.Text);\n        }\n\n        [TestMethod]\n        public async Task TweetMediaAsync_WithoutMediaIds_Throws()\n        {\n            List<string> mediaIds = null;\n            List<string> taggedUserIds = new() { \"521449660083609601\" };\n\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.TweetMediaAsync(\"a\", mediaIds, taggedUserIds));\n\n            Assert.AreEqual(\"mediaIds\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetPollAsync_WithPollData_Succeeds()\n        {\n            const string ExpectedText = \"Hello\";\n            const string ExpectedID = \"1460045236168654853\";\n\n            int duration = 360;\n            List<string> options = new() { \"ein\", \"zwei\", \"drei\" };\n\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            Tweet actual = await ctx.TweetPollAsync(\"a\", duration, options);\n\n            Assert.IsNotNull(actual);\n            Assert.AreEqual(ExpectedID, actual.ID);\n            Assert.AreEqual(ExpectedText, actual.Text);\n        }\n\n        [TestMethod]\n        public async Task TweetPollAsync_WithoutDuration_Throws()\n        {\n            int duration = 0;\n            List<string> options = new() { \"ein\", \"zwei\", \"drei\" };\n\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.TweetPollAsync(\"a\", duration, options));\n\n            Assert.AreEqual(\"duration\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task TweetPollAsync_WithoutOptions_Throws()\n        {\n            int duration = 360;\n            List<string> options = null;\n\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.TweetPollAsync(\"a\", duration, options));\n\n            Assert.AreEqual(\"options\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_WithText_PopulatesResponse()\n        {\n            const string ExpectedText = \"Hello\";\n            const string ExpectedID = \"1460045236168654853\";\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            Tweet actual = await ctx.ReplyAsync(ExpectedText, \"42\");\n\n            Assert.AreEqual(ExpectedID, actual.ID);\n            Assert.AreEqual(ExpectedText, actual.Text);\n        }\n\n        [TestMethod]\n        public async Task ReplyAsync_WithNullText_Throws()\n        {\n            var ctx = await InitializeTwitterContextAsync(TweetResponse);\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.ReplyAsync(\"Hello\", null));\n\n            Assert.AreEqual(\"replyTweetID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_WithTweetID_Succeeds()\n        {\n            var ctx = await InitializeTwitterContextAsync(TweetDeletedResponse);\n\n            TweetDeletedResponse actual = await ctx.DeleteTweetAsync(\"42\");\n\n            Assert.IsTrue(actual.Data.Deleted);\n        }\n\n        [TestMethod]\n        public async Task DeleteTweetAsync_WithMissingID_Throws()\n        {\n            var ctx = await InitializeTwitterContextAsync(TweetDeletedResponse);\n\n            ArgumentNullException ex =\n                await L2TAssert.Throws<ArgumentNullException>(async () =>\n                    await ctx.DeleteTweetAsync(null));\n\n            Assert.AreEqual(\"tweetID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task HideReplyAsync_WithReply_ReturnsTrue()\n        {\n            const string ReplyID = \"184835136037191681\";\n            var ctx = await InitializeTwitterContextAsync(HideReplyResponse);\n\n            TweetHideResponse actual = await ctx.HideReplyAsync(ReplyID);\n\n            Assert.IsTrue(actual.Data.Hidden);\n        }\n\n        [TestMethod]\n        public async Task UnHideReplyAsync_WithReply_ReturnsFalse()\n        {\n            const string ReplyID = \"184835136037191681\";\n            var ctx = await InitializeTwitterContextAsync(UnHideReplyResponse);\n\n            TweetHideResponse actual = await ctx.HideReplyAsync(ReplyID);\n\n            Assert.IsFalse(actual.Data.Hidden);\n        }\n\n        [TestMethod]\n        public async Task HideReplyAsync_WithNullTweetID_ReturnsTrue()\n        {\n            const string ReplyID = null;\n            var ctx = await InitializeTwitterContextAsync(HideReplyResponse);\n\n            await L2TAssert.Throws<ArgumentNullException>(() => ctx.HideReplyAsync(ReplyID));\n        }\n\n        const string TweetResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"id\"\": \"\"1460045236168654853\"\",\n\t\t\"\"text\"\": \"\"Hello\"\"\n\t}\n}\";\n\n        const string HideReplyResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"hidden\"\": true\n\t}\n}\";\n\n        const string UnHideReplyResponse = @\"{\n\t\"\"data\"\": {\n\t\t\"\"hidden\"\": false\n\t}\n}\";\n\n        const string TweetDeletedResponse = @\"{\n  \"\"data\"\": {\n    \"\"deleted\"\": true\n  }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/TweetTests/TweetRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.TweetTests\n{\n    [TestClass]\n    public class TweetRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public TweetRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new TweetRequestProcessor<TweetQuery>();\n\n\t\t\tvar endTime = new DateTime(2020, 8, 30);\n\t\t\tvar startTime = new DateTime(2020, 8, 1);\n\t\t\tExpression<Func<TweetQuery, bool>> expression =\n\t\t\t\ttweet =>\n\t\t\t\t\ttweet.Type == TweetType.Lookup &&\n\t\t\t\t\ttweet.EndTime == endTime &&\n\t\t\t\t\ttweet.Exclude == TweetExcludes.Replies &&\n\t\t\t\t\ttweet.Ids == \"2,3\" &&\n\t\t\t\t\ttweet.ID == \"123\" &&\n\t\t\t\t\ttweet.Expansions == \"attachments.poll_ids,author_id\" &&\n\t\t\t\t\ttweet.MaxResults == 99 &&\n\t\t\t\t\ttweet.MediaFields == \"height,width\" &&\n\t\t\t\t\ttweet.PaginationToken == \"456\" &&\n\t\t\t\t\ttweet.PlaceFields == \"country\" &&\n\t\t\t\t\ttweet.PollFields == \"duration_minutes,end_datetime\" &&\n\t\t\t\t\ttweet.SinceID == \"789\" &&\n\t\t\t\t\ttweet.SpaceID == \"345\" &&\n\t\t\t\t\ttweet.StartTime == startTime &&\n\t\t\t\t\ttweet.TweetFields == \"author_id,created_at\" &&\n\t\t\t\t\ttweet.UntilID == \"012\" &&\n                    tweet.UserFields == \"created_at,verified\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TweetQuery.Type), ((int)TweetType.Lookup).ToString(CultureInfo.InvariantCulture))));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.EndTime), \"08/30/2020 00:00:00\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.Exclude), TweetExcludes.Replies)));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TweetQuery.Ids), \"2,3\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.ID), \"123\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.MaxResults), \"99\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TweetQuery.MediaFields), \"height,width\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.PaginationToken), \"456\")));\n\t\t\tAssert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(TweetQuery.PlaceFields), \"country\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.SinceID), \"789\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.SpaceID), \"345\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.StartTime), \"08/01/2020 00:00:00\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TweetQuery.TweetFields), \"author_id,created_at\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TweetQuery.UntilID), \"012\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TweetQuery.UserFields), \"created_at,verified\")));\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForBookmarks_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/123/bookmarks?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.Bookmarks.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TweetQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void BuildUrl_ForLookup_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets?\" +\n                \"ids=2%2C3&\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"media.fields=height%2Cwidth&\" +\n                \"place.fields=country&\" +\n                \"poll.fields=duration_minutes%2Cend_datetime&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"user.fields=created_at%2Cverified\";\n            var tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TweetQuery.Type), TweetType.Lookup.ToString() },\n                    { nameof(TweetQuery.Ids), \"2,3\" },\n                    { nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n                    { nameof(TweetQuery.MediaFields), \"height,width\" },\n                    { nameof(TweetQuery.PlaceFields), \"country\" },\n                    { nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n                    { nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n                    { nameof(TweetQuery.UserFields), \"created_at,verified\" },\n               };\n\n            Request req = tweetReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForMentionsTimeline_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/123/mentions?\" +\n\t\t\t\t\"end_time=2021-01-01T12%3A59%3A59Z&\" +\n\t\t\t\t\"exclude=replies%2Cretweets&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"since_id=789&\" +\n\t\t\t\t\"start_time=2020-12-31T00%3A00%3A01Z&\" +\n\t\t\t\t\"until_id=012&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.MentionsTimeline.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.Exclude), TweetExcludes.All },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TweetQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TweetQuery.SinceID), \"789\" },\n\t\t\t\t\t{ nameof(TweetQuery.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UntilID), \"012\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForUserTimeline_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/123/tweets?\" +\n\t\t\t\t\"end_time=2021-01-01T12%3A59%3A59Z&\" +\n\t\t\t\t\"exclude=replies%2Cretweets&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"since_id=789&\" +\n\t\t\t\t\"start_time=2020-12-31T00%3A00%3A01Z&\" +\n\t\t\t\t\"until_id=012&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.TweetsTimeline.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.Exclude), TweetExcludes.All },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TweetQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TweetQuery.SinceID), \"789\" },\n\t\t\t\t\t{ nameof(TweetQuery.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UntilID), \"012\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForReverseChronologicalTimeline_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/123/timelines/reverse_chronological?\" +\n\t\t\t\t\"end_time=2021-01-01T12%3A59%3A59Z&\" +\n\t\t\t\t\"exclude=replies%2Cretweets&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"since_id=789&\" +\n\t\t\t\t\"start_time=2020-12-31T00%3A00%3A01Z&\" +\n\t\t\t\t\"until_id=012&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.ReverseChronologicalTimeline.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.Exclude), TweetExcludes.All },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TweetQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TweetQuery.SinceID), \"789\" },\n\t\t\t\t\t{ nameof(TweetQuery.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UntilID), \"012\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForQuoteTweets_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"tweets/123/quote_tweets?\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.QuoteTweets.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TweetQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void BuildUrl_WithNullParameters_Throws()\n        {\n            var tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                tweetReqProc.BuildUrl(null);\n            });\n        }\n\n\t\t[TestMethod]\n        public void BuildUrl_WithSpacesInFields_FixesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"tweets?\" +\n                \"ids=2%2C3&\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"media.fields=height%2Cwidth&\" +\n                \"place.fields=country&\" +\n                \"poll.fields=duration_minutes%2Cend_datetime&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"user.fields=created_at%2Cverified\";\n            var tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TweetQuery.Type), TweetType.Lookup.ToString() },\n                    { nameof(TweetQuery.Ids), \"2, 3\" },\n                    { nameof(TweetQuery.Expansions), \"attachments.poll_ids, author_id\" },\n                    { nameof(TweetQuery.MediaFields), \"height, width\" },\n                    { nameof(TweetQuery.PlaceFields), \"country\" },\n                    { nameof(TweetQuery.PollFields), \"duration_minutes, end_datetime\" },\n                    { nameof(TweetQuery.TweetFields), \"author_id, created_at\" },\n                    { nameof(TweetQuery.UserFields), \"created_at, verified\" },\n               };\n\n            Request req = tweetReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForList_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"lists/12345/tweets?\" +\n\t\t\t\t\"expansions=author_id&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=def&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.List.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.ListID), \"12345\" },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"def\" },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForPinnedWithSpacesInFields_RemovesSpaces()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"lists/12345/tweets?\" +\n\t\t\t\t\"expansions=author_id&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=def&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.List.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.ListID), \"12345\" },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TweetQuery.PaginationToken), \"def\" },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id, created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at, verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = tweetReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForPinned_RequiresListID()\n\t\t{\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.List.ToString() },\n\t\t\t\t\t//{ nameof(TweetQuery.ListID), \"1234\" },\n\t\t\t   };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttweetReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TweetQuery.ListID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForBookmarks_RequiresID()\n\t\t{\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.Bookmarks.ToString() },\n                    //{ nameof(Tweet.ID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttweetReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TweetQuery.ID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n        public void BuildUrl_ForLookup_RequiresIds()\n        {\n            var tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TweetQuery.Type), TweetType.Lookup.ToString() },\n                    //{ nameof(Tweet.Ids), null }\n                };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n                    tweetReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(TweetQuery.Ids), ex.ParamName);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForUserTimeline_RequiresID()\n\t\t{\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.TweetsTimeline.ToString() },\n                    //{ nameof(Tweet.ID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttweetReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TweetQuery.ID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForMentionsTimeline_RequiresID()\n\t\t{\n\t\t\tvar tweetReqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.MentionsTimeline.ToString() },\n                    //{ nameof(Tweet.ID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttweetReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TweetQuery.ID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForSpaceTweets_ConstructsUrl()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces/345/tweets?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), TweetType.SpaceTweets.ToString() },\n\t\t\t\t\t{ nameof(TweetQuery.SpaceID), \"345\" },\n\t\t\t\t\t{ nameof(TweetQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TweetQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TweetQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TweetQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TweetQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TweetQuery.UserFields), \"created_at,verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void ProcessResults_Populates_Tweets()\n        {\n            var tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n            List<TweetQuery> results = tweetProc.ProcessResults(SingleTweet);\n\n            Assert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n            Assert.IsNotNull(tweetQuery);\n            List<Tweet> tweets = tweetQuery.Tweets;\n            Assert.IsNotNull(tweets);\n            Assert.AreEqual(1, tweets.Count);\n            Tweet tweet = tweets.FirstOrDefault();\n            Assert.IsNotNull(tweet);\n\t\t\tAssert.AreEqual(\"en\", tweet.Language);\n            Assert.AreEqual(\"Thanks @github for approving sponsorship for LINQ to Twitter: https://t.co/jWeDEN07HN\", tweet.Text);\n            Assert.AreEqual(\"1305895383260782593\", tweet.ID);\n\t\t\tAssert.AreEqual(\"15411837\", tweet.AuthorID);\n\t\t\tAssert.AreEqual(DateTime.Parse(\"2020-09-15T15:44:56.000Z\").Date, tweet.CreatedAt?.Date);\n\t\t\tAssert.AreEqual(\"1305895383260782593\", tweet.ConversationID);\n\t\t\tAssert.IsTrue(tweet.PossiblySensitive ?? false);\n\t\t\tAssert.AreEqual(tweet.ReplySettings, TweetReplySettings.Everyone);\n\t\t\tAssert.AreEqual(\"Twitter Web App\", tweet.Source);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_Populates_Entities()\n\t\t{\n\t\t\tvar tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TweetQuery> results = tweetProc.ProcessResults(SingleTweet);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(tweetQuery);\n\n\t\t\tList<Tweet> tweets = tweetQuery.Tweets;\n\t\t\tAssert.IsNotNull(tweets);\n\t\t\tAssert.AreEqual(1, tweets.Count);\n\t\t\tTweet tweet = tweets.FirstOrDefault();\n\t\t\tAssert.IsNotNull(tweet);\n\t\t\tTweetEntities entities = tweet.Entities;\n\t\t\tAssert.IsNotNull(entities);\n\n\t\t\tTweetEntityAnnotation annotation = entities?.Annotations?.FirstOrDefault();\n\t\t\tAssert.IsNotNull(annotation);\n\t\t\tAssert.AreEqual(53, annotation.Start);\n\t\t\tAssert.AreEqual(59, annotation.End);\n\t\t\tAssert.AreEqual(0.5865f, annotation.Probability);\n\t\t\tAssert.AreEqual(\"Organization\", annotation.Type);\n\t\t\tAssert.AreEqual(\"Twitter\", annotation.NormalizedText);\n\n\t\t\tTweetEntityCashtag cashTag = entities?.Cashtags?.FirstOrDefault();\n\t\t\tAssert.IsNotNull(cashTag);\n\t\t\tAssert.AreEqual(23, cashTag.End);\n\t\t\tAssert.AreEqual(18, cashTag.Start);\n\t\t\tAssert.AreEqual(\"twtr\", cashTag.Tag);\n\n\t\t\tTweetEntityHashtag hashTag = entities?.Hashtags?.FirstOrDefault();\n\t\t\tAssert.IsNotNull(hashTag);\n\t\t\tAssert.AreEqual(14, hashTag.End);\n\t\t\tAssert.AreEqual(0, hashTag.Start);\n\t\t\tAssert.AreEqual(\"LinqToTwitter\", hashTag.Tag);\n\n\t\t\tTweetEntityMention mention = entities?.Mentions?.FirstOrDefault();\n\t\t\tAssert.IsNotNull(mention);\n\t\t\tAssert.AreEqual(14, mention.End);\n\t\t\tAssert.AreEqual(\"13334762\", mention.ID);\n\t\t\tAssert.AreEqual(7, mention.Start);\n\t\t\tAssert.AreEqual(\"github\", mention.Username);\n\n\t\t\tTweetEntityUrl url = entities?.Urls?.FirstOrDefault();\n\t\t\tAssert.IsNotNull(url);\n\t\t\tAssert.AreEqual(62, url.Start);\n\t\t\tAssert.AreEqual(85, url.End);\n            Assert.AreEqual(\"https://t.co/jWeDEN07HN\", url.Url);\n\t\t\tAssert.AreEqual(\"http://bit.ly/1b2wrHb\", url.ExpandedUrl);\n\t\t\tAssert.AreEqual(\"bit.ly/1b2wrHb\", url.DisplayUrl);\n\t\t\tAssert.AreEqual(200, url.Status);\n\t\t\tAssert.AreEqual(\"GitHub - JoeMayo/LinqToTwitter: LINQ Provider for the Twitter API (C# Twitter Library)\", url.Title);\n\t\t\tAssert.AreEqual(\"LINQ Provider for the Twitter API (C# Twitter Library) - GitHub - JoeMayo/LinqToTwitter: LINQ Provider for the Twitter API (C# Twitter Library)\", url.Description);\n\t\t\tAssert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", url.UnwoundUrl);\n\t\t\tList<TweetEntityImage> images = url.Images;\n\t\t\tAssert.IsNotNull(images);\n\t\t\tAssert.AreEqual(2, images.Count);\n\t\t\tTweetEntityImage image = images.First();\n\t\t\tAssert.AreEqual(\"https://pbs.twimg.com/news_img/1527013178009329664/f45coPtn?format=png&name=orig\", image.Url);\n\t\t\tAssert.AreEqual(200, image.Width);\n\t\t\tAssert.AreEqual(200, image.Height);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_Populates_ContextAnnotations()\n\t\t{\n\t\t\tvar tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TweetQuery> results = tweetProc.ProcessResults(SingleTweet);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(tweetQuery);\n\t\t\tList<Tweet> tweets = tweetQuery.Tweets;\n\t\t\tAssert.IsNotNull(tweets);\n\t\t\tAssert.AreEqual(1, tweets.Count);\n\t\t\tTweet tweet = tweets.FirstOrDefault();\n\t\t\tAssert.IsNotNull(tweet);\n\n\t\t\tList<TweetContextAnnotation> annotations = tweet.ContextAnnotations;\n\t\t\tAssert.IsNotNull(annotations);\n\t\t\tAssert.AreEqual(7, annotations.Count);\n\t\t\tTweetContextAnnotation annotation = annotations.First();\n\t\t\tAssert.IsNotNull(annotation);\n\t\t\tTweetContextAnnotationDetails domain = annotation.Domain;\n\t\t\tAssert.IsNotNull(domain);\n\t\t\tAssert.AreEqual(\"46\", domain.ID);\n\t\t\tAssert.AreEqual(\"Brand Category\", domain.Name);\n\t\t\tAssert.AreEqual(\"Categories within Brand Verticals that narrow down the scope of Brands\", domain.Description);\n\t\t\tTweetContextAnnotationDetails entity = annotation.Entity;\n\t\t\tAssert.IsNotNull(entity);\n\t\t\tAssert.AreEqual(\"781974596752842752\", entity.ID);\n\t\t\tAssert.AreEqual(\"Services\", entity.Name);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_Populates_PublicMetrics()\n\t\t{\n\t\t\tvar tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TweetQuery> results = tweetProc.ProcessResults(SingleTweet);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(tweetQuery);\n\t\t\tList<Tweet> tweets = tweetQuery.Tweets;\n\t\t\tAssert.IsNotNull(tweets);\n\t\t\tAssert.AreEqual(1, tweets.Count);\n\t\t\tTweet tweet = tweets.FirstOrDefault();\n\t\t\tAssert.IsNotNull(tweet);\n\n\t\t\tTweetPublicMetrics metrics = tweet.PublicMetrics;\n\t\t\tAssert.IsNotNull(metrics);\n\t\t\tAssert.AreEqual(1, metrics.RetweetCount);\n\t\t\tAssert.AreEqual(1, metrics.ReplyCount);\n\t\t\tAssert.AreEqual(1, metrics.LikeCount);\n\t\t\tAssert.AreEqual(0, metrics.QuoteCount);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_Populates_Includes()\n\t\t{\n\t\t\tvar tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TweetQuery> results = tweetProc.ProcessResults(SingleTweet);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(tweetQuery);\n\t\t\tTwitterInclude includes = tweetQuery.Includes;\n\t\t\tAssert.IsNotNull(includes);\n\t\t\tList<TwitterUser> users = includes.Users;\n\t\t\tAssert.IsNotNull(users);\n\t\t\tAssert.AreEqual(2, users.Count);\n\t\t\tTwitterPoll poll = includes.Polls?.SingleOrDefault();\n\t\t\tAssert.IsNotNull(poll);\n\t\t\tAssert.AreEqual(1440, poll.DurationMinutes);\n\t\t\tAssert.AreEqual(DateTime.Parse(\"2019-11-28T20:26:41.000Z\").ToUniversalTime(), poll.EndDateTime);\n\t\t\tAssert.AreEqual(\"1199786642468413448\", poll.ID);\n\t\t\tAssert.AreEqual(\"closed\", poll.VotingStatus);\n\t\t\tList<TwitterPollOption> options = poll.Options;\n\t\t\tAssert.IsNotNull(options);\n\t\t\tAssert.AreEqual(2, options.Count);\n\t\t\tTwitterPollOption option = options.FirstOrDefault();\n\t\t\tAssert.IsNotNull(option);\n\t\t\tAssert.AreEqual(1, option.Position);\n\t\t\tAssert.AreEqual(\"“C Sharp”\", option.Label);\n\t\t\tAssert.AreEqual(795, option.Votes);\n\t\t}\n\n\t\t[TestMethod]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n            List<TweetQuery> results = tweetProc.ProcessResults(ErrorTweet);\n\n            Assert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n            Assert.IsNotNull(tweetQuery);\n            List<Tweet> tweets = tweetQuery.Tweets;\n            Assert.IsNull(tweets);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_PopulatesInputParameters()\n\t\t{\n\t\t\tvar tweetProc = new TweetRequestProcessor<TweetQuery>()\n\t\t\t{\n\t\t\t\tBaseUrl = BaseUrl2,\n\t\t\t\tType = TweetType.MentionsTimeline,\n\t\t\t\tID = \"567\",\n\t\t\t\tIds = \"123,456\",\n\t\t\t\tEndTime = new DateTime(2020, 12, 31),\n\t\t\t\tExclude = TweetExcludes.Retweets,\n\t\t\t\tMaxResults = 73,\n\t\t\t\tExpansions = \"123\",\n\t\t\t\tMediaFields = \"456\",\n\t\t\t\tPaginationToken = \"567\",\n\t\t\t\tPlaceFields = \"012\",\n\t\t\t\tPollFields = \"345\",\n\t\t\t\tSinceID = \"890\",\n\t\t\t\tSpaceID = \"345\",\n\t\t\t\tStartTime = new DateTime(2020, 1, 1),\n\t\t\t\tTweetFields = \"678\",\n\t\t\t\tUntilID = \"123\",\n\t\t\t\tUserFields = \"234\"\n\t\t\t};\n\n\t\t\tvar results = tweetProc.ProcessResults(SingleTweet);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tAssert.AreEqual(1, results.Count);\n\t\t\tvar tweetQuery = results.Single();\n\t\t\tAssert.IsNotNull(tweetQuery);\n\t\t\tAssert.AreEqual(TweetType.MentionsTimeline, tweetQuery.Type);\n\t\t\tAssert.AreEqual(new DateTime(2020, 12, 31), tweetQuery.EndTime);\n\t\t\tAssert.AreEqual(TweetExcludes.Retweets, tweetQuery.Exclude);\n\t\t\tAssert.AreEqual(\"123\", tweetQuery.Expansions);\n\t\t\tAssert.AreEqual(\"567\", tweetQuery.ID);\n\t\t\tAssert.AreEqual(\"123,456\", tweetQuery.Ids);\n\t\t\tAssert.AreEqual(73, tweetQuery.MaxResults);\n\t\t\tAssert.AreEqual(\"456\", tweetQuery.MediaFields);\n\t\t\tAssert.AreEqual(\"567\", tweetQuery.PaginationToken);\n\t\t\tAssert.AreEqual(\"012\", tweetQuery.PlaceFields);\n\t\t\tAssert.AreEqual(\"345\", tweetQuery.PollFields);\n\t\t\tAssert.AreEqual(\"890\", tweetQuery.SinceID);\n\t\t\tAssert.AreEqual(\"345\", tweetQuery.SpaceID);\n\t\t\tAssert.AreEqual(new DateTime(2020, 1, 1), tweetQuery.StartTime);\n\t\t\tAssert.AreEqual(\"678\", tweetQuery.TweetFields);\n\t\t\tAssert.AreEqual(\"123\", tweetQuery.UntilID);\n\t\t\tAssert.AreEqual(\"234\", tweetQuery.UserFields);\n\t\t}\n\n\t\t[TestMethod]\n        public void ProcessResults_WithErrors_PopulatesErrorList()\n        {\n            var tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n            List<TweetQuery> results = tweetProc.ProcessResults(ErrorTweet);\n\n            Assert.IsNotNull(results);\n\t\t\tTweetQuery tweetQuery = results.SingleOrDefault();\n            Assert.IsNotNull(tweetQuery);\n            List<TwitterError> errors = tweetQuery.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(1, errors.Count);\n            TwitterError error = errors.FirstOrDefault();\n            Assert.IsNotNull(error);\n            Assert.AreEqual(\"Could not find tweet with ids: [1].\", error.Detail);\n            Assert.AreEqual(\"Not Found Error\", error.Title);\n            Assert.AreEqual(\"tweet\", error.ResourceType);\n            Assert.AreEqual(\"ids\", error.Parameter);\n            Assert.AreEqual(\"1\", error.Value);\n            Assert.AreEqual(\"https://api.twitter.com/2/problems/resource-not-found\", error.Type);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_WithTimeline_PopulatesTweetsAndMeta()\n\t\t{\n\t\t\tvar tweetProc = new TweetRequestProcessor<TweetQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TweetQuery> results = tweetProc.ProcessResults(TimelineTweets);\n\n\t\t\tTweetQuery tweetQuery = results?.SingleOrDefault();\n\t\t\tAssert.IsNotNull(tweetQuery);\n\t\t\tList<Tweet> tweets = tweetQuery.Tweets;\n\t\t\tAssert.IsNotNull(tweets);\n\t\t\tAssert.AreEqual(10, tweets.Count);\n\t\t\tTweetMeta meta = tweetQuery.Meta;\n\t\t\tAssert.IsNotNull(meta);\n\t\t\tAssert.AreEqual(\"7140dibdnow9c7btw421e9l0f3cacd5qxve3023jqz48g\", meta.PreviousToken);\n\t\t\tAssert.AreEqual(\"7140dibdnow9c7btw421e9l0f3cacd5qxve3023jqz48g\", meta.NextToken);\n\t\t\tAssert.AreEqual(10, meta.ResultCount);\n\t\t\tAssert.AreEqual(\"1529568259011252224\", meta.NewestID);\n\t\t\tAssert.AreEqual(\"1527016962995343360\", meta.OldestID);\n\t\t}\n\n\t\tconst string SingleTweet = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"context_annotations\"\": [\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"46\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Categories within Brand Verticals that narrow down the scope of Brands\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"781974596752842752\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Services\"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"47\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Brands and Companies\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"10045225402\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Twitter\"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"30\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Entities [Entity Service]\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Entity Service top level domain, every item that is in Entity Service should be in this domain\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"848920371311001600\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Technology\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Technology and computing\"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"848921413196984320\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Computer programming\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Computer programming\"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"45\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand Vertical\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Top level entities that describe a Brands industry\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"781974597226799105\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"B2B\"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"46\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand Category\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Categories within Brand Verticals that narrow down the scope of Brands\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"781974597172203520\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Services\"\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"\"domain\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"47\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"Brand\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"Brands and Companies\"\"\n\t\t\t\t\t},\n\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\t\t\"\"id\"\": \"\"10040692468\"\",\n\t\t\t\t\t\t\"\"name\"\": \"\"GitHub\"\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"\"reply_settings\"\": \"\"everyone\"\",\n\t\t\t\"\"id\"\": \"\"1305895383260782593\"\",\n\t\t\t\"\"source\"\": \"\"Twitter Web App\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\t\t\"\"retweet_count\"\": 1,\n\t\t\t\t\"\"reply_count\"\": 1,\n\t\t\t\t\"\"like_count\"\": 1,\n\t\t\t\t\"\"quote_count\"\": 0\n\t\t\t},\n\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"annotations\"\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"start\"\": 53,\n\t\t\t\t\t\t\"\"end\"\": 59,\n\t\t\t\t\t\t\"\"probability\"\": 0.5865,\n\t\t\t\t\t\t\"\"type\"\": \"\"Organization\"\",\n\t\t\t\t\t\t\"\"normalized_text\"\": \"\"Twitter\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t   \"\"cashtags\"\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"start\"\": 18,\n\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\"\"tag\"\": \"\"twtr\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"hashtags\"\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\"\"end\"\": 14,\n\t\t\t\t\t\t\"\"tag\"\": \"\"LinqToTwitter\"\"\n\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"start\"\": 62,\n\t\t\t\t\t\t\"\"end\"\": 85,\n\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/jWeDEN07HN\"\",\n\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://bit.ly/1b2wrHb\"\",\n\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly/1b2wrHb\"\",\n\t\t\t\t\t\t\"\"images\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://pbs.twimg.com/news_img/1527013178009329664/f45coPtn?format=png&name=orig\"\",\n\t\t\t\t\t\t\t\t\"\"width\"\": 200,\n\t\t\t\t\t\t\t\t\"\"height\"\": 200\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://pbs.twimg.com/news_img/1527013178009329664/f45coPtn?format=png&name=150x150\"\",\n\t\t\t\t\t\t\t\t\"\"width\"\": 150,\n\t\t\t\t\t\t\t\t\"\"height\"\": 150\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"\"status\"\": 200,\n\t\t\t\t\t\t\"\"title\"\": \"\"GitHub - JoeMayo/LinqToTwitter: LINQ Provider for the Twitter API (C# Twitter Library)\"\",\n\t\t\t\t\t\t\"\"description\"\": \"\"LINQ Provider for the Twitter API (C# Twitter Library) - GitHub - JoeMayo/LinqToTwitter: LINQ Provider for the Twitter API (C# Twitter Library)\"\",\n\t\t\t\t\t\t\"\"unwound_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"\"start\"\": 7,\n\t\t\t\t\t\t\"\"end\"\": 14,\n\t\t\t\t\t\t\"\"username\"\": \"\"github\"\",\n\t\t\t\t\t\t\"\"id\"\": \"\"13334762\"\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t\"\"text\"\": \"\"Thanks @github for approving sponsorship for LINQ to Twitter: https://t.co/jWeDEN07HN\"\",\n\t\t\t\"\"conversation_id\"\": \"\"1305895383260782593\"\",\n\t\t\t\"\"author_id\"\": \"\"15411837\"\",\n\t\t\t\"\"possibly_sensitive\"\": true,\n\t\t\t\"\"created_at\"\": \"\"2020-09-15T15:44:56.000Z\"\"\n\t\t}\n\t],\n\t\"\"includes\"\": {\n\t\t\"\"polls\"\": [\n            {\n                \"\"id\"\": \"\"1199786642468413448\"\",\n                \"\"voting_status\"\": \"\"closed\"\",\n                \"\"duration_minutes\"\": 1440,\n                \"\"options\"\": [\n                    {\n                        \"\"position\"\": 1,\n                        \"\"label\"\": \"\"“C Sharp”\"\",\n                        \"\"votes\"\": 795\n\n\t\t\t\t\t},\n                    {\n                        \"\"position\"\": 2,\n                        \"\"label\"\": \"\"“C Hashtag”\"\",\n                        \"\"votes\"\": 156\n                    }\n                ],\n                \"\"end_datetime\"\": \"\"2019-11-28T20:26:41.000Z\"\"\n            }\n        ],\n\t\t\"\"users\"\": [\n\t\t\t{\n\t\t\t\t\"\"verified\"\": false,\n\t\t\t\t\"\"username\"\": \"\"JoeMayo\"\",\n\t\t\t\t\"\"created_at\"\": \"\"2008-07-13T04:35:50.000Z\"\",\n\t\t\t\t\"\"description\"\": \"\"Author, Instructor, and Independent Consultant \\n\\nNewest Release: C# Cookbook (https://t.co/acNTiAe6HQ)\\n\\n#AI #Chatbots #CSharp #Linq2Twitter #NLP\"\",\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\t\t\"\"followers_count\"\": 10778,\n\t\t\t\t\t\"\"following_count\"\": 4193,\n\t\t\t\t\t\"\"tweet_count\"\": 4226,\n\t\t\t\t\t\"\"listed_count\"\": 271\n\t\t\t\t},\n\t\t\t\t\"\"url\"\": \"\"https://t.co/Pd3XsnJwJU\"\",\n\t\t\t\t\"\"pinned_tweet_id\"\": \"\"1516074915803254788\"\",\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1185764990403268613/8GoXoOtz_normal.jpg\"\",\n\t\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/Pd3XsnJwJU\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://joemayo.medium.com\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"joemayo.medium.com\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 78,\n\t\t\t\t\t\t\t\t\"\"end\"\": 101,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/acNTiAe6HQ\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://bit.ly/CSharpCookbook\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly/CSharpCookbook\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\t\"\"hashtags\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 104,\n\t\t\t\t\t\t\t\t\"\"end\"\": 107,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"AI\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 108,\n\t\t\t\t\t\t\t\t\"\"end\"\": 117,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"Chatbots\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 118,\n\t\t\t\t\t\t\t\t\"\"end\"\": 125,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"CSharp\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 126,\n\t\t\t\t\t\t\t\t\"\"end\"\": 139,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"Linq2Twitter\"\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 140,\n\t\t\t\t\t\t\t\t\"\"end\"\": 144,\n\t\t\t\t\t\t\t\t\"\"tag\"\": \"\"NLP\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"id\"\": \"\"15411837\"\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"\"verified\"\": true,\n\t\t\t\t\"\"username\"\": \"\"github\"\",\n\t\t\t\t\"\"created_at\"\": \"\"2008-02-11T04:41:50.000Z\"\",\n\t\t\t\t\"\"description\"\": \"\"How people build software. \\n\\nNeed help? Send us a message at https://t.co/aspNQGzzZH for support.\"\",\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\t\t\"\"followers_count\"\": 2277687,\n\t\t\t\t\t\"\"following_count\"\": 334,\n\t\t\t\t\t\"\"tweet_count\"\": 7061,\n\t\t\t\t\t\"\"listed_count\"\": 17306\n\t\t\t\t},\n\t\t\t\t\"\"url\"\": \"\"\"\",\n\t\t\t\t\"\"protected\"\": false,\n\t\t\t\t\"\"name\"\": \"\"GitHub\"\",\n\t\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1414990564408262661/r6YemvF9_normal.jpg\"\",\n\t\t\t\t\"\"location\"\": \"\"San Francisco, CA\"\",\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\t\t\"\"description\"\": {\n\t\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"\"start\"\": 61,\n\t\t\t\t\t\t\t\t\"\"end\"\": 84,\n\t\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/aspNQGzzZH\"\",\n\t\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://support.github.com\"\",\n\t\t\t\t\t\t\t\t\"\"display_url\"\": \"\"support.github.com\"\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"\"id\"\": \"\"13334762\"\"\n\t\t\t}\n\t\t]\n\t}\n}\";\n\n\t\tconst string TimelineTweets = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"id\"\": \"\"1529568259011252224\"\",\n\t\t\t\"\"text\"\": \"\"RT @beeradmoore: HAHAHAHA I accidentally deployed a #dotnetmaui app to my Android watch and it just worked. https://t.co/Ral7om02o1\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1529490697618763777\"\",\n\t\t\t\"\"text\"\": \"\"@buhakmeh @alvinashcraft Whatever is the F5 default. Haven't had problems and will probably continue until I learn about a compelling reason to change.\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1529204113623330816\"\",\n\t\t\t\"\"text\"\": \"\"That last presentation I did was using C# and .NET 6 on a MacBook Pro M1. With MAUI in GA, the x-plat story for .NET improves.\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1528511616882421760\"\",\n\t\t\t\"\"text\"\": \"\"RT @jimwooley: Looks like I won't be able to attend the inaugural @ThatConference Austin due to flight issues. I'll still present the Stati…\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1528511186790010880\"\",\n\t\t\t\"\"text\"\": \"\"RT @techgirl1908: Decentralized Twitter has released early code\\n\\nhttps://t.co/OIgGFKUkov\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1528181517393899521\"\",\n\t\t\t\"\"text\"\": \"\"RT @J_aa_p: My new @TwitterDev @Linq2Twitr #Blazor WASM Twitter Client (Alpha ❗) now parses\\n\\n✅ Retweets\\n✅ Quoted Retweets\\n✅ Urls\\n✅ Hashtags…\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1528100853294301184\"\",\n\t\t\t\"\"text\"\": \"\"RT @LauraViglioni: Finally... The GitHub bathroom https://t.co/A43IM1HUaF\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1527401749329301504\"\",\n\t\t\t\"\"text\"\": \"\"@RafaelH_us @tacobell https://t.co/VSO4CMu6Xa\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1527371742343114752\"\",\n\t\t\t\"\"text\"\": \"\"RT @jguadagno: @buhakmeh @terrajobst @mohdali If you are using C#, use the Linq2Twitter NuGet package by @JoeMayo . Its super easy to use.…\"\"\n\t\t},\n\t\t{\n\t\t\t\"\"id\"\": \"\"1527016962995343360\"\",\n\t\t\t\"\"text\"\": \"\"Presentation slides and source code for my Intro to LINQ presentation for @DataScienceDojo today:\\n\\nhttps://t.co/hTx6u3RHmN\"\"\n\t\t}\n\t],\n\t\"\"meta\"\": {\n\t\t\"\"previous_token\"\": \"\"7140dibdnow9c7btw421e9l0f3cacd5qxve3023jqz48g\"\",\n\t\t\"\"next_token\"\": \"\"7140dibdnow9c7btw421e9l0f3cacd5qxve3023jqz48g\"\",\n\t\t\"\"result_count\"\": 10,\n\t\t\"\"newest_id\"\": \"\"1529568259011252224\"\",\n\t\t\"\"oldest_id\"\": \"\"1527016962995343360\"\"\n\t}\n}\";\n\n\t\tconst string ErrorTweet = @\"{\n\t\"\"errors\"\": [\n\t\t{\n\t\t\t\"\"detail\"\": \"\"Could not find tweet with ids: [1].\"\",\n\t\t\t\"\"title\"\": \"\"Not Found Error\"\",\n\t\t\t\"\"resource_type\"\": \"\"tweet\"\",\n\t\t\t\"\"parameter\"\": \"\"ids\"\",\n\t\t\t\"\"value\"\": \"\"1\"\",\n\t\t\t\"\"type\"\": \"\"https://api.twitter.com/2/problems/resource-not-found\"\"\n\t\t}\n\t]\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/UserTests/TwitterUserRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace LinqToTwitter.Tests.UserTests\n{\n    [TestClass]\n    public class TwitterUserRequestProcessorTests\n    {\n        const string BaseUrl2 = \"https://api.twitter.com/2/\";\n\n        public TwitterUserRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParametersTest()\n        {\n            var target = new TwitterUserRequestProcessor<TwitterUserQuery>();\n\n            Expression<Func<TwitterUserQuery, bool>> expression =\n                tweet =>\n                    tweet.Type == UserType.Liking &&\n\t\t\t\t\ttweet.Expansions == \"attachments.poll_ids,author_id\" &&\n\t\t\t\t\ttweet.ID == \"456\" &&\n                    tweet.Ids == \"2,3\" &&\n\t\t\t\t\ttweet.Usernames == \"joemayo,linq2twitr\" &&\n\t\t\t\t\ttweet.MaxResults == 50 &&\n\t\t\t\t\ttweet.MediaFields == \"height,width\" &&\n\t\t\t\t\ttweet.PaginationToken == \"123\" &&\n\t\t\t\t\ttweet.PlaceFields == \"country\" &&\n\t\t\t\t\ttweet.PollFields == \"duration_minutes,end_datetime\" &&\n\t\t\t\t\ttweet.SpaceID == \"345\" &&\n                    tweet.TweetFields == \"author_id,created_at\" &&\n\t\t\t\t\ttweet.TweetID == \"678\" &&\n\t\t\t\t\ttweet.UserFields == \"created_at,verified\";\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = target.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterUserQuery.Type), ((int)UserType.Liking).ToString(CultureInfo.InvariantCulture))));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TwitterUserQuery.ID), \"456\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterUserQuery.Ids), \"2,3\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TwitterUserQuery.Usernames), \"joemayo,linq2twitr\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TwitterUserQuery.MaxResults), \"50\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TwitterUserQuery.MediaFields), \"height,width\")));\n\t\t\tAssert.IsTrue(\n\t\t\t\tqueryParams.Contains(\n\t\t\t\t\tnew KeyValuePair<string, string>(nameof(TwitterUserQuery.PaginationToken), \"123\")));\n\t\t\tAssert.IsTrue(\n\t\t\t   queryParams.Contains(\n\t\t\t\t   new KeyValuePair<string, string>(nameof(TwitterUserQuery.PlaceFields), \"country\")));\n\t\t\tAssert.IsTrue(\n\t\t\t   queryParams.Contains(\n\t\t\t\t   new KeyValuePair<string, string>(nameof(TwitterUserQuery.PollFields), \"duration_minutes,end_datetime\")));\n\t\t\tAssert.IsTrue(\n\t\t\t   queryParams.Contains(\n\t\t\t\t   new KeyValuePair<string, string>(nameof(TwitterUserQuery.SpaceID), \"345\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\")));\n\t\t\tAssert.IsTrue(\n\t\t\t   queryParams.Contains(\n\t\t\t\t   new KeyValuePair<string, string>(nameof(TwitterUserQuery.TweetID), \"678\")));\n\t\t\tAssert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(TwitterUserQuery.UserFields), \"created_at,verified\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForIdLookup_IncludesParameters()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users?\" +\n                \"ids=2%2C3&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"user.fields=created_at%2Cverified\";\n            var twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterUserQuery.Type), UserType.IdLookup.ToString() },\n                    { nameof(TwitterUserQuery.Ids), \"2,3\" },\n                    { nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n                    { nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n                    { nameof(TwitterUserQuery.UserFields), \"created_at,verified\" },\n               };\n\n            Request req = twitterUserReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForFollowing_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/123/following?\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n                    { nameof(TwitterUserQuery.Type), UserType.Following.ToString() },\n                    { nameof(TwitterUserQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForFollowers_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/123/followers?\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=456&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.Followers.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.ID), \"123\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PaginationToken), \"456\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_WithUsernames_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/by?\" +\n\t\t\t\t\"usernames=joemayo%2Clinq2twitr&\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.UsernameLookup.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Usernames), \"joemayo,linq2twitr\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForRetweetedBy_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"tweets/123/retweeted_by?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.RetweetedBy.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetID), \"123\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserReqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForLikingUsers_ConstructsUrl()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"tweets/345/liking_users?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.Liking.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetID), \"345\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForMe_ConstructsUrl()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"users/me?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.Me.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void BuildUrl_WithNoParameters_Fails()\n        {\n            var twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\n            L2TAssert.Throws<NullReferenceException>(() =>\n            {\n                twitterUserReqProc.BuildUrl(null);\n            });\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithSpacesInFields_FixesSpaces()\n        {\n            const string ExpectedUrl =\n                BaseUrl2 + \"users?\" +\n                \"ids=2%2C3&\" +\n                \"expansions=attachments.poll_ids%2Cauthor_id&\" +\n                \"tweet.fields=author_id%2Ccreated_at&\" +\n                \"user.fields=created_at%2Cverified\";\n            var twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterUserQuery.Type), UserType.IdLookup.ToString() },\n                    { nameof(TwitterUserQuery.Ids), \"2, 3\" },\n                    { nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids, author_id\" },\n                    { nameof(TwitterUserQuery.TweetFields), \"author_id, created_at\" },\n                    { nameof(TwitterUserQuery.UserFields), \"created_at, verified\" },\n               };\n\n            Request req = twitterUserReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithoutIdsOnIdLookup_Throws()\n        {\n            var twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TwitterUserQuery.Type), UserType.IdLookup.ToString() },\n                    //{ nameof(TwitterUserQuery.Ids), null }\n                };\n\n            ArgumentNullException ex =\n                L2TAssert.Throws<ArgumentNullException>(() =>\n                    twitterUserReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(TwitterUserQuery.Ids), ex.ParamName);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_WithoutIDOnFollowers_Throws()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.Followers.ToString() },\n                    //{ nameof(TwitterUserQuery.ID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.ID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_WithoutIDOnFollowing_Throws()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.Following.ToString() },\n                    //{ nameof(TwitterUserQuery.ID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.ID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_WithoutUsernamesOnUsernameLookup_Throws()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.UsernameLookup.ToString() },\n                    //{ nameof(TwitterUserQuery.Usernames), null }\n                };\n\n\t\t\tArgumentNullException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentNullException>(() =>\n\t\t\t\t\ttwitterUserReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.Usernames), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForRetweetedBy_RequiresTweetID()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n                new Dictionary<string, string>\n                {\n                    { nameof(TweetQuery.Type), UserType.RetweetedBy.ToString() },\n\t\t\t        //{ nameof(Tweet.TweetID), null }\n\t\t\t    };\n\n            ArgumentException ex =\n                L2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(nameof(TwitterUserQuery.TweetID), ex.ParamName);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForLikingUsers_RequiresTweetID()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), UserType.Liking.ToString() },\n\t\t\t        //{ nameof(Tweet.TweetID), null }\n\t\t\t    };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.TweetID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForSpaceBuyers_RequiresTweetID()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TweetQuery.Type), UserType.SpaceBuyers.ToString() },\n\t\t\t        //{ nameof(Tweet.SpaceID), null }\n\t\t\t    };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserReqProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.SpaceID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForListFollowers_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"lists/12345/followers?\" +\n\t\t\t\t\"expansions=owner_id&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=def&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.ListFollowers.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), ExpansionField.OwnerID },\n\t\t\t\t\t{ nameof(TwitterUserQuery.ListID), \"12345\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PaginationToken), \"def\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), $\"{TweetField.AuthorID},{TweetField.CreatedAt}\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForListFollowersWithSpacesInFields_RemovesSpaces()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"lists/12345/followers?\" +\n\t\t\t\t\"expansions=owner_id&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.ListFollowers.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.ListID), \"12345\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), ExpansionField.OwnerID },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), $\"{TweetField.AuthorID}, {TweetField.CreatedAt}\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForListFollowers_RequiresListID()\n\t\t{\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.ListFollowers.ToString() },\n                    //{ nameof(TwitterUserQuery.ListID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.ListID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForListMembers_IncludesParameters()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"lists/12345/members?\" +\n\t\t\t\t\"expansions=owner_id&\" +\n\t\t\t\t\"max_results=50&\" +\n\t\t\t\t\"pagination_token=def&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.ListMembers.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), ExpansionField.OwnerID },\n\t\t\t\t\t{ nameof(TwitterUserQuery.ListID), \"12345\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MaxResults), \"50\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PaginationToken), \"def\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), $\"{TweetField.AuthorID},{TweetField.CreatedAt}\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), $\"{UserField.CreatedAt},{UserField.Verified}\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForListMembersWithSpacesInFields_RemovesSpaces()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"lists/12345/members?\" +\n\t\t\t\t\"expansions=owner_id&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.ListMembers.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.ListID), \"12345\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), ExpansionField.OwnerID },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), $\"{TweetField.AuthorID}, {TweetField.CreatedAt}\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), $\"{UserField.CreatedAt}, {UserField.Verified}\" },\n\t\t\t   };\n\n\t\t\tRequest req = twitterUserProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForListMembers_RequiresListID()\n\t\t{\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.ListMembers.ToString() },\n                    //{ nameof(TwitterUserQuery.ListID), null }\n                };\n\n\t\t\tArgumentException ex =\n\t\t\t\tL2TAssert.Throws<ArgumentException>(() =>\n\t\t\t\t\ttwitterUserProc.BuildUrl(parameters));\n\n\t\t\tAssert.AreEqual(nameof(TwitterUserQuery.ListID), ex.ParamName);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void BuildUrl_ForSpaceBuyers_ConstructsUrl()\n\t\t{\n\t\t\tconst string ExpectedUrl =\n\t\t\t\tBaseUrl2 + \"spaces/345/buyers?\" +\n\t\t\t\t\"expansions=attachments.poll_ids%2Cauthor_id&\" +\n\t\t\t\t\"media.fields=height%2Cwidth&\" +\n\t\t\t\t\"place.fields=country&\" +\n\t\t\t\t\"poll.fields=duration_minutes%2Cend_datetime&\" +\n\t\t\t\t\"tweet.fields=author_id%2Ccreated_at&\" +\n\t\t\t\t\"user.fields=created_at%2Cverified\";\n\t\t\tvar reqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\t\t\tvar parameters =\n\t\t\t\tnew Dictionary<string, string>\n\t\t\t\t{\n\t\t\t\t\t{ nameof(TwitterUserQuery.Type), UserType.SpaceBuyers.ToString() },\n\t\t\t\t\t{ nameof(TwitterUserQuery.SpaceID), \"345\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.Expansions), \"attachments.poll_ids,author_id\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.MediaFields), \"height,width\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PlaceFields), \"country\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.PollFields), \"duration_minutes,end_datetime\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.TweetFields), \"author_id,created_at\" },\n\t\t\t\t\t{ nameof(TwitterUserQuery.UserFields), \"created_at,verified\" }\n\t\t\t   };\n\n\t\t\tRequest req = reqProc.BuildUrl(parameters);\n\n\t\t\tAssert.AreEqual(ExpectedUrl, req.FullUrl);\n\t\t}\n\n\t\t[TestMethod]\n        public void ProcessResults_Populates_Users()\n        {\n            var twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\n            List<TwitterUserQuery> results = twitterUserProc.ProcessResults(UsersJson);\n\n            Assert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n            Assert.IsNotNull(twitterUserQuery);\n            List<TwitterUser> users = twitterUserQuery.Users;\n            Assert.IsNotNull(users);\n            Assert.AreEqual(2, users.Count);\n            TwitterUser user = users.FirstOrDefault();\n            Assert.IsNotNull(user);\n\t\t\tAssert.AreEqual(DateTime.Parse(\"2008-07-13\").Date, user.CreatedAt.Date);\n            Assert.AreEqual(\"Author, Instructor, and Independent Consultant. Author of Programming the Microsoft Bot Framework/MS Press.\\n#ai #chatbots #csharp #linq2twitter #twitterapi\", user.Description);\n            Assert.AreEqual(\"15411837\", user.ID);\n\t\t\tAssert.AreEqual(\"Las Vegas, NV\", user.Location);\n\t\t\tAssert.AreEqual(\"Joe Mayo\", user.Name);\n\t\t\tAssert.AreEqual(\"1258043891434962945\", user.PinnedTweetId);\n\t\t\tAssert.AreEqual(\"https://pbs.twimg.com/profile_images/1185764990403268613/8GoXoOtz_normal.jpg\", user.ProfileImageUrl);\n\t\t\tAssert.IsTrue(user.Protected);\n\t\t\tAssert.AreEqual(\"https://t.co/Y6dXyWxanS\", user.Url);\n\t\t\tAssert.AreEqual(\"JoeMayo\", user.Username);\n\t\t\tAssert.IsTrue(user.Verified);\n        }\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_WithSingleUser_PopulatesData()\n\t\t{\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> \n\t\t\t{ \n\t\t\t\tBaseUrl = BaseUrl2,\n\t\t\t\tType = UserType.Me\n\t\t\t};\n\n\t\t\tList<TwitterUserQuery> results = twitterUserProc.ProcessResults(SingleUser);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(twitterUserQuery);\n\t\t\tList<TwitterUser> users = twitterUserQuery.Users;\n\t\t\tAssert.IsNotNull(users);\n\t\t\tTwitterUser user = users.SingleOrDefault();\n\t\t\tAssert.IsNotNull(user);\n\t\t\tAssert.AreEqual(DateTime.Parse(\"2013-12-14\").Date, user.CreatedAt.Date);\n\t\t\tAssert.AreEqual(\"2244994945\", user.ID);\n\t\t\tAssert.AreEqual(\"Twitter Dev\", user.Name);\n\t\t\tAssert.AreEqual(\"1255542774432063488\", user.PinnedTweetId);\n\t\t\tAssert.AreEqual(\"TwitterDev\", user.Username);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_Populates_Entities()\n\t\t{\n\t\t\tvar twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TwitterUserQuery> results = twitterUserProc.ProcessResults(UsersJson);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(twitterUserQuery);\n\n\t\t\tList<TwitterUser> users = twitterUserQuery.Users;\n\t\t\tAssert.IsNotNull(users);\n\t\t\tAssert.AreEqual(2, users.Count);\n\t\t\tTwitterUser user = users.FirstOrDefault();\n\t\t\tAssert.IsNotNull(user);\n\t\t\tTwitterUserEntity entities = user.Entities;\n\t\t\tAssert.IsNotNull(entities);\n\n            TweetEntityUrl url = entities?.Url?.Urls?.FirstOrDefault();\n            Assert.IsNotNull(url);\n            Assert.AreEqual(0, url.Start);\n            Assert.AreEqual(23, url.End);\n            Assert.AreEqual(\"https://t.co/Y6dXyWxanS\", url.Url);\n            Assert.AreEqual(\"https://github.com/JoeMayo\", url.ExpandedUrl);\n            Assert.AreEqual(\"github.com/JoeMayo\", url.DisplayUrl);\n\n\t\t\tTweetEntityHashtag hashtag = entities?.Description?.Hashtags?.FirstOrDefault();\n\t\t\tAssert.IsNotNull(hashtag);\n\t\t\tAssert.AreEqual(108, hashtag.Start);\n\t\t\tAssert.AreEqual(111, hashtag.End);\n\t\t\tAssert.AreEqual(\"ai\", hashtag.Tag);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_Populates_PublicMetrics()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TwitterUserQuery> results = twitterUserReqProc.ProcessResults(UsersJson);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(twitterUserQuery);\n\t\t\tList<TwitterUser> users = twitterUserQuery.Users;\n\t\t\tAssert.IsNotNull(users);\n\t\t\tAssert.AreEqual(2, users.Count);\n\t\t\tTwitterUser user = users.FirstOrDefault();\n\t\t\tAssert.IsNotNull(user);\n\n\t\t\tTwitterUserPublicMetrics metrics = user.PublicMetrics;\n\t\t\tAssert.IsNotNull(metrics);\n\t\t\tAssert.AreEqual(10024, metrics.FollowersCount);\n\t\t\tAssert.AreEqual(3539, metrics.FollowingCount);\n\t\t\tAssert.AreEqual(270, metrics.ListedCount);\n\t\t\tAssert.AreEqual(3800, metrics.TweetCount);\n\t\t}\n\n\t\t[TestMethod]\n\t\tpublic void ProcessResults_WithFullUserExpansionsAndTweets_Deserializes()\n\t\t{\n\t\t\tvar twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\n\t\t\tList<TwitterUserQuery> results = twitterUserReqProc.ProcessResults(FullUserWithTweet);\n\n\t\t\tAssert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n\t\t\tAssert.IsNotNull(twitterUserQuery);\n\t\t\tTwitterInclude includes = twitterUserQuery.Includes;\n\t\t\tAssert.IsNotNull(includes);\n\t\t\tList<Tweet> tweets = includes.Tweets;\n\t\t\tAssert.IsNotNull(tweets);\n\t\t\tAssert.IsTrue(tweets.Any());\n\t\t\tTweet tweet = tweets.First();\n\t\t\tAssert.IsNotNull(tweet);\n\t\t\tAssert.AreEqual(TweetReplySettings.Everyone, tweet.ReplySettings);\n\t\t}\n\n\t\t[TestMethod]\n        public void ProcessResults_Handles_Response_With_No_Results()\n        {\n            var twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = BaseUrl2 };\n\n            List<TwitterUserQuery> results = twitterUserReqProc.ProcessResults(ErrorTweet);\n\n            Assert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n            Assert.IsNotNull(twitterUserQuery);\n            List<TwitterUser> users = twitterUserQuery.Users;\n            Assert.IsNull(users);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Populates_Input_Parameters()\n        {\n            var twitterUserReqProc = new TwitterUserRequestProcessor<TwitterUserQuery>()\n            {\n                BaseUrl = BaseUrl2,\n                Type = UserType.IdLookup,\n\t\t\t\tID = \"890\",\n\t\t\t\tIds = \"3,7\",\n\t\t\t\tUsernames = \"9,0\",\n                Expansions = \"123\",\n\t\t\t\tListID = \"9025\",\n\t\t\t\tMaxResults = 50,\n\t\t\t\tPaginationToken = \"567\",\n\t\t\t\tSpaceID = \"345\",\n                TweetFields = \"678\",\n                UserFields = \"234\"\n            };\n\n            var results = twitterUserReqProc.ProcessResults(UsersJson);\n\n            Assert.IsNotNull(results);\n            Assert.AreEqual(1, results.Count);\n            var twitterUserQuery = results.Single();\n            Assert.IsNotNull(twitterUserQuery);\n            Assert.AreEqual(UserType.IdLookup, twitterUserQuery.Type);\n\t\t\tAssert.AreEqual(\"890\", twitterUserQuery.ID);\n\t\t\tAssert.AreEqual(\"3,7\", twitterUserQuery.Ids);\n            Assert.AreEqual(\"123\", twitterUserQuery.Expansions);\n\t\t\tAssert.AreEqual(\"9025\", twitterUserQuery.ListID);\n\t\t\tAssert.AreEqual(50, twitterUserQuery.MaxResults);\n\t\t\tAssert.AreEqual(\"567\", twitterUserQuery.PaginationToken);\n\t\t\tAssert.AreEqual(\"345\", twitterUserQuery.SpaceID);\n            Assert.AreEqual(\"678\", twitterUserQuery.TweetFields);\n            Assert.AreEqual(\"234\", twitterUserQuery.UserFields);\n\t\t\tAssert.AreEqual(\"9,0\", twitterUserQuery.Usernames);\n        }\n\n\t\t[TestMethod]\n        public void ProcessResults_WithErrors_PopulatesErrorList()\n        {\n            var twitterUserProc = new TwitterUserRequestProcessor<TwitterUserQuery> { BaseUrl = \"https://api.twitter.com/1.1/search/\" };\n\n            List<TwitterUserQuery> results = twitterUserProc.ProcessResults(ErrorTweet);\n\n            Assert.IsNotNull(results);\n\t\t\tTwitterUserQuery twitterUserQuery = results.SingleOrDefault();\n            Assert.IsNotNull(twitterUserQuery);\n            List<TwitterError> errors = twitterUserQuery.Errors;\n            Assert.IsNotNull(errors);\n            Assert.AreEqual(1, errors.Count);\n            TwitterError error = errors.FirstOrDefault();\n            Assert.IsNotNull(error);\n            Assert.AreEqual(\"Could not find tweet with ids: [1].\", error.Detail);\n            Assert.AreEqual(\"Not Found Error\", error.Title);\n            Assert.AreEqual(\"tweet\", error.ResourceType);\n            Assert.AreEqual(\"ids\", error.Parameter);\n            Assert.AreEqual(\"1\", error.Value);\n            Assert.AreEqual(\"https://api.twitter.com/2/problems/resource-not-found\", error.Type);\n        }\n\n        const string UsersJson = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"username\"\": \"\"JoeMayo\"\",\n\t\t\t\"\"pinned_tweet_id\"\": \"\"1258043891434962945\"\",\n\t\t\t\"\"protected\"\": true,\n\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1185764990403268613/8GoXoOtz_normal.jpg\"\",\n\t\t\t\"\"id\"\": \"\"15411837\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\t\t\"\"followers_count\"\": 10024,\n\t\t\t\t\"\"following_count\"\": 3539,\n\t\t\t\t\"\"tweet_count\"\": 3800,\n\t\t\t\t\"\"listed_count\"\": 270\n\t\t\t},\n\t\t\t\"\"verified\"\": true,\n\t\t\t\"\"description\"\": \"\"Author, Instructor, and Independent Consultant. Author of Programming the Microsoft Bot Framework/MS Press.\\n#ai #chatbots #csharp #linq2twitter #twitterapi\"\",\n\t\t\t\"\"created_at\"\": \"\"2008-07-13T04:35:50.000Z\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\"\"url\"\": \"\"https://t.co/Y6dXyWxanS\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/Y6dXyWxanS\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\"\"hashtags\"\": [\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 108,\n\t\t\t\t\t\t\t\"\"end\"\": 111,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"ai\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 112,\n\t\t\t\t\t\t\t\"\"end\"\": 121,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"chatbots\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 122,\n\t\t\t\t\t\t\t\"\"end\"\": 129,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"csharp\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 130,\n\t\t\t\t\t\t\t\"\"end\"\": 143,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"linq2twitter\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 144,\n\t\t\t\t\t\t\t\"\"end\"\": 155,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"twitterapi\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\"\"username\"\": \"\"Linq2Twitr\"\",\n\t\t\t\"\"protected\"\": false,\n\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/378800000625948439/57f4351535721aeedc632745ceaacfea_normal.png\"\",\n\t\t\t\"\"id\"\": \"\"16761255\"\",\n\t\t\t\"\"public_metrics\"\": {\n\t\t\"\"followers_count\"\": 353,\n\t\t\t\t\"\"following_count\"\": 35,\n\t\t\t\t\"\"tweet_count\"\": 646,\n\t\t\t\t\"\"listed_count\"\": 14\n\t\t\t},\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"description\"\": \"\"LINQ to Twitter is a 3rd party library that helps .NET developers write code for the Twitter API - Created by @JoeMayo\"\",\n\t\t\t\"\"created_at\"\": \"\"2008-10-15T05:15:40.000Z\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\",\n\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\"\"url\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo/LinqTo…\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 110,\n\t\t\t\t\t\t\t\"\"end\"\": 118,\n\t\t\t\t\t\t\t\"\"username\"\": \"\"JoeMayo\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t}\n}\n\t]\n}\";\n\n\t\tpublic const string FullUserWithTweet = @\"{\n\t\"\"data\"\": [\n\t\t{\n\t\t\t\"\"protected\"\": false,\n\t\t\t\"\"name\"\": \"\"Joe Mayo\"\",\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"created_at\"\": \"\"2008-07-13T04:35:50.000Z\"\",\n\t\t\t\"\"url\"\": \"\"https://t.co/Y6dXyWxanS\"\",\n\t\t\t\"\"description\"\": \"\"Author, Instructor, & Independent Consultant. Author of C# Cookbook:\\n\\n  - https://t.co/b436r6hCUK - @OReillyMedia\\n\\n#ai #chatbots #csharp #linq2twitter #twitterapi\"\",\n\t\t\t\"\"username\"\": \"\"JoeMayo\"\",\n\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/1185764990403268613/8GoXoOtz_normal.jpg\"\",\n\t\t\t\"\"pinned_tweet_id\"\": \"\"1326282271372963840\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"url\"\": {\n\t\t\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/Y6dXyWxanS\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 74,\n\t\t\t\t\t\t\t\"\"end\"\": 97,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/b436r6hCUK\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"http://bit.ly/CSharpCookbook\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly/CSharpCookbook\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"\"hashtags\"\": [\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 115,\n\t\t\t\t\t\t\t\"\"end\"\": 118,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"ai\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 119,\n\t\t\t\t\t\t\t\"\"end\"\": 128,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"chatbots\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 129,\n\t\t\t\t\t\t\t\"\"end\"\": 136,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"csharp\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 137,\n\t\t\t\t\t\t\t\"\"end\"\": 150,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"linq2twitter\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 151,\n\t\t\t\t\t\t\t\"\"end\"\": 162,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"twitterapi\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t\t{\n\t\t\"\"start\"\": 100,\n\t\t\t\t\t\t\t\"\"end\"\": 113,\n\t\t\t\t\t\t\t\"\"username\"\": \"\"OReillyMedia\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"\"public_metrics\"\": {\n\t\"\"followers_count\"\": 10094,\n\t\t\t\t\"\"following_count\"\": 2530,\n\t\t\t\t\"\"tweet_count\"\": 3850,\n\t\t\t\t\"\"listed_count\"\": 269\n\t\t\t},\n\t\t\t\"\"id\"\": \"\"15411837\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\"\n\t\t},\n\t\t{\n\t\"\"protected\"\": false,\n\t\t\t\"\"name\"\": \"\"LINQ to Twitr\"\",\n\t\t\t\"\"verified\"\": false,\n\t\t\t\"\"created_at\"\": \"\"2008-10-15T05:15:40.000Z\"\",\n\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\"\"description\"\": \"\"LINQ to Twitter is a 3rd party library that helps .NET developers write code for the Twitter API - Created by @JoeMayo\"\",\n\t\t\t\"\"username\"\": \"\"Linq2Twitr\"\",\n\t\t\t\"\"profile_image_url\"\": \"\"https://pbs.twimg.com/profile_images/378800000625948439/57f4351535721aeedc632745ceaacfea_normal.png\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\"\"url\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 0,\n\t\t\t\t\t\t\t\"\"end\"\": 23,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo/LinqTo…\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"description\"\": {\n\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 110,\n\t\t\t\t\t\t\t\"\"end\"\": 118,\n\t\t\t\t\t\t\t\"\"username\"\": \"\"JoeMayo\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t},\n\t\t\t\"\"public_metrics\"\": {\n\t\t\"\"followers_count\"\": 354,\n\t\t\t\t\"\"following_count\"\": 40,\n\t\t\t\t\"\"tweet_count\"\": 677,\n\t\t\t\t\"\"listed_count\"\": 14\n\t\t\t},\n\t\t\t\"\"id\"\": \"\"16761255\"\",\n\t\t\t\"\"location\"\": \"\"Las Vegas, NV\"\"\n\t\t}\n\t],\n\t\"\"includes\"\": {\n\t\"\"tweets\"\": [\n\t\t\t{\n\t\t\"\"text\"\": \"\"Announcing (Early Release) C# Cookbook: Modern Recipes for Professional Developers: https://t.co/dvlZNGp0px\\n\\nThis is the first two chapters and there are more to come. This is the Raw and Unedited version - available at @OReillyMedia \\n\\n#dotnet #csharp\"\",\n\t\t\t\t\"\"id\"\": \"\"1326282271372963840\"\",\n\t\t\t\t\"\"public_metrics\"\": {\n\t\t\t\"\"retweet_count\"\": 3,\n\t\t\t\t\t\"\"reply_count\"\": 0,\n\t\t\t\t\t\"\"like_count\"\": 14,\n\t\t\t\t\t\"\"quote_count\"\": 0\n\t\t\t\t},\n\t\t\t\t\"\"entities\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 84,\n\t\t\t\t\t\t\t\"\"end\"\": 107,\n\t\t\t\t\t\t\t\"\"url\"\": \"\"https://t.co/dvlZNGp0px\"\",\n\t\t\t\t\t\t\t\"\"expanded_url\"\": \"\"https://bit.ly/CSharpCookbook\"\",\n\t\t\t\t\t\t\t\"\"display_url\"\": \"\"bit.ly/CSharpCookbook\"\",\n\t\t\t\t\t\t\t\"\"images\"\": [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\"\"url\"\": \"\"https://pbs.twimg.com/news_img/1334056172349923328/PVWC5sd_?format=jpg&name=orig\"\",\n\t\t\t\t\t\t\t\t\t\"\"width\"\": 140,\n\t\t\t\t\t\t\t\t\t\"\"height\"\": 184\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\"\"url\"\": \"\"https://pbs.twimg.com/news_img/1334056172349923328/PVWC5sd_?format=jpg&name=150x150\"\",\n\t\t\t\t\t\t\t\t\t\"\"width\"\": 140,\n\t\t\t\t\t\t\t\t\t\"\"height\"\": 140\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\"\"status\"\": 200,\n\t\t\t\t\t\t\t\"\"title\"\": \"\"C# Cookbook\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Even if you're familiar with C# syntax, knowing how to combine various language features is a critical skill when building applications. This handy cookbook is packed full of recipes to … - Selection from C# Cookbook [Book]\"\",\n\t\t\t\t\t\t\t\"\"unwound_url\"\": \"\"https://www.oreilly.com/library/view/c-cookbook/9781492093688/\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"\"mentions\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 220,\n\t\t\t\t\t\t\t\"\"end\"\": 233,\n\t\t\t\t\t\t\t\"\"username\"\": \"\"OReillyMedia\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\t\"\"hashtags\"\": [\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 236,\n\t\t\t\t\t\t\t\"\"end\"\": 243,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"dotnet\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\"\"start\"\": 244,\n\t\t\t\t\t\t\t\"\"end\"\": 251,\n\t\t\t\t\t\t\t\"\"tag\"\": \"\"csharp\"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"\"author_id\"\": \"\"15411837\"\",\n\t\t\t\t\"\"context_annotations\"\": [\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"65\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Vertical\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Top level interests and hobbies groupings, like Food or Travel\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"848920371311001600\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Technology\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Technology and computing\"\"\n\t\t\t\t\t\t}\n\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"848921413196984320\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Computer programming\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Computer programming\"\"\n\t\t\t\t\t\t}\n\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"898673391980261376\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Web development\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Web Development\"\"\n\t\t\t\t\t\t}\n\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"85\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Book Genre\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"A genre for books, like Fiction\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"859532072813158400\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Food inspiration\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Food\"\"\n\t\t\t\t\t\t}\n\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"65\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Vertical\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Top level interests and hobbies groupings, like Food or Travel\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"825047692124442624\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Food\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Food\"\"\n\t\t\t\t\t\t}\n\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"66\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies Category\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"A grouping of interests and hobbies entities, like Novelty Food or Destinations\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"831530561680191490\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Cooking\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Cooking/Baking\"\"\n\t\t\t\t\t\t}\n\t\t},\n\t\t\t\t\t{\n\t\t\t\"\"domain\"\": {\n\t\t\t\t\"\"id\"\": \"\"67\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Interests and Hobbies\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Interests, opinions, and behaviors of individuals, groups, or cultures; like Speciality Cooking or Theme Parks\"\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"\"entity\"\": {\n\t\t\t\t\"\"id\"\": \"\"846736745517350912\"\",\n\t\t\t\t\t\t\t\"\"name\"\": \"\"Recipes\"\",\n\t\t\t\t\t\t\t\"\"description\"\": \"\"Recipies/Books\"\"\n\t\t\t\t\t\t}\n\t\t}\n\t\t\t\t],\n\t\t\t\t\"\"conversation_id\"\": \"\"1326282271372963840\"\",\n\t\t\t\t\"\"reply_settings\"\": \"\"everyone\"\",\n\t\t\t\t\"\"source\"\": \"\"Twitter Web App\"\",\n\t\t\t\t\"\"lang\"\": \"\"en\"\",\n\t\t\t\t\"\"created_at\"\": \"\"2020-11-10T21:55:09.000Z\"\",\n\t\t\t\t\"\"possibly_sensitive\"\": false\n\t\t\t}\n\t\t]\n\t}\n}\";\n\n\t\tconst string ErrorTweet = @\"{\n\t\"\"errors\"\": [\n\t\t{\n\t\t\t\"\"detail\"\": \"\"Could not find tweet with ids: [1].\"\",\n\t\t\t\"\"title\"\": \"\"Not Found Error\"\",\n\t\t\t\"\"resource_type\"\": \"\"tweet\"\",\n\t\t\t\"\"parameter\"\": \"\"ids\"\",\n\t\t\t\"\"value\"\": \"\"1\"\",\n\t\t\t\"\"type\"\": \"\"https://api.twitter.com/2/problems/resource-not-found\"\"\n\t\t}\n\t]\n}\";\n\n\t\tconst string SingleUser = @\"{\n  \"\"data\"\": {\n    \"\"created_at\"\": \"\"2013-12-14T04:35:55.000Z\"\",\n    \"\"username\"\": \"\"TwitterDev\"\",\n    \"\"pinned_tweet_id\"\": \"\"1255542774432063488\"\",\n    \"\"id\"\": \"\"2244994945\"\",\n    \"\"name\"\": \"\"Twitter Dev\"\"\n  }\n}\";\n\n\t}\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/UserTests/UserCommandsTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing LinqToTwitter;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System.Net.Http;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing LinqToTwitter.OAuth;\n\nnamespace LinqToTwitterPcl.Tests.AccountTests\n{\n    [TestClass]\n    public class UserCommandsTests\n    {\n        Mock<ITwitterExecute> execMock;\n\n        public UserCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)\n        {\n            var authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(response);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(\n                exec => exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(\n                exec => exec.PostMediaAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<Dictionary<string, string>>(),\n                    It.IsAny<byte[]>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<bool>(),\n                    It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<TwitterUserTargetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            execMock.Setup(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    It.IsAny<string>(),\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<RetweetTweetID>(),\n                    It.IsAny<CancellationToken>()))\n                .Returns(tcsResponse.Task);\n            var ctx = new TwitterContext(execMock.Object);\n            return ctx;\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_ScreenName_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(ScreenName);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_WithRawResponse_Succeeds()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            await ctx.ReportSpamAsync(ScreenName);\n\n            Assert.AreEqual(SingleUserResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_UserID_Invokes_Executor_Execute()\n        {\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(1);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_WithBlockUer_InvokesExecutorExecute()\n        {\n            const string PerformBlock = \"perform_block\";\n            const string ScreenName = \"twitterapi\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            User actual = await ctx.ReportSpamAsync(1, performBlock: true);\n\n            execMock.Verify(exec =>\n                exec.PostFormUrlEncodedToTwitterAsync<User>(\n                    HttpMethod.Post.ToString(),\n                    \"https://api.twitter.com/1.1/users/report_spam.json\",\n                    It.Is<Dictionary<string, string>>(parms => parms.ContainsKey(PerformBlock) && parms[PerformBlock] == bool.TrueString.ToLower()),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n            Assert.AreEqual(ScreenName, actual.ScreenNameResponse);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_Throws_On_Null_ScreenName()\n        {\n            const string ExpectedParamName = \"screenName\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.ReportSpamAsync((string)null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task ReportSpamAsync_Throws_On_Zero_UserID()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.ReportSpamAsync(0));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task Follow_WithProperParameters_Succeeds()\n        {\n            const string followingUser = \"abc\";\n            const string userToFollow = \"def\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(FollowResponse);\n\n            TwitterUserFollowResponse response =\n                await ctx.FollowAsync(followingUser, userToFollow);\n\n            Assert.IsNotNull(response);\n            TwitterUserFollowResponseData data = response.Data;\n            Assert.IsNotNull(data);\n            Assert.IsTrue(data.Following);\n        }\n\n        [TestMethod]\n        public async Task Follow_WithoutSource_Throws()\n        {\n            const string ExpectedParamName = \"sourceUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(FollowResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.FollowAsync(null, \"abc\"));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task Follow_WithoutTarget_Throws()\n        {\n            const string ExpectedParamName = \"targetUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(FollowResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.FollowAsync(\"abc\", null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnFollow_WithProperParameters_Succeeds()\n        {\n            const string followingUser = \"abc\";\n            const string userToFollow = \"def\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(UnFollowResponse);\n\n            TwitterUserFollowResponse response =\n                await ctx.UnFollowAsync(followingUser, userToFollow);\n\n            Assert.IsNotNull(response);\n            TwitterUserFollowResponseData data = response.Data;\n            Assert.IsNotNull(data);\n            Assert.IsFalse(data.Following);\n        }\n\n        [TestMethod]\n        public async Task UnFollow_WithoutSource_Throws()\n        {\n            const string ExpectedParamName = \"sourceUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(UnFollowResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnFollowAsync(null, \"abc\"));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UnFollow_WithoutTarget_Throws()\n        {\n            const string ExpectedParamName = \"targetUserID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(UnFollowResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UnFollowAsync(\"abc\", null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task Retweet_WithProperParameters_Succeeds()\n        {\n            const string userID = \"abc\";\n            const string tweetID = \"def\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(RetweetResponse);\n\n            RetweetResponse response =\n                await ctx.RetweetAsync(userID, tweetID);\n\n            Assert.IsNotNull(response);\n            RetweetResponseData data = response.Data;\n            Assert.IsNotNull(data);\n            Assert.IsTrue(data.Retweeted);\n        }\n\n        [TestMethod]\n        public async Task Retweet_WithoutUserID_Throws()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(RetweetResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.RetweetAsync(null, \"abc\"));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task Retweet_WithoutTweetID_Throws()\n        {\n            const string ExpectedParamName = \"tweetID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(RetweetResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.RetweetAsync(\"abc\", null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UndoRetweet_WithProperParameters_Succeeds()\n        {\n            const string userID = \"abc\";\n            const string sourceTweetID = \"def\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(UndoRetweetResponse);\n\n            RetweetResponse response =\n                await ctx.UndoRetweetAsync(userID, sourceTweetID);\n\n            Assert.IsNotNull(response);\n            RetweetResponseData data = response.Data;\n            Assert.IsNotNull(data);\n            Assert.IsFalse(data.Retweeted);\n        }\n\n        [TestMethod]\n        public async Task UndoRetweet_WithoutUserID_Throws()\n        {\n            const string ExpectedParamName = \"userID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(UndoRetweetResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UndoRetweetAsync(null, \"abc\"));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UndoRetweet_WithoutTweetID_Throws()\n        {\n            const string ExpectedParamName = \"sourceTweetID\";\n            var ctx = InitTwitterContextWithPostToTwitter<User>(UndoRetweetResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UndoRetweetAsync(\"abc\", null));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_banner_url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",   \n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string FollowResponse = @\"{\n    \"\"data\"\": {\n\t\t\"\"following\"\": true,\n\t\t\"\"pending_follow\"\": false\n\t}\n}\n\";\n\n        const string UnFollowResponse = @\"{\n    \"\"data\"\": {\n\t\t\"\"following\"\": false,\n\t\t\"\"pending_follow\"\": false\n\t}\n}\n\";\n\n        const string RetweetResponse = @\"{\n    \"\"data\"\": {\n\t\t\"\"retweeted\"\": true\n\t}\n}\n\";\n\n        const string UndoRetweetResponse = @\"{\n    \"\"data\"\": {\n\t\t\"\"retweeted\"\": false\n\t}\n}\n\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/UserTests/UserRequestProcessorTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing LinqToTwitter;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing LinqToTwitter.Common;\nusing LinqToTwitter.Tests.Common;\nusing LinqToTwitter.Provider;\n\nnamespace LinqToTwitterPcl.Tests.UserTests\n{\n    [TestClass]\n    public class UserRequestProcessorTests\n    {\n        public UserRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_BannerSize_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/profile_banner.json?user_id=15411837&screen_name=JoeMayo\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"15411837\" },\n                { \"ScreenName\", \"JoeMayo\" }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_ScreenName_Or_UserID()\n        {\n            const string ExpectedParamName = \"ScreenNameOrUserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"15411837\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonNull_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", null },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_UserID()\n        {\n            const string ExpectedParamName = \"UserID\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                { \"UserID\", \"\" },\n                //{ \"ScreenName\", \"JoeMayo\" }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonNull_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", null },\n                { \"ScreenName\", null }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_BannerSize_Requires_NonEmpty_ScreenName()\n        {\n            const string ExpectedParamName = \"ScreenName\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.BannerSizes).ToString() },\n                //{ \"UserID\", \"\" },\n                { \"ScreenName\", \"\" }\n            };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(ExpectedParamName, ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Search_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/search.json?q=Joe%20Mayo&page=2&count=10&include_entities=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n                { \"Query\", \"Joe Mayo\" },\n                { \"Page\", \"2\" },\n                { \"Count\", \"10\" },\n                { \"IncludeEntities\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Search_Throws_On_Missing_Query()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Search).ToString() },\n            };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Query\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Contributees_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributees.json?screen_name=JoeMayo&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributees).ToString() },\n                //{ \"UserID\", \"123\" },\n                { \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Constructs_Contributors_Url()\n        {\n            const string ExpectedUrl = \"https://api.twitter.com/1.1/users/contributors.json?user_id=123&include_entities=true&skip_status=true\";\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>\n            {\n                { \"Type\", ((int)UserType.Contributors).ToString() },\n                { \"UserID\", \"123\" },\n                //{ \"ScreenName\", \"JoeMayo\" },\n                { \"IncludeEntities\", true.ToString() },\n                { \"SkipStatus\", true.ToString() }\n            };\n\n            Request req = reqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(ExpectedUrl, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Missing_Type()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string> { };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(parameters));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_Throws_On_Null_Params()\n        {\n            var reqProc = new UserRequestProcessor<User> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => reqProc.BuildUrl(null));\n\n            Assert.AreEqual<string>(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void GetParameters_Handles_Input_Params()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Expression<Func<User, bool>> expression =\n            user =>\n                user.Type == UserType.Search &&\n                user.UserID == 10 &&\n                user.UserIdList == \"1,2\" &&\n                user.ScreenName == \"JoeMayo\" &&\n                user.ScreenNameList == \"JoeMayo,Linq2Tweeter\" &&\n                user.Cursor == 10819235 &&\n                user.Slug == \"twitter\" &&\n                user.Query == \"Joe Mayo\" &&\n                user.Count == 10 &&\n                user.Lang == \"it\" &&\n                user.IncludeEntities == true &&\n                user.SkipStatus == true &&\n                user.ImageSize == ProfileImageSize.Mini &&\n                user.TweetMode == TweetMode.Extended;\n\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = reqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(User.Type), ((int)UserType.Search).ToString())));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.UserID), \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.UserIdList), \"1,2\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(User.ScreenName), \"JoeMayo\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(User.ScreenNameList), \"JoeMayo,Linq2Tweeter\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Cursor), \"10819235\")));\n            Assert.IsTrue(\n               queryParams.Contains(\n                   new KeyValuePair<string, string>(nameof(User.Slug), \"twitter\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Query), \"Joe Mayo\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Count), \"10\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.Lang), \"it\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.IncludeEntities), \"True\")));\n            Assert.IsTrue(\n              queryParams.Contains(\n                  new KeyValuePair<string, string>(nameof(User.SkipStatus), \"True\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(User.ImageSize), ((int)ProfileImageSize.Mini).ToString())));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(nameof(User.TweetMode), ((int)TweetMode.Extended).ToString())));\n        }\n\n        [TestMethod]\n        public void ProcessResults_Retains_Original_Input_Parameters()\n        {\n            var reqProc = new UserRequestProcessor<User>\n            {\n                Type = UserType.Search,\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                UserID = 123ul,\n                UserIdList = \"1,2\",\n                ScreenName = \"JoeMayo\",\n                ScreenNameList = \"JoeMayo,Linq2Tweeter\",\n                Page = 1,\n                Count = 10,\n                Cursor = 456,\n                Slug = \"myslug\",\n                Query = \"myquery\",\n                Lang = \"en-US\",\n                SkipStatus = true,\n                ImageSize = ProfileImageSize.Bigger,\n                IncludeEntities = true,\n                TweetMode = TweetMode.Extended\n            };\n\n            List<User> users = reqProc.ProcessResults(MultipleUserResponse);\n\n            Assert.IsNotNull(users);\n            Assert.AreEqual(2, users.Count);\n            User user = users.First();\n            Assert.AreEqual(123ul, user.UserID);\n            Assert.AreEqual(\"1,2\", user.UserIdList);\n            Assert.AreEqual(\"JoeMayo\", user.ScreenName);\n            Assert.AreEqual(\"JoeMayo,Linq2Tweeter\", user.ScreenNameList);\n            Assert.AreEqual(10, user.Count);\n            Assert.AreEqual(456L, user.Cursor);\n            Assert.AreEqual(\"myslug\", user.Slug);\n            Assert.AreEqual(\"myquery\", user.Query);\n            Assert.AreEqual(\"en-US\", user.Lang);\n            Assert.IsTrue(user.SkipStatus);\n            Assert.AreEqual(ProfileImageSize.Bigger, user.ImageSize);\n            Assert.IsTrue(user.IncludeEntities);\n            Assert.AreEqual(TweetMode.Extended, user.TweetMode);\n        }\n\n        [TestMethod]\n        public void UserRequestProcessor_Works_With_Json_Format_Data()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(reqProc, typeof(IRequestProcessorWantsJson));\n        }\n\n        [TestMethod]\n        public void UserRequestProcessor_Handles_Actions()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            Assert.IsInstanceOfType(reqProc, typeof(IRequestProcessorWithAction<User>));\n        }\n\n        void VerifySingleUserResponse(User user)\n        {\n            Assert.IsNotNull(user);\n            Assert.IsNotNull(user.BannerSizes);\n            Assert.IsFalse(user.BannerSizes.Any());\n            Assert.IsNotNull(user.Categories);\n            Assert.IsFalse(user.Categories.Any());\n            Assert.AreEqual(\"6253282\", user.UserIDResponse);\n            Assert.AreEqual(\"twitterapi\", user.ScreenNameResponse);\n            Assert.AreEqual(\"San Francisco, CA\", user.Location);\n            Assert.IsNotNull(user.Description);\n            Assert.IsTrue(user.Description.StartsWith(\"The Real Twitter API.\"));\n            Assert.AreEqual(\"http://dev.twitter.com\", user.Url);\n            Assert.IsFalse(user.Protected);\n            Assert.AreEqual(1009508, user.FollowersCount);\n            Assert.AreEqual(31, user.FriendsCount);\n            Assert.AreEqual(10361, user.ListedCount);\n            Assert.AreEqual(new DateTime(2007, 5, 23, 6, 1, 13), user.CreatedAt);\n            Assert.AreEqual(24, user.FavoritesCount);\n            Assert.AreEqual(-28800, user.UtcOffset);\n            Assert.AreEqual(\"Pacific Time (US & Canada)\", user.TimeZone);\n            Assert.IsTrue(user.GeoEnabled);\n            Assert.IsTrue(user.Verified);\n            Assert.AreEqual(3278, user.StatusesCount);\n            Assert.AreEqual(\"en\", user.LangResponse);\n            Status status = user.Status;\n            Assert.IsNotNull(status);\n            Assert.AreEqual(\"web\", status.Source);\n            List<Contributor> contributors = status.Contributors;\n            Assert.IsNotNull(contributors);\n            Assert.IsTrue(contributors.Any());\n            Contributor contributor = contributors.First();\n            Assert.IsNotNull(contributor);\n            Assert.IsTrue(user.ContributorsEnabled);\n            Assert.IsFalse(user.IsTranslator);\n            Assert.AreEqual(\"E8F2F7\", user.ProfileBackgroundColor);\n            Assert.AreEqual(\"http://a0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrl);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_background_images/229557229/twitterapi-bg.png\", user.ProfileBackgroundImageUrlHttps);\n            Assert.IsFalse(user.ProfileBackgroundTile);\n            Assert.AreEqual(\"http://a0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrl);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_images/1438634086/avatar_normal.png\", user.ProfileImageUrlHttps);\n            Assert.AreEqual(\"0094C2\", user.ProfileLinkColor);\n            Assert.AreEqual(\"0094C2\", user.ProfileSidebarBorderColor);\n            Assert.AreEqual(\"A9D9F1\", user.ProfileSidebarFillColor);\n            Assert.AreEqual(\"437792\", user.ProfileTextColor);\n            Assert.IsTrue(user.ProfileUseBackgroundImage);\n            Assert.IsFalse(user.ShowAllInlineMedia);\n            Assert.IsFalse(user.DefaultProfile);\n            Assert.IsFalse(user.DefaultProfileImage);\n            Assert.IsFalse(user.Following);\n            Assert.IsFalse(user.FollowRequestSent);\n            Assert.IsFalse(user.Notifications);\n            Assert.IsNotNull(user.Entities?.Description?.UrlEntities);\n            Assert.IsTrue(user.Entities.Description.UrlEntities.Any());\n            Assert.IsNotNull(user.Entities?.Url?.UrlEntities);\n            Assert.IsTrue(user.Entities.Url.UrlEntities.Any());\n        }\n\n        [TestMethod]\n        public void ProcessActionResult_Parses_SingleUser_Response()\n        {\n            var reqProc = new UserRequestProcessor<User>();\n\n            User user = reqProc.ProcessActionResult(SingleUserResponse, UserAction.SingleUser);\n\n            VerifySingleUserResponse(user);\n        }\n\n        void TestMultipleUserResponse(UserType type)\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = type, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(MultipleUserResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.IsTrue(userList.Any());\n            User user = userList.First();\n            Assert.IsNotNull(user);\n            Assert.AreEqual(\"bbccff\", user.ProfileSidebarBorderColor);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Search_Response()\n        {\n            TestMultipleUserResponse(UserType.Search);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Contributee_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributees);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_Contributor_Response()\n        {\n            TestMultipleUserResponse(UserType.Contributors);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Parses_BannerSizes_Response()\n        {\n            var reqProc = new UserRequestProcessor<User> { Type = UserType.BannerSizes, BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> userList = reqProc.ProcessResults(BannerSizesResponse);\n\n            Assert.IsNotNull(userList);\n            Assert.IsTrue(userList.Any());\n            Assert.AreEqual(1, userList.Count);\n            User user = userList.Single();\n            Assert.IsNotNull(user);\n            List<BannerSize> bannerSizes = user.BannerSizes;\n            Assert.IsNotNull(bannerSizes);\n            Assert.AreEqual(6, bannerSizes.Count);\n            BannerSize firstSize = bannerSizes.First();\n            Assert.IsNotNull(firstSize);\n            Assert.AreEqual(\"ipad_retina\", firstSize.Label);\n            Assert.AreEqual(1252, firstSize.Width);\n            Assert.AreEqual(626, firstSize.Height);\n            Assert.AreEqual(\"https://si0.twimg.com/profile_banners/16761255/1355801341/ipad_retina\", firstSize.Url);\n        }\n\n        [TestMethod]\n        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()\n        {\n            var userProc = new UserRequestProcessor<User> { BaseUrl = \"http://api.twitter.com/1.1/\" };\n\n            List<User> users = userProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(users.Any());\n        }\n\n        const string SingleUserResponse = @\"{\n   \"\"id\"\":6253282,\n   \"\"id_str\"\":\"\"6253282\"\",\n   \"\"name\"\":\"\"Twitter API\"\",\n   \"\"screen_name\"\":\"\"twitterapi\"\",\n   \"\"location\"\":\"\"San Francisco, CA\"\",\n   \"\"description\"\":\"\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\"\",\n   \"\"url\"\":\"\"http:\\/\\/dev.twitter.com\"\",\n\t\"\"entities\"\": {\n\t\t\"\"url\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t{\n\t\t\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo/LinqTo…\"\",\n\t\t\t\t\t\"\"indices\"\": [\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t23\n\t\t\t\t\t]\n                }\n\t\t\t]\n\t\t},\n\t\t\"\"description\"\": {\n\t\t\t\"\"urls\"\": [\n\t\t\t\t{\n\t\t\t\t\t\"\"url\"\": \"\"https://t.co/7AhNKZC73J\"\",\n\t\t\t\t\t\"\"expanded_url\"\": \"\"https://github.com/JoeMayo/LinqToTwitter\"\",\n\t\t\t\t\t\"\"display_url\"\": \"\"github.com/JoeMayo/LinqTo…\"\",\n\t\t\t\t\t\"\"indices\"\": [\n\t\t\t\t\t\t57,\n\t\t\t\t\t\t80\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n   \"\"protected\"\":false,\n   \"\"followers_count\"\":1009508,\n   \"\"friends_count\"\":31,\n   \"\"listed_count\"\":10361,\n   \"\"created_at\"\":\"\"Wed May 23 06:01:13 +0000 2007\"\",\n   \"\"favourites_count\"\":24,\n   \"\"utc_offset\"\":-28800,\n   \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n   \"\"geo_enabled\"\":true,\n   \"\"verified\"\":true,\n   \"\"statuses_count\"\":3278,\n   \"\"lang\"\":\"\"en\"\",\n   \"\"status\"\":{\n      \"\"created_at\"\":\"\"Mon Apr 30 17:16:17 +0000 2012\"\",\n      \"\"id\"\":197011505181507585,\n      \"\"id_str\"\":\"\"197011505181507585\"\",\n      \"\"text\"\":\"\"Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\\/\\/t.co\\/pQOUNKGD  @rno @jasoncosta\"\",\n      \"\"source\"\":\"\"web\"\",\n      \"\"truncated\"\":false,\n      \"\"in_reply_to_status_id\"\":null,\n      \"\"in_reply_to_status_id_str\"\":null,\n      \"\"in_reply_to_user_id\"\":null,\n      \"\"in_reply_to_user_id_str\"\":null,\n      \"\"in_reply_to_screen_name\"\":null,\n      \"\"geo\"\":null,\n      \"\"coordinates\"\":null,\n      \"\"place\"\":null,\n      \"\"contributors\"\":[\n         14927800\n      ],\n      \"\"retweet_count\"\":25,\n      \"\"favorited\"\":false,\n      \"\"retweeted\"\":false,\n      \"\"possibly_sensitive\"\":false\n   },\n   \"\"contributors_enabled\"\":true,\n   \"\"is_translator\"\":false,\n   \"\"profile_background_color\"\":\"\"E8F2F7\"\",\n   \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/229557229\\/twitterapi-bg.png\"\",\n   \"\"profile_background_tile\"\":false,\n   \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1438634086\\/avatar_normal.png\"\",\n   \"\"profile_link_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_border_color\"\":\"\"0094C2\"\",\n   \"\"profile_sidebar_fill_color\"\":\"\"A9D9F1\"\",\n   \"\"profile_text_color\"\":\"\"437792\"\",\n   \"\"profile_use_background_image\"\":true,\n   \"\"show_all_inline_media\"\":false,\n   \"\"default_profile\"\":false,\n   \"\"default_profile_image\"\":false,\n   \"\"following\"\":false,\n   \"\"follow_request_sent\"\":false,\n   \"\"notifications\"\":false\n}\";\n\n        const string CategoriesResponse = @\"[\n   {\n      \"\"size\"\":106,\n      \"\"name\"\":\"\"Music\"\",\n      \"\"slug\"\":\"\"music\"\"\n   },\n   {\n      \"\"size\"\":78,\n      \"\"name\"\":\"\"Sports\"\",\n      \"\"slug\"\":\"\"sports\"\"\n   },\n   {\n      \"\"size\"\":79,\n      \"\"name\"\":\"\"Entertainment\"\",\n      \"\"slug\"\":\"\"entertainment\"\"\n   }\n]\";\n\n        const string CategoryResponse = @\"{\n   \"\"size\"\":64,\n   \"\"name\"\":\"\"Funny\"\",\n   \"\"users\"\":[\n      {\n         \"\"id\"\":77888423,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/omg-TestMethods.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"006da8\"\",\n         \"\"statuses_count\"\":9494,\n         \"\"created_at\"\":\"\"Mon Sep 28 01:28:23 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-21600,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/360808368\\/aquarium.jpg\"\",\n         \"\"friends_count\"\":7,\n         \"\"name\"\":\"\"OMG TestMethods\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":false,\n         \"\"profile_text_color\"\":\"\"332d2d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"OMGTestMethods\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"Chicago, Illinois\"\",\n         \"\"verified\"\":false,\n         \"\"profile_sidebar_border_color\"\":\"\"ffffff\"\",\n         \"\"id_str\"\":\"\"77888423\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Central Time (US & Canada)\"\",\n         \"\"description\"\":\"\"The #1 TestMethod Site. For more TestMethods, follow:\\r\\n @OMGTestMethodsSex @OMGTestMethodsCelebs @OMGTestMethodsAnimals @OMGTestMethodsSports\"\",\n         \"\"profile_background_tile\"\":false,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"f2f2f2\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1818054089\\/OMGWhite200frames_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"479ec9\"\",\n         \"\"listed_count\"\":32263,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":4042870\n      },\n      {\n         \"\"id\"\":25521487,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":false,\n         \"\"url\"\":\"\"http:\\/\\/www.danieltosh.com\\/\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"2FC2EF\"\",\n         \"\"statuses_count\"\":5219,\n         \"\"created_at\"\":\"\"Fri Mar 20 15:32:52 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-28800,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12054191\\/toshbck.jpg\"\",\n         \"\"friends_count\"\":59,\n         \"\"name\"\":\"\"daniel tosh\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"666666\"\",\n         \"\"favourites_count\"\":6,\n         \"\"screen_name\"\":\"\"danieltosh\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"beach\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"181A1E\"\",\n         \"\"id_str\"\":\"\"25521487\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n         \"\"description\"\":\"\"not a doctor\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"252429\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/218283715\\/Daniel-Tosh---Shot_2-12976_normal.gif\"\",\n         \"\"profile_background_color\"\":\"\"1A1B1F\"\",\n         \"\"listed_count\"\":33001,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":5520666\n      },\n      {\n         \"\"id\"\":36686415,\n         \"\"geo_enabled\"\":false,\n         \"\"notifications\"\":false,\n         \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"is_translator\"\":false,\n         \"\"show_all_inline_media\"\":true,\n         \"\"url\"\":\"\"http:\\/\\/www.zachgalifianakis.com\"\",\n         \"\"follow_request_sent\"\":false,\n         \"\"profile_link_color\"\":\"\"c5bbb5\"\",\n         \"\"statuses_count\"\":58,\n         \"\"created_at\"\":\"\"Thu Apr 30 15:19:13 +0000 2009\"\",\n         \"\"lang\"\":\"\"en\"\",\n         \"\"utc_offset\"\":-18000,\n         \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/12668082\\/bg.jpg\"\",\n         \"\"friends_count\"\":0,\n         \"\"name\"\":\"\"zach galifianakis\"\",\n         \"\"default_profile_image\"\":false,\n         \"\"profile_use_background_image\"\":true,\n         \"\"profile_text_color\"\":\"\"e29d9d\"\",\n         \"\"favourites_count\"\":0,\n         \"\"screen_name\"\":\"\"galifianakisz\"\",\n         \"\"protected\"\":false,\n         \"\"location\"\":\"\"north carolina\"\",\n         \"\"verified\"\":true,\n         \"\"profile_sidebar_border_color\"\":\"\"3b2511\"\",\n         \"\"id_str\"\":\"\"36686415\"\",\n         \"\"following\"\":false,\n         \"\"time_zone\"\":\"\"Quito\"\",\n         \"\"description\"\":\"\"OFFICIAL ZACH GALIFIANAKIS\"\",\n         \"\"profile_background_tile\"\":true,\n         \"\"default_profile\"\":false,\n         \"\"profile_sidebar_fill_color\"\":\"\"864711\"\",\n         \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1741870370\\/greg_and_zach_normal.jpg\"\",\n         \"\"profile_background_color\"\":\"\"c9bea1\"\",\n         \"\"listed_count\"\":17016,\n         \"\"contributors_enabled\"\":false,\n         \"\"followers_count\"\":1818218\n      }\n   ],\n   \"\"slug\"\":\"\"funny\"\"\n}\";\n\n        const string MultipleUserResponse = @\"[\n   {\n      \"\"id\"\":20536157,\n      \"\"geo_enabled\"\":true,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":true,\n      \"\"url\"\":\"\"http:\\/\\/www.google.com\\/support\\/\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0000cc\"\",\n      \"\"statuses_count\"\":3416,\n      \"\"created_at\"\":\"\"Tue Feb 10 19:14:39 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/6219441\\/bg-google-white-75.gif\"\",\n      \"\"friends_count\"\":366,\n      \"\"name\"\":\"\"A Googler\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"000000\"\",\n      \"\"favourites_count\"\":131,\n      \"\"screen_name\"\":\"\"google\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Mountain View, CA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"bbccff\"\",\n      \"\"id_str\"\":\"\"20536157\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"News and updates from Google\"\",\n      \"\"profile_background_tile\"\":false,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"ebeff9\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 14:33:09 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"196970449412960257\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":126,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":196970449412960257,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"There's lots of data online. We're supporting journalists who research and report on it in innovative ways http:\\/\\/t.co\\/iSNFLbh9\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/77186109\\/favicon_normal.png\"\",\n      \"\"profile_background_color\"\":\"\"ffffff\"\",\n      \"\"listed_count\"\":76043,\n      \"\"contributors_enabled\"\":true,\n      \"\"followers_count\"\":4656496\n   },\n   {\n      \"\"id\"\":50393960,\n      \"\"geo_enabled\"\":false,\n      \"\"notifications\"\":false,\n      \"\"profile_background_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"is_translator\"\":false,\n      \"\"show_all_inline_media\"\":false,\n      \"\"url\"\":\"\"http:\\/\\/www.thegatesnotes.com\"\",\n      \"\"follow_request_sent\"\":false,\n      \"\"profile_link_color\"\":\"\"0084B4\"\",\n      \"\"statuses_count\"\":476,\n      \"\"created_at\"\":\"\"Wed Jun 24 18:44:10 +0000 2009\"\",\n      \"\"lang\"\":\"\"en\"\",\n      \"\"utc_offset\"\":-28800,\n      \"\"profile_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_image_url_https\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/47468249\\/bgTwitterBack.jpg\"\",\n      \"\"friends_count\"\":107,\n      \"\"name\"\":\"\"Bill Gates\"\",\n      \"\"default_profile_image\"\":false,\n      \"\"profile_use_background_image\"\":true,\n      \"\"profile_text_color\"\":\"\"333333\"\",\n      \"\"favourites_count\"\":2,\n      \"\"screen_name\"\":\"\"BillGates\"\",\n      \"\"protected\"\":false,\n      \"\"location\"\":\"\"Seattle, WA\"\",\n      \"\"verified\"\":true,\n      \"\"profile_sidebar_border_color\"\":\"\"C0DEED\"\",\n      \"\"id_str\"\":\"\"50393960\"\",\n      \"\"following\"\":false,\n      \"\"time_zone\"\":\"\"Pacific Time (US & Canada)\"\",\n      \"\"description\"\":\"\"Sharing things I'm learning through my foundation work and other interests...\"\",\n      \"\"profile_background_tile\"\":true,\n      \"\"default_profile\"\":false,\n      \"\"profile_sidebar_fill_color\"\":\"\"DDEEF6\"\",\n      \"\"status\"\":{\n         \"\"coordinates\"\":null,\n         \"\"in_reply_to_user_id_str\"\":null,\n         \"\"in_reply_to_screen_name\"\":null,\n         \"\"favorited\"\":false,\n         \"\"place\"\":null,\n         \"\"in_reply_to_status_id\"\":null,\n         \"\"created_at\"\":\"\"Mon Apr 30 22:39:58 +0000 2012\"\",\n         \"\"possibly_sensitive\"\":false,\n         \"\"contributors\"\":null,\n         \"\"id_str\"\":\"\"197092962461696000\"\",\n         \"\"geo\"\":null,\n         \"\"in_reply_to_user_id\"\":null,\n         \"\"truncated\"\":false,\n         \"\"possibly_sensitive_editable\"\":true,\n         \"\"retweet_count\"\":215,\n         \"\"source\"\":\"\"web\"\",\n         \"\"id\"\":197092962461696000,\n         \"\"in_reply_to_status_id_str\"\":null,\n         \"\"retweeted\"\":false,\n         \"\"text\"\":\"\"You asked \\u201chow does your approach compare to 50 yrs of mixed results from NGOs\\u201d? #askbillg: http:\\/\\/t.co\\/LVuNXIDy\"\"\n      },\n      \"\"profile_image_url\"\":\"\"http:\\/\\/a0.twimg.com\\/profile_images\\/1884069342\\/BGtwitter_normal.JPG\"\",\n      \"\"profile_background_color\"\":\"\"C0DEED\"\",\n      \"\"listed_count\"\":90298,\n      \"\"contributors_enabled\"\":false,\n      \"\"followers_count\"\":6266743\n   }\n]\";\n\n        const string BannerSizesResponse = @\"{\n   \"\"sizes\"\":{\n      \"\"ipad_retina\"\":{\n         \"\"w\"\":1252,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad_retina\"\",\n         \"\"h\"\":626\n      },\n      \"\"mobile\"\":{\n         \"\"w\"\":320,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile\"\",\n         \"\"h\"\":160\n      },\n      \"\"web\"\":{\n         \"\"w\"\":520,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web\"\",\n         \"\"h\"\":260\n      },\n      \"\"web_retina\"\":{\n         \"\"w\"\":1040,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/web_retina\"\",\n         \"\"h\"\":520\n      },\n      \"\"mobile_retina\"\":{\n         \"\"w\"\":640,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/mobile_retina\"\",\n         \"\"h\"\":320\n      },\n      \"\"ipad\"\":{\n         \"\"w\"\":626,\n         \"\"url\"\":\"\"https:\\/\\/si0.twimg.com\\/profile_banners\\/16761255\\/1355801341\\/ipad\"\",\n         \"\"h\"\":313\n      }\n   }\n}\";\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/WelcomeMessageTests/WelcomeMessageCommandsTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Common.Entities;\nusing LinqToTwitter.OAuth;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.WelcomeMessageTests\n{\n    [TestClass]\n    public class WelcomeMessageCommandsTests\n    {\n        Mock<IAuthorizer> authMock;\n        Mock<ITwitterExecute> execMock;\n\n        public WelcomeMessageCommandsTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void DirectMessageRequestProcessor_Works_With_Actions()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n\n            Assert.IsInstanceOfType(wmReqProc, typeof(IRequestProcessorWithAction<WelcomeMessage>));\n        }\n\n        TwitterContext InitializeTwitterContext<TMessageType>(string responseJson)\n        {\n            authMock = new Mock<IAuthorizer>();\n            var tcsResponse = new TaskCompletionSource<string>();\n            tcsResponse.SetResult(responseJson);\n            execMock = new Mock<ITwitterExecute>();\n            execMock.SetupGet(exec => exec.Authorizer).Returns(authMock.Object);\n            execMock.Setup(exec => exec.SendJsonToTwitterAsync(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<IDictionary<string, string>>(),\n                It.IsAny<TMessageType>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            execMock.Setup(exec => exec.PostFormUrlEncodedToTwitterAsync<WelcomeMessage>(\n                It.IsAny<string>(),\n                It.IsAny<string>(),\n                It.IsAny<Dictionary<string, string>>(),\n                It.IsAny<CancellationToken>()))\n                    .Returns(tcsResponse.Task);\n            return new TwitterContext(execMock.Object);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithNullText_Throws()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = null;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewWelcomeMessageAsync(Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithEmptyText_Throws()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewWelcomeMessageAsync(Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithValidParameters_ConstructsUrl()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<WelcomeMessageValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        //[TestMethod]\n        //public async Task NewWelcomeMessageAsync_WithParameters_PopulatesInputParametersInResponse()\n        //{\n        //    const string Name = \"Test Welcome Message\";\n        //    const string Text = \"Welcome!\";\n        //    var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n        //    WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n        //    Assert.IsNotNull(welcomeMsg);\n        //    Assert.AreEqual(Name, welcomeMsg.Name);\n        //    Assert.AreEqual(Text, welcomeMsg.Text);\n        //}\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithName_ReturnsCreatedWelcomeMessage()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue value = welcomeMsg.Value;\n            Assert.IsNotNull(value);\n            WelcomeMsg msg = value.WelcomeMessage;\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"945484689657102340\", msg.Id);\n            Assert.AreEqual(\"1514256090927\", msg.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 12, 26, 02, 41, 30, 927), msg.CreatedAt);\n            WelcomeMessageData msgData = msg.MessageData;\n            Assert.IsNotNull(msgData);\n            Assert.AreEqual(\"Welcome!\", msgData.Text);\n            Entities entities = msgData.Entities;\n            Assert.IsNotNull(entities);\n            Assert.AreEqual(\"472356\", msg.SourceAppId);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            JsonElement apps = value.Apps;\n            Assert.IsNotNull(apps);\n            JsonElement app = apps.GetProperty(msg.SourceAppId);\n            Assert.IsNotNull(app);\n            Assert.AreEqual(\"472356\", app.GetString(\"id\"));\n            Assert.AreEqual(\"LINQ to Tweeter\", app.GetString(\"name\"));\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", app.GetString(\"url\"));\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const string Name = \"Test Welcome Message\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageAsync(Name, Text);\n\n            Assert.AreEqual(WelcomeMessageResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageRuleAsync_WithMissingMessageID_Throws()\n        {\n            const ulong WelcomeMessageID = 0;\n            const string Name = \"New Name\";\n            const string Text = null;\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text));\n\n            Assert.AreEqual(\"welcomeMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithNullText_Throws()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = null;\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithEmptyText_Throws()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text));\n\n            Assert.AreEqual(\"text\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/update.json?id=1\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<WelcomeMsg>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        //[TestMethod]\n        //public async Task UpdateWelcomeMessageAsync_WithParameters_PopulatesInputParametersInResponse()\n        //{\n        //    const ulong WelcomeMessageID = 1;\n        //    const string Name = \"New Name\";\n        //    const string Text = \"Welcome!\";\n        //    var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n        //    WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n        //    Assert.IsNotNull(welcomeMsg);\n        //    Assert.AreEqual(WelcomeMessageID, welcomeMsg.ID);\n        //    Assert.AreEqual(Text, welcomeMsg.Text);\n        //}\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithName_ReturnsCreatedWelcomeMessage()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue value = welcomeMsg.Value;\n            Assert.IsNotNull(value);\n            WelcomeMsg msg = value.WelcomeMessage;\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"945484689657102340\", msg.Id);\n            Assert.AreEqual(\"1514256090927\", msg.CreatedTimestamp);\n            Assert.AreEqual(new DateTime(2017, 12, 26, 02, 41, 30, 927), msg.CreatedAt);\n            WelcomeMessageData msgData = msg.MessageData;\n            Assert.IsNotNull(msgData);\n            Assert.AreEqual(\"Welcome!\", msgData.Text);\n            Entities entities = msgData.Entities;\n            Assert.IsNotNull(entities);\n            Assert.AreEqual(\"472356\", msg.SourceAppId);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            JsonElement apps = value.Apps;\n            Assert.IsNotNull(apps);\n            JsonElement app = apps.GetProperty(msg.SourceAppId);\n            Assert.IsNotNull(app);\n            Assert.AreEqual(\"472356\", app.GetString(\"id\"));\n            Assert.AreEqual(\"LINQ to Tweeter\", app.GetString(\"name\"));\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", app.GetString(\"url\"));\n        }\n\n        [TestMethod]\n        public async Task UpdateWelcomeMessageAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong WelcomeMessageID = 1;\n            const string Name = \"New Name\";\n            const string Text = \"Welcome!\";\n            var ctx = InitializeTwitterContext<WelcomeMsg>(WelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.UpdateWelcomeMessageAsync(WelcomeMessageID, Name, Text);\n\n            Assert.AreEqual(WelcomeMessageResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageAsync_WithMissingMessageID_Throws()\n        {\n            const ulong WelcomeMessageID = 0;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteWelcomeMessageAsync(WelcomeMessageID));\n\n            Assert.AreEqual(\"welcomeMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WelcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageAsync(WelcomeMessageID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/destroy.json?id=1\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    string.Empty,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageAsync_WithValidParameters_HasEmptyRawResult()\n        {\n            const ulong WelcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageAsync(WelcomeMessageID);\n\n            Assert.AreEqual(string.Empty, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithMissingMessageID_Throws()\n        {\n            const ulong welcomeMessageID = 0;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID));\n\n            Assert.AreEqual(\"welcomeMessageID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong welcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/new.json\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    It.IsAny<WelcomeMessageValue>(),\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithParameters_PopulatesInputParametersInResponse()\n        {\n            const ulong welcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID);\n\n            Assert.IsNotNull(welcomeMsg);\n            Assert.AreEqual(welcomeMessageID, welcomeMsg.ID);\n        }\n\n        [TestMethod]\n        public async Task NewWelcomeMessageRuleAsync_WithValidParameters_PopulatesRawResult()\n        {\n            const ulong welcomeMessageID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessageValue>(WelcomeMessageRuleResponse);\n\n            WelcomeMessage welcomeMsg = await ctx.NewWelcomeMessageRuleAsync(welcomeMessageID);\n\n            Assert.AreEqual(WelcomeMessageRuleResponse, ctx.RawResult);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageRuleAsync_WithMissingMessageID_Throws()\n        {\n            const ulong WelcomeMessageRuleID = 0;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            var ex = await L2TAssert.Throws<ArgumentException>(\n                async () => await ctx.DeleteWelcomeMessageRuleAsync(WelcomeMessageRuleID));\n\n            Assert.AreEqual(\"welcomeMessageRuleID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageRuleAsync_WithValidParameters_ConstructsUrl()\n        {\n            const ulong WelcomeMessageRuleID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageRuleAsync(WelcomeMessageRuleID);\n\n            execMock.Verify(exec =>\n                exec.SendJsonToTwitterAsync(\n                    It.IsAny<string>(),\n                    \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/destroy.json?id=1\",\n                    It.IsAny<IDictionary<string, string>>(),\n                    string.Empty,\n                    It.IsAny<CancellationToken>()),\n                Times.Once());\n        }\n\n        [TestMethod]\n        public async Task DeleteWelcomeMessageRuleAsync_WithValidParameters_HasEmptyRawResult()\n        {\n            const ulong WelcomeMessageRuleID = 1;\n            var ctx = InitializeTwitterContext<WelcomeMessage>(string.Empty);\n\n            await ctx.DeleteWelcomeMessageRuleAsync(WelcomeMessageRuleID);\n\n            Assert.AreEqual(string.Empty, ctx.RawResult);\n        }\n\n        #region Response Strings\n\n        const string WelcomeMessageResponse = @\"{\n\t\"\"welcome_message\"\": {\n\t\t\"\"id\"\": \"\"945484689657102340\"\",\n\t\t\"\"created_timestamp\"\": \"\"1514256090927\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n            }\n        },\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        const string WelcomeMessageRuleResponse = @\"{\n\t\"\"welcome_message_rule\"\": {\n\t\t\"\"id\"\": \"\"949450720239001600\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515201666303\"\",\n\t\t\"\"welcome_message_id\"\": \"\"949450173926617092\"\"\n\t}\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.Tests/WelcomeMessageTests/WelcomeMessageRequestProcessorTests.cs",
    "content": "﻿using LinqToTwitter.Common;\nusing LinqToTwitter.Provider;\nusing LinqToTwitter.Tests.Common;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nnamespace LinqToTwitter.Tests.WelcomeMessageTests\n{\n    [TestClass]\n    public class WelcomeMessageRequestProcessorTests\n    {\n        public WelcomeMessageRequestProcessorTests()\n        {\n            TestCulture.SetCulture();\n        }\n\n        [TestMethod]\n        public void GetParameters_Returns_Parameters()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>();\n            Expression<Func<WelcomeMessage, bool>> expression =\n                wm =>\n                    wm.Type == WelcomeMessageType.ListMessages &&\n                    wm.Count == 1 &&\n                    wm.Cursor == \"ABC123\" &&\n                    wm.ID == 456;\n            var lambdaExpression = expression as LambdaExpression;\n\n            Dictionary<string, string> queryParams = wmReqProc.GetParameters(lambdaExpression);\n\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Type\", ((int)WelcomeMessageType.ListMessages).ToString(CultureInfo.InvariantCulture))));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Count\", \"1\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"Cursor\", \"ABC123\")));\n            Assert.IsTrue(\n                queryParams.Contains(\n                    new KeyValuePair<string, string>(\"ID\", \"456\")));\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithListMessages_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/list.json?count=2&cursor=ABC123\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ListMessages).ToString(CultureInfo.InvariantCulture) },\n                        { \"Count\", \"2\" },\n                        { \"Cursor\", \"ABC123\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithListRules_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/list.json?count=2&cursor=ABC123\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ListRules).ToString(CultureInfo.InvariantCulture) },\n                        { \"Count\", \"2\" },\n                        { \"Cursor\", \"ABC123\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForShowMessageWithoutID_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowMessage).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => wmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithShowMessage_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/show.json?id=1\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowMessage).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"1\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void BuildUrl_ForShowRuleWithoutID_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowRule).ToString(CultureInfo.InvariantCulture) },\n                        //{ \"ID\", \"478805447\" },\n                };\n\n            ArgumentNullException ex = L2TAssert.Throws<ArgumentNullException>(() => wmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"ID\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithShowRule_ConstructsUrl()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            const string Expected = \"https://api.twitter.com/1.1/direct_messages/welcome_messages/rules/show.json?id=1\";\n            var parameters =\n                new Dictionary<string, string>\n                {\n                        { \"Type\", ((int)WelcomeMessageType.ShowRule).ToString(CultureInfo.InvariantCulture) },\n                        { \"ID\", \"1\" }\n                };\n\n            Request req = wmReqProc.BuildUrl(parameters);\n\n            Assert.AreEqual(Expected, req.FullUrl);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithEmptyResults_ReturnsEmptyCollection()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(string.Empty);\n\n            Assert.IsFalse(msgs.Any());\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForListWelcomeMessages_HandlesMultipleResults()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ListMessages\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQueryMultipleWelcomeMessageResponses);\n\n            WelcomeMessage welcomeMsg = msgs?.First();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            List<WelcomeMsg> msgList = val.WelcomeMessages;\n            WelcomeMsg msg = msgList.FirstOrDefault();\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            WelcomeMessageData data = msg.MessageData;\n            Assert.IsNotNull(data);\n            Assert.AreEqual(\"Welcome!\", data.Text);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForListRules_HandlesMultipleResults()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ListMessages\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQueryMultipleRuleResponses);\n\n            WelcomeMessage welcomeMsg = msgs.FirstOrDefault();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            List<WelcomeMessageRule> rules = val.WelcomeMessageRules;\n            Assert.IsNotNull(rules);\n            WelcomeMessageRule rule = rules.FirstOrDefault();\n            Assert.IsNotNull(rule);\n            Assert.AreEqual(\"949450720239001600\", rule.ID);\n            Assert.AreEqual(\"1515201666303\", rule.CreatedTimestamp);\n            Assert.AreEqual(\"949450173926617092\", rule.WelcomeMessageID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForShowWelcomeMessage_HandlesSingleResult()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ShowMessage\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQuerySingleWelcomeMessageResponse);\n\n            WelcomeMessage welcomeMsg = msgs?.First();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            WelcomeMsg msg = val.WelcomeMessage;\n            Assert.IsNotNull(msg);\n            Assert.AreEqual(\"950134376347574276\", msg.Id);\n            Assert.AreEqual(\"1515364662621\", msg.CreatedTimestamp);\n            Assert.AreEqual(\"472356\", msg.SourceAppId);\n            Assert.AreEqual(\"New Welcome Message\", msg.Name);\n            WelcomeMessageData data = msg.MessageData;\n            Assert.IsNotNull(data);\n            Assert.AreEqual(\"Welcome!\", data.Text);\n            JsonElement app = val.Apps;\n            JsonElement appDetail = app.GetProperty(\"472356\");\n            Assert.AreEqual(\"472356\", appDetail.GetString(\"id\"));\n            Assert.AreEqual(\"LINQ to Tweeter\", appDetail.GetString(\"name\"));\n            Assert.AreEqual(\"https://github.com/JoeMayo/LinqToTwitter\", appDetail.GetString(\"url\"));\n        }\n\n        [TestMethod]\n        public void ProcessResults_ForShowWelcomeMessageRule_HandlesSingleResult()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ShowMessage\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQuerySingleWelcomeMessageRuleResponse);\n\n            WelcomeMessage welcomeMsg = msgs.FirstOrDefault();\n            Assert.IsNotNull(welcomeMsg);\n            WelcomeMessageValue val = welcomeMsg.Value;\n            Assert.IsNotNull(val);\n            WelcomeMessageRule rule = val.WelcomeMessageRule;\n            Assert.IsNotNull(rule);\n            Assert.AreEqual(\"950225380517937152\", rule.ID);\n            Assert.AreEqual(\"1515386359706\", rule.CreatedTimestamp);\n            Assert.AreEqual(\"950134376347574276\", rule.WelcomeMessageID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithShowQuery_ReplacesInputParams()\n        {\n            const ulong ID = 5;\n\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ShowMessage,\n                ID = ID\n            };\n\n            List<WelcomeMessage> msgs = wmReqProc.ProcessResults(TestQuerySingleWelcomeMessageResponse);\n\n            WelcomeMessage wm = msgs.First();\n\n            Assert.AreEqual(ID, wm.ID);\n        }\n\n        [TestMethod]\n        public void ProcessResults_WithListQuery_ReplacesInputParams()\n        {\n            const int Count = 4;\n            const string Cursor = \"ABC123\";\n\n            var dmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage>\n            {\n                BaseUrl = \"https://api.twitter.com/1.1/\",\n                Type = WelcomeMessageType.ListMessages,\n                Count = Count,\n                Cursor = Cursor\n            };\n\n            List<WelcomeMessage> msgs = dmReqProc.ProcessResults(TestQueryMultipleWelcomeMessageResponses);\n\n            WelcomeMessage wm = msgs.First();\n\n            Assert.AreEqual(Count, wm.Count);\n            Assert.AreEqual(Cursor, wm.Cursor);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithMissingType_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n            var parameters = new Dictionary<string, string>();\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => wmReqProc.BuildUrl(parameters));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        [TestMethod]\n        public void BuildUrl_WithNullParamDictionary_Throws()\n        {\n            var wmReqProc = new WelcomeMessageRequestProcessor<WelcomeMessage> { BaseUrl = \"https://api.twitter.com/1.1/\" };\n\n            ArgumentException ex = L2TAssert.Throws<ArgumentException>(() => wmReqProc.BuildUrl(null));\n\n            Assert.AreEqual(\"Type\", ex.ParamName);\n        }\n\n        #region Response Strings\n\n        public const string TestQuerySingleWelcomeMessageResponse = @\"{\n\t\"\"welcome_message\"\": {\n\t\t\"\"id\"\": \"\"950134376347574276\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515364662621\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n            }\n        },\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        const string TestQuerySingleWelcomeMessageRuleResponse = @\"{\n\t\"\"welcome_message_rule\"\": {\n\t\t\"\"id\"\": \"\"950225380517937152\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515386359706\"\",\n\t\t\"\"welcome_message_id\"\": \"\"950134376347574276\"\"\n\t}\n}\";\n\n        public const string TestQueryMultipleWelcomeMessageResponses = @\"{\n\t\"\"next_cursor\"\": \"\"OTQ5NzczMTIzOTc2NDQ1OTU3\"\",\n\t\"\"welcome_messages\"\": [{\n\t\t\"\"id\"\": \"\"945484689657102340\"\",\n\t\t\"\"created_timestamp\"\": \"\"1514256090927\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n    }\n},\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t{\n\t\t\"\"id\"\": \"\"949450173926617092\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515201536052\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n\t\t\t}\n\t\t},\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t},\n\t{\n\t\t\"\"id\"\": \"\"949765733034033156\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515276771206\"\",\n\t\t\"\"message_data\"\": {\n\t\t\t\"\"text\"\": \"\"Welcome!\"\",\n\t\t\t\"\"entities\"\": {\n\t\t\t\t\"\"hashtags\"\": [],\n\t\t\t\t\"\"symbols\"\": [],\n\t\t\t\t\"\"user_mentions\"\": [],\n\t\t\t\t\"\"urls\"\": []\n\t\t\t}\n\t\t},\n\t\t\"\"source_app_id\"\": \"\"472356\"\",\n\t\t\"\"name\"\": \"\"New Welcome Message\"\"\n\t}],\n\t\"\"apps\"\": {\n\t\t\"\"472356\"\": {\n\t\t\t\"\"id\"\": \"\"472356\"\",\n\t\t\t\"\"name\"\": \"\"LINQ to Tweeter\"\",\n\t\t\t\"\"url\"\": \"\"https:\\/\\/github.com\\/JoeMayo\\/LinqToTwitter\"\"\n\t\t}\n\t}\n}\";\n\n        public const string TestQueryMultipleRuleResponses = @\"{\n\t\"\"welcome_message_rules\"\": [{\n\t\t\"\"id\"\": \"\"949450720239001600\"\",\n\t\t\"\"created_timestamp\"\": \"\"1515201666303\"\",\n\t\t\"\"welcome_message_id\"\": \"\"949450173926617092\"\"\n\t}]\n}\";\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/LinqToTwitter6/LinqToTwitter.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.30021.99\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter\", \"LinqToTwitter\\LinqToTwitter.csproj\", \"{C82B4276-D12F-4FA6-9E4F-B0FD70329A54}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter.Tests\", \"LinqToTwitter.Tests\\LinqToTwitter.Tests.csproj\", \"{A71CDC94-BF90-4BD1-9CAE-6622EF30D883}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ConsoleDemo.CSharp\", \"..\\..\\Samples\\LinqToTwitter6\\Console\\ConsoleDemo.CSharp\\ConsoleDemo.CSharp\\ConsoleDemo.CSharp.csproj\", \"{627303B8-0122-4E9D-B2D9-047B04339CE1}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{C82B4276-D12F-4FA6-9E4F-B0FD70329A54} = {C82B4276-D12F-4FA6-9E4F-B0FD70329A54}\n\tEndProjectSection\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LinqToTwitter.AspNet\", \"LinqToTwitter.AspNet\\LinqToTwitter.AspNet.csproj\", \"{E7FE52CB-CED8-4E4C-BFBC-BF7AB638B9B6}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{6BD04CCA-E853-46FC-A501-06104E5429A5}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.editorconfig = .editorconfig\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{C82B4276-D12F-4FA6-9E4F-B0FD70329A54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C82B4276-D12F-4FA6-9E4F-B0FD70329A54}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C82B4276-D12F-4FA6-9E4F-B0FD70329A54}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C82B4276-D12F-4FA6-9E4F-B0FD70329A54}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A71CDC94-BF90-4BD1-9CAE-6622EF30D883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A71CDC94-BF90-4BD1-9CAE-6622EF30D883}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A71CDC94-BF90-4BD1-9CAE-6622EF30D883}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A71CDC94-BF90-4BD1-9CAE-6622EF30D883}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{627303B8-0122-4E9D-B2D9-047B04339CE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{627303B8-0122-4E9D-B2D9-047B04339CE1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{627303B8-0122-4E9D-B2D9-047B04339CE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{627303B8-0122-4E9D-B2D9-047B04339CE1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E7FE52CB-CED8-4E4C-BFBC-BF7AB638B9B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E7FE52CB-CED8-4E4C-BFBC-BF7AB638B9B6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E7FE52CB-CED8-4E4C-BFBC-BF7AB638B9B6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E7FE52CB-CED8-4E4C-BFBC-BF7AB638B9B6}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {8F942A1D-E33A-488A-B8A5-F15A81CF5BB1}\n\tEndGlobalSection\nEndGlobal\n"
  }
]